微軟,騰訊面試總結

前言

  • 在某跳動做了半年的服務端開發, 發現並不是自己喜歡的方向, 於是決定換個方向試試, 分別面了騰訊和微軟,幸運的是都拿到offer了,下面給大家分享下面試的經過。

騰訊微信-基礎平臺開發

  • 面的是騰訊微信事業部的基礎平臺開發崗,面騰訊總共是二面, 第一輪是電話面, 第二輪是當面面試。

第一輪

  • 電話打過來, 看到是騰訊的LOGO就有些小緊張, 面試官第一個問題一般就是介紹下自己。我發現這個真是很重要, 你介紹着就會把自己做過的東西介紹下, 然後接着問的技術問題就是和你介紹中相關技術的問題. 我說我在公司主要使用python和go, 然後一系列的問題來了:
    • go語言是個非常好的語言,你覺得和python相比優勢在哪呢?
    • 簡單說下go爲什麼速度快?或者簡單說下go的併發機制或者調度機制吧?
    • 對垃圾回收有了解嗎? 簡單聊下python和go的垃圾回收機制吧?
  • 然後說了下自己的項目, 因爲是電話面試, 項目中很多東西沒有當面能說的那麼清楚就大致說了下,然後又是一系列的問題:
    • 你項目中的高tps(15萬/秒)是怎麼做到的呢?
    • 項目中提到的異步架構設計, 爲什麼要做成異步的呢?
    • 你覺得你項目最難的地方在哪? 你是怎麼解決的?
  • 我說最難的地方是存儲方面的問題, 中途遇到了很多數據庫的問題,因爲數據量差不多3億/天,導致的問題比如慢查詢, 這聊到數據庫馬上又是一系列的問題:
    • 如何提升數據庫查詢的效率呢?
    • 如果慢查詢已經發生了, 你會怎麼去優化呢?
    • 簡單講下mysql裏面查詢優化器的大致原理吧?
    • 你說你讀過redis源碼, 簡單說下redis清除過期鍵的原理吧, 如果讓你設計, 你有沒有別的方法去提升性能呢?
  • 然後問了一些操作系統方面的問題:
    • I/O多路複用有了解過嗎?有了解過select, poll, epoll嗎?簡單說下實現原理
    • 夥伴系統有了解嗎? 說下大致的實現原理?
    • 假設我有一個日誌文件, 我需要找出其中不帶重複的所有行, 你大致說下我這個命令怎麼實現
    • 然後就是linux一些常用命令的詢問了, 比如top, free, find, grep等
  • 最後問了下git的相關原理:
    • 簡單說一下你提交代碼的流程?
    • 有看過.git中的文件內容嗎? 或者簡單說一下你從本地分支提交到遠程分支的原理吧?
  • 最後終於沒有問題了… 基本上都是我簡歷上寫了的東西, 所以基本對答如流, 中途沒卡主過 除了go語言調度原理還有mysql優化器的原理 這個真是沒怎麼細看過。 最後就說我覺得你這邊是沒什麼問題的, 下個星期會進行第二輪電話, 注意下電話…(我覺得騰訊可能真是不缺人, 全程對話都很高冷)

