前言
2020年是轉折的一年,上半年疫情原因,很多學android開發的小伙伴失業了,雖找到了一份工作,但高不成低不就,下半年金九銀十有想法更換一份工作,很多需要大廠面試經驗和大廠面試真題的小伙伴,想提前准備刷下題。接下來分享一份我的字節跳動、阿里巴巴、百度、小米等大廠面試經驗和總結。(文末附真題解析大全)
- 阿里(被拒)
- 字節跳動(offer)
- 小米(offer)
- 手百 (offer)
阿里巴巴
一面
1:插件化。啟動activity的hook方式。taskAffity。
2:okhttp支持HTTP2?http2的功能有哪些?tcp方面擁塞控制?tsl的握手和具體的非對稱加密算法。非對稱名稱
3:handler的post(Runnable)如何實現的。callback,runnable,msg的執行優先級。阻塞是怎么實現的?為什么不會阻塞主線程?
5:求二叉樹中兩個節點之間的最大距離。
6:206含義,未修改資源是哪個,302含義,301含義
7:多進程通信問題。binder優勢。aidl生成的java類細節。多進程遇到哪些問題?
8:動態代理傳入的參數都有哪些?非接口的類能實現動態代理嗎?ASM的原理
9:Application和Activity在Context的繼承樹上有何區別?二者使用上有何不同?
10:任意一顆二叉樹,求最大節點距離
二面
1:設計一個日志系統。
2:內存泄露的分類。怎么查看內存泄露的問題
3:touch事件源碼問題。
4:組件化的問題。module和app之間的區別。moduler通信是如何實現的。
5:native奔潰的日志采集,怎么處理?
6:注解實現一個提示功能:如果int的值大於了3需要提示。
三面
1:介紹下flutter的啟動流程
2:介紹下flutter與weex的區別
3:組件化介紹一下
4:webview中與js通信的手段有哪些?
5:介紹下flutter_boost的原理
小米
一面、二面
1.介紹一下binder和原理
2.measure layout draw流程,滑動沖突
3.常用的多線程工具類。blockingqueue ,concurrenthashmap,信號量,countdownlatch,cyclicbarrier,exchanger等,stringbuffer
4.stringbuilder 和stringbuffer區別
5.lock和syncrognized原理區別,適合什么場景。
6.實現生產者,消費者
7.handler原理,是如何實現延時的。
8.一個activity啟動另外一個activity的生命周期。
算法題:
1反轉鏈表
2.歸並排序
3.快速排序
4.feiboqiena數列
5.二分查找
6.兩個隊列實現棧
7. 兩個棧實現隊列
8.判斷鏈表是否成環,找到成環的交點。
字節跳動面試
一面
1:插件化。啟動activity的hook方式。taskAffity。
2:okhttp支持HTTP2?http2的功能有哪些?tcp方面擁塞控制?tsl的握手和具體的非對稱加密算法。非對稱名稱
3:handler的post(Runnable)如何實現的。callback,runnable,msg的執行優先級。阻塞是怎么實現的?為什么不會阻塞主線程?
5:求二叉樹中兩個節點之間的最大距離。
6:206含義,未修改資源是哪個,302含義,301含義
7:多進程通信問題。binder優勢。aidl生成的java類細節。多進程遇到哪些問題?
8:動態代理傳入的參數都有哪些?非接口的類能實現動態代理嗎?ASM的原理
9:Application和Activity在Context的繼承樹上有何區別?二者使用上有何不同?
10:任意一顆二叉樹,求最大節點距離
二面
1:設計一個日志系統。
2:內存泄露的分類。怎么查看內存泄露的問題
3:touch事件源碼問題。
4:組件化的問題。module和app之間的區別。moduler通信是如何實現的。
5:native奔潰的日志采集,怎么處理?
6:注解實現一個提示功能:如果int的值大於了3需要提示。
三面
1:介紹下flutter的啟動流程
2:介紹下flutter與weex的區別
3:組件化介紹一下
4:webview中與js通信的手段有哪些?
5:介紹下flutter_boost的原理
四面
1:適配器和裝飾模式各自特點和使用場景
2:視頻編解碼是怎么做的
3:三色球排序
一面
為什么工作一年就想換工作?
onTouchEvent/onTouchListenr.onTcouchEvent/onClickListenr
hashmap的原理?
java的hashcode和equals的區別
java的gc了解多少?
kt的伴生對象是餓漢模式還是懶漢模式?
handler.postDelayed的原理
ANR怎么產生?怎么捕捉?
智力題:桌子上有101塊餅***拿先手,他拿后手,你需要怎么贏
tcp 三次握手/四次揮手, 為什么要三次握手,四次揮手?
內存泄漏是什么?怎么找?
算法題:斐波拉契數列,遞歸的方式怎么優化?
二面
手淘這種大型app是怎么迭代起來的?
你對小程序的原理了解么?
v8binding怎么做?
你項目的價值是什么?
圖片緩存怎么做?你要設計一個圖片緩存框架怎么搞?
lrucache怎么實現?為什么是o(1)的時間復雜度?
voliate 關鍵字解釋下?
voliate 關鍵字不能實現什么?
https解釋下
常見的對稱加密算法和非對稱加密算法有哪些?
讓你設計一個打點系統怎么做?
如果進程被殺死或者切換后台,數據如何保存丟失?
你怎么設計埋點系統一個線程模型?
快速排序?快速排序是穩定的么?
如何實現一個快速排序的穩定性?
minstack怎么設計?
kotlin和java混用有哪些問題?
設計一個數據結構,微博里面有人發了文章怎么實現?關注怎么實現?
微博里面有人發了文章,關注的人如何獲取最新的10條?如何獲取關注的人的文章的最新1000條?設計一個高效的算法
三面
你為什么選擇換工作?
你組里面的人都怎么樣?
你怎么解決項目中的難點?
你有工作中遇到過哪些比較麻煩的地方?
你平時怎么學習的啊?
你除去學習之外都看什么書?
最后附上我搜集整理的各大廠面試真題解析,詳細整理復制石墨文檔可以見:https://shimo.im/docs/QdyGqGHXX8PyQ8pw
面試心得
1.准備要充分,知識面要盡量的廣,同時深度也要夠。
2.面試安排上,如果不着急,盡量給自己留多時間,兩天一家,及時做總結和補充。
3.心態要放平,當做一次技術交流,面試要看一部分的運氣,也要看一些眼緣,有的面試官一張嘴你就能感覺到你這次面試完了。想去的公司沒有面試好,不要氣餒,繼續加油准備。
4.簡歷投遞方面,拉勾上投了很多經常不匹配,可能是我學歷問題(自考本),有一些打擊自信心,如果有同樣感受的,不妨換BOSS或者其他平台。避免打擊自信心。
5.寫簡歷一定要體現自己的優勢,最好能體現類似於,用到了什么技術,解決了什么問題。簡歷上寫到的一定要胸有成竹。
6.類似於你的優勢是什么,你覺得你項目中做的比較好的地方有哪些,你能給公司帶來什么,這種問題心里要先想一些,免得臨場發揮容易緊張說不好。
7.我所經歷的面試,一般技術面最少是兩輪。如果一輪后讓你走了,而你還自我感覺良好,那我覺得你有必要回顧一下面試內容,並一條一條找找該問題的相關內容,大部分問題就在於你沒有答到點子上,可能是深度不夠,也可能是擴展不夠。繼續加油。
閑聊
現在大廠面試問的的確比較多,要求也挺高的,行情不好,薪資也不好要,所以心態一定要放好,找好自己的定位,心態一定要好。
面試之后要盡量做到總結,從我最開始沒什么准備就出去大廠面試,被打擊一通之后,總結了七八家面試題,會發新面試問到的都是那些知識點,可能角度不一樣,但是你只要深度夠,他怎么問,你基於原理來回答,基本上都沒差,從簽了賠償協議以后出來面試,連續四家公司都走到了HR面,可以說面試的感覺上來了。前面的總結積累終究沒有白費。
在寫這篇文章之前,我專門看了下我之前收藏的別的公號上發的面試題,很全,我都有點不想寫這篇文章了。但是想了下我這幾個月聽到要裁員開始面試,到第一批沒被裁,第二批裁員遲遲不來。到第二批來的時候主動申請被裁。中間面試被打擊,失落,看到新聞那那都在裁員,到現在面試整體感覺還不錯。還是想分享一下自己的心里路程,想告訴大家,裁員別慌,做自己該做的,其他自己決定不了的,先放一放,心里列一個123,一條一條來。
可以看到我在上面推薦了很多書籍,而且JAVA部分時分塊來了。是因為當我看到很多面試題,針對題來的時候,題會很多,而且有時候你會覺得你的題都會了,但是面試的時候還是面不好,說明你的知識並不扎實。或者你知識會了這個題,並沒有融會貫通,所以在JAVA部分我分大塊來描述,而且針對每一塊,我都有推薦一本相關的書,你可能不需要都看,可以針對性的看。而Android部分時詳細的知識點,這些知識點我希望的是,能夠深入研究。而推薦的書籍,書中的部分都有一些相關的知識點,大家也可以選擇性的看,當然論壇,博客都是知識的來源,大家做好知識點深度和廣度的基類就行了。
最后,雖然裁員的很多,都在說Android要沒落,但是,不要慌,做自己的計划,學自己的習,競爭無處不在,每個行業都是如此。