從年后至今已面試了很多公司,也收到了幾家巨頭的offer,還有其他公司的,總結下經驗,也是對金三銀四和過去的一個回顧和總結吧,
一 簡歷準備
關于簡歷的準備,我不用多說,大家應該也都明白,簡歷至少要滿足以下幾個要點:
- 以專案為主體,設計你的簡歷
- 針對企業的需要,突出你的技能
- 專案的三要素(專案 = 產品 + 技術 + 結果)
- 量化你的專案,給出數字
- 關于簡歷的準備,很多人可能不知道從何下手,可以從1.如何發現問題,2.怎么解決問題,3.解決效果對比,這幾個方面去描述,我這邊可以提供一些簡歷模板作為參考,對我個人來說,幫助還是非常大的,

二、技能儲備
Java部分:
- 1.1 資料結構與演算法
1.1.1 常用的資料結構有哪些?
1.1.2 陣列
(1)如何在一個1到100的整數陣列中找到丟失的數字?
(2)如何在給定的整數陣列中找到重復的數字? )(小米)
(3) 如何在未排序整數陣列中找到最大值和最小值? (位元組跳動)
(4)在Java中如何從給定陣列中洗掉多重復制?
(5)大數相加(今日頭條)
1.1.3 鏈表
(1).那查詢第一個跟倒數第二個呢?(這就不一樣了,第一個直接給了頭結點,倒數第二個需要從倒數第一個開始查詢,走兩步) (騰訊)
(2).arrayList底層原理 (滴滴)
(3).如何在一次遍歷中找到單個鏈表的中值?(中國平安)
(4)如何證明給定的鏈表是否包含回圈?如何找到回圈的頭節點?(優酷)
(5).兩個有交叉的單鏈表,求交叉點 (華為)
(6).如何得到單鏈表的長度? (360)
(7).如何在不使用遞回的情況下逆轉單鏈表?(小米/美團)
(8).怎么判斷鏈表有環? (滴滴)
1.1.4 佇列&堆疊
(1).如何使用堆疊實作佇列的功能?(廣州荔枝FM)
(2).兩個堆疊實作一個佇列(蘑菇街)
(3).兩個佇列實作一個堆疊 (騰訊)
(4).對比一下佇列和堆疊,以及它們底部實作 (騰訊)
1.1.5 二叉樹
(1).如何在給定的二叉樹中執行先序遍歷?(百度)
(2).如何實作后序遍歷演算法?(百度)
(3).如何在給定陣列中執行二分法搜索?(蘇寧)
(4).已知前序遍歷為{1,2,4,7,3,5,6,8},中序遍歷為{4,7,2,1,5,3,8,6},它的二叉樹是怎么樣的?(58)
(5).輸入兩棵二叉樹A 和 B,判斷 B 是不是 A 的子結構, (愛奇藝)
(6).請實作兩個函式,分別用來序列化二叉樹和反序列化二叉樹, (YY)
(7).平衡二叉樹和紅黑樹的區別?(位元組跳動)
(8).什么是平衡二叉樹,它有什么特征 (美團)
(9).B 樹,B+樹
1.1.6 HashMap
(1).HashMap的底層原理是什么?執行緒安全么? (百度( 美團)
(2).HashMap中put是如何實作的? (滴滴)
(3).談一下hashMap中什么時候需要進行擴容,擴容resize()又是如何實作的?
(4).什么是哈希碰撞?怎么解決? (滴滴.美團)
(5).HashMap和HashTable的區別 (小米)
(6).HashMap中什么時候需要進行擴容,擴容resize()是如何實作的? (滴滴)
(7).hashmap concurrenthashmap原理 (美團)
(8).arraylist和hashmap的區別,為什么取數快?(位元組跳動)
1.1.7圖
(1).旋轉輸出矩陣
(2).給定一個矩陣 int matrixA[m][n],每行每列都是增序的,實作一個演算法去尋找矩陣中的某個元素 element. (搜狗)
1.1.8排序演算法有哪些?
(1).top-k排序堆排序,位圖法) (美團)
(2).冒泡排序的手寫 (華捷艾米)
(3).堆排序演算法的手寫 (華捷艾米)
(4).橢圓形場地有兩個賽道,可以同時提供兩匹馬比賽,兩匹馬比賽后,可以獲知兩匹馬中跑的快的那匹馬,但是沒有計時工具,問題,如何最優的演算法(比賽次數最少),獲知10匹馬中速度最快的三匹馬 (阿里)
(5).輸入一個整型無序陣列,對堆排序(阿里)
(6).如何使用快速排序演算法對整數陣列進行排序([CVTE)
1.1.9 查找演算法
(1).有序陣列的二分查找演算法(百度)
1.1.10 串
(1).給定一個字串,請你找出其中不含有重復字符的 最長子串的長度, (位元組跳動)
(2).給定一個字串 s,找到 s 中最長的回文子串,你可以假設 s 的最大長度為 1000,
1.1.11 請寫出以下演算法的時間復雜度
冒泡排序法 插入排序法 堆排序法 二叉樹排序法
1.1.12 其他演算法
(1).常用的對稱加密演算法,有什么不同? (位元組跳動)
(2).如何在無序(有負數)的陣列中查找是否存在和為target的兩個陣列合,twoSum();(位元組)
1.4 網路編程
(1).描述TCP三次握手與四次揮手的程序與意義,
a.TCP的三次握手程序?為什么會采用三次握手,若采用二次握手可以嗎?
b.三次握手為什么不是兩次一次 五次六次(美團)
(2).TCP與UDP的區別是什么?(騰訊)
(3).Http與Https的關系是什么?
(4).SSL握手的程序,
(5).Http的post與get請求的區別是什么?
(6).輸入一個URL到瀏覽器發生了什么?(美團)
Android 相關:
-
性能優化與原始碼
-
Android之SharedPreferences內部原理淺析
-
Android原始碼分析-訊息佇列和Looper
-
Android原始碼分析—帶你認識不一樣的AsyncTask
-
Android性能優化之使用執行緒池處理異步任務
-
Android Context完全決議,你所不知道的Context的各種細節
-
Android行程間通信(IPC)機制Binder簡要介紹和學習計劃
-
Activity
-
Activity是什么?
-
典型情況下的Activity生命周期?
-
例外情況下的Activity的生命周期 & 資料如何保存和恢復?
-
從Activity A跳轉到Activity B之后,然后再點擊back鍵之后,它們的生命周期呼叫流程是什么?
-
如何統計Activity的作業時間?
-
給我說說Activity的啟動模式 & 使用場景,
-
如何在任意位置關掉應用所有Activity & 如何在任意位置關掉指定的Activity?
-
Activity的啟動流程(從原始碼角度決議)?
-
啟動一個其它應用的Activity的生命周期分析,
-
BroadcastReceiver
-
廣播是什么?
-
廣播的注冊方式有哪些?
-
廣播的分類 & 特性 & 使用場景?
-
說說系統廣播和本地廣播的原理 & 區別 & 使用場景,
-
有兩個應用注冊了一樣的廣播,一個是靜態,一個是動態,連優先級也一樣,那么當廣播從系統發出來后,哪個應用先接收到廣播?
-
Fragment
-
Android中v4包下Fragment和app包下Fragment的區別是什么?
-
Fragment的生命周期 & 請結合Activity的生命周期再一起說說,
-
說說Fragment如何進行懶加載,
-
ViewPager + Fragment結合使用會出現記憶體泄漏嗎 & 如何解決?
-
Fragment如何和Activity進行通信 & Fragment之間如何進行通信?
-
給我談談Fragment3種切換的方式以及區別 & 使用場景,
-
getFragmentManager,getSupportFragmentManager,getChildFragmentManager之間的區別?
-
FragmentPagerAdapter和FragmentStatePagerAdapter區別?
-
Fragment如何實作類似Activity堆疊的壓堆疊和出堆疊效果的?
-
序列化
-
什么是序列化 & 能用來干什么?
-
Android中序列化方式有幾種?說說它們的區別,
-
如果想要序列化的類中某些欄位不序列化,那么應該怎么做?
-
** IPC**
-
說說你對Android多行程開發的認識?
-
Android中行程間通信的方式有哪些?
-
什么是AIDL?如何創建一個AIDL,
-
檔案存盤
-
說說Android中資料持久化的方式 & 使用場景,
-
接觸過MMKV嗎?說說SharedPreference和它的區別,
-
第三方資料庫框架用過哪些?有沒有自己封裝過一個SQLite的庫?
-
SQLite是執行緒安全的嗎 & SharedPreference是執行緒安全的嗎?
-
請簡單的給我說說什么是三級快取?
-
SharedPreference的apply和commit的區別,
-
談談你對SQLite事務的認識,
-
ListView & RecyclerView
-
ListView是什么?如何使用?
-
RecyclerView是什么?如何使用?如何回傳不一樣的Item,
-
ListView和RecycyclerView的區別是什么?
-
分別講講你對ListView & RecyclerView的優化經驗,
-
給我說說RecyclerView的回收復用機制
-
說說你是如何給ListView & RecyclerView加上拉重繪 & 下拉加載更多機制,
-
談談你是如何對ListView & RecycleView進行區域重繪的?
-
談談如何進行分頁加載?
-
ScrollView下嵌套一個ListView通常會出現什么問題?
-
一個ListView或者一個RecyclerView在顯示新聞資料的時候,出現圖片錯位,可能的原因有哪些 & 如何解決?
-
View事件分發機制
-
View繪制機制
-
布局
-
Binder
-
影片機制
-
JNI
-
Window & Appliction & Context
-
通知
-
對話框(Dialog & DialogFragment & PopWindow)
-
藍牙
-
Android中行程與執行緒調度之nice
-
Android元件so的加載原理
-
Toast 原理剖析
-
Android I/O
-
Android專案構建流程
-
HTTP、HTTPS、TCP/IP、Socket通信、三次握手四次揮手程序
-
TCP協議與UDP協議的區別
-
網頁中輸入url,到渲染整個界面的整個程序,以及中間用了什么協議?
-
具體介紹下TCP/IP
-
TCP的三次握手和四次揮手,為什么不是兩次握手?為什么揮手多一次呢?
-
HTTP的幾種請求方法具體介紹
-
HTTP請求和回應報文的格式,以及常用狀態碼,
-
Service的兩種啟動方式?區別在哪?
-
如何保證Service不被殺死 ?
-
能否在Service開啟耗時操作 ? 怎么做 ?
-
用過哪些系統Service ?
-
了解ActivityManagerService嗎?發揮什么作用
-
描述一下Android資料持久存盤方式?
-
SharedPreferences的應用場景?注意事項?
-
SharedPrefrences的apply和commit有什么區別?
-
了解SQLite中的事務操作嗎?是如何做的
-
使用SQLite做批量操作有什么好的方法嗎?
-
如何洗掉SQLite中表的個別欄位
-
使用SQLite時會有哪些優化操作?
-
廣播有幾種形式 ? 都有什么特點 ?
-
廣播的兩種注冊方式 ?
-
廣播發送和接收的原理了解嗎 ?(Binder機制、AMS)
-
談談訊息機制Handler作用 ?有哪些要素 ?流程是怎樣的 ?
-
一個執行緒能否創建多個Handler,Handler跟Looper之間的對應關系 ?
-
軟參考跟弱參考的區別
-
Handler 引起的記憶體泄露原因以及最佳解決方案
-
為什么系統不建議在子執行緒訪問UI?
-
Looper死回圈為什么不會導致應用卡死?
-
使用Handler的postDealy后訊息佇列會有什么變化?
-
可以在子執行緒直接new一個Handler嗎?怎么做?
-
Message可以如何創建?哪種效果更好,為什么?
-
執行緒池的好處? 四種執行緒池的使用場景,執行緒池的幾個引數的理解?
-
Android中還了解哪些方便執行緒切換的類?
-
講講AsyncTask的原理
-
IntentService有什么用 ?
-
Bitmap使用需要注意哪些問題 ?
-
Bitmap.recycle()會立即回收么?什么時候會回收?如果沒有地方使用這個Bitmap,為什么垃圾回收不會直接回收?
-
一張Bitmap所占記憶體以及記憶體占用的計算
-
Android中快取更新策略 ?
-
LRU的原理 ?
-
記憶體泄露和記憶體溢位的區別 ?AS有什么工具可以檢測記憶體泄露
-
性能優化,怎么保證應用啟動不卡頓? 黑白屏怎么處理?
-
強參考置為null,會不會被回收?
-
ListView跟RecyclerView的區別
-
ListView的adapter是什么adapter
-
LinearLayout、FrameLayout、RelativeLayout性能對比,為什么?
-
談談MVC、MVP和MVVM,好在哪里,不好在哪里 ?
-
封裝p層之后.如果p層資料過大,如何解決?
-
是否能從Android中舉幾個例子說說用到了什么設計模式 ?
-
裝飾模式和代理模式有哪些區別 ?
-
如何進行單元測驗,如何保證App穩定 ?
-
Android中如何查看一個物件的回收情況 ?
-
Apk的大小如何壓縮 ?
-
如何通過Gradle配置多渠道包?
-
插件化原理分析
-
組件化原理
-
跨組件通信
-
組件化中路由、埋點的實作
-
Hook以及插樁技術
-
Android的簽名機制?
-
會用Kotlin、Fultter嗎? 談談你的理解
-
Kotlin和Java的區別
-
說一下Kotlin的伴生物件
-
請簡單介紹下Flutter框架,以及它的優缺點?
-
介紹下Flutter的理念架構
-
介紹下Flutter的FrameWork層和Engine層,以及它們的作用
-
介紹下Widget、State、Context 概念
-
StatefulWidget 的生命周期
-
簡述Widgets、RenderObjects 和 Elements的關系
-
簡述Flutter的繪制流程
-
簡述Flutter的執行緒管理模型
-
設計思想與代碼質量優化
-
程式性能優化
-
記憶體優化
-
耗電優化
-
網路傳輸與資料存盤優化
-
開發效率優化
-
熱修復設計
-
插件化框架設計
-
組件化框架設計.
-
圖片加載框架
-
網路訪問框架設計
-
RXJava回應式編程框架設計
-
IOC架構設計
-
Android架構組件Jetpack
-
LeakCanary核心原理原始碼淺析
-
LruCache 使用及原理
-
ARouter原理
-
注解框架實作原理
-
Android 如何撰寫基于編譯時注解的專案
-
RxJava2+Retrofit2+OkHttp3的基礎、封裝和專案中的使用
-
Rxjava2.0+Retrofit+Okhttp(封裝使用)+MVP框架搭建
-
Android 插件化和熱修復知識梳理
-
Android開發中比較常見的記憶體泄漏問題及解決辦法
-
如何檢測和定位Android記憶體泄漏
-
圖片占據的記憶體演算法
-
為什么圖片需要用軟參考,MVP模式中的view介面用弱參考
-
基于DataBinding與LiveData的MVVM實踐
-
App穩定性優化
-
App啟動速度優化
-
App記憶體優化
-
App繪制優化
-
App瘦身
-
網路優化
-
App電量優化
-
安卓的安全優化
-
為什么WebView加載會慢呢?
-
如何優化自定義View
(1). Acitvity的生命周期是什么樣的?
a. Acitvity的生命周期,如何摧毀一個Activity?
(2). Activity的4大啟動模式,與開發中需要注意的問題,如onNewIntent() 的呼叫;
a. Activity的啟動模式,區別
b. singleInstance如果不指定堆疊名,是怎么分配的?
(3). Intent顯示跳轉與隱式跳轉,如何使用?
(4). Activity A跳轉B,B跳轉C,A不能直接跳轉到C,A如何傳遞訊息給C?
(5). Activity如何保存狀態的?
(6). 請描訴Activity的啟動流程,從點擊圖示開始,
a. APP是怎么啟動的?
b. 啟動一個Activity的流程分析
(7). Service的生命周期是什么樣的?
a. Service兩種生命周期以及區別
(8). 你會在什么情況下使用Service?
(9). startServer和bindServier的區別?
(10). Service和Thread的區別?
(11). IntentService與Service的區別?
(12). ContentProvider如何自定義與使用場景是什么?
(13). BroadcastReciver的靜態注冊與動態注冊的區別?
(14). 廣播的分類與作業原理
(15). 可以再onReceive中開啟執行緒么,會有什么問題?
(16). 什么是有序廣播?
(17). Application、Activity、Service中context的區別?能否啟動一個activity、dialog?
(18). Fragment的生命周期?
(19). Fragment的建構式為啥不讓傳參?
(20). Fragment add與replace的區別,分別對Fragment的生命周期影響
三、View System
(1).View繪制流程與自定義View注意點,
Android中的每一個UI控制元件都是集成自View,然后這些View都具有相同的繪制流程,必須經過measure,layout和draw.
view的繪制流程是在Window添加程序中,ViewRootImpl類的setView方法開始的
(2).在onResume中可以測量寬高么
(3).事件分發機制是什么程序?
(4)沖突怎么解決?
(5).View分發反向制約的方法?
(6).自定義Behavior,NestScroll,NestChild,
(7).View.inflater程序與異步inflater
(8).inflater為什么比自定義View慢?
(9).onTouchListener onTouchEvent onClick的執行順序,
(10).怎么攔截事件 onTouchEvent如果回傳false onClick還會執行么?
(11).事件的分發機制,責任鏈模式的優缺點
(12).影片的分類以及區別
(13).屬性影片與普通的影片有什么區別?
(14).插值器 估值器的區別
(15).RecyclerView與ListView的對比,快取策略,優缺點,
(16).WebView如何做資源快取?
(17).WebView和JS互動的幾種方式與攔截方法,
(18).自定義view與viewgroup的區別
(19).View的繪制原理
(20).View中onTouch,onTouchEvent和onClick的執行順序
(21).View的滑動方式
(22).invalidate() 和 postInvalicate() 區別
(23).View的繪制流程是從Activity的哪個生命周期方法開始執行的
(24).Activity,Window,View三者的聯系和區別
(25).如何實作Activity視窗快速變暗
(26).ListView卡頓的原因以及優化策略
(27).ViewHolder為什么要被宣告成靜態內部類
(28).Android中的影片有哪些? 影片占用大量記憶體,如何優化
(29).自定義View執行invalidate()方法,為什么有時候不會回呼onDraw()
(30).DecorView, ViewRootImpl,View之間的關系,ViewGroup.add()會多添加一個ViewrootImpl嗎
(31).如何通過WindowManager添加Window(代碼實作)?
(32).為什么Dialog不能用Application的Context?
(33).WindowMangerService中token到底是什么?有什么區別
(34).RecyclerView是什么?如何使用?如何回傳不一樣的Item
(35).RecyclerView的回收復用機制
(36).如何給ListView & RecyclerView加上拉重繪 & 下拉加載更多機制
(37).如何對ListView & RecycleView進行區域重繪的?
(38).ScrollView下嵌套一個RecycleView通常會出現什么問題?
(39).一個ListView或者一個RecyclerView在顯示新聞資料的時候,出現圖片錯位,可能的原因有哪些 & 如何解決?
(40_.Requestlayout,onlayout,onDraw,DrawChild區別與聯系
(41).如何優化自定義View
(42).Android屬性影片實作原理,補間影片實作原理
四、Android FrameWork
1.Android中多行程通信的方式有哪些?
a.行程通信你用過哪些?原理是什么?
2.描述下Binder機制原理?
3.Binder執行緒池的作業程序是什么樣?
4.Handler怎么進行執行緒通信,原理是什么?
5.Handler如果沒有訊息處理是阻塞的還是非阻塞的?
6.handler.post(Runnable) runnable是如何執行的?
7.handler的Callback和handlemessage都存在,但callback回傳true handleMessage還會執行么?
8.Handler的sendMessage和postDelay的區別?
9.IdleHandler是什么?怎么使用,能解決什么問題?
10.為什么Looper.loop不阻塞主執行緒?
a.Looper無限回圈為啥沒有ANR
11.Looper如何在子執行緒中創建?
12.Looper、handler、執行緒間的關系,例如一個執行緒可以有幾個Looper可以對應幾個Handler?
13.如何更新UI,為什么子執行緒不能更新UI?
14.ThreadLocal的原理,以及在Looper是如何應用的?
15.Android 有哪些存盤資料的方式?
16.SharedPreference原理,commit與apply的區別是什么?使用時需要有哪些注意?
17.如何判斷一個 APP 在前臺還是后臺?
18.如何做應用保活?
19.一張圖片100x100在記憶體中的大小?
20. Intent的原理,作用,可以傳遞哪些型別的引數?
21.如果需要在Activity間傳遞大量的資料怎么辦?
22.打開多個頁面,如何實作一鍵退出?
23.LiveData的生命周期如何監聽的?
五,性能優化專題
1.App穩定性優化
2.App啟動速度優化
3.App記憶體優化
4、App繪制優化
5.App瘦身
6.網路優化
7.App電量優化
8.安卓的安全優化
9.為什么WebView加載會慢呢?
10.如何優化自定義View
11.FC(Force Close)什么時候會出現?
12.Java多執行緒引發的性能問題,怎么解決?
13.TraceView的實作原理,分析資料誤差來源,
14.是否使用過SysTrace,原理的了解?
15.mmap + native 日志優化?
六、三方原始碼理解
1.Glide :加載、快取、LRU 演算法(如何自己設計一個大圖加載框架) (LRUCache 原理)
2.EventBus
3.LeakCanary
4.ARouter
5.插件化(不同插件化機制原理與流派,優缺點,局限性)
6.熱修復
7.RXJava (RxJava 的執行緒切換原理)
8.Retrofit (Retrofit 在 OkHttp 上做了哪些封裝?動態代理和靜態代理的區別,是怎么實作的)
9.OkHttp
題庫整理成PDF檔案,有需要的朋友可以點此處免費獲取完整版,
三、最后
希望大家都能找到合適自己滿意的作業!fighting!
最后文末分享一份位元組總監整理的Android組件化的最佳實戰總結

為了不回應閱讀,只截圖展示部分,有需要完整版位元組總監整理的Android組件化的最佳實戰和文中學習題庫都可以點此處免費獲取,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/271966.html
標籤:其他
