【Android實(shí)習(xí)】20場面試斬獲大廠offer,我學(xué)會了什么

前言

很高興遇見你~

先說一下筆者春招實(shí)習(xí)的情況:從三月初到四月半,經(jīng)歷了近20場面試,一共面試了五家企業(yè),通過了騰訊、字節(jié)、螞蟻、美團(tuán)的面試,虎牙在一面之后拒了二面邀請。

金三銀四,筆者不是在面試中,就是在面試的路上,踩了很多坑,吃了很多虧,也學(xué)了很多的東西。這篇文章,就想要把筆者的這些收獲分享給你們,希望對你們有幫助。

文章的內(nèi)容總體上可以分為兩個(gè)部分:吹水、干貨。吹水部分主要是分析筆者的面試過程,有興趣的讀者可以看一下;干貨部分主要是分享筆者的面試經(jīng)驗(yàn),從技術(shù)到非技術(shù)到面試表現(xiàn),可以根據(jù)標(biāo)題按需閱讀。同時(shí)需要注意的是:文章內(nèi)容均為筆者的個(gè)人經(jīng)驗(yàn)之談,請不要奉為圭臬,辯證看待,同時(shí)歡迎各位評論區(qū)交流。

那我們開始吧~

面試經(jīng)歷

這部分主要是跟大家分享一下筆者的整個(gè)實(shí)習(xí)面試過程,屬于純吹水內(nèi)容,且內(nèi)容稍長。有興趣的讀者可以看一下,或者直接跳轉(zhuǎn)到知識總結(jié)看干貨。

三四月幾乎各路大廠開始瘋狂招聘實(shí)習(xí)生。但其實(shí)有一些大廠,如騰訊、字節(jié),在三月前甚至年前,就已經(jīng)開始接收簡歷了。這個(gè)時(shí)候的崗位幾乎應(yīng)有盡有,難度也會相對三四月低一些,是一個(gè)非常好的機(jī)會。但筆者,比較慫,感覺沒有準(zhǔn)備好,到了三月才開始投遞簡歷。

三月初投遞的第一家企業(yè)就是,騰訊。

經(jīng)過工作室?guī)熜值膬?nèi)推投遞簡歷,很快就收到了面試邀請,這里得非常感謝師兄的幫忙啊。在三月六號開始了騰訊的第一輪面試,也是整個(gè)金三銀四的第一輪面試。面試形式是電話面,難度不高,也有適當(dāng)拓展。結(jié)束后通過官網(wǎng)查詢已經(jīng)進(jìn)入復(fù)試狀態(tài)。當(dāng)時(shí)是真的是非常高興,之后詢問了師兄,說簡歷已經(jīng)拿給了總監(jiān),總監(jiān)面試一過,就只剩下HR面試了。距離鵝廠就差臨門一腳。

隨后騰訊二面等待了一個(gè)多星期,非常久。等待期間經(jīng)過其他師兄的內(nèi)推,投遞了字節(jié)跳動。

字節(jié)跳動的面試流程速度相對穩(wěn)定,每一面結(jié)束后隔一兩天就會打電話約下一面。3.11進(jìn)行了字節(jié)一面,3.15進(jìn)行了字節(jié)二面。字節(jié)跳動面試自我感覺表現(xiàn)挺一般,有很多的點(diǎn)都沒答上來。當(dāng)時(shí)面完我都覺得自己掛了,直接癱坐在椅子上喘氣,心想著完了,與字節(jié)無緣了。但隔了兩天之后,字節(jié)HR打電話來約三面時(shí)間,很驚喜,有點(diǎn)失而復(fù)得的那種感覺,雖然這個(gè)比喻不太準(zhǔn)確,但確實(shí)是我意料之外的。

隔了一個(gè)多星期,在3.16進(jìn)行了騰訊二面。二面的內(nèi)容主要是一些軟技能問題。心想著沒有技術(shù)問題,應(yīng)該差不多穩(wěn)了。這時(shí)候,再一次出乎我的意外:在3.18號騰訊預(yù)約了我24號初試。當(dāng)時(shí)驚呆了:啊?怎么從復(fù)試退到初試?后來了解后發(fā)現(xiàn)是,我上一輪總監(jiān)面試掛了,被騰訊其他的部門撈了,重新回到一面。這是我三月份的第一次面試掛,當(dāng)時(shí)心里還是蠻難受的,畢竟距離鵝廠offer就差那么一步。但我并沒有多少的悲傷時(shí)間,因?yàn)轳R不停蹄,字節(jié)三面來了。

3.22,字節(jié)三面。三面的面試官是c++開發(fā)工程師,對于android和Java似乎不太熟練,問的問題主要是c語言和算法。但我準(zhǔn)備的內(nèi)容是android和Java居多,c語言部分我回答得比較一般??傮w上,整個(gè)字節(jié)跳動的三輪面試我的表現(xiàn)都比較一般,但當(dāng)時(shí)面試完還是很期待能過的。這次沒有奇跡,過了兩天,字節(jié)的另一個(gè)部門HR打電話給我,給我重新安排面試。好家伙,我又又又回到了一面?。?!

到這里其實(shí)心態(tài)是有點(diǎn)崩的。騰訊與字節(jié)都面了一趟,但是都掛了,從一面重新開始。那會的時(shí)間已經(jīng)來到了三月下旬,騰訊和字節(jié)都在一面,相當(dāng)于剛剛起步。而我身邊的同學(xué)很多已經(jīng)拿到 BAT offer了。心里有點(diǎn)難受,同時(shí)還有點(diǎn)怕,怕最終找不到實(shí)習(xí)。經(jīng)過這兩輪的打擊,心里其實(shí)也沒有什么底氣了。

此時(shí)騰訊和字節(jié)的面試流程先告一段落,三月下旬,其他的企業(yè)也開始面試了。

在三月初那會,我投的不只是字節(jié)、騰訊,還有美團(tuán)、螞蟻、虎牙。但他們的流程比較慢,遲遲沒開始面試。美團(tuán)在三月中筆試之后,終于在3.23開始了第一場面試。

