再見企鵝,你好釘釘!(送阿里P7面經一份!)

閱讀前請點擊右上角“關注”,每天免費獲取Android知識解析及面試解答。Android架構解析,只做職場乾貨,完全免費分享!

我這篇文章並不是簡單的描述一些面試中的真題,或者總結一些Android的知識,而是一個普通人經歷過各種面試後的一個總結與反思。對技術面試這回事有一些體會,在此分享。(從我的角度,當然肯定有不合理的地方,大家借鑑就好)。

從兩個月前開始面試,先後面試了騰訊、抖音、美團等,最後只拿到了阿里釘釘一個offer;坦白說,我對我個人在這次求職中的表現並不十分滿意,面試前沒有做足夠充分的準備——數次被面試官出的題目“虐”、應對面試的壓力時沒能做到沉著冷靜、在面試中未能完整地把自己的積累與優勢表現出來……所以本篇文章並不能完全算一個“成功者”的經驗分享!

再見企鵝,你好釘釘!(送阿里P7面經一份!)

一、面試前的準備

1.1 簡歷

簡歷的重要性就不言而喻了,怎麼樣寫好簡歷是個技術活,當然如果你有很好的背景(學校或者公司),那麼不管你怎麼寫,基本上都不刷掉你,我們作為一般的人還是需要下一番功夫的。拿我的簡歷作為例子,大概有以下幾個部分:

  1. 個人信息:姓名、出生日期、教育背景、博客地址、github地址、聯繫方式(手機、郵箱和微信號)
  2. 工作經歷:畢業後待過哪些公司,一般是倒序,項目儘量精簡明瞭,可以參考SMART原則
  3. 專業技能:自己熟悉的一些技能,這個為什麼我寫到最後,因為對於工作三年的同學來說,面試官更加註重的是你的項目經歷,大部分面試都是看你的項目經歷來提問。

怎樣寫簡歷,這個開源網站不錯,教你怎麼寫簡歷,而且有一個在線markdown在線網站,可以導出pdf。

另外,我個人在寫簡歷時有一個還未做到的點是

及時更新簡歷。對於幾年前的項目早就記憶模糊了,幾年後再嘗試回憶項目細節寫進簡歷其實很難。所以最佳方案是項目結束後及時把收穫更新進簡歷裡。

1.2 基礎複習

對於基礎複習我這次最大的感觸就是,一定要早點做準備同時也要做全面完整的準備

舉個例子, Java 中非常基礎的的四大引用。對 Android 開發來說平時可能用弱引用比較多,但真正作為面試題來問時面試官希望你能馬上回答出四大引用分別是什麼以及各自的使用場景。假如你能馬上回答出四大引用的特點及使用場景當然是合格的回答,假如你不止回答出四大引用的特點還能聯繫到 ReferenceQueue,繼而延伸到在 leakcanary 的使用,那就是優秀的回答了 —— 但假如你被提問後一臉懵逼,說自己只記得弱引用,就會比較尬(當然就這個知識點而言,我作為面試官的角色時還會嘗試“搶救一下”,由弱引用的使用延伸到內存洩露去,不會直接判定應聘者)。

因為在“面試”這個場景裡,面試官會默認你做了足夠的準備,對於一些中高端職位基礎題其實是作為送分題問的,當然希望你能快速反應、快速回答。

而人不是機器,許久沒用或者沒複習的技術點想要在短時間內回憶起來並歸納成 N 個點說出來難度非常大。 所以基礎技術的面試其實就跟應試一樣,任你功力再高,也有必要好好複習一下。畢竟“武功再高,也怕菜刀”嘛(不恰當的比喻,哈哈)。

基礎複習可以分為兩大塊,一塊是 Android 和 Java 基礎,另一塊是計算機基礎,也就是算法、計算機網絡、計算機原理等。對於前一塊,經驗豐富的你一般花半個月就可以搞定;但對於後一塊,時間上就不好估計了(網上有非常完整的各種面經和題庫,聰明的你肯定具備最基本的信息檢索能力,這裡我就不貼鏈接了)。

這裡我把我自己作為反面教材:由於前期對是否要跳槽猶豫不決,所以沒能早點進行充分的準備,導致後面碰壁後需要在短期內急急忙忙去複習,其中的壓力可想而知。

個人認為比較舒服的姿勢是,不管跳槽與否,一些基礎的東西在平時就可以有計劃地複習,特別是刷算法題 —— 任你算法功力再高,沒有經過一定的訓練想要在面試這種場景下快速手寫出 bug free 的代碼也幾乎不可能。

1.3 項目複習

再見企鵝,你好釘釘!(送阿里P7面經一份!)

