在下2017年畢業,目前從事android開發工作已經3年啦,前段時間剛完成一次跳槽,面試了幾家公司,將一些面試經驗分享給大家,希望對大家有所幫助。
簡歷首先是簡歷,一般找一個模板,填寫掌握的技能和項目經歷即可。
github上有一個不錯的模板,詳情可見:https://github.com/CyC2018/Markdown-Resume
項目clone後,個性Resuem.md即可,然後導出為pdf文件。
簡歷建議長度為2頁,太長太短都不好。
建議用掌握與熟練掌握取代了解與精通。
刷題算法題可以說是現在找工作必刷的了。不過根據我面試的經驗,算法題總得來說問的還是比較少,還有一些公司是基本不問算法的。
當然如果碰到字節,快手這種每輪都問算法的公司,如果因為算法題拿不到offer就很可惜了。
算法題就好像高考語文的古詩詞默寫一樣,分不多,但丟了就很可惜了。
根據我的經驗,大概刷了,掌握100道題就足以應付面試了。
當然完全掌握需要重複練習,不是刷了一遍就可以的。
這裡推薦一下極客時間上覃超的五遍刷題法:
五遍刷題法1.第一遍,直接看解法多解法,比較解法優劣,默寫好的解法
2.第二遍,打開leetcode,直接開始寫多種解法比較,調優
3.第三遍,過一天之後,再重複做題
4.第四遍,過了一周,再來反覆練、
5.第五遍,面試前一周,恢復性訓練
極客時間上每周四覃超老師都會直播面試,比較精彩,大家可以去看看。當然也沒有必要去買算法課,看一看直播,了解下刷題的思路即可。
通過以上方法重複練習,大概刷100題就足以應付面試,如果每天刷3道,大概準備一個月即可
題庫刷題也要注意,不要一題一題刷,比如Leetcode的每日一題
建議按知識點分類,這樣比較方便重複練習與知識點掌握
在知識點刷過一遍後,也可以按照公司分類或者LeetCode熱題100刷,一般公司出算法題也是有題庫的
下面推薦幾個題庫供大家使用
按知識點分類
https://github.com/yuanguangxin/LeetCode
https://github.com/zhangyixing1007/leetcode
按公司分類
https://github.com/afatcoder/LeetcodeTop
熱題100
https://zhuanlan.zhihu.com/p/84230862
面經接下來就是各公司的面經了,分享出來供大家參考。
尚德公司面試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底層原理是什麼
Vivo公司1.簡單描述下Handler,Handler是怎麼切換線程的,Handler同步屏障
2.Glide的緩存,有用過Glide的什麼深入的API,自定義model是在Glide的什麼階段
3.講講mvc,mvp模式,presenter內存洩漏的問題
4.ANR了解過嗎?有沒有實際的ANR定位問題的經歷
5.性能優化你做過哪些?
6.有什麼實際解決UI卡頓優化的經歷
7.有做過什麼Bitmap優化的實際經驗
8.項目搭建過程中有什麼經驗,有用到什麼gradle腳本,分包有做什麼操作
9.組件化有詳細了解過嗎?ARouter詳細原理
10.講一下事件分發機制,RecyclerView是怎麼處理內部ViewClick衝突的
11.mainfest中配置LargeHeap,真的能分配到大內存嗎?
B站1.一個大致有序的數組如何排序,最快時間複雜度
2.如果叫你實現,你會怎樣實現一個多主題的效果
3.如何自定義實現一個FlexLayout
4.tinker的原理是什麼,還用過什麼熱修復框架,robust的原理是什麼?
5.說說你對註解的了解,是怎麼解析的
6.synchronized是公平鎖還是非公平鎖,ReteranLock是公平鎖嗎?是怎麼實現的
7.泛型是怎麼解析的,比如在retrofit中的泛型是怎麼解析的
8.mvp與mvvm的區別,mvvm怎麼更新UI,databinding用得多嗎,databinding的原理?
9.kotlin ?的原理
10.在項目中有直接使用tcp,socket來發送消息嗎
11.如何在網絡框架裡直接避免內存洩漏,不需要在presenter中釋放訂閱
12.生命周期都是通過什麼調用的?有用過AIDL嗎?
13.講一下RecyclerView的緩存機制,滑動10個,再滑回去,會有幾個執行onBindView
14.如何實現RecyclerView的局部更新,用過payload嗎,notifyItemChange方法中的參數?
15.講講LinkedHashMap的數據結構
16.put post有什麼區別
17.A Activity打開B Activity的生命周期變化,會有什麼方法打斷嗎?
18.Fragment hide show生命周期變化
19.Fragment replace生命周期變化
B站二面1.為什麼考慮換工作
2.屏幕適配做過什麼工作?
3.你們網絡框架用的什麼?為什麼?
4.如果讓你來開發B站的一個頁面,哪一個頁面可以很快入手
5.性能優化你做過什麼工作?
6.h5與native通信你做過什麼工作?
7.插件化的主要優點和缺點是什麼?
8.你覺得B站目前的APP有什麼問題?
9.如果產品要求你開發一個音頻播放功能,你會怎麼著手?預計會有什麼坑?
10.ViewPager切換Fragment什麼最耗時?
11.線程間同步的方法
12.鎖之間的區別
B站三面1.介紹一下你自已和項目
2.說說為什麼考慮離職
3.說說對你們原來公司的印象
4.為什麼想來B站?你在B站上常常在看什麼?
5.期望薪資是多少?
6.你對搬到上海有什麼想法?
騰訊1.介紹一下你們項目的架構
2.Rxjava是怎麼實現線程切換的
3.Rxjava自定義操作符
4.ARouter的原理
5.ARouter怎麼實現接口調用
6.ARouter怎麼實現頁面攔截
7.MVP怎麼處理內存洩漏
8.OkHttp怎麼實現連接池
9.如果讓你來實現一個網絡框架,你會考慮什麼
10.你做過什麼性能優化的工作
11.熱修復的原理,資源的熱修復的原理,會不會有資源衝突的問題
12.ViewPager中嵌套ViewPager怎麼處理滑動衝突
13.android源碼中有哪些設計模式
14.說說binder機制的原理
騰訊二面1.為什麼考慮換一份工作?
2.在你們公司這幾年感覺怎麼樣?
3.技術選型上,為什麼這麼考慮?從開發效率,產品性能,產品質量,產品體驗等方面考慮
4.你們的產品為什麼被砍掉,從哪方面考慮
5.在這幾年裡,你有做過什麼覺得最有價值的工作
6.你還有什麼要問我的嗎?目前有幾個offer,傾向性是怎樣的?
網易雲音樂1.ViewPager2原理
2.LifeCycle的原理是怎樣的?
3.ViewModel為什麼在旋轉屏幕後不會丟失狀態
4.Drawable與View有什麼區別,Drawable有哪些子類
5.屬性動畫更新時會回調onDraw嗎?
6.OkHttp網絡攔截器,應用攔截器?OKHttp有哪些攔截器,分別起什麼作用
7.自定義實現一個九宮格如何實現
8.PathClassLoader與DexClassLoader有什麼區別
9.這些年有做一些什麼比較難的工作?
10.編譯時註解與運行時註解,為什麼retrofit要使用運行時註解?什麼時候用運行時註解?
11.kotlin lazy使用,lazy viewmodel
12.有沒有看一下Google官方的ViewModel demo
13.ViewModel在Activity初始化與在Fragment中初始化,有什麼區別?
14.kotlin與Java互相調用有什麼問題?
15.retrofit怎麼做post請求
16.界面優化的一些方法,ConstraintLayout實現三等分,ConstraintLayout動畫.
17.CoordinatorLayout自定義behavior,可以攔截什麼?
網易雲音樂二面1.你們的項目中做過什麼比較難的工作?
2.視頻播放,一個player怎麼實現預加載,避免loading
2.webView加載本地圖片,如何從安全方面考慮
3.http1.0,http1.1,http1.2有什麼區別
4.https與http有什麼區別
5.有用過什麼加密算法?AES,RAS什麼原理?
6.android跨進程通信了解嗎?共享內存用過嗎?binder怎麼驗證pid?binder驅動了解嗎?
7.SharedParence可以跨進程通信嗎?如何改造成可以跨進程通信的.commit和apply的區別.
8.Seriazable與Parceable的區別
9.Bundle是什麼數據結構?利用什麼傳遞數據
10.Jvm的內存結構,Jvm的垃圾回收,方法區有什麼東西?
11.h5與native交互,webView.loadUrl與webView.evaluateUrl區別
網易雲音樂三面1.有沒有做過什麼WebView秒開的一些優化
2.你們的項目中有什麼難點?
3.native如何對h5進行鑑權,讓某些頁面可以調,某些頁面不能調
4.有看過哪些框架的源碼嗎?
5.viewModel是怎麼實現雙向數據綁定的?
6.viewModel怎麼實現自動處理生命周期?
7.圖片加載優化有什麼經驗嗎?
8.viewpager切換掉幀有什麼處理經驗?
9.一個wrap_content的ImageView,加載遠程圖片,傳什麼參數裁剪比較好?
10.兩個getDrawable取得的對象,有什麼區別?
11.補間動畫與屬性動畫的區別,哪個效率更高?
12.jsBridge實現方式
13.平常是怎麼了解一些新知識與業界動態的,最近有什麼印象深刻的文章
14.平常抓包用什麼工具?
15.Mvp與Mvvm有什麼區別?
跟誰學1.項目中的Webview與native通信
2.項目中對WebView的功能進行了怎樣的增強
3.synchronized跟ReentranLock有什麼區別?
4.synchronized與ReentranLock發生異常的場景.
5.算法,刪除數組中的重複元素
6.手寫雙檢查單例模式,各個步驟有什麼區別
7.Activity生命周期
快手1.string,equals,==有什麼區別
2.AsyncTask內存洩露
3.dispatchTouchEvent,onInterceptEvent,onTouchEvent順序,關係
4.onMeasure,onLayout,onDraw關係
5.算法題,反轉數組
6.算法題,鍊表求和
7.說說你對協程的理解
8.協程怎麼取消
9.說說MVP與MVVM的區別
快手二面1.算法題,二叉樹的最大深度
2.如果android端和IOS端調一個接口,一個通了一個沒通,你會如何解決
3.如果android端和IOS端調一個接口,一個比較慢,一個比較快,有什麼思路
4.ARouter的原理是什麼?如果不用ARouter,你會怎麼去解藕。接口?設計接口有什麼需要注意的?
5.h5與native交互做過什麼工作?
6.登陸功能,登陸成功然後跳轉到一個新Activity,中間涉及什麼?從事件傳遞,網絡請求,AMS交互角度分析
7.AMS交互調用生命周期是順序的嗎?
8.binder進程間通信可以調用原進程方法嗎?
9.mvp與mvvm有什麼區別?
10.token放在本地如何保存?如何加密比較好?
快手三面1.viewModel的原理,為什麼可以在Activity銷毀後保存數據
2.mvvm雙向數據綁定的原理是怎樣的?ViewModel
3.說說你們項目中的難點是怎樣的?
4.偽代碼實現一個長按事件
5.實現一個下載功能的接口
猿輔導1.泛型有什麼優點?
2.動態代理有什麼作用?
3.拉圾回收的GCRoot是什麼?
4.Handler機制了解嗎?一個線程有幾個Looper?為什麼?
5.你了解協程嗎?協程有什麼作用?可以完全取代rxjava嗎?
6.你們用的什麼消息通信機制
7.你的項目有什麼難點?介紹一下?
8.算法題,二叉樹最長結點集合
猿輔導2面1.你們項目中的難點是什麼?
2.編譯期註解處理的是字節碼還是java文件
3.你在項目中有用到什麼設計模式嗎?
4.ARouter的原理是怎樣的?
5.插件化的原理是怎樣的?
6.算法題,K個一組反轉鍊表
7.廣播與RxBus的區別,全局廣播與局部廣播區別
猿輔導3面1.你們項目中有什麼難點?
2.@JavaScriptInterface為什麼不通過多個方法來實現?
3.為什麼不利用同步方法來做jsBridge交互?同步可以做異步,異步不能做同步
4.網絡封裝怎麼實現?
5.算法題,不同面值的幾個硬幣,怎麼求滿足條件的最小值
鬥魚1.說說HashMap的原理
2.說說Java的內存分區
3.講講你對垃圾回收機制的了解,老年代有什麼算法?
4.說說你對volatile欄位有什麼用途?
5.說說事件分發機制,怎麼寫一個不能滑動的ViewPager
6.說說你對類加載機制的了解?DexClassLoader與PathClassLoader的區別
7.說說插件化的原理,資源的插件化id重複如何解決?
8.mvp與mvvm模式的區別是什麼?
9.JetPack組件用過哪些?lifeCycle的原理是什麼?如果在onStart裡面訂閱,會回調onCreate嗎?
10.單例模式有什麼缺點?
11.說說App的啟動過程,在ActivityThread的main方法裡面做了什麼事,什麼時候啟動第一個Activity?
12.說說你對Handler機制的了解,同步消息,異步消息等
13.說說你對屏幕刷新機制的了解,雙重緩衝,三重緩衝,黃油模型
14.onCreate,onResume,onStart裡面,什麼地方可以獲得寬高
15.為什麼view.post可以獲得寬高,有看過view.post的源碼嗎?
16.attachToWindow什麼時候調用?
17.DataBinding的原理了解嗎?
滴滴一面1.JVM類加載機制了解嗎,類什麼時候會被加載?類加載的過程具體生命周期是怎樣的?
2.Handler內存洩漏的GCRoot是什麼?
3.動畫裡面用到了什麼設計模式?
4.OkHttp裡面用到了什麼設計模式?
5.OkHttp連接池是怎麼實現的?裡面怎麼處理SSL?
6.泛型為什麼要擦除?kotlin的泛型了解嗎?泛型的pecs原則
7.同步屏障
8.性能優化做過什麼工作?
9.RecyclerView的緩存結構是怎樣的?緩存的是什麼?cachedView會執行onBindView嗎?
10.RecyclerView嵌套RecyclerView,NestScrollView嵌套ScrollView滑動衝突
11.ViewGroup在Action_Move時onIntercept返回true,事件怎麼傳遞
12.Launcher啟動圖標,有幾個進程?
13.JMM可見性,原子性,有序性,synchronized可以保證什麼?
14.源碼中有哪裡用到了AtomicInt
15.AQS了解嗎?
16.Activity內LinearLayout紅色wrap_content,包含View綠色wrap_content,求界面顏色
17.ViewModel的使用中有什麼坑?
18.有用DSL,anko寫過布局嗎?
19.HashMap查找的時間複雜度是多少?
20.阿里編程規範不建議使用線程池,為什麼?
21.四種線程池原理?
22.了解哪些算法?
23.IdleHandler用過嗎?
滴滴二面1.如何封裝一個字符串轉數字的工具類
2.如何求當前Activity View的深度
3.多進程怎麼實現?如果啟動一個多進程APP,會有幾個進程運行?
4.反射可以反射final修飾的欄位嗎?
5.Activity與AppCompactActivity區別,Activity會打包到包裡面去嗎?
6.如何讓兩個線程循環交替列印
7.怎麼中止一個線程,Thread.Interupt一定有效嗎?
8.動畫連續調用的原理是什麼?
9.做過一些SDK的操作嗎?
10.協程可以在Java項目中使用嗎?
11.SharedPreference原理?讀取xml是在哪個線程?
12.了解APK打包的過程嗎?
13.class文件的組成?常量池裡面有什麼內容?
14.自動裝箱發生在什麼時候?編譯期還是運行期
15.bugly日誌收集的原理是什麼?
16.啟動優化做過什麼工作?如果首頁就要用到的初始化?
17.DataBinding原理
滴滴3面1.插件化的原理是什麼?有沒有什麼非運行時插件化的解決方案?
2.ARouter的原理是怎樣的?註解處理器是處理java還是字節碼
3.java和字節碼有什麼區別?
4.kotlin空安全的原理是什麼?
5.性能優化做過什麼工作?有用過什麼工具?有沒有精確測量的工具?
6.kotlinc與javac編譯字節碼有什麼區別?
7.你在團隊中是怎樣一個角色?
8.你有沒有做什麼推進項目的工作
9.說說熱修復的原理?
字節跳動1.你們的項目中有什麼難點?
2.你們項目的穩定性如何?有做過什麼穩定性優化的工作?
3.WebView性能優化做過什麼工作?
4.AIDL in out oneWay代表什麼意思?
5.線程池了解多少?拒絕策略有幾種,為什麼有newSingleThread
6.跨進程通信了解多少?管道了解嗎?
7.協程介紹一下,講一個協程的scope與context,協程的+號代表什麼
8.Handler休眠是怎樣的?epoll的原理是什麼?如何實現延時消息,如果移除一個延時消息會解除休眠嗎?
9.算法斐波那契臺階
10.手寫生產者消息者模型
11.IdleHandler應用場景
字節跳動2面1.自定義圓角圖片
2.自定義LinearLayout,怎麼測量子View寬高
3.setFactory和setFactory2有什麼區別?
4.插件化換膚方案
5.插件化的原理,startActivity hook了哪個方法
6.手勢操作ActionCancel後怎麼取消
7.怎麼優化xml inflate的時間,涉及IO與反射。了解compose嗎?
8.算法題:二叉樹的每一層最左邊節點
9.RecyclerView 緩存結構,RecyclerView預取,RecyclerView局部刷新
10.setOnTouchListener,onClickeListener和onTouchEvent的關係
部分面試題知識點總結1.性能優化相關例子: Android性能優化之UI卡頓優化實例分析
2.設計模式相關:利用設計模式封裝網絡請求框架 , Retrofit中的設計模式
3.計算機網絡https相關 : Android程式設計師需要了解的https與中間人攻擊
4.並發編程相關: Android程式設計師需要了解的並發編程知識
5.Jetpack ViewModel相關:關於ViewModel你應該知道的知識點
6.Jetpack LiveData相關: 關於LiveData你應該知道的知識點