研究實習生歷時2個月成功拿到字節&騰訊Android崗offer,應屆小白看這個指南就夠了!

這裏簡單說一下我的個人情況:

本人本碩985軟件工程,17年畢業後在TP-Link做過接近一年的安卓開發,後來才辭職考研回母校繼續提升自我。原本是打算找一份算法的實習,但今年算法崗的形勢不容樂觀,競爭激烈。所以在2月初決定把重心放在開發上,做自己喜歡的安卓,然後就開始投遞簡歷了。

2月初的時候很多大廠都還沒開始招聘暑假實習,我就在牛客網上找大廠的內推貼來看,當時字節跳動每天都有十幾個內推貼,甚是瘋狂!我就找了三四個字節的內推郵箱發去了自己的簡歷。大概2月7號發的簡歷,10號就收到了來自北京的HR約面試的電話,郵件中給的是牛客的視頻面試鏈接。然後14號連着一面二面,完了直接電話約三面,16號三面完,當晚8點收到了HR的Offer Call。(三次技術面)

大概到了3月3號決定投一下base深圳的騰訊,4號官網投遞了簡歷,然後約了9號一面,接着12號二面,當晚三面的面試官加了QQ,約了15號三面。接着17號HR面,最後19號晚上8點順利收到HR的Offer Call。(三次技術面 + HR面)

字節跳動 - 安卓開發崗

一面(45min)

  1. Activity的創建流程與原理(OnStart、OnCreate、OnResume等)
  2. Handler的原理(Handler、Looper、MessageQueue等)
  3. View的繪製過程(OnMeasure、OnLayout、OnDraw)
  4. Binder機制以及原理(binder驅動、共享內存等)
  5. 談談設計模式(23種設計模式,MVC和MVP的區別)
  6. 談談對操作系統中的進程的理解
  7. 操作系統中有哪些跨進程通信(IPC)的方法(信號量、管道、共享內存等)
  8. 講講Java中類的加載過程

還有一些問題遺忘了,最後是做一道編程題,二叉樹查找相關的,用遞歸完成了。

二面(60min)

  1. TCP三次握手原理及細節,談及爲什麼不能兩次握手的原因
  2. ShareReference的用法和原理
  3. Java垃圾回收的過程
  4. 內存泄漏問題(Java中static引起的內存泄漏問題等)
  5. JVM內存管理相關問題
  6. 智力題:兩個骰子(6面)如何表示2月全部日期

還有一些非常難的Java方面的問題遺忘了,編程題考查二叉樹Z字型遍歷,不能用STL庫。

三面(30min)

  1. Activity的創建原理,談及ActivityManagerService偏Framework層的理解
  2. 談談WindowManagerService的工作機制和原理
  3. 談談讀過哪些開源的安卓庫源碼
  4. 數學題:兩個人輪流投擲硬幣,規定正面贏,正反面各50%概率,計算先投的人獲勝的概率(用級數去解決)
  5. HTTP和HTTPS原理,區別,各自的優勢
  6. 談談對token的理解

這次面試沒有編程題,很簡短但是較爲嚴肅,前兩次氣氛都較爲輕鬆。

HR電話(10min)

簡單聊了一下以前的工作經歷和學習經歷,爲什麼辭職考研,對未來的職業規劃,然後就介紹公司的待遇和福利等等,發了口頭Offer,三天後郵件正式Offer。

騰訊 - 移動客戶端開發崗

一面(60min)

  1. 自我介紹後直接聊起了以前在TP做過的兩個項目。
    第一個項目問到了設計模式中MVC和MVP的區別,ListView和RecyclerView的區別,如何用ListView實現RecyclerView等同的效果;第二個項目比較大,當時代碼量有三千行左右,從Framework層到應用層都有涉及,然後問到了跨進程通信,一個大的數據包跨進程通信中如何保證安全(拆包、安全校驗等)

  2. Java的類型擦除

  3. HashMap的原理(哈希映射、衝突解決的方法等)

  4. 安卓的一系列基礎問題

