Android知識大綱
Java垃圾回收機制
Java內存是如何劃分的绊汹,Java語言為什么要使用垃圾回收機制囤萤?
垃圾判定
1. 標記引用算法
2. 根搜索法
垃圾清掃
1. 標記-清除法 概念以及特點
2. 復制算法
3. 標記-整理法
4. 分代回收算法
有了垃圾回收機制浑此,Java還會出現(xiàn)內存泄露嗎猴鲫,如果說存在对人,Java有什么應對機制嗎?
Java的四種引用方式
- 強引用
- 軟引用
- 弱引用
- 虛引用
軟引用拂共、弱引用配合引用隊列如何使用牺弄,使用的目的是什么?
可參考:http://blog.csdn.net/u012152619/article/details/46981643
<font color=red size=5>以上這么多關于Java垃圾回收和內存的東西宜狐,你在編寫代碼的時候有需要注意的地方嗎势告?</font>
java數(shù)據(jù)結構
數(shù)據(jù)結構相關的類:Collection、List抚恒、Set咱台、Map
__List:__ArraryList、LinkedList和Vector
__Set:__hashSet俭驮、LinkedSet和TreeSet
__Map:__HashTable回溺、HashMap、LinkedMap和TreeMap
內存存放特性混萝、數(shù)據(jù)增長特性和各自的適用場景
遍歷Iterator遗遵、ListIterator和Foreach
線程安全問題,Tree一類的紅黑樹概念
了解Collections和Arrays兩個輔助工具類的用法
HashMap/ArrayMap/SparseArray三個區(qū)別和使用場景
http://blog.csdn.net/u010687392/article/details/47809295
clone拷貝
- java中如何實現(xiàn)clone()拷貝逸嘀,完成拷貝時他的內存是如何分配的车要?
- 什么是淺拷貝,什么是深拷貝崭倘,如何實現(xiàn)深拷貝屯蹦?
參考:http://blog.csdn.net/zhangjg_blog/article/details/18369201
多線程
線程用法
Thread、Runnable和Callable绳姨,以及各自的特點
線程的幾個狀態(tài)
創(chuàng)建登澜、就緒、運行飘庄、阻塞脑蠕、停止
線程池
為什么要使用線程池?
- 線程池常見的幾個類的用法:
ThreadPoolExecutor、Executor谴仙,Executors迂求,ExecutorService,CompletionService晃跺,F(xiàn)uture揩局,Callable 等 - 線程池四個分類
newCachedThreadPool、newFixedThreadPool掀虎、newScheduledThreadPool和SingleThreadExecutor - 自定義線程池 ThreadPoolExecutor
線程池工作原理
核心線程數(shù)凌盯、等待隊列、處理策略等
線程同步
同步方式:synchronized和lock
同步相關方法:wait()/notify()/notifyAll() sleep()/join()/yield() await()/signal()/signalAll
如何使用烹玉,各自適用場景驰怎?
參考:http://wiki.jikexueyuan.com/project/java-concurrency/executor.html
設計模式
面向對象設計六大原則
優(yōu)化代碼的第一步——單一職責原則
讓程序更穩(wěn)定、更靈活——開閉原則
構建擴展性更好的系統(tǒng)——里氏替換原則
讓項目擁有變化的能力——依賴倒置原則
系統(tǒng)有更高的靈活性——接口隔離原則
更好的可擴展性——迪米特原則
參考:http://blog.csdn.net/bboyfeiyu/article/details/50103471
android適配問題
不同系統(tǒng)版本之前的適配 -- API變化
不同手機廠商之間的適配 -- 對Android原生系統(tǒng)進行了改造
屏幕適配 -- 尺寸單文(dp/sp/px)二打、布局layout和圖片資源
可參考:http://blog.csdn.net/qq_28758749/article/details/51297842
Handler機制
- 使用方法县忌, send/post兩種方式
- handler底層怎么從發(fā)送消息到接收消息的
- 理清楚Looper、Handler继效、MessageQueue和Message概念和關系
- HandlerThread是什么東東症杏,如何使用,和Handler有什么區(qū)別呢瑞信?
參考:http://blog.csdn.net/jackzhouyu/article/details/49079699
Activity
- 正常執(zhí)行時鸳慈,生命周期是何變化?異常時和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的聯(lián)系振定?
3. fragmentManger和FragmentTransaction兩者用法,它的replace/add/remove/hide/show方法肉拓,以及添加到回退站和回退的用法
4. fragment和Activity的通信后频,以及何種方案保證降低他們的耦合性
以及fragment上踩過的一些坑
a. 嵌套fragment時Duplicated id或者Tag
b. replace之痛
c. Fragment的public默認無參數(shù)構造方法
原因:Fragment會被重新銷毀(Activity銷毀的時候它里面的Fragment就被銷毀了,可能因為內存不足,手機配置發(fā)生變化卑惜,橫豎屏切換)膏执。在重新創(chuàng)建的時候系統(tǒng)調用的是無參構造函數(shù)。
d. getActivity()為空指針
講解:http://blog.csdn.net/goodlixueyong/article/details/48715661
f. frgament和viewpager配合使用露久,生命周期影響幾何更米,fragment如何感知自己已經(jīng)處于顯示狀態(tài),并且與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的區(qū)別
參考:
http://blog.csdn.net/xiao__gui/article/details/11579087
http://blog.csdn.net/huutu/article/details/40357481
android事件分發(fā)機制
1. Activity里面的組件發(fā)生點擊事件時征峦,事件是如何傳遞的?
2. view和viewgroup事件分發(fā)區(qū)別镇草,理解dispatchTouchEvent()眶痰、onInterceptTouchEvent、onTouchEvent梯啤、onTouch和onClick事件
<font color=red>public boolean dispatchTouchEvent(MotionEvent ev)</font>
用來進行事件的分發(fā)竖伯。如果事件能夠傳遞到當前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事件不處理后吃靠,后續(xù)事件序列將不再傳遞給他
當子view除action_down外的事件不處理后硫眨,雖然后續(xù)事件也會收到,但是它的父組件卻無法處理
requestDisallowInterceptTouchEvent巢块,onInterceptTouchEvent兩個方法
參考:
https://segmentfault.com/a/1190000005268399
精通網(wǎng)絡通信機制礁阁;
對TCP、HTTP協(xié)議有豐富實踐經(jīng)驗族奢;
熟悉HTML姥闭、CSS、JS等web基礎知識越走,獨立或主導完成過大中型移動app經(jīng)驗者優(yōu)先泣栈;
深入研究過android系統(tǒng)機制和framework源碼,精通android上的app開發(fā)、調試南片、編譯掺涛、打包等流程;
有技術難題攻關經(jīng)驗疼进,在移動端app內存優(yōu)化薪缆、繪制效率優(yōu)化、IO優(yōu)化或數(shù)據(jù)庫伞广、電量等調優(yōu)方面有豐富的經(jīng)驗拣帽。
面試問題準備
- app之間通信有哪些方式
- 給你一個app設計項目,你應該怎么去搭建框架嚼锄,如何去設計這個app
- Android加載大圖問題解決辦法1
- Android加載大圖問題解決辦法2