對於面試的準備,算法建議對着牛客網刷下《劍指Offer》和《算法》,然後之前項目中用到的第三方框架,瞭解其核心實現流程和框架特色與一些實現比較巧妙的細節。對於Java基礎,推薦《深入理解Java虛擬機》《Effective Java》《Java併發編程之美》,Android推薦閱讀《Android開發藝術探索》和《Android 源碼設計模式解析與實戰》,Android這兩本都是點到爲止,沒有特別的深入,可以作爲一個目錄綱領,引子,藉此做更深入的學習。除此之外對於之前所做過的項目,寫在簡歷上的項目都要做深度的挖掘和探索,發掘抽離其中的知識點和亮點。
Android篇
- Handler實現機制,同步屏障,IdleHandler
- Looper可以在子線程創建嗎
- Handler如何實現對於消息的定時發送
- HandlerThread的實現原理
- 事件傳遞機制,結合滑動衝突具體場景解決問題
- View繪製流程,從Vsync信號到ViewRootImpl到最終View的draw
- Apk打包流程(點擊 Android Studio 的 build 按鈕後發生了什麼
) - Apk安裝過程
- 內存泄漏,Handler如何導致Activity內存泄漏,如何做檢測,引用的鏈路到GCRoot
- Fragment生命週期
- Activity各類啓動模式下的切換狀態後顯示狀態
- 屏幕反轉Activity的生命週期變化
- Dialog彈起背後的Activity生命週期發生何種變化?
- 一個應用啓動過程,如何與AMS,PMS交互
- EventBus的實現原理,粘性事件是如何實現的?爲什麼要用EventBus,其優勢在哪裏?
- Retrofit的實現原理結合動態代理來問
- Picasso與Glide的區別(緩存的差異性)
- Volley與Okhttp的差異性,Okhttp的實現與其優勢
- 多進程的數據庫與文件操作該如何實現?
- Android簽名,V1,V2
- Glide中生命週期如何實現的
- Glide如何加載一個Gif圖
- 對於Android中內存使用中注意的點(圍繞內存泄露與內存優化講)
- MVP,MVVM,MVC的差異性已經適用場景
- Android APK爲什麼不可以在IOS上運行,如何設計可以讓其運行?
- Android系統設計爲什麼要用虛擬機不直接執行機器碼?
- 通過虛擬機運行和直接執行機器碼的差異性其各自的優勢在哪裏?
- Dalvik和ART的區別
- Native生命週期如何通知到Web?
- 瞭解Android中的ANR嗎?
- 瞭解Android中的OOM嗎?
- RecyclerView中的緩存實現原理
- RecyclerView中ItemDecoration的實現原理
- Activity,Window,WindowManager,ViewRootImpl如何看這幾個的關係
- 廣播動態註冊和靜態註冊的差異是什麼?
- Android中進程通信的方式,Binder的優勢是什麼?
- SparyArray和ArrayMap的實現原理?
- 使用過Koltin嗎?
- 使用過RxJava和Retrofit嗎?
- Web與Native的通訊方式
- SurfaceView和TextureView的區別
- Surface爲什麼要用雙緩衝機制?
- Bitmap大圖加載的優化策略?
- SharePreference的commit和apply的區別
Java相關
- HashMap和HashTable,ConcurrentHashMap的差別
- ConcurrentHashMap的1.7和1.8版本差異
- LinkedHashMap實現原理
- ArrayDeque實現原理
- Java Object中有哪些方法?equals和hashCode方法什麼時候會被重寫?
- Java中悲觀鎖與樂觀鎖,舉例並說明其相關實現?
- CAS實現原理
- synchronized和ReentrantLock的實現差異
- synchronized對不同方法的修飾,持有的鎖對象的差異
- ThreadLocal實現原理
- volatile用法
- 說一下對於泛型的理解
- 泛型擦除
- 什麼情況下不會出現泛型擦除
- 說一下對於線程安全的理解,Java中線程安全與不安全的集合類有那些?
- Java的垃圾回收機制
- JVM中內存分配機制
- Java類加載機制
- 平時項目中對於鎖的應用
- Java線程池默認提供了哪些類型?分別適合什麼場景?
- Java線程中interrupt()、interrupted()和isInterrupted()分別代表什麼意思?
- 動態代理與靜態代理
算法與數據結構篇
對於客戶端來說,各大廠基本不會有難度太大的題,難度基本在《劍指Offer》和LeetCode中等難度水平,基本還是都可以做到手寫bug free的,對於實現複雜的,面試官也會給予提示或者只是讓你講一些思路就好了,除了百度之外,其它都是需要手寫的。因爲百度無需手寫,考察思路,所以難度上會偏難一些。
- 二維座標系中有一些點,找出一點直線覆蓋儘可能多的點
- 鏈表表示一個數字,求兩個數字相加之和,返回一個鏈表
- 鏈表反轉
- 二叉樹的最低深度路徑打印
- 無序數組中查找兩個和爲某一個值的數字,返回索引值
- 二叉樹的後續遍歷,非遞歸實現
- 字符串中最長不重複子串
- 揹包問題(最大容量與最大價值)
- 動態規劃與遞歸的差異性,什麼問題可以用動態規劃,什麼問題不可以
- 排序算法類型與複雜度,有沒有更優的優化空間
- 排序算法複雜度中nlgn中的lgn是怎麼來的
- 堆排序相關,堆排序中的堆與堆棧中堆的差異性
- 兩個字符串,求其最長子串?例如abc1234,123bc(暴力方法的複雜度,動態規劃的複雜度)
- 什麼是完全二叉樹?
對於算法問題,需要找到最優解,手寫達到Bug free的水平,同時對於各種解決方式都能夠給出時間複雜度,同時給出時間複雜度的計算過程。
計算機基礎
- TCP三次握手,四次揮手
- DNS解析過程
- Http和Https的區別
- Https的建立連接過程
- 什麼是死鎖?如何產生?如何消除?
- TCP擁塞控制與流量控制實現?
- 弱網下網絡請求的處理策略,結合直播場景
- 瞭解那些設計模式?
- 工廠設計模式的優點在於什麼?
- 外觀設計模式和策略模式的是如何在項目中應用的?
- 有使用過那些加密算法?
- 怎麼理解原子性和可見性?
- 如何保證原子性?
- Https中數據傳輸是對稱加密還是非對稱加密?
- 補碼錶示方式,int最大值加2後等於多少
其它手寫設計
- LruCache實現
- 生產者,消費者模型
- 微信錄音模塊設計
- 設計一個日誌系統
- 設計一個圖片加載框架,你會如何實現?
- 手寫一個單例實現
- 設計一個小程序容器,有哪些點需要注意的?
- 如何設計Web與Native通信的鑑權
HR面與Leader面
- HR面
對於HR面基本主要是聊一些過往經歷,看一下求職意願,我覺業務部門決定要人了,HR掛人的概率應該是很小的,然後是聊一下薪資期待,說白了就是圍繞其自己的KPI來跟你周旋,價格壓低同時保證你有足夠的入職意願。吐槽一下,某公司的HR素質是真的爆炸,問我創業虧了多少錢?女朋友在北京嗎?(特碼的是準備要包養我?)
- Leader面
你期望的工作內容是什麼?你覺得你可以給公司帶來什麼?當然這個不同公司的面試風格差異性還是挺大的,上述面試的公司感覺素質都還是挺高的,給予面試者充分的尊重。這個環節除非是覺得你的工作內容和薪水期望跟他們可以提供的差距較大,一般都是可以通過的。
面試知識點總結
通過上述問題可以看出,對於面試過程除了原有項目的考察,對於知識點的考察上,主要是Android基礎知識,Java基礎知識,計算機網絡,系統設計,算法,結合上述面試題目和自己準備過程中的一些學習記錄,下面通過一個腦圖的方式進行一個梳理。
以下是自己結合自己的面試整理出來的,當然並沒有完全覆蓋到所有的Android知識點,大家可以結合自己的日常項目和一些書籍自己在整理彙總。
免費分享2020年Android開發最全新面試題(含答案解析)
Android知識
對於Android這塊,從打包到安裝,再到一個App的啓動,到一個頁面顯示出來內容,再到我們的手指去觸摸屏幕對屏幕帶來了改變,對這個流程可以跟進相應的源碼,順着這個流程來自己捋一遍,即使不是爲了準備面試,作爲Android知識的儲備對開發工作也是有很好的提速作用的。當把上述流程梳理完成,再考慮對於其中每一個環節的各個擊破,對流程的把控對於我們對應用進行系統性的優化也是非常有價值的。
Java知識
image
Java這塊除了對一些基礎知識的考察之外,主要是對於Java虛擬機,和多線程場景下對於鎖的控制,還有對於其中集合類的一些相關實現和優化的點。流程上是對於一個.java文件如何被編譯成.class文件,然後JVM如何去加載這個二進制流並進行執行,內存如何做分配,分配之後,如何爲對象分配空間,執行字節碼。
算法與數據結構篇
算法這一塊建議把《算法》查找與排序讀以下,同時跟着《算法導論》學習一下時間,空間複雜度的計算,常見的題目類型爲圖上這些,在我之前的博客中有寫動態規劃一期,包教包會。
系統設計題目
image
對於系統設計這塊,因爲之前做過小程序容器和雲遊戲,所以會被問到,其它應該不會被抓住問的,其它的部分應該是在三輪面試中比較高頻會被問到的。
計算機網絡
計算機網絡中常問的方式是從瀏覽器中輸入百度到頁面返回的流程,順着這個流程拓展出來DNS解析,TCP連接,Http,Https。
總結
今天關於面試的分享就到這裏,還是那句話,有些東西你不僅要懂,而且要能夠很好地表達出來,能夠讓面試官認可你的理解,例如Handler機制,這個是面試必問之題。有些晦澀的點,或許它只活在面試當中,實際工作當中你壓根不會用到它,但是你要知道它是什麼東西。
最後在這裏小編分享一份自己收錄整理上述技術體系圖相關的幾十套騰訊、頭條、阿里、美團等公司19年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,這裏以圖片的形式給大家展示一部分。
還有 高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料,幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習。需要這些資料的話也可以私信我【666】免費獲取資料。
免費分享2020年Android開發最全新面試題(含答案解析)
【Android核心高級技術PDF文檔,BAT大廠面試真題解析】
【算法合集】
【延伸Android必備知識點】
【Android部分高級架構視頻學習資源】
Android精講視頻領取學習後更加是如虎添翼!進軍BATJ大廠等(備戰)!現在都說互聯網寒冬,其實無非就是你上錯了車,且穿的少(技能),要是你上對車,自身技術能力夠強,公司換掉的代價大,怎麼可能會被裁掉,都是淘汰末端的業務Curd而已!現如今市場上初級程序員氾濫,這套教程針對Android開發工程師1-6年的人員、正處於瓶頸期,想要年後突破自己漲薪的,進階Android中高級、架構師對你更是如魚得水,趕快領取吧,扣扣掃碼進入粉絲裙就可以立即領取了!