腾讯后端一面面经
面试题目
一、自我介绍 / 项目
- 自我介绍
- 实习经历
二、Java / 数据结构 3. Java 进程之间怎么通信 4. Java 线程池有了解吗 5. 哈希表冲突怎么解决 6. 红黑树结构 7. 什么是红 / 黑色节点 8. 除了 Java 这种“桶挂链表、过长后红黑树化”的方案,还有什么其他哈希冲突解决方案 9. 拉链法是什么
三、MySQL 10. MySQL 引擎有哪些 11. MyISAM 有了解吗 12. MySQL 支持事务和外键吗 13. 事务隔离级别有哪些 14. 查询太慢怎么办 15. 数据太多、查询太慢,几十亿条数据怎么优化 16. 有了解过分表吗
四、Redis 17. Redis 有哪些常用数据结构 18. ZSet 底层用的什么数据结构 19. 讲一下跳表
五、操作系统 / Linux / 网络 20. 关于 OS 的问题 21. Linux 基础指令、常用指令 22. 怎么查进程、怎么看监听端口 23. TCP 几次握手,在干什么 24. HTTP 请求头里面有些什么
六、算法 / 场景题 25. 在一个 4G 的服务器上,有 1 亿个 int,要找前 1000 个最大的,怎么做 26. 上面这题的时间复杂度是多少 27. 1 亿个 int 大概占多少内存
参考解析
1. Java进程通信:包括管道(Pipe)、套接字(Socket)、内存共享、信号量等,Java中常通过Socket或NIO进行进程间通信。
2. 哈希冲突方案:除拉链法外,还有开放寻址法(线性探测、二次探测、双重哈希),其核心在于在原哈希表数组内寻找下一个空位。
3. 几十亿数据优化:核心在于分库分表、引入缓存(Redis)、读写分离、建立高效索引。需考虑冷热数据分离及数据分区策略。
4. Redis ZSet跳表:跳表通过多层级索引实现O(log n)查找效率,支持快速范围查询,弥补了链表查找慢的缺陷。
5. TCP三次握手:SYN->SYN+ACK->ACK,建立连接。作用是同步序列号、确认双方接收和发送能力正常。
6. 算法题(1亿int求Top 1000):使用最小堆,维护大小为1000的堆,遍历数据。空间复杂度O(K),时间复杂度O(NlogK)。内存计算:1亿*4字节 ≈ 400MB。