1. 程式人生 > >2018年android面試分享和學習總結

2018年android面試分享和學習總結

概述

回顧歷史不忘初心 展望未來繼續前行。

17年零零碎碎也搗鼓了好一陣子,從Android 自定義View開始,到原始碼分析,設計模式,再到JVM的瞭解以及最近看完的Java執行緒和併發以及集合。對Android體系有了一個大概了認識和了解。

成果和收穫

可以說部落格和github對於面試有一定的加分項,原本一開始寫部落格的目的是因為公眾號,部落格平臺等一些大V的建議,不過到後來發現寫技術部落格的過程中,不僅能夠對知識的深入認識和掌握,還能夠提升對該知識的記憶和印象。因為雖然寫部落格會比較耗時,不過對知識的梳理筆記能夠讓日後重溫複習變得更簡單快速。

17年初給自己定的目標是進入一家”大”公司,雖然沒有對這個”大”字作出嚴格的定義。不過很幸運,18年3月的時候(也就是前兩天)完成了這個目標。

我個人覺得以下兩個觀點可以說是比較營養滋補的心靈雞湯 :

  • 工作後的努力,往往回報率會很高。
    可以這麼說 : 初中升高中,高中升大學。也就是在我們的學生時代,努力的回報率可能不盡人意。高考想考個名牌大學,大多都是天資聰穎或是毅力頑強。
    但是,讀了大學之後考研,考進名牌大學的難度會比高考時期小蠻多的(考上研的同學分享的心得)。
    最後說到工作,工作的努力往往帶著很大的目的性,通過自身的不斷學習積累,回報率會比考研還高。
    也就是 高考<考研<工作飛昇。

  • 好環境能讓人跑的更快。
    PS : 在綠皮車上跑步,很難追上在快車或者動車走路的人。

面試分享

Android

  1. 四大元件是什麼與它們的生命週期(及Fragment)。

  2. Acitivty的四種啟動模式與特點。

  3. Activity狀態儲存與恢復。

  4. Service的生命週期,啟動方法,有什麼區別。

  5. service和activity怎麼進行資料互動。

  6. 怎麼保證service不被殺死。

  7. 廣播使用的方式和場景以及廣播的幾種分類。

  8. Intent的使用方法,可以傳遞哪些資料型別。

  9. ContentProvider使用方法。

  10. ContentProvider、ContentResolver、ContentObserver 之間的關係。

  11. Thread、AsycTask、IntentService的使用場景與特點。

  12. FrameLayout 、 LinearLayout 、 RelativeLayout 各自特點及繪製效率對比。

  13. Android的資料儲存形式。

  14. Android兩種序列化的區別和作用。

  15. Sqlite的基本操作。

  16. Android中的MVC、MVP模式。

  17. Merge、ViewStub的作用。

  18. 動畫有哪幾類,各有什麼特點?

  19. Handler、Loop訊息佇列模型,各部分的作用。

  20. Android的訊息機制,子執行緒更新UI的方法和原理。

  21. Android怎麼加速啟動Activity。

  22. App的啟動過程。

  23. Android優化方法。

  24. 如何防止記憶體洩漏?

  25. Android中弱引用與軟引用的應用場景。

  26. Bitmap的四種屬性,如何載入大圖(inJustDecodeBounds)。

  27. View與View Group分類。自定義View過程:onMeasure()、onLayout()、onDraw()。

  28. View重新整理機制和繪製流程。

  29. Activity、Window、View的聯絡和理解。

  30. invalidate和requestLayout的區別及使用。

  31. Touch事件分發機制和衝突處理。

  32. Android IPC:Binder原理。

  33. Android5.0(UI庫)、6.0(許可權)、7.0特性。

Android 這塊比較注重專案經驗和平時學習的積累。
《Android開發藝術探索》《深入理解ANDROID 卷3》這兩本書可以對Android有比較全面的認識和理解。

JVM

  1. Java執行時資料區域,導致記憶體溢位的原因。

  2. 物件建立、記憶體佈局,訪問定位等。

  3. GC的判定方法。

  4. 垃圾收集演算法和運作原理。

  5. 記憶體分配與回收策略(Eden,survival from to,老年代)。

  6. Class檔案結構(常量池)。

  7. 類載入過程。

  8. 類載入器(雙親委派模型)。

  9. 執行時棧幀結構(主要是區域性變量表,理解棧堆)。

  10. Java泛型,自動拆箱,條件編譯等多種語法糖。

  11. Java記憶體模型結構(主記憶體和工作記憶體)及操作,原子性可見性和有序性等。

  12. Java執行緒安全涉及的概念和分類。

《深入理解Java虛擬機器 第二版》基本涵蓋目前市場主流的 jvm 面試問題。

Java 執行緒

  1. volatile的記憶體語義和應用。

  2. Java重排序和順序一致性。(as-if-serial和happens-before)

  3. 執行緒的狀態和優先順序。

  4. 啟動執行緒和安全的終止執行緒。(interrupt)

  5. ThreadLocal的使用

  6. Java中的鎖(偏向鎖,輕量鎖,重量級鎖)

  7. Java重入鎖ReentrantLock和Condition。

  8. Synchronized和鎖的等級(方法鎖、物件鎖、類鎖)。

  9. Synchronized的wait(sleep的區別)和notify執行過程。

  10. CAS介紹。(compare and swap)

  11. Java中的併發工具(CountDownLatch,CyclicBarrier等)

  12. Java執行緒池的使用和原理(模型)。

  13. Java生產者和消費者模型。

關於執行緒和併發這塊方面的知識,我個人還是推薦先閱讀《Java併發程式設計的藝術》,這本書比較好上手。
再通過《Java高併發程式設計》和《Java併發程式設計實戰》深入理解。

Java 集合

  1. List、Set、Map的區別

  2. ArrayList、LinkedList、Vector的區別。

  3. CopyOnWriteArrayList的瞭解。

  4. HashMap和HashTable的區別。

  5. HashMap和ConcurrentHashMap的區別,HashMap的底層原始碼。

  6. TreeMap、HashMap、LindedHashMap、ArrayMap的區別。

  7. Collection包結構,與Collections的區別。

Java集合主要考驗對集合的使用和認識,一般都是以HashMap下手,問增刪改查方法及內部原理。
集合這塊暫時沒有好的書本推薦。只能在網上了解。後面我也會寫關於集合系列的文章。

網路

  1. TCP與UDP的區別。

  2. TCP和UDP報文結構。

  3. TCP的三次握手與四次揮手過程。

  4. TCP可靠傳輸原理實現(滑動視窗)。

  5. TCP擁塞控制。

  6. TCP流量控制。

  7. Http的報文結構。

  8. Http的狀態碼。

  9. Http的請求方法。

  10. Http1.1和Http1.0及2.0的區別

  11. Http長連線。

  12. Cookie與Session的作用和原理。

  13. Https加密原理。

網路這方面關於tcp/udp的可以閱讀《計算機網路 第七版》的第五章運輸層部分。
Http推薦《圖解 HTTP》

資料結構和演算法

目前演算法還處於藍海狀態,演算法和資料結構是需要日積月累慢慢修煉的內功心法,已經入手《演算法 第4版》準備慢慢啃。
如果已經有演算法基礎的同學可以買《劍指offer》《程式設計之美》刷刷題。

寫在最後

書籍是進步的階梯。我之所以比較推薦用看書的方法來學習主要的原因是 : 書籍能夠比較系統全面的瞭解某個知識。也就是可以建立知識體系。

不積跬步無以至千里,機會是留給有準備的人。

這裡寫圖片描述