1. TCP可靠性如何保证? 答:有很多方面,比如校验和,序列号,确认应答,超时重传,流量,拥塞控制等等。
    2. 控制网络拥塞,目的是什么,为什么不能通过预估网络带宽进行拥塞控制呢? 在网络拥塞时释放带宽,实际生产中不可控的。
    3. 流量控制,目的是什么? 减小报文丢失的概率,主要通过滑动窗口协议来实现(分组无差错,有序接收,流量控制)。 拥塞控制作用于网络,防止网络负载过大; 流量控制主要是在数据的发送者和接收者之间,防止报文丢失。
    4. 在一个TCP连接中,客户端到服务器链路中断,服务器到客户端还是通的,会出现什么异常状况?(TCP 的 keepalive 机制) 服务器有保活定时器,不断发送信号,一定时间后断开连接。
    5. 多线程解决了什么问题? 一个进程可以同时执行多个进程,提升CPU利用率。
    6. 同步非阻塞IO优点是什么?减少了阻塞时间有什么用?
    7. 在cpu拉满的情况下,linux的timefd定时会出现延时吗?如何保证没有延时的呢?(软中断,进程优先级),这个软中断是由谁发起的呢(内核)?
    8. 多线程和多进程有什么区别?进程切换和线程切换
    9. 进程间通信
    10. 多进程资源互斥
    11. 给定一个原子变量,如何实现自旋锁?
    12. 读写锁应用场景
    13. 智能指针,shared_ptr线程安全吗
    14. 算法题:
      | 1
      2
      3
      4
      5
      6
      7
      8
      9
      10 | 有若干个任务的执行记录,每条记录包含开始时间和终止时间。这些任务可能是并行执行的,时间上会交错。
      请求出从最开始有记录到最终一条记录之间,有多长时间是完全没有任何任务在执行的。
      结构:
      struct Task { ``// 任务起始和结束时间
      ``int begin;
      ``int end;
      }
      接口:
      // 参数:所有任务历史记录
      // 返回值:中间的空洞时间总长度 | | —- | —- |

    15. 事务特性:原子性、一致性(执行前后必须处理一致性状态)、隔离性(多个用户并发访问时,互相不影响)、持久性(事务提交后,永久改变);

    16. 如果不考虑隔离性,可能会发生的问题:脏读(在一个事务处理过程中读取了另一个未提交的事务中的数据)、不可重复读(每次查询,返回的数据值不同)、虚读(读取了另一条已经提交的事务);
    17. 隔离级别:串行化、可重复读(MySQL默认隔离级别,可能会有幻读现象)、读已提交(不可重复读)、读未提交(存在所有问题)。
    18. InnoDB和MyISAM区别

    image.png

    1. MVCC:多版本并发控制,储存多个版本的快照,采用时间戳或者事务ID来标记当前数据库版本;
    2. 范式:一、列不可拆分;二、主键唯一;三、非主键直接依赖主属性。
    3. 聚簇索引/非聚簇:
    4. 复合索引:最左匹配,在检索数据时从联合索引的最左边开始匹配;
    5. 回表查询:先定位主键值,再定位行记录,需要扫描两遍索引树。
    6. UDP如何实现可靠传输?1、添加seq/ack机制,确保数据发送到对端;2、添加发送和接收缓冲区,用于用户超时重传;3、超时重传机制。
    7. 监听端口的命令:netstat;
    8. 访问IP+Port,被拒绝的原因是什么:监听地址为本机。
    9. MySQL调优:四个维度:硬件、系统配置、数据库表结构、SQL及索引
      1. 合适的存储引擎;
      2. 保证从内存读取数据,并将数据保存在内存;
      3. 定期优化重建数据库;
      4. 减少磁盘写入操作;
      5. 提高磁盘读写速度;
      6. 充分使用索引;
    10. Redis:专注于特定领域,速度非常快,主要适合较小数据量的高性能操作和运算,因为物理内存容量有限,不能做海量数据的高性能读写。
    11. left join、right join和 inner join:leftJoin:返回的记录总数一定大于等于左Table、rightJoin:返回的记录总数一定大于等于右Table、innerJoin:取交集。
    12. 调试工具:strace(追踪系统调用)、gdb(调试、分析coredump);