Android 實(shí)習(xí) | 如何在春招中拿到滿意的 offer

先說一下自己的情況,本人今年大四,雙非一本學(xué)校,計(jì)算機(jī)相關(guān)專業(yè),從大一開始加入學(xué)院創(chuàng)業(yè)團(tuán)隊(duì)的 Android 開發(fā)組。

去年過年后不久開始投簡(jiǎn)歷,前后投了騰訊、阿里、美團(tuán)、CVTE 這幾家公司,拿到了騰訊、阿里和 CVTE 的實(shí)習(xí) offer,最終選擇了騰訊,也算是給自己的第一次找工作之旅畫上了圓滿的句號(hào)。

這篇文章是去年春招之后的總結(jié),主要是分享我自己針對(duì)這次春招所做的準(zhǔn)備工作以及在面試過程中的一些經(jīng)驗(yàn)和思考,因?yàn)榻衲甑拇赫袑?shí)習(xí)也開始了,所以分享出來,希望能對(duì)大家找實(shí)習(xí)有些幫助。

一、有計(jì)劃的系統(tǒng)復(fù)習(xí)

各大互聯(lián)網(wǎng)公司的春招的時(shí)間大概是 3 月到 5 月,如果是通過內(nèi)推途徑的話,甚至 2 月份就會(huì)開始電話面試,也就意味著如果想拿到滿意的 offer,你必須在 2 月份之前就做好所有的復(fù)習(xí)工作。

先講下我自己之前的規(guī)劃,為了準(zhǔn)備這次春招,我提前了半年開始準(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í)在開發(fā)過程中,總有一些自己想學(xué)但是因?yàn)轫?xiàng)目壓力或者其他原因,然后自己打算放在以后再學(xué)的東西,也就是所謂「自己知道自己不會(huì)」的知識(shí)。

例如:

  • 比較常用的一些框架,比如客戶端的網(wǎng)絡(luò)請(qǐng)求、圖片加載框架
  • 常用的一些類和集合的源碼,比如 ArrayList、LinkedList、HashMap(面試必問)
  • 覺得自己無法清晰表達(dá)出來的概念,如「內(nèi)存泄露」、「Java 并發(fā)」

這個(gè)階段是一個(gè)對(duì)自己當(dāng)前知識(shí)體系查漏補(bǔ)缺的一個(gè)階段,你要做的,就是把自己不會(huì)的東西完整的列出來,然后逐個(gè)擊破。這個(gè)階段最好通過博客的形式,將自己學(xué)到的東西「用自己的語言」表達(dá)出來,如果你能用自己的理解清晰、完整地說出來,甚至能讓別人聽懂你講的東西,那基本就沒問題了。但如果自己腦海里沒法形成一個(gè)清晰的概念的話,只能證明你對(duì)這個(gè)知識(shí)點(diǎn)還不夠理解。

而且現(xiàn)在很多公司都將「寫博客」作為一個(gè)加分點(diǎn),一份簡(jiǎn)歷其實(shí)并不能反映多少東西,但如果你有一個(gè)長(zhǎng)期維護(hù)的博客的話,面試官可以通過你的博客更加清楚地了解你,而且堅(jiān)持本身就是一件不容易的事情,面試官對(duì)于能夠堅(jiān)持寫博客的人也會(huì)更加有好感。

1.2 全方位的學(xué)習(xí),構(gòu)建自己的「知識(shí)體系」

其實(shí)很多人在平時(shí)學(xué)習(xí)技術(shù)和日常開發(fā)過程中,學(xué)了非常多的東西,但很少有人會(huì)去系統(tǒng)地復(fù)習(xí),從而構(gòu)建自己的知識(shí)體系,導(dǎo)致自己學(xué)到的很多知識(shí)點(diǎn)沒辦法更好的產(chǎn)生聯(lián)系,而且可能會(huì)導(dǎo)致學(xué)了某個(gè)知識(shí)點(diǎn)沒過多久就忘了。

那如何構(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)和算法

