前言
前段時間面試微信的服務端開發崗位,拿到了 Offer,分享一下面試經歷。linux
以前發的一篇文章,已拿 Offer!百度、字節跳動等後臺面經提到了大鵬跳槽離職的狀況,微信的面試流程較長,輪數較多,並且和其餘公司面試流程差別較大,因此單獨寫出來。web
其中涉及項目相關的問題由於因人而異,沒有太大的參考價值,因此沒有列出來,但這個一樣是不可或缺的一部分。面試
第一輪面試
這輪面試整體是問基礎知識,保證面試者基礎過關redis
-
公鑰和私鑰區別是什麼,能夠把公鑰當作私鑰,私鑰當作公鑰使用麼? -
加密算法都有哪些? -
base64 是加密算法麼? -
解釋下什麼是驚羣效應? -
訪問域名以後會通過哪些步驟,尋找子網的協議叫作什麼,找到進程除了端口號還須要什麼? -
在沒有設置主鍵的狀況下,設置了惟一索引會將其做爲主鍵構建索引麼 -
進程和線程的區別,chrome 每一個 tab 之間是多進程仍是多線程,爲何? -
DOM 頻繁修改會有什麼問題,如何解決,用虛擬 DOM 有什麼壞處 -
限流算法都有什麼,大家使用的算法原理是什麼? -
50 億個公衆號閱讀量找到最多的 10 個怎麼找 -
sku 和 spu 關係是什麼,如何作屬性關聯的? -
如何查看系統的資源使用狀態,top 中 cache 和 buffer 的含義 -
進程間通訊方式都有什麼? -
RSA 算法是怎麼個實現原理? -
多個進程寫一個文件如何避免衝突,若是加鎖的話會致使等待時間過長有什麼優化方案麼?(說了個消息隊列) -
redis 如何解決緩存穿透問題,若是不肯定 key 的狀況下,存在穿透怎麼辦 -
軟件中斷和硬件中斷的區別 -
如何理解中斷?中斷的實現原理
第二輪面試
筆試 1 小時
-
有 64 匹馬,賽場只有 8 條賽道,請問最少須要比賽多少場才能肯定跑得最快的那 4 匹馬,不能夠藉助計時器給每一匹馬一一計時;算法
-
一個桶裏面有白球. 黑球各 100 個,如今按下述的規則取球:chrome
-
i . 每次從桶裏面拿出來兩個球; -
ii. 若是取出的是兩個同色的球,就再放入一個黑球; -
iii. 若是取出的是兩個異色的球,就再放入一個白球。 -
問:最後桶裏面只剩下一個黑球的機率是多少?
-
給定字符串 str1 和 str2,將 str2 插入 str1 中,問有多少種插入方法使得新串是迴文。例如:
Str1=lol
Str2=o
總共有四種插入方法,分別獲得olol,lool,lool,lolo,其中能到迴文的方法有兩種。
輸入:
lol
o
輸出:
2
-
兩個有序(從小到大)單鏈表,合併爲一個有序的單鏈表。
struct LinkNode{
int value;
struct LinkNode *next;
};
struct LinkNode *merge(struct LinkNode *firstLink, struct LinkNode *secondLink)
-
公司有內部 bbs,員工都會在上面發帖交流。據統計,有三個員工 ID 發帖不少,他們各自的發帖量都超過帖子總數 N 的 1/4。若是給到你全部帖子的發帖人 ID 列表,請寫代碼找出這三個 ID, 要求時間複雜度 O(n),空間複雜度 O(1)。
面試 1.5 小時
其中這裏的面試共有 2 位面試官,第一位面試官問基礎知識,第二位面試官問項目數據庫
-
進程和線程的區別? -
什麼是虛擬內存? -
1 億個數字中有 2 個相同,怎麼找? -
訪問一個連接的流程 -
訪問 http 爲何會跳到 https -
linux 經常使用指令都有什麼? -
如何實現序列化和反序列化 -
數據庫索引的結構,有什麼特色? -
堆和棧的關係,對象在堆中內存是連續的麼? -
樂觀鎖怎麼理解? -
數據庫上樂觀鎖怎麼應用的? -
負載均衡都有什麼算法? -
arp 協議是怎麼理解的? -
http 包的結構是什麼樣的? -
tcp 和 udp 區別 -
tcp 怎麼保證穩定傳輸的? -
限流算法怎麼實現的?令牌桶具體是怎麼實現的? -
交換分區作什麼的?
第三輪面試
本輪面試主要考察面試者項目水平和能力編程
缺點:在某些點上更多的挖掘技術深度數組
第四輪面試
這一輪面試屬於交叉面試,由其餘部門的面試官來面試緩存
問題:如今有一個任務,某個公司要經過微信在早上 10 點鐘發紅包,如今有一個數據庫表,裏面存儲了全部員工的 openId,還有一個微信支付的接口,傳入 1 個 openId 以後能夠進行紅包支付,每次調用時間 1 秒鐘,如何才能儘快的將該任務完成,請寫出三種方案
面試官特地提醒能夠不侷限在題目自己上,這道題要按照真實狀況去處理給出方案
下面是我當時給出的方案
1. 第一種方案
-
方案:多線程提升併發量,先從數據庫獲取到所有的員工列表信息,而後進行分割,好比按照尾號進行分割,同一尾號的由一個線程來去處理。 -
優勢:開發簡單,只須要啓動多線程或者線程池便可,可以較大可能的利用服務器資源 -
缺點:
(1)首先員工的數量並不肯定,把員工數據所有拉取出來可能存在數據量過大的狀況。
(2)還有就是要考慮服務器性能,是否可以知足多線程所需的條件,好比說若是隻有一個 cpu,其實並無達到並行的效果
(3)若是服務器不知足資源的話,這樣的話就要考慮多個機器去執行,多線程放到多個機器去執行還須要額外的開發工做量
(4)這裏面沒有考慮發送失敗的狀況,若是發送失敗還須要有從新發送機制
2. 第二種方案
-
方案:多進程去提升併發量,啓動多個應用,不一樣的應用去讀取不一樣的數據,好比用尾號來區分。 -
優勢:方便分別部署在不一樣的服務器上去執行,可以儘量的利用更多的服務器資源去解決問題,若是考慮從新發送的話也方便再寫一個應用去部署新的服務器啓動 -
缺點:
(1)數據庫在多進程讀取時,數據庫表會不會被鎖住,若是鎖住的話性能就會下降,因此要選擇合適的存儲引擎。
(2)有可能須要佔用更多的服務器資源
3. 第三種方案
-
方案:和微信支付部門同事協調,單個 openid 發送接口其實並不合理,應該提供批量發送接口,容許發送數組,由於目前最大的瓶頸在接口耗時上面。 -
優勢:從根本上解決瓶頸問題,也能緩解微信支付端的壓力,不會被臨時的批量調用數據量壓垮 -
缺點:這個存在的問題是將開發工做量交給了微信支付部門,須要與其協調資源,確保可以按時完成工做
第五輪面試
本輪面試屬於 GM 面試,要講 PPT,前面的面試官讓我好好準備一下,挑出一個本身認爲最有價值的項目講清楚
PPT 講完以後,面試官還試用了下我作的 mdnice
等開源工具,一不當心就被發現了 bug,提出了意見
第六輪面試
本輪面試屬於 HR 面試,會問離職緣由、家庭、城市、薪資和績效等問題
總結
1. 多久能將全部面試面完
我本人面試了半個月完成了全部面試,可是這個速度應該是比較快的,慢的可能會長達一個月的時間,因此建議跳槽面試前作好長期準備
2. 面試完成後就發 offer 麼
面試完成後,其實只是完成了整個流程的一半,距離發 offer 和入職還有很長的時間,一般的流程是
內推 -> 多輪面試 -> 郵件反饋當前薪資 -> 口頭 offer 溝通薪資 -> 正式 offer -> 背調 -> 入職指引 -> 肯定入職時間 -> 正式入職
因此面試是一個長期戰鬥,知己知彼,百戰不殆
3. 工做地點在哪裏
我面試的部門在深圳,微信的崗位大部分都在廣州
4. 想交流面試題和技術怎麼辦
大鵬搞了個技術交流羣,將來不按期發麪試題供你們學習討論,歡迎加微信後回覆「技術」拉你入羣
本文分享自微信公衆號 - 編程如畫(drawcode)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。