Android知識大綱
Java垃圾回收機制
Java內存是如何劃分的,Java語言為什么要使用垃圾回收機制?
垃圾判定
1. 標記引用算法
2. 根搜索法
垃圾清掃
1. 標記-清除法 概念以及特點
2. 復制算法
3. 標記-整理法
4. 分代回收算法
有了垃圾回收機制,Java還會出現內存泄露嗎,如果說存在,Java有什么應對機制嗎?
Java的四種引用方式
- 強引用
- 軟引用
- 弱引用
- 虛引用
軟引用、弱引用配合引用隊列如何使用,使用的目的是什么?
可參考:http://blog.csdn.net/u012152619/article/details/46981643
<font color=red size=5>以上這么多關于Java垃圾回收和內存的東西,你在編寫代碼的時候有需要注意的地方嗎?</font>
java數據結構
數據結構相關的類:Collection、List、Set、Map
__List:__ArraryList、LinkedList和Vector
__Set:__hashSet、LinkedSet和TreeSet
__Map:__HashTable、HashMap、LinkedMap和TreeMap
內存存放特性、數據增長特性和各自的適用場景
遍歷Iterator、ListIterator和Foreach
線程安全問題,Tree一類的紅黑樹概念
了解Collections和Arrays兩個輔助工具類的用法
HashMap/ArrayMap/SparseArray三個區別和使用場景
http://blog.csdn.net/u010687392/article/details/47809295
clone拷貝
- java中如何實現clone()拷貝,完成拷貝時他的內存是如何分配的?
- 什么是淺拷貝,什么是深拷貝,如何實現深拷貝?
參考:http://blog.csdn.net/zhangjg_blog/article/details/18369201
多線程
線程用法
Thread、Runnable和Callable,以及各自的特點
線程的幾個狀態
創建、就緒、運行、阻塞、停止
線程池
為什么要使用線程池?
- 線程池常見的幾個類的用法:
ThreadPoolExecutor、Executor,Executors,ExecutorService,CompletionService,Future,Callable 等 - 線程池四個分類
newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool和SingleThreadExecutor - 自定義線程池 ThreadPoolExecutor
線程池工作原理
核心線程數、等待隊列、處理策略等
線程同步
同步方式:synchronized和lock
同步相關方法:wait()/notify()/notifyAll() sleep()/join()/yield() await()/signal()/signalAll
如何使用,各自適用場景?
參考:http://wiki.jikexueyuan.com/project/java-concurrency/executor.html
設計模式
面向對象設計六大原則
優化代碼的第一步——單一職責原則
讓程序更穩定、更靈活——開閉原則
構建擴展性更好的系統——里氏替換原則
讓項目擁有變化的能力——依賴倒置原則
系統有更高的靈活性——接口隔離原則
更好的可擴展性——迪米特原則
參考:http://blog.csdn.net/bboyfeiyu/article/details/50103471
android適配問題
不同系統版本之前的適配 -- API變化
不同手機廠商之間的適配 -- 對Android原生系統進行了改造
屏幕適配 -- 尺寸單文(dp/sp/px)、布局layout和圖片資源
可參考:http://blog.csdn.net/qq_28758749/article/details/51297842
Handler機制
- 使用方法, send/post兩種方式
- handler底層怎么從發送消息到接收消息的
- 理清楚Looper、Handler、MessageQueue和Message概念和關系
- HandlerThread是什么東東,如何使用,和Handler有什么區別呢?
參考:http://blog.csdn.net/jackzhouyu/article/details/49079699
Activity
- 正常執行時,生命周期是何變化?異常時和Activity重新展開時,注意方法的調用時機: onSaveInstance()、onRestoreInstance()、onWindowFocusChanged()和onConfigurationChanged()以及使用方法
- onStart()和onResume()、 onPause()和onDestroy()這兩方法用處都很類似,Android為什么要這么設計呢?
- Activity的四種啟動方式standard、singleTop、singTask和singleInstance是什么?他們onNewIntent()方法的關系
參考:
(1) http://blog.csdn.net/woshimalingyi/article/details/50961380
(2) http://blog.csdn.net/jiangwei0910410003/article/details/16968881
(3) http://www.cnblogs.com/lijunamneg/archive/2013/03/26/2982461.html
(4)http://blog.csdn.net/mynameishuangshuai/article/details/51491074
Fragment
1. 什么是fragment?為什么要使用fragment?
需要對比Activity才能更好的作出解答
2. fragment的生命周期,并且和Activity的聯系?
3. fragmentManger和FragmentTransaction兩者用法,它的replace/add/remove/hide/show方法,以及添加到回退站和回退的用法
4. fragment和Activity的通信,以及何種方案保證降低他們的耦合性
以及fragment上踩過的一些坑
a. 嵌套fragment時Duplicated id或者Tag
b. replace之痛
c. Fragment的public默認無參數構造方法
原因:Fragment會被重新銷毀(Activity銷毀的時候它里面的Fragment就被銷毀了,可能因為內存不足,手機配置發生變化,橫豎屏切換)。在重新創建的時候系統調用的是無參構造函數。
d. getActivity()為空指針
講解:http://blog.csdn.net/goodlixueyong/article/details/48715661
f. frgament和viewpager配合使用,生命周期影響幾何,fragment如何感知自己已經處于顯示狀態,并且與Activity通信
http://blog.csdn.net/tongcpp/article/details/41978751
參考:
(1)http://toughcoder.net/blog/2015/04/30/android-fragment-the-bad-parts/
(2)http://blog.csdn.net/lmj623565791/article/details/37970961
Service
1. 生命周期及兩種啟動方式
2. Service的線程關系和Thread,它屬于哪個線程和進程
3. Service和IntentService的區別
參考:
http://blog.csdn.net/xiao__gui/article/details/11579087
http://blog.csdn.net/huutu/article/details/40357481
android事件分發機制
1. Activity里面的組件發生點擊事件時,事件是如何傳遞的?
2. view和viewgroup事件分發區別,理解dispatchTouchEvent()、onInterceptTouchEvent、onTouchEvent、onTouch和onClick事件
<font color=red>public boolean dispatchTouchEvent(MotionEvent ev)</font>
用來進行事件的分發。如果事件能夠傳遞到當前View,此方法一定會被調用,返回結果受當前View的onTouchEvent()和下級View的diapatchTouchEvent()方法的影響,表示是否消耗當前事件
。
<font color=red>public boolean onInterceptTouchEvent(MotionEvent event)</font>
用來判斷是否攔截某個事件,如果當前View攔截了某個事件,那么在同一個事件序列當中,此方法不會被再次調用,返回結果表示是否攔截當前事件。
<font color=red>public boolean onTouchEvent(MotionEvent event)</font>
在dispatchTouchEvent()中調用,用來處理點擊事件,返回結果表示是否消耗當前事件,如果不消耗,則在同一個事件序列中,當前View無法再次接收事件
當子view的action_down事件不處理后,后續事件序列將不再傳遞給他
當子view除action_down外的事件不處理后,雖然后續事件也會收到,但是它的父組件卻無法處理
requestDisallowInterceptTouchEvent,onInterceptTouchEvent兩個方法
參考:
https://segmentfault.com/a/1190000005268399
精通網絡通信機制;
對TCP、HTTP協議有豐富實踐經驗;
熟悉HTML、CSS、JS等web基礎知識,獨立或主導完成過大中型移動app經驗者優先;
深入研究過android系統機制和framework源碼,精通android上的app開發、調試、編譯、打包等流程;
有技術難題攻關經驗,在移動端app內存優化、繪制效率優化、IO優化或數據庫、電量等調優方面有豐富的經驗。
面試問題準備
- app之間通信有哪些方式
- 給你一個app設計項目,你應該怎么去搭建框架,如何去設計這個app
- Android加載大圖問題解決辦法1
- Android加載大圖問題解決辦法2