前言
最近看到很多人都在找工作, 而且很多人都感覺今年找工作比去年難很多, 競爭力也增加不少, 因此激發我整理這份資料, 希望能幫到正在找或者準備找工作的童鞋們.
首先我們能否獲得一個面試機會, 那肯定是從簡歷開始, 簡歷需要做好功夫, 一份好的簡歷才足夠吸引企業得到面試機會, 接着就是面試了, 面試前必須要先做好準備, 多看一下前輩們總結面試題, 有哪一方面不足的地方趕緊補充一下, 還有要了解一下你即將面試那家公司.
技巧篇
做題
看完面試題之後那就來做一下面試題目吧, 目前找到兩個網站
- SillGun(國外網站, 自備梯子)
- 牛客網
聊面試
(帥張)stormzhang 跟你談一下面試那些事兒
- 面試時企業最看中你什麼能力?
- 我面試到底問什麼?
- Android 面試那些事兒
互聯網招聘平臺
- 拉勾-專注互聯網職業機會
- 簡尋-讓職位推薦更精準
- 100 offer-幫最好的互聯網人發現更好的offer
- BOSS 直聘-互聯網招聘神器
- LinkedIn (領英)
-
哪上班
一力頂十巧(刷題)
字節跳動
一面(1hour):
0、自我介紹
1、handler機制,sendMessage和post(Runnable)的區別。
2、ThreadLocal原理,底層實現
3、HashMap底層,擴容,LinkedHashMap
4、Service的onBind和onStart差別
5、Activity啓動生命週期,A跳轉B
6、Android持久化方案,SharedPreference是否可以跨進程通訊。ContentProvider
7、ClassLoader機制,雙親委派。如果我要寫一個Activity類,那怎麼保證加載的是我自己寫的Activity
8、算法題,約瑟夫環
9、反問
二面(1hour):
0、自我介紹
1、項目技術點詳解
2、寫過什麼自定義View
3、OkHttp代碼看過嗎,用了什麼設計模式
4、MVC、MVP區別,項目中的實現。
5、LiveData和EventBus的相關討論,真的是討論,暢所欲言
6、看過哪些源碼
7、SharedPreference相關
8、Android動畫了解嗎,用過什麼
9、TCP、UDP區別,面試時的語音用的是什麼,爲什麼要這麼用。
10、代碼題,5個線程對一個int進行累加到1000.
11、反問
三面(50mins):
0、自我介紹
1、算法,跳棋盤
2、瀏覽器輸入URL到渲染全過程
3、Http請求報文響應報文
4、http2.0有哪些優化
5、用過哪些網絡庫
6、OkHttp的Intercepter
7、Android持久化方式
8、Java線程同步的數據結構
9、反問
總結:字節跳動面試官都很和善,所有的問題都是在討論,我不會的他們也容許我猜一下,然後告訴我猜的對不對……
華爲
一面(1hour):
0、自我介紹
1、項目介紹,技術點相關。
2、C++和Java區別,GC
C++不熟,只能說內存管理相關的問題,所以就問到了GC。然後說分代收集算法。老年代擔保、元數據區從JVM移到了本地內存這些。
3、線程相關,Runnable和Thread的區別。
Thread類是實現了Runnable接口,平時使用起來可以使用start方法調用。線程池基本傳Runnable對象,平時也是線程池用的多,所以具體相關不太熟。
4、線程池
5、synchronized,volatile
6、繼承相關,多重繼承和接口
7、網絡編程
8、UPD,TCP區別
9、最大的優點
10、最大的缺點
11、算法,二叉樹中序遍歷,真是早起毀一天,竟然沒撕出來,我真想給自己兩耳光。不過面試官給我總結的很好,說要利用棧的特性,先進後出,所以要保證左子樹先進根結點再進,這麼思考之後就順利了很多。
總結:早上狀態很差,簡單問題也會卡殼,希望大家還是能夠選擇自己狀態好的時間點面試……。
二面(40mins):
0、介紹一下項目
1、Android四大組件,詳細講一下。
2、Launcher啓動APP的全過程。
icon存入口Activity信息
AMS通知Launcher去pause。
Launcher通知AMS已經pause
AMS檢查進程是否已經啓動,如果不啓動則啓動進程。並且調用ActivityThread的main方法。
啓動之後通知AMS已經啓動
然後AMS將入口Activity信息傳遞給APP。
APP啓動對應入口Activity,並且創建對應上下文並且調用Activity的onCreate方法。
3、進程間通信,AIDL,Binder。扯了一會說進程間通信平時怎麼做的,就說了一下AIDL相關的Demo實現什麼的。說到了自己程序裏面有拉起微信的這個功能(也就是廣播)。
4、設計模式瞭解嗎,平時用過哪些設計模式。
5、算法題:輸入一個數n,代表有n個點,一個二維數組,二維數組代表相連的點,要求輸出連通起來的點。
如果n=6,數組假設是{{1,2},{2,3},{4,5}},則輸出{{1,2,3},{4,5},{6}}
吐槽一下,本來24號早上約的9.30和10.30兩輪面試,一次約兩輪我也是醉了。然後就二面拖了快一個小時才面上。早起代碼狀態真的差,這兩題都寫了分別用了快20分鐘,真的捉急。
一個午覺起來,收到了面試通過的短信,效率還是非常高的。還以爲掛了呢,看來只是面試官想喫飯了……
三面(<30分鐘):
0、自我介紹
1、公司實習期項目
說了RePlugin框架原理,說了ffmpeg動態鏈接庫開發方面的失敗經歷,說了Android的適配,和最近影響到的AndroidQ相關新特性的適配。
2、自己大學生活中攻克的最難的技術難點。
3、什麼情況下會壓力特別大,怎麼處理的。
4、職業規劃
...
綜合起來就是了解個人情況,技術問題都是自己說的。還是非常愉快輕鬆的。
總結:華爲面試安排非常緊張,但是反饋效率特別高,一二面結束馬上會短信通知是否通過。然後隔天直接三面,流程走的非常快。
阿里巴巴
一面 50分鐘
1.項目相關
2.安卓AIDL
3.四大組件
4.Activity四種啓動模式
5.Fragment生命週期
6.Activity之間的通信方法
7.SSL/TLS,以及位於哪一層
8.GET和POST區別,登錄用哪個
- 算法:層序輸入二叉樹,計算深度
二面 25分鐘
1.項目相關
*三面 1小時
1.項目相關及拓展
2.場景實現結合安卓特性分析
3.算法:4道數組題及其變形題,主要考邏輯
HR面
1.常規問題
項目是兩個local / offline安卓app,總體上項目扯得比較多,包括底層原理、開發需求、實現方法、優化拓展等
小米
第一面:
問了一些Android基礎;
2個算法。
第二面:
問了一些JVM相關;
類加載器;
FrameWork層。
第三面技術經理:
問了一下項目經歷;
離職原因;
期望薪水;
解決問題能力等。
順便寫了1個算法。
第四面,第四輪貌似是個技術專家之類的角色:
一直在追問各種原理和基礎細節,還有一些比較古怪的問題,考察基礎和反應能力;
1個算法;
總結:有4個算法。小米的技術團隊還是比較強的,一線工程師的基礎都很紮實。不是很熟悉的技術不要往簡歷裏面寫,被揪住了是會扣分的。很注重基礎細節,基礎一定要紮實。
騰訊
一面(30mins):
0、自我介紹
1、View過度繪製有什麼工具進行查看
2、SharedPreference兩個進程同時進行讀寫會有什麼問題
3、Android進程間通信方式
4、熱修復原理,講的Tinker
5、DNS協議,CDN
6、算法題,一個數組有兩個數字不同,其他都成對出現,怎麼找出來
7、智力題,一塊錢買一瓶水,兩個空瓶換一瓶水,n元能喝幾瓶水。
總結:面試完又被說表現得不錯了……
二面(1hour30mins):
0、大模擬代碼題……一個小時
三面(2hours30mins):
0、自我介紹
1、實習工作深挖
2、RePlugin原理深挖,其他插件化框架對比
3、爲什麼要選擇RePlugin框架
4、你覺得自己對於Android掌握到了什麼地步
5、看過什麼源碼
6、你爲什麼要看源碼
7、你爲什麼要寫博客
8、知道哪些著名開源框架
9、什麼是進程,進程調度算法
10、什麼是線程
11、你覺得什麼是JVM
12、有哪些線程同步算法
13、死鎖是什麼,舉個例子
14、Object有哪些方法
15、Java異常有哪些,Error和Exception區別
16、OSI七層模型,TCP、UDP是哪一層,應用層有哪些協議
17、如果要設計一個大量圖片下載的方法,如何確定併發量,有哪些指標。
18、APP間傳遞消息安全嗎?要怎麼做才能安全呢?
19、廣播怎麼分類
20、自定義View重寫的關鍵有哪些,onLayout和onMeasure區別
21、Android有哪些動畫,MotionLayout講一下。MotionLayout使用場景。
22、Activity四種啓動模式,SingleTask和SingleTop的使用場景
23、一些Framework層的問題,不太會所以記不得了。但是告訴面試官我已經下了Framework層相關電子書,是下一步需要看的。
24、你爲什麼想了解Framework層知識。
25、算法題,我想dp寫逆序對的,沒寫出來心態崩了
26、你對於我們的Offer是什麼態度
27、反問
從學生轉變身份到程序員,最需要自己提升的能力是什麼?學好專業基礎課、對新知識有熱情、願意鑽研、關心技術動向。
騰訊現在用什麼語言,Java、Kotlin?有沒有用Flutter相關。現在還在用Java,但是準備轉Kotlin,Flutter方面已經做了很多動作了。
總結:LZ知道自己Android新技術不是特別過關,很多問題一問深了就有點喫癟,尤其是面試官一開局懟了一堆RePlugin相關問題,確實能力不夠回答不出來。
後面又開始綜合能力以及基礎能力的考察,這一部分我自認爲還可以。
面試官特別不喜歡背書,所以問的問題都是帶有思考在裏面的,很多問題都是你覺得是什麼,而不是什麼是。
面試官人真的很好了,面了我兩個半小時,真的有點累。
尾聲與建議
經過了這麼多年的磨礪,除了硬實力之外,有一些需要自己注意的技巧分享出來:
1、簡歷不要投太早,容易因爲太久沒被處理導致心態崩潰。因爲我之前2月底投了一波,但是那時候很多廠簡歷篩選工作還沒開始,搞得自己無名焦慮,頭髮又少了。
2、不要給面試官一種你在背知識點的感覺,要結合實現進行分析。我這裏有一句話:數據結構決定算法、算法決定數據結構。就拿TCP舉例,你要是遇到TCP的頭部結構有什麼的問題,是不是就懵了,覺得這是靠背誦的。但是你套上這句話,聯想一下知識點:SACK確認機制、滑動窗口、全雙工通道、套接字結構……是不是就能夠理解爲什麼需要那些頭部結構了,都是有對應的功能需要實現纔會出現這些結構的。遇事不決拿結構分析。
3、多看源碼,源碼裏面有很多註釋,很多時候看看註釋就知道這個類是幹什麼的了,然後再往下跟,會有助於自己理解邏輯。更重要的是讓面試官知道你這種跟源碼的學習方式。
4、調整好心態,不要因爲某些廠把自己掛了就覺得自己不行。這是我被掛多了之後的心得,此處不留爺自有留爺處。
5、面心儀的公司之前先面幾家其他公司,小公司或者同等體量的公司。
6、面試一次覆盤一次,整理自己發揮不好的點。不能說一次問你不會兩次問你還不會吧,那不是能力問題,那是態度問題。而且很多廠是有面試記錄的,二三面轉挑你面試不好的問題問你。
如果你也需要臨時抱佛腳,過來領取吧,我免費分享給你!
只展示部分《 BATZ及其30家大中級公司Android開發崗 面試精選合集》需要這份771頁PDF面試題精選可以點贊+評論【面試】即可獲取!!!