前言
前段時間專門挑了一段時間在準備面試,經過兩次面試后,有一些比較深刻的認識,對于大廠來說,除了對專業知識考究之外,對演算法也尤為看重,
簡單的說一下情況,位元組已經拿到offer,騰訊所有的面試已經通過了,也應該有offer了,位元組一共4面:3面技術,1面hr;騰訊5次技術面,1次hr面,其中5面是2個面試官上陣,
總的來說騰訊的面試確實強度更高更加持久,位元組是分開一次1個小時面試的,而騰訊1、2面是一次一小時,而3面和4面是連續面試一口氣高強度的面試2小時,5面則是2個面試官輪流提問,騰訊是持久戰稍微腦子不清醒一點就可能出現大錯漏,我在4面就是如此,差點出事了,請準備好糖分和水分及時補充,或者洗把臉保持清晰,
正文
面試的程序一般只有1個小時,如何在一個小時內徹底的考究你本人的水平究竟到達那種境界,也是面試官努力的方向,
而面試往往是由兩部分構成:
-
1.演算法
-
2.專業知識
關于演算法
為什么把演算法擺在第一點,因為演算法在我看來這是大部分沒有面試過大廠的朋友可能會忽視的一方面,它的重要程度不比專業知識的考究來的低,
在1-2小時內,如何能快速的看到你編碼水平和思維就看這些演算法的考究,
因此需要對常見的資料結構比較熟悉,如鏈表,樹,堆疊,堆,需要知道遇到陣列相關的題型可能需要用到如快慢指標等解題思路,還有廣度深度優先演算法,最后,如果還有更難一點的,會涉及到回溯,動態規劃等解題思路,
前面幾點都比較好處理,只要在leetcode上做到一定量的題目,都能反應過來,經過了系統性的訓練,遇到一些常見的演算法解題思路可以快速的反應過來,
而動態規劃相關的問題,我看來是最難的,關鍵是需要判斷題目是否可以分解成小問題且小問題之間不能互相影響,接著找到動態規劃方程,或者是狀態轉移表,
在聽到面試官的演算法題后,先不要急著下筆,最好在下筆之前和面試官聊聊你的思路,不同面試官的要求不同,有的面試官,希望演算法是原地演算法,有的面試官希望時間復雜度降低,有的希望空間復雜度降低,
最好能清晰的表達你的初步思路后,面試官會知道你的演算法的方向是否正確,可以一定程度上給予你方向上的指引,
記住就算你做過原題,除非你的方案能保證是從空間和時間復雜度是最優,不然我還是建議面試者多和面試官交流,在交流的程序中,面試官也能明白你的思考程序,從而判斷你這個人的編程能力如何,
最后,再給兩點建議:
-
一個人光看不練是不行的,一個人瞎琢磨效率偏低,
-
最好可以買幾本書或者課程指導,我是看了輝哥的課程,閱讀了極客時間的劉超的資料結構,還閱讀了書籍演算法4,把基礎都補充好后,可以去leetcode中對每一個資料結構專項進行訓練,在這些基礎上,在做一做劍指offer中經典題目也就差不多了,
關于專業知識
網上很多人都在求大廠面試的真題,實際上我看來意義并不大,因為面試官并不會面試你寫在簡歷之外的隨意一個問題,一般都是問你簡歷上的作業成果,以及背后延伸出來的知識點,更多的還是需要自己日常的積累,
當然也有一些老生常談的基本考點,如Handler,多執行緒等, 因此,背面試題不是最重要,關鍵是回顧你的簡歷上的作業成果以及簡歷上的知識點,并不斷的深挖,
下面是面試情況,以及一些簡答,實際上在回答的程序中,可以回答的更加詳細,本文只是篩選了部分問題簡單介紹了知識點的要點,

位元組面試
位元組面試一共4面,位元組的面試風格偏向基礎的內容,以及簡歷上知識點的擴展,
位元組1面
-
自我介紹,專案經歷,專案上的優化項以及原因
-
為什么使用mmap優化io讀寫,mmap和傳統讀寫有什么區別?為什么選擇它?
-
Object 中有什么方法?
-
Object 的equal實作?重寫equal需要注意的方面,
-
synchronized 原理,
-
volatile原理
-
ui優化
-
記憶體優化與LeakCanary的原始碼?以及LeakCanary的缺點和如何解決,
-
演算法:陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字(Leetcode原題),
位元組2面
-
自我介紹,專案經歷,專案上的優化項以及優化的原因
-
Rxjava原始碼原理,以及專案中你是如何將Rxjava流進行復用,
-
你專案中高度自定義了DiskLRUCache,問LRUCache的實作?問LinkedHashMap的實作?問DiskLruCache的實作?問Glide中實作的DiskLruCache的運用,
-
Handler的原理
-
volatile原理
-
synchronize 鎖的轉化流程,
-
ReentrantLock 實作,
-
ui 優化,首屏渲染時機優化
-
啟動優化,與AlphaManager的實作,
-
插樁的原理以及運用,
-
ASM
-
Javapoet
-
動態代理
-
LiveData 和 ViewModel的原始碼實作
-
x2c 原始碼實作
-
DNS 原理
-
https的原理
-
演算法:判斷一個字串是否是回文串(注意保證原字串不可改變,可用O(n)的空間復雜度),
方向:堆疊的考究,
位元組3面 Leader面
-
1.作業軟技能的考核,以及團隊中的定位
-
2.如何進行io 優化,指標是什么,優化后的結果以及引數是多少?
方向:可以使用/proc/pid/stat讀取cpu的idle,iowait等,使用mmap優化后的結果,
-
3.演算法:在一個單鏈表中,每k個節點進行反轉,無法被反轉的部分放在末尾,

