Android高頻面試題:該怎樣在Android面試中聊聊多執行緒不被忽悠?
多執行緒可以說是Android面試的高頻問題了,而多執行緒涉及的內容非常多,因此在面試當中往往不知道從何說起,本文並 不是為了科普多執行緒或者研究多執行緒的知識,而是嘗試組織語言以便在面試當中更好地忽悠面試官。
語言表達在面試當中雖說很重要, 不過更重要的還是相關知識技能過硬。
假如在一場Android面試當中,面試官讓你聊聊多執行緒,你可以試試這樣回答。
Android中的執行緒
在Android當中, 當應用啟動的時候,系統會給應用分配一個 程式,順便一提, 大部分應用都是單程式的,不過也可以透過設定來使不同元件執行在不同的程式中,在建立程式的同時會建立一個 執行緒,應用的大部分操作都會在這個執行緒中執行,所以稱為 主執行緒,同時所有的UI控制元件相關的操作也要求在這個執行緒中操作,所以也稱為 UI執行緒。
UI執行緒和工作執行緒
因為所有的UI控制元件的操作都在UI執行緒中執行,如果在UI執行緒中執行耗時操作,例如網路請求等,就會阻塞UI執行緒,導致系統報 ANR(Application Not Response)錯誤。因此對於耗時操作需要建立 工作執行緒來執行而不能直接在UI執行緒中執行。這樣就需要在應用中使用多執行緒,但是Android提供的UI工具包並不是執行緒安全的,也就是說 不能直接在工作執行緒中訪問UI控制元件,否則會導致不能預測的問題,因此需要額外的機制來進行 執行緒互動,主要是讓其他執行緒可以訪問UI執行緒。
執行緒互動 - Handler機制
在Android當中,工作執行緒主要透過 Handler機制來訪問UI執行緒。當然還有一些封裝好的類例如AsyncTask可以使用,但是本質仍是使用Handler。
Handler機制主要由4部分組成, Looper,訊息佇列,訊息類和Handler組成,其中Looper和訊息佇列是和 執行緒繫結的,每個執行緒只會有一個Looper和一個訊息佇列,當Looper啟動時,它會無限迴圈嘗試從訊息佇列中獲取訊息例項,如果沒有訊息則會阻塞等待。當Handler傳送訊息時會把訊息例項放入訊息佇列中,Looper從中取得訊息例項然後就會呼叫Handler的相關方法,因為Looper是執行緒繫結的,如果繫結的是UI執行緒,那麼此時Handler的方法就會在UI執行緒中得到執行,執行緒間就是這樣進行互動的。
java中的執行緒
而Handler機制的底層實現則是使用java多執行緒相關的類。
java當中主要使用Thread和Executor來實現多執行緒。Thread用於直接建立執行緒,在Android中也可以直接使用這個類,Looper中就包含一個Thread例項。Executor是一個介面,大部分java中自帶的實現都使用了 執行緒池來管理多執行緒。
執行緒池
因為在系統中建立執行緒是一個比較耗費資源的事,所以不能頻繁建立和釋放執行緒,因此在效率上考慮通常會使用執行緒池,同時也便於執行緒的管理。Android中的AsyncTask就使用了執行緒池。
執行緒安全
另一個在使用多執行緒時需要注意的是執行緒安全的問題,因為同一程式中的執行緒可以共享記憶體,雖然這種方式效率很高,但是會導致執行緒干擾和記憶體一致性的問題。
鎖
解決這些問題的主要方法是使用Synchronized關鍵字來加鎖。基本原理就是執行緒要對物件進行操作前需要先獲取鎖,如果一個執行緒正在操作某個物件,那麼它就會持有相應的鎖,後來的執行緒想要操作這個物件,只能等待前面的執行緒釋放鎖之後才有機會獲取鎖並進行操作。
死鎖和活鎖
引入鎖之後仍有可能出現一些問題,例如死鎖,飢餓(Starvation)和活鎖。
多執行緒工具包
同時java還提供不少工具來使用多執行緒,例如剛剛提到的Executor,另外常用的還有執行緒安全的集合,例如ConcurrentMap,可以用來避免記憶體一致性的問題。
如果你是面試官,你被忽悠到了嗎?歡迎在討論區說說你的看法。
最後
以上面試中問到的題目基本上都可以在上面找到答案,所以做準備是很重要的,但技術是一點點積累的,就算你全會背了,面試過了,真正等到工作的時候還是會捉襟見肘的,所以踏實點吧騷年。
最後為了幫助大家深刻理解Android相關知識點的原理以及面試相關知識,這裡放上相關的我搜集整理的24套騰訊、位元組跳動、阿里、百度 2019-2020BAT 面試真題解析,我把大廠面試中 常被問到的技術點整理成了影片和PDF(實際上比預期多花了不少精力),包知識脈絡 + 諸多細節。
還有 高階架構技術進階腦圖 幫助大家學習提升進階,也節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習。
領取: 【PDF】
Android 基礎知識點
Java 基礎知識點
Android 原始碼相關分析
常見的一些原理性問題
騰訊、位元組跳動、阿里、百度等BAT大廠 2019-2020面試真題解析
以上內容,均可以免費分享給大家,希望大家在今年的金九銀十里能夠發揮順利,進到自己想進的公司,共勉!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2721773/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java多執行緒面試高配問題---多執行緒(3)🧵Java執行緒面試
- 多執行緒面試題執行緒面試題
- 多執行緒面試題1執行緒面試題
- java多執行緒面試題Java執行緒面試題
- 聊聊面試中的 Java 執行緒池面試Java執行緒
- 多執行緒-多執行緒常見的面試題執行緒面試題
- 微服務+分散式+多執行緒+MyBatis +Spring:BATJ高頻面試249道題微服務分散式執行緒MyBatisSpring面試
- Linux多執行緒面試題Linux執行緒面試題
- 多執行緒經典面試題執行緒面試題
- Android《多執行緒-中》Android執行緒
- 15個Java多執行緒面試題Java執行緒面試題
- 50個Java多執行緒面試題Java執行緒面試題
- 高頻面試題面試題
- Android中的多程式、多執行緒Android執行緒
- 【面經】多執行緒常見面試題執行緒面試題
- Java 多執行緒面試問題彙總Java執行緒面試
- 秒殺多執行緒面試題系列-如何使用多執行緒,詳細分析多執行緒的重點難點必考點——多執行緒同步互斥問題。各文章講解生動細緻,針對性強。必定也能助你在面試中秒殺所有多執行緒面試題...執行緒面試題
- 【Java面試題】Java面試之多執行緒!Java面試題執行緒
- MySQL高頻面試題MySql面試題
- Java程式設計師面試中的多執行緒問題Java程式設計師面試執行緒
- 史上最全 Java 多執行緒面試題及答案Java執行緒面試題
- BATJ都愛問的多執行緒面試題BAT執行緒面試題
- 史上最全Java多執行緒面試題,附答案Java執行緒面試題
- Java常用面試題之Java多執行緒(十三)Java面試題執行緒
- java多執行緒、集合和IO面試題_02Java執行緒面試題
- 精選30道Java多執行緒面試題Java執行緒面試題
- Android多執行緒之執行緒池Android執行緒
- 面試集錦(十四)多執行緒面試執行緒
- java 多執行緒 併發 面試Java執行緒面試
- 上海某小公司面試題:Java執行緒池來聊聊面試題Java執行緒
- 敲開阿里大門的執行緒、多執行緒和執行緒池面試專題阿里執行緒面試
- 執行緒池是怎麼回事(附面試題)執行緒面試題
- Java面試題:執行緒池內“鬧情緒”的執行緒,怎麼辦?Java面試題執行緒
- Java執行緒面試題(02) Java執行緒中如何避免死鎖Java執行緒面試題
- Java集合高頻面試題Java面試題
- Java高頻面試題---RabbitMQJava面試題MQ
- Java高頻面試題---MySQLJava面試題MySql
- Java多執行緒與併發基礎面試題Java執行緒面試題