作者: developerHaoz
先說(shuō)一下自己的情況,本人今年大四,雙非一本學(xué)校,計(jì)算機(jī)相關(guān)專業(yè),從大一開(kāi)始加入學(xué)院創(chuàng)業(yè)團(tuán)隊(duì)的 Android 開(kāi)發(fā)組。
去年過(guò)年后不久開(kāi)始投簡(jiǎn)歷,前后投了騰訊、阿里、美團(tuán)、CVTE 這幾家公司,拿到了騰訊、阿里和 CVTE 的實(shí)習(xí)offer,最終選擇了騰訊,也算是給自己的第一次找工作之旅畫(huà)上了圓滿的句號(hào)。
去年9月從實(shí)習(xí)轉(zhuǎn)為正式員工。
這篇文章是去年春招之后的總結(jié),主要是分享我自己針對(duì)這次春招所做的準(zhǔn)備工作以及在面試過(guò)程中的一些經(jīng)驗(yàn)和思考,因?yàn)榻衲甑拇赫袑?shí)習(xí)也要開(kāi)始了,所以分享出來(lái),希望能對(duì)大家找實(shí)習(xí)有些幫助。
各大互聯(lián)網(wǎng)公司的春招的時(shí)間大概是 3 月到 6 月,如果是通過(guò)內(nèi)推途徑的話,甚至 2 月份就會(huì)開(kāi)始電話面試,也就意味著如果想拿到滿意的 offer,你必須在 2 月份之前就做好所有的復(fù)習(xí)工作。
先講下我自己之前的規(guī)劃,為了準(zhǔn)備這次春招,我提前了半年開(kāi)始準(zhǔn)備復(fù)習(xí),復(fù)習(xí)階段主要分為三部分:
學(xué)習(xí)「自己知道自己不會(huì)」的知識(shí)
全方位的學(xué)習(xí),構(gòu)建自己的「知識(shí)體系」
學(xué)習(xí)「自己不知道自己不會(huì)」的知識(shí)
1.1 學(xué)習(xí)「自己知道自己不會(huì)」的知識(shí)
其實(shí)在開(kāi)發(fā)過(guò)程中,總有一些自己想學(xué)但是因?yàn)轫?xiàng)目壓力或者其他原因,然后自己打算放在以后再學(xué)的東西,也就是所謂「自己知道自己不會(huì)」的知識(shí)。
例如:
比較常用的一些框架,比如客戶端的網(wǎng)絡(luò)請(qǐng)求、圖片加載框架
常用的一些類和集合的源碼,比如 ArrayList、LinkedList、HashMap(面試必問(wèn))
覺(jué)得自己無(wú)法清晰表達(dá)出來(lái)的概念,如「內(nèi)存泄露」、「Java 并發(fā)」
這個(gè)階段是一個(gè)對(duì)自己當(dāng)前知識(shí)體系查漏補(bǔ)缺的一個(gè)階段,你要做的,就是把自己不會(huì)的東西完整的列出來(lái),然后逐個(gè)擊破。
這個(gè)階段最好通過(guò)博客的形式,將自己學(xué)到的東西「用自己的語(yǔ)言」表達(dá)出來(lái),如果你能用自己的理解清晰、完整地說(shuō)出來(lái),甚至能讓別人聽(tīng)懂你講的東西,那基本就沒(méi)問(wèn)題了。
但如果自己腦海里沒(méi)法形成一個(gè)清晰的概念的話,只能證明你對(duì)這個(gè)知識(shí)點(diǎn)還不夠理解。
而且現(xiàn)在很多公司都將「寫(xiě)博客」作為一個(gè)加分點(diǎn),一份簡(jiǎn)歷其實(shí)并不能反映多少東西,但如果你有一個(gè)長(zhǎng)期維護(hù)的博客的話,面試官可以通過(guò)你的博客更加清楚地了解你,而且堅(jiān)持本身就是一件不容易的事情,面試官對(duì)于能夠堅(jiān)持寫(xiě)博客的人也會(huì)更加有好感。
1.2 全方位的學(xué)習(xí),構(gòu)建自己的「知識(shí)體系」
其實(shí)很多人在平時(shí)學(xué)習(xí)技術(shù)和日常開(kāi)發(fā)過(guò)程中,學(xué)了非常多的東西,但很少有人會(huì)去系統(tǒng)地復(fù)習(xí),從而構(gòu)建自己的知識(shí)體系,導(dǎo)致自己學(xué)到的很多知識(shí)點(diǎn)沒(méi)辦法更好的產(chǎn)生聯(lián)系,而且可能會(huì)導(dǎo)致學(xué)了某個(gè)知識(shí)點(diǎn)沒(méi)過(guò)多久就忘了。
那如何構(gòu)建我們的「知識(shí)體系」呢?
Android 里面所謂的「知識(shí)體系」,我認(rèn)為主要包含這幾個(gè)部分:
Java 和 Anroid 基礎(chǔ)
計(jì)算機(jī)網(wǎng)絡(luò)
操作系統(tǒng)
設(shè)計(jì)模式
數(shù)據(jù)結(jié)構(gòu)和算法
也就是說(shuō)我們需要將這幾個(gè)部分逐步擊破,慢慢完善我們的知識(shí)體系,這個(gè)階段是最花時(shí)間和精力的,但是堅(jiān)持下來(lái)會(huì)讓我們的基礎(chǔ)變得更加扎實(shí),而且能最大限度的構(gòu)建我們的知識(shí)體系。
在這里我推薦一份非常好的資料:Android 校招面試指南
https://lrh1993.gitbooks.io/android_interview_guide/content/
1.3 學(xué)習(xí)「自己不知道自己不會(huì)」的知識(shí)
這個(gè)標(biāo)題可能會(huì)讓你們有點(diǎn)納悶,連自己都不知道自己不會(huì)的知識(shí)怎么學(xué)?
這時(shí)候面試題的作用就出來(lái)了,「面向面試題編程」其實(shí)是一個(gè)查漏補(bǔ)缺、增強(qiáng)自己編程基礎(chǔ)的非常好的方式。
在做面試題的時(shí)候,你會(huì)遇到很多奇奇怪怪的問(wèn)題,很多都是你「之前沒(méi)有接觸過(guò)」或者「有接觸過(guò)卻沒(méi)有往那方面想」的問(wèn)題。
剛開(kāi)始遇到這些面試題確實(shí)很讓人很不舒服,但是這些面試題也確實(shí)能夠最大限度地提升我們對(duì)知識(shí)之間聯(lián)系的理解以及引發(fā)我們對(duì)一些具體使用場(chǎng)景的思考。
當(dāng)然更重要的是我們可以通過(guò)刷往年各大互聯(lián)網(wǎng)公司的面試題,讓我們對(duì)于公司面試題有一個(gè)大致的認(rèn)識(shí)而且也能提前了解到面試官面試時(shí)候的一些套路和做法。
在這里推薦一些我看過(guò)的,覺(jué)得很不錯(cuò)的面試資料:
Android 面試指南
https://xiaozhuanlan.com/android-interview
AndroidInterview-Q-A
https://github.com/JackyAndroid/AndroidInterview-Q-A
Android LearningNotes
https://github.com/francistao/LearningNotes
Android 面試
https://www.jianshu.com/nb/3450453
首先,要強(qiáng)調(diào)一點(diǎn),想拿到自己滿意的 offer,最重要的就是提升自己的編程能力,特別是計(jì)算機(jī)方面的基礎(chǔ),這是每輪技術(shù)面試都必問(wèn)的。沒(méi)有足夠的實(shí)力,再高的面試技巧也是沒(méi)用的。
不過(guò),在面試中確實(shí)也有很多需要注意的地方,甚至存在一些通用的經(jīng)驗(yàn)和套路。
掌握一些必要的面試技巧才能在面試官面前最大程度的展示我們自己真正的水平,甚至超常發(fā)揮,從而拿到滿意的offer。
2.1 尋找自己的興趣點(diǎn),并將其培養(yǎng)成自己的瑞士軍刀
在學(xué) Android 的過(guò)程中,其實(shí)每個(gè)人都有著自己跟別人不一樣的興趣點(diǎn),例如我自己對(duì)「Android 網(wǎng)絡(luò)」、「圖片加載」這兩方面的知識(shí)就有很大的興趣。
如果想要在 Android 面試中脫穎而出,拿到讓自己滿意的 offer,擁有某個(gè)「能超過(guò)絕大部分人」的技能是非常必要的,也就是所謂的你最出彩的地方。
在這次阿里技術(shù)二面的時(shí)候,面試官一上來(lái)就說(shuō):“上一輪的面試官已經(jīng)問(wèn)了很多關(guān)于項(xiàng)目的東西了,你給我講一下你覺(jué)得自己在 Android 中學(xué)的最好的東西吧?!?/span>
當(dāng)時(shí)聽(tīng)到這個(gè)問(wèn)題我心中一陣竊喜,因?yàn)橹盎撕芏嗟臅r(shí)間和精力在學(xué)習(xí)「Android 網(wǎng)絡(luò)」和「圖片加載」這兩方面,對(duì)于這兩方面我還是很有把握的,最終也順利通過(guò)了阿里的技術(shù)面試。
上面舉的例子就是為了說(shuō)明擁有某些技術(shù)特長(zhǎng)的重要性,在面試中很多時(shí)候面試官關(guān)心的是你會(huì)什么,而不是糾結(jié)你不會(huì)什么。
而且技術(shù)的深度也比廣度要重要的多,如果你在某方面研究的比較深,很有自己的心得和體會(huì),甚至連面試官在這方面都沒(méi)辦法問(wèn)倒你的話,通過(guò)這次面試的成功率就會(huì)大大增加。
2.2 將所有的知識(shí)點(diǎn)寫(xiě)成對(duì)應(yīng)的逐字稿
在日常的 Android 開(kāi)發(fā)和學(xué)習(xí)過(guò)程中,相信很多人會(huì)覺(jué)得我們學(xué)過(guò)的東西自己都已經(jīng)明白了,但是真正在面試官面前,被面試官問(wèn)到問(wèn)題的時(shí)候卻不知道怎么「完整」、「清晰」地表達(dá)出來(lái)。
針對(duì)這個(gè)問(wèn)題,我自己的解決方法是將我們?cè)诿嬖囍锌赡軙?huì)遇到的所有的知識(shí)點(diǎn)「全部」都寫(xiě)成對(duì)應(yīng)的逐字稿。
這里的逐字稿有三個(gè)要點(diǎn):
必須是自己的總結(jié)和體會(huì)
結(jié)合你自己的開(kāi)發(fā)和項(xiàng)目經(jīng)歷
能夠流暢的朗讀出來(lái)
寫(xiě)逐字稿的目的是讓我們?cè)诿嬖嚬倜媲澳軌颉竿暾?、「清晰」地表達(dá)出我們對(duì)知識(shí)的把握和理解,所以必須用「自己的語(yǔ)言」將自己的總結(jié)和體會(huì)寫(xiě)出來(lái),只有這樣我們才能記得更牢。
在寫(xiě)完逐字稿之后,我們可以試著朗讀一下,看看能不能流暢的朗讀出來(lái),如果中間有一些拗口或別扭的句子,就把它逐漸改進(jìn)。
在這里,我用「講講你對(duì)進(jìn)程和線程的理解」這個(gè)問(wèn)題來(lái)詳細(xì)講一下,如果我們?cè)谑孪葲](méi)有準(zhǔn)備好相應(yīng)的逐字稿的話,我們可能就會(huì)直接講:
線程是 CPU 調(diào)度的最小單元,同時(shí)線程也是一種有限的資源。而進(jìn)程相當(dāng)于線程的“容器”,在PC 和移動(dòng)設(shè)備上指一個(gè)程序或者一個(gè)應(yīng)用。一個(gè)進(jìn)程可以包含多個(gè)線程。
然后就這么完了,完了,了。20 秒解決問(wèn)題,接著面試官估計(jì)也會(huì)回你一句,今天就這么結(jié)束吧。
在這里分享一下我自己對(duì)于「進(jìn)程與線程」的部分逐字稿,大家可以參考一下。
進(jìn)程與線程
按照操作系統(tǒng)中的描述。線程是 CPU 調(diào)度的最小單元,同時(shí)線程也是一種有限的資源。而進(jìn)程相當(dāng)于線程的“容器”,在 PC 和移動(dòng)設(shè)備上指一個(gè)程序或者一個(gè)應(yīng)用。一個(gè)進(jìn)程可以包含多個(gè)線程。
進(jìn)程
當(dāng)一個(gè)程序第一次啟動(dòng)的時(shí)候,Android 會(huì)啟動(dòng)一個(gè) Linux 進(jìn)程和一個(gè)主線程。
默認(rèn)情況下,同一應(yīng)用的所有組件均在相同的進(jìn)程中運(yùn)行。如果我們需要控制某個(gè)組件所屬的進(jìn)程,則可在AndroidManifest 文件中執(zhí)行此操作。
組件運(yùn)行在哪個(gè)進(jìn)程中,是在 AndroidManifest 文件中進(jìn)行設(shè)置的,activity、service、receiver 和 provider 均支持 android:process 屬性,此屬性可以指定該組件應(yīng)在哪個(gè)進(jìn)程運(yùn)行。我們可以設(shè)置此屬性,使每個(gè)組件均在各自的進(jìn)程中運(yùn)行。
進(jìn)程的優(yōu)先級(jí)
Android 系統(tǒng)將盡量長(zhǎng)時(shí)間地保持應(yīng)用進(jìn)程,但為了新建進(jìn)程或運(yùn)行更重要的進(jìn)程,最終需要移除舊進(jìn)程來(lái)回收內(nèi)存。為了確定保留或終止哪些進(jìn)程,系統(tǒng)會(huì)根據(jù)進(jìn)程中正在運(yùn)行的組件以及這些組件的狀態(tài),將每個(gè)進(jìn)程放入 “重要性層次結(jié)構(gòu)” 中。必要時(shí),系統(tǒng)會(huì)首先消除重要性最低的進(jìn)程,然后是重要性相對(duì)較高的進(jìn)程,以此類推,以回收進(jìn)程。
重要性層次結(jié)構(gòu)一共有 5 級(jí)
1、前臺(tái)進(jìn)程 — Foreground process
2、可見(jiàn)進(jìn)程 — Visible process
3、服務(wù)進(jìn)程 — Service process
4、后臺(tái)進(jìn)程 — Background process
5、空進(jìn)程 — Empty process
線程
線程在 Android 中是一個(gè)很重要的概念,從用途上來(lái)說(shuō),線程分為主線程和子線程,主線程的作用是「運(yùn)行四大組件以及處理它們和用戶的交互」,而子線程的作用則是「執(zhí)行耗時(shí)任務(wù),比如網(wǎng)絡(luò)請(qǐng)求、I/O 操作等」,由于 Android 的特性,如果在主線程中執(zhí)行耗時(shí)操作那么就會(huì)導(dǎo)致程序無(wú)法及時(shí)地響應(yīng)。因此耗時(shí)操作必須放在子線程中執(zhí)行。
Android 中的線程形態(tài)
除了 Thread 本身以外,在 Android 中可以扮演線程角色的還有很多,比如 AsyncTask 和IntentService,同時(shí) HandlerThread 也是一種特殊的線程。
盡管 AsyncTask、IntentService以及 HandlerThread 的「表現(xiàn)形式」都有別于傳統(tǒng)的線程,但是它們的本質(zhì)仍然是傳統(tǒng)的線程。
我相信,如果你能像我上面的逐字稿這樣,結(jié)合 Android 里面的知識(shí)點(diǎn)清晰地表達(dá)出你對(duì)進(jìn)程和線程的理解的話,面試官肯定會(huì)很滿意的。
這里附上我自己的逐字稿目錄,大家也可以按照這樣的分類,來(lái)對(duì)自己的「知識(shí)體系」建立不同的逐字稿。
2.3 遇到不懂的面試題直接回答不懂,但最好能將面試官的思路往我們會(huì)的東西帶
在面試的時(shí)候,切勿不懂裝懂。
我們面試的是技術(shù)崗位,有幾斤幾兩,面試官問(wèn)幾個(gè)問(wèn)題就知道了,如果面試官問(wèn)到的某個(gè)知識(shí)點(diǎn),你只是有點(diǎn)印象或者沒(méi)多少了解的話,直接回答這個(gè)知識(shí)不是很熟就行了。不然被面試官針對(duì)這個(gè)知識(shí)點(diǎn)追加幾個(gè)問(wèn)題的話,分分鐘打你臉。
當(dāng)然,在說(shuō)對(duì)這個(gè)知識(shí)不是很熟之后,可以試著將面試官的面試思路往我們會(huì)的東西帶,例如我在阿里二面的時(shí)候,面試官問(wèn)我有沒(méi)有用過(guò) B 樹(shù),因?yàn)槲覍?duì) B 樹(shù)不是很熟,所以我當(dāng)時(shí)是這么講的:“對(duì)于 B 樹(shù)不是很熟悉,但之前在看 HashMap 源碼的時(shí)候,有研究過(guò)紅黑樹(shù),對(duì)紅黑樹(shù)比較熟。” 然后成功地將面試官的問(wèn)題轉(zhuǎn)向了我熟悉的紅黑樹(shù)和 HashMap 的源碼上面。
2.4 有意識(shí)地鍛煉自己的溝通和表達(dá)能力
如果想拿到滿意的 offer,除了自身的技術(shù)實(shí)力過(guò)硬之外,擁有良好的溝通和表達(dá)能力也是非常重要的。
即使實(shí)力再?gòu)?qiáng),你不能很好的表達(dá)出來(lái)的話,也是白費(fèi)功夫。溝通和表達(dá)能力需要長(zhǎng)時(shí)間的「刻意練習(xí)」,并沒(méi)有什么捷徑。
其實(shí)在大一的時(shí)候,我的溝通和表達(dá)能力也是相當(dāng)差的,但后來(lái)自己開(kāi)始慢慢明白了這項(xiàng)能力的重要性,所以在很多場(chǎng)合都會(huì)「刻意練習(xí)」這項(xiàng)技能。
而且自己后來(lái)當(dāng)上了團(tuán)隊(duì)的負(fù)責(zé)人,有很多場(chǎng)合都需要我上臺(tái)演講或者進(jìn)行一些內(nèi)部的分享,再加上自己后來(lái)很喜歡玩「狼人殺」,表達(dá)能力便在這兩年間有了很大的提升。
2.5 每一次面試完都要進(jìn)行復(fù)盤(pán),詳細(xì)記錄面試問(wèn)到的題目
在每一輪面試結(jié)束之后,不要急著放松或者休息,先拿出備忘錄將面試中面試官問(wèn)到的問(wèn)題「全部」都詳細(xì)地記錄下來(lái)。而且找個(gè)安靜的地方慢慢的回憶自己在面試過(guò)程中有沒(méi)有哪些環(huán)節(jié)表現(xiàn)得不是很好或者是需要改進(jìn)的。
每一次的面試都是一個(gè)很寶貴的經(jīng)驗(yàn)和財(cái)富,在面試過(guò)后都要對(duì)面試進(jìn)行復(fù)盤(pán),找出我們?cè)诿嬖囍斜憩F(xiàn)的不夠好的地方,然后針對(duì)性地進(jìn)行改進(jìn),以及收集在面試過(guò)程中我們答不出來(lái)的面試題,有針對(duì)的進(jìn)行復(fù)習(xí),指不定下一輪面試問(wèn)的就是你上一輪面試不會(huì)的問(wèn)題,而且這個(gè)可能性是相當(dāng)大的,因?yàn)槊嬖嚬僦g也是會(huì)進(jìn)行交流的,你的面試表現(xiàn)也會(huì)傳到下個(gè)面試官的手中。
想要拿到滿意的 offer,「堅(jiān)持」是最重要的,拋開(kāi)了努力和堅(jiān)持,其他的一切方法論都毫無(wú)用處。
任何一個(gè)行業(yè)都是不容易的,唯有持續(xù)的「有效」努力,才能走得更遠(yuǎn)。以上便是我對(duì)于春招面試的一些經(jīng)驗(yàn)和體會(huì),希望能對(duì)大家有所幫助。
●編號(hào)862,輸入編號(hào)直達(dá)本文
●輸入m獲取文章目錄
聯(lián)系客服