原來面試講究方法!終於從【小公司一面就掛】衝到【五面字節獲 Offer】,從此大廠offer收割機

面試情況

我在 7 周內一共面試了42場,最終拿了騰訊、阿里、字節跳動、B站、搜狗的 5 個Offer。

將這幾個公司的面經分類整理了一下,自己平常也有收集分類的習慣,所以一起發出來分享給大家 :

一、Java相關

1、Java中==和equals和hashCode的區別
2、int與integer的區別
3、談談對java多態的理解
4、String、StringBuffer、StringBuilder區別
5、抽象類和接口區別
6、Serializable 和Parcelable 的區別
7、string 轉換成 integer的方式及原理
8、哪些情況下的對象會被垃圾回收機制處理掉?
9、什麼是強引用、軟引用、弱引用以及虛引用?
10、什麼是依賴注入?能說幾個依賴注入的庫麼?
11、靜態代理和動態代理的區別,什麼場景使用?
12、Java的異常體系
13、JVM的回收算法是怎樣的
14、說一下泛型原理,並舉例說明
15、能說說HashMap常用操作的底層實現原理嗎?
16、垃圾回收機制和調用 System.gc()的區別?
17、說一下你所瞭解的設計模式有哪些
18、說下java中的線程創建方式,線程池的工作原理。
...

二、計算機網絡

1、Http1.1和Http1.0及2.0的區別
2、Http長連接。
3、Http的請求方法。
4、Http的報文結構。
5、Https加密原理。
6、HTTPS 如何防範中間人攻擊?
7、Tcp和Udp的區別?
8、TCP可靠傳輸原理實現(滑動窗口)。
9、爲什麼tcp要經過三次握手,四次揮手?
10、Cookie與Session的作用和原理。
11、瀏覽器輸入地址到反饋結果發生了什麼?
12、客戶端如何校驗 CA 證書?
13、網絡請求緩存處理,okhttp如何處理網絡緩存的
14、請解釋安卓爲啥要加簽名機制?
15、權限管理系統(底層的權限是如何進行 grant 的)?
16、client如何確定自己發送的消息被server收到

三、Android基礎

1、說下四大組件生命週期?
2、說下onSaveInstanceState()方法的作用 ? 何時會被調用?
3、說下 Activity的四種啓動模式、應用場景 ?
4、談談Activity和Fragment的區別?
5、Service的兩種啓動方式?區別在哪?
6、如何保證Service不被殺死 ?
7、廣播有幾種形式 ? 都有什麼特點 ?
8、廣播發送和接收的原理了解嗎 ?(Binder機制、AMS)
9、ContentProvider的權限管理?
10、描述一下Android數據持久存儲方式?
11、SharedPreferences的應用場景?注意事項?
12、瞭解SQLite中的事務操作嗎?是如何做的
13、Android中進程和線程的關係? 區別?
14、爲何需要IPC?多進程通信可能會出現的問題?
15、講下View的繪製流程?
16、描述一下View事件傳遞分發機制?

四、Android中高階

1.要做一個儘可能流暢的 ListView ,你平時在工作中如何進行優化
2.對於 Android 的安全問題,你知道多少
3.如何縮減 APK 包大小?
4.Android 與服務器交互的方式中的對稱加密和非對稱加密是什麼?
5.設備橫豎屏切換的時候,接下來會發生什麼?
6.Android 啓動 Service 的兩種方式是什麼? 它們的適用情況是什麼?
7.請介紹下 AsyncTask 的內部實現,適用的場景是?
8.ThreadLocal 原理
9.RxJava 的功能與原理實現
10.ANR 是什麼?怎樣避免和解決 ANR?
11進程間通信機制,binder原理
12.序列化的作用,以及 Android 兩種序列化的區別。
13.Android 中進程內存的分配,能不能自己分配定額內存
14.Android5.0~10.0之間大的變化
15.使用過什麼圖片加載庫?

五、Android第三方庫源碼

1、網絡底層框架:OkHttp實現原理
2、OKhttp針對網絡層有哪些優化?
3、網絡請求緩存處理,okhttp如何處理網絡緩存的?
4、從網絡加載一個10M的圖片,說下注意事項?
5、網絡封裝框架:Retrofit實現原理
6、響應式編程框架:RxJava實現原理
7、圖片加載框架:Glide實現原理
8、Glide如何確定圖片加載完畢?
9、Glide內存緩存如何控制大小?
10、加載bitmap過程(怎樣保證不產生內存溢出)
11、Android中軟引用與弱引用的應用場景。
12、LruCache原理
13、Fresco與Glide的對比:
14、Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM?
15、事件總線框架EventBus實現原理
16、內存泄漏檢測框架:LeakCanary實現原理
17、leakCannary中如何判斷一個對象是否被回收?
18、依賴注入框架:ButterKnife實現原理
19、依賴全局管理框架:Dagger2實現原理
20、數據庫框架:GreenDao實現原理

