腾讯(ieg), 抖音火山, 微软面经

腾讯(ieg), 抖音火山, 微软面经
最新回答
地球另一端的梦

2026-04-02 17:10:40

腾讯(IEG)后端开发面经

一面:

  • TCP三次握手与四次挥手:TCP三次握手用于建立连接,确保双方收发能力正常;四次挥手用于终止连接,因TCP是全双工,需分别确认发送和接收的终止。
  • TIME_WAIT与CLOSE_WAIT状态:

    TIME_WAIT:主动关闭方进入,确保最后一个ACK到达对方,并处理可能的重传,持续2MSL。

    CLOSE_WAIT:被动关闭方收到FIN后进入,等待应用处理剩余数据并发送FIN。

  • 大小端问题:

    大端(Big-Endian):高位字节存低地址,如网络协议。

    小端(Little-Endian):低位字节存低地址,如x86处理器。

    例子:0x12345678在大端机中地址递增方向为12 34 56 78,小端机则为78 56 34 12。

  • 协程:用户态轻量级线程,由程序控制调度,非操作系统内核管理,适用于高并发I/O密集型任务。
  • x86寄存器:

    通用寄存器:EAX(累加器)、EBX(基址)、ECX(计数器)、EDX(数据)。

    段寄存器:CS(代码段)、DS(数据段)。

    指令指针:EIP(下一条指令地址)。

  • I/O结束时操作系统唤醒进程机制:通过中断描述符表(IDT)关联中断号与处理程序,I/O完成时触发中断,操作系统根据中断号查找并执行处理程序,唤醒等待进程。
  • 数据包处理流程:网卡接收→DMA传输至内核缓冲区→协议栈处理(IP/TCP/UDP)→socket缓冲区→应用读取。
  • 算法题:大数相除:模拟手工除法,逐位计算商与余数,支持负数需处理符号。

二面:

  • Paxos算法:分布式系统一致性协议,通过提案(Prepare/Accept)阶段确保多数节点同意,解决非拜占庭故障下的一致性问题。
  • 分布式压力测试:模拟多用户并发请求,检测系统性能瓶颈,工具如JMeter、Locust。
抖音火山后端开发面经

一面:

  • TCP CLOSE_WAIT状态:被动关闭方收到FIN后进入,等待应用关闭连接,若长时间存在可能因程序未调用close()。
  • Redis限流实现:

    滑动窗口限流器:将时间划分为固定窗口,维护请求计数,滑动时重置旧窗口计数。

    时间复杂度:理想情况下O(1),因仅需更新当前窗口计数。

  • Redis跳表实现:多层链表结构,底层为有序链表,上层提供快速访问通道。

    时间复杂度:查找、插入、删除均为O(log n)。

  • 虚拟内存作用:

    隔离性:防止进程越界访问。

    效率:按需调页,减少物理内存占用。

    大地址空间:支持超过物理内存的进程。

  • 算法题:每K个节点反转链表:遍历链表,每K个节点为一组反转,需处理边界条件(如不足K个)。

二面:

  • Java内存分布:

    线程私有:程序计数器、虚拟机栈、本地方法栈。

    线程共享:堆、方法区。

  • 可重入锁:同一线程可多次获取锁,避免死锁,如ReentrantLock。
  • 算法题:最长无重复字符子串:滑动窗口法,维护字符集合,动态调整窗口起始位置。

三面:

  • B+树与B树区别:

    B+树:非叶子节点仅存键,数据存叶子节点,叶子节点链表连接,支持高效范围查询。

    B树:非叶子节点存键值对,数据可能存任意节点。

  • B+树查找复杂度:O(log n)。
  • B+树数据量估算:假设键大小为x字节,指针为y字节,节点大小为z字节,则每个节点可存(z)/(x+y)个键,树高为h时,数据量约为((z)/(x+y))^h。
  • 算法题:LRU实现:哈希表+双向链表,访问节点移至链表头部,淘汰尾部节点。
  • LFU思路:维护键访问频率,淘汰频率最低的键,相同频率时淘汰最久未访问的键。
微软软件开发面经

一面:

  • 链表找倒数第K个节点:双指针法,快指针先走K步,然后快慢指针同步移动,快指针到末尾时慢指针即为目标。
  • 二进制中1的个数:位运算技巧,如n&(n-1)消除最低位1,统计消除次数。
  • 脑筋急转弯:量水问题:通过8L→5L(剩3L)→5L倒入3L(剩2L)→8L空→2L倒入8L→5L再倒入8L(共4L)的步骤得到4L。

二面:

  • Java垃圾回收算法:

    标记-清除:标记无用对象,清除未标记对象,产生碎片。

    复制算法:将存活对象复制到另一内存空间,清理原空间,适用于新生代。

    标记-整理:标记存活对象,压缩整理内存,消除碎片。

    循环引用处理:可达性分析算法通过GC Roots判断对象是否存活,循环引用若不可达则被回收。

  • 算法题:矩形面积计算:

    初始解法:遍历所有点,统计在矩形内的点数,面积=点数×单位面积。

    优化:利用积分思想,计算x、y方向投影长度,面积=x长度×y长度。

    测试用例:包括正常矩形、边界重叠、点在边界上的情况。