作者:哈登
前言
本篇文章給大家分享一下筆者面試的一些感受和經(jīng)驗(yàn)。
筆者從前期準(zhǔn)備到所有面試結(jié)束,花費(fèi)了差不多3個(gè)月的時(shí)間。真可謂“面試造航母,工作擰螺絲”,面試過程真的很累很辛苦。
筆者面了很多公司,最終拿下了貓眼Offer;
有面試交流群小伙伴問我是怎么準(zhǔn)備面試的,我也想談?wù)勎易罱囊恍┫敕ê陀?jì)劃,大家一起討論。因此寫下了這篇文章。
整體分為以下兩個(gè)方面:
- 自我介紹 & 項(xiàng)目經(jīng)驗(yàn)
- 知識(shí)儲(chǔ)備
自我介紹
1、結(jié)合招聘崗位,只講重點(diǎn)。
簡(jiǎn)歷內(nèi)容這么多,實(shí)際的你,更有很多很多可以描述的東西。但時(shí)間有限,沒有面試官會(huì)聽你說個(gè)沒完。
根據(jù)你求職的崗位,說重點(diǎn)即可。
其實(shí)簡(jiǎn)歷制作的原則,也是一樣。只是自我介紹時(shí)間更短,內(nèi)容更精華。
2、有理有據(jù),少說空話。
如果你說“自己學(xué)習(xí)能力強(qiáng)”,這就是一句假大空的話。誰都可以說自己學(xué)習(xí)能力強(qiáng)。
你如果真的在這方面有突出,就要舉一個(gè)例子,比如是1個(gè)月從0到1考了什么證書等。
3、有開頭有結(jié)尾,有邏輯。
開頭問候,結(jié)尾總結(jié)。中間1、2、3條理清楚。
4、特別提醒。
自我介紹中的內(nèi)容,很可能是面試官后續(xù)發(fā)問的內(nèi)容。所以,一是要引起重視,講最重要的,你最想讓面試官知道的內(nèi)容。 而是做好準(zhǔn)備,揚(yáng)長(zhǎng)避短,不要給自己挖坑。
比如前面你說自己學(xué)習(xí)能力強(qiáng),但是沒有舉例子。
面試官很可能,順著你的話問你,怎么證明你學(xué)習(xí)能力強(qiáng)呢? 結(jié)果你答不上來,或者是非常普通的成績(jī),根本不能算是“學(xué)習(xí)能力強(qiáng)”。 那你就是給自己挖坑了。
其實(shí)自我介紹也是每個(gè)人各有不同,說起來也只能提供大致的思路。和你具體的求職崗位、經(jīng)歷、個(gè)人風(fēng)格有很大的關(guān)系。
項(xiàng)目經(jīng)驗(yàn)
項(xiàng)目經(jīng)驗(yàn)這塊因人而異,把覺得做的有亮點(diǎn)的東西挑出來,從四個(gè)方面來準(zhǔn)備:
- 功能模塊的實(shí)現(xiàn)
- 達(dá)到了什么效果
- 遇到了什么問題,是如何解決的
- 涉及到的相關(guān)知識(shí)點(diǎn)
項(xiàng)目經(jīng)驗(yàn)和知識(shí)點(diǎn) 其實(shí)是一個(gè)雙向的過程,要 試圖去找到它們之間的聯(lián)系:
- 談到項(xiàng)目經(jīng)驗(yàn)的時(shí)候,可以說:做完 xx 之后,我還去了解了一下 yy 背后的原理,xxx,這里體現(xiàn)的是 你是否有求知欲 。
- 談到知識(shí)點(diǎn)的時(shí)候,可以說:yy 的原理是這樣的,在 xx 項(xiàng)目中我是如何應(yīng)用它來解決問題的,這里體現(xiàn)的是 你是否具備把知識(shí)付諸實(shí)踐的能力。
知識(shí)儲(chǔ)備
很多人準(zhǔn)備面試的時(shí)候,大多數(shù)就會(huì)這樣的,打開??途W(wǎng),查找 “Android 面經(jīng)”,找?guī)讉€(gè)多的開始看。以及從各大技術(shù)交流平臺(tái)搜索Android面試題。開始刷題復(fù)習(xí)。
這雖然看起來很自然,但是并不是一種 健康的方式,面試題的作用應(yīng)當(dāng)是查缺補(bǔ)漏,上學(xué)的時(shí)候也不是直接發(fā)習(xí)題冊(cè)然后對(duì)著答案學(xué)習(xí)吧?
知乎上有個(gè)問題,叫做 如何高效學(xué)習(xí),里面有一個(gè)回答我覺得很符合我自己的觀點(diǎn),就是 建立起自己的知識(shí)體系,建立知識(shí)體系的目的在于:
- 鞏固記憶。
- 認(rèn)識(shí)自己,找到自己的優(yōu)勢(shì)及不足。
- 把握復(fù)習(xí)的進(jìn)度。
經(jīng)驗(yàn)總結(jié)。
目前我參考和自己整理的總結(jié)的會(huì)分為以下幾個(gè)大點(diǎn):
Java 相關(guān)
1.容器(HashMap、HashSet、LinkedList、ArrayList、數(shù)組等)
2.內(nèi)存模型
3.垃圾回收算法(JVM)
4.類加載過程(需要多看看,重在理解,對(duì)于熱修復(fù)和插件化比較重要)
5.反射
6.多線程和線程池
7.HTTP、HTTPS、TCP/IP、Socket通信、三次握手四次揮手過程
計(jì)算機(jī)網(wǎng)絡(luò)部分:
TCP 有哪些狀態(tài)
- 三次握手、四次揮手。為啥不是三次不是兩次
- HTTPS 和 HTTP 的區(qū)別,HTTPS 2.0 3.0?
- 瀏覽器輸入一個(gè) URL 按下回車網(wǎng)絡(luò)傳輸?shù)牧鞒蹋?/li>
- 問的深一點(diǎn)的可能涉及到網(wǎng)絡(luò)架構(gòu),每層有什么協(xié)議,F(xiàn)TP 相關(guān)原理,例:TCP 建立連接后,發(fā)包頻率是怎么樣的?
- 設(shè)計(jì)模式(六大基本原則、項(xiàng)目中常用的設(shè)計(jì)模式、手寫單例等)
生產(chǎn)者模式和消費(fèi)者模式的區(qū)別?
單例模式雙重加鎖,為什么這樣做?
知道的設(shè)計(jì)模式有哪些?
項(xiàng)目中常用的設(shè)計(jì)模式有哪些?
手寫生產(chǎn)者、消費(fèi)者模式。
手寫觀察者模式代碼。
適配器模式、裝飾者模式、外觀模式的異同?
談?wù)剬?duì) java 狀態(tài)機(jī)的理解。
談?wù)剳?yīng)用更新(灰度、強(qiáng)制更新、分區(qū)更新?)
9.斷點(diǎn)續(xù)傳
10.Java 四大引用
11.Java 的泛型, 和 的區(qū)別
12.問到泛型、泛型擦除、通配符相關(guān)的東西
13.??final?
?、??finally?
?、??finalize?
? 的區(qū)別
14.接口、抽象類的區(qū)別
Android 相關(guān)
1.自定義 View
ViewGroup 繪制順序 (例:自定義 ViewGroup 如何實(shí)現(xiàn) FlowLayout?如何實(shí)現(xiàn) FlowLayout 調(diào)換順序)
自定義 View 如何實(shí)現(xiàn)打桌球效果;
自定義 View 如何實(shí)現(xiàn)拉弓效果,貝瑟爾曲線原理實(shí)現(xiàn)?
2.事件攔截分發(fā)
事件分發(fā)已經(jīng)不是直接讓你講了,會(huì)給你具體的場(chǎng)景,比如 A 嵌套 B ,B 嵌套 C,從 C 中心按下,一下滑出到 A,事件分發(fā)的過程,這里面肯定會(huì)有 ACTION_CANCEL 的相關(guān)調(diào)用時(shí)機(jī)。
3.解決過的一些性能問題,在項(xiàng)目中的實(shí)際運(yùn)用。
4.性能優(yōu)化工具
(TraceView、Systrace、調(diào)試 GPU 過度繪制 & GPU 呈現(xiàn)模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker 等)
5.性能優(yōu)化 (講講你自己項(xiàng)目中做過的性能優(yōu)化)
網(wǎng)絡(luò):API 優(yōu)化、流量?jī)?yōu)化、弱網(wǎng)優(yōu)化
內(nèi)存:OOM 處理、內(nèi)存泄漏、內(nèi)存檢測(cè)、分析、Bitmap 優(yōu)化 ,LeakCanary 原理,什么檢測(cè)內(nèi)存泄漏需要兩次?
繪制
電量:WeakLock 機(jī)制、JobScheduler 機(jī)制
APK 瘦身 (APK 瘦身是怎么做的,只用 armabi-v7a 沒有什么問題么?
APK 瘦身這個(gè)基本是 100% 被面試問到,可能是我簡(jiǎn)歷上提到的原因。)
內(nèi)存抖動(dòng)
內(nèi)存泄漏
卡頓 {如何檢測(cè)卡頓,卡頓原理是什么,怎么判斷頁面響應(yīng)卡頓還是邏輯處理造成的卡頓} ,BlockCanary 的原理
布局優(yōu)化、過度渲染處理、ANR 處理、監(jiān)控、埋點(diǎn)、Crash 上傳。
啟動(dòng)優(yōu)化
6.Http[s]請(qǐng)求慢的解決辦法(DNS、攜帶數(shù)據(jù)、直接訪問 IP)
7.緩存自己如何實(shí)現(xiàn)(LRUCache 原理)
8.圖形圖像相關(guān):OpenGL ES 管線流程、EGL 的認(rèn)識(shí)、Shader 相關(guān)
10.SurfaceView、TextureView、GLSurfaceView 區(qū)別及使用場(chǎng)景
動(dòng)畫、差值器、估值器(Android中的View動(dòng)畫和屬性動(dòng)畫 、Android 動(dòng)畫 介紹與使用)
11.屬性動(dòng)畫、補(bǔ)間動(dòng)畫、幀動(dòng)畫的區(qū)別和使用場(chǎng)景
12.MVC、MVP、MVVM
相互間的區(qū)別和各種使用場(chǎng)景,如何選擇適合自己的開發(fā)架構(gòu)。
13.Handler、ThreadLocal、AsyncTask、IntentService 原理及應(yīng)用,Handler 機(jī)制原理,IdleHandler 什么時(shí)候調(diào)用。
14.Gradle(Groovy 語法、Gradle 插件開發(fā)基礎(chǔ))
15.熱修復(fù)、插件化
談?wù)剬?duì) ClassLoader 的理解
雙親委托機(jī)制的好處
自定義 ClassLoader
插件化為什么會(huì)出現(xiàn),如何代碼加載,資源加載,代理 Hook)
16.組件化架構(gòu)思路
如何從一個(gè)老項(xiàng)目一步步實(shí)現(xiàn)組件化,主要問思路,考察架構(gòu)能力和思考能力。(需要考慮很多,每一步做什么,順序很重要)
組件化和模塊化的理解與區(qū)別?
17.系統(tǒng)打包流程
18.Android 有哪些存儲(chǔ)數(shù)據(jù)的方式。
19.SharedPrefrence 源碼和問題點(diǎn);
20.sqlite 相關(guān)
sqlite 升級(jí),增加字段的語句
數(shù)據(jù)庫框架對(duì)比和源碼分析
數(shù)據(jù)庫優(yōu)化及數(shù)據(jù)遷移問題
getWritableDatabase 和 getReadableDatabase 的區(qū)別
20.如何判斷一個(gè) APP 在前臺(tái)還是后臺(tái)?
21.混合開發(fā)
Hybrid 做過嗎? 例:Android 通過WebView調(diào)用 JS 代碼 例:JS 通過WebView調(diào)用 Android 代碼;
Hybrid 通信原理是什么,有做研究嗎?
說說你用過的混合開發(fā)技術(shù)有哪些?各有什么優(yōu)缺點(diǎn)?
Android Framework
- AMS 、PMS
- Activity 啟動(dòng)流程,App 啟動(dòng)流程
- Binder 機(jī)制(IPC、AIDL 的使用)
4.講講 Linux 上的 IPC 通信,Binder 有什么優(yōu)勢(shì),Android 上有哪些多進(jìn)程通信機(jī)制?
項(xiàng)目中遇見了什么多進(jìn)程場(chǎng)景?
AIDL 是什么?解決了什么問題?
談?wù)剬?duì)進(jìn)程共享和線程安全的認(rèn)知?
5.為什么使用 Parcelable,好處是什么?
6.Android 圖像顯示相關(guān)流程,Vsync 信號(hào)等
三方源碼
1.Glide :加載、緩存、LRU 算法
(如何自己設(shè)計(jì)一個(gè)大圖加載框架)
(LRUCache 原理)
2.EventBus
3.LeakCanary
4.ARouter
重點(diǎn):Router 原理,如何實(shí)現(xiàn)組件間的通信,組件化平級(jí)調(diào)用數(shù)據(jù)的方式。
5.插件化(不同插件化機(jī)制原理與流派,優(yōu)缺點(diǎn)。局限性)
6.熱修復(fù)
7.RXJava
(RxJava 的線程切換原理)
8.Retrofit
(Retrofit 在 OkHttp 上做了哪些封裝?動(dòng)態(tài)代理和靜態(tài)代理的區(qū)別,是怎么實(shí)現(xiàn)的)
9. OkHttp
1、OkHttp 源碼,網(wǎng)絡(luò)緩存
2、如果從網(wǎng)絡(luò)加載一個(gè) 10M 的圖片,說下注意事項(xiàng)
算法與數(shù)據(jù)結(jié)構(gòu)
1.單鏈表:反轉(zhuǎn)、插入、刪除
2.雙鏈表:插入、刪除
3.手寫常見排序、歸并排序、堆排序
4.二叉樹前序、中序、后序遍歷
5.最大 K 問題
6.廣度、深度優(yōu)先搜索算法
7.String 轉(zhuǎn) int。
核心算法就三行代碼,不過臨界條件很多,除了判空,還需要注意負(fù)數(shù)、Integer 的最大最小值邊界等;
8.如何判斷一個(gè)單鏈表有環(huán)?
9.鏈表翻轉(zhuǎn);
10.快排;
11.100 億個(gè)單詞,找出出現(xiàn)頻率最高的單詞。要求幾種方案;
12.鏈表每 k 位逆序;
13.鏡像二叉樹;
14.找出一個(gè)無序數(shù)組中出現(xiàn)超過一半次數(shù)的數(shù)字;
15.計(jì)算二叉樹的最大深度,要求非遞歸算法。
16.String 方式計(jì)算加法。
項(xiàng)目&HR
1.項(xiàng)目開發(fā)中遇到的最大的一個(gè)難題和挑戰(zhàn),你是如何解決的。(95% 會(huì)問到)
2.說說你開發(fā)最大的優(yōu)勢(shì)點(diǎn)(95% 會(huì)問到)
3.你為什么會(huì)離開上家公司
4.你的缺點(diǎn)是什么?
5.你能給公司帶來什么效益?
6.你對(duì)未來的職業(yè)規(guī)劃?
面試:如果不準(zhǔn)備充分的面試,完全是浪費(fèi)時(shí)間,更是對(duì)自己的不負(fù)責(zé)。
文末會(huì)給大家分享下我整理的Android面試專題及答案(這些題我基本都刷了三遍以上,畢竟年前突然被裁心里是有點(diǎn)迷),其中大部分都是大企業(yè)面試常問的面試題,可以對(duì)照這查漏補(bǔ)缺,當(dāng)然了,這里所列的肯定不可能覆蓋全部方式,不過對(duì)大家找工作肯定是有幫助!
貓眼三輪面試
一面 (技術(shù)面): 20:00 ~ 21:12(8.27號(hào))
- 自我介紹
- Handler是用來做啥的
- 每個(gè)線程都能有自己的Handler嗎
- Fragment和Activity之間傳遞數(shù)據(jù)
- Activity加載Fragment的方式
- add一個(gè)Fragment的時(shí)候已經(jīng)有一個(gè)Fragment的話,對(duì)之前的Fragment的生命周期的影響
- ActivityA啟動(dòng)ActivityB的生命周期回調(diào)
- Activity的啟動(dòng)模式(分別用于什么場(chǎng)景)
- onSaveInstance和onReStoreInstance作用
- ViewModel怎么實(shí)現(xiàn)的
- ViewModel是不是一直存在內(nèi)存中(比如我開啟了很多頁面,或者ViewModel持有Bitmap這樣的對(duì)象)
- Android用過哪些布局
- View的繪制會(huì)經(jīng)過哪些(onMeasure,onLayout,onDrow)
- 讓View重新繪制的方法(重繪時(shí),onMeasure會(huì)調(diào)用幾次)
- onMeasure會(huì)執(zhí)行幾次
- ConstraintLayout經(jīng)常用到的屬性
- guaidline為什么不會(huì)在布局上顯示
- 事件分發(fā)機(jī)制
- Android中線程掛了進(jìn)程會(huì)崩潰嗎?
- RxJava用過了哪些操作符
- Java內(nèi)存分為哪些區(qū)域
- 堆內(nèi)存溢出、棧溢出相同嗎
- 哪些場(chǎng)景下會(huì)發(fā)生棧溢出
- 創(chuàng)建的對(duì)象一般在哪個(gè)區(qū)域
- GCRoots有哪些
- 復(fù)制算法(GC算法之一)的流程
- 靜態(tài)內(nèi)部類和內(nèi)部類的區(qū)別
- volatile的作用是什么
- 禁止指令重排序是怎么實(shí)現(xiàn)的
- 為什么需要禁止指令重排序
- synchronized修飾靜態(tài)方法和普通方法時(shí)的區(qū)別
- synchronized可重入嗎
- 類鎖、對(duì)象鎖有區(qū)別嗎
- 兩個(gè)字符串,求相同的最長(zhǎng)串
- 兩個(gè)玻璃球,100層,求出具體在哪一層扔下會(huì)碎
- 反問環(huán)節(jié)
二面(技術(shù)面): 10:27 ~ 11:20(8.31號(hào))
- 自我介紹
- 問了一些項(xiàng)目里面的東西,聊聊是干啥的
- 為什么要用MVVM
- 數(shù)據(jù)變更UI自動(dòng)更新怎么實(shí)現(xiàn)的,用的DataBinding嗎
- 什么是觀察者模式,有什么好處
- 什么情況下用責(zé)任鏈模式?哪里遇到過?有什么好處?
- 怎么實(shí)現(xiàn)的責(zé)任鏈模式
- 為什么okHttp里面用到責(zé)任鏈模式
- 用戶可以自定義多個(gè)攔截器嗎
- 有網(wǎng)狀態(tài)下的緩存和無網(wǎng)狀態(tài)下的緩存一樣嗎
- 緩存是自己做的還是okhttp做的
- 可以手寫一些sql嗎
- room是什么類型的數(shù)據(jù)庫
- room是怎么實(shí)現(xiàn)的,為什么不要寫sql呢
- livedata粘性事件
- jetpack還用過哪些
- navigation用來做什么
- TCP UDP區(qū)別
- 為什么需要三次握手和四次揮手
- 三次揮手不行嗎
- 兩次揮手呢(服務(wù)器接收到客戶端的FIN報(bào)文,立馬將回復(fù)客戶端ACK和自己的FIN報(bào)文一并發(fā)給客戶端可以嗎?)
- TCP屬于哪一層
- TCP的上一層是哪一層
- 應(yīng)用層常見的協(xié)議
- http與https的區(qū)別
- https怎么進(jìn)行的加密
- 對(duì)稱加密和非對(duì)稱加密的方式
- 你知道的非對(duì)稱和對(duì)稱加密有哪些
- 給定字符串“abcdefg”,打印出長(zhǎng)度為4,并且不重復(fù)的的字符串組合(eg: “abcd”、“abce”,而"abcd"和"abdc"這種僅順序不同的串屬于同一個(gè));
三面 (非技術(shù)面): 11:00~11:20(9.1號(hào))
- 自我介紹(不要說前兩面說到的,說點(diǎn)有意思的。ps:內(nèi)心想法,我盡量哭的小聲點(diǎn)。。。 ????)
- 簡(jiǎn)歷上的項(xiàng)目是基于什么初衷寫的
- 當(dāng)初為什么選擇Android
- Retrofit,Rxjava,okHttp這些是怎么接觸到的
- jetpack呢
- MVVM和MVP說說你的理解
- 平時(shí)怎么進(jìn)行學(xué)習(xí)的
- 家在哪兒
- 確定來北京嗎
- 有時(shí)間來實(shí)習(xí)嗎
總結(jié)
從上面看下來問的內(nèi)容比較多,但是面試問來問去還是那么點(diǎn)東西。所以面試沒有其他的訣竅,只看你對(duì)這些知識(shí)點(diǎn)準(zhǔn)備的充分程度。so,出去面試時(shí)先看看自己復(fù)習(xí)到了哪個(gè)階段就好。
本文摘自 :https://blog.51cto.com/u