中級php 程序員需掌握的技能點

參考文章是java面試者經驗,但仍有借鑑之處。

1.分佈式鎖解決緩存重建併發的問題,並要求畫出實際的執行流程,數據庫也問的比較多,像事務的隔離級別,MySQL實現可重複讀的原理,索引

2.在數據庫主從同步的情況下,如果從庫同步主庫的數據延遲比較高,怎麼才能在寫到主庫後立刻能夠讀取到數據。

可以強制讀主庫

另一種方案就是在往主庫寫數據的時候,可以直接往內存緩存中寫一份,設置一個較短的過期時間,後面可以直接從緩存中讀到數據。

3.在加鎖的時候,用什麼鎖對象是內存佔用最小的

4.ElasticSearch的一些基礎以及它和mysql的區別在哪裏;

5.eureka 和 zookeeper 做服務發現的區別在哪裏;

6.分佈式限流有哪些方案,以及用線程池進行限流的缺陷是什麼,項目中系統日誌的處理;還有 JVM 模型,JMM 模型,垃圾回收機制,垃圾收集器等問題。

7.設計模式的使用,在項目中使用了哪些設計模式,對設計模式的幾個原則的理解。

8.redis和zookeeper如何實現分佈式鎖,redis的數據類型,一些具體命令,比如要獲取一個有序列表的前10個元素應該用什麼命令。

9.數據庫索引的使用,聚簇索引和非聚簇索引,沒有主鍵的話數據如何組織。

無主鍵會默認生成row_id生成索引

10.B+ 樹的原理,Innodb 引擎和 myisam 引擎的區別和使用場景,數據庫隔離級別和原理,MySQL的分庫分表,mq的可靠性和順序性,es插入數據的原理等。

11.框架源碼上,我畫出了源碼的執行流程,回答主要集中在代碼編寫層面,也可以從架構層面說下學到了哪些,我覺得後者更有高度。

12. redis 的單線程模型

13.之後聊了一些項目的情況,比如每日的訪問量有多少,qps多少,訂單量多少等數據,據此得出數據庫的訪問壓力如何。另外也深入問了使用分佈式事務的一些問題,還有分佈式事務在時間上的性能。

所以這裏給各位兄弟強調一下,對自己的項目一定要非常熟悉,各個點都要考慮到。

14.要開發一個新的api,需要考慮哪些方面,把所有要考慮的地方都說出來,大家可以說下邊界處理,高可用,併發問題,可擴展性,冪等性,重試機制等等

15.網絡這塊問的比較多,三次握手,四次揮手什麼的,還有整個網絡請求的執行流程,數據包的大小,對長連接的理解等

16.假如要實現一個最簡單的朋友圈,用戶可以看到朋友的朋友圈動態,朋友也可以看到用戶發的動態,然後問表的設計。

我說了自己的實現,像用戶表,好友表。面試官問有沒有更好的方式,我沒答上來,面試官表示這個輕易可能想不到,就問別的問題了.(我覺得可能是feed流,或者是消息推送拉取這種功能)

17.這裏主要考察jvm如何判斷一個對象是否可以被回收,是通過引用計數還是可達性分析,引用計數的方式會產生像上面代碼一樣的循環引用的問題,所以jvm沒有采用這種方式。

php中垃圾回收使用的是引用計數,如果可能是循環引用,會將計數--,如果是爲0,則說明循環引用了自身,可以被回收了

18.在sql的考察這塊,面試官看完我的答案後,又改了其中的需求,要求給出sql的實現,另外也問到了sql的執行效率。

這裏給大家強調一下,我面的基本上每家公司面試都會問到數據庫,所以這塊還是挺重要的,需要重點去看

19.找出有序數組中指定元素出現次數的問題,原來要求的時間複雜度是O(lgn),後來面試官說不要求任何時間空間複雜度,如何簡單的實現,我給出的方案是用HashMap,相同的key每出現一次,value加1

面試過100個數中,重複出現的數 使用異或 ^ (xor) 進行位運算,得到爲0(程序員小灰,還得再看)

20.jvm,併發是非常高頻被問到的地方,在開始面試之前一定要好好準備,php生命週期,運行模式同理

總結:需要有自己非常熟悉的領域,在這個領域裏面試官的一切問題你都可以hold住,我覺得,對於這種基礎好,而且有自己長處的面試者,面試官沒有理由不喜歡。還有項目這塊,對項目的細節一定要清楚,各種方案的設計思路,實現細節等等都要瞭如指掌,這樣在面試官對各種細節的追問下不至於手忙腳亂。

 

https://juejin.im/post/5cff9f3cf265da1b8a4f13f8#heading-1

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章