一、八股
OS
1.内存分配过程中的错误
第一种是内存分配失败,malloc 的指针是 nullptr 的,直接访问错误;第二种是内存分配成功但是未初始化,误以为默认有零值存在;第三种是内存分配成功但是访问越界。
第四种是内存没有释放出现内存泄漏,第五种是内存释放了但是还在访问。
2.多处理器是怎么实现原子性操作的
主要是通过缓存锁或者总线锁,首先通过缓存一致性协议保证进程对缓存行的独占,如果获取了独占权,其他进程访问会失效或者等待,如果是不能获得缓存行的情况需要对总线加锁,在持有锁期间其他进程不能访问内容,优先使用缓存锁,次选总线锁。
3.交换区有哪些注意点
交换区位于磁盘,通常是一块连续的区域用于存储完整的进程。
进程执行的时间要比交换的时间长,当出现系统负载升高,或者缺页频繁发生的时候需要把一部分进程换出直到性能不再下降。
4.线程池有哪些参数
有核心线程数,最大线程数,任务队列,非核心线程的存活时间,拒绝策略,CPU 密集型任务线程数接近核心的数量,通常多 1,如果是 IO 密集型的任务可以有更多线程,当系统负载升高就增加最大线程数。
复习计网:
1.一次完整的 RPC 请求的过程
首先请求方像调用本地函数一样去调用 RPC,然后序列化内容,包括函数名和参数,然后去由 TCP 封装成段,并经过 ip 层的路由,等由驱动网卡异步发送,在接收方把数据反序列化,并去调用对应的业务服务,业务服务的结果再序列化返回给客户端,由客户端反序列化得到最终结果。
2.由应用层到发送发生了什么
首先是序列化,然后 TCP 协议把数据根据 MSS 分段,并增加头部字段包括序号,确认号,然后进行 ip层路由,并在数据链路里封装成帧并由驱动网卡把数据异步发送给对端。
3.TCP 连接对端进程退出,机器崩溃或者网络不通分别发生什么
如果是进程正常退出会发送 FIN,可以 read 到 0 判断连接断开,如果是异常退出会发送 RST,可以放弃或者重建连接。
机器崩溃或者网络不通可以通过心跳机制发现,TCP 的 keepalive 或者应用层使用 ping 等根据响应判断连接是否有效决定后续怎么做。