面经

  • 多态在编程中起什么作用?(对同一个接口,进行不同的实现)

  • 数据库 ACID 是什么?(原子性、一致性、隔离性、持久性)

  • 数据库的隔离级别分别有哪些?分别会出现哪些问题?(读未提交、读提交、可重复读、串行化)

  • TCPUDP 的区别?

    • TCP 是可靠的、面向连接的、基于字节流的传输层协议;
    • UDP 是不可靠的、无连接的、基于报文的传输层协议;
  • UDP 不可靠,为什么还要用?

    • 正是因为 不可靠,所以带来了很多的优点:更快、更轻、更灵活;
  • HTTPS 证书伪造的可能性?(HTTPS 证书理论上不是不能被伪造,但直接伪造一个被浏览器信任的证书非常难,因为需要受信任 CA 的签名)

  • B树B+树 的区别?

    • B+ 树的非叶子节点不存放数据,只存放索引,支持在叶子节点层进行范围查询;
    • 由于 B+ 树的非叶子节点只存放索引项,不存放数据,因此可以一个磁盘页可以存放更多的索引项,导致 B+ 树的高度不高,因此每次访问叶子节点的时候,需要对的磁盘 IO 更少;
  • 服务器会不会存在 ping 得通,但是 tcp 无法连接得状况?

    • ping 用的是 ICMPTCP 连接用的是 TCP 协议 + 目标端口;
    • ICMP 通,只说明:网络层大体可达,对方主机大概率在线;
    • TCP 连不上,说明:对方某个端口不可用或者防火墙把 TCP 拦了;
  • 反过来呢? tcp 可以连接,但是 ping 不通?

    • ping 用的是 ICMPTCP 连接用的是 TCP + 端口
    • 所以只要网络策略是:禁止 ICMP 但允许某个 TCP 端口,就会出现上述问题;
  • 两个进程的虚拟地址有没有可能相同?

    • 有可能,而且很常见。每个进程都有独立的虚拟地址空间和页表,虚拟地址只在本进程内有意义,不要求全局唯一。两个进程即使使用相同的虚拟地址,也可以映射到不同的物理内存;如果使用共享内存或共享库,也可能映射到相同的物理页。
  • 进程的虚拟地址到物理地址的转换由谁来配置,可以让用户做嘛?

    • 虚拟地址到物理地址的转换是由 MMU 硬件完成的,但 MMU 依赖 页表 工作,而页表 是由 操作系统内核 建立和维护的。
    • 用户态程序不能直接配置虚拟地址到物理地址的映射关系,只能通过 mmapbrk 等系统调用向内核申请内存,最终的映射由内核决定。
  • Linux 中,如何查看一个端口的占用情况?(ss -lntp | grep 8080

  • kafka 的组成

  • kafka 如何实现高吞吐和低延迟

    • 顺序读写: 把消息追加写入日志,避免随机 IO,磁盘效率高
    • 零拷贝: 减少用户态和内核态之间的数据拷贝,降低 CPU 开销
    • 消息压缩: 减少网络传输的数据量,提高吞吐
    • 分批发送: ProducerBroker 都支持 batch,摊薄网络开销和请求开销