想學IT的必看!今年Android面試必問的這些技術面,架構師必備技能

第一次觀看我文章的朋友,可以關注、點贊、轉發一下,每天分享各種干貨技術和程序猿趣事

前言

職場的金三銀四跳槽季又來了,不同的是今年比往年「冷」一些,形式更加嚴峻一些,大家多多少少可能都聽到或看到一些信息,就是好多公司在優化裁員,作為求職者來說,面試是一道坎,很多人會恐懼面試,即使是工作很多年的老鳥,可能仍存在面試的焦慮。

這些題目是我之前的面試去騰訊、虎牙、美團、阿里、快手等一線互聯網公司面試被問到的題目。熟悉本文中列出的知識點會大大增加通過前兩輪技術面試的幾率。

由于涉及到的面試題較多導致篇幅較長,我根據這些面試題所涉及到的常問范圍總結了并做出了一份學習進階路線圖???????及面試題答案免費分享給大家,文末有免費領取方式!

面試官:說說什么是 UI 線程?

A:就是用來刷新 UI 所在的線程嘛

面試官:多說點

A:UI 是單線程刷新的,如果多個線程可以刷新 UI 就無所謂是不是 UI 線程了,單線程的好處是,UI 框架里不需要到處上鎖,做線程同步,寫起來也比較簡單有效

面試官:你說的這個 UI 線程,它到底是哪個線程?是主線程嗎?

A:拿 Activity 來說,我們在 Activity 里異步做完耗時操作,要刷新 UI 可以調用 Activity.runOnUiThread 方法,在 UI 線程中執行,那么我們看下這個方法自然就知道 UI 線程是哪個線程了。

public final void runOnUiThread(Runnable action) {if (Thread.currentThread() != mUiThread) {mHandler.post(action);} else {action.run();}
}

這個方法會判斷當前是不是在主線程,不是呢就通過 mHandler 拋到主線程去執行。 這個 mHandler 是 Activity 里的一個全局變量,在 Activity 創建的時候通過無參構造函數 new Handler() 一起創建了。

因為是無參,所以創建時用的哪個線程,Handler 里的 Looper 用的就是哪個線程了。創建 Activity 是在應用的主線程,因此 mHandler.post 去執行的線程也是主線程。 剛也說 了,runOnUiThread 方法里,先判斷是不是在 UI 線程,這個 mUiThread 又是什么時候賦值的呢,答案還在 Activity 的源碼里

final void attach(Context context, ...) {...省略無關代碼mUiThread = Thread.currentThread();
}

在 Activity.attach 方法里,我們把當前線程賦值給 mUiThread,那當前線程是什么線程呢,也是主線程。至于為什么創建 Activity 和 attach 都是主線程,那又是另外一個故事了 通過前面的分析,我們知道了,對于 Activity 來講 UI 線程就是主線程

面試官:所以你的結論是 UI 線程就是主線程?

A:這是你說的,記住這個開發的時候不會錯,但是不夠準確。在子線程里刷新 UI 的時候會拋一個異常

ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

大意是只有最初始創建 View 層級關系的線程可以 touch view,這里指的也就是 ViewRootImpl 創建時所在的線程,嚴格來說這個線程不一定是主線程。這一點呢,讀 View.post 方法也可以得到相同的結論。所以對于 View 來說,UI 線程就是 ViewRootImpl 創建時所在的線程,Activity 的 DecorView 對應的 ViewRootImpl 是在主線程創建的

面試官:這個 ViewRootImpl 什么時候創建

A:Activity 創建好之后,應用的主線程會調用 ActivityThread.handleResumeActivity,這個方法會把 Activity 的 DecorView 添加到 WindowManger 里,就是在這個時候創建的 ViewRootImpl

面試官:那可以在異步線程刷新 View 嗎?

A:剛才我們說了,只要是 ViewRootImpl 創建的線程就可以 touch view,然后 WindowManger.addView 的時候又會去創建 ViewRootImpl,所以我們只要在子線程調用 WindowManger.addView,這個時候添加的這個 View,就只能在這個子線程刷新了,這個子線程就是這個 View 的 UI 線程了。