六、性能優化

這個主要結合你所做過的項目問,一般面試官會問你項目做過哪些方面的優化,常見的問法就是:

1、優化的思路是什麼
2、用到了哪些技術
3、遇到了哪些困難(問題)
4、如何解決
5、有什麼心得

主要結合自己項目回答。切記不要自己給自己挖坑,比如沒有做過這方面優化,你爲了表現自己,說做過,結果面試官往下問回答不出來,這關乎誠信問題,你們懂的~

面試總結:

我一直覺得技術面試不是考試,考前背背題,發給你一張考卷,答完交卷等通知。

首先,技術面試是一個 認識自己 的過程,知道自己和外面世界的差距。

更重要的是,技術面試是一個雙向瞭解的過程,要讓對方發現你的閃光點,同時也要 試圖去找到對方的閃光點,因爲他以後可能就是你的同事或者領導,所以,面試官問你有什麼問題的時候,不要說沒有了,要去試圖瞭解他的工作內容、瞭解這個團隊的氛圍。

找工作無非就是看三點:和什麼人、做什麼事、給多少錢,要給這三者在自己的心裏劃分一個比例。

面試技巧

然後除了上面的面試題,我還有些其他東西希望能夠分享給大家,不僅僅是簡單的面經,包括:

  1. 鎖定目標
  2. 關於簡歷
  3. 邀約渠道
  4. 面試方法論
  5. 挑選 Offer
  6. 面試掛掉如何調整心態

鎖定目標

一個最重要的問題:

你想找一家什麼樣的公司?

你需要知道你的目標是什麼,是 WLB(Work Life Balance),成長,還是賺錢?

類型名稱 描述 該類型的公司
WLB 型 WLB = Work Life Balance,即工作生活平衡,955的這種公司 常見於外企,國內互聯網公司也有一些,可參考 Github/955.WLB。部分互聯網大廠的成熟事業部(比如百度的搜索事業部)也比較 WLB
跟隨成長型 工作強度可能不輕鬆。但是可以跟隨公司快速成長,在公司內能學到很多 互聯網大廠基本都滿足這個要求,阿里我覺得是做的最好的。某些技術驅動的小公司也可
錢多型 錢給的很多 多爲業務爬升期的公司(拼多多、字節),或在風口創業公司(作業幫、跟誰學)

據我所見很少有哪家公司同時滿足上邊 3 個特點,大多企業滿足 2 個就已經非常不錯了

你需要知道上邊 3 點哪個對你最重要,排個序,然後根據這些特點來初步鎖定你的目標公司

其中我要單獨說下外企和阿里:

  • 外企:外企對於英文是有硬性要求的,起碼你得需要做個英文自我介紹,簡單的口語要能說
  • 阿里:我面了10面阿里,阿里人給我感覺都很聰明,因此我覺得加入阿里就可以變成這種聰明人(或者是說不聰明的都被公司輸出到社會了?)。所以在“跟隨成長型”公司裏面點名表揚了一下

關於簡歷

簡歷真有那麼重要嗎?

網上有太多太多關於簡歷的文章了,這裏我不想贅述如何寫簡歷。我反而想 diss 一下:

簡歷真有那麼重要嗎?

我發現其實好像沒那麼重要,因爲面試官根本不怎麼看你的簡歷。這是我觀察到的一個非常有趣的小細節

爲什麼這麼說呢?事情是這樣的

我的簡歷裏面第一頁裏有一個非常漂亮的時間軸,是我用 Short Night 畫的。這是一個我的開源項目,它在簡歷裏大概這樣:

因此,我當然會在面試中的開場自我介紹裏面提上一嘴,然後 70% 的面試官都會有如下反應:

我:blablabla…不知道您有沒有看到我簡歷第一頁裏面的那個時間軸,這個是我一個叫做 Short Night 的開源項目畫的,它有諸多優點blablabla… (面試官突然面無表情盯着屏幕) (過了30s,面試官緩緩看向左下角,我簡歷裏時間軸的位置) (點點頭)

這說明什麼?說明面試官根本就沒怎麼看過我的簡歷!

簡歷的作用和注意事項

當然,diss 歸 diss,簡歷還是很重要的。下面是簡歷的一些重要作用

直接通過面試

有些面試官會仔細閱讀你的簡歷,然後在你面試前,你其實就已經憑藉你優秀的簡歷面試通過了。或是免掉寫題,免掉技術問題,直接簡單聊一聊項目和做事風格,也都是有可能的

