美团暑期实习后端面试记录

美团暑期实习后端面试记录

寄了,太紧张了,很多基础八股文没想起来。

项目

  • 项目相关,难点,如何解决

编程题

  • 二叉树层序遍历打印
  • 反转链表一个区间

操作系统

  • 什么是临界区
    • 临界资源:同一时间只允许一个进程使用的共享资源
    • 对临界资源进行访问的那段代码称为临界区。为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查
    • 使用临界区时,一般不允许其运行时间过长,只要运行在临界区的线程还没有离开,其他所有进入此临界区的线程都会被挂起而进入等待状态
  • 进程间通信有哪些
    • 管道:只能在父子进程或者兄弟进程中使用
    • 命名管道(FIFO):去除了管道只能在父子进程中使用的限制
    • 消息队列
      • 可以独立于读写进程存在
      • 避免了 FIFO 的同步阻塞问题,即进程把消息放入队列就能继续运行
      • 读进程可以根据消息类型有选择地接收消息
    • 信号量 / 互斥量:信号量等于 0 时休眠,为多个进程提供对共享数据对象的访问
    • 共享储存
      • 允许多个进程共享一个给定的存储区
      • 需要用信号量同步
      • 多个进程可以使用同一个文件的方式实现共享内存
    • 套接字:可以用于不同机器的通信
  • 死锁的四个必要条件
    • 互斥:资源不能共享
    • 不可抢占:已经分配的资源不能被抢占
    • 占用并等待:已经得到资源的进程可以继续申请新的资源
    • 环路等待:系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源
  • 满足了这四个条件就一定会发生死锁吗:不一定
  • 怎么避免死锁
    • 在程序运行时对即将进入的状态判断,拒绝进入不安全的状态
    • 安全状态:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的
  • 怎么预防死锁
    • 破坏四个必要条件之一
  • 为什么要加锁
    • 使共享资源同一时间只能由一个进程访问,避免出错

计算机网络

  • TCP 是怎么保证可靠传输的
    • 超时重传-确认机制:保证包不会丢失
    • 首部校验和:保证包不会传输出错
    • 流量控制:接收方告诉发送方发送窗口的大小,避免接收方因缓存不足而丢包
    • 拥塞控制:降低整个网络的拥挤程度
  • 浏览器输入网址后发生了什么
  • 数据是如何根据 IP 地址发送到目标主机的
  • 怎么追踪分组到目的地经过了多少跳:traceroute
    • 发送无法交付的 UDP
    • 从 TLL = 1 开始依次增加 TTL,如果超时就增加 TTL
    • 直到返回 ICMP 终点不可达差错报文

MySQL

  • MySQL 用的什么索引:B+ 树
  • 为什么要用 B+ 树,不用普通的二叉树红黑树哈希索引
    • 二叉树、红黑树都是二叉树,相同的数据树的高度会更高,磁盘 IO 次数更多,B+ 树是多路树
    • 哈希索引是无序的,不能部分查找或范围查找,无法用于排序与分组
  • 为什么不用 B 树
    • 磁盘一次会读入一整个块,树的每个节点都会使用一整个块的内存,B+ 树的内部节点只储存索引,不储存值,同样的内存空间大小下能储存更多的索引,树高更低
    • B+ 树叶子节点是有序链表且包含了父节点,区间查找更加方便(B 树的父节点在内部节点中,查找一个区间需要中序遍历)
    • B+ 树查询时间稳定,因为数据都只储存在叶节点中