美團(tuán)前面的技術(shù)面流程比騰訊和字節(jié)快很多,3.23下午進(jìn)行了一面,晚上就約了3.25的二面。但是在之后的HR面試隔得比較久,到了4.1,進(jìn)行了HR面試。

美團(tuán)總體的面試過程是比較順利的,一面和二面的面試題目都回答得七七八八。而且有了前面的面試經(jīng)驗(yàn),此時(shí)表達(dá)更加清晰、語速也沒有那么快了。在4.8號美團(tuán)HR打電話通知面試通過了。但是到了此時(shí),面試情況已經(jīng)和三月20號那會不一樣了。至于為什么,這還要從也是在三月下旬開始面試的螞蟻開始講起。

在三月初我經(jīng)過內(nèi)推投遞了螞蟻的一個(gè)部門。螞蟻的簡歷篩選階段非常久,篩選了半個(gè)多月。我一直以為我跟螞蟻無緣了,簡歷沒過去。直到23號,面試官打電話過來詢問了一些我的情況,項(xiàng)目、學(xué)習(xí)情況等等。然后25號跟我約了26號的一面。對于螞蟻這個(gè)部門,我是真的沒有抱希望能過的。前面經(jīng)過了字節(jié)與騰訊的打擊,這會已經(jīng)信心大折。我想著:去體驗(yàn)一下卷中卷的部門,感受被刷的快樂。

之后在26號進(jìn)行了螞蟻的一面,總體難度還是比較高,問到了比較多的一些優(yōu)化、緩存的內(nèi)容。而這一部分我接觸得不多,大多是靠推理、猜測來回答的,也回答得不是很好。后面還跟面試官聊了一些博客相關(guān)的內(nèi)容。面試完之后我覺得懸了,就也沒抱著活的希望。接著就在31號上午收到了螞蟻的電話,約了下午的面試。[oh my god, amazing]

螞蟻二面是比較特殊的,一共有兩個(gè)面試官:一個(gè)是技術(shù)面試官,另一個(gè)是HR。技術(shù)面試官先提問了一會,大概15分鐘吧;之后是HR跟我聊,也是聊了15分鐘。主要問的內(nèi)容都是在了解我的情況,例如工作室如何、成績?nèi)绾?、怎么學(xué)習(xí)、怎么管理時(shí)間、博客等等。給我印象比較深刻的是這個(gè)HR姐姐。和其他企業(yè)的HR不同的是,面試過程中就像在和一個(gè)朋友聊天,了解我的學(xué)習(xí)以及周邊環(huán)境的情況,還會給我反饋表達(dá)她對我的印象。

然后在4月2號,面試官加了我微信,給我補(bǔ)了筆試的內(nèi)容,就是做算法題。過了兩天,收到了螞蟻的錄用喜報(bào)?。。‘?dāng)時(shí)掐了一下大腿,沒在做夢。。。

再拐回來說一下騰訊和字節(jié)跳動的后續(xù)。騰訊在3.24進(jìn)行了一面、3.29進(jìn)行了二面、4.2進(jìn)行了三面、4.13進(jìn)行了HR面試。前面的速度是比較快的,只是HR可能比較忙,所以一直沒約上,隔了比較久。字節(jié)跳動在4.1一面、4.6二面、4.9三面、4.14HR面,半個(gè)月完成了4個(gè)面試,速度比之前的也快了很多。

前面還講到了三月初投遞的虎牙,但虎牙的速度是真的慢,我甚至以為我的簡歷被篩選掉了。直到四月份才開始約面試。

虎牙在4月6號進(jìn)行了一面,隔了幾天約了線下二面,也是終面。但此時(shí)我已經(jīng)有意向的企業(yè),就拒絕了面試。

整個(gè)面試流程,給我最大的感觸是:不嘗試,永遠(yuǎn)是0;嘗試了,概率再小,都有可能是1。

故事到這里就講完了。誒,怎么沒說去哪個(gè)公司了?哈哈,你猜我去哪了?

知識總結(jié)

面試中會被考察的具體問題有三個(gè)影響因素:部門需求、簡歷、面試中提到的知識點(diǎn)。因此不同的部門不同的面試者遇到的面試題很可能是完全不一樣的,這也是我為什么不直接把面試題放出來的原因,沒有多大的參考價(jià)值。

這一部分主要總結(jié)在面試中被考察到的知識點(diǎn),多為高頻面試問題,讀者可以自行考察是否這些知識都掌握了。需要特別注意的是這并不是全部的知識體系,僅僅是筆者遇到的面試題,讀者可以按照大體的方向去學(xué)習(xí),但切不可認(rèn)為這樣就足夠了,這里提到的知識點(diǎn)是遠(yuǎn)遠(yuǎn)不夠的。

面試的過程中更多的時(shí)候不會單純地考察知識點(diǎn),而是會結(jié)合一些需求或者業(yè)務(wù)場景來多方面考察對知識點(diǎn)的理解。因此筆者建議,對于知識點(diǎn)要以理解為首要任務(wù),而不是背誦答案。

Android

