前言
面試了差不多兩個月,從bat到只有一個后端的小公司都面過,對面試常問的問題做一些總結。
八股文
網絡、web服務器
- 網絡模型
osi七層。tcp/ip4層
- tcp
三揮四握及其客戶端與服務器的狀態、排查,擁塞控制,滑動窗口,報文結構,為什么可靠,粘包
- upd
一般和tcp做對比,需了解基礎
- http
http1,http1.1(和tcp keep-alive作區分),http2都需了解,https的ssl協議需了解
- nginx
工作模式,一些簡單配置,用途,負載均衡策略
數據庫(mysql)
- 索引結構
為什么使用b+tree,b+tree結構,什么時候會退化,和b tree、skiplist 比較
- 索引
類型,使用索引的優劣(就是空間換時間),索引的使用
- 引擎
一般就說說myisam與innodb異同。
- 事務
概念,隔離級別以及解決的問題,mvcc以及實現,redolog,undolog。分布式事務2PX 3PX
- 日志
binlog redolog undolog relaylog 慢日志 概念功能
- 構架
分庫分表,主從,讀寫分離
- 如果問mysql優化 建議從構架設計、數據庫設計、sql三個方面說
緩存(redis)
- 為什么單線程也高效
數據都在內部里,io多路復用,多線程上下文切換的損耗
- string hash list set sortset 的底層結構和場景必須清除的了解
我之前在《redis設計實現》看 list 由linkedlist實現,后來發現之后是升級quicklist節省內存空間。hashmap和skiplist是重點。
- redis主從過程
9個過程,百度就有
- cluster
槽 ,hash一致性,大key(拆),熱key(代碼實現負載均衡)
- 內存淘汰策略
lru 可對比朴素lru,innodb緩沖池的lru,lfu
- bitmap hyperloglog
- 過期鍵刪除
惰性 定期 結合
- 緩存與數據庫一致性
雙刪 延時雙刪 訂閱binlog
- 緩存穿透雪崩擊穿
提到布隆過濾器就要了解原理(位數組+幾個哈希函數)
- 故障轉移
參考raft
隊列
- 異步 削峰 解耦
- rabbitmq感覺沒啥好說的,kafka問就是不熟0.0
elasticsearch
- 基礎概念
- 單機數據寫入過程
為何准實時
- 多機數據讀取/寫入過程
協調節點與哈希路由算法
- 倒排索引
分詞, trim dictionary,跳表,trim index,postling list,fst,bitmap
linux
- top free 問的多點
- epoll select poll
- 協程 上下文切換 用戶態內核態
算法
- 除了一線廠,其實只要了解一下幾個排序算法的實現、時間復雜度、優劣就行
- 面一線廠肯定要刷leetcode,感覺刷個300道差不多,字節的最難
項目
- 自己的項目一定要有通徹的了解,最好做一下總結,用到的技術不管是不是自己寫都要了解。有些場景的設計要思考為什么(沒有原因也要想個理由)
其他
- 如果用了微信小程序就要知道auth2
- 工作中看中什么? 無非就是平台/工資/項目/團隊
- 關於語言 我寫php的,感覺php也沒啥好問的,一般也就垃圾回收和swoole,php7特性
- 設計個連接池
后記
- 我准備面試大概用了一個月不到,后面的邊面邊看。感覺面一線廠還是不夠,面了幾次一面掛,菜的離譜。感覺准備面試也是對自己的提升,對業務和技術的理解都提升了很多,比如mysql很多圍繞磁盤io,redis很多圍繞使用更少內存
- 本來打算每次面試都更新的,后來覺得重復度很高就沒寫了
- 就寫了寫技術面,hr面。。。我被hrbp掛過兩次,就不誤人子弟了