一,語言
此塊內容是工作中必須使用到的技術,一方面需要在工作中總結,另一方面更需要自己下班後找時間自學,推薦看書看博客和動手,這方面的知識不算龐雜,也比較容易描述,最好自己總結到博客中
- Java
- class, method, interface, enum, annotation的基本與使用
- class的繼承與方法覆寫,靜態內部類,非靜態內部類,匿名內部類
- 引用的概念,值傳遞,引用傳遞
- 引用類型:強引用/弱引用/虛引用/軟引用,各自的使用場景
- 原始數據類型,自動裝箱機制
- public/protected/private package的概念
- static的使用 static field的特點,初始化
- final的使用
- 異常,受檢異常,非受檢異常,異常輸出棧的分析
- 內存
- 堆 vs 棧 GC,與C的內存管理做比較
- gc的原理
- Java泛型,泛型的實現
- 常見容器類的適用場景和實現原理: ArrayList, LinkedList, HashMap, HashSet
- 常見設計模式的實現和適用場景:
- singleton, 各種各樣的實現方式,需要理解volatile的概念
- factory method, 與構造器之間的區別
- builder, 解決什麼問題
- observer
- 線程 Thread的基本使用 線程安全,線程同步,鎖的概念,synchronized的使用 volatile的概念 Executors庫的基本使用
- 反射,作用,幾個常用的API
- classloader的概念和作用
- C/C++
- 面向對象 vs 面向過程
- 內存相關:堆 vs 棧 引用,值,指針,sizeof的計算
- C++ class相關
二,Android
此塊內容與Java相同,該部分內容非常多,需要動手寫demo,關鍵問題需要反覆實踐,最好針對重要問題理透之後,通過博客做記錄,也方便麪試之前回顧
基礎方面,先跟着google的教程快速的走一編,動手搭建起項目,然後按照制定的計劃,較爲詳細的研究每個課題,然後在博客中給出自己的總結
基礎
- 組件
- Activity
- 用途,使用方法
- 生命週期
- launch_mode
- Service
- startService/bindService
- 基本生命週期
- IntentService
- BroadcastReceiver
- 兩種使用方式,靜態 vs 動態
- 基本生命週期
- ContentProvider 使用方式
- Activity
- Handler/Looper/MessageQueue,理解這套框架的工作機制
- 線程的劃分,主線程/UI線程,AsyncTask
- View
- 基礎View的使用,TextView, Button, ImageView, LinearLayout, RelativeLayout, FrameLayout
- 理解View的加載流程,attr, style的概念(進階)
- 整個展示流程,measure, layout, draw(進階)
- touch event的分發流程(進階)
- Context/ContextImpl/Application
- 系統中有哪些類型的Context, activity, service, application
- 每種context都有什麼特點
- Fragment
- 使用方式,code/xml
- 與Activity的關係
- vs Custom View(進階)
- Preference體系
- 編譯的過程,代碼,資源,proguard
進階
- Binder IPC
- 基本調用模型和概念
- aidl, binder proxy, binder native, Parcel, FLAG_ONEWAY等重要概念
- binder thread的概念
- ServiceManager的角色
- ANR
- 基本概念,系統檢測ANR的原理
- 分析套路
- trace的概念
- 內存優化
- 各種內存概念的定義
- 內存泄漏
- JVM GC的原理
- gc root的概念和類型
- Android中內存泄漏的原理和常見類型
- LeakCanary的原理和MAT的使用
- 重要進程,瞭解每個進程的作用和生命週期
- init進程
- zygote進程
- system_server進程
- {app}進程
- 重要的系統服務
- AMS,該服務承擔的職責,activity stack, task的概念
- WMS,該服務承擔的職責,ViewRootImpl的作用,與WMS的交互
- PMS,該服務承擔的職責
三,工具
此塊屬於工作必備,需要自己會配置,熟練使用
- Android Studio,先了解最基礎的創建工程,編譯工程,運行工程,日常工作中必須會用各種快捷鍵,下載地址: http://www.androiddevtools.cn/
- git: add, commit, checkout, status, branch, stash, rebase, merge, log, remote, fetch, pull, push, 必須熟練的使用這個工具,推薦教程: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
- repo: sync, upload,可以跟着這個blog動手操作一下: http://blog.csdn.net/yhcvb/article/details/51291245
- adb: 用於android調試,必須熟悉常用命令以及各命令輸出的意義,查閱地址:https://github.com/mzlogin/awesome-adb,不需要專門去看,先了解幾個常用的命令即可
- adb devices
- adb root
- adb shell
- adb shell am start
- adb shelll dumpsys activity -p com.android.settings a | less
- shell: 必須熟練使用常用操作
- 推薦使用zsh,並配置上oh-my-zsh插件,地址:https://www.jianshu.com/p/546effd99c35
- 推薦配置上auto-complete,並配置好快捷鍵,地址:https://github.com/zsh-users/zsh-autosuggestions
- 推薦掌握幾個常用的terminal快捷鍵,地址:http://www.codeceo.com/article/bash-shortcut.html
- uGet,下載工具,支持斷點續傳,http://ugetdm.com/downloads-ubuntu
- apktool: 反編譯工具,google即可
四,計算機基礎知識
需要自己找時間積累,推薦看書和看博客,面試之前也推薦看一看面試寶典
- 數據結構與算法
- 操作系統
- Linux爲主
- 進程,線程
- 進程/線程同步的概念
- 內存管理
- 文件系統
- I/O
- 中斷,信號
- 網絡相關