敲黑板,做筆記!金三銀四時去面試,這幾個重要的面試題千萬別忘記!
快春節了,又到了令人興奮的年終獎環節了,而程式設計師的年終獎,往往令人羨慕
做了個盤點: 網際網路大廠的年終獎vs我們的年終獎,真酸!換個公司還來得及嗎?
大廠程式設計師的年終獎,實在令人先羨慕!
但是不能光羨慕啊,馬上就到金三銀四了,面試的黃金時節,還不準備起來。
有可能,2020年底你也有了呢。
BATJ、位元組跳動面試專題,演算法專題,高階技術專題,混合開發專題,java面試專題,Android,Java小知識,到效能最佳化.執行緒.View.OpenCV.NDK等已經上傳到了的我的GitHub
下面就來講講Android面試中很重要的面試題
說一下java多型的理解,以及接繼承,和介面的理解
對於多型的定義
不同類的物件對統一函式做出不同對的響應或者動作。
作用
主要是消除類之間的耦合性,靈活性比較強,利於程式碼的編寫和修改。尤其在處理大量的運算和操作時,可以靈活地簡化,替換或者是修改程式碼!
三個必要條件
1、一個凳子(繼承extends)
2、重寫
3、父類引用指向子類物件
for example
**測試結果:
oKhttp的 原理
1.同步和非同步:
-
1.非同步使用了Dispatcher來將儲存在 Deque 中的請求分派給執行緒池中各個執行緒執行。
-
2.當任務執行完成後,無論是否有異常,finally程式碼段總會被執行,也就是會呼叫Dispatcher的finished函式,它將正在執行的任務Call從佇列runningAsyncCalls中移除後,主動的把快取佇列向前走了一步。
2.連線池:
-
1.一個Connection封裝了一個socket,ConnectionPool中儲存s著所有的Connection,StreamAllocation是引用計數的一個單位
-
2.當一個請求獲取一個Connection的時候要傳入一個StreamAllocation,Connection中存著一個弱引用的StreamAllocation列表,每當上層應用引用一次Connection,StreamAllocation就會加一個。反之如果上層應用不使用了,就會刪除一個。
-
3.ConnectionPool中會有一個後臺任務定時清理StreamAllocation列表為空的Connection。5分鐘時間,維持5個socket
3.選擇路線與建立連線
-
1.選擇路線有兩種方式:
-
3.代理好處:HTTP代理會幫你在遠端伺服器進行DNS查詢,可以減少DNS劫持。
-
1.無代理,那麼在本地使用DNS查詢到ip,注意結果是陣列,即一個域名有多個IP,這就是自動重連的來源
-
2.有代理HTTP:設定socket的ip為代理地址的ip,設定socket的埠為代理地址的埠
-
2.建立連線
-
1.連線池中已經存在連線,就從中取出(get)RealConnection,如果沒有命中就進入下一步
-
2.根據選擇的路線(Route),呼叫Platform.get().connectSocket選擇當前平臺Runtime下最好的socket庫進行握手
-
3.將建立成功的RealConnection放入(put)連線池快取
-
4.如果存在TLS,就根據SSL版本與證照進行安全握手
-
5.構造HttpStream並維護剛剛的socket連線,管道建立完成
4.職責鏈模式:快取、重試、建立連線等功能存在於攔截器中網路請求相關,主要是網路請求最佳化。網路請求的時候遇到的問題
執行緒同步的問題,常用的執行緒同步
1.sycn:保證了原子性、可見性、有序性
2.鎖:保證了原子性、可見性、有序性
-
1.自旋鎖:可以使執行緒在沒有取得鎖的時候,不被掛起,而轉去執行一個空迴圈。
-
1.優點:執行緒被掛起的機率減少,執行緒執行的連貫性加強。用於對於鎖競爭不是很激烈,鎖佔用時間很短的併發執行緒。
-
2.缺點:過多浪費CPU時間,有一個執行緒連續兩次試圖獲得自旋鎖引起死鎖
-
2.阻塞鎖:沒得到鎖的執行緒等待或者掛起,Sycn、Lock
-
3.可重入鎖:一個執行緒可多次獲取該鎖,Sycn、Lock
-
4.悲觀鎖:每次去拿資料的時候都認為別人會修改,所以會阻塞全部其他執行緒 Sycn、Lock
-
5.樂觀鎖:每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料,可以使用版本號等機制。cas
-
6.顯示鎖和內建鎖:顯示鎖用Lock來定義、內建鎖用synchronized。
-
7.讀-寫鎖:為了提高效能,Java提供了讀
3.volatile
-
1.只能保證可見性,不能保證原子性
-
2.自增操作有三步,此時多執行緒寫會出現問題
4.cas
-
1.操作:記憶體值V、舊的預期值A、要修改的值B,當且僅當預期值A和記憶體值V相同時,將記憶體值修改為B並返回true,否則什麼都不做並返回false。
-
2.解釋:本地副本為A,共享記憶體為V,執行緒A要把V修改成B。某個時刻執行緒A要把V修改成B,如果A和V不同那麼就表示有其他執行緒在修改V,此時就表示修改失敗,否則表示沒有其他執行緒修改,那麼把V改成B。
-
3.侷限:如果V被修改成V1然後又被改成V,此時cas識別不出變化,還是認為沒有其他執行緒在修改V,此時就會有問題
-
4.侷限解決:將V帶上版本。
5.執行緒不安全到底是怎麼回事:
-
1.一個執行緒寫,多個執行緒讀的時候,會造成寫了一半就去讀
-
2.多執行緒寫,會造成髒資料
Asynctask和執行緒池,GC相關(怎麼判斷哪些記憶體該GC,GC演算法)
1.Asynctask:非同步任務類,單執行緒執行緒池+Handler
2.執行緒池:
-
1.ThreadPoolExecutor:透過Executors可以構造單執行緒池、固定數目執行緒池、不固定數目執行緒池。
-
2.ScheduledThreadPoolExecutor:可以延時呼叫執行緒或者延時重複排程執行緒。 3.GC相關:重要
-
1.搜尋演算法: 1.引用計數
2.圖搜尋,可達性分析 -
2.回收演算法: 1.標記清除複製:用於青年代
2.標記整理:用於老年代 -
3.堆分割槽: 1.青年區eden 80%、survivor1 10%、survivor2 10%
2.老年區 -
4.虛擬機器棧分割槽:
1.區域性變數表
2.運算元棧
3.動態連結
4.方法返回地址 -
5.GC Roots:
1.虛擬機器棧(棧楨中的本地變數表)中的引用的物件
2.方法區中的類靜態屬性引用的物件
3.方法區中的常量引用的物件
4.本地方法棧中JNI的引用的物件
java類載入過程:
-
1.載入時機:建立例項、訪問靜態變數或方法、反射、載入子類之前
-
2.驗證:驗證檔案格式、後設資料、位元組碼、符號引用的正確性
-
3.載入:根據全類名獲取檔案位元組流、將位元組流轉化為靜態儲存結構放入方法區、生成class物件
-
4.準備:在堆上為靜態變數劃分記憶體
-
5.解析:將常量池中的符號引用轉換為直接引用
-
6.初始化:初始化靜態變數
mvc、mvp、mvvm:
-
1.mvc:資料、View、Activity,View將操作反饋給Activity,Activitiy去獲取資料,資料透過觀察者模式重新整理給View。迴圈依賴
-
1.Activity重,很難單元測試
-
2.View和Model耦合嚴重
-
2.mvp:資料、View、Presenter,View將操作給Presenter,Presenter去獲取資料,資料獲取好了返回給Presenter,Presenter去重新整理View。PV,PM雙向依賴
-
1.介面爆炸
-
2.Presenter很重
-
3.mvvm:資料、View、ViewModel,View將操作給ViewModel,ViewModel去獲取資料,資料和介面繫結了,資料更新介面更新。
-
1.viewModel的業務邏輯可以單獨拿來測試
-
2.一個view 對應一個 viewModel 業務邏輯可以分離,不會出現全能類
-
3.資料和介面繫結了,不用寫垃圾程式碼,但是複用起來不舒服
ANR的形成,各個元件上出現ARN的時間限制是多少
1.只要是主執行緒耗時的操作就會ARN 如io
2.broadcast超時時間為10秒 按鍵無響應的超時時間為5秒 前臺service無響應的超時時間為20秒,後臺service為200秒
Serializable和Parcelable 的區別
1.P 消耗記憶體小
2.網路傳輸用S 程式內使用P
3.S將資料持久化方便
4.S使用了反射 容易觸發垃圾回收 比較慢
Sharedpreferences原始碼簡述
1.儲存於硬碟上的xml鍵值對,資料多了會有效能問題
2.ContextImpl記錄著SharedPreferences的重要資料,檔案路徑和例項的鍵值對
3.在xml檔案全部內載入到記憶體中之前,讀取操作是阻塞的,在xml檔案全部內載入到記憶體中之後,是直接讀取記憶體中的資料
4.apply因為是非同步的沒有返回值, commit是同步的有返回值能知道修改是否提交成功
5.多併發的提交commit時,需等待正在處理的commit資料更新到磁碟檔案後才會繼續往下執行,從而降低效率; 而apply只是原子更新到記憶體,後呼叫apply函式會直接覆蓋前面記憶體資料,從一定程度上提高很多效率。 3.edit()每次都是建立新的EditorImpl物件.
ANR的形成,各個元件上出現ARN的時間限制是多少
1.只要是主執行緒耗時的操作就會ARN 如io
2.broadcast超時時間為10秒 按鍵無響應的超時時間為5秒 前臺service無響應的超時時間為20秒,後臺service為200秒
apk瘦身:
1.classes.dex:透過程式碼混淆,刪掉不必要的jar包和程式碼實現該檔案的最佳化
2.資源文
件:透過Lint工具掃描程式碼中沒有使用到的靜態資源
3.圖片資源:使用tinypng和webP,下面詳細介紹圖片資源最佳化的方案,向量圖
4.SO檔案將不用的去掉,目前主流app一般只放一個arm的so包
最後
敲黑板,做筆記!別忘了
不夠話還有整理好的
Android面試指導文件
領取方式:關注一下,私聊我
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2673364/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 金9銀10,分享幾個重要的Android面試題Android面試題
- 金三銀四的面試黃金季節,Android面試題來了!Android面試題
- 《金三銀四面試系列》—面試必問Spring面試Spring
- 2020金三銀四,面試求生指南面試
- 2018金三銀四,Android大廠面試題整理Android面試題
- 分享幾個重要的Android面試題Android面試題
- 金三銀四跳槽季,這些面試題你都會了嗎?面試題
- 常見面試題整理,金三銀四全靠它了面試題
- 金三銀四面試季—20道精選JVM重點面試問題!面試JVM
- 金三銀四,如何征服面試官,拿到Offer面試
- 金三銀四跳槽季,Java面試大綱Java面試
- 前端筆試題面試題記錄前端筆試面試題
- 前端筆試題面試題記錄(下)前端筆試面試題
- 記一次面試筆試題面試筆試
- 昨天去面試,這5個Python面試題都被考到了,Python面試題No6Python面試題
- 【面試篇】金九銀十面試季,這些面試題你都會了嗎?面試題
- 面試官一道題就把你刷下?21道大廠高階面試題,助力金三銀四!面試題
- 邦芒面試:面試時要問清楚的幾個問題面試
- 金三銀四面試季來臨,最新BAT面試資料分享給你面試BAT
- 【金三銀四跳槽季】Java工程師如何在1個月內做好面試準備?【石杉的架構筆記】Java工程師面試架構筆記
- 2019 PHP 初級 / 基礎面試題,祝你金三銀四跳槽加薪PHP面試題
- 《金三銀四面試系列》— jvm與效能優化面試JVM優化
- Android面試筆記Android面試筆記
- 筆記:面試 - css筆記面試CSS
- 筆記:面試 - React筆記面試React
- 筆記:面試 - Vue筆記面試Vue
- 金三銀四:螞蟻金服JAVA開發面試題及答案之一面(持續更新)Java面試題
- 金三銀四招聘季將近,總結下軟體測試面試時常被問到的9個問題面試
- 分享Java面試中的幾個重要基礎問題!Java面試
- 金三銀四銅五鐵六,現在看看面試題還不晚(上篇)面試題
- 去面試Python工程師,這幾個基礎問題一定要能回答,Python面試題No4Python工程師面試題
- Python爬蟲面試題分享!這三點很重要Python爬蟲面試題
- 面試題記錄面試題
- 記錄近期面試題,面試總結面試題
- 面試問題記錄 三 (JavaWeb、JavaEE)面試JavaWeb
- 新筆記 python 面試筆記Python面試
- 2020年最全Spring面試題總結,“金三銀四”戴上口罩不畏懼!Spring面試題
- SpringMVC 常見面試真題分享,助力金三銀四後半段衝刺!SpringMVC面試