當(dāng)前位置:首頁 > IT技術(shù) > 移動(dòng)平臺(tái) > 正文

面試斬獲貓眼Android崗Offer,我是怎樣準(zhǔn)備Android技術(shù)面的知否?
2021-09-24 14:50:04

作者:哈登

前言

本篇文章給大家分享一下筆者面試的一些感受和經(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)。

簡歷內(nèi)容這么多,實(shí)際的你,更有很多很多可以描述的東西。但時(shí)間有限,沒有面試官會(huì)聽你說個(gè)沒完。

根據(jù)你求職的崗位,說重點(diǎn)即可。

其實(shí)簡歷制作的原則,也是一樣。只是自我介紹時(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)長避短,不要給自己挖坑。

比如前面你說自己學(xué)習(xí)能力強(qiáng),但是沒有舉例子。

面試官很可能,順著你的話問你,怎么證明你學(xué)習(xí)能力強(qiáng)呢? 結(jié)果你答不上來,或者是非常普通的成績,根本不能算是“學(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í)題冊然后對(duì)著答案學(xué)習(xí)吧?

知乎上有個(gè)問題,叫做 如何高效學(xué)習(xí),里面有一個(gè)回答我覺得很符合我自己的觀點(diǎn),就是 建立起自己的知識(shí)體系,建立知識(shí)體系的目的在于:

  • 鞏固記憶。
  • 認(rèn)識(shí)自己,找到自己的優(yōu)勢及不足。
  • 把握復(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ā)包頻率是怎么樣的?
  1. 設(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ì)給你具體的場景,比如 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)化、流量優(yōu)化、弱網(wǎng)優(yōu)化
