你好,我是yes。java
上週末寫文提到有一位讀者朋友拿到了有贊阿里 offer 來感謝的事兒,他說主要是看我、艾總、安琪拉的文章,哈哈夾在兩阿里P7之中的我瑟瑟發抖。mysql
今天他在艾總的公衆號上分享了他近兩個月的面經,再結合這兩個月有挺多人來找我說面試老被掛的狀況,來談談面試的幾個關鍵點。這幾點要是掌握了以後,基本上運氣不要太差,面試都是 ok 的。面試
你負責的項目
看了下他百世、光雲、來將來、大搜車、婚禮紀、銀泰、有贊、阿里的關於項目的面試題,我總結一下大體包含如下幾個方面:redis
-
介紹下你最複雜的項目算法
-
畫下項目的業務架構圖spring
-
畫下項目數據流的流向sql
-
多少個節點?數據庫
-
項目 qps、數據量設計模式
以上幾個點須要重點把握,身爲項目開發你理應瞭解項目總體架構與數據流向,還有項目的峯值qps、平均qps、tps等,若是你不瞭解,側面反映你在現公司是邊緣人物,或者沒有本身主動去爭取、去了解、去爲了項目優化而作努力,沒有總覽全局,談何優化。緩存
還會問:
-
爲何項目是這個架構
-
說下你項目中比較優秀的點、最有成就感的點
-
說下你項目線上遇到的問題、如何解決、其中最大挑戰是啥、有什麼思考?
以上幾個點主要考察你是否有自我思考,是否深刻研究或者質疑過當前的設計(而不是逆來順受)。負責的項目是否太過簡單,平平無奇?是否有排查線上問題的經驗,排的思路是否清晰,過後是否有總結覆盤等。
還會問:
-
若是流量激增100倍,你認爲大家這個系統哪裏最早出現瓶頸?如何解決?
-
或者問你負責的某個模塊流量激增100倍,你該如何設計?
以上仍是考察你是否有仔細思考過項目的架構,或者你本身的設計,看你是否能 hold 住更大的挑戰,也算隨機應變的能力。
還會問:
-
項目中MQ應用場景
-
項目中設計模式的使用
-
項目中的開放封閉原則和自定義bean實現
-
項目中秒單模塊的優化
以上這幾點是你誘惑面試官問你的。雖然說沒看過這位讀者的簡歷,可是從多家公司都問的狀況不難推測,簡歷裏面確定寫的利用MQ幹啥了,利用設計模式優化了什麼模塊、秒單模塊等。
因此刻意準備幾個點,寫在簡歷上,誘導面試官問,就像秒殺,你簡歷寫了負責一次秒殺活動,你以爲面試官會不會問?
即便這個秒殺活動不是你負責的,可是你爲了在簡歷上寫這點,去充分準備了,去請教負責的同事、查閱各類資料,搞清其中的複雜點,能 hold 住面試官的連環問,那這個活動不就是你本身作的?
好好準備準備,你真實作沒作過不重要,你把全部原理和細節夠能說出來就能證實你本身了,因此簡歷得準備幾個點,比較容易體現你比較牛皮的點,給面試官挖坑,讓他跳。
關於項目,上面說到的都準備了,就很穩,若是上面的題目你還答不出來,趁面試前好好理一理,理完以後找幾個公司,練練手,而後再去你心儀的公司面試,由於有時候你本身說,和麪試官問你的時候,回答出來的答案是不同的,因此須要實戰一下。
數據庫
主要是 MySQL,這個和項目同樣,必問。
第一大類:
-
MySQL索引實現原理,爲何這麼快
-
索引數據結構,爲何不用B樹、紅黑樹之類的
-
數據庫事務ACID是如何實現的
-
MySQL的架構圖
-
MySQL是如何排序的,排序算法
-
between and 和 in 的區別
-
如何預防死鎖,OS如何作的?MySQL如何作的
-
一樣一條查詢語句,有時候快有時候慢,什麼緣由致使的?
這類屬於原理類問題,這個系列我在更新中-四本書、一個專欄,揉成這篇MySQL,如今還屬於總覽階段,也就是粗略的把關鍵知識點先過一遍,而後以後詳細深刻。出發點是想先連成面,再各個擊破。
第二類:
-
線上SQL調優經驗,調優的慣用思路
-
線上MySQL CPU報警了,如何快速鎖定問題而且解決?
這是實戰問題了,若是你沒調優過 SQL,沒有處理過線上的 SQL 問題,能夠去網上找些例子,這個是必定要準備的。
你也能夠本身根據當前項目的表結構,本身給本身提一個複雜的查詢需求,本身寫寫 SQL ,而後一步步優化,這不就是線上調優嗎?
通常的調優就是爲了用上索引,有一些排序須要的內存過大,得用到磁盤,有些關聯的表太多,有些buffer配置太小等等,都是調優的方面,還有業務調優的,就是把這個需求砍了,不是產品要啥就作啥,須要評估實現難度的。
第三類:
- 設計一個商品類目的數據庫存儲,查詢的時間複雜度說一下。如何作優化?
這種屬於數據庫設計類問題了,若是你沒有設計過數據庫,能夠本身寫一個開源項目,或者跟着寫一個開源項目來練練手。
或者仍是本身根據當前項目的表結構,假設來了一個新需求,須要加新的功能模塊,須要加表,你本身思考下看如何設計?
消息隊列
-
MQ選型,爲何用這個MQ
-
業務上如何保證消息不丟失?
-
業務上如何保證消息不重複?
-
業務上如何處理消息堆積?
-
業務上如何保持消息有序性?
-
消息寫入失敗這麼辦?
-
RocketMQ 爲何那麼快?
-
事務消息
-
讓你設計一個MQ你如何設計?
讀者遇到的就是這幾個題,MQ不外乎也就這幾個題,那這幾個題呢,很巧我都寫了,看我寫的這幾篇,夠了。
Redis
-
Redis 掛了怎麼解決?
-
分佈式鎖,爲何使用Redisson?
-
redis 持久化
-
Redis 爲何那麼快?
-
如何保證 本地緩存 和 redis 還有mysql 的數據一致性
-
redis 的緩存穿透如何解決?
-
布隆過濾器 如何實現的?
-
項目中redis用來作什麼了?
-
熱 key 的問題處理。
關於緩存基本上不外乎問的都是以上幾點,注重點放在分佈式鎖的實現和問題,緩存一致性,本地緩存兜底等操做,其餘相似 redis 的一些實現機制,單線程的執行狀況,想詳細瞭解的話,建議看書以後再看下源碼。
我以前分享過黃老師的基於 Redis 3.0的有中文註釋的源碼,公衆號後臺回覆 redis 便可得到。
Java基礎
-
線程池問題
-
線程OOM排查
-
GC
-
HashMap、ConcurrentHashMap
-
鎖
差很少就是以上幾點,關於線程池的,看我這篇就差很少了:
鎖的話,看這幾篇:
GC,看這幾篇:
筆試
-
實現一個多叉樹,遍歷打印
-
手寫單例
-
實現一個雙向鏈表的insert,find,delete的方法
看了下,好像就兩家公司要求筆試,不過這方面仍是得準備的,基本題目的仍是得刷,好比劍指offer的。
其餘問題
-
spring、springboot
-
dubbo + zk
從上面面經來看,spring 和 dubbo 問的不是不少,就個別幾個問題,不過平時仍是得認真準備,主要看你簡歷突出哪些點,你突出 spring 確定問你 spring。
-
分佈式事務,這個以前寫過, 分佈式事務,一網打盡
-
常見限流的算法,這個也寫過, 阿里雲二面:你對限流了解多少?
-
DDD,我看了下幾乎每一家都問了,以後我寫一篇。
-
平日如何學習的,這個基本上也是每家必問。
仍是不少零散的問題,我就不貼了,這種貼不完的。抓住上面的主線,關鍵點:項目、數據庫、消息隊列、緩存、框架。
社招基本上關注這些點,還有一些設計類題,像以前有讀者問我如何設計虛擬券、短鏈系統,等等。
主線若是抓住了、掌握了,面試就是玩兒。
對了,這位讀者三年經驗。
最後
看了面經有感,粗略地寫了這篇,但願對那些面試常常被掛的同窗有所幫助,找到主線去學就完事兒啦!
捋下來,好多面試問題個人文章都寫到了,以後再把沒寫到的填充上去,嘿嘿。
我還有個面試交流羣,交流面經,有興趣的能夠加我微信,備註面試,我拉你進羣。
個人一對一解答服務持續開放,不走知識星球直接私聊我。
詳細面經能夠看艾總的這篇
歡迎關注個人公衆號【yes的練級攻略】,更多硬核文章等你來讀。
從一點點到億點點,咱們下篇見。
本文分享自微信公衆號 - yes的練級攻略(yes_java)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。