社招跟校招的一大差別是,社招中的基礎題部分只是前菜,招聘方會非常重視你的項目經歷,通過詢問項目經歷會擴展到對技術、學習能力、溝通能力等的考察。

關於如何複習項目,從面試情況看,可以從總體架構、項目細節、項目亮點、碰到的問題以及場景複述等方面入手。

總體架構和項目細節不用過多解釋,前者是從宏觀角度向對方介紹你的項目的架構,用最短的時間讓對方理解項目通過哪些模塊或組件間的協作去實現功能的;後者是對方可能會提出一些感興趣的點詢問你項目細節 —— 所以千萬記得認真掌握項目關鍵細節,否則答不出來會很尷尬。

項目亮點和難題則是面試必備,基本大部分面試都會問到這塊,無他,對方不瞭解你的項目的情況下肯定希望你能展示出可以為自己加分的點。

1.4 簡歷投遞

準備得差不多後就可以開始進入簡歷投遞環節了,我覺得簡歷投遞的途徑的優先級是這樣的:

熟人內推 > 優秀獵頭推薦 > 普通網友內推 > 普通獵頭推薦 > 官網投遞

假如你的簡歷光芒閃閃,阿里星那種級別,那隨便投遞都可以很快有響應,否則投遞的途徑還是很重要的。

熟人內推當然是第一選擇,通過熟人你不止可以知道部門內部的業務發展、晉升、加班等情況,在走流程時也可以通過他直接接觸到你的未來 leader。而為什麼優秀獵頭的內推會比普通網友內推要好呢?我個人的感受是優秀獵頭會比普通網友更瞭解招聘情況且能更積極得幫你催流程,而真正優秀的獵頭,在對公司整體信息的掌握上是高於普通員工的。

二、面試中常見的考察方向

面試中要沉著冷靜、面試前要確認面試時間並提前到……這些囉嗦的小 Tip 我就不說了,聰明的你一定能注意。這裡我嘗試總結一下碰到過的常見的考察方向(或者說“題型”)。

2.1 算法

再見企鵝,你好釘釘!(送阿里P7面經一份!)

對於算法的考察,從個人有限的經驗上看,貌似難度都是適中的。特別是對於我們客戶端開發而言,考察的算法都比較常規。(呃,某些很注重這塊的公司除外 —— 當然注重這塊也是好事,我們只能去適應公司的風格而不能要求公司適應我們)

算法這塊我也是“低手”(這塊強的同學可以留言教授一下比較好的學習方案),多學習多練習吧。

這次求職中,比較高頻的題目是"第 TopK 大的數"(快排思想、能提到線性查找算法 BFPAT 更佳) 和 “前 TopN 個數” (堆排序、先分治再堆排序)。

2.2 技術基礎

就像面試前我們準備的,基礎題基本是必問的,就算不深究 Android 的基礎,問你一些計算機網絡的東西不為過吧。這塊我們必須拿出校招時的勁頭來,老老實實複習。至於具體的題目什麼的我就不羅列了,網上有一堆面經,github 上也有很多整理好的題庫。

對 Android 開發來說,可以分成兩塊,第一塊是 Android 相關基礎。跟初級開發的面試不同的是,這裡的基礎不會是簡單的“四大組件是哪些”,而是會問你具體的使用和碰到的問題。

比如四大組件的考察會結合 ANR(四大組件是否都會產生 ANR、時間是多少等)、進程優先級、啟動模式 等等一起問。網上的面經和題庫命中概率還是蠻高的,大部分題目都似曾相識,畢竟 Android 常用知識點也就這些。當然不要因此掉以輕心,優秀的面試官是會針對細節深入挖掘的,所以不止要“知道”,還要“理解和掌握”

另一塊是計算機網絡、計算機原理等。對客戶端開發來說,計算機網絡的考察會比較多,TCP 和 UDP 的區別、TCP 的擁塞控制、TCP 的握手與揮手流程、HTTP 與 HTTPS 的差別等等。基本面的所有公司都問到這塊了

這塊需要特別注意的點就是你的覆蓋面是否足夠,因為不同公司的不同部門的不同面試官都可能會有不同的提問姿勢。你不完整系統得把基礎過一遍,真不能保證你能信心十足(一兩個問題被問倒其實沒什麼,但能不被問倒更好不是)。

我可以舉幾個例子,比如在問大圖加載時順口問一下“同一個文件,放到 drawable 目錄下和放到 SD 卡中,加載到內存時內存佔用一樣麼” (這裡涉及到了 Bitmap decode 時的過程以及 Bitmap 內存佔用的計算),比如 HashMap put 方法調用時內部的流程是怎樣(方法內部的流程、HashMap 的擴容等),比如 Http 1.1 和 2.0 的特點和區別 —— 這些例子都是我或者我朋友真實碰到的面試題,在沒經過充分的面試準備之前,你能答出多少呢?