這次面試非常注重過往項目的經驗,還有些問題遺忘了,編程題兩道:中序和後序推導出前序(二叉樹遞歸完成)、給出一個鏈表刪除倒數第五個節點

二面(60min)

  1. 談談對Handler、Looper的理解,他們倆的數量關係
  2. Java中內部類和靜態內部類的區別
  3. Java的泛型擦除問題(因爲一面沒答好,二面又重新拿出來問我了,還好我提前準備過)

這次面試非常注重基礎知識的考察,當然有很多問題遺忘了,編程題是:數組中每個值看作一棟樓的高度,站在數組中的一個位置求前後能看到的樓的數目(高樓擋在前面會看不到後面的樓)

三面(1h20min):

  1. 談談以前自己的學習方式,有沒有讀書做筆記的習慣或者寫技術博客的習慣等
  2. 談談以前在學校做過的項目(本科做過兩個科研項目,NLP、EEG,我都分別詳細講了)
  3. 談談之前在TP工作的項目,每個項目的時間分配和具體流程,包括技術細節,以及遇到的比較困難的問題,還有自己的成長
  4. 談談Activity的原理,生命週期(面試官希望我答出Native層的原理,雖然我讀過安卓源碼的書籍,但當時一緊張就答得不太全面)
  5. 廣播的收發過程,如何做一個有序廣播
  6. 談談對四大組件的理解
  7. 講一下HashMap的原理(爲什麼到了8個節點就變成紅黑樹)
  8. 以前做過哪些優化相關的工作
  9. 談談webview的原理和通信機制
  10. 概率題:x%的人喜歡籃球、y%的人喜歡排球、z%的人喜歡足球,問同時喜歡籃球和排球的人是多少

這次面試從家庭背景學習情況問到過往項目,再問到基礎知識,真的細緻入微哈哈~當然還是有些問題遺忘了,中間還問了能過來實習的時間。最後編程題是:兩個超大的字符串文件,求他們的最長迴文子串,要求不能調用庫(當時用動態規劃完成,但是時間複雜度爲N^2,其實用馬拉車算法可以降低複雜度,但當時我並沒有練過,所以就把代碼交上去了)

HR面(30min):

  1. 首先自我介紹一下,談談能過來實習的時間
  2. 辭職考研的原因
  3. 考研之後的半年做了啥(當時我在研究生入學前實習了一下)
  4. 講講之前在TP工作的成長
  5. 談談本科到現在的學習方式(在學習課本知識的過程有沒有自己打代碼實現demo之類)
  6. 研究生階段學習成績如何,排名什麼位置
  7. 上學期參與了實驗室的什麼項目,具體負責什麼
  8. 談談自己的優缺點
  9. 相比其他實習生,覺得自己比他們的優勢的地方
  10. 談談之前面試的三個面試官,逐位評價一下
  11. 上一份TP的工作是校招的嗎?當時還有沒有面試其他公司?當時面試公司這麼少是處於什麼考慮的?
  12. 現在實習還有沒有找別的公司,有沒有拿到其他公司的Offer(這裏我如實說了字節跳動的Offer)
  13. 對比騰訊和字節跳動,談談自己的想法,會如何做選擇,選擇的原因是什麼
  14. 最後,覺得騰訊爲什麼需要你?

總結和給各位同學的建議

無論是本科生還是研究生,實習生還是正式工作(社招除外),面試永遠考察的都是基礎!所以萬變不離其中,好好複習計算機學科相關的基礎知識,特別是常問的那一系列問題,每次面試完立刻覆盤,查缺補漏。不要害怕失敗,每次的失敗都會換來一段成長,這是非常寶貴的~然後編程題,平時花些時間上牛客或者leetcode刷一下題就好了。

面試的時候,保持自信心,回答問題不要着急保證思路清晰。然後對每個問題都誠實回答,不會的不能裝懂,可以謙虛請教面試官。最重要的是,堅定自己的目標,不要因爲一兩次的面試失利就影響到自己的情緒和狀態,不斷的總結失敗的原因,總有一天會收到心儀公司的Offer。最後祝各位Offer收到手軟!