總體來說,本次春招問的android內(nèi)容其實(shí)不多,主要還是看著我的簡歷問,簡歷寫得不多,問得也就比較少。但android的基礎(chǔ)內(nèi)容如handler、view機(jī)制等還是要會的,其他的有更加深入的研究可以寫在簡歷加分,如Binder、系統(tǒng)服務(wù)、優(yōu)化等。

  • Activity

    1. Activity啟動流程。其中考察最多的類似問題是:【從桌面點(diǎn)擊一個(gè)圖標(biāo)之后,到界面顯示,這個(gè)過程發(fā)生了什么?】。很多時(shí)候面試官會結(jié)合activity生命周期來考問:在啟動流程的哪些階段哪些生命周期被回調(diào),此時(shí)Activity狀態(tài)如何。
    2. 啟動模式。也就是常見的四種啟動模式,但面試官更喜歡問何時(shí)使用他們,也就是使用場景。
    3. 生命周期。這個(gè)很少單獨(dú)問,一般和啟動流程或者具體的業(yè)務(wù)場景結(jié)合考問。
    4. context。主要是內(nèi)存泄露的考察以及application和activity兩種context如何選擇。
  • Handler

    1. 內(nèi)部原理。Handler必會的啊,android的消息機(jī)制,可以稱為android程序的引擎來的。
    2. 同步屏障。涉及到繪制優(yōu)化、屏幕刷新機(jī)制等。
    3. 阻塞喚醒原理。這里一般是會問為何loop()方法是死循環(huán)卻不會占用cpu時(shí)間片 or 為何next()方法阻塞卻不會卡死。更深一點(diǎn)會問到Linux的IO多路復(fù)用epoll原理。
    4. 卡頓與內(nèi)存優(yōu)化。整個(gè)主線程的所有任務(wù)都必須經(jīng)過Looper,是排查卡頓和ANR的關(guān)鍵點(diǎn),以及消息太多會造成的后果等。
    5. 消息復(fù)用。
  • 圖片

    1. 計(jì)算一張圖片大小。分辨率x像素點(diǎn)大小,考察得很多次。
    2. 加載優(yōu)化。如LaunchActivity同時(shí)加載的圖片太多如何優(yōu)化、view的大小比圖片小如何優(yōu)化等。
    3. 緩存優(yōu)化。內(nèi)存緩存、硬盤緩存。
    4. Glide框架。重點(diǎn)就是Glide對上面的優(yōu)化的實(shí)現(xiàn)原理,因此需要著重看Glide的緩存原理。
    5. drawable。對比使用圖片和drawable的好處,以及drawable的原理。
  • SharePreference

    1. 內(nèi)部原理
    2. commit和apply的區(qū)別
    3. 這部分考察得不多,但建議讀者可以深入理解sp的缺點(diǎn),如導(dǎo)致ANR原理,以及新框架MMKV、Data Store的優(yōu)點(diǎn)。
  • window

    考察得非常少,主要window的類型、以及window的真正定義理解即可。

  • view

    1. 事件分發(fā)流程??疾斓米疃啵景颜麄€(gè)分發(fā)流程講清楚就好了;其次還會考察如何解決具體的沖突場景。
    2. 應(yīng)用界面的view層級。
    3. 繪制流程與時(shí)機(jī)。activity啟動時(shí)到onResume方法被調(diào)用,view依舊還未被繪制。
  • IPC

    1. 常見IPC類型以及優(yōu)缺點(diǎn)。
    2. Binder機(jī)制。優(yōu)點(diǎn)、缺點(diǎn)、特點(diǎn)、和傳統(tǒng)IPC比較。Binder涉及到的很多是偏底層,更多的時(shí)候考察的是上層的應(yīng)用,如和socket比較等。
    3. socket。這個(gè)會重點(diǎn)問,涉及優(yōu)缺點(diǎn)、使用場景、和binder相比等。
  • 序列化

    1. serializable和parcelable的原理,以及各自的優(yōu)缺點(diǎn)、應(yīng)用場景。
  • jetpack

    1. 使用jetpack的好處與壞處。
    2. 框架原理。這部分如果寫在簡歷也很少問,看面試官;但如果問的話,一般會問原理。
  • okHttp

    1. 攔截器以及責(zé)任鏈思想。這個(gè)是問的最多的。
    2. 內(nèi)部調(diào)度器對線程、任務(wù)數(shù)的并發(fā)控制。
    3. 優(yōu)點(diǎn)缺點(diǎn),和URLConnection相比的好處,誕生的背景等。
  • 優(yōu)化

    1. 性能優(yōu)化。問得很多,主要看自己平時(shí)有沒有做過優(yōu)化。
    2. 卡頓優(yōu)化。一般詢問如何定位和解決卡頓問題。
    3. 內(nèi)存優(yōu)化。一般是內(nèi)存泄露、或者減少內(nèi)存占用等。
    4. ANR。一般會考察原理以及如何解決。
    5. 工具:leakcanary、profiler。優(yōu)化涉及的內(nèi)容太多,這個(gè)屬于比較深的內(nèi)容,還是得看自己平時(shí)的項(xiàng)目積累。

Java

Java的考察是一個(gè)非常考驗(yàn)功底的地方,很多的知識點(diǎn)都是基礎(chǔ)中的基礎(chǔ),同時(shí)又都可以延伸到底層的邏輯。這些知識點(diǎn)在實(shí)際的運(yùn)用中,也有很多的情況需要考慮,考察我們對于知識點(diǎn)的運(yùn)用。例如線程池,可以從參數(shù)作用、到線程池原理、到阻塞喚醒機(jī)制、到實(shí)際項(xiàng)目的參數(shù)配置,有非常多的知識點(diǎn)可以考察。因而這一塊就看各位的造詣了。