第二輪

  • 第二輪是叫我去西格瑪大廈面試, 還是一樣自我介紹, 這個自我介紹中的問題儘量說自己最熟悉的東西, 開頭的第一個問題能答出來真是很重要。我介紹中說我有過爬蟲和服務端開發的經驗, 然後馬上就是介紹下自己的項目:
    • 拿給我一張紙, 簡單的畫一下你項目大致的一個架構設計吧, 然後給我講解一下
    • 你項目中高tps是怎麼處理的呢? 多少臺機器,每臺機器內存和cpu都大致消耗到了什麼程度?如果這一塊公司沒有資源需要減少機器數量, 你覺得有什麼優化方案嗎?
    • 項目中這個內存異步的設計思想是怎麼實現的?go 語言中這種高併發是怎麼實現的呢?或者說協程是怎麼做到如此高併發的?
  • 然後看到我簡歷裏面設計過高併發的基礎服務, 叫我當場設計一個, 假設我上游有一個qps差不多萬級別每秒, 然後你的服務是要進行db的訪問的, 你怎麼設計?緩存方面怎麼設計? redis? local cache?怎麼做能夠最大性能的發揮你服務的優勢?試着在服務穩定性可拓展性方面講…(這個就是把自己怎麼做的說一遍就行, 胡扯沒用, 沒做過扯不出來…)
  • 然後兩道算法題:
    • 用python或者c++實現下冒泡排序和快速排序
    • 第二題有點長 不太記得了 大概就是一道動態規劃的題目, 最後寫了僞代碼
  • 面了差不多2小時了, 還不放過我… 然後又是一波linux命令的詢問:
    • awk命令瞭解嗎? 不瞭解的話 對其他文本處理命令有了解嗎?
    • free命令裏面都可以查詢到哪些東西?
    • …還有好多不記得了
  • 最後叫我回去等結果, 我當場問了下他大致的結果, 他就說這個不能說 回去等。

總結

  • 過了兩天最後打電話給我說面試過了, 但是需要立刻入職, 因爲當時還正在某跳動工作, 答應過我的mentor離職至少提前一個月跟他說, 因此我就跟騰訊說能不能過一段時間再入職, 他們的意思是現在競爭者多項目緊, 需要立刻入職大概就是一週內, 最後還是拒絕了, 不過也是一次不錯的經歷…

微軟小冰-機器學習崗

  • 微軟的面試真是難拿到, 一年內找別人內推了三次硬是沒拿到面試, 這是投遞的第四回, 終於拿到了面試, 下面簡單分享下。(下面是JD)
- 數據挖掘/算法工程師
崗位職責:
1. 利用自然語言處理、深度學習等技術解決對話系統中的問題;
2. 大數據挖掘,對項目中使用的大數據進行分類及預測,並應用至線上系統。
崗位要求:
1. 熟悉自然語言處理、數據挖掘、機器學習等常用算法,有分佈式後臺系統構建經驗;
2. 具備優秀的邏輯思維能力,善於分析建模問題和解決問題,對解決挑戰性問題充滿熱情;
3. 有強烈的上進心和求知慾,善於學習新事物,勇於面對挑戰;
4. 具有良好的溝通表達能力、具有出色的執行力。
優先項:
1. 有分佈式大數據處理經驗;
2. 有爬蟲經驗;
3. 熟悉 Python 或者 C#

第一輪

  • 面試直接去北京總部面的, 還是簡單自我介紹, 我這次是對着他的JD說的, 因爲自己機器學習方面都是工作之餘自學的沒什麼項目經驗, 因此就簡單說了下自己對一些基礎還是有的, 然後有分佈式大數據的處理經驗和分佈式爬蟲的經驗等, 馬上就是一波問題:
    • 簡單說下你在上一家公司做過最自豪的項目, 然後其中分佈式怎麼設計的, 大數據又是怎麼處理的?
    • 如果叫你設計一個分佈式消息中間件, 你怎麼設計呢? 簡單說下kafka, nsq 作用是什麼 最好從原理的角度去說?
    • 你覺得你這個項目中最難處理的一個點在哪? 你是怎麼解決的?
  • 問完項目之後來了一個算法題:
    • 假設我給你一組數據, 我需要往其中放檔板, 然後切割之後保證檔板
      之間的數據之和屬於[m, n]範圍內, 且m < n, 請問一共有多少种放置檔板的方法?(這題用了最傻的方法, 就是先求出所有情況然後求m,n範圍內的值…不過好在coding抽象的比較好, 然後代碼寫的很整潔, 最後面試官還是點了點頭, 說明印象還不錯)
  • 我以爲算法題做完就到下一輪了, 沒想到這個只是剛剛開始, 下面又是瘋狂一波:
    • 你說閱讀過redis源碼, 那麼我問你個問題, 請問這個redis裏面這個hash table怎麼存儲的? 如果遇到了衝突怎麼解決呢?
    • redis中是單線程還是多線程呢?爲什麼這麼設計呢?
    • 簡單介紹下redis 漸進式rehash的過程, 其中每次擴容和縮容的依據是什麼呢?
  • 然後看到我寫過爬蟲, 然後又是爬蟲的一系列問題:
    • 假設叫你設計一套這個分佈式爬蟲架構, 你簡單設計下?
    • 死鏈問題你怎麼解決呢?
    • 假設我讓你做一個爬全網的爬蟲, 你簡單畫一下?(這個其實我認爲就是讓你簡單設計一個搜索引擎, 這個比較開放)
  • 最後問了幾個機器學習的問題:
    • 我看你有tensorflow的使用經驗, 簡單說下mnist中手寫識別體的前向傳播過程和反向過程傳播原理吧…(其實就是用數學公式推導下)
    • 對損失函數有了解過嗎? 如果讓你自定義一個損失函數, 你簡單寫一個?
    • 如果處理訓練過擬合問題? 爲什麼我們需要進行特徵縮放?
    • 簡單說下梯度下降的實現原理吧?
  • 機器學習方面的理論知識問的比較簡單, 可能是看中了我的工程能力, 就沒有叫我推導什麼模型什麼的, 額 算是混過去了…緊張的等待第二輪面試…

