前言
下面的題目都是樓主在Android交流群大家在面試字節跳動時遇到的,如果大家有好的題目或者好的見解歡迎分享,樓主將長期維護此帖。
參考解析:郭霖、鴻洋、玉剛、極客時間、騰訊課堂...
內容特點:條理清晰,含圖像化表示更加易懂。
內容概要:包括 Handler、Activity相關、Fragment、service、布局優化、AsyncTask相關
、Android 事件分發機制、 Binder、Android 高級必備 :AMS,WMS,PMS、Glide、 Android 組件化與插件化等面試題和技術棧!
閉關刷題
以前在網上找技術博客,不成體系的學習效果真的太低了,經常因為信息過多,還有信息不准確而耽誤時間,很容易就分心了。
后面除了跟視頻學習,就是一直在刷這套1307頁Android 面試全套真題解析。
這份資料是真的幫到了很多,內容全面,覆蓋率比較高,省去了很多時間和精力。
面試
前面面了貝殼找房和網易,都通過了,雖然最后沒有談好,但是有了一些信心。后面讓朋友幫忙內推了騰訊,三面順利拿下offer,薪資是28K,相比於上一份工作上漲了15K。
這里主要放騰訊面經
一面
0、說說做過的項目(差不多包括了自我介紹)
說一下我表達的重點:我做了AndroidQ的適配;我在項目中使用了新的技術:LiveData、BiometricPrompt;我使用到了設計模式:工廠、簡單工廠、單例;我在不斷優化我的代碼;我關注Google開發者大會
1、問上一份工作
抓着工作中的技術點問了很多,然后后面問題的差不多都是來自這里面。
2、EventBus和回調的對比。有沒有其他辦法可以解決類之間的耦合性。
說了LivaData,但其實差不多。老老實實說不知道了……
現在想了想,這個題目那份資料里面好像也有提到過,但是……我沒記住!!!
3、ListView和RecyclerView的比較,ListView沒用了嗎?
說了實現效果,代碼、緩存方面、ViewHolder的差異,講了一下RecyclerView在多個Fragment中有相同Item時的優越性。
ListView這個問題問到我時我差點沒笑出來……我看了微信團隊對於卡包界面是否要更新為RecyclerView的一篇文章,建議背誦全文……
4、Service和AsyncTask對比。
因為AsyncTask由於不使用匿名內部類方式很可能出現內存泄露問題,所以自己不使用,基本都是開線程池。然后面試官問AsyncTask底層,也就說了一下handler+線程池。
現在回想,有這么幾個點:生命周期方面;消息傳遞方面;底層實現方面。
5、線程通信機制。
handler、信號量、互斥量、臨界區管理synchronized之類的、共享變量volatile。
6、Android進程通信機制。
AIDL、Binder、共享文件。
前兩個沒啥說的了,老特長了。
說一下共享文件,這個我本來覺得很low,但是最近研究SharedPreference的時候,發現如果APP簽名一樣的話,可以使用同一個SharedPreference,所以也就說了共享文件。我不是想表達我用共享文件作為進程通信方式,我只是想說我了解SharedPreference。
7、ArrayList和Vector對比……不會Vector,那么ArrayList和LinkedList對比。
底層,數組,鏈表。擴容問題,我概括了一下所有的集合類的擴容方式都是裝載因子+當前容量+需要擴容容量。
我說線程安全的List有CopyOnWriteArrayList,但是面試官沒有往下問。
8、為什么擴容很多情況下都是擴容為兩倍?
這個不會,但是說底層代碼很多情況下擴容都是移位操作進行的。可能和查詢相關?
9、HashMap和HashTable對比,ConcurrentHashMap。
HashTable不是Map,HashTable是Dictionary,而且鎖的時候是鎖數組,並發的粒度很大。
ConcurrentHashMap用的是分段鎖而且有一個:判空+判相等+CAS+synchronized的一個鎖的過程,所以很強大。
10、CAS相關。
11、知道優先級反轉嗎?
不知道……回去研究去……
12、TCP三次握手四次揮手。
主要思路是通過SACK和全雙工來整體講解。
13、代碼,如何判斷兩個鏈表是否相交 。
我最開始想成了找到第一個相交結點,然后說了思路,面試官說有沒有更好的。然后直接判斷最后一個結點是否相等。面試官說如果有環呢,那只能用HashSet存一下了。
14、反問。
問了下面試官是什么事業群。
說是PCG平台,感覺自己應該是被PCG撈起來了。
后面就問了一下公司的一些不疼不癢的問題。
總結
整體答得還可以,就是以為是2點面試,結果3點30才面上,可能是我記錯時間了。狀態沒有調整到最好。
二面
0、自我介紹。
1、hashCode和equals方法。
2、HashMap,hash沖突解決,紅黑樹相關。
3、String、StringBuilder。
面試官問String的加法
String a = "a"+"b"+"c";
StringBuilder sb = new StringBuilder();
a = sb.append("a").append("b").append("c").toString();
這兩者效率差別,我說沒差別啊,第一種String的加法被編譯器優化成第二種,他不信我……不過還好,最后達成共識面試官面試完自己去查。
現在復盤覺得面試官應該想問的是這種情況:
String a ="";
a+="a";
a+="b";
a+="c";
我還是對的。
4、wait、notify。
問是不是只能在有鎖的情況下wait和notify。
[圖片上傳失敗...(image-1692c4-1602502611210)]
5、線程間通信方式。
handler那一套。
6、快排原理,最好情況和最壞情況時間復雜度。
最壞情況逆序n**2,順序情況我的算法還是nlogn,問了優化思路。
7、算法題,
用了貪心沒ac,面試官提示快排,沒想明白……
8、思考題,如果我想將一顆二叉樹存入文件,怎么樣的格式存儲可以使得讀取效率最高。
這題是個開放討論題,和面試官一直在討論怎么做。
【當時以為自己涼了,沒想到順利收到了三面的通知】
三面
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層的問題,不太會所以記不得了。
當時收藏一位B站UP主的視頻,有需要可以去看一下
24、你為什么想了解Framework層知識。
25、算法題。
26、你對於我們的Offer的態度
27、閑聊
學習路線+知識梳理
花了很長時間,就為了整理這張詳細的知識路線腦圖。當然由於時間有限、能力也都有限,畢竟嵌入式全體系實在太龐大了,包括我那做嵌入式的同學,也不可能什么都懂,有些東西可能沒覆蓋到,不足之處,還希望小伙伴們一起交流補充,一起完善進步。
本文在開源項目:Android開發不會這些?如何面試拿高薪 中已收錄,里面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中...
這次就分享到這里吧,下篇見。