2.3 技術原理

一般這類問題是在問基礎題時順勢往底層問,或者是你自己在回答時順便帶出來,比如屏幕繪製原理、幾種動畫的原理、佈局加載原理等等,是體現個人的技術深度的。

我覺得這類題目不是死記硬背可以解決的,作為面試官,自然有辦法考察出你是“瞭解”還是“理解”。

其實系統地複習這些內容本身也是挺有趣的,你會很容易發現技術背後的實現存在深層的聯繫。所以這塊不只是面試題那麼簡單,它也是我們以後往“資深開發者”走的一個方向。

回答這類問題,主動比被動更好。一般面試官問你很基礎的問題時,你當然可以惜字如金只回答對應的答案,但假如你能主動擴展到原理層面、甚至隱晦地表示你看過源碼,要我是面試官也會喜歡你(斜眼笑)。

2.4 項目介紹

我一開始也沒有經驗,面愛奇藝時讓我介紹項目我就簡單介紹了下項目需求是怎樣,可以看出面試官並不滿意。後面專門向一個牛逼的前同事請教了這個,他的建議是注意項目細節準備,保持自信!後面面其他家時,果然感覺輕鬆了一些。

2.4.1 在面試前準備項目描述,別害怕,因為面試官什麼都不知道

面試官拿到我們的簡歷的時候,是沒法核實你的項目細節的(一般公司會到錄用後,用背景調查的方式來核實)。更何況,我們做的項目是以月為單位算的,而面試官最多用30分鐘來從我們的簡歷上了解項目經驗,我們對項目的熟悉程度要遠遠超過面試官,所以大可不用緊張。如果我們的工作經驗比面試官還豐富的話,甚至還可以控制整個面試流程。

再見企鵝,你好釘釘!(送阿里P7面經一份!)

既然面試官無法瞭解我們的底細,那麼他們怎麼來驗證我們的項目經驗和技術?下面總結了一些常用的提問方式。

再見企鵝,你好釘釘!(送阿里P7面經一份!)

2.4.2準備項目的各種細節,一旦被問倒了,就說明我們沒做過

一般來說,在面試前,大家應當準備項目描述的說辭,自信些,因為這部分我們自己說了算,流利些,因為我們在經過充分準備後,可以知道自己要說些什麼。而且這些是基於我們實際的項目經驗,那麼一旦讓面試官感覺我們都說不上來,那麼可信度就很低了。

不少人是拘泥於“項目裡做了什麼業務,以及代碼實現的細節”,這就相當於把後續提問權直接交給面試官。下表列出了一些不好的回答方式。

再見企鵝,你好釘釘!(送阿里P7面經一份!)

在避免上述不好的回答的同時,大家可以按下表所給出的要素準備項目介紹。

再見企鵝,你好釘釘!(送阿里P7面經一份!)

面試前,我們一定要準備,一定要有自信,但也要避免如下的一些情況。

再見企鵝,你好釘釘!(送阿里P7面經一份!)

三、阿里釘釘面經(已拿offer)

阿里釘釘一面(面試時長80min)

  • 1.自我介紹,對自己項目的介紹,架構圖呈現
  • 2.因為說自己以後的發展方向是音視頻,所以問了我用過哪些現有框架
  • 3.項目中的一些優化問題,MVC -> MVP,Handler的內存洩漏情況分析等,對MVP和MVVM的理解。
  • 4.項目中的第三方庫選擇的問題,因為簡歷中寫了我對第三方庫選擇的問題,比如選ObjectBox和greenDao的問題,圖片加載框架問題
  • 5.HashMap和HashTable,引申ConCurrentHashmap的深入,version1.7和1,8的區別,以及高併發下HashMap發生的問題四大啟動模式,以及場景對應
  • 6.Handler的機制介紹,不存在消息時的IdleHandler的運作機制,為什麼不能在子線程初始化問題
  • 7.設計模式中的單例介紹,使用場景(Okhttp的Seesion存儲等等),在線編寫快排算法
  • 8.OkHttp的源碼分析,及整體架構的流程圖繪製
  • 9.四大組件的完整介紹,及深入,答了IntentService、LocalBroadcast
  • 10.四大引用的問題和MVP框架相結合進行回答
  • 11.網絡中的響應碼對大體進行回答,具體回答了200、404、500、304等
  • 12.View繪製流程問題,如何不使用xml,來實現中間位置的定位
  • 13.事件分發機制流程講解,以及如何實現單擊事件和長按事件的判定
  • 14.關於為什麼選用mqtt協議的問題,優勢,原理等等(沒答上來,只說針對性做過測壓,以及oceanlink和mqtt的對比)