也就是說我們需要將這幾個(gè)部分逐步擊破,慢慢完善我們的知識(shí)體系,這個(gè)階段是最花時(shí)間和精力的,但是堅(jiān)持下來會(huì)讓我們的基礎(chǔ)變得更加扎實(shí),而且能最大限度的構(gòu)建我們的知識(shí)體系。

在這里我推薦一份非常好的資料:Android 校招面試指南

1.3 學(xué)習(xí)「自己不知道自己不會(huì)」的知識(shí)

這個(gè)標(biāo)題可能會(huì)讓你們有點(diǎn)納悶,連自己都不知道自己不會(huì)的知識(shí)怎么學(xué)?這時(shí)候面試題的作用就出來了,「面向面試題編程」其實(shí)是一個(gè)查漏補(bǔ)缺、增強(qiáng)自己編程基礎(chǔ)的非常好的方式。在做面試題的時(shí)候,你會(huì)遇到很多奇奇怪怪的問題,很多都是你「之前沒有接觸過」或者「有接觸過卻沒有往那方面想」的問題。

剛開始遇到這些面試題確實(shí)很讓人很不舒服,但是這些面試題也確實(shí)能夠最大限度地提升我們對(duì)知識(shí)之間聯(lián)系的理解以及引發(fā)我們對(duì)一些具體使用場(chǎng)景的思考。當(dāng)然更重要的是我們可以通過刷往年各大互聯(lián)網(wǎng)公司的面試題,讓我們對(duì)于公司面試題有一個(gè)大致的認(rèn)識(shí)而且也能提前了解到面試官面試時(shí)候的一些套路和做法。

在這里推薦一些我看過的,覺得很不錯(cuò)的面試資料:

二、面試的一些建議和套路

首先,要強(qiáng)調(diào)一點(diǎn),想拿到自己滿意的 offer,最重要的就是提升自己的編程能力,特別是計(jì)算機(jī)方面的基礎(chǔ),這是每輪技術(shù)面試都必問的。沒有足夠的實(shí)力,再高的面試技巧也是沒用的。

不過,在面試中確實(shí)也有很多需要注意的地方,甚至存在一些通用的經(jīng)驗(yàn)和套路。掌握一些必要的面試技巧才能在面試官面前最大程度的展示我們自己真正的水平,甚至超常發(fā)揮,從而拿到滿意的 offer。

尋找自己的興趣點(diǎn),并將其培養(yǎng)成自己的瑞士軍刀

在學(xué) Android 的過程中,其實(shí)每個(gè)人都有著自己跟別人不一樣的興趣點(diǎn),例如我自己對(duì)「Android 網(wǎng)絡(luò)」、「圖片加載」這兩方面的知識(shí)就有很大的興趣。如果想要在 Android 面試中脫穎而出,拿到讓自己滿意的 offer,擁有某個(gè)「能超過絕大部分人」的技能是非常必要的,也就是所謂的你最出彩的地方。

在這次阿里技術(shù)二面的時(shí)候,面試官一上來就說:“上一輪的面試官已經(jīng)問了很多關(guān)于項(xiàng)目的東西了,你給我講一下你覺得自己在 Android 中學(xué)的最好的東西吧?!碑?dāng)時(shí)聽到這個(gè)問題我心中一陣竊喜,因?yàn)橹盎撕芏嗟臅r(shí)間和精力在學(xué)習(xí)「Android 網(wǎng)絡(luò)」和「圖片加載」這兩方面,對(duì)于這兩方面我還是很有把握的,最終也順利通過了阿里的技術(shù)面試。

上面舉的例子就是為了說明擁有某些技術(shù)特長(zhǎng)的重要性,在面試中很多時(shí)候面試官關(guān)心的是你會(huì)什么,而不是糾結(jié)你不會(huì)什么。而且技術(shù)的深度也比廣度要重要的多,如果你在某方面研究的比較深,很有自己的心得和體會(huì),甚至連面試官在這方面都沒辦法問倒你的話,通過這次面試的成功率就會(huì)大大增加。

將所有的知識(shí)點(diǎn)寫成對(duì)應(yīng)的逐字稿