當(dāng)然,一些基礎(chǔ)或者??嫉闹R點(diǎn)還是得會的。

  • 集合框架
  1. HashMap。幾乎每家公司都問,主要是內(nèi)部原理如hash算法、沖突解決方案、擴(kuò)容方案、紅黑樹的優(yōu)缺點(diǎn)等。必會的內(nèi)容,不會就直接當(dāng)場去世了。
  2. HashSet。內(nèi)部使用HashMap來實(shí)現(xiàn),value設(shè)置為object。記住這個(gè)就好了。
  3. ConcurrentHashMap。必問。他的并發(fā)原理以及好處,同時(shí)有些面試官也會問缺點(diǎn)等問題。
  4. Hashtable、SychronizeMap。一般和ConcurrentHashMap一起問,進(jìn)行對比。
  5. CopyOnWriteArrayList。一般會作為線程安全方法來進(jìn)行比較優(yōu)缺點(diǎn)。
  6. 集合框架重點(diǎn)還是在Map,但是其他的框架List和queue的原理也是要了解的。
  • 訪問限制符

    public protect default private 四個(gè)要懂,基礎(chǔ)知識了。(筆者就是忽略了這些當(dāng)時(shí)回答錯了)特別注意protect是可以跨包訪問的。

    1. 4種內(nèi)部類,特別注意每個(gè)class編譯后都會產(chǎn)生一個(gè)class文件,不管靜態(tài)或非靜態(tài)。面試踩坑了
    2. lambda的本質(zhì)。就是匿名內(nèi)部類。
    3. 抽象類和接口的區(qū)別。這個(gè)很看理解,如果有開發(fā)過具體項(xiàng)目的會回答得更加深刻,這是背八股文體現(xiàn)不出來的。
  • 異常

    1. 異常體系、分類、機(jī)制。
    2. 與error的區(qū)別。
  • IO

    主要還是問NIO的原理以及優(yōu)缺點(diǎn)。建議把緩沖流的原理也得學(xué)一學(xué)并進(jìn)行比較。

  • 線程池

    1. 內(nèi)部原理。必會的啊。
    2. 關(guān)鍵參數(shù)作用及如何配置。重點(diǎn)在如何配置,需要結(jié)合具體的機(jī)器情況、任務(wù)情況等等考量。
    3. 線程池的作用。不僅僅只是線程復(fù)用,更重要的是管理線程、控制線程數(shù)量。這個(gè)也比較考察具體的項(xiàng)目運(yùn)用理解。
    4. 常見的四種線程池。
  • 并發(fā)

    1. sychronize。必問,java的鎖機(jī)制。特別是jdk6之后的鎖優(yōu)化以及運(yùn)用場景。為什么是重量級的、JVM層如何實(shí)現(xiàn)如果了解可以加分。
    2. Lock。必問,AQS的原理最好懂。一般會拿來和synchronize比較。
    3. volatile。必問,會拿來和鎖比較,他的兩個(gè)重要作用。更深點(diǎn)會問到cpu緩存一致性協(xié)議、以及指令重排的類型與原理。
    4. CAS。必問,問原理以及ABA問題。
    5. 死鎖。一般詢問如何解決或者產(chǎn)生的條件。
    6. Object的wait和notify。阻塞喚醒,一般會用一個(gè)代碼或者具體的場景來詢問如何保證多線程同步。
    7. ThreadLocal。原理、內(nèi)存泄露等
    8. 這一塊問的還是比較多,而且大都可以深入去問,看自己的學(xué)習(xí)程度了。
  • JVM

    1. GC機(jī)制。必問。
    2. 類加載機(jī)制。必問,同時(shí)還會問雙親委托機(jī)制。
    3. 方法調(diào)用過程。這個(gè)也問的挺多,也看對JVM的學(xué)習(xí)程度了。
    4. 線程與進(jìn)程的內(nèi)存關(guān)系。如一個(gè)線程占多少內(nèi)存、一個(gè)進(jìn)程可以開多少線程、一個(gè)進(jìn)程占用多少內(nèi)存等。
    5. 內(nèi)存分布。JMM、運(yùn)行時(shí)數(shù)據(jù)區(qū)、native內(nèi)存分布。很看對JVM的理解程度。

Kotlin

kotlin其實(shí)問的很少,現(xiàn)在大部分的項(xiàng)目還是使用Java開發(fā)的。一些有kotlin業(yè)務(wù)的公司會問,但是問的內(nèi)容也不多。這一塊如果還沒學(xué)習(xí)其實(shí)不急的,把Java學(xué)好才是王道,kotlin和java在原理上,都是互通的。

  • 協(xié)程

    問的是最多的,主要是理解線程和協(xié)程的關(guān)系、協(xié)程的優(yōu)缺點(diǎn)。這個(gè)也看個(gè)人的學(xué)習(xí)程度了。

  • run、let、also、with、apply

    注意返回值以及作用域

  • 特性的具體實(shí)現(xiàn)

    如默認(rèn)參數(shù)的具體實(shí)現(xiàn)。有了解過最好了,沒有的話就聯(lián)想Java是如何實(shí)現(xiàn)的,如默認(rèn)參數(shù)可以聯(lián)想方法重載。

計(jì)算機(jī)網(wǎng)絡(luò)

計(jì)網(wǎng)這一部分主要還是HTTP和TCP的內(nèi)容了,經(jīng)典中的經(jīng)典。需要注意的是鏈路層、網(wǎng)絡(luò)層的一些協(xié)議要了解,也是計(jì)算機(jī)基礎(chǔ)了,被問到不會的話會比較尷尬。其次是一些新的協(xié)議如QUIC、http3.0等可以了解一下,面試會很加分,同時(shí)也可以進(jìn)一步去理解TCP的優(yōu)缺點(diǎn)。

  • HTTP

    http在android上的體現(xiàn)并不多,因?yàn)榇蟛糠值墓ぷ鞫冀o框架解決了,問的問題其實(shí)很少。

    1. 歷代http的優(yōu)化以及原因
    2. 請求方法、響應(yīng)碼
  • HTTPS

    必問。一定要會了

    1. 原理以及和http的區(qū)別。加密算法、hash摘要、ca證書驗(yàn)證都要了解
    2. 建立連接過程
    3. 破解:中間人攻擊等
  • 數(shù)據(jù)鏈路層、IP層

    1. ARP和RARP協(xié)議
    2. NAT協(xié)議
    3. DNS
    4. 這部分主要問一些常見的協(xié)議,考察計(jì)網(wǎng)功底,這里列出來的是筆者考察過的,讀者需要比價(jià)系統(tǒng)地去學(xué)習(xí)這一塊。
  • TCP

    1. 握手揮手
    2. 擁塞控制
    3. 可靠傳輸原理
    4. 缺點(diǎn)以及如何改進(jìn)。這個(gè)是比較重要的,對應(yīng)http3.0的優(yōu)化就是針對TCP的缺點(diǎn)來入手的。
    5. TCP的連接數(shù)目上限
    6. TCP非常重要,必問的內(nèi)容,不會的讀者一定要去好好學(xué)習(xí)一下。
  • UDP

    1. 優(yōu)缺點(diǎn)
    2. 和TCP比較
    3. 應(yīng)用場景
    4. 一般和TCP一起出現(xiàn),詢問他們的區(qū)別,以及如何通過UDP來優(yōu)化TCP的缺點(diǎn)。
  • 數(shù)據(jù)格式

    json的優(yōu)缺點(diǎn),為什么要使用json而不是XML。熟記就可以了。

設(shè)計(jì)模式