第二輪

  • 剛進來還是自我介紹和項目介紹, 項目介紹這個基本都是一模一樣的, 然後這個比較耿直, 馬上就是一道算法題:
    • 一顆二叉樹, 找出其中加和最大的路徑, 路徑的定義: 任意兩點間不能重複的一條路徑, 其中單獨一個點也能算一個路徑, 然後每個節點的數值可以是負數…
  • 這題寫了僞代碼, 太繞了, 遞歸中繼續遞歸, 腦子不夠用最後還是僞碼錶示了下, 後面他還給我講解了下, 我才聽懂…
  • 然後還是問了我一些爬蟲的問題, 我估計進去做事要給別人訓練模型的爬數據…:
    • 你抓過哪些網站, 覺得最難的網站是什麼? 爲什麼? (我說了google和微信, 額 各位爬蟲大佬別噴), 因爲反爬機制和各種加密參數…
    • 讓你設計一個類似scrapy框架的爬蟲, 你怎麼設計? 爲什麼scrapy不支持分佈式? 如果讓你改造成分佈式, 你怎麼設計?(其實就是scrapy-redis的實現原理)
  • 然後問了幾個關於監控系統方面的設計問題:
    • 在公司肯定用過metric打點吧, 對qps ptc99等數據的監控, 如果讓你設計一套這樣的數據監控系統, 或者說讓你設計一套你怎麼設計?我們需要非常輕量的就行, 簡單畫下或者僞代碼表示下…
  • 最後還是問了一些機器學習的問題:
    • 你說的mnist手寫識別體的數字識別用的都是別人準備好的圖片, 如果我需要自己寫一個數字讓模型識別, 你怎麼做呢? (這個其實就是問我怎麼處理圖片)
    • 簡單介紹下卷積層和池化層, 我們爲什麼需要卷積和池化呢?能不能簡單推導下?
  • 最後終於結束了, 我問了下結果, 他說這個要等結果, 不過他說了一句 你要知道, 工程落地最重要。聽到這句話 我大致知道面試過了, 因爲面試過程中工程方面的問題回答都不錯, 後面回去後也沒想那麼多了…

總結

  • 整個面試過程花了整整3個小時左右, 面完人都感覺虛脫了, 不過這樣挺好, 一天結束… 後面過了五天offer來了, 真是不容易…最大的收穫就是兩點:
    • 簡歷中寫的都一定是自己對答如流的東西, 這個是最基本的, 問道簡歷裏面的東西都不會的話後面基本沒法聊了
    • 自我介紹的時候開頭就是直接說自己最熟悉的東西, 不熟悉的東西不要提出來, 面試官就是在你的介紹中聽到自己也熟悉的地方纔問你的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章