內(nèi)存:OOM 處理、內(nèi)存泄漏、內(nèi)存檢測、分析、Bitmap 優(yōu)化 ,LeakCanary 原理,什么檢測內(nèi)存泄漏需要兩次?
繪制
電量:WeakLock 機(jī)制、JobScheduler 機(jī)制
APK 瘦身 (APK 瘦身是怎么做的,只用 armabi-v7a 沒有什么問題么?
APK 瘦身這個(gè)基本是 100% 被面試問到,可能是我簡歷上提到的原因。)
內(nèi)存抖動(dòng)
內(nèi)存泄漏
卡頓 {如何檢測卡頓,卡頓原理是什么,怎么判斷頁面響應(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ū)別及使用場景

動(dòng)畫、差值器、估值器(Android中的View動(dòng)畫和屬性動(dòng)畫 、Android 動(dòng)畫 介紹與使用)
11.屬性動(dòng)畫、補(bǔ)間動(dòng)畫、幀動(dòng)畫的區(qū)別和使用場景
12.MVC、MVP、MVVM
相互間的區(qū)別和各種使用場景,如何選擇適合自己的開發(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

  1. AMS 、PMS
  2. Activity 啟動(dòng)流程,App 啟動(dòng)流程
  3. Binder 機(jī)制(IPC、AIDL 的使用)

4.講講 Linux 上的 IPC 通信,Binder 有什么優(yōu)勢,Android 上有哪些多進(jìn)程通信機(jī)制?

項(xiàng)目中遇見了什么多進(jìn)程場景?
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)勢點(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ì)大家找工作肯定是有幫助!

貓眼三輪面試

面試斬獲貓眼Android崗Offer,我是怎樣準(zhǔn)備Android技術(shù)面的知否?_java

一面 (技術(shù)面): 20:00 ~ 21:12(8.27號(hào))

  1. 自我介紹
  2. Handler是用來做啥的
  3. 每個(gè)線程都能有自己的Handler嗎
  4. Fragment和Activity之間傳遞數(shù)據(jù)
  5. Activity加載Fragment的方式
  6. add一個(gè)Fragment的時(shí)候已經(jīng)有一個(gè)Fragment的話,對(duì)之前的Fragment的生命周期的影響
  7. ActivityA啟動(dòng)ActivityB的生命周期回調(diào)
  8. Activity的啟動(dòng)模式(分別用于什么場景)
  9. onSaveInstance和onReStoreInstance作用
  10. ViewModel怎么實(shí)現(xiàn)的
  11. ViewModel是不是一直存在內(nèi)存中(比如我開啟了很多頁面,或者ViewModel持有Bitmap這樣的對(duì)象)
  12. Android用過哪些布局
  13. View的繪制會(huì)經(jīng)過哪些(onMeasure,onLayout,onDrow)
  14. 讓View重新繪制的方法(重繪時(shí),onMeasure會(huì)調(diào)用幾次)
  15. onMeasure會(huì)執(zhí)行幾次
  16. ConstraintLayout經(jīng)常用到的屬性
  17. guaidline為什么不會(huì)在布局上顯示
  18. 事件分發(fā)機(jī)制
  19. Android中線程掛了進(jìn)程會(huì)崩潰嗎?
  20. RxJava用過了哪些操作符
  21. Java內(nèi)存分為哪些區(qū)域
  22. 堆內(nèi)存溢出、棧溢出相同嗎
  23. 哪些場景下會(huì)發(fā)生棧溢出
  24. 創(chuàng)建的對(duì)象一般在哪個(gè)區(qū)域
  25. GCRoots有哪些
  26. 復(fù)制算法(GC算法之一)的流程
  27. 靜態(tài)內(nèi)部類和內(nèi)部類的區(qū)別
  28. volatile的作用是什么
  29. 禁止指令重排序是怎么實(shí)現(xiàn)的
  30. 為什么需要禁止指令重排序
  31. synchronized修飾靜態(tài)方法和普通方法時(shí)的區(qū)別
  32. synchronized可重入嗎
  33. 類鎖、對(duì)象鎖有區(qū)別嗎
  34. 兩個(gè)字符串,求相同的最長串
  35. 兩個(gè)玻璃球,100層,求出具體在哪一層扔下會(huì)碎
  36. 反問環(huán)節(jié)

二面(技術(shù)面): 10:27 ~ 11:20(8.31號(hào))

  1. 自我介紹
  2. 問了一些項(xiàng)目里面的東西,聊聊是干啥的
  3. 為什么要用MVVM
  4. 數(shù)據(jù)變更UI自動(dòng)更新怎么實(shí)現(xiàn)的,用的DataBinding嗎
  5. 什么是觀察者模式,有什么好處
  6. 什么情況下用責(zé)任鏈模式?哪里遇到過?有什么好處?
  7. 怎么實(shí)現(xiàn)的責(zé)任鏈模式
  8. 為什么okHttp里面用到責(zé)任鏈模式
  9. 用戶可以自定義多個(gè)攔截器嗎
  10. 有網(wǎng)狀態(tài)下的緩存和無網(wǎng)狀態(tài)下的緩存一樣嗎
  11. 緩存是自己做的還是okhttp做的
  12. 可以手寫一些sql嗎
  13. room是什么類型的數(shù)據(jù)庫
  14. room是怎么實(shí)現(xiàn)的,為什么不要寫sql呢
  15. livedata粘性事件
  16. jetpack還用過哪些
  17. navigation用來做什么
  18. TCP UDP區(qū)別
  19. 為什么需要三次握手和四次揮手
  20. 三次揮手不行嗎
  21. 兩次揮手呢(服務(wù)器接收到客戶端的FIN報(bào)文,立馬將回復(fù)客戶端ACK和自己的FIN報(bào)文一并發(fā)給客戶端可以嗎?)
  22. TCP屬于哪一層
  23. TCP的上一層是哪一層
  24. 應(yīng)用層常見的協(xié)議
  25. http與https的區(qū)別
  26. https怎么進(jìn)行的加密
  27. 對(duì)稱加密和非對(duì)稱加密的方式
  28. 你知道的非對(duì)稱和對(duì)稱加密有哪些
  29. 給定字符串“abcdefg”,打印出長度為4,并且不重復(fù)的的字符串組合(eg: “abcd”、“abce”,而"abcd"和"abdc"這種僅順序不同的串屬于同一個(gè));

三面 (非技術(shù)面): 11:00~11:20(9.1號(hào))

  1. 自我介紹(不要說前兩面說到的,說點(diǎn)有意思的。ps:內(nèi)心想法,我盡量哭的小聲點(diǎn)。。。 ????)
  2. 簡歷上的項(xiàng)目是基于什么初衷寫的
  3. 當(dāng)初為什么選擇Android
  4. Retrofit,Rxjava,okHttp這些是怎么接觸到的
  5. jetpack呢
  6. MVVM和MVP說說你的理解
  7. 平時(shí)怎么進(jìn)行學(xué)習(xí)的
  8. 家在哪兒
  9. 確定來北京嗎
  10. 有時(shí)間來實(shí)習(xí)嗎

總結(jié)

從上面看下來問的內(nèi)容比較多,但是面試問來問去還是那么點(diǎn)東西。所以面試沒有其他的訣竅,只看你對(duì)這些知識(shí)點(diǎn)準(zhǔn)備的充分程度。so,出去面試時(shí)先看看自己復(fù)習(xí)到了哪個(gè)階段就好。

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >