從4月17号提離職到今天,已經面試了整整15家公司了,其中有二三十個人的小廠,也有像騰訊QQ音樂和OPPO這樣的大廠,因為本人做的項目也是比較雜的,所有面試的類型也比較多,有做ReactNative的,也有做人工智能、機器人的,同時也有做智能家居的,是以接觸到的面試題也是比較多的,為了避免自己忘記,在這裡做個總結,先把面試題給列出來,之後有時間再補充答案.
Java方面:
1、如何停止一個線程請求;
2、線程之間的通信方式;
3、線程和程序的差別;
4、程序之間的通信方式;
5、Java的垃圾回收機制;
6、雜湊演算法以及HashMap的底層原理;
7、數組和連結清單的差別;
8、讀寫鎖和互斥鎖的差別;
9、重載和重寫的差別
Android方面:
1、AsyncTask的原理
2、RxJava如何進行線程切換,如何取消RxJava的請求以及RxJava的錯誤重試api
3、自定義view的三個方法,invalidate和postInvalidate的差別,requestLayout會調用哪幾個方法,onLayout中的三個方法
4、Android的事件分發機制,以及如何解決滑動沖突等(ScrollView中包含ListView和GridView的滑動沖突)
5、自述從業以來最滿意的一個項目,在其中遇到什麼問題,如何解決,講一講閱讀過印象最深刻的技術部落格,從中學到了什麼
6、項目中如何解決ANR
7、做過的Android性能優化,包括包體積、記憶體優化、布局優化等;
8、Android的螢幕适配;
9、Android webview和Js的通信;
10、ProtocolBuffer的優缺點以及底層實作;
11、https和http,http怎麼傳遞資料,https怎麼加密資料;
12、LeakCanary的原理;
13、handler相關,handler底層處理消息的算法;
14、如何實作音視訊的同步;
15、Okhttp的底層原理;
16、RecycleView中資料複用可能會存在的問題以及如何解決;
17、EventBus的原理;
18、Android中四種啟動模式以及應用場景;
19、Activity的啟動方式;
20、ListView如何實作複雜布局,不同Item不同子布局;
21、Glide的原理以及和piccasso的差別。
22、如何給資料庫添加索引;
23、OpenCV、OpenGL等圖檔處理的東西;
24、Android的Hook技術,如何不在AndroidManifest中注冊啟動一個Activity;
25、Android中的四種引用方式;
26、Jni的使用經驗
React Native:
1、React的生命周期;
2、Js中的事件循環;
3、ReactNative中原生和Js的通信方式;
4、redux的原理,如何解決action的異步操作(中間件);
5、如何優化FaltList加載長資料;
6、ReactNative的優缺點;
7、setState方法可以那幾個生命周期中調用;
8、ReactNative如何進行資料緩存;
9、React Native調用setState做了什麼
暫時能想起來的就是這些了,其中Android的事件分發,Handler是問的比較多的問題,其他的就是根據你項目中做過的一些點進行一個提問了,總的來說,因為離職前都還有一直在做新需求,也沒啥時間準備,被虐的還是挺慘的,不過也好,認識到了自身存在的一些問題。現在市場不缺能實作功能的碼農,缺的是了解底層原理的程式員。