大部分都是開放式問題,看面試者回答的程度逐漸往下問。
不問一些像語言特性、語法糖那種可以死記硬背,不需要理解的問題,更多考察面試者的編程/工程 經驗和思維。
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 做高性能的強一致系統?★★★★
- 如何擴縮容?★★★