個人情況
先說說個人情況吧,座標廣州,15年從一所普通二本大學畢業,畢業後在一家小公司幹android開發,年薪在15w左右。
作爲一名菜雞,確實非常合格,技術沒什麼長進,眼見也沒有提升,沒規劃沒未來,讓人實在焦慮,之所以開始改變自己也是家庭發生了變故,才讓自己開始思考人生。
所以耗費了大量的時間和精力,在工作之餘抽出自己的時間來學習。好在付出終是有回報的,簡歷上不說敢寫精通,熟練是沒多大問題的,最終4面拿下了騰訊offer。
以下主要分享面經和個人學習方法,會包括很多PDF文檔,如面試題庫(含答案+解析)、學習筆記、實戰文檔和腦圖等等,均可以免費分享,騰訊完整面試題答案解析。
感嘆一聲:
耗時兩個月的找工作經歷終於是畫上句號了,幾十個日日夜夜的酸甜苦辣只有裸辭的親嘗者才能體會到吧,下面想來複盤或者說總結一下這段經歷。但不管怎麼總結,核心還是那一句話:一定要充分的準備!!!涉及到的知識點一項都不漏的複習一遍(至於深淺程度主要看自己平時的積累了),一則能很大程度的提高自信(不需要擔心被面試官問倒);二則面對問到的知識點時還可以擴展的說清楚該知識點在安卓或者Java體系中的關係和邏輯。否則後續因爲複習不到位而與自己理想的公司或崗位失之交臂時你會感到些懊惱。
騰訊Android 高頻面試真題
目錄
計算機基礎面試題(⭐⭐ ⭐)
網絡面試題
- HTTP 與 HTTPS 有什麼區別?
- Http1.1 和 Http1.0 及 2.0 的區別?
- Https 請求慢的解決辦法
- Http 的 request 和 response 的協議組成
- 談談對 http 緩存的瞭解
- Http 長連接
- Https 加密原理
- HTTPS 如何防範中間人攻擊?
- 有哪些響應碼,分別都代表什麼意思?
- 爲什麼 tcp 要經過三次握手,四次揮手?
- TCP 可靠傳輸原理實現(滑動窗口)
- Tcp 和 Udp 的區別?
- 如何設計在 UDP 上層保證 UDP 的可靠性傳輸?
- socket 斷線重連怎麼實現,心跳機制又是怎樣實現?
- Cookie 與 Session 的作用和原理
- IP 報文中的內容
- 瀏覽器輸入地址到返回結果發生了什麼?
操作系統面試題(⭐⭐ ⭐)
- 操作系統如何管理內存的?
- 進程調度
- 說下 Linux 進程和線程的區別
- 你能解釋一下 Linux 的軟鏈接和硬鏈接嗎?
- 安卓權限管理,爲何在清單中註冊權限,安卓 APP 就可以使用,反之不可 以?
數據庫面試題 (⭐)
- 數據庫的四大特徵,數據庫的隔離級別?
- 數據庫設計中常講的三範式是指什麼?
數據結構和算法面試題
高頻題集 (⭐⭐⭐)
- 無重複字符的最長子串
- 簡化路徑
- 復原 IP 地址
- 三數之和
- 島嶼的最大面積
- 搜索旋轉排序數組
- 朋友圈
- 接雨水
- 反轉鏈表
- 兩數相加
- 合併兩個有序鏈表
- 合併 K 個排序鏈表
- 買賣股票的最佳時機
- 買賣股票的最佳時機 II
- 最大子序和
- 最小棧
- LRU 緩存機制
- ........
次高頻題集 (⭐⭐)
- 算法熟悉麼?給了一個二叉排序樹,出了一個給定節點找到它的下一個元素(指的是大小順 序的下一個)的算法題。
- x 個蘋果,一天只能喫一個、兩個、或者三個,問多少天可以喫完
- 求二叉樹第 n 層節點數
- 如何設計一個抽獎系統,比如滿 200 抽 20,滿 500 抽 50。
- 求無序數組中的中位數
- 二叉樹深度算法
- 堆和棧在內存中的區別是什麼(數據結構方面以及實際實現方面)
- 最快的排序算法是哪個?給阿里 2 萬多名員工按年齡排序應該選擇哪個算法?
- 堆和樹的區別?
- 求 1000 以內的水仙花數以及 40 億以內的水仙花數;
- 子串包含問題(KMP 算法)寫代碼實現;
- 萬億級別的兩個 URL 文件 A 和 B,如何求出 A 和 B 的差集 C,(Bit 映射->hash 分組->多文件 讀寫效率->磁盤尋址以及應用層面對尋址的優化)
- 蟻羣算法與蒙特卡洛算法;
- 百度 POI 中如何試下查找最近的商家功能(座標鏡像+R 樹)
- ......
Java 面試題
Java 基礎面試題
- 談談對 java 多態的理解?
- 你所知道的設計模式有哪些?
- 通過靜態內部類實現單例模式有哪些優點?
- 靜態代理和動態代理的區別,什麼場景使用?
- 簡單工廠、工廠方法、抽象工廠、Builder 模式的區別?
- 裝飾模式和代理模式有哪些區別 ?與橋接模式相比呢?
- 外觀模式和中介模式的區別?
- 策略模式和狀態模式的區別?
- 適配器模式,裝飾者模式,外觀模式的異同?
- 代碼的壞味道
- 是否能從 Android 中舉幾個例子說說用到了什麼設計模式 ?
- 集合框架,list,map,set 都有哪些具體的實現類,區別都是什麼?
- set 集合從原理上如何保證不重複?
- HashMap 和 HashTable 的主要區別是什麼?,兩者底層實現的數據結構是什麼?
- HashMap、ConcurrentHashMap、hash()相關原理解析?
- .......
Java 併發面試題
- 什麼是線程池,如何使用?爲什麼要使用線程池?
- Java 中的線程池共有幾種?
- 線程池原理?
- 線程池都有哪幾種工作隊列?
- 怎麼理解無界隊列和有界隊列?
- 多線程中的安全隊列一般通過什麼實現?
- synchronized 的原理?
- Synchronized 優化後的鎖機制簡單介紹一下,包括自旋鎖、偏向鎖、輕量級鎖、重量級鎖?
- 談談對 Synchronized 關鍵字涉及到的類鎖,方法鎖,重入鎖的理解?
- wait、sleep 的區別和 notify 運行過程
- synchronized 關鍵字和 Lock 的區別你知道嗎?爲什麼 Lock 的性能好一些?
- volatile 原理
- synchronized 和 volatile 關鍵字的作用和區別
- .......
Java 虛擬機面試題
- JVM 內存區域
- JVM 的內存模型的理解?
- 描述一下 GC 的原理和回收策略?
- 類的加載器,雙親機制,Android 的類加載器
- JVM 跟 Art、Dalvik 對比?
- GC 收集器簡介?以及它的內存劃分怎麼樣的?
- Java 的虛擬機 JVM 的兩個內存:棧內存和堆內存的區別是什麼?
- JVM 調優的常見命令行工具有哪些?JVM 常見的調優參數有哪些?
- jstack,jmap,jutil 分別的意義?如何線上排查 JVM 的相關問題?
- JVM 方法區存儲內容 是否會動態擴展 是否會出現內存溢出 出現的原因有 哪些?
- 如何解決同時存在的對象創建和對象回收問題?
- JVM 中最大堆大小有沒有限制?
- .......
Android 面試題
Android 基礎面試題 (⭐⭐ ⭐)
- 什麼是 ANR 如何避免它?
- Activity 和 Fragment 生命週期有哪些?
- 橫豎屏切換時候 Activity 的生命週期
- AsyncTask 的缺陷和問題,說說他的原理
- onSaveInstanceState() 與 onRestoreIntanceState()
- android 中進程的優先級?
- Bunder 傳遞對象爲什麼需要序列化?Serialzable 和 Parcelable 的區別?
- 動畫
- Context 相關
- Android 各版本新特性
- Json
- android 中有哪幾種解析 xml 的類,官方推薦哪種?以及它們的原理和區別?
- Jar 和 Aar 的區別
- Android 爲每個應用程序分配的內存大小是多少
- 更新 UI 方式
- .......
Android 高級面試題 (⭐⭐ ⭐)
- 你們做了哪些穩定性方面的優化?
- 性能穩定性是怎麼做的?
- 業務穩定性如何保障?
- 如果發生了異常情況,怎麼快速止損?
- 如果提高啓動速度,設計一個延遲加載框架或者 sdk 的方法和注意的問題
- 你們內存優化項目的過程是怎麼做的?
- 你做了內存優化最大的感受是什麼?
- 如何檢測所有不合理的地方?
- App 繪製優化
- 卡頓的一整套解決方案是怎麼做的?
- TextView setText 耗時的原因,對 TextView 繪製層源碼的理解?
- View 的事件分發機制?滑動衝突怎麼解決?
- 如何解決 View 的事件衝突?舉個開發中遇到的例子?
- View 的繪製流程?
- 跨進程通信
- Android 系統啓動流程是什麼?
- 啓動一個程序,可以主界面點擊圖標進入,也可以從一個程序中跳轉過去,二者有什麼區別?
- AMS 家族重要術語解釋
- App 啓動流程(Activity 的冷啓動流程)
- ActivityThread 工作原理
- 說下四大組件的啓動過程,四大組件的啓動與銷燬的方式
- AMS 是如何管理 Activity 的?
- 理解 Window 和 WindowManager
- 安卓採用自動垃圾回收機制,請說下安卓內存管理的原理?
- JNI
- Android 中 App 是如何沙箱化的,爲何要這麼做?
- 請介紹一下 NDK?
- 你項目中用到哪些開源庫?說說其實現原理?
- .......
其他擴展面試題
Kotlin (⭐⭐)
- Kotlin 特性,和 Java 相比有什麼不同的地方?
- Kotlin 爲什麼能和 Java 混編?
- 什麼是協程?
大前端 (⭐⭐)
- Hybrid 通信原理是什麼,有做研究嗎?
- JS 的交互理解嗎?平時工作用的多嗎,項目中是怎麼與 Web 交互的?
- react native 有多少了解?講一下原理
- weex 瞭解嗎?如何自己實現類似技術?
- Dart 語言有研究過嗎?
- 快應用瞭解嗎?跟其她方式相比有什麼優缺點?
- 說說你用過的混合開發技術有哪些?各有什麼優缺點?
腳本語言 (⭐⭐)
- 腳本語言會嗎?
- Python 會嗎?
- Gradle 瞭解多少?groovy 語法會嗎?
非技術面試題
- 你還要什麼瞭解和要問的嗎?
- 你覺得安卓開發最關鍵的技術在哪裏?
- 研究比較深入的領域有哪些?
- 自己最擅長的技術點,最感興趣的技術領域和技術?
- 項目中用了哪些開源庫,如何避免因爲引入開源庫而導致的安全性和穩定性問題?
- 說下你都看過那些技術書籍,你是如何自學的。你覺得自己的優勢與弱點是什麼?
- 說下項目中遇到的棘手問題,包括技術,交際和溝通
- 說下你近幾年的規劃?
- 對加班怎麼看?
- 介紹你做過的哪些項目
- 爲什麼要離職?
- 當你的開發任務很緊張,你怎麼去做代碼優化的?
- .......
總結
其實客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。
今天分享的面試題就到這裏,還是那句話,有些東西你不僅要懂,而且要能夠很好地表達出來,能夠讓面試官認可你的理解,例如Handler機制,這個是面試必問之題。有些晦澀的點,或許它只活在面試當中,實際工作當中你壓根不會用到它,但是你要知道它是什麼東西。
上面只列舉出了面試題,答案解析內容過長,所以我把答案解析都整理成了一個完整的PDF,需要答案解析的朋友點這裏,以及還有我搜集整理的24套騰訊、字節跳動、阿里、百度2019-2020面試真題解析,我把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包知識脈絡 + 諸多細節。
那麼該如何複習?
我爲大家準備了以下一體系的複習資料:
《Android開發七大模塊核心知識筆記》
《960全網最全Android開發筆記》
《379頁Android開發面試寶典》
歷時半年,我們整理了這份市面上最全面的安卓面試題解析大全
包含了騰訊、百度、小米、阿里、樂視、美團、58、獵豹、360、新浪、搜狐等一線互聯網公司面試被問到的題目。熟悉本文中列出的知識點會大大增加通過前兩輪技術面試的機率。
如何使用它?
1.可以通過目錄索引直接翻看需要的知識點,查漏補缺。
2.五角星數表示面試問到的頻率,代表重要推薦指數
《507頁Android開發相關源碼解析》
只要是程序員,不管是Java還是Android,如果不去閱讀源碼,只看API文檔,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。
真正最能鍛鍊能力的便是直接去閱讀源碼,不僅限於閱讀各大系統源碼,還包括各種優秀的開源庫。
資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖,以上資源均免費分享,以上內容均放在了開源項目:【github】 中已收錄,大家可以自行獲取(或者關注主頁掃描加微信獲取)。