腾讯后端开发岗面经 11
- 时间
- 2025-04
- 来源
- 牛客网
《面试题目》
- YOLOv8 的性能怎么样?
- Go 语言有哪些常用数据结构?
- Go map 的桶是否有限制?扩容如何进行?
- 协程之间如何通信?Channel 的原理是什么?
- 多个协程监听同一个 channel 时,数据如何唤醒消费者?
- TCP 粘包是怎么产生的?
- UDP 是否存在粘包?只读取半个 UDP 包会怎样?
- UDP 包头有哪些字段?
- Linux 内存不足时如何查看?看到的是实际内存还是虚拟内存?
- 虚拟内存如何映射到物理地址?
- MySQL 事务是怎么实现的?
- 两个线程同时访问数据库时,事务可见性如何判断?
- Go 的 map 和切片有什么区别?
- channel 缓冲区满时读写会发生什么?
- 分布式锁过期但业务仍在执行怎么办?
《参考解析》
- Channel 通过环形队列、发送等待队列和接收等待队列协调 goroutine;无缓冲 channel 需要发送与接收同时就绪,有缓冲 channel 则可暂存元素。
- TCP 是字节流,必须由应用层定义消息边界,可用固定长度、长度前缀、分隔符或 TLV 解码。UDP 保留报文边界,接收缓冲区不足时通常截断该报文。
- 虚拟内存通过页表把虚拟页映射到物理页,并提供隔离、按需分页和更大的地址空间;工具如 free、vmstat、top 需结合 swap 一起判断压力。
- 事务可见性由隔离级别、MVCC 快照和锁共同决定。未提交写入对其他事务通常不可见,提交后的可见时刻取决于隔离级别和快照建立时间。
- 分布式锁应使用唯一持有者标识、租约续期和看门狗,并在业务完成后校验标识再释放;关键操作还应带 fencing token,防止旧持有者继续写入。