前言
十八年寒窗苦讀,我沒想到我最后混得還沒有昔日初中就早早輟學的同學好,

筆者是2017屆畢業生,一所雙非學校的普通碩士,目前從事android開發作業已經3年了,前段時間剛完成一次跳槽,由一開始的一個名不經傳的小廠android 開發到后面的大廠offer收割機,我準備了整整兩個月,
下面我將分享一下自己的個人經歷,還有自己面試大廠的一些面試經驗總結,希望在即將到來的對大家有所幫助,
一、個人經歷
背景
一個普普通通的農村家庭,我們那邊交通資訊還比較閉塞,小孩子也不怎么喜歡上學,很多都是初中都沒讀完就去混社會了,
但是我的家庭不一樣,祖父母早年在大城市謀生,雖然沒有混出什么名堂,但是眼界開闊了不少,他們認為,經濟的匱乏是因為知識的貧瘠,所以一直主張:勤耕讀,咬牙堅持送我和弟弟上了大學,甚至讓我去學計算機甚至讀了研,盡管讀研的學校是一所雙非院校,但是他們還是很驕傲,
出來后,我就在自家省會城市找了一份Android開發的作業,月薪13K,每年回家都給父母買不少年貨,村里人都夸,孩子就是該多讀書,
后面,我發現隔壁家修了一棟小別墅,這讓我心里很不是滋味:十八年寒窗苦讀,我沒想到我最后混得還沒有昔日初中就早早輟學的同學好?
這個小廠是待不下去了,我決定跳槽,在經歷臥薪嘗膽的兩個復習后,我終于拿到了八家大廠的offer,也算是擁有了高薪和更好的發展平臺吧,
面試經歷
(一)嗶哩嗶哩(已拿offer)
B站也算是陪我度過了青春的伙伴,能在B站作業再好不過,
當時在招聘平臺看見他們的廣告后我就毫不猶豫的投了簡歷,然后就收到了B站的面試通知,后面的面試程序很順利,3個編程題, 30道單選題做完就很舒服,
后面的程序也很順利,最后就問了一些簡單的問題,然后就拿到了offer,算是最舒服的一個面試了,

下面大致歸納一下問及的題目吧(可能會有個別遺漏和順序的錯亂)
技術問題:
1.大致有序的陣列如何排序,最快時間復雜度
2.一個多主題的效果的實作
3.自定義實作一個FlexLayout
4.過什么熱修復框架,robust的原理是什么?tinker的原理還用
5.說說你對注解的了解,是怎么決議的
6.synchronized是公平鎖還是非公平鎖,ReteranLock是公平鎖嗎?是怎么實作的
7.插件化的主要優點和缺點是什么?
8.你覺得B站目前的APP有什么問題?
9.如果產品要求你開發一個音頻播放功能,你會怎么著手?預計會有什么坑?
10.ViewPager切換Fragment什么最耗時?
11.執行緒間同步的方法
12.鎖之間的區別
13.你們網路框架用的什么?為什么?
14.如果讓你來開發B站的一個頁面,哪一個頁面可以很快入手
15.性能優化你做過什么作業?
16.h5與native通信你做過什么作業?
17.泛型是怎么決議的,比如在retrofit中的泛型是怎么決議的
18.mvp與mvvm的區別,mvvm怎么更新UI,databinding用得多嗎,databinding的原理?
19.kotlin ?的原理
20.在專案中有直接使用tcp,socket來發送訊息嗎
21.如何在網路框架里直接避免記憶體泄漏,不需要在presenter中釋放訂閱
22.生命周期都是通過什么呼叫的?有用過AIDL嗎?
23.講一下RecyclerView的快取機制,滑動10個,再滑回去,會有幾個執行onBindView
24.如何實作RecyclerView的區域更新,用過payload嗎,notifyItemChange方法中的引數?
25.講講LinkedHashMap的資料結構
26.put post有什么區別
27.A Activity打開B Activity的生命周期變化,會有什么方法打斷嗎?
28.Fragment hide show生命周期變化
29.Fragment replace生命周期變化
非技術問題:
1.介紹一下你自己和專案,做過螢屏適配嗎?
2.為什么考慮離職?
3.說說對原來公司的印象
4.為什么想來B站?一般在B站上看什么?(當然是因為想要守護bilibili!!!)
5.心里薪資是多少?(23K+)
6.考慮到上海發展嗎?
關于面試題的答案:
本文所有的面試題都整理在了PDF里面,因為很多問題不是三言兩語就能講清楚的,我就直接找的大佬的博客,大家可以通過博文進行更加全面的理解,PS:感謝郭霖和鴻洋等一眾大佬(點擊此處藍色字體可以跳轉免費領取)
(二)OPPO公司(已拿offer)

