天天看点

2021-12-22面经摘录(字节飞书后端实习一面)

面经原文和解答

40min

自己介绍

操作系统

1.进程和线程的概念?

进程是指一次程序运行的过程,线程是进程中执行运算的最小的单位,是进程中的一个实体。

进程是cpu资源分配的最小单位,线程是cpu调度执行的最小单位,一个进程至少包含一个线程,进程与进程相互隔离互不影响,同一个进程内的线程共享进程资源,一个线程崩溃可能导致进程崩溃,但进程崩溃不会导致其他正在运行的进程崩溃

2.为什么进程上下文切换慢?

进程切换分为切换页目录以使用新的地址空间,切换内核栈和硬件上下文。线程上下文切换不需要切换虚拟内存空间,所以相对切换较快;

3.什么时候用多线程

多线程的使用主要是用来处理程序“在一部分上会阻塞”,“在另一部分上需要持续运行”的场合。多线程提高效率主要原因是多CPU和IO等待,多个CPU使得可以同时执行多个任务,每个线程相当于一个任务;

4.如果多个线程同时修改一个变量怎么办?

可通过加锁的方式,保证变量修改符合预期。

5.你了解哪些锁?

公平和非公平锁,可重入锁,自旋锁,独占锁(写锁),共享锁(读锁)

6.如何实现一个读写锁?

java-读写锁的实现原理

计网

1.syn的含义

同步序列编号

2.为什么要随机产生seq

出于网络安全的因素着想,防止伪造序列号进行攻击

3.SYN泛洪攻击

SYN泛洪攻击

4.http传输过程

1.建立TCP连接

2.Web浏览器向Web服务器发送请求命令

3.Web浏览器发送请求头信息,提交请求体。

4.Web服务器应答

5.Web服务器发送应答头信息

6.Web服务器向浏览器发送数据

7.Web服务器关闭TCP连接

5.7层结构,应用层有哪些协议

应用层:HTTP,FTP,SNMP

表示层,会话层,传输层,网络层,数据链路层,物理层

6. tcp有哪些可靠手段

1.将数据截断为合理的长度

2.超时重发

3.对于收到的请求,给出确认响应

4.校验出包有错,丢弃报文段,不给出响应。

5.对失序数据进行重排序,然后交给应用层

6.丢弃重复数据

7.TCP提供流量控制

7. 丢包了怎么办

对Send发送失败进行处理,常用解决方法有拆包、加包头、发送组合包。(在网上没有找到具体解释)

8.什么时候会产生ack冗余

报文乱序和丢包造成的

MySQL

1.索引知道吗?为什么索引能够查询的快?

索引是帮助mysql高效获取数据的数据结构;

InnoDB的索引结构为矮胖的B+树,可以很快地找到索引对应的数据

2.B+树结构是什么样的

n叉B+树

(1)B+树一个节点最多含有n个key

(2)B+树叶子节点保留所有key的信息,依照key大小排序

(3)所有非叶子节点看做key的索引

(4)数据对象的插入和删除仅仅在叶子节点进行

3.为什么叶子节点用到链表

使用范围查找的时候,只要找到那个边界值就可以通过指针去查找其他所需要的数据就不用再从根结点开始遍历,减少了所消耗的时间,增加了效率.

4.事务知道吗?acid什么含义

事务是逻辑上的一组操作,要么都执行,要么都不执行;

数据库事务可以保证多个对数据库的操作构成逻辑上的整体,要么全部执行成功,要么全部不执行。

原子性(Atomicity) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

一致性(Consistency): 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;

隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;

持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

5.原子性怎么实现的

undo log称之为回滚日志,每条数据的变化(insert/update/delete)都会产生一条记录,并且日志持久化到磁盘,undo log用来记录数据修改前的信息,比如说要插入一条记录,那么undo log就会记录一条删除该信息的语句,这样你需要回滚的时候那么undo log就会执行删除你之前插入的那条记录,达到没有修改前的状态,更新一个记录也会生成一条sql记录你更新前的字段状态,从而实现了原子性。

6.持久性怎么实现的

redo log叫重做日志,当事务提交的时候会把所有的修改信息存放在redo log中,并且会把redo log持久化到磁盘,当电脑重启后就会重新执行redo log的修改信息来恢复数据,这样就能够达到持久化的目的。

编程题

topK问题