四步準備Android面試
各大公司內推進行的如火如荼,再過一段時間就是校招。
面試可以說是學生步入社會的一場考試,只不過是筆試+多次面試(口頭考試)的結合體,只要時間不衝突,可以多考幾次,秋招不行還有春招。
筆試形式類似在學校的考試。面試相對來說形式新一些,難度更大一些,考察的範圍不僅僅是專業知識的掌握,還包括性格、抗壓能力、表達能力、隨機應變能力等等。
但是歸根到底,找工作的過程就是解決一個相對複雜問題的過程。可以按照以下四部進行準備:
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
無需授權即可轉載,甚至無需保留以上版權宣告;
轉載時請務必註明作者。