作為一名即將求職的程序員,面對一個可能跟近些年非常不同的 2020 年,你的就業機會和風口會出現在哪裡?在這種新環境下,工作應該選擇大廠還是小公司?已有幾年工作經驗的老兵,又應該如何保持和提升自身競爭力,轉被動為主動?
就目前大環境來看,跳槽成功的難度比往年高很多。一個明顯的感受:今年的面試,無論一面還是二面,都很考驗Android程序員的技術功底。
最近蒐集了一些阿里、騰訊2019年一些精選的技術性面試題,最後還把把技術點梳理成一份大而全的“Android高級工程師”面試xmind(實際上比預期多花了不少精力),包含知識脈絡 + 分支細節,由於篇幅有限,在文末以圖片的形式給大家展示一份大概的。
那麼如何才能通過一線互聯網公司面試?
應該學什麼才能有效地提高自身的競爭力呢?其實,首先我們應該優先深入學習工作中用到的技術,其次,關注這2年來Android最新的面試題所涉及的知識點,根據自身的實際情況有選擇地進行針對性的學習和提升。只有這樣,自身才不會被所謂的 互聯網寒冬 嚇倒。
一、圖片
- 圖片庫對比
- 圖片庫的源碼分析
- 圖片框架緩存實現
- LRUCache原理
- 圖片加載原理
- 自己去實現圖片庫,怎麼做?
- Glide源碼解析
- Glide使用什麼緩存?
- Glide內存緩存如何控制大小?
二、網絡和安全機制
- 網絡框架對比和源碼分析
- 自己去設計網絡請求框架,怎麼做?
- okhttp源碼
- 網絡請求緩存處理,okhttp如何處理網絡緩存的
- 從網絡加載一個10M的圖片,說下注意事項
- TCP的3次握手和四次揮手
- TCP與UDP的區別
- TCP與UDP的應用
- HTTP協議
- HTTP1.0與2.0的區別
- HTTP報文結構
- HTTP與HTTPS的區別以及如何實現安全性
- 如何驗證證書的合法性?
- https中哪裡用了對稱加密,哪裡用了非對稱加密,對加密算法(如RSA)等是否有了解?
- client如何確定自己發送的消息被server收到?
- 談談你對WebSocket的理解
- WebSocket與socket的區別
- 談談你對安卓簽名的理解。
- 請解釋安卓為啥要加簽名機制?
- 視頻加密傳輸
- App 是如何沙箱化,為什麼要這麼做?
- 權限管理系統(底層的權限是如何進行 grant 的)?
三、數據庫
- sqlite升級,增加字段的語句
- 數據庫框架對比和源碼分析
- 數據庫的優化
- 數據庫數據遷移問題
四、算法
- 排序算法有哪些?
- 最快的排序算法是哪個?
- 手寫一個冒泡排序
- 手寫快速排序代碼
- 快速排序的過程、時間複雜度、空間複雜度
- 手寫堆排序
- 堆排序過程、時間複雜度及空間複雜度
- 寫出你所知道的排序算法及時空複雜度,穩定性
- 二叉樹給出根節點和目標節點,找出從根節點到目標節點的路徑
- 給阿里2萬多名員工按年齡排序應該選擇哪個算法?
- GC算法(各種算法的優缺點以及應用場景)
- 蟻群算法與蒙特卡洛算法
- 子串包含問題(KMP 算法)寫代碼實現
- 一個無序,不重複數組,輸出N個元素,使得N個元素的和相加為M,給出時間複雜度、空間複雜度。手寫算法
- 萬億級別的兩個URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)
- 百度POI中如何試下查找最近的商家功能(提示:座標鏡像+R樹)。
- 兩個不重複的數組集合中,求共同的元素。
- 兩個不重複的數組集合中,這兩個集合都是海量數據,內存中放不下,怎麼求共同的元素?
- 一個文件中有100萬個整數,由空格分開,在程序中判斷用戶輸入的整數是否在此文件中。說出最優的方法
- 一張Bitmap所佔內存以及內存佔用的計算
- 2000萬個整數,找出第五十大的數字?
- 燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
- 求1000以內的水仙花數以及40億以內的水仙花數
- 5枚硬幣,2正3反如何劃分為兩堆然後通過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同
- 時針走一圈,時針分針重合幾次
- N*N的方格紙,裡面有多少個正方形
- x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完?
五、插件化、模塊化、組件化、熱修復、增量更新、Gradle
- 對熱修復和插件化的理解
- 插件化原理分析
- 模塊化實現(好處,原因)
- 熱修復,插件化
- 項目組件化的理解
- 描述請點擊 Android Studio 的 build 按鈕後發生了什麼
六、架構設計和設計模式
- 談談你對Android設計模式的理解
- MVC MVP MVVM原理和區別
- 你所知道的設計模式有哪些?
- 項目中常用的設計模式
- 手寫生產者/消費者模式
- 寫出觀察者模式的代碼
- 適配器模式,裝飾者模式,外觀模式的異同?
- 用到的一些開源框架,介紹一個看過源碼的,內部實現過程。
- 談談對RxJava的理解
- RxJava的功能與原理實現
- RxJava的作用,與平時使用的異步操作來比的優缺點
- 說說EventBus作用,實現方式,代替EventBus的方式
- 從0設計一款App整體架構,如何去做?
- 說一款你認為當前比較火的應用並設計(比如:直播APP,P2P金融,小視頻等)
- 談談對java狀態機理解
- Fragment如果在Adapter中使用應該如何解耦?
- Binder機制及底層實現
- 對於應用更新這塊是如何做的?(解答:灰度,強制更新,分區域更新)?
- 實現一個Json解析器(可以通過正則提高速度)
- 統計啟動時長,標準
七、性能優化
- 如何對Android 應用進行性能分析以及優化?
- ddms 和 traceView
- 性能優化如何分析systrace?
- 用IDE如何分析內存洩漏?
- Java多線程引發的性能問題,怎麼解決?
- 啟動頁白屏及黑屏解決?
- 啟動太慢怎麼解決?
- 怎麼保證應用啟動不卡頓?
- App啟動崩潰異常捕捉
- 自定義View注意事項
- 現在下載速度很慢,試從網絡協議的角度分析原因,並優化(提示:網絡的5層都可以涉及)。
- Https請求慢的解決辦法(提示:DNS,攜帶數據,直接訪問IP)
- 如何保持應用的穩定性
- RecyclerView和ListView的性能對比
- ListView的優化
- RecycleView優化
- View渲染
- Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
- java中的四種引用的區別以及使用場景
- 強引用置為null,會不會被回收?
八、NDK、jni、Binder、AIDL、進程通信有關
- 請介紹一下NDK
- 什麼是NDK庫?
- jni用過嗎?
- 如何在jni中註冊native函數,有幾種註冊方式?
- Java如何調用c、c++語言?
- jni如何調用java層代碼?
- 進程間通信的方式?
- Binder機制
- 簡述IPC?
- 什麼是AIDL?
- AIDL解決了什麼問題?
- AIDL如何使用?
- Android 上的 Inter-Process-Communication 跨進程通信時如何工作的?
- 多進程場景遇見過麼?
- Android進程分類?
- 進程和 Application 的生命週期?
- 進程調度
- 談談對進程共享和線程安全的認識
- 談談對多進程開發的理解以及多進程應用場景
- 什麼是協程?
九、framework層、ROM定製、Ubuntu、Linux之類的問題
- java虛擬機的特性
- 談談對jvm的理解
- JVM內存區域,開線程影響哪塊內存
- 對Dalvik、ART虛擬機有什麼瞭解?
- Art和Dalvik對比
- 虛擬機原理,如何自己設計一個虛擬機(內存管理,類加載,雙親委派)
- 談談你對雙親委派模型理解
- JVM內存模型,內存區域
- 類加載機制
- 談談對ClassLoader(類加載器)的理解
- 談談對動態加載(OSGI)的理解
- 內存對象的循環引用及避免
- 內存回收機制、GC回收策略、GC原理時機以及GC對象
- 垃圾回收機制與調用System.gc()區別
- Ubuntu編譯安卓系統
- 系統啟動流程是什麼?(提示:Zygote進程 –> SystemServer進程 –> 各種系統服務 –> 應用進程)
- 大體說清一個應用程序安裝到手機上時發生了什麼
- 簡述Activity啟動全部過程
- App啟動流程,從點擊桌面開始
- 邏輯地址與物理地址,為什麼使用邏輯地址?
- Android為每個應用程序分配的內存大小是多少?
- Android中進程內存的分配,能不能自己分配定額內存?
- 進程保活的方式
- 如何保證一個後臺服務不被殺死?(相同問題:如何保證service在後臺不被kill?)比較省電的方式是什麼?
- App中喚醒其他進程的實現方式
最後
學習技術是一條慢長而艱苦的道路,不能靠一時激情,也不是熬幾天幾夜就能學好的,必須養成平時努力學習的習慣。所以:
貴在堅持!最後在這裡小編分享一份自己收錄整理上述技術體系圖相關的幾十套騰訊、頭條、阿里、美團等公司19年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,這裡以圖片的形式給大家展示一部分。
還有 高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料 幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習。
【Android開發核心知識點筆記】
【Android核心高級技術PDF文檔,BAT大廠面試真題解析】
【Android高級架構視頻學習資源】
Android精講視頻領取學習後更加是如虎添翼!進軍BATJ大廠等(備戰)!現在都說互聯網寒冬,其實無非就是你上錯了車,且穿的少(技能),要是你上對車,自身技術能力夠強,公司換掉的代價大,怎麼可能會被裁掉,都是淘汰末端的業務Curd而已!現如今市場上初級程序員氾濫,這套教程針對Android開發工程師1-6年的人員、正處於瓶頸期,想要年後突破自己漲薪的,進階Android中高級、架構師對你更是如魚得水,趕快領取吧!
【Android進階學習視頻】、【全套Android面試秘籍PDF】、【Android開發核心知識點筆記】可以 私信我【安卓】免費獲取!
閱讀更多 Android高級架構師 的文章