大部分都是开放式问题,看面试者回答的程度逐渐往下问。
不问一些像语言特性、语法糖那种可以死记硬背,不需要理解的问题,更多考察面试者的编程/工程 经验和思维。
1. 系统
考察面试者对操作系统的了解程度,看基础功。
1.1 内存
说一下进程里的内存,是组织、管理的,例如申请一块内存,操作系统具体会做什么? ★★★✰
说一下逻辑内存地址,是怎么映射成物理内存地址?★★
1.2 调度
- 进程切换实际要做什么工作?如果了解协程,那协程切换又是怎么搞的?★★★
1.3 文件系统
- 操作系统从一个文件名,读取到具体的文件内容,实际干了什么事情?★★★★
2. 网络
考察面试者对网络常见问题的解决经验
2.1 tcp
先说一下三次握手,如果三次握手,client只做了第一次握手,就不管了,会引发服务器什么问题,有什么思路解决? ★★★
time_wait是啥?为啥会有time_wait?怎么解决time_wait过多的问题?★★
2.2 http
- http在弱网络具体会有哪些问题?怎么解决?★★★✰
3. 算法与数据结构
考察面试者的编程思维
有100个视频,100个用户,要统计每个视频被播放的uv,允许一定误差,怎么做?★
有1000000000个视频, 100个用户,要统计每个视频被播放的uv,允许一定误差,怎么做?★★
有100个视频, 1000000000个用户,要统计每个视频被播放的uv,允许一定误差,怎么做?★★
有1000000000个视频, 1000000000个用户,要统计每个视频被播放的uv,允许一定误差,怎么做?★★★★
从一堆人中,随机挑人,例如挑出A、B,便说A、B是一伙;C、D是一伙;挑出B、C是一伙,那么A、B、C、D都是一伙。然后随机挑出两个人,判断他们是否一伙,要怎么做?★★★★
LRU是怎么做的?存在哪些问题,要怎么解决?★★★
4. 组件
考察面试者对于常用组件的掌握程度。
4.1 mysql
- mysql索引是怎么回事?★★
- mysql的锁机制?写sql语句时,要怎么避免锁的粒度过大?★★★★
- mysql的事务是怎么做的?★★★★
4.2 redis
- redis如何做持久化?★★
- redis存在哪些性能问题?可以怎么解决?★★★
- redis的hash是怎么扩容的?★★
4.3 消息列队
- 你熟悉的这个消息队列具体工作原理是啥?存在哪些问题,怎么解决?★★★✰
- 容灾 ★★★
4.4 lsm
- leveldb/rocksdb 工作原理?读写流程?sst怎么合并?适用场景以及一些问题的优化方法 ★★★✰
- leveldb/rocksdb sst是怎么组织的,做了什么样的优化?★★★
5. 分布式
- raft/paxos 协议的原理?存在哪些问题?怎么优化?★★★★★
- raft/paxos只是日志同步,那怎么基于raft/paxos 做高性能的强一致系统?★★★★
- 如何扩缩容?★★★