面灵AI

腾讯后端开发岗面经 11

时间
2025-04
来源
牛客网

《面试题目》

  1. YOLOv8 的性能怎么样?
  2. Go 语言有哪些常用数据结构?
  3. Go map 的桶是否有限制?扩容如何进行?
  4. 协程之间如何通信?Channel 的原理是什么?
  5. 多个协程监听同一个 channel 时,数据如何唤醒消费者?
  6. TCP 粘包是怎么产生的?
  7. UDP 是否存在粘包?只读取半个 UDP 包会怎样?
  8. UDP 包头有哪些字段?
  9. Linux 内存不足时如何查看?看到的是实际内存还是虚拟内存?
  10. 虚拟内存如何映射到物理地址?
  11. MySQL 事务是怎么实现的?
  12. 两个线程同时访问数据库时,事务可见性如何判断?
  13. Go 的 map 和切片有什么区别?
  14. channel 缓冲区满时读写会发生什么?
  15. 分布式锁过期但业务仍在执行怎么办?

《参考解析》

  1. Channel 通过环形队列、发送等待队列和接收等待队列协调 goroutine;无缓冲 channel 需要发送与接收同时就绪,有缓冲 channel 则可暂存元素。
  2. TCP 是字节流,必须由应用层定义消息边界,可用固定长度、长度前缀、分隔符或 TLV 解码。UDP 保留报文边界,接收缓冲区不足时通常截断该报文。
  3. 虚拟内存通过页表把虚拟页映射到物理页,并提供隔离、按需分页和更大的地址空间;工具如 free、vmstat、top 需结合 swap 一起判断压力。
  4. 事务可见性由隔离级别、MVCC 快照和锁共同决定。未提交写入对其他事务通常不可见,提交后的可见时刻取决于隔离级别和快照建立时间。
  5. 分布式锁应使用唯一持有者标识、租约续期和看门狗,并在业务完成后校验标识再释放;关键操作还应带 fencing token,防止旧持有者继续写入。