面试基础题总结

来源:互联网 发布:淘宝V6会员网贷 编辑:程序博客网 时间:2024/04/30 13:22

计算机网络:

  1. TIME_WAIT 的作用,为什么要等待两个MSL,一个行吗;
    • 在TCP四次挥手的过程中,当一方发起断开连接请求时,发送FIN报文,进入FIN_WAIT1。
    • 被动方收到FIN报文后,有可能还有数据要发送给主动发,故会先回应一个ACK报文,进入CLOSE_WAIT。
    • 主动方收到ACK后进入FIN_WAIT2;然后被动方继续发送要发送的数据,结束之后再发FIN+ACK报文,进入LAST_ACK。
    • 主动方收到FIN后,发送ACK给被动方,然后进入TIME_WAIT状态,会经历两个MSL(最大报文生存周期),原因是自己的报文可能丢失,故被动方经过2个MSL还没收到ACK就认为自己的FIN报文丢失了,再次重发FIN,而主动方发送ACK后最多经过2个MSL,就会收到被动方重发的FIN。如果主动方只等待一个MSL则如果最后一个ACK丢失,被动方会才重发FIN,如果主动方又重建了一个新连接那么就可能再次收到FIN;而TCP协议规定,在TIME_WAIT期间是不能新建实体连接的。
  2. Socket 编程,手写 Client 和多线程 Server
  3. P 头组成;
  4. synchronized 原理;

C++:

  1. C++ 重载和重写的区别;

    总结如下:

    • 成员函数重载特征:
      a 相同的范围(在同一个类中)
      b 函数名字相同
      c 参数不同
      d virtual关键字可有可无
    • 重写(覆盖)是指派生类函数覆盖基类函数,特征是:
      a 不同的范围,分别位于基类和派生类中
      b 函数的名字相同
      c 参数相同
      d 基类函数必须有virtual关键字
    • 重定义(隐藏)是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
      a 如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。
      b 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。
  2. C++ 复制构造函数;

  3. 面向接口编程的缺点;
  4. 继承和多态的区别;
  5. 如何初始化类中的常成员变量(参数列表)
  6. 面向对象编程的三要素:继承、封装、多态

设计模式

  1. 设计模式 Adapter;
  2. 工厂模式
  3. 观察者模式
  4. 写出面向对象的五个基本设计原则
  5. 单一职责原则 开放封闭原则 Liskov替换原则(里氏替换原则) 依赖倒 置原则 接口隔离原则

算法与数据结构:

1.最大栈、最小栈;
2.数组第 K 小值;
3.判断一棵二叉树是否是 BST
4.求解链表交点,求解带环链表交点;
5.求第 K 个丑数;
6.打印树的每一层最右侧节点
7.红黑树最左节点和最右节点交换;
8.手写快排,如何改进;
9.并查集
10.topK问题


概率论:

  1. 贝叶斯

操作系统:

  1. 多线程,锁;
  2. 协程 vs. 线程 vs. 进程;
  3. 信号量,使用场景;
  4. synchronized 原理,线程池介绍,引入线程池会有什么问题
  5. 同步与互斥

数据库:

  1. Redis 持久化;

项目:

  1. 项目介绍;
  2. 运用知识:
  3. 正则表达式,ab*c 匹配的字符串及其状态机;
  4. 机器学习与深度学习的区别。