各大公司內推動行的如火如荼,再過一段時間就是校招。git
面試能夠說是學生步入社會的一場考試,只不過是筆試+屢次面試(口頭考試)的結合體,只要時間不衝突,能夠多考幾回,秋招不行還有春招。面試
筆試形式相似在學校的考試。面試相對來講形式新一些,難度更大一些,考察的範圍不只僅是專業知識的掌握,還包括性格、抗壓能力、表達能力、隨機應變能力等等。算法
可是歸根到底,找工做的過程就是解決一個相對複雜問題的過程。能夠按照如下四部進行準備:數據庫
- 定義問題
- 劃分問題
- 逐個突破
- 系統化
接下來一步步的看一下具體細節。編程
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
無需受權便可轉載,甚至無需保留以上版權聲明;
轉載時請務必註明做者。