前言:
“金三銀四”這句話真的不是說說而已,每年的三四月份確確實實是招聘旺季,各公司人才缺口大,市場總體需求量大增,想要換份好工作的同學們一定不要錯過哦!
個人認爲,每一次的跳槽經歷對我們來說都是一次提升,在面試前,需要我們去回顧基礎知識,深入瞭解各大框架,狠刷算法題等等;面試過程中,我們要沉着冷靜,思路清晰,知無不言,言無不盡,也是對我們溝通能力的考驗;面試過後,我們必須找個安靜的地方,對整個面試過程進行復盤,同時對面試題進行記錄,對自己的回答進行總結。下面是我對自己近期面試的部分總結,目前只給出了問題,之後我會盡量補上答案,希望能夠幫到大家!
奇虎360
2、handler機制、以及和message、looper等之間的關係
3、與service通信的幾種方式,進程間通信和進程內通信的區別
4、線程死鎖、用代碼實現
5、寫出兩種單例模式,說出優缺點
6、實現recycleview側滑刪除
7、http、tcp/ip,get和post區別
8、內部類爲什麼會內存泄漏?換成靜態內部類爲什麼就解決了?
9、給recycleview加header和footer如何加,爲什麼能加,複雜佈局實現等
10、輸入字符串“ab**c*d*ef*”,輸出“*****abcdef”,並返回*號個數,代碼實現,儘量用空間複雜度和時間複雜度最小的方式
11、一個整數數組中,只有兩個數出現1次,其他數均出現2次,求這兩個數,儘量用空間複雜度和時間複雜度最小的方式
12、談談項目中自己認爲做的很好並有一定難度的東西
人人車:
1、activity生命週期,onsaveinstance和onrestoreinstance是成對調用的嗎
2、set和list有什麼區別
3、線程池的創建、使用,核心線程和非核心線程的區別
4、handler機制,looper什麼時候創建?在prepare裏做了什麼?在loop方法裏做了什麼?
5、自定義view繪製,onMeasure裏測量規格,測量模式和測量大小如何存在?
6、事件分發機制,onTouch、onTouchevent和onClick的調用順序
7、okhttp的實現原理、普通攔截器和網絡攔截器有什麼區別,緩存攔截器和網絡攔截器的調用順序
8、retrofit的實現原理,動態代理相關
9、rxjava線程調度器有幾種、如何使用?
答:RxJava中Schedulers有很多種,下表展示了RxJava中可用的調度器種類:
調度器類型 | 效果 |
---|---|
Schedulers.computation( ) | 用於計算任務,如事件循環或和回調處理,不要用於IO操作(IO操作請使用Schedulers.io());默認線程數等於處理器的數量 |
Schedulers.from(executor) | 使用指定的Executor作爲調度器 |
Schedulers.immediate( ) | 在當前線程立即開始執行任務 |
Schedulers.io( ) | 用於IO密集型任務,如異步阻塞IO操作,這個調度器的線程池會根據需要增長;對於普通的計算任務,請使用Schedulers.computation();Schedulers.io( )默認是一個CachedThreadScheduler,很像一個有線程緩存的新線程調度器 |
Schedulers.newThread( ) | 爲每個任務創建一個新線程 |
Schedulers.trampoline( ) | 當其它排隊的任務完成後,在當前線程排隊開始執行 |
AndroidSchedulers.mainThread()
是在Android中才有的。調度器使用:
subscribeOn 指定了Observable的調度器.
subscribe 指示一個Observable在一個特定的調度器上調用觀察者的onNext, onError和onCompleted方法,即影響的是subscribe()裏的操作
10、如何實現進程間通信?binder原理相關
11、servicemanager的作用是什麼?
12、bundle傳值有限制嗎?是多少?
13、抽象類和接口區別、接口中可以有方法體嗎?
14、hashmap是怎麼實現的?發生數據碰撞該如何處理?
15、handler的post和sendMessage有什麼不同?有什麼聯繫?
16、manifest中activity的export屬性有什麼作用
新東方在線:
1、自定義view流程
2、RxJava使用,原理等
3、activity間跳轉時的生命週期
4、內存泄漏和內存溢出的區別
5、強軟弱虛引用的區別
6、設計模式、靜態內部類的單例模式爲什麼性能好
7、30M的大圖片處理
8、字符串反轉
好未來
1、項目中是如何使用MVP模式的?實現與結構
2、自定義view流程
3、性能優化、內存泄漏、內存溢出(列舉項目中遇到的)
4、本地與h5互調有哪些方式?連接橋的方式用過嗎?
5、事件分發流程
6、http與https區別,post和get區別
7、兩個單鏈表相交,找出相交的結點(手寫實現)
8、獲取單鏈表倒數第k個元素(手寫實現)
9、153=1^3+5^3+3^3,求出符合上述條件的1000以內的數(手寫實現)
課程格子:
1、自定義view流程,有一個寬高屬性設置爲wrapcontent的imageview,它的大小是如何測量的?
2、rxjava的線程切換,single和observable等的區別,subscribeOn和observeOn可以調用幾次?
3、簡述OKhttp的原理,如何實現?
4、handler的postDelayed內部是如何實現的?
5、簡述eventbus的原理
6、arrayList和linkedList區別
7、介紹一下接口的特徵
8、activity啓動模式,singletask相關,任務棧相關
9、項目中框架的搭建
10、native和js互調有哪些方式?註解的方式會有問題,說說怎麼解決的
狸米科技:
1、anctivity啓動流程
2、廣播安全性,本地廣播、設置權限、綁定進程等
3、事件分發流程
4、rxJava 被觀察者如何創建?有幾種創建方式?如何實現線程切換的?轉換用過嗎?
5、設計模式用過哪些?手寫單例模式
6、volatile關鍵字的作用
7、content provide如何使用
8、項目中做過哪些內存優化
總結:
1、java和Android基礎一定要過一遍,推薦大家看這個總結,比較全面;
2、Android中流行的各大框架至少要會用並瞭解原理,然後最好能深入源碼理解,這點很加分;
3、一般大點的公司都會有兩到三輪技術面試,第一輪面基礎,二輪和三輪除了問的更深之外,算法題也是少不了的,建議大家平時抽空刷刷LeetCode或者劍指Offer。