在日常的 Android 開發(fā)和學(xué)習(xí)過程中,相信很多人會(huì)覺得我們學(xué)過的東西自己都已經(jīng)明白了,但是真正在面試官面前,被面試官問到問題的時(shí)候卻不知道怎么「完整」、「清晰」地表達(dá)出來。針對(duì)這個(gè)問題,我自己的解決方法是將我們?cè)诿嬖囍锌赡軙?huì)遇到的所有的知識(shí)點(diǎn)「全部」都寫成對(duì)應(yīng)的逐字稿。

這里的逐字稿有三個(gè)要點(diǎn):

  • 必須是自己的總結(jié)和體會(huì)
  • 結(jié)合你自己的開發(fā)和項(xiàng)目經(jīng)歷
  • 能夠流暢的朗讀出來

寫逐字稿的目的是讓我們?cè)诿嬖嚬倜媲澳軌颉竿暾埂ⅰ盖逦沟乇磉_(dá)出我們對(duì)知識(shí)的把握和理解,所以必須用「自己的語言」將自己的總結(jié)和體會(huì)寫出來,只有這樣我們才能記得更牢。在寫完逐字稿之后,我們可以試著朗讀一下,看看能不能流暢的朗讀出來,如果中間有一些拗口或別扭的句子,就把它逐漸改進(jìn)。

在這里,我用「講講你對(duì)進(jìn)程和線程的理解」這個(gè)問題來詳細(xì)講一下,如果我們?cè)谑孪葲]有準(zhǔn)備好相應(yīng)的逐字稿的話,我們可能就會(huì)直接講:

線程是 CPU 調(diào)度的最小單元,同時(shí)線程也是一種有限的資源。而進(jìn)程一般指一個(gè)執(zhí)行單元,在 PC 和移動(dòng)設(shè)備上指一個(gè)程序或者一個(gè)應(yīng)用。一個(gè)進(jìn)程可以包含多個(gè)線程。

然后就這么完了,完了,了。20 秒解決問題,接著面試官估計(jì)也會(huì)回你一句,今天就這么結(jié)束吧。在這里分享一下我自己對(duì)于「進(jìn)程與線程」的部分逐字稿,大家可以參考一下。

進(jìn)程與線程

按照操作系統(tǒng)中的描述。線程是 CPU 調(diào)度的最小單元,同時(shí)線程也是一種有限的資源。而進(jìn)程一般指一個(gè)執(zhí)行單元,在 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)程來回收內(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、可見進(jìn)程 — Visible process

3、服務(wù)進(jìn)程 — Service process

4、后臺(tái)進(jìn)程 — Background process

5、空進(jìn)程 — Empty process

線程

線程在 Android 中是一個(gè)很重要的概念,從用途上來說,線程分為主線程和子線程,主線程的作用是「運(yùn)行四大組件以及處理它們和用戶的交互」,而子線程的作用則是「執(zhí)行耗時(shí)任務(wù),比如網(wǎng)絡(luò)請(qǐng)求、I/O 操作等」,由于 Android 的特性,如果在主線程中執(zhí)行耗時(shí)操作那么就會(huì)導(dǎo)致程序無法及時(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ì)很滿意的。

這里附上我自己的逐字稿目錄,大家也可以按照這樣的分類,來對(duì)自己的「知識(shí)體系」建立不同的逐字稿。

遇到不懂的面試題直接回答不懂,但最好能將面試官的思路往我們會(huì)的東西帶

在面試的時(shí)候,切勿不懂裝懂。我們面試的是技術(shù)崗位,有幾斤幾兩,面試官問幾個(gè)問題就知道了,如果面試官問到的某個(gè)知識(shí)點(diǎn),你只是有點(diǎn)印象或者沒多少了解的話,直接回答這個(gè)知識(shí)不是很熟就行了。不然被面試官針對(duì)這個(gè)知識(shí)點(diǎn)追加幾個(gè)問題的話,分分鐘打你臉。

當(dāng)然,在說對(duì)這個(gè)知識(shí)不是很熟之后,可以試著將面試官的面試思路往我們會(huì)的東西帶,例如我在阿里二面的時(shí)候,面試官問我有沒有用過 B 樹,因?yàn)槲覍?duì) B 樹不是很熟,所以我當(dāng)時(shí)是這么講的:“對(duì)于 B 樹不是很熟悉,但之前在看 HashMap 源碼的時(shí)候,有研究過紅黑樹,對(duì)紅黑樹比較熟?!?然后成功地將面試官的問題轉(zhuǎn)向了我熟悉的紅黑樹和 HashMap 的源碼上面。

