四步準備Android面試

四步準備Android面試

各大公司內推動行的如火如荼,再過一段時間就是校招。git

面試能夠說是學生步入社會的一場考試,只不過是筆試+屢次面試(口頭考試)的結合體,只要時間不衝突,能夠多考幾回,秋招不行還有春招。面試

筆試形式相似在學校的考試。面試相對來講形式新一些,難度更大一些,考察的範圍不只僅是專業知識的掌握,還包括性格、抗壓能力、表達能力、隨機應變能力等等。算法

可是歸根到底,找工做的過程就是解決一個相對複雜問題的過程。能夠按照如下四部進行準備:數據庫

  1. 定義問題
  2. 劃分問題
  3. 逐個突破
  4. 系統化

接下來一步步的看一下具體細節。編程

1. 定義問題

首先,定義一下咱們解決的是什麼問題。在這裏,由於咱們是Android方向,因此能夠簡單定義爲:「咱們要找到一個Android方向的工做(或相關的工做),工做要儘可能好」。設計模式

這個定義很模糊,什麼是儘可能的好呢?有的人看中薪資,有的人看中五險一金,各類福利等等。在這裏,咱們不考慮我的主觀因素佔比較大的問題。咱們只考慮更加可控的東西。就是經過我的努力能夠得到效果的問題。緩存

咱們再思考一下「找到一個Android方向的工做」起決定性的因素是哪個呢? 答案是面試。固然一我的過去作過的項目,拿過的獎也相當重要。可是到了這個立刻就要面試的時間節點,過去的已通過去,沒法改變,能控制的只有如今。沒有項目可有可無,關鍵的是如今如何準備面試。性能優化

目標:我要經過面試,拿到offer(或者我要經過多家公司面試,拿到多家公司的offer,選擇最合心意的公司去工做)。固然,這句話表達的太寬泛,並無什麼指導意義。定義問題很重要,而更重要的是如何劃分問題,這一步纔是具備指導意義,可以落到實踐中去的內容。微信

2. 劃分問題

Android面試須要準備內容的大體劃分:(括號內爲重要程度,最多5顆星)網絡

  • Android相關知識、Java相關知識、設計模式(5)
  • 算法、數據結構(5)
  • 如何寫簡歷、如何面試(4)
  • 項目、比賽獲獎(4)
  • 操做系統、網絡、數據庫(3)
細分

如下細份內容,網絡等計算機基礎方面還不是很全面,持續更新中。 我會逐步更新各個知識點相關博客或資源,若是須要,建議關注。

Android
  • Context的理解
  • Activity生命週期、啓動模式、IntentFilter匹配規則
  • IPC:Serialzable、Parcelable、Binder、Socket
  • View事件體系
  • View繪製流程
  • RemoteViews(不重要)
  • Drawable(不重要)
  • 動畫、繪圖
  • window、wm、wms
  • 四大組件啓動、工做流程(Activity至少看一下,AMS)
  • 消息機制:looper、handler、MQ
  • 線程、線程池、多線程
  • bitmap加載、緩存:LRUCache、DiskLruCache、LinkHashMap
  • CrashHandler(通常)
  • multidex(通常)
  • Fragment、Service、SQLite、Webview
  • Android內存泄漏場景及解決方法
  • ANR的緣由、解決方法
  • 開源庫(通常要求看過源碼,知道原理):Retrofit、RxAndroid、EventBus、Picasso(優勢)、OKhttp3
  • 持續集成Jenkins(不重要)
  • 單元測試、測試用例(通常)
  • 插件化:Atlas、OSGI(通常)
Java
  • Java基礎:好比接口和抽象類的區別等
  • Java內存管理:工做內存和主內存等
  • 垃圾回收:回收算法、如何判斷對象能夠回收、新生代老年代等
  • 併發 鎖:sychronized、lock(CAS);volatile;併發集合:CopyOnWriteArrayList、ConcurrentHashMap、RemoteCallbackList(Android的IPC用到)、LinkedHashMap;
  • 集合 Map、Set、List Queue、Stack HashMap、HashTable、ConcurrentHashMap:實現原理,區別等 LinkedHashMap
設計模式(六大原則:SOLID + 迪米特)
  • 單例模式:獲取各類service
  • 工廠方法:activity、service(onStart)
  • 責任鏈:Android事件分發
  • builder:dialog、Picasso
  • 觀察者:listview更新、EventBus
  • 適配器:listview adapter
算法、數據結構

排序

  • 冒泡排序
  • 選擇排序
  • 歸併
  • 堆排序
  • 插入排序
  • 快速排序
  • 希爾排序
  • 桶排序
  • 基數排序

字符匹配:KMP算法 二分查找 二叉樹遍歷、翻轉、重構;二叉查找樹 紅黑樹 AVL樹、哈夫曼樹、B樹(通常)

網絡

已整理博客,點擊查看網絡相關問題及其解答

基本是圍繞OSI七層模型展開,首先是各層的功能、每層有哪些協議。

深刻主要考察應用層和傳輸層: 應用層:

  • HTTP報文格式、頭部有哪些字段
  • HTTP狀態碼
  • HTTP和HTTPS的區別
  • HTTPS中SSL/TLS加密的握手過程
  • HTTP一次鏈接的具體過程
  • GET、POST的區別
  • DNS解析過程
  • Cookie、Session原理

傳輸層:

  • TCP/IP四層模型(和OSI的層次對應關係)
  • TCP三次握手、四次握手的過程,狀態變化和緣由
  • TCP、UDP區別
  • TCP擁控、流控原理
  • Socket原理
操做系統、數據庫

線程狀態及其切換 線程、進程區別 (數據庫重要程度相對低一些,正在整理中,後續會更新)

簡歷、面試、項目

篇幅較大,會有另外博客進行探討,敬請關注

3. 逐個突破

能夠本身去網上找一些博客、書籍,進行各個知識點的突破,要有耐心,找到一個心儀的工做非一日之功。 一方面,我會陸續更新一些專業知識和麪試相關的博客。 另外一方面,把我本身的一些資源分享給你們。

  • 博客 GitYuan(gityuan.com)、羅昇陽(CSDN)、鄧凡平(CSDN)、任玉剛(CSDN)
  • 書籍 Android 4高級編程、Android開發藝術探索、Android源碼設計模式、Android 50 hacks、Android應用性能優化最佳實踐、Efficient Java、深刻Java虛擬機、Java併發編程、Think in Java
  • 刷題 牛客網、LeetCode
4. 系統化

系統化其實就是當你把一整個相關的知識都看過看懂以後,進行總結和創建各模塊之間關係的過程。

每一個人大腦「操做系統」是由概念和概念之間的聯繫的過程。系統化一方面能夠加深知識的記憶,另外一方面提供了另外一個角度去理解這些概念,加大了概念的深刻程度。

建議多作記錄、總結,多在各模塊、各學科之間創建聯繫,抽取統一適用的知識和智慧。

版權聲明
本文首發自簡書,搜索做者 QinGeneral
同步發於CSDN博客,搜索做者 QinGeneral
同步發於微信公衆號:AndroidRain
無需受權便可轉載,甚至無需保留以上版權聲明;
轉載時請務必註明做者。

掃碼關注微信公衆號
相關文章
相關標籤/搜索