2018年android面試分享和學習總結
概述
回顧歷史不忘初心 展望未來繼續前行。
17年零零碎碎也搗鼓了好一陣子,從Android 自定義View開始,到原始碼分析,設計模式,再到JVM的瞭解以及最近看完的Java執行緒和併發以及集合。對Android體系有了一個大概了認識和了解。
成果和收穫
可以說部落格和github對於面試有一定的加分項,原本一開始寫部落格的目的是因為公眾號,部落格平臺等一些大V的建議,不過到後來發現寫技術部落格的過程中,不僅能夠對知識的深入認識和掌握,還能夠提升對該知識的記憶和印象。因為雖然寫部落格會比較耗時,不過對知識的梳理筆記能夠讓日後重溫複習變得更簡單快速。
17年初給自己定的目標是進入一家”大”公司,雖然沒有對這個”大”字作出嚴格的定義。不過很幸運,18年3月的時候(也就是前兩天)完成了這個目標。
我個人覺得以下兩個觀點可以說是比較營養滋補的心靈雞湯 :
工作後的努力,往往回報率會很高。
可以這麼說 : 初中升高中,高中升大學。也就是在我們的學生時代,努力的回報率可能不盡人意。高考想考個名牌大學,大多都是天資聰穎或是毅力頑強。
但是,讀了大學之後考研,考進名牌大學的難度會比高考時期小蠻多的(考上研的同學分享的心得)。
最後說到工作,工作的努力往往帶著很大的目的性,通過自身的不斷學習積累,回報率會比考研還高。
也就是 高考<考研<工作飛昇。好環境能讓人跑的更快。
PS : 在綠皮車上跑步,很難追上在快車或者動車走路的人。
面試分享
Android
四大元件是什麼與它們的生命週期(及Fragment)。
Acitivty的四種啟動模式與特點。
Activity狀態儲存與恢復。
Service的生命週期,啟動方法,有什麼區別。
service和activity怎麼進行資料互動。
怎麼保證service不被殺死。
廣播使用的方式和場景以及廣播的幾種分類。
Intent的使用方法,可以傳遞哪些資料型別。
ContentProvider使用方法。
ContentProvider、ContentResolver、ContentObserver 之間的關係。
Thread、AsycTask、IntentService的使用場景與特點。
FrameLayout 、 LinearLayout 、 RelativeLayout 各自特點及繪製效率對比。
Android的資料儲存形式。
Android兩種序列化的區別和作用。
Sqlite的基本操作。
Android中的MVC、MVP模式。
Merge、ViewStub的作用。
動畫有哪幾類,各有什麼特點?
Handler、Loop訊息佇列模型,各部分的作用。
Android的訊息機制,子執行緒更新UI的方法和原理。
Android怎麼加速啟動Activity。
App的啟動過程。
Android優化方法。
如何防止記憶體洩漏?
Android中弱引用與軟引用的應用場景。
Bitmap的四種屬性,如何載入大圖(inJustDecodeBounds)。
View與View Group分類。自定義View過程:onMeasure()、onLayout()、onDraw()。
View重新整理機制和繪製流程。
Activity、Window、View的聯絡和理解。
invalidate和requestLayout的區別及使用。
Touch事件分發機制和衝突處理。
Android IPC:Binder原理。
Android5.0(UI庫)、6.0(許可權)、7.0特性。
Android 這塊比較注重專案經驗和平時學習的積累。
《Android開發藝術探索》《深入理解ANDROID 卷3》這兩本書可以對Android有比較全面的認識和理解。
JVM
Java執行時資料區域,導致記憶體溢位的原因。
物件建立、記憶體佈局,訪問定位等。
GC的判定方法。
垃圾收集演算法和運作原理。
記憶體分配與回收策略(Eden,survival from to,老年代)。
Class檔案結構(常量池)。
類載入過程。
類載入器(雙親委派模型)。
執行時棧幀結構(主要是區域性變量表,理解棧堆)。
Java泛型,自動拆箱,條件編譯等多種語法糖。
Java記憶體模型結構(主記憶體和工作記憶體)及操作,原子性可見性和有序性等。
Java執行緒安全涉及的概念和分類。
《深入理解Java虛擬機器 第二版》基本涵蓋目前市場主流的 jvm 面試問題。
Java 執行緒
volatile的記憶體語義和應用。
Java重排序和順序一致性。(as-if-serial和happens-before)
執行緒的狀態和優先順序。
啟動執行緒和安全的終止執行緒。(interrupt)
ThreadLocal的使用
Java中的鎖(偏向鎖,輕量鎖,重量級鎖)
Java重入鎖ReentrantLock和Condition。
Synchronized和鎖的等級(方法鎖、物件鎖、類鎖)。
Synchronized的wait(sleep的區別)和notify執行過程。
CAS介紹。(compare and swap)
Java中的併發工具(CountDownLatch,CyclicBarrier等)
Java執行緒池的使用和原理(模型)。
Java生產者和消費者模型。
關於執行緒和併發這塊方面的知識,我個人還是推薦先閱讀《Java併發程式設計的藝術》,這本書比較好上手。
再通過《Java高併發程式設計》和《Java併發程式設計實戰》深入理解。
Java 集合
List、Set、Map的區別
ArrayList、LinkedList、Vector的區別。
CopyOnWriteArrayList的瞭解。
HashMap和HashTable的區別。
HashMap和ConcurrentHashMap的區別,HashMap的底層原始碼。
TreeMap、HashMap、LindedHashMap、ArrayMap的區別。
Collection包結構,與Collections的區別。
Java集合主要考驗對集合的使用和認識,一般都是以HashMap下手,問增刪改查方法及內部原理。
集合這塊暫時沒有好的書本推薦。只能在網上了解。後面我也會寫關於集合系列的文章。
網路
TCP與UDP的區別。
TCP和UDP報文結構。
TCP的三次握手與四次揮手過程。
TCP可靠傳輸原理實現(滑動視窗)。
TCP擁塞控制。
TCP流量控制。
Http的報文結構。
Http的狀態碼。
Http的請求方法。
Http1.1和Http1.0及2.0的區別
Http長連線。
Cookie與Session的作用和原理。
Https加密原理。
網路這方面關於tcp/udp的可以閱讀《計算機網路 第七版》的第五章運輸層部分。
Http推薦《圖解 HTTP》
資料結構和演算法
目前演算法還處於藍海狀態,演算法和資料結構是需要日積月累慢慢修煉的內功心法,已經入手《演算法 第4版》準備慢慢啃。
如果已經有演算法基礎的同學可以買《劍指offer》《程式設計之美》刷刷題。
寫在最後
書籍是進步的階梯。我之所以比較推薦用看書的方法來學習主要的原因是 : 書籍能夠比較系統全面的瞭解某個知識。也就是可以建立知識體系。
不積跬步無以至千里,機會是留給有準備的人。