我曾經面的一家公司,整場下來沒有寫題,也幾乎沒有技術問題。所以在我最後一面的回問環節的時候,我問到:

我:爲什麼我整場下來都沒有寫代碼?這種面試風格會不會導致面進來一些很會扯皮但是不會寫代碼的人來?面試官:哦是這樣的,我們已經看了你的簡歷和開源項目,覺得沒必要再面技術相關的了,因此就是簡單和你聊聊天,看看你人怎麼樣

HR和獵頭非常注重簡歷

HR和獵頭(後面會單獨講這個角色)會非常看重簡歷。糟糕的簡歷可能會導致你連面的機會都沒有

如果你本身是大廠員工,HR和獵頭基本上不會拒絕你。但是如果你不是在一座明星大廠,那麼還是好好寫簡歷吧

注意!簡歷可能會成爲你的題綱

基本上所有的面試官都會和候選人聊項目,而聊得項目來源無非有2個:

  • 從你開場的自我介紹中挑
  • 從你的簡歷裏挑

不僅僅是項目,如果你在簡歷裏面寫一些技術關鍵字,那麼面試官也會傾向於考察你這些知識點

比如簡歷裏寫個“Git”,那麼遇到 Git 很熟的面試官看到了可能就會問“git rebase 和 merge 有啥區別”,要是答不上來就尷尬了。因此:

自己不熟或是不重要的東西最好別往簡歷上寫!

面試方法論

一般來說面試無非包含下邊幾個內容:

  • 寫題
  • 技術問答
  • 聊項目
  • 聊人生

面試的核心思想

我理解面試是挖掘候選人優點的過程。因此建議,如果自己某方面不行就大膽承認,然後引導面試官朝自己擅長的地方引導。

總之,術業有專攻,及時止損,想辦法幫助面試官挖掘自己的閃光點纔是最重要的。其中一個比較好的方法是——留伏筆,比如:

  • 這個項目曾經做了許多非常亮眼的性能優化,希望後邊可以聊一聊
  • 我寫了很多NDK相關的東西,對NDK非常熟

當然,面試官可能會不理你的伏筆,那麼怎麼辦呢?

——多留幾個

寫題

這個其實是最簡單的,沒太多的額外發揮空間。不同公司要求的算法不太一樣,按照 LeetCode 的標準大概可以分成:

級別 標準 外企大廠(微軟谷歌等) 外企小廠 字節跳動 國內大廠或獨角獸
T0 30分內做出Hard ✔️ ✔️ ✔️ ✔️
T1 20分內做出Medium ✔️ ✔️ ✔️
T2 10分內做出Easy ✔️

你可以登陸 leetcode.com 去做幾道題,算好時間,看看自己的算法水平在什麼程度

如果你打算面外企,最好去英文版的 Leetcode,並將理解題目的時間也算作總耗時中

這裏有個小技巧。如果你是和我一樣的那種“面試時特別特別緊張,寫題完全調不通”的人,最好在寫題前就和麪試官說好,寫完大致思路後不要浪費時間調代碼。當然,這個顯然是一個扣分項,如果你不緊張,最好還是調通比較好

技術問答

回答問題時,儘可能的多秀肌肉

比如問你四大組件,你一方面要精準的回答上來,另一方面要再掰扯掰扯時間循環的各個階段,規範定義。

總之,如果正確答上來10個題,你可能得100分。但是如果你答上來並說透10個題,你可能就得了1000分。如果你的回答完全超出了面試官的儲備邊界,那麼面試官基本上會迅速終止技術問答階段,並給你個滿分

聊項目

以阿里爲代表的這種很虛的公司(非貶義,指更看重軟實力)特別喜歡聊項目,我面了阿里10面,就做了一道題和三道技術問答

下面我詳細介紹下如何聊項目

  • 從自我介紹中聊項目

聊項目從你開場的自我介紹就開始了。你要在自我介紹中,挑選出1-2個最具有代表性的項目來簡單介紹,並留好伏筆

下面是開場自我介紹中,介紹項目的一個大綱:

  1. 一句話解釋項目和你是幹什麼的

  2. 說幾條你的職責,最好說個2-4條。

  • 爲項目制定准入標註
  • 建立報警監控爲穩定性負責
  • 帶了多少人
  1. 留個伏筆,引導面試官追問,比如:
  • 這個項目曾經做了許多非常亮眼的性能優化,希望後邊可以聊一聊

  • 這個項目關於第三方代碼XXXXX是我制定的,還挺有意思,希望後邊可以聊一聊

  • 預先對項目進行整理

