緣起
從16年畢業(yè)至今,就職過(guò)兩家公司挺物,大大小小項(xiàng)目做了幾個(gè)懒浮,非常感謝我的兩位老大飘弧,在我的android成長(zhǎng)路上給予我很多指導(dǎo)识藤,亦師亦友的關(guān)系砚著。
從年前至今參加面試了很多公司,從猿輔導(dǎo)一面掛痴昧,我深刻意識(shí)到Android開(kāi)發(fā)內(nèi)卷太嚴(yán)重了稽穆,面試都是需要背八股文,狂刷leecode赶撰。最后順利拿到了字節(jié)跳動(dòng)offer舌镶。總結(jié)下經(jīng)驗(yàn)豪娜,也是對(duì)過(guò)去的一個(gè)回顧和總結(jié)吧餐胀。
猿輔導(dǎo)(一面掛)
自我介紹
怎么學(xué)Android的
-
聊了聊項(xiàng)目
項(xiàng)目中涉及到了跨進(jìn)程通信,為什么選廣播而不是別的跨進(jìn)程通信方式
不局限于Android瘤载,有沒(méi)有直接跨進(jìn)程傳對(duì)象的方式
共享內(nèi)存了解嗎否灾,共享內(nèi)存分配的內(nèi)存在哪個(gè)區(qū)域
-
講了講Android的繪制流程
第一次繪制的消息是怎么發(fā)出來(lái)的
后邊的繪制消息是怎么循環(huán)的
-
序列化
序列化的方式都有哪些
Serializable和Parcelable有什么區(qū)別,分別用在什么場(chǎng)景
為什么要區(qū)分場(chǎng)景鸣奔,都用Serializable不行嗎
除了上邊兩個(gè)還有別的序列化方式嗎
-
講講單例
你見(jiàn)過(guò)的幾種單例墨技,他們分別都有什么優(yōu)勢(shì)
volatile有什么用
為什么DCL要那么寫(xiě),直接在方法前加synchronized不行嗎
-
講講多線程
- 怎么創(chuàng)建一個(gè)線程
- 為什么要用線程池
- JavaAPI線程池有哪些參數(shù)
- 什么是核心線程
- 怎么銷(xiāo)毀核心線程
-
Android消息機(jī)制
講了講消息機(jī)制
主線程死循環(huán)不會(huì)卡死嗎
epoll的時(shí)候算是卡頓嗎
怎么樣算是卡頓了
怎么利用消息機(jī)制檢測(cè)卡頓
除了這種方式還有別的監(jiān)測(cè)卡頓的方式嗎
-
WebView
講講你知道的WebView的一切
JSBridge具體是什么了解嗎
Webview和Android原生通信是怎么通信的
-
HashMap
字節(jié)跳動(dòng)面試
一面
1:插件化挎狸。啟動(dòng)activity的hook方式扣汪。taskAffity。
2:okhttp支持HTTP2锨匆?http2的功能有哪些崭别?tcp方面擁塞控制?tsl的握手和具體的非對(duì)稱加密算法恐锣。非對(duì)稱名稱
3:handler的post(Runnable)如何實(shí)現(xiàn)的紊遵。callback,runnable侥蒙,msg的執(zhí)行優(yōu)先級(jí)暗膜。阻塞是怎么實(shí)現(xiàn)的?為什么不會(huì)阻塞主線程鞭衩?
5:求二叉樹(shù)中兩個(gè)節(jié)點(diǎn)之間的最大距離学搜。
6:206含義,未修改資源是哪個(gè)论衍,302含義瑞佩,301含義
7:多進(jìn)程通信問(wèn)題。binder優(yōu)勢(shì)坯台。aidl生成的java類細(xì)節(jié)炬丸。多進(jìn)程遇到哪些問(wèn)題?
8:動(dòng)態(tài)代理傳入的參數(shù)都有哪些?非接口的類能實(shí)現(xiàn)動(dòng)態(tài)代理嗎稠炬?ASM的原理
9:Application和Activity在Context的繼承樹(shù)上有何區(qū)別焕阿?二者使用上有何不同?
10:任意一顆二叉樹(shù)首启,求最大節(jié)點(diǎn)距離
二面
1:設(shè)計(jì)一個(gè)日志系統(tǒng)暮屡。
2:內(nèi)存泄露的分類。怎么查看內(nèi)存泄露的問(wèn)題
3:touch事件源碼問(wèn)題毅桃。
4:組件化的問(wèn)題褒纲。module和app之間的區(qū)別。moduler通信是如何實(shí)現(xiàn)的钥飞。
5:native奔潰的日志采集莺掠,怎么處理?
6:注解實(shí)現(xiàn)一個(gè)提示功能:如果int的值大于了3需要提示读宙。
三面
1:介紹下flutter的啟動(dòng)流程
2:介紹下flutter與weex的區(qū)別
3:組件化介紹一下
4:webview中與js通信的手段有哪些汁蝶?
5:介紹下flutter_boost的原理
四面
1:適配器和裝飾模式各自特點(diǎn)和使用場(chǎng)景
2:視頻編解碼是怎么做的
3:三色球排序
那我是如何準(zhǔn)備Android面試?
一论悴、簡(jiǎn)歷
網(wǎng)上有很多對(duì)程序員簡(jiǎn)歷的一些指導(dǎo)掖棉,這里就不重述,大家可以搜下網(wǎng)上其他大神的總結(jié)膀估,結(jié)合自身情況修改下幔亥。我有幾點(diǎn)建議:
1.盡量不要花哨,程序員和設(shè)計(jì)師或者產(chǎn)品運(yùn)營(yíng)還不一樣察纯,我們的簡(jiǎn)歷成功與否決定權(quán)還是在技術(shù)面試官那帕棉,而他們看重的是你的項(xiàng)目經(jīng)驗(yàn)內(nèi)容和技術(shù)等描述。
2.技能描述這塊盡量只寫(xiě)你懂得而且理解深刻的饼记,可以適當(dāng)加入一些新技術(shù)或流行框架香伴,不過(guò)這塊需要理解,沒(méi)來(lái)得及看源碼的可以看看大神們對(duì)它的總結(jié)具则,網(wǎng)上一大堆即纲。
3.項(xiàng)目經(jīng)驗(yàn)這塊盡量加入關(guān)鍵詞,比如使用了什么技術(shù)博肋、用到哪些設(shè)計(jì)模式低斋、優(yōu)化數(shù)據(jù)對(duì)比、擴(kuò)展總結(jié)之類的匪凡。而非一味地介紹這個(gè)項(xiàng)目?jī)?nèi)容(那是產(chǎn)品經(jīng)理的描述)膊畴,比如性能優(yōu)化這塊,分為UI性能優(yōu)化病游、內(nèi)存優(yōu)化唇跨、數(shù)據(jù)庫(kù)優(yōu)化、網(wǎng)絡(luò)優(yōu)化、耗電優(yōu)化等等买猖「拈伲可以從1.如何發(fā)現(xiàn)問(wèn)題,2.怎么解決問(wèn)題政勃,3.解決效果對(duì)比唧龄,這幾個(gè)方面去描述兼砖。舉個(gè)簡(jiǎn)單例子——UI優(yōu)化奸远,可以從 UI出現(xiàn)什么問(wèn)題(卡頓不流暢),怎么查找問(wèn)題(手機(jī)開(kāi)發(fā)者權(quán)限>GPU過(guò)度繪制 發(fā)現(xiàn)層級(jí)問(wèn)題讽挟,TraceView CPU使用情況分析)懒叛,怎么解決問(wèn)題(降低層級(jí)、自定義View繪圖出現(xiàn)問(wèn)題等)耽梅,解決問(wèn)題后性能再次對(duì)比薛窥。
二、面試刷題
第一章 網(wǎng)絡(luò)面試題
1眼姐、HTTP協(xié)議
2诅迷、TCP/IP協(xié)議
3、TCP的三次握手與四次揮手理解及面試題
4.網(wǎng)頁(yè)中輸入url众旗,到渲染整個(gè)界面的整個(gè)過(guò)程罢杉,以及中間用了什么協(xié)議?
5.TCP和UDP的區(qū)別贡歧?
6.HTTP的幾種請(qǐng)求方法具體介紹
7.HTTP請(qǐng)求和響應(yīng)報(bào)文的格式滩租,以及常用狀態(tài)碼
8.一個(gè) TCP 連接上面能發(fā)多少個(gè) HTTP 請(qǐng)求
第二章 數(shù)據(jù)結(jié)構(gòu)與算法面試題
1.1.1 常用的數(shù)據(jù)結(jié)構(gòu)有哪些?
1.1.2 數(shù)組
1.1.3 鏈表
1.1.4 隊(duì)列&堆棧
1.1.5 二叉樹(shù)
1.1.6 HashMap
1.1.7圖
1.1.8排序算法有哪些?
1.1.9 查找算法
1.1.10 串
1.1.12 其他算法
第三章 Java面試題
- HashMap
2.ArrayList
3.LinkedList
4.Hashset源碼分析
內(nèi)存模型
垃圾回收算法(JVM)
7.垃圾回收機(jī)制和調(diào)用 System.gc()的區(qū)別利朵?
- 類加載過(guò)程
9.反射
10.多線程和線程池
11.創(chuàng)建多線程方式律想、線程池工作原理
12.設(shè)計(jì)模式(六大基本原則、項(xiàng)目中常用的設(shè)計(jì)模式绍弟、手寫(xiě)單例等)
13.斷點(diǎn)續(xù)傳
14.Java 四大引用
15.Java 的泛型
- final技即、finally、finalize 的區(qū)別
17.接口樟遣、抽象類的區(qū)別
18.從 java 容器類的設(shè)計(jì)討論抽象類和接口的應(yīng)用
19.synchronized和lock的區(qū)別
第四章 Android 面試題
1.Activity啟動(dòng)模式
2.Activity的啟動(dòng)過(guò)程
3.進(jìn)程通訊
4.Android Binder之應(yīng)用層總結(jié)與分析
5.進(jìn)程崩逊荩活方法
6.從源碼了解handler looper ,messageQueue思路
7.handler如何實(shí)現(xiàn)延時(shí)發(fā)消息postdelay()
8.Android中為什么主線程不會(huì)因?yàn)長(zhǎng)ooper.loop()里的死循環(huán)卡死?
9.RxJava原理及如何封裝使用
10.okhttp源碼分析
11.retrofit源碼分析
12.LeakCanary核心原理源碼淺析
13.LruCache 使用及原理
14.ARouter原理
15.注解框架實(shí)現(xiàn)原理
16.Android 如何編寫(xiě)基于編譯時(shí)注解的項(xiàng)目
17.RxJava2+Retrofit2+OkHttp3的基礎(chǔ)年碘、封裝和項(xiàng)目中的使用
18.Rxjava2.0+Retrofit+Okhttp(封裝使用)+MVP框架搭建
19.Android 插件化和熱修復(fù)知識(shí)梳理
20.Android開(kāi)發(fā)中比較常見(jiàn)的內(nèi)存泄漏問(wèn)題及解決辦法
21.如何檢測(cè)和定位Android內(nèi)存泄漏
22.圖片占據(jù)的內(nèi)存算法
23.為什么圖片需要用軟引用澈歉,MVP模式中的view接口用弱引用
24.基于DataBinding與LiveData的MVVM實(shí)踐
25.App穩(wěn)定性優(yōu)化
26.App啟動(dòng)速度優(yōu)化
27.App內(nèi)存優(yōu)化
28.App繪制優(yōu)化
29.App瘦身
30.網(wǎng)絡(luò)優(yōu)化
31.App電量?jī)?yōu)化
32.安卓的安全優(yōu)化
33.為什么WebView加載會(huì)慢呢?
34.如何優(yōu)化自定義View
三屿衅、數(shù)據(jù)結(jié)構(gòu)和算法
學(xué)什么埃难?
有些同學(xué)可能要問(wèn)了:我學(xué) Android的有必要學(xué)習(xí)算法嗎?答案是:別無(wú)選擇
!
國(guó)內(nèi)互聯(lián)網(wǎng)面試的流程逐漸在向國(guó)外靠攏涡尘,像字節(jié)跳動(dòng)忍弛、BAT 等大廠,手撕算法題
已經(jīng)成為了必選動(dòng)作考抄。
確實(shí)细疚, Java 相對(duì)于 C、C++有著豐富的類庫(kù)和三方框架川梅,進(jìn)入工作后大部分人都是在寫(xiě)業(yè)務(wù)代碼疯兼,俗稱 API boy 或者 Crud boy,算法看起來(lái)并不是那么重要贫途,但是考算法真的是公司面試篩選人的低成本辦法吧彪,如果你寫(xiě)出了算法并且通過(guò)了,要么你聰明要么你勤奮(刷題了)丢早。
所以不管你是學(xué)什么語(yǔ)言:C姨裸、C++、python怨酝、Java傀缩、GO,算法這一關(guān)你必須得過(guò)农猬。數(shù)據(jù)結(jié)構(gòu)和算法的面試核心知識(shí)點(diǎn)我已經(jīng)列出來(lái)了赡艰,大家可以參考學(xué)習(xí),逐個(gè)擊破盛险。
棧與隊(duì)列:先進(jìn)先出瞄摊、后進(jìn)先出
線性鏈表
查找:順序查找、二分查找
排序:交換類苦掘、插入類换帜、選擇類
樹(shù)、二叉樹(shù)鹤啡、圖:深度優(yōu)先(DFS)惯驼、廣度優(yōu)先(BFS)
遞歸
分治
滑窗
三大牛逼算法:回溯、貪心递瑰、動(dòng)態(tài)規(guī)劃(DP)
怎么學(xué)祟牲?
最好或者最笨的方法就是刷題,強(qiáng)烈推薦力扣:https://leetcode-cn.com 建議刷300題以上抖部,要覆蓋簡(jiǎn)單说贝、中等、困難的題目慎颗。面試前要訓(xùn)練手感乡恕,不要生疏了言询,可以選保持每日或幾日一題。
在刷題之前我建議你看一些書(shū): 《漫畫(huà)算法-小灰的算法之旅》
如果你之前沒(méi)有任何算法基礎(chǔ)傲宜,這邊書(shū)很適合你运杭,可以補(bǔ)充數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ)知識(shí),像什么是時(shí)間復(fù)雜度空間復(fù)雜度函卒、查找辆憔、排序等。 如果你有了一定基礎(chǔ)了报嵌,建議你直接跳到最后面的算法實(shí)戰(zhàn)部分虱咧。
《劍指 offer》
非常經(jīng)典的一本書(shū),學(xué)算法的人必刷沪蓬。但是要注意了彤钟,這邊書(shū)里面的題目是用 C++寫(xiě)的来候,如果你是 Java 開(kāi)發(fā)人員可能會(huì)有點(diǎn)影響跷叉。但是要記住學(xué)習(xí)算法最關(guān)鍵的還是解題思路和方法,用什么語(yǔ)言實(shí)現(xiàn)是其次的营搅,如果你時(shí)間比較多我是建議你用 Java 語(yǔ)言再實(shí)現(xiàn)一遍云挟。
《labuladong的算法小抄》
非常推薦!這是一本很新的書(shū)转质,寫(xiě)書(shū)前作者在 Github 開(kāi)源了一個(gè)項(xiàng)目园欣,主要講解 LeetCode 解題套路,Start 總數(shù)排名前40休蟹。在書(shū)的開(kāi)頭講解了學(xué)習(xí)算法的基本思維和套路沸枯,建議看這邊書(shū)的同時(shí)再配合 leetcode 刷題,療效非常棒赂弓!
《算法導(dǎo)論》
要是不推薦這本書(shū)是不是顯得我有點(diǎn) low 了绑榴,這是一本科班出身的同學(xué)必看必學(xué)的經(jīng)典大部頭。國(guó)外大佬寫(xiě)的盈魁,國(guó)內(nèi)翻譯的經(jīng)典之作翔怎,雖然是經(jīng)典但是不建議剛?cè)腴T(mén)算法的同學(xué)看,因?yàn)榭戳诉@本書(shū)你可能要放棄算法了杨耙,比較難看懂赤套。建議有了一定基礎(chǔ)再入手這邊書(shū)。
如果你覺(jué)得看書(shū)比較枯燥珊膜,可以推薦你看一些極客時(shí)間的專欄容握,不過(guò)是收費(fèi),但是質(zhì)量非常高车柠。 《數(shù)據(jù)結(jié)構(gòu)與算法之美》
這個(gè)專欄是文字+語(yǔ)音剔氏,作者是王爭(zhēng)脖旱,前 Google 工程師。他采用最適合工程師的學(xué)習(xí)方式介蛉,不拘泥于某一特定編程語(yǔ)言萌庆,從實(shí)際開(kāi)發(fā)場(chǎng)景出發(fā),由淺入深教你學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的方法币旧,幫你搞懂基本概念和核心理論践险,深入理解算法精髓,幫你提升使用數(shù)據(jù)結(jié)構(gòu)和算法思維解決問(wèn)題的能力吹菱。
《算法面試通關(guān)40講》
這個(gè)專欄是視頻巍虫,作者是覃超,前Facebook工程師鳍刷。作者會(huì)用白板帶你一步一步解題占遥,層層深入一環(huán)扣一環(huán),每一題還會(huì)用多種解題方法输瓜。我基本看完了瓦胎,收獲頗多。
leetcode尤揣、書(shū)和極客專欄可以并行搔啊,學(xué)練結(jié)合,不要光看不練哦北戏。
本文在開(kāi)源項(xiàng)目:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄负芋,里面包含不同方向的自學(xué)編程路線、面試題集合/面經(jīng)嗜愈、及系列技術(shù)文章等旧蛾,資源持續(xù)更新中...