裸辭兩個月,4面終入職騰訊,半年後我終於把騰訊 Android 高頻面試真題及解析整出來了

南方吳彥祖_藍斯發表於2020-09-23

個人情況

先說說個人情況吧,座標廣州,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,需要答案解析的朋友 點這裡

最後我在這裡分享一下這段時間從朋友,大佬那裡收集到的一些 2019-2020BAT 面試真題解析,裡面內容很多也很系統,包含了很多內容: Android 基礎、Java 基礎、Android 原始碼相關分析、常見的一些原理性問題等等,可以很好地 幫助我們深刻理解Android相關知識點的原理以及面試相關知識

這份資料把大廠面試中 常被問到的技術點整理成了 PDF ,包知識脈絡 + 諸多細節;還有 高階架構技術進階腦圖 幫助大家學習提升進階,也節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習。

以上內容均放在了開源專案: github  中已收錄,裡面包含不同方向的自學Android路線、面試題集合/面經、及系列技術文章等,資源持續更新中...

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2723646/,如需轉載,請註明出處,否則將追究法律責任。

相關文章