面試複習路線

接下來分享的系統學習資源以詳解各大互聯網公司的 Android 常見面試題爲主線,從面試的角度帶你介紹必備知識點,以及該知識點在項目中的實際應用

幫你在現在的基礎上,重新梳理和建立 Android 開發的知識體系。無論是你短期內想提升 Android 內功實力,突破自己工作中的能力瓶頸,還是準備參加 Android 面試,都會在這份資料中有所一些收穫。

從架構基礎開始,分了8個模塊來逐步從基礎進階到架構師的環節:

多餘的話就不講了,接下來將分享面試的一個複習路線,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!

架構師築基語言基礎

目前Android APP開發主流語言就是Java語言,Java語言最大的特性就是提高了軟件的交互可能性,可以說安卓手機幾乎所有應用程序都是利用Java語言來進行編寫的。

設計思想解讀開源框架

隨着互聯網企業的不斷髮展,產品項目中的模塊越來越多,用戶體驗要求也越來越高,想實現小步快跑、快速迭代的目的越來越難,插件化技術應用而生。如果沒有插件化技術,美團、淘寶這些集成了大量“app”的應用,可能會有幾個g那麼大。

所以,當今的Android移動開發,不會熱修復、插件化、組件化,80%以上的面試都過不了。

360°全方位性能調優

在不同層次的開發工程師手裏,因爲技術水平的參差不齊,即使很多手機在跑分軟件性能非常高,打開應用依然存在卡頓現象。

另外,隨着產品內容迭代,功能越來越複雜,UI頁面也越來越豐富,也成爲流暢運行的一種阻礙。綜上所述,對APP進行性能優化已成爲開發者該有的一種綜合素質,也是開發者能夠完成高質量應用程序作品的保證。

Android框架體系架構

Android框架體系架構(高級UI+FrameWork源碼) 這塊知識是現今使用者最多的,我們稱之Android2013~2016年的技術。

Android開發者也往往因爲網上Copy代碼習慣了而導致對這塊經常“使用”的代碼熟悉而又陌生:熟悉的是幾乎天天在和它們打交道, 天天在複製這些代碼 ;陌生的是雖然天天和這些代碼打交道,但是並沒有深入研究過這些代碼的原理,代碼深處的內涵。

NDK模塊開發(音視頻開發系列)

NDK(Native Development Kit縮寫)一種基於原生程序接口的軟件開發工具包,可以讓您在 Android 應用中利用 C 和 C++ 代碼的工具。通過此工具開發的程序直接在本地運行,而不是虛擬機。

在Android中,NDK是一系列工具的集合,主要用於擴展Android SDK。NDK提供了一系列的工具可以幫助開發者快速的開發C或C++的動態庫,並能自動將so和Java應用一起打包成apk。

Flutter學習進階

2020 年無疑是 Flutter 技術如火如荼發展的一年。現在這門技術也依然非常有價值。

每一個移動開發者都在爲 Flutter 帶來的“快速開發、富有表現力和靈活的 UI、原生性能”的特色和理念而癡狂,從超級 App 到獨立應用,從純 Flutter 到混合棧,開發者們在不同的場景下樂此不疲的探索和應用着 Flutter 技術,也在面臨着各種各樣不同的挑戰。

微信小程序開發

微信小程序作爲現在比較火的編程開發應用場景之一,深受市場的青睞,這讓不少開發者眼饞不已。但是對於初學者來說,就完全摸不着頭腦了,不知道微信小程序開發製作需要學習那些知識,有需要的朋友可以參考本篇。

Android相關源碼解讀

“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。

主要內含微信 MMKV 源碼、AsyncTask 源碼、Volley 源碼、Retrofit源碼、OkHttp 源碼等等。

Android BAT高級開發面試題及答案解析

面試前夕,刷題衝刺

面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。

關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者點擊 【這裏】 查看獲取方式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章