記錄騰訊 2018 春季實習生校招面試經歷(Offer)

Cyandev發表於2019-03-04

本人系雙非渣本軟體工程的大三學生,春季校招季投了一大波簡歷,本文先記錄一下騰訊的面試經歷。

從 3 月初開始網申到 3 月 15 號接到面試通知。我投的是 iOS 移動開發崗位,沒有部門要求。這次接到的面試邀請是騰訊北京 OMG 事業部的。

一面

面試地點就在騰訊北京的辦公樓(海淀區知春路希格瑪大廈),一面的內容大致如下:

  1. 對什麼語言比較熟悉?Objective-C(面試過程中簡稱 OC)或 Swift?
    我平時寫 OC 會多一些,Swift 也在研究。
  2. 簡述一下 OC 與 Java 以及 JavaScript 之間的區別,從效能、執行方式上談。
    這裡我簡單說了一下我的理解,主要圍繞著 Runtime、VM 以及型別系統說的。
  3. OC 與 Java 在記憶體管理上有什麼區別?
    典型考察 GC 與引用計數的區別,很簡單。
  4. 瞭解 OC 的 GC 機制嗎?
    OC 實際上曾經在 macOS 中支援 GC 機制,不過後來被廢除了,NSZone 其實就是為了 GC 而產生的。這裡也只是簡單提了一下。
  5. 談印象深刻的專案,主要的技術難點。
    這裡我談了談我自己上架過的 app —— PicSaver,主要技術難點在於如何獲取使用者在網頁上點選的圖片(使用 JavaScript 指令碼注入,JS Bridge 通訊)。
  6. 圍繞上一個話題,談一談你對 JavaScriptCore 的理解,JS Bridge 的工作原理(JS 如何調 native code)以及 UIWebView 和 WKWebView 的區別。
    圍繞 OC Runtime 分析了一波,又談了談 WKWebView 的多程式渲染。
  7. 看過開源框架的原始碼嗎?
    我簡單說了說 AFNetworking 和 ReactiveCocoa。
  8. AFNetworking 的設計思路。NSURLSession 和 NSURLConnection 的區別。
  9. 簡述一下 OC 中物件的記憶體佈局。
  10. OC 中 KVO 的實現原理。
    isa Swizzling
  11. 手寫演算法題,判斷 x 是否為 2 的乘方。
    很簡單,我先寫了一種遞迴的方法,然後面試官暗示我不要用四則運算和取模,我又寫了一種位運算的方法(Bit Counting 的一種高效實現)。
  12. 簡述演算法題,字串最長無重複子串。分析一下時間複雜度和空間複雜度。
    Two Pointer + 雜湊表即可。最差情況下時空複雜度均為 O(n)。

一面就這麼告終了,當時感覺很簡單,面試官看起來也很滿意,然後讓我稍等一會,馬上就安排了二面。

二面

  1. 談談 Swift 中的 nil,與 OC 中 nil 的區別。
    我本以為是考察 Optional 型別,實際上面試官想考察 OC 的 nil 是指標型別的一個取值,而 Swift 中的 nil 在型別層面可以賦給值型別和引用型別。
  2. Swift 中 struct 與 OC 中 class 的區別。
    也是考察值型別與引用型別的區別的。
  3. 值型別在函式間傳值時的效能問題。簡述 COW(Copy-on-Write)。
  4. 簡述一個 HTTP 請求的整體過程。如果有 HTTPS 呢?HTTP/2(及 SPDY 這種實現)瞭解嗎?
  5. 演算法題,填充矩陣:
    1  2  3  4
    10 11 12 5
    9 8 7 6

    考慮邊界情況,大致思路就是用方向向量來控制 x, y 座標,按方向一直填充即可,使用合理方法來處理碰撞檢測即可。可以寫虛擬碼。
  6. 網路通訊時通常採用什麼格式?除 JSON 以外的?
    這裡我簡單談了談 Protobuf,面試官繼續問 Protobuf 二進位制的好處,我簡單說了下其結構上帶來的頻寬優化(體積更小),以及 Parser 解析的大致過程。
  7. 聽說你對前端有所瞭解?可否給我這個“外行”講一講 Vue.js?
  8. (面試官明顯不是外行)簡述 Vue.js 與 Angular 的相似之處,它們與 React 又有什麼區別?簡單談談 Virtual DOM、MVVM 設計模式。
  9. C++ 瞭解嗎!!
    我擦,套路題?趕緊回答只是略微瞭解而已。可以看懂程式碼,能寫簡單程式。
  10. 日常 ending,你還有什麼想問的嗎?
    簡單問了下實習生的工作,騰訊這邊更希望實習生做一些研究性質的工作,探索一些技術新方向,當然你也可以選擇寫業務。

大致就記住了這些問題,面試過程中還有更多瑣碎的小問題,就不一一贅述了,兩面總共面試了 1 個多小時,整體的過程還是很輕鬆的,問題回答得基本都讓面試官比較滿意。

HR 面

二面結束後大約一個小時,簡歷狀態變為 HR 面,如果不出意外,接下來一個周左右的時間我將會迎來所謂的 HR 面,技術面應該告一段落了。


說一下我現在的狀況吧,3 月 19 日入職石墨文件,前端開發實習生(我技術方向太雜了 ?),主要負責石墨桌面客戶端(Electron + React)的開發與效能優化。接下來的職業規劃就要根據其它公司的面試進展來決定了,目前待面的還有螞蟻金服支付寶團隊。嗯,先寫到這~

相關文章