我是那邊的朋友幫忙內推的,簡歷通過后電話約的面試,
當時約的是 10:30 的面試時間,我提前了二十機分鐘左右到達公司樓下,公司樓層有點復雜,花了十分鐘左右到目的地(約的食堂),
第一輪是兩個面試官輪流問問題,第一面大約面了一個小時到了 11:40差不多到飯點了,面完我就準備走了,兩個面試官要我等會,然后就直接去叫二面的面試官了,我就在食堂看大家吃飯,
大約等了十幾分鐘第二面的面試官把我叫到了 31 樓,
也是兩個面試官,輪流問了大概一個小時,二面后就差不多到了下午一點,面試官帶我去食堂吃了個飯,然后幫我約了下午兩點的 HR 面,
整個流程下來挺爽的,總共三輪面試,兩輪技術面(都是2個面試官),一輪 HR 面,
技術問題:
1.常 見 的 Activity 類 型+描述Activity 生命周期
2.兩個 Activity 之間跳轉時必然會執行的是哪幾個方法?
3.系統是怎么幫我們啟動找到桌面應用的
4.橫豎屏切換時 Activity 的生命周期(跟清單檔案里的配置有關系),
5.螢屏適配的處理技巧都有哪些(手機自適應主要分為兩種情況:橫屏和豎屏的切換,以及解析度大小的不同),
6.網路優化的問題(同一個 ip 同一個埠能復用一個連接,后面問道了 http 2.0 的多路復用,我說一個 tcp 可以多個請求,原理呢?我說不知道,后面讓我說了下 https ),
7.快排和遞回
8.陣列和鏈表的區別
9.存盤資料的幾種方式:SharePreference、資料庫、檔案
10.使用安卓資料庫時,有哪些生命周期方法:onCreate、onUpgrade
11.如果要給資料庫增加欄位,需要怎么做?
12.資料庫讀寫是執行緒安全的嗎?
13.SharePreference的實作原理,是不是執行緒安全的,apply和commit有什么區別?
14.Handler機制
15.HashMap、HashTable、ConcurrentHashMap的原理
16.計算機網路五層模型
17.http狀態碼
非技術問題:
1.你遇到的最難解決的問題?
2.你是怎樣解決這個問題的?
3.作業上面的識訓和成長
4.薪資
5.離職原因
6.多久可以就職等
(三)美團公司(已拿offer)

有朋友在那里,內推了我,就去試了下,
技術問題:
1.volley的源代碼,在圖片快取部分討論了挺長時間,http中快取機制,Last-Modify的作用等,
2.fragment的生命周期
3.service一些知識
4.事件分發機制
5.Binder實作機制,Stub類中asInterface函式作用,BnBinder和BpBinder區別,
6.gradle中buildToolsVersion和TargetSdkVersion的區別是什么
7.手機適配一些方案
8.hashmap的實作原理
9.靜態方法是否能被重寫
10.3次握手和4次揮手的原因,以及為什么需要這樣做,
11.資料結構,搜索二叉樹的一些特性,平衡二叉樹,
12.hashmap是如何解決hash沖突的
13.行程與執行緒區別
14.寫了一個二分查找和單例模式
15.http中的同步和異步
16.聊了一些專案上做的東西,問了問職業規劃
17.我認為Android做的優秀的幾個地方,然后又根據我說的問了問比較深入問題,
18.Android是如何進行資源管理的,
19.java比較重要的幾個特性
20.網路五層結構,每一層協議,由于我網路不是很好,還問了一些其他的問題(例如MAC地址和ip地址的區別等),
非技術問題:
1.為什么離開原來公司
2.職業規劃
3.心里薪資什么的(都差不多)
(四)小猿搜題(已拿offer)

這個主要是他們的招聘太積極了,我就去試了下,然后面試程序也很順利,
1.java有什么特性,繼承有什么用處,多型有什么用處
2.反射是什么,在哪里用到,怎么利用反射創建一個物件
3.代理模式與裝飾模式的區別,手寫一個靜態代理,一個動態代理
4.物件加載的程序,屬性先加載還是方法先加載
5.垃圾回識訓制與jvm結構
6.自定義View,事件分發機制講一講
7.http與https有什么區別
8.Activity啟動模式,以及各啟動模式生命周期問題
9.靜態方法,靜態物件為什么不能繼承
10.Activity怎么啟動Service,Activity與Service互動,Service與Thread的區別
11.介紹一下android影片
12.Launcher啟動App的流程,中間有幾種跨行程通信(socket)
13.Handler通信,Binder通信
14.你碰到過什么記憶體泄漏,怎么處理
15.RXJava怎么切換執行緒
16.Fragment hide show生命周期
17.平常有用到什么鎖,synchronized底層原理是什么
非技術問題:
這個和前面都差不多,不再贅言吧(不過,感覺對面比較缺人,在談薪的時候我出的比前面高一點點,)
(六)位元組跳動(已拿offer)
位元組我先是面了抖音,后面掛了,我就去面了瓜瓜龍教育
可能是后者比較缺人吧,感覺面試還是比較順利的,也拿到了offer,
技術問題:
感覺本文篇幅已經很長了,所以剩下的面試題包括答案都整理在了PDF里面,因為很多問題不是三言兩語就能講清楚的,我就直接找的大佬的博客,大家可以通過我篩選的優質博文進行更加全面的理解,PS:感謝郭霖和鴻洋等一眾大佬(點擊此處藍色字體可以跳轉免費領取)
(七)網易(已拿offer)
(八)阿里巴巴(已拿offer)
二、經驗總結
(一)簡歷

