面灵AI

腾讯后端开发岗面经 12

时间
2025-04
来源
牛客网

《面试题目》

  1. 数据库为什么使用 B+ 树而不是普通平衡树?B 树和 B+ 树有什么区别?
  2. MySQL 慢查询怎么优化?
  3. B+ 树索引怎么更新?
  4. C++ 引用是怎么实现的?
  5. C++ 中 map 和 unordered_map 的区别及时间复杂度是什么?
  6. malloc 返回的是虚拟地址吗?物理地址什么时候会被使用?
  7. Redis 和 MySQL 的主从复制分别怎么进行?
  8. 用户态和内核态有什么区别?进程间通信方式有哪些?
  9. 进程和线程有什么区别?
  10. URL 输入后到网页展示经历了哪些流程?
  11. HTTP 和 HTTPS 有什么区别?
  12. Redis 分布式锁怎么实现?
  13. JVM 内存结构和类加载过程是怎样的?
  14. 什么情况下会触发 Full GC?
  15. MySQL 的 redo log 存储什么内容?还有哪些日志?

《参考解析》

  1. B+ 树非叶节点只存键,叶节点存数据并通过链表连接,树高更低且适合范围扫描;B 树的内部节点也存数据,范围遍历和缓存局部性相对较差。
  2. 慢查询应先用慢日志和 EXPLAIN 定位,再检查索引、过滤条件、回表和排序;不能只靠盲目加索引,应结合实际执行计划和数据分布。
  3. Redis 锁通常用带唯一 token 的 SET NX EX 获取,释放时用 Lua 校验 token 后删除;续期要避免锁过期而业务仍在执行。
  4. HTTPS 在 TLS 中完成身份认证、密钥协商和加密传输。HTTP/2 支持多路复用,HTTP/3 则基于 QUIC/UDP,减少队头阻塞。
  5. InnoDB 的 redo log 记录页修改以支持崩溃恢复;binlog 记录逻辑变更用于复制,undo log 用于回滚和 MVCC。