很多同學反饋多搞點面經,說來就來!
今天分享一位拿到位元組跳動實習Offer的面經,沒錯,Java轉Go。
別問我選Java還是選Go,成年人不做選擇題。先搞定一個語言,再學第二語言從來不是難事。
無論學哪個,你要做的事情是先學起來:想都是問題,學才有答案!
面經分享
本文沒有按照一面、二面、三面流水賬的形式整理。
而是把面試中碰到的問題,按種類劃分彙總:演算法題、資料結構、作業系統、資料庫、快取、計網、場景題等等,這樣對大家應該更有幫助!
一、演算法題:
- 給定一個字串abcdabgh,給個字元a,隨機返回a下標,比如這個是0 4。要求返回的機率必須一樣,空間複雜度要求O1即不能開任何空間儲存下標,並且只能遍歷一次。
- 給定n個骰子,和為k的機率,不能用回溯。
- 給一個數字比如234,給個陣列比如{2,3,7},找出第一個不大於234的數,比如這個是233,有幾種情況我記得是,這裡用到了有序表我寫的時候。
二、八股文
不全,比較簡單的我就沒整理了...
資料結構:
- 堆和樹的區別?應用場景?
- 二叉搜尋樹是什麼?
作業系統:
- 程式之間的通訊方式?寫個死鎖?怎麼解決?
- 作業系統記憶體滿了怎麼辦?如何回收?有什麼影響?
- 什麼是殭屍程式?應該怎麼去操作?
- 為什麼會有執行緒安全的問題,如何解決?
- 說一下樂觀鎖和悲觀鎖?說一下CAS?aba問題是什麼?如何解決?
MySQL:
- 索引構成?(B+樹)索引最佳化?給個sql讓判斷走索引的情況?
- 什麼是慢sql,如何查詢,如何最佳化?
- 三大日誌,我記得好像有個問題是redolog寫進去了,但是有個bin log沒寫進去該怎麼辦?(具體的我忘了,我沒回答好)講write還有flush區別?redo log刷盤時機?三大日誌的執行順序?
- mysql的事務隔離級別?各自解決了什麼問題?mvcc的流程
Redis:
- 問了zset的底層?為什麼不用紅黑樹?(這是我自己引得,我傻了自己說了一句沒用紅黑樹,用的是跳錶)
- redis裡面的命令列比如setnx和setex 還有zset裡面的
- redis的key有大小的限制嗎?有什麼影響?怎麼辦?
- redis的記憶體淘汰策略?(面試的時候一直想不起來 一直背了半天旁路快取那些東西 我以為涼了的)
- 根據score查member的時間複雜度?反過來根據member查score時間複雜度?
計算機網路:
- http常見的方法和狀態碼有哪些?
- 502是什麼錯誤?如何排查問題?
- 講一下反向代理?
場景設計:
- 敏感詞庫的設計,要求增刪改查敏感詞。敏感詞文字匹配,敏感詞一萬個,文字長度20-10000這樣子。
- trie樹什麼的都回答了,開什麼幾個執行緒這樣子,我也是各種瞎說,後面問我在這裡面怎麼儲存持久化,給出方法,redis裡面儲存如果當機了怎麼辦有個節點?這一塊真的虛,我也不知道怎麼辦,感覺面試官很厲害,我給的方案他好像都否定了,說我的方案一天當機幾分鐘怎麼可能行?
三、專案和實習
也有一些閒聊沒有寫進來...
- 微信掃碼登入流程?後面的原理你瞭解嗎?(準備了很久的Oauth2總算碰到了開心)csrf是什麼?怎麼解決的?
- 專案難點(之前登入日誌是同步寫入庫的 後來為了提升效率加入了佇列 先寫佇列後消費入庫 做解耦 但是佇列用了同步操作 有一次mq掛了 導致登入服務不可用 這種是不可接受的 記日誌不能影響登入 所以將其改為了非同步方式)
- 訂單30分鐘取消,延時訊息這裡(這個是我自己引申的,我包裝了一下,我把mq的18個佇列講了一下,也講了一下kafka的時間輪)
- 你實習用的什麼語言?go的協程裡面出現panic怎麼辦?defer講一下?gmp模型瞭解嗎?
一起進步
獨行難,眾行易,如果你想和我們一起組隊學Go,歡迎加入我們的小圈子,一起刻意練習,結伴成長!
微訊號:wangzhongyang1993
公眾號:程式設計師升職加薪之旅
也歡迎大家關注我的賬號,點贊、留言、轉發。你的支援,是我更文的最大動力!