你需要對於自己的項目預先整理一份腦圖

這點非常重要。面試過程中光是組織言語就已經很廢腦子了,如果還需要回憶幾年前的項目並整理思路,那簡直是噩夢。因此,預先整理你項目的大綱是一個非常重要的點。

這樣可以大致保證,面試官問到任何有關上面項目的問題,我都可以迅速定位到某一個模塊,然後有條不紊的解釋。

其實這個精細程度還是不太夠的。上圖只是我的個人開源項目之一,並非是我的關鍵項目。我的關鍵項目整理的要更爲複雜,內容更爲多一些

聊人生

展現人格魅力的時候到了,這裏你只需要將自己最好的一面展示給面試官即可

有一個需要提前準備的點,那麼就是:

  • 你的職業規劃是什麼,此職業規劃能否與公司協同更贏?

我不建議大家爲了通過面試而說假話,這樣對雙方都不好。但是實在是有些面試官很極端,那麼你也可以順着對方說,拿下 Offer 作爲你後續的談資。比如:

  • WLB型公司:我喜歡技術,我希望有業餘時間可以鑽研寫感興趣的技術

  • 共同成長型公司:我自驅力沒那麼強,希望可以跟隨公司一起成長

  • 錢多型:我希望努力一把實現財富自由

建議大家先說真話,這樣可以找到適合自己的崗位,同時你認可的事情也可以被公司所認可。但是如果你說真話後,面試官反應強烈,那麼可以嘗試順着面試官說,來想辦法拿下 Offer。

挑選 Offer

如果已經拿到了很多 Offer,那麼如何挑選它們呢?我認爲除了各種待遇和物理條件,還有如下幾點需要特別注意:

  • WLB 型、跟隨成長型、錢多型,到底喜歡哪一個
  • Team Leader 人怎麼樣

我非常非常建議你拿到 Offer 後,和HR要求再和未來的【直接彙報人】聊一聊。請他介紹下現在業務情況、未來規劃、用人和晉升評定原則等等。最好在實地碰一下,讓他帶你參觀參觀公司環境

畢竟接下來幾年時間裏,你的工作都需要向他彙報,現在是你們關係最輕鬆最容易瞭解彼此的時刻

如果面試掛掉如何調整心態

面試掛掉有這麼幾種可能:

  1. 對方發現你不適合他們:比如對方想招一個帶團隊的,而你是做技術。遇到這種情況不要沮喪,這不是你的問題。我因爲這個拒面的佔50%(包括對方拒絕我,和我拒面對方)

  2. Head Count 有限,他們選擇了其他的人:遇到這種情況也不要沮喪,畢竟人外有人,而他們 Head Count 可能只有一個。如果你面試前能夠和HR或工程師直接接觸,也可以問問他們有多少 Head Count

  3. 真的是憑實力掛掉了:這個確實可以稍晚沮喪下,然後痛定思痛,反思反思自己是不是哪裏需要查漏補缺,或是表達方法哪裏有什麼問題。這也是這篇文章誕生的契機

面試複習路線參考

目前我們要做的就是選好自己細分領域深入研究,對基礎原理性內容深入理解,儘快向高級水平靠近並達到。當然也要了解新技術,擁有開放的心態去學習一些新技術,不要一開始出來一個新技術就轉入學習,這樣會導致啥都會一點啥都不會,當然新技術是有一個發展過程的,不會立馬流行和大量應用等它稍微成熟點。

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

首先是超級詳細得不能再詳細的Android開發學習思維導圖,因爲圖片實在是太大了,所以我就只把二級目錄的內容放出來,更加詳細的你們可以主頁掃微信二維碼獲取

接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)

  • 架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO

  • Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化

  • 360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化

  • 解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack

  • NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發

  • 微信小程序:小程序介紹+UI開發+API操作+微信對接

  • Hybrid 開發與Flutter:Html5項目實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

然後再是通過源碼來系統性地學習

只要是程序員,不管是Java還是Android,如果不去閱讀源碼,只看API文檔,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀源碼,不僅限於閱讀各大系統源碼,還包括各種優秀的開源庫。

刷大廠面試題備戰,增加大廠通過率

歷時半年,整理了這份市面上最全面的安卓面試題解析大全。

1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數

以上內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容。或者關注主頁掃描加 微信 獲取。

最後還有耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記等等,這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容

你會發現這篇文章並不是“在想方設法通過種種手段幫助你獲得 Offer”,而是在“幫助你如何找到一份好工作”。我只是想分享如何選擇、如何更好的展現真實的自己、以及碰到極端情況如何處理。

祝你能找到一份適合自己的好工作~!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章