分享一下最近的面試題,都是大廠

樂觀的摸一摸頭發表於2020-02-29

前言

  • 定位大概是中高階,這個階段主要考察的是原理相關的東西,語法層面幾乎不會問。
  • 建議不要去背面試題,因為大部分問題都會追問,是不是理解了一問就問得出來。面試題只是幫助我們瞭解自己技術方面的缺陷,背幾個面試題對自己沒有任何幫助。
  • 獲取答案的方式在每個標題後面的括號裡,都是書或者原始碼,系統性補充知識最佳途徑就是經典書籍和優質原始碼,網上部落格知識點過於零散,難以深入。redis和zend vm的核心程式碼強烈推薦大家去看一下,很有幫助

作業系統(《CSAPP》/《APUE》)

  • IO多路複用是什麼?有哪些api?
  • select和epoll的區別?水平觸發和邊緣觸發的區別是啥?使用的時候需要注意什麼?
  • epoll儲存描述符的資料結構是什麼?
  • select有描述符限制嗎?是多少?
  • 程式/執行緒/協程區別?go和swoole的協程實現有啥區別?(分配資源的基本單位/執行和排程的基本單位/使用者執行緒,M:N模型和N:1模型)

PHP(php原始碼,主流php框架原始碼)

  • 描述一下cli模式下的幾個生命週期?
  • php-fpm執行機制?(master管理,worker 迴圈accept)
  • php-fpm模式下,kill -9 master-pid,會怎麼樣?kill matser-pid呢?(訊號機制)
  • 記憶體分配流程?為什麼要這麼設計?
  • GC的出現是為了解決什麼問題?什麼時候會觸發GC?說下大概流程
  • php裡的陣列是怎麼實現的?(這裡要注意下php5和php7實現的區別,最佳化了非常多)
  • nginx和php-fpm的通訊機制?fast-cgi和cgi區別?
  • php-fpm建立worker程式的規則是什麼?不同場景下怎麼選擇?
  • php和mysql的通訊機制?長連結和短連結啥區別?怎麼實現的?連線池要怎麼實現?
  • swoole協程的原理?(遇到阻塞時引發php棧和c棧的切換,細節可以參考下我的文章)
  • 依賴注入是什麼?如何實現的?能解決什麼問題?(程式碼層面不再依賴具體實現,解耦)

mysql(《高效能mysql》/《mysql技術內幕 innodb儲存引擎》)

  • innodb的索引組織方式?(聚簇索引必須要很清楚,注意innodb聚簇索引葉子結點儲存的是完整資料,innodb普通索引葉子儲存的是記錄的主鍵,myisam索引葉子儲存的是記錄的位置/偏移量)
  • B+樹的結構和插入細節?為什麼主鍵一般都要自增?和B樹什麼區別?為什麼索引要使用B+樹不是B樹也不是其他的平衡樹?為什麼redis可以用跳錶?(關鍵詞:頁的分裂,隨機IO,快取體系)
  • 常見的最佳化(這裡我就不展開了,主要考察覆蓋索引查詢和最左匹配,其實只要清楚innodb索引的結構,這些都不需要記憶,自然而然推匯出來的)
  • redolog/undolog/binlog的區別?binlog的幾種格式?說下兩階段提交?
  • 事務隔離級別和不同級別會出現的問題,innodb預設哪個級別?MVCC怎麼實現的?快照讀和當前讀有啥區別?幻讀的問題怎麼解決?
  • 死鎖什麼時候會出現?應用層應該怎麼做避免死鎖?mysql是怎麼處理死鎖的呢?
  • int佔多少位元組?bigint呢?int(3)和int(11)有區別嗎?可以往int(3)裡存1億嗎?varchar最長多少?
  • sql的執行流程(原始sql->詞法語法分析生成AST->關係代數表示式(邏輯計劃)->邏輯最佳化(謂詞下推/常量傳遞)->物理查詢最佳化(計算最佳cost路徑,掃表還是使用索引,join演算法)->執行,僅做參考)

redis(redis原始碼)

  • sds的結構是什麼?為什麼要存長度?跟c裡的字串有什麼區別?(關鍵詞:獲取長度複雜度O(1)和O(n),二進位制安全,儲存\0,跟C庫字串函式可以通用)
  • hash怎麼實現的?怎麼解決hash衝突?除了hashTable還有別的嗎?
  • zset怎麼實現的?跳錶是怎麼插入的?為什麼選擇跳錶不用其他平衡二叉樹?除了跳錶還有別的嗎?
  • rehash過程?會主動rehash嗎?
  • 用redis可以實現佇列嗎?有什麼優點和缺點?
  • 用redis怎麼實現一個延時佇列?
  • rdb和aof過程?rdb為什麼可以用建立子程式的方式進行?(這裡考察一個cow)這兩種持久化方式會丟資料嗎?
  • redis為什麼快?(主要考察一個IO多路複用和單執行緒不加鎖)
  • 一致性雜湊是什麼?節點較少時資料分佈不均勻怎麼辦?
  • 簡單說下幾種key的淘汰策略,redis裡的lru演算法,什麼時候會觸發?實現細節是什麼?怎麼保證淘汰合理的key?
  • lua指令碼的作用是什麼?
  • 快取擊穿/穿透/雪崩的處理策略

nginx

  • LVS和Nginx分別作用在osi哪一層?
  • 負載均衡演算法

資料結構

  • 布隆過濾器,什麼時候用?優點是什麼?

演算法

  • leetcode easy級別的題目,具體我就不寫了,難度比較低
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章