設(shè)計(jì)模式這一塊問的不是很多,原因是設(shè)計(jì)模式需要實(shí)際的編碼才能去真正理解他的好處。所以大部分情況下面試官都是詢問在項(xiàng)目中用了哪些設(shè)計(jì)模式、或者哪些開源框架用了什么設(shè)計(jì)模式。其次問的最多的就是三大架構(gòu)模式了,必會的。

  • 常見的設(shè)計(jì)模式

    一般面試官會讓我們講自己認(rèn)識的設(shè)計(jì)模式,按照自己的理解講出來就好了。

  • 在項(xiàng)目和源碼中的體現(xiàn)

    問的最多的就是:你看過的框架源碼都使用了哪些設(shè)計(jì)模式。不僅考察了設(shè)計(jì)模式、還考察了源碼。另外也會問在項(xiàng)目中運(yùn)用了哪些設(shè)計(jì)模式。

  • MVC\MVP\MVVM

    基本必問了。結(jié)合具體的項(xiàng)目實(shí)現(xiàn)以及自己的思考,分析他們的優(yōu)缺點(diǎn)、適用場景等。

計(jì)算機(jī)基礎(chǔ)

計(jì)算機(jī)基礎(chǔ)這里包括了c語言、操作系統(tǒng)、數(shù)據(jù)庫庫、以及前面的計(jì)網(wǎng)等等。這部分直接問的內(nèi)容不多,但卻是非常重要的,也是考驗(yàn)我們基礎(chǔ)扎不扎實(shí)的地方。其次,面試官也會用一些業(yè)務(wù)場景來考驗(yàn)我們的理解程度,如聊到j(luò)ava并發(fā)時(shí),問具體為何線程切換代價(jià)高;又如聊到JVM內(nèi)存分布時(shí),問在native層是怎樣的內(nèi)存分布以及邏輯內(nèi)存物理內(nèi)存等;再如聊到volatile,會問到cpu緩存一致性的問題等等。這些都是非??简?yàn)功底的內(nèi)容。因而,這些基礎(chǔ)內(nèi)容要學(xué)好,不僅是為了面試,更是為了讓我們自己可以更好地學(xué)習(xí)理解知識。

  • C語言

    問的很少,偶爾會問到。筆者只被問到:同構(gòu)結(jié)構(gòu)體的內(nèi)存占用、指針相關(guān)問題。

    C語言作為語言鼻祖,一些基礎(chǔ)還是要會的。

  • 操作系統(tǒng)

    1. 中斷原理、作用。
    2. 死鎖原理以及如何解決。
    3. 操作系統(tǒng)這一塊確實(shí)問的不多,同樣也是考察基礎(chǔ)功底了??梢圆粏枺菃柕揭欢ㄒ獣?。

項(xiàng)目

項(xiàng)目是非常重要的,一個(gè)擁有亮點(diǎn)的項(xiàng)目可為面試加分不少。面試前需要把自己的項(xiàng)目總結(jié)一下,提煉出項(xiàng)目的亮點(diǎn)難點(diǎn)。假如有優(yōu)秀的項(xiàng)目,一定要把他寫在簡歷上,并把亮點(diǎn)表現(xiàn)出來。

在面試中面試官一般會先讓我們介紹項(xiàng)目,介紹項(xiàng)目一般可以按照這個(gè)模板來介紹:項(xiàng)目的背景、項(xiàng)目的內(nèi)容、自己負(fù)責(zé)的內(nèi)容、項(xiàng)目亮點(diǎn)。技術(shù)面的面試官會詢問項(xiàng)目有什么技術(shù)亮點(diǎn)難點(diǎn),這個(gè)時(shí)候可以把我們提前準(zhǔn)備的亮點(diǎn)給面試官表述出來。例如做了什么優(yōu)化、自定義view等,體現(xiàn)出自己在技術(shù)上的能力。

當(dāng)然,很多時(shí)候我們的項(xiàng)目并沒有什么亮點(diǎn),甚至就是一個(gè)Demo,例如筆者。在被面試官問到項(xiàng)目有什么技術(shù)難點(diǎn)時(shí)支支吾吾說不出來。這時(shí)候可以把項(xiàng)目自己實(shí)現(xiàn)的功能講出來,例如一個(gè)wanAndroid App可以這樣描述:首頁使用viewPager+recyclerView來展示后臺數(shù)據(jù),點(diǎn)擊后可跳轉(zhuǎn)到對應(yīng)文章詳情頁;登錄注冊需要跳轉(zhuǎn)到另一個(gè)Activity,采用okHttp攔截器和SharePreference來實(shí)現(xiàn)記住登錄 。千萬不要說:額、、就是一個(gè)練習(xí)demo,拉數(shù)據(jù)展示,沒有什么亮點(diǎn)。這樣讓面試官完全無法了解我們的項(xiàng)目到底如何,也無法從項(xiàng)目開始提問來了解我們,面試效果就大打折扣了。

面試官對于我們的項(xiàng)目有了一定的了解之后,會繼續(xù)深問一些相關(guān)的知識點(diǎn)或者一些情況是如何解決的。以wanAndroid App為例子,面試官可以進(jìn)一步提問:viewPager有做緩存嗎?recyclerView緩存機(jī)制如何?首頁圖片過多首頁加載緩慢導(dǎo)致卡頓如何解決?為什么使用攔截器實(shí)現(xiàn),他有什么優(yōu)缺點(diǎn)?SharePreference的原理如何等等。

非技術(shù)面試官可能會問一些如:項(xiàng)目中學(xué)習(xí)到什么?你們是如何合作的?項(xiàng)目過程中遇到過什么問題等等。常見的問題可以提前準(zhǔn)備,把自己的心得整理一下。

那,沒有項(xiàng)目怎么辦?那趕緊去寫一個(gè)。正如某個(gè)大廠的面試官說的:到現(xiàn)在都不知道你們這些實(shí)習(xí)生,到底是真的會,還是背八股文的。的確如此,有時(shí)候我們甚至都不知道自己是不是真的懂,唯一的辦法就是,是騾子是馬拉出來遛一遛,寫個(gè)項(xiàng)目。項(xiàng)目是面試官一個(gè)了解我們的非常好的方式。

需要注意的是:面試前要把自己的項(xiàng)目總結(jié)好,包括背景、內(nèi)容、技術(shù)難點(diǎn)、亮點(diǎn);面試時(shí)不要覺得自己項(xiàng)目很撈,而要表現(xiàn)出自己的自信,把項(xiàng)目內(nèi)容有條不紊地表達(dá)出來。后面回答好面試官提出的問題就可以了。

算法

算法這一塊,先看看筆者在面試中遇到的算法題:

  • 重排鏈表
  • 出現(xiàn)一次的字符
  • K個(gè)一組鏈表反轉(zhuǎn)
  • 湊零錢
  • 全路徑簡化
  • 字符串拆分
  • 二叉樹路徑和
  • 鏈表是否有環(huán)
  • 二叉樹深度

算法難度基本就是力扣的中等題,且很多都屬于經(jīng)典題目。面試的過程中,只要別太緊張基本不會有太大的問題。筆者在前期的面試過程中過于緊張,導(dǎo)致大腦空白,根本無法思考,連題意都沒看明白。此時(shí),可以深吸一口氣,冷靜一下,旁邊有水可以喝一口水,努力讓自己冷靜下來。如果是在??途W(wǎng)面試,可以打開代碼全屏,可以遮掉面試官的視頻,眼不見心不煩(狗頭)。

如何提升算法,其實(shí)就是刷題,刷題,還是塔喵的,刷題。算法沒有捷徑可走,需要靠自己勤奮去做題。如何刷以及刷到什么程度,可以參考筆者的經(jīng)驗(yàn):

  1. 分標(biāo)簽刷。題目的類型總體就分為那么幾類,每一類題型都有特定的模板。因此在一段時(shí)間內(nèi),對同一類型的題目重復(fù)刷,然后總結(jié)思路,效率會更好。
  2. 可以參考大廠算法合集、《劍指offer》,在面試前一段時(shí)間把這些題目刷一刷,很多時(shí)候可以做到原題或者類型題。
  3. 多做總結(jié)。實(shí)習(xí)考察的算法大都是有套路,每次刷題都把關(guān)鍵的點(diǎn)記錄下來,做總結(jié),很快可以提煉出一個(gè)題型的整體思路。這里推薦一個(gè)博主的算法框架,幫助我們提煉算法思路。
  4. 學(xué)習(xí)官解,精簡代碼。這里不是要實(shí)現(xiàn)那種一行代碼解決問題的騷操作,而是去除掉我們代碼中的那些無用的判斷、循環(huán)等操作,增加代碼可閱讀性和提升效率。

關(guān)于算法,不同的企業(yè)對算法的要求是不同的,有些企業(yè)的算法都是簡單題甚至沒有算法題,例如美團(tuán)的算法題是很簡單的,騰訊的算法題也基本都是經(jīng)典題目;而字節(jié)跳動對于算法考察較為嚴(yán)格,多為非常見算法題,且基本每輪技術(shù)面都有算法題。

其次,企業(yè)的不同的部門對算法的考察偏好也是不同的。例如我同學(xué)面試wxg一次性來了5道算法題,而筆者面試pcg則沒有遇到這個(gè)情況。對算法看重的企業(yè)多會更深地去考察我們的算法功底,而對算法沒有要求的更多是走個(gè)流程。

總之,學(xué)好算法對我們是一件終身受益的事情,而不管企業(yè)考察難度如何。

簡歷

關(guān)于簡歷,網(wǎng)絡(luò)上有很多的博客寫得很好,讀者可以自行去搜查一下。這里主要和讀者們分享筆者對于簡歷的一些心得。

  • 簡歷的作用是展示自己的亮點(diǎn)給面試官,讓面試官可以在短時(shí)間內(nèi)迅速了解我們。

    簡歷一定要把自己的亮點(diǎn)寫上去,展示自己的能力。說人話就是:告訴面試官自己有多牛叉,這不是表現(xiàn)我們謙虛的時(shí)候。不管是項(xiàng)目亮點(diǎn)、還是個(gè)人技能,都通通寫上去。

    其次,一定要控制篇幅,不宜過長。面試官一般10s內(nèi)閱讀完一份簡歷,只需要把有亮點(diǎn)的內(nèi)容展示出來,而一些類似“熟悉Java類與接口、了解使用xx框架”等基礎(chǔ)知識就不要寫了。

    另外,有開源項(xiàng)目或博客也一定要寫上去,特別加分。有時(shí)候即使面試回答得一般,但是看到我們的博客或者開源項(xiàng)目可能就認(rèn)為只是緊張,隨手就給我們一個(gè)過了。因此平時(shí)多寫博客、項(xiàng)目,是有好處的。

  • 技能點(diǎn)描述要精準(zhǔn),不要模糊。

    舉個(gè)例子:

    1. 熟悉JVM。
    2. 熟悉JVM的GC標(biāo)記算法及其分代回收理論、方法調(diào)用的解析及其入棧過程、類加載流程、內(nèi)存模型與運(yùn)行時(shí)數(shù)據(jù)區(qū)等。

    對比這兩種描述,第二種面試官可以很明顯知道我們到底對JVM掌握到什么程度以及哪些知識點(diǎn),并針對性提問,而第一種面試官甚至?xí)X得我們根本不懂JVM,連JVM中有什么知識點(diǎn)都不知道。

    因此描述技能一定要精準(zhǔn),不要模糊,讓面試官猜。面試官不會掀起我們的蓋頭,只會掀起我們的頭蓋[狗頭]。

  • 無用信息不要寫。

    縱使在校園內(nèi)參加了非常多的大型社團(tuán)活動,包括但不限于三下鄉(xiāng)、主持大會等。我們面試的是android崗位,不是社團(tuán)。只需要簡單一句參加過校園各類社團(tuán)活動,讓面試官知道我們是一個(gè)active boy/gird 就好了。

  • 寫上簡歷的內(nèi)容一定要是自己掌握的內(nèi)容。

    這是簡歷最基本的要求,不用多說了吧。

非技術(shù)問題

這部分的內(nèi)容,大都會在三面或者HR面提問到,到這里其實(shí)面試已經(jīng)差不多穩(wěn)了,但也不可以亂講話哦,不然HR姐姐卡我們簡歷就難受了。這些問題多為考察我們的軟實(shí)力,重點(diǎn)是要知道面試官提問這個(gè)問題的目的是什么,了解他的“潛臺詞”。

順帶提一下HR面試,基本上到這一步,我們的面試就基本通過了。HR面試的主要目的是了解我們這個(gè)人本身的情況,如學(xué)習(xí)、周邊環(huán)境、未來打算、價(jià)值觀等等。只需要真誠和HR姐姐聊聊天,同時(shí)避開一些雷別踩就好了。嗯?這還能有雷?有的哇,例如HR姐姐問你拿了幾家offer之后你會選擇我們嗎?你直接說:如果另一家過了就不要你們了。那人家還給你發(fā)offer?

但其他的個(gè)人情況問題,還是需要真誠和HR溝通,其實(shí)也是看企業(yè)文化是否適合自己。

下面看看筆者被提問到的一些軟實(shí)力問題:

  • 你項(xiàng)目中遇到的最大的困難是什么?

    這個(gè)問題問的最多,多為考察面試者的解決問題的能力;問題本身并不是重點(diǎn),解決的過程才是重點(diǎn)。

  • 你在項(xiàng)目中學(xué)到了什么?

    考問學(xué)習(xí)總結(jié)的能力,回答一些自己的收獲,可以是技術(shù)的,也可以是非技術(shù)的例如團(tuán)隊(duì)合作的經(jīng)驗(yàn)。

  • 平時(shí)是如何學(xué)習(xí)的?

    考察自學(xué)能力,可以把自己平時(shí)學(xué)習(xí)的方法講出來,向面試官展示自己學(xué)習(xí)的能力。

  • 你為什么選android?

    考察對android的興趣。不要講得太浮夸哇,什么從小就xxx,真誠一點(diǎn)講出來就好了。

  • 未來的計(jì)劃如何?考研嗎?

    根據(jù)具體情況回答就好了,如先實(shí)習(xí)鍛煉業(yè)務(wù)能力,畢業(yè)后一兩年希望有單獨(dú)負(fù)責(zé)一個(gè)模塊的能力等等;一般來說,企業(yè)更愿意招聘未來可以轉(zhuǎn)正且有規(guī)劃的實(shí)習(xí)生,更有培養(yǎng)空間。

  • 工作城市有什么考慮嗎?父母怎么態(tài)度等

    這個(gè)很明顯了,根據(jù)自己的實(shí)際情況來回答;當(dāng)然,面試官更愿意招聘希望去他們部門所在城市的面試者。

  • 你還在面試其他公司嗎?拿到其他公司的offer了嗎?你會選誰?

    這里可以講一兩個(gè)比較優(yōu)秀的公司來提高自己的身價(jià),讓HR感受到你的市場競爭力,但切不可全部十幾個(gè)說出來哇,我們都討厭海王,包括HR。

    選誰這個(gè)問題,如果此時(shí)自己還沒確定,可以把自己考慮的因素講出來,如業(yè)務(wù)內(nèi)容、地點(diǎn)、實(shí)習(xí)生培養(yǎng)制度等講出來,然后告訴HR最后會權(quán)衡考慮,并在最后向HR了解這些內(nèi)容(如果你都不問,怎么權(quán)衡?HR一看就知道你在養(yǎng)魚)。如果已經(jīng)確定好了要來這家公司,那就直接告訴他一定來。

    千萬記住不要撒謊,例如告訴HR我一定來,但心里已經(jīng)有了想去的公司。到時(shí)候要拒offer會非常尷尬,而且有可能進(jìn)入企業(yè)黑名單。[狗頭]

    當(dāng)然面試官肯定更加傾向于想要選他們的面試者,不然發(fā)了offer又不來,那何必發(fā)呢?所以這里就看各位的情商發(fā)揮了。

  • 你有什么優(yōu)缺點(diǎn)?在別人看來,你有什么優(yōu)缺點(diǎn)?

    一定要提前做好準(zhǔn)備,筆者當(dāng)時(shí)就是沒做準(zhǔn)備,亂講一通。

    需要注意的就是別太浮夸,真實(shí)一點(diǎn);什么叫真實(shí)一點(diǎn)?例如:我的缺點(diǎn)是總是控制不好自己的學(xué)習(xí)節(jié)奏,老是學(xué)習(xí)太晚,傷害身體。雖然存在這種情況,但別說HR,可能我們自己都不信不是嗎[狗頭]

    其次是講缺點(diǎn)的時(shí)候可以聊一下自己是怎么對待自己的缺點(diǎn)的,因?yàn)榘l(fā)現(xiàn)是一回事,而最終怎么處理又是另一回事了;把自己怎么對待自己的缺點(diǎn)的可以講出來。

    最后是注意題目,是有兩個(gè)角度:自己和他人。一個(gè)是自我反省,另一個(gè)是外在表現(xiàn),最好準(zhǔn)備好這兩道題的答案。

  • 前面的面試體會如何?你覺得你前面的面試表現(xiàn)如何?

    主要看在前面的面試中有沒有什么體會,然后有沒有去處理發(fā)現(xiàn)的問題。這里可以講發(fā)現(xiàn)了很多的不會的知識點(diǎn),然后自己都去再次學(xué)習(xí)了等等

  • 自我介紹

    幾乎在每一場的面試都會有,但在三面總監(jiān)面一般沒有。

    自我介紹是除了簡歷之外面試官第二個(gè)快速了解我們的地方。最好不要對著簡歷念,而是補(bǔ)充一些簡歷沒有的內(nèi)容。

    例如可以講自己從何時(shí)開始自學(xué),自學(xué)能力非常強(qiáng);加入過什么老師團(tuán)隊(duì),做了什么項(xiàng)目;近段時(shí)間學(xué)習(xí)到什么程度等等。

    在面試前可以做好一份自我介紹,然后后面所有的面試都用這份自我介紹就可以了。這樣也不會說在自我介紹的時(shí)候不知道說啥。

    但是千萬不要太長哦,抓重點(diǎn)一兩分鐘就好了。

  • 你還有什么問題嗎?

    這部分可以向面試官提問一些自己想了解的情況。一般來說,需要了解的有:部門業(yè)務(wù)內(nèi)容、實(shí)習(xí)生具體的工作內(nèi)容(sdk、業(yè)務(wù)開發(fā)、跨平臺、轉(zhuǎn)語言等)、實(shí)習(xí)生的培養(yǎng)內(nèi)容、學(xué)習(xí)建議等等。

    不同的面試官也需要區(qū)分問,例如HR可以問多一些工作地點(diǎn)、轉(zhuǎn)正機(jī)會等問題,而技術(shù)面試官可以問一些工作內(nèi)容的問題。

    這些因人而異,最好不要說沒問題咯,讓面試官看起來對崗位沒有多大的興趣~

面試中

未知,所以恐懼。

在沒開始面試前,可能很多的讀者都是人生第一次入職面試,肯定非常緊張的,在面試前甚至想著,要不算了,不面了。這都是正常的。解決的辦法就是:去面一次。經(jīng)歷過一次之后就不會緊張了?;蛘哒f,沒那么緊張了。

大廠的面試官的體驗(yàn)一般都是非常好的,筆者到目前為止遇到的所有面試官,都給我非常好的面試體驗(yàn)。

在面試的時(shí)候要注意語速與咬字清晰問題。筆者本身是一個(gè)語速很快的人,加上面試緊張,面試官很難聽清楚我到底在講什么。面試一定要控制語速,可以提前給自己錄音看看什么程度的語速是最合適的。

其次,要注意自己的表達(dá)清晰。仔細(xì)聽好面試官的問題,然后先組織好思路,再慢慢表述出來?;卮饐栴},也是相當(dāng)于和一個(gè)講解知識點(diǎn)的過程,思路一定要清晰。一些口頭禪、冗余的表達(dá)盡量去除。

有一個(gè)需要注意的點(diǎn)就是:不了解的東西,千萬不要講出來,切記?。?!。例如,我們不懂NIO,在面試官問到傳統(tǒng)IO的時(shí)候,就不要拿NIO去比較或者提起NIO。如果提起了,面試官99%會問一些NIO的問題,這時(shí)候就會灰常尷尬。而如果自己掌握了NIO,那么就可以不斷提起NIO,把面試官的詢問重點(diǎn)往我們熟悉的知識點(diǎn)牽引。

最后需要注意一點(diǎn)的是:拒offer是一個(gè)很考驗(yàn)情商的事情。這不是在凡爾賽,而是一個(gè)非常重要的事情,處理不好可能會上企業(yè)黑名單。舉個(gè)最簡單的例子:

現(xiàn)在手上拿到了企業(yè)a的offer,但是自己更加向往的企業(yè)是b,但是b還在面試。這個(gè)時(shí)候企業(yè)a的HR問你:a和b你選擇哪個(gè)?然后你堅(jiān)定地說肯定選擇a啊。然后拖了一兩個(gè)星期,b通過了,然后跟a的HR講我不去,我去b了。不僅影響了企業(yè)a的招聘,而且HR還會覺得你言而無信。

所以,拒offer最好是趁早,不要影響人家的招聘;其次是語言前后要一致,不要當(dāng)渣男or渣女。[狗頭]

春招時(shí)間線

實(shí)習(xí)生招聘一般集中在春季,秋季招聘主要是校招,也就是招正式工。

  • 最先的一批開始時(shí)間是在年前,也就是12月。例如CVTE在11月、字節(jié)跳動在春節(jié)前就開啟了實(shí)習(xí)招聘,屬于最早的一批。
  • 第二批在春節(jié)后,也就是2月份,很多的部門有內(nèi)推直達(dá)。多關(guān)注??途W(wǎng)等的一些內(nèi)推信息,此時(shí)公司官網(wǎng)可能還沒有開放投遞通道。
  • 三月份幾乎是所以一二線大廠開始招聘的時(shí)間。大廠還會分兩個(gè)批次:提前批和正式批。
    • 提前批:一般通過內(nèi)推直達(dá)沒有筆試,且提前批hc較多,是最推薦的投遞簡歷時(shí)機(jī)。
    • 正式批:提前批掛了,正式批可以繼續(xù)面。缺點(diǎn)就是一般都需要筆試
    • 但很多的公司沒有提前批與正式批之分,這個(gè)要看具體的公司具體安排。強(qiáng)烈建議,越早投越好。
  • 四月份是正式批開始時(shí)間,但熱門崗位幾乎已經(jīng)招滿人了。此時(shí)hc更少,要求也會比三月份更高。

最后

最后想要告訴讀者的是:影響面試結(jié)果的因素有非常多,如面試官心情、口味,當(dāng)天自己的狀態(tài),崗位要求等等。筆者的兩個(gè)同學(xué),都是前面連續(xù)掛了兩次一面,但后面也都成功拿到了BAT offer,甚至不止一個(gè)。掛掉面試絕對不是簡單的自己能力不行,而是多方面的因素,總結(jié)好經(jīng)驗(yàn),繼續(xù)面試就好了。

邁出第一步,開啟第一輪面試非常重要。不要覺得自己“好菜啊,投了肯定不過的,不投了”。不投,怎么知道不過呢?面試也是一個(gè)學(xué)習(xí)的過程,會慢慢發(fā)現(xiàn)自己的不足,包括表達(dá)、知識等等。所以,如果你還在猶豫,趕緊投起來吧。

希望這篇文章能夠給正在找實(shí)習(xí)的讀者提供一點(diǎn)幫助,先預(yù)祝各位實(shí)習(xí)面試順利吧。有什么問題或者想了解的內(nèi)容可以評論區(qū)交流,后續(xù)筆者繼續(xù)補(bǔ)充或者新開一篇文章做解答。

如果文章對你有幫助,還希望給筆者一個(gè)贊鼓勵一下。

全文到此,原創(chuàng)不易,覺得有幫助可以點(diǎn)贊收藏評論轉(zhuǎn)發(fā)。
有任何想法歡迎評論區(qū)交流指正。
如需轉(zhuǎn)載請?jiān)u論區(qū)或私信告知。

另外歡迎光臨筆者的個(gè)人博客:傳送門

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

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

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