Android知識大綱

Android知識大綱

Java垃圾回收機制

Java內存是如何劃分的,Java語言為什么要使用垃圾回收機制?

垃圾判定

1. 標記引用算法
2. 根搜索法

垃圾清掃

1. 標記-清除法    概念以及特點
2. 復制算法
3. 標記-整理法
4. 分代回收算法

有了垃圾回收機制,Java還會出現內存泄露嗎,如果說存在,Java有什么應對機制嗎?

Java的四種引用方式

  1. 強引用
  2. 軟引用
  3. 弱引用
  4. 虛引用
    軟引用、弱引用配合引用隊列如何使用,使用的目的是什么?
    可參考: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拷貝

多線程

線程用法

Thread、Runnable和Callable,以及各自的特點

線程的幾個狀態

創建、就緒、運行、阻塞、停止

線程池

為什么要使用線程池?

  1. 線程池常見的幾個類的用法:
    ThreadPoolExecutor、Executor,Executors,ExecutorService,CompletionService,Future,Callable 等
  2. 線程池四個分類
    newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool和SingleThreadExecutor
  3. 自定義線程池 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機制

  1. 使用方法, send/post兩種方式
  2. handler底層怎么從發送消息到接收消息的
  3. 理清楚Looper、Handler、MessageQueue和Message概念和關系
  4. HandlerThread是什么東東,如何使用,和Handler有什么區別呢?
    參考:http://blog.csdn.net/jackzhouyu/article/details/49079699

Activity

  1. 正常執行時,生命周期是何變化?異常時和Activity重新展開時,注意方法的調用時機: onSaveInstance()、onRestoreInstance()、onWindowFocusChanged()和onConfigurationChanged()以及使用方法
  2. onStart()和onResume()、 onPause()和onDestroy()這兩方法用處都很類似,Android為什么要這么設計呢?
  3. 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優化或數據庫、電量等調優方面有豐富的經驗。

面試問題準備

干貨資源

https://juejin.im/entry/578d938079bc44005ff26aec

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,283評論 25 708
  • 今天早會分享同事給我們看了一個關于成長的解說,成長,是一個將自己粉碎再重建的過程。我覺得,成長是一個擊敗自己并升級...
    青姑娘那些事閱讀 201評論 0 0
  • Dockerfile是一種文本格式的配置文件,利用它可以創建自定義的鏡像。也就是定制鏡像! 它類似于腳本文件,從上...
    如來自然閱讀 141評論 0 0
  • 詹姆斯在東部決賽前兩場的表現,用逆天逆生長來形容完全不過分。可是回到主場的第三場詹姆斯怎么了?攻的不堅決,投的不過...
    一個特立獨行的視角閱讀 260評論 1 0