首先是簡歷,一般找一個模板,填寫掌握的技能和專案經歷即可,
專案clone后,個性Resuem.md即可,最后,建議大家都匯出為pdf檔案,
簡歷建議長度為2頁,太長太短都不好,
建議大家簡歷上的措辭謹慎些,用掌握與熟練掌握取代了解與精通,
具體需要注意的細節這里推薦閱讀:
Android程式員要如何寫簡歷(附簡歷模板)
(二)刷題
現在的大公司,演算法題可以說是現在找作業必刷的了,
根據我面試的經驗,演算法題總得來說問的還是比較少,還有一些公司是基本不問演算法的,但是演算法有時候有決定性作用,比如位元組,快手這種每輪都問演算法的公司,如果因為演算法題拿不到offer就很可惜了,
演算法題就好像高考語文的古詩詞默寫一樣,分不多,但丟了就很可惜了,
根據我的經驗,大概刷了,掌握100道題就足以應付面試了,
當然完全掌握需要重復練習,不是刷了一遍就可以的,
這里推薦一下五遍刷題法:
1.一遍:直接看解法,多解法,比較解法優劣,默寫好的解法
2.二遍:打開leetcode,直接開始寫,多種解法比較,調優
3.三遍:過一天之后,再重復做題
4.四遍:過了一周,再來反復練、
5.五遍:面試前一周,恢復性訓練
通過以上方法重復練習,大概刷100題就足以應付面試,如果每天刷3道,大概準備一個月即可
(三)演算法題庫
刷題也要注意,不要一題一題刷,比如Leetcode的每日一題
建議按知識點分類,這樣比較方便重復練習與知識點掌握
在知識點刷過一遍后,也可以按照公司分類或者LeetCode熱題100刷,一般公司出演算法題也是有題庫的,
這里推薦閱讀:
-
面試必看演算法題|鏈表問題總結
-
面試必看演算法題 | 回溯演算法解題框架
-
演算法太TM重要了!刷完這些題!
大廠面試真題分享
大廠的面試題其實也沒有什么太特別的地方,功夫在平時,下面的列舉可以讓大家的復習更有方向和側重點,或者做一些查漏補缺,
- 資料結構與演算法
- java
- 安卓
- 計算機網路
- 作業系統
- ……
(以上按重要程度排序)
上面的幾大模塊的內容都非常重要,我看網上有大佬針對這些模塊進行了歸納整理,這里就不在贅言了,
指路:https://blog.csdn.net/m0_46962786/article/details/112361198
這里主要是根據我自己的面試經歷還有在牛客網等刷的位元組跳動、美團等廠高頻面試題整理出來的大廠高頻面試題合集(含參考答案和決議),
大家可以看看自己能不能全部完美的回答出來吧,如果可以,那你的基礎知識掌握的應該就很棒了,可以加入我們的技術交流群找我內推,
937659705 (這是群號)
3.重要知識點整理(高頻面試真題)
圖片相關
圖片庫對比
LRUCache 原理
圖片加載原理
實作圖片庫
Glide 原始碼決議
Glide 快取
……

-
網路和安全機制
網路框架對比和原始碼分析
自己去設計網路請求框架
網路請求快取處理,pokhttp 如何處理網路快取
從網路加載一個 M 10M 的圖片,需要注意的事項
TCP 的 3 次握手和四次揮手
TCP 與 PUDP 的區別、應用
……

-
資料庫
Sqlite 升級,增加欄位的陳述句
資料庫框架對比和原始碼分析
資料庫的優化
資料庫資料遷移問題
Sqlite 常見例外
……

-
插件化、模塊化、組 件化、熱修復、增量更新、Gradle
對熱修復和插件化的理解
插件化原理分析
……

-
架構和設計模式
MVC、MVP、MVVM 原理和區別
你所知道的設計模式有哪些
專案中常用的設計模式
手寫生產者/ / 消費者模式
觀察者模式
配接器模式,裝飾者模式,外觀模式的異同
用到的一些開源框架 , 介紹一個看過原始碼的 , 內部
實作程序
RxJava相關
Binder 機制及底層實作



……內容過多,鑒于文章的長度,這里就不一一展示了,需要的可以點擊下方藍色字體獲取完整版

以上的問題都是精心整理過的,每個問題都是一篇長文,大家一定要好好理清楚,因為面試官都喜歡深挖和追問,大家在某一塊知識點必須有深入研究,能夠回答面試官4到5個追加問題(加油),
點擊此處【我的GitHub】,獲取文中資料完整版
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/254432.html
標籤:其他
上一篇:Android 星期選擇器
下一篇:安卓手機如何水平鏡像翻轉