有意識(shí)地鍛煉自己的溝通和表達(dá)能力

如果想拿到滿意的 offer,除了自身的技術(shù)實(shí)力過硬之外,擁有良好的溝通和表達(dá)能力也是非常重要的。即使實(shí)力再?gòu)?qiáng),你不能很好的表達(dá)出來的話,也是白費(fèi)功夫。溝通和表達(dá)能力需要長(zhǎng)時(shí)間的「刻意練習(xí)」,并沒有什么捷徑。

其實(shí)在大一的時(shí)候,我的溝通和表達(dá)能力也是相當(dāng)差的,但后來自己開始慢慢明白了這項(xiàng)能力的重要性,所以在很多場(chǎng)合都會(huì)「刻意練習(xí)」這項(xiàng)技能。而且自己后來當(dāng)上了團(tuán)隊(duì)的負(fù)責(zé)人,有很多場(chǎng)合都需要我上臺(tái)演講或者進(jìn)行一些內(nèi)部的分享,再加上自己后來很喜歡玩「狼人殺」,表達(dá)能力便在這兩年間有了很大的提升。

每一次面試完都要進(jìn)行復(fù)盤,詳細(xì)記錄面試問到的題目

在每一輪面試結(jié)束之后,不要急著放松或者休息,先拿出備忘錄將面試中面試官問到的問題「全部」都詳細(xì)地記錄下來。而且找個(gè)安靜的地方慢慢的回憶自己在面試過程中有沒有哪些環(huán)節(jié)表現(xiàn)的不是很好或者是需要改進(jìn)的。

每一次的面試都是一個(gè)很寶貴的經(jīng)驗(yàn)和財(cái)富,在面試過后都要對(duì)面試進(jìn)行復(fù)盤,找出我們?cè)诿嬖囍斜憩F(xiàn)的不夠好的地方,然后針對(duì)性地進(jìn)行改進(jìn),以及收集在面試過程中我們答不出來的面試題,有針對(duì)的進(jìn)行復(fù)習(xí),指不定下一輪面試問的就是你上一輪面試不會(huì)的問題,而且這個(gè)可能性是相當(dāng)大的,因?yàn)槊嬖嚬僦g也是會(huì)進(jìn)行交流的,你的面試表現(xiàn)也會(huì)傳到下個(gè)面試官的手中。

總結(jié)

想要拿到滿意的 offer,「堅(jiān)持」是最重要的,拋開了努力和堅(jiān)持,其他的一切方法論都毫無用處。任何一個(gè)行業(yè)都是不容易的,唯有持續(xù)的「有效」努力,才能走得更遠(yuǎn)。

以上便是我這半年來對(duì)于面試的一些經(jīng)驗(yàn)和體會(huì),希望能對(duì)大家有所幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基礎(chǔ) 不管是Android基礎(chǔ)還是Java基礎(chǔ)以及常見的數(shù)據(jù)結(jié)構(gòu),這些是無原則地必須要熟練掌握的,尤其是非計(jì)算機(jī)專...
    JxMY閱讀 2,863評(píng)論 2 48
  • Android基礎(chǔ)及相關(guān)機(jī)制 Android Context 上下文 你必須知道的一切 Android中子線程真的...
    楷桐閱讀 2,102評(píng)論 1 30
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,584評(píng)論 0 6
  • 美男子腓力四世去世后,他的大兒子路易十世繼承了王位。路易十世于1289年10月4日出生于巴黎,母親是納瓦拉女...
    若魚求水閱讀 901評(píng)論 0 0
  • 真的很希望我每天都可以抽空來寫一寫。不,不是抽空,而是在閑下來的時(shí)候。發(fā)現(xiàn)每天還是有那么一些時(shí)間是可以用來打字噠!...
    佐恬閱讀 195評(píng)論 0 0

友情鏈接更多精彩內(nèi)容