概述
時間過得是真TM快,回想自己是16年從學校畢業,現在是出來工作的第五個年頭啦。在不同的大小公司都待過,就在前段時間順利的完成了一次跳槽漲薪,面試了幾家公司,最終選擇了字節跳動。今特此前來跟大家進行分享,希望對大家有所幫助。
面試過程
一面(40min):
- a. 線程池的底層原理
- b. 四種引用類型
- c. JAVA GC
- d. Sychornized關鍵字
- e. 靜態同步函數
- f. 可不可以調用Abstrut 父類的super方法
- g. HTTP協議中POST,GET 的區別
- h. TCP/IP協議棧 i. TCP和UDP的區別
- j. 三次握手是什么?可以兩次握手么
- k. 進程和線程的區別
- l. 手寫ViewGroup樹結構遍歷
第一次面試稍微有些緊張,但總體來說發揮還是OK的
二面(1h):
- a. ArrayList / LinkedList的區別
- b. HashMap的底層實現原理
- c. 兩個線程分別調用同一個類的實例函數和類函數
- d. 什么是可見性?舉例場景
- e. volatile關鍵字的意義
- f.Class對象
- g. 線程結束的方法:Interrupt之后需要做什么
- h. Android Activity切換生命周期
- i. Activity保存狀態的函數
- j. 子線程對UI的操作方法
- k. 如何在應用程序遠程調用中表明用戶身份
- l. 單例模式、建造者模式、中介模式
- m. 手寫中位數查找算法
中規中矩,就是Activity回答的不是很好
三面(50min):
- a. 聊聊項目
- b. Handler和Looper的底層結構
- c. postRunnable方法的底層實現
- d. Thread Run和Start的底層調用區別(是否中斷陷入)
- e. BroadCast的使用方法
- f. Intent的使用方法
- g. Intent-Filter
- h. 手寫外部排序
上面就是我大致的一個面試過程,能記得的面試內容就這些了,其實面試中問道的還是有很多,問的都比較全面,主要都是從自己簡歷上填寫的項目經歷問過去的,順着還延伸的問了一些。
面試過程其實大部分時候是,面試官或者公司是主導方,大部分的節奏是跟着面試官走,但是我覺得面試其實就是一個相互探討的過程,不僅是公司在選擇你,你也在選擇公司、以后工作的同事和leader。
所以我這次面試中,更多的是和面試官探討,也會反問面試官一些問題,不僅僅是最后面試官說可以問他幾個問題,在面試過程中就會詢問一些,優秀的面試官會跟你探討,並且討論出一個合理的方案或者正確的答案,整個過程非常愉悅,相互都學習到了。
這里概括一下給同伴們的幾個小建議:
1、把自身的技能練扎實,
2、找跟你過往經歷匹配度非常高的崗位,
3、面試的時候充分展現你個人的軟實力硬實力。
關於內推的(同公司應該是hr伙伴的良心建議):
1、內推如果長時間沒動靜可能是簡歷沒過。
2、投遞一些部門沒過,可以再投別的部門,甚至有可能會有別的部門看到簡歷,然后撈起來。
3、面試會有記錄,面試前充分准備最好不要留下不好的面評。
最后
我在面試前期做了一些面試准備,全網收集了一下字節跳動今年的面試真題(含解析),希望能幫助到大家學習提升,在面試中能順利通過。如有需要參考的可以直接去我 GitHub 訪問查閱。
下面展示一下部分內容:
1.Activity
1.Activity的啟動流程
2.onSaveInstanceState(),onRestoreInstanceState的掉用時機
3.activity的啟動模式和使用場景
4.Activity A跳轉Activity B,再按返回鍵,生命周期執行的順序
5.橫豎屏切換,按home鍵,按返回鍵,鎖屏與解鎖屏幕,跳轉透明Activity界面,啟動一個 Theme 為 Dialog 的 Activity,彈出Dialog時Activity的生命周期
6.onStart 和 onResume、onPause 和 onStop 的區別
7.Activity之間傳遞數據的方式Intent是否有大小限制,如果傳遞的數據量偏大,有哪些方案
8.Activity的onNewIntent()方法什么時候會執行
......
2.Service
1.service 的生命周期,兩種啟動方式的區別
2.Service啟動流程
3.Service與Activity怎么實現通信
4.IntentService是什么,IntentService原理,應用場景及其與Service的區別
5.Service 的 onStartCommand 方法有幾種返回值?各代表什么意思?
6.bindService和startService混合使用的生命周期以及怎么關閉
......
3.BroadcastReceiver
1.廣播的分類和使用場景
2.廣播的兩種注冊方式的區別
3.廣播發送和接收的原理
4.本地廣播和全局廣播的區別
4.ContentProvider
1.什么是ContentProvider及其使用
2.ContentProvider,ContentResolver,ContentObserver之間的關系
3.ContentProvider的實現原理
4.ContentProvider的優點
5.Uri 是什么
5.Handler
1.Handler的實現原理
2.子線程中能不能直接new一個Handler,為什么主線程可以
主線程的Looper第一次調用loop方法,什么時候,哪個類
3.Handler導致的內存泄露原因及其解決方案
4.一個線程可以有幾個Handler,幾個Looper,幾個MessageQueue對象
5.Message對象創建的方式有哪些 & 區別?
Message.obtain()怎么維護消息池的
6.Handler 有哪些發送消息的方法
7.Handler的post與sendMessage的區別和應用場景
8.handler postDealy后消息隊列有什么變化,假設先 postDelay 10s, 再postDelay 1s, 怎么處理這2條消息
9.MessageQueue是什么數據結構
10.Handler怎么做到的一個線程對應一個Looper,如何保證只有一個MessageQueue
ThreadLocal在Handler機制中的作用
......
6.View繪制
1.View繪制流程
2.MeasureSpec是什么
3.子View創建MeasureSpec創建規則是什么
4.自定義Viewwrap_content不起作用的原因
5.在Activity中獲取某個View的寬高有幾種方法
6.為什么onCreate獲取不到View的寬高
7.View#post與Handler#post的區別
8.Android繪制和屏幕刷新機制原理
9.Choreography原理
10.什么是雙緩沖
......
7.View事件分發
1.View事件分發機制
2.view的onTouchEvent,OnClickListerner和OnTouchListener的onTouch方法 三者優先級
3.onTouch 和onTouchEvent 的區別
4.ACTION_CANCEL什么時候觸發
5.事件是先到DecorView還是先到Window
6.點擊事件被攔截,但是想傳到下面的View,如何操作
7.如何解決View的事件沖突
8.在 ViewGroup 中的 onTouchEvent 中消費 ACTION_DOWN 事件,ACTION_UP事件是怎么傳遞
9.Activity ViewGroup和View都不消費ACTION_DOWN,那么ACTION_UP事件是怎么傳遞的
10.同時對父 View 和子 View 設置點擊方法,優先響應哪個
11.requestDisallowInterceptTouchEvent的調用時機
8.RecycleView
1.RecyclerView的多級緩存機制,每一級緩存具體作用是什么,分別在什么場景下會用到哪些緩存
2.RecyclerView的滑動回收復用機制
3.RecyclerView的刷新回收復用機制
4.RecyclerView 為什么要預布局
5.ListView 與 RecyclerView區別
6.RecyclerView性能優化
9.Viewpager&Fragment
1.Fragment的生命周期 & 結合Activity的生命周期
2.Activity和Fragment的通信方式, Fragment之間如何進行通信
3.為什么使用Fragment.setArguments(Bundle)傳遞參數
4.FragmentPageAdapter和FragmentStatePageAdapter區別及使用場景
5.Fragment懶加載
6.ViewPager2與ViewPager區別
7.Fragment嵌套問題
10.WebView
1.如何提高WebView加載速度
2.WebView與 js的交互
3.WebView的漏洞
4.JsBridge原理
11.動畫
1.動畫的類型
2.補間動畫和屬性動畫的區別
3.ObjectAnimator,ValueAnimator及其區別
4.TimeInterpolator插值器,自定義插值器
5.TypeEvaluator估值器
12.Bitmap
1.Bitmap 內存占用的計算
2.getByteCount() & getAllocationByteCount()的區別
3.Bitmap的壓縮方式
4.LruCache & DiskLruCache原理
5.如何設計一個圖片加載庫
6.有一張非常大的圖片,如何去加載這張大圖片
7.如果把drawable-xxhdpi下的圖片移動到drawable-xhdpi下,圖片內存是如何變的。
8.如果在hdpi、xxhdpi下放置了圖片,加載的優先級。如果是400800,10801920,加載的優先級。
13.mvc&mvp&mvvm
1.MVC及其優缺點
2.MVP及其優缺點
3.MVVM及其優缺點
4.MVP如何管理Presenter的生命周期,何時取消網絡請求
14.Binder
1.Android中進程和線程的關系,區別
2.為何需要進行IPC,多進程通信可能會出現什么問題
3.Android中IPC方式有幾種、各種方式優缺點
4.為何新增Binder來作為主要的IPC方式
5.什么是Binder
6.Binder的原理
7.Binder Driver 如何在內核空間中做到一次拷貝的?
7.使用Binder進行數據傳輸的具體過程
8.Binder框架中ServiceManager的作用
......
15.內存泄漏&內存溢出
1.什么是OOM & 什么是內存泄漏以及原因
2.Thread是如何造成內存泄露的,如何解決?
3.Handler導致的內存泄露的原因以及如何解決
4.如何加載Bitmap防止內存溢出
5.MVP中如何處理Presenter層以防止內存泄漏的
16.性能優化
1.內存優化
2.啟動優化
3.布局加載和繪制優化
4.卡頓優化
5.網絡優化
17.Window&WindowManager
1.什么是Window
2.什么是WindowManager
3.什么是ViewRootImpl
4.什么是DecorView
5.Activity,View,Window三者之間的關系
6.DecorView什么時候被WindowManager添加到Window中
18.WMS
1.什么是WMS
2.WMS是如何管理Window的
3.IWindowSession是什么,WindowSession的創建過程是怎樣的
4.WindowToken是什么
5.WindowState是什么
6.Android窗口大概分為幾種?分組原理是什么
7.Dialog的Context只能是Activity的Context,不能是Application的Context
8.App應用程序如何與SurfaceFlinger通信的
View 的繪制是如何把數據傳遞給 SurfaceFlinger 的
9.共享內存的具體實現是什么
10.relayout是如何向SurfaceFlinger申請Surface
11.什么是Surface
19.AMS
1.ActivityManagerService是什么?什么時候初始化的?有什么作用?
2.ActivityThread是什么?ApplicationThread是什么?他們的區別
3.Instrumentation是什么?和ActivityThread是什么關系?
4.ActivityManagerService和zygote進程通信是如何實現的
5.ActivityRecord、TaskRecord、ActivityStack,ActivityStackSupervisor,ProcessRecord
6.ActivityManager、ActivityManagerService、ActivityManagerNative、ActivityManagerProxy的關系
7.手寫實現簡化版AMS
20.系統啟動
1.android系統啟動流程
2.SystemServer,ServiceManager,SystemServiceManager的關系
3.孵化應用進程這種事為什么不交給SystemServer來做,而專門設計一個Zygote
4.Zygote的IPC通信機制為什么使用socket而不采用binder
21.App啟動&打包&安裝
1.應用啟動流程
2.apk組成和Android的打包流程
3.Android的簽名機制,簽名如何實現的,v2相比於v1簽名機制的改變
4.APK的安裝流程
22.序列化
1.什么是序列化
2.為什么需要使用序列化和反序列化
3.序列化的有哪些好處
4.Serializable 和 Parcelable 的區別
5.什么是serialVersionUID
6.為什么還要顯示指定serialVersionUID的值?
23.Art & Dalvik 及其區別
1.Art & Dalvik 及其區別
24.模塊化&組件化
1.什么是模塊化
2.什么是組件化
3.組件化優點和方案
4.組件獨立調試
5.組件間通信
6.Aplication動態加載
7.ARouter原理
25.熱修復&插件化
1.插件化的定義
2.插件化的優勢
3.插件化框架對比
4.插件化流程
5.插件化類加載原理
6.插件化資源加載原理
7.插件化Activity加載原理
8.熱修復和插件化區別
9.熱修復原理
26.AOP
1.AOP是什么
2.AOP的優點
3.AOP的實現方式,APT,AspectJ,ASM,epic,hook
27.jectpack
1.Navigation
2.DataBinding
3.Viewmodel
4.livedata
5.liferecycle
28.開源框架
1.Okhttp源碼流程,線程池
2.Okhttp攔截器,addInterceptor 和 addNetworkdInterceptor區別
3.Okhttp責任鏈模式
4.Okhttp緩存怎么處理
5.Okhttp連接池和socket復用
6.Glide怎么綁定生命周期
7.Glide緩存機制,內存緩存,磁盤緩存
8.Glide與Picasso的區別
9.LruCache原理
10.Retrofit源碼流程,動態代理
......
如有需要參考的可以直接去我 GitHub 訪問查閱,希望能幫助到大家學習提升。
最后,祝想找工作的同學都能去自己心儀的公司,前程似錦!