第一

  1. 进程与线程的区别

    • 进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元
    • 一个进程可以有很多线程
    • 每个进程有自己的内存和资源,一个进程中的线程会共享这些内存和资源。
  2. PCB的结构

    • 进程状态
    • 标识符
    • 进程调度信息
    • 程序计数器
    • 上下文数据
  3. 分页和分段的区别

    • 段向用户提供二维地址空间;页向用户提供的是一维地址空间
    • 的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定
    • 段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制
  4. 怎么避免死锁(死锁预防)

    资源有序分配法

  5. 处理死锁的四种方法

    预防、避免、检测

  6. UDP如何借鉴TCP的性质实现一个TUDP?

    1.握手;2.超时重传(SEQ、ACK)

  7. 快排最糟糕的情况

    O(n^2)

  8. 红黑树的五大特征

    • 每个节点是红色或者黑色
    • 根节点是黑色
    • 叶子节点是红色
    • 红色节点的子节点是黑色(没有相邻的红色节点)
    • 每个节点到叶子节点的简单路径的黑色节点数相同
  9. JVM 如何判断对象是否存活

    引用链法

  10. 垃圾回收算法

    • 标记清除算法
    • 复制算法
    • 标记整理算法
    • 分代算法
      • 新生代(复制算法)
      • 老年代(标记整理算法)
  11. hashtable与HashMap

    线程安全、key/value能否为空

  12. HashMap 1.8 前后区别

    • 红黑树
    • 先插入再扩容
  13. ConcurrentHashMap 1.8 前后区别

    分段锁、synchronized与CAS

第二

  1. 负载均衡的原理

    通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求

  2. nginx 可以做几层的负载均衡?

    传输层、应用层

  3. 四层和七层的负载均衡的区别?

    1. 四层负载均衡仅能转发 TCP/IP 协议、UDP 协议、通常用来转发端口,如:TCP/22、udp/53
    2. 四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用 65535 个端口号)
    3. 四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同事的使用)
    4. 四层的转发效率比七层的高得多,但仅支持 TCP/IP 协议,不支持 HTTP 和 HTTPS 协议
    5. 通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡
    6. 七层负载均衡会终止网络流量并读取器中消息,它可以根据消息内容(如 URL 或 cookie)做出负载均衡决策
  4. nginx 单点失效怎么办?

    keepalived高可用

  5. sql 与 nosql 区别

    关系型与非关系型

  6. 关系型数据库的优点

    • 事务一致性:通过事务处理保持数据的一致性
    • 复杂查询:支持SQL,可以进行 JOIN 等复杂查询
    • 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解
    • 使用方便:通用的 SQL 语言使得操作关系型数据库非常方便
    • 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率
  7. 数据库隔离级别、传播机制,用来解决什么问题

    • 未提交读
    • 已提交读
    • 可重复读
    • 串行

第三

  1. HTTPS 与 HTTP

    利用SSL/TLS 来加密数据包

  2. TCP 如何保证可靠性

    1. 应用数据被分割成 TCP 认为最适合发送的数据块。
    2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
    3. **校验和:**TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
    4. TCP 的接收端会丢弃重复的数据。
    5. **流量控制:**TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
    6. **拥塞控制:**当网络拥塞时,减少数据的发送。
    7. **ARQ协议:**也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
    8. **超时重传:**当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  3. 拥塞控制的算法

    慢开始拥塞避免快重传快恢复

  4. 滑动窗口

    TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。

  5. 单链表快速找中间节点

    快慢指针

  6. JWT 的优缺点

    优点:无状态、可拓展

  7. 分布式事务协议

第四

  1. 进程间通信方式

    管道、信号量

  2. synchronized和volitale

    1. volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
    2. volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的
    3. volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性
    4. volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
    5. volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化
  3. synchronized 对象锁、类锁

  4. 内部类的分类及特点

    匿名内部类:适合于仅使用一次的类,属于局部内部类的特殊情况 实例内部类:内部类没有使用static修饰 静态内部类:内部类使用static修饰 局部内部类:在方法中的内部类

  5. 隐式引用

  6. 为什么需要双亲委派机制

    先检查是否已经被加载过,若没有加载则调用父加载器的loadClass方法, 如父加载器为空则默认使用启动类加载器作为父加载器。如果父类加载失败,抛出ClassNotFoundException 异常后,再调用自己的findClass方法进行加载。

    双亲委派机制能够保证多加载器加载某个类时,最终都是由一个加载器加载,确保最终加载结果相同。