騰訊面試
騰訊的面試風格,普遍是基于你的簡歷上專案經歷,往細節往深處問,我是面試因演算法失敗了一次,后面第二次就成功了,
總結一下2次騰訊面試
騰訊第一次面試1面
-
自我介紹,專案經歷,專案上的優化項以及原因
-
ARouter 原始碼實作,專案中對ARouter的擴展實作詳細設計
-
ui 優化,啟動優化,首屏展示時機優化
-
volidate 實作
-
Java例外捕獲
-
DNS 原理
-
https的原理
-
jni 中JNIEnv 和執行緒的關系
-
jni中有幾種注冊native方法,
-
Native例外捕獲
騰訊第一次面試2面
-
自我介紹,專案經歷,專案上的優化項以及原因
-
ARouter的實作,以及自定義擴展ARouter的實作
-
專案中的io 優化,以及為什么用mmap于io優化
-
mmap的實作
-
mmkv 中 對應 mmap 斷電時候的處理機制
-
mmap沒呼叫msync時候,落盤時機,
-
演算法:合并三個單鏈表(可參考leetcode 合并多個單鏈表)
因為自己畫蛇添足,把每一個節點拷貝了一次,還沒有往后迭代,實在是錯漏百出就掛了,腦袋還是不夠清醒,結果飲恨而歸,
騰訊第二次面試1面
-
自我介紹,專案經歷,專案上的優化項以及原因
-
ARouter 的實作,以及擴展的實作
-
啟動優化,以及ARouter的啟動優化方式,ARouter的磁區方式
-
Navigation的原始碼決議
-
基于Navigation 撰寫路由框架NavigationRouter 的原始碼實作,以及實作的優點
-
Navigation 實作的路由框架中如何處理Activity和Fragment 嵌套啟動的方式
-
class的加載流程
-
Handler的實作(最好能回答到epoll和eventfd的層面)
-
實作一個多執行緒下的消費者生產者模式
騰訊第二次面試2面
-
自我介紹,專案經歷,專案上的優化項以及原因
-
io 優化 與 使用mmap的優勢和缺點
-
ARouter 的實作,以及擴展的實作
-
多行程實作的路由
-
如何進行多行程的同步呼叫,此時另一個行程還沒有啟動?
-
資料結構中不支持多執行緒的資料結構,如果使用多執行緒操作會造成什么結構
-
ArrayMap 實作
-
HashMap 與 ArrayMap比較,兩者的優缺點
-
handler 的原理
-
handler 是怎么進行postDelay 延時操作,
-
當handler 只有一個延時的message時候,Looper中是如何運行,
-
volidate 原理
-
當沒有添加volidate 修飾屬性的時候,資料什么時候從快取行重繪到主存,
-
演算法題:在一個n*n的方格中,有兩種方格,1代表阻塞不能經過,0代表可達,兩點坐標,a和b,問a到b的最短路徑,
騰訊第二次面試3面和4面
騰訊3面和4面是聯系到一起的,這里一起說了
-
自我介紹,專案經歷,專案上的優化項以及原因
-
mmap 實作原理和io優化
-
View的繪制流程,從 setContentView 決議xml到View的繪制結束,
-
硬體渲染流程
-
SurfaceFlinger 在 View繪制流程中扮演的角色
-
Choregrapher 的作業原理
-
OOM 如何優化,記憶體爆滿是虛擬記憶體容易先爆掉還是物理記憶體容易,一口氣映射4g的記憶體是否會發生例外,
-
Bitmap 如何優化避免OOM,為什么放在native中bitmap不容易OOM
-
一個行程最多可以使用多少fd
-
你研究過RN和Flutter,RN的渲染機制和Flutter的渲染機制是如何運作的?他們之間區別是什么?
-
插件化你是如何實作的,
-
演算法1: 將一個int的數字轉化成漢語說法,如10000轉化為一萬,
-
演算法2:中國下棋的馬,能否吃掉另一個坐標的旗子,請找出坐標
騰訊二次面試5面
本次面試是兩個面試官進行考察,考察的東西偏向網路協議,
-
自我介紹,專案經歷,專案上的優化項以及自己開源在GitHub上專案的特點,
-
當遇到弱網路時候的優化
-
當遇到弱網路時候,網路是如何進行檔案重傳
-
當遇到弱網路時候,手機連接上了4g,但是沒有資料流量時候,如何檢測并恢復,
-
當app在播放音視頻的時候,需要注意的要點,以及相關的實作,
總結
從專業技能考察可以看到,實際上整個面試程序,騰訊面試的會相對仔細一點,技術廣度更加廣一點;而位元組則更加偏向基礎是否扎實,都是從你的簡歷專案,技術點開始詢問,并根據你回答的問題,不斷的調整詢問的方向,不斷的向下挖你的知識點,看能達到什么程度
但是無論如何,你回答的層面最好足夠深,從原始碼層級說起來,有時候面試官的對問題的看法和你的看法有分歧,此時就需要你是否可以從原始碼的層面上對這些問題有自己的解釋,
面試的時候只需要沉著冷靜的思考,從原始碼的角度對面試官拋出來問題進行分析,就能比較輕松的解決,
最后有人好奇我去了哪里,應該是去騰訊,
小編在面試前復習了一波,順帶從網上收集整理了一些 Android 開發相關的學習檔案、面試題、Android 核心筆記等等檔案,希望能幫助到大家學習提升,如有需要參考的可以直接去我 codechina地址:https://codechina.csdn.net/u012165769/Android-T3 訪問查閱,


轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/292219.html
標籤:其他
上一篇:Kotlin - 協程基礎及原理