面試官:好,我們再聊點別的

總結:

各行各樣都會淘汰一些能力差的,不僅僅是IT這個行業,所以,不要被程序猿是吃青春飯等等這類話題所嚇倒,也不要覺得,找到一份工作,就享受安逸的生活,你在安逸的同時,別人正在奮力的向前跑,這樣與別人的差距也就會越來越遙遠,加油,希望,我們每一個人,成為更好的自己。

源碼、數據結構與算法、小程序、NDK、Flutter
[外鏈圖片轉存中…(img-uJCIsyaR-1619446366639)]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/386606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386606.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

springboot集成redis使用redis作為session報錯ClassNotFoundException類RememberMeServices

springboot 集成redis使用redis作為緩存,會報錯的問題。 錯誤信息: java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration.taskSchedulerat org.springframew…

阿里巴巴分布式事務利器Seata環境準備

阿里巴巴自從跟SpringCloud共同發起創建微服務開源社區時,開啟了SpringCloud Alibaba分支,而且在生態內提供了一款適用于分布式應用程序(Dubbo、SpringCloud等)的事務框架Seata,該框架經過多個大版本的發布&#xff0c…

對于‘敲什么都隊’自主開發的《校園服務》軟件的使用體驗

信1805-1 邊信哲 20183694 在六月十三日我系組織的2017級軟件工程交流大會中,我為第十一組敲什么都隊’自主開發的《校園服務》軟件投出了我的一票,在為數眾多的校園服務類軟件中,《校園服務》最吸引我的地方就是他們的軟件能完成數據…

阿里P7大牛親自教你!BAT這種大廠履歷意味著什么?積累總結

金九銀十過后各大網絡平臺都是各種面經分享,包括已收offer,或面試失敗的都有,相信大部分人都拿到了自己心儀的大廠offer,不過也有沒有少數沒能進到自己內心向往的大廠而懊惱的,那么到底如何才能進大廠,該準…

啟動mac版docker自帶的k8s

最近準備好好學習下k8s,為了圖方便,直接使用docker集成的k8s,但是網上找了一些教程但都沒能一次性成功,只好自己從頭跑一遍,順手寫個教程可以方便有類似需求的同學參考。 話不多說,直接上步驟。 1.下載doc…

yum安裝mysql

在CentOS7中默認安裝有MariaDB,這個是MySQL的分支,但為了需要,還是要在系統中安裝MySQL,而且安裝完成之后可以直接覆蓋掉MariaDB。 1. 下載并安裝MySQL官方的 Yum Repository 1[rootBrianZhu /]# wget -i -c http://dev.mysql.com…

springboot很多以來jar包是在外部當時候,如何打dockerfile到阿里云

首先保證springboot與各種jar包文件夾在同一目錄 dockerfile如下內容 FROM frolvlad/alpine-oraclejdk8 VOLUME /usr/cloud ADD lib /lib/ ADD lib_attachment /lib_attachment/ ADD lib_bigdata /lib_bigdata/ ADD lib_bpm /lib_bpm/ ADD lib_deploy /lib_deploy/ ADD lib_el…

阿里P7大牛手把手教你!一眼就能看懂的Android自學手冊,真香!

前言 曾聽過很多人說Android學習很簡單,做個App就上手了,工作機會多,畢業后也比較容易找工作。這種觀點可能是很多Android開發者最開始入行的原因之一。 在工作初期,工作主要是按照業務需求實現App頁面的功能,按照設…

【VScode】使用VScode 來寫markdown時序圖