阿里釘釘二面(面試時長30min)

  • 1.自我介紹,優缺點的,以及未來希望的發展方向
  • 2.目整體介紹,如何做到分壓啊之類的問題
  • 3.如果給我阿里、騰訊、頭條、谷歌的offer的一個選擇(不摻雜地域性的問題),首先直接否定了google我就的一個企業的商業模式進行分析。我對釘釘這個產品的理解,我的回答是就的是釘釘前身的對標項目微信,已經後期轉型的商業模式作出的分析,最後給出的我的結論是一個企業性質的辦公軟件
  • 4.給出了釘釘一個mac平臺的關於共享屏幕的耗CPU的問題
  • 5.讓我提問,提的是關於音視頻發展方向的問題,具體是一個發展空間。

阿里釘釘三面(面試時長60min)

  • 1.自我介紹唄,還是一樣,項目介紹,項目的優缺點對比
  • 2.對MVC和MVP的理解,還有Handler的內存洩漏問題具體是什麼,解決方案知道有什麼,空數據的時候Handler的阻塞問題,但是我還是沒在Looper的源碼中找到,這裡讓我好好再看一下。
  • 3.另外為什麼使用MVP,他的優勢是什麼,內存洩漏是什麼樣的。
  • 4.http的長連接和短連接這兩個概念,怎麼去理解。我把它理解為持久化連接是什麼,然後對http的3個版本的主要區別做一個介紹
  • 5.http一整個流程,什麼Baidu.com輸入,經過了什麼。比較簡單的問題了,必答內容
  • 6.DNS、TCP的三次握手、四次揮手,當然我再答一些IP路由、鏈路還有物理層的內容
  • 7.RecyclerView的一個複用機制,和ListView的一個區別在哪裡
  • 8.HashMap、ConcurrentHashMap、Hashtable的問題,數據結構,線程安全啊之類的問題了,當然還是考了version 1.7和1.8。
  • 9.一個app的啟動流程,冷啟動和熱啟動,我說底層我不太瞭解,只知道會有AMS去調一些東西,但是具體內容不知道,後面就是一些初始化和Activitiy生命週期問題了。
  • 10.一道算法題三值之和求目標值,沒寫暴力,因為大家都會寫,但是浪費了很多時間,剛開始是通過二值求和的方式,但是想做成O(n),其實不太可能,後面改成了O(n^2)

HR面

  • 1.你對阿里面試官的印象如何?
  • 2.你從面試官上學到了哪些東西
  • 3.你每天的生活安排是什麼樣子的?
  • 4.你為什麼選擇來阿里?
  • 5.你以後的技術規劃是什麼樣的?
  • 6.你最有成就的項目是哪個?
  • 7.為什麼選擇android開發?
  • 8.你有什麼要問我的嗎?

最後

學習技術是一條漫長而又艱苦的道路,不能靠一時激情,也不是熬幾天幾夜就能學好的,必須養成平時努力學習的習慣。所以:貴在堅持!

此外我也把近期蒐集整理的騰訊、頭條、阿里、美團、字節跳動等公司2020年的高頻面試真題解析分享出來。

再見企鵝,你好釘釘!(送阿里P7面經一份!)

把這些技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,上面只是以圖片的形式給大家展示一部分。

【Android學習PDF+學習視頻+面試文檔+知識點筆記】關注+轉發+私信(學習),即可獲取免費領取方式!

【Android思維腦圖(技能樹)】

知識不體系?這裡還有整理出來的Android進階學習的思維腦圖,給大家參考一個方向。

再見企鵝,你好釘釘!(送阿里P7面經一份!)

【Android高級架構視頻學習資源】

Android部分精講視頻領取學習後更加是如虎添翼!進軍BATJ大廠等(備戰)!現在都說互聯網寒冬,其實無非就是你上錯了車,且穿的少(技能),要是你上對車,自身技術能力夠強,公司換掉的代價大,怎麼可能會被裁掉,都是淘汰末端的業務Curd而已!現如今市場上初級程序員氾濫,這套教程針對Android開發工程師1-6年的人員、正處於瓶頸期,想要年後突破自己漲薪的,進階Android中高級、架構師對你更是如魚得水,趕快領取吧!

【Android進階學習視頻】、【全套Android面試秘籍】可以關注+轉發+私信我【學習】查看免費領取方式!


分享到:


相關文章: