今年因公司業(yè)績不景氣,最終倒閉了,而我也被迫失業(yè),就只能老老實實在家呆著找工作。這一呆就才不多2個月,在這段時間內(nèi)面試了差不多10家公司,有一半都給了Offer,但是沒有想去的公司。
原因:
1、就是薪資給的少了點;
2、薪資給的還可以,但是沒有什么空間可以提升自己。
經(jīng)過一段時間朋友介紹,讓我把簡歷投到華為去嘗試一下,于是懷著僥幸的心理試了試。
進入大廠想必都是每個開發(fā)者們最初的想法,而我也是一樣。想想總是那么美好的
等待了兩個多星期接收到了面試通知約,我三天后去面試,下面就是我的面試過程了。
一面(1hour):
0、自我介紹
1、項目介紹,技術(shù)點相關(guān)。
2、C++和Java區(qū)別,GC
C++不熟,只能說內(nèi)存管理相關(guān)的問題,所以就問到了GC。然后說分代收集算法。老年代擔(dān)保、元數(shù)據(jù)區(qū)從JVM移到了本地內(nèi)存這些。
3、線程相關(guān),Runnable和Thread的區(qū)別。
Thread類是實現(xiàn)了Runnable接口,平時使用起來可以使用start方法調(diào)用。線程池基本傳Runnable對象,平時也是線程池用的多,所以具體相關(guān)不太熟。
4、線程池
5、synchronized,volatile
6、繼承相關(guān),多重繼承和接口
7、網(wǎng)絡(luò)編程
8、UPD,TCP區(qū)別
9、最大的優(yōu)點
10、最大的缺點
11、算法,二叉樹中序遍歷
真是早起毀一天,竟然沒撕出來,我真想給自己兩耳光。不過面試官給我總結(jié)的很好,說要利用棧的特性,先進后出,所以要保證左子樹先進根結(jié)點再進,這么思考之后就順利了很多。
**總結(jié):**早上狀態(tài)很差,簡單問題也會卡殼,希望大家還是能夠選擇自己狀態(tài)好的時間點面試……。
二面(40mins):
0、介紹一下項目
1、Android四大組件,詳細講一下。
2、Launcher啟動APP的全過程。
icon存入口Activity信息
AMS通知Launcher去pause。
Launcher通知AMS已經(jīng)pause
AMS檢查進程是否已經(jīng)啟動,如果不啟動則啟動進程。并且調(diào)用ActivityThread的main方法。
啟動之后通知AMS已經(jīng)啟動
然后AMS將入口Activity信息傳遞給APP。
APP啟動對應(yīng)入口Activity,并且創(chuàng)建對應(yīng)上下文并且調(diào)用Activity的onCreate方法。
3、進程間通信,AIDL,Binder。扯了一會說進程間通信平時怎么做的,就說了一下AIDL相關(guān)的Demo實現(xiàn)什么的。說到了自己程序里面有拉起微信的這個功能(也就是廣播)。
4、設(shè)計模式了解嗎,平時用過哪些設(shè)計模式。
5、算法題:輸入一個數(shù)n,代表有n個點,一個二維數(shù)組,二維數(shù)組代表相連的點,要求輸出連通起來的點。
如果n=6,數(shù)組假設(shè)是{{1,2},{2,3},{4,5}},則輸出{{1,2,3},{4,5},{6}}
吐槽一下,本來約的早上9.30和10.30兩輪面試,一次約兩輪我也是醉了。然后就二面拖了快一個小時才面上。早起代碼狀態(tài)真的差,這兩題都寫了分別用了快20分鐘,真的捉急。
一個午覺起來,收到了面試通過的短信,效率還是非常高的。還以為掛了呢,看來只是面試官想吃飯了……
三面(<30分鐘):
0、自我介紹
1、上家公司做的項目
說了RePlugin框架原理,說了ffmpeg動態(tài)鏈接庫開發(fā)方面的失敗經(jīng)歷,說了Android的適配,和最近影響到的AndroidQ相關(guān)新特性的適配。
2、什么情況下會壓力特別大,怎么處理的。
3、職業(yè)規(guī)劃
…
綜合起來就是了解個人情況,技術(shù)問題都是自己說的。還是非常愉快輕松的。
**總結(jié):**華為面試安排非常緊張,但是反饋效率特別高,一二面結(jié)束馬上會短信通知是否通過。然后隔天直接三面,流程走的非???。
問了hr,說只要通過了面試,一周左右就會下來offer。
面試前我做的準(zhǔn)備
1、理論知識的梳理
因為面試時考驗?zāi)阍硇缘闹R,雖然我工作了兩年,但是畢竟是工作,很多理論知識都忘的一干二凈,于是去面試前,我利用收集來的Android行業(yè)大牛面試筆記給自己做了一次完整的知識梳理。
(個人建議:去面試之前,給自己做一次完整的知識梳理是很有必要的,不僅加深了對理論知識的認(rèn)知,還可以從中知曉自己對哪一模塊的不了解,加深學(xué)習(xí))
**Java基礎(chǔ)方面:**JVM、String、內(nèi)部類、多態(tài)、抽象和接口、集合框架(Hashmap、Arraylist)、單例、線程、Synchronized、Look鎖、動態(tài)代理、引用
**Android基礎(chǔ)方面:**四大組件、View、進程、Bitmap、屏幕適配、消息機制、線程異步、WebView。
**Android擴展方面:**ART、Apk優(yōu)化、Hook、Proguard、架構(gòu)(MVC/MVP/MVVM)、Jetpack、NDK開發(fā)。
**Android源碼方面:**Leakcanary、Eventbus
**設(shè)計模式方面:**面向?qū)ο罅笤瓌t、工廠模式、單例模式、建造者模式、觀察者模式、適配器模式、策略模式、代理模式
算法方面: 排序、二叉樹、鏈表、棧和隊列、二分、hash表、堆、數(shù)組/雙指針、字符串處理、動態(tài)規(guī)劃
**網(wǎng)絡(luò)知識:**Http(緩存、Https、Http2.0)、TCP(三次握手四次揮手、socket)、類加載器
2、刷題
對于面試,刷題是非常重要的,刷題不僅能加深你對技術(shù)原理的認(rèn)識,而且假如刷到當(dāng)天的面試題血賺(不過,這種可能性非常?。?,但刷題還是很有必要的,起碼加深了自己對原理、底層的理解。
3、完善簡歷
大家都知道去面試的過程中,簡歷對于面試有著至關(guān)重要的作用,一份觀賞清晰的簡歷能幫助求職者在面試官心中有著非常不錯的印象,僅僅從這一點來看,簡歷的完善就是非常有必要的。
簡歷該怎么寫?
1、盡可能突出自己的優(yōu)勢
制作簡歷一定要學(xué)會突出重點,寫出自己的優(yōu)勢,如你在上一家公司做出的貢獻,就要寫在顯眼的位置進行突出,用顏色加深再好不過。如果你的優(yōu)勢是學(xué)歷,那么學(xué)歷就要放在第一頁,因為HR在篩選簡歷時,一份簡歷往往只看那么幾秒鐘,你需要做到的就是讓HR一眼看中你的簡歷。
2、描述自己做到了什么,而不是做了什么
很多程序員會在自己的項目或是技術(shù)棧里這樣描述:在某項目,我負責(zé)xxxx,如重構(gòu),如優(yōu)化。但實際上,面試官想要看到的是你在項目中,重構(gòu)和優(yōu)化帶來了什么樣的好處和效果,如果說性能提升了,那么提升的數(shù)據(jù)和情況是如何的,要一一描述出來,所以重點應(yīng)該是“將項目做到了什么樣子,做成了什么事”。
完成這兩點,一份漂亮的簡歷即可出爐。
五、后話
總得來說,這次面試能拿到offer,也跟我之前的努力分不開的。其實做程序員圈子很重要,因為有了圈子可以讓你少走彎路,拓寬人脈,拓展思路,學(xué)習(xí)他人失敗和成功的經(jīng)驗,獲取最新經(jīng)驗與信息,才能抱團取暖!所以說,圈子的高度很大部分決定人生的高度!
大家努力奮斗吧!與之共勉。
本文摘自 :https://blog.51cto.com/u