準備工作在VScode中下載插件Markdown Preview Enhanced插件創建一個.md文件在VScode中打開文件,界面內點擊右鍵可以看到Open preview to the side(還有很多方法外面都能搜到),可以進行實時預覽效果開始markdown第一行主標題(次標題依次加#&am…

阿里P7大牛整理!BAT大廠面試基礎題集合,成功入職字節跳動

都說大廠面試必問源碼,可很多人看完MMKV 源碼、Handler 源碼、Binder 源碼、OkHttp 源碼等源碼記不住,是腦子有問題嗎?當然不是!是因為你沒有掌握學習源碼的技巧。 我的朋友子路,很多人都叫他路神,稱他為“…

大項目之網上書城(八)——數據庫大改添加圖書

目錄 大項目之網上書城(八)——數據庫大改&添加圖書主要改動1.數據庫新增表代碼2.數據庫新增觸發器3.其他對BookService和BookDao的修改代碼4.addBook.jsp代碼效果圖5.AddNewBookServlet代碼大項目之網上書城(八)——數據庫大…

hping3工具DOS攻擊實驗

需要兩臺機器,一臺扮演攻擊源,另一做目標源。 攻擊源地址:10.0.40.4 被攻擊機器地址:10.0.40.246 2 被攻擊的機器上安裝tcpdump,tcpdump主要是用來抓包的,看看網絡數據包是否到達。 $ yum install tcpdump -y 3 首先開啟tcp…

騰訊T2親自講解!搞懂開源框架設計思想真的這么重要嗎?系列篇

Java相關 無論什么級別的Android從業者,Java作為Android開發基礎語言。不管是工作還是面試中,Java都是必考題。如果不懂Java的話,薪酬會非常吃虧(美團尤為重視Java基礎) 詳細介紹了Java泛型、注解、并發編程、數據傳…

解決Docker容器內訪問宿主機MySQL數據庫服務器的問題

懶得描述太多,總歸是解決了問題,方法簡要記錄如下,雖然簡要,但是完整,一來紀念處理該問題耗費的大半天時間,二來本著共享精神幫助其他遇到該問題的哥們兒,當然這個方法并不一定能解決你們的問題,但是多少能提供些解決思路. 第一,先檢查防火墻,通常應該沒什么問題 (問題解決之后…

阿里P7親自教你!我的頭條面試經歷分享,完整PDF

前言 轉眼間,2020 年已過去一大半了,2020 年很難,各企業裁員的消息蠻多的,降職,不發年終獎等等。2020 年確實是艱難的一年。然而生活總是要繼續,時間不給你喪的機會!如果我們能堅持下來&#x…

Java多線程 ——線程基礎和鎖鎖鎖

Java多線程(一) 一、線程的定義二、Synchronize線程同步三、偏向鎖、自旋鎖、重量級鎖四、volatile關鍵字 4.1.普通變量運算的物理意義4.2.有無解決的方案4.3.volatile的幾個特性(參考https://www.cnblogs.com/kubidemanong/p/9505944.html)五、Compare …

阿里P7級別面試經驗總結,進階學習資料!

一、前言 本人面試已經很久之前了,分享一下我做美團面試官的經歷吧。 美團上海面試,2-1及以下美團是不社招的,校招和2-2~2-3社招一般是三面,格外優秀3-1及以上會加簽面試。初面技術基礎,二面業務感知和技術項目&#…

C 預處理指令

0. Overview C的預處理指令格式為#name,均以#開頭,#和指令名之間不可有空白字符,#前可以有空字符,但為增強可讀性,一般應從第一列開始 #name不能由宏展開得來,name也不能由宏展開得來,如 // Wro…

Windows NAT端口映射

Windows本身命令行支持配置端口映射,條件是已經安裝了IPV6,啟不啟用都無所謂,我在win7和server2008上是可以的。xp,2003裝了ipv6協議也是可以的。 CMD下操作 增加端口映射,將10.10.10.10的8080映射到10.10.10.11的80…

阿里P8大牛親自教你!史上最全的Android面試題集錦,這原因我服了

一、架構師專題 想要掌握復雜的技術,必須要理解其原理和架構。本模塊結合實際一線互聯網大型項目理解架構思維,抽絲剝繭,層層深入,幫助大家成為Android架構師,在思想上對架構認識有一次升華,并知其所以然&a…