Android開發經驗談:你有過迷茫嗎?2021最新版!
開頭
大家都知道,找工作的時候高薪不好拿,一般人能拿 30k 的 offer 就不錯了。據我所知百分之九十的Android開發都在30k以下!?
但是在我的群裡有一位同學,平時就喜歡研究原始碼和框架,然後經過一個月的刷題,跳槽到頭條,拿到了 50k 的月薪,我覺得太厲害了,羨慕嫉妒恨啊。??
後來我和他聊了下,發現他技術確實好,在刷題期間,除了演算法,他還把自己的 Android 筆記拿了出來,裡面都是他平時的積累,內容全面,深度也有,有外掛化、依賴注入,還有各種架構知識。??
果然,只要技術好,走到哪裡都不怕啊。大家在學習的時候,除了看書看部落格之外,最好能夠找一套系統化的,而且有足夠深度的學習視訊學習,搭建自己的知識框架。??
面經分享
我是那邊的朋友幫忙內推的,簡歷通過後電話約的面試。
當時約的是 10:30 的面試時間,我提前了二十機分鐘左右到達公司樓下。公司樓層有點複雜,花了十分鐘左右到目的地(約的食堂)。
第一輪是兩個面試官輪流問問題。第一面大約面了一個小時到了 11:40差不多到飯點了。面完我就準備走了,兩個面試官要我等會,然後就直接去叫二面的面試官了,我就在食堂看大家吃飯。
大約等了十幾分鍾第二面的面試官把我叫到了 31 樓。
也是兩個面試官,輪流問了大概一個小時。二面後就差不多到了下午一點,面試官帶我去食堂吃了個飯,然後幫我約了下午兩點的 HR 面。
整個流程下來挺爽的,總共三輪面試,兩輪技術面(都是2個面試官),一輪 HR 面。
技術一面
-
常 見 的 Activity 類 型+描述Activity 生命週期
Activity 從建立到銷燬有多種狀態,從一種狀態到另一種狀態時會激發相應的回 調方法,這些回撥方法包括:onCreate onStart onResume onPause onStop onDestroy 其實這些方法都是兩兩對應的,onCreate 建立與 onDestroy 銷燬; onStart 可見與 onStop 不可見;onResume 可編輯(即焦點)與 onPause。。 -
兩個 Activity 之間跳轉時必然會執行的是哪幾個方法?
一般情況下比如說有兩個activity,分別叫A,B,當在A裡面啟用B元件的時候, A 會呼叫 onPause()方法,然後 B 呼叫 onCreate() ,onStart(), onResume()。 這個時候 B 覆蓋了窗體, A 會呼叫 onStop()方法. 如果 B 是個透明的,或者 是對話方塊的樣式, 就不會呼叫 A 的 onStop()方法。 -
系統是怎麼幫我們啟動找到桌面應用的
我說通過意圖,他說怎麼找到是哪個意圖? 我說 PMS 會解析所有 apk 的 AndroidManifest.xml ,如果解析過會存到 package.xml 中不會反覆解析,PMS 有了它就能找到了。 -
橫豎屏切換時 Activity 的生命週期
跟清單檔案裡的配置有關係。
不設定 Activity 的 android:configChanges 時,切屏會重新呼叫各個生 命週期預設首先銷燬當前 activity,然後重新載入。
設定 Activity android:configChanges="orientation|keyboardHidden|screenSize"時,切 屏不會重新呼叫各個生命週期,只會執行 onConfigurationChanged 方法。 通常在遊戲開發, 螢幕的朝向都是寫死的。 -
螢幕適配的處理技巧都有哪些
手機自適應主要分為兩種情況:橫屏和豎屏的切換,以及解析度大小的不同。 -
網路優化的問題
同一個 ip 同一個埠能複用一個連線,後面問道了 http 2.0 的多路複用,我說一個 tcp 可以多個請求,原理呢?我說不知道。後面讓我說了下 https 。 -
快排和遞迴
-
陣列和連結串列的區別
技術二面
1.儲存資料的幾種方式:SharePreference、資料庫、檔案
2.使用安卓資料庫時,有哪些生命週期方法:onCreate、onUpgrade
3.如果要給資料庫增加欄位,需要怎麼做?
-
方法1:通過alter table add column來做
-
方法2:先給舊錶改名,然後建一張新表包含新的欄位,再將舊錶資料遷移過去,最後刪除舊錶
4.資料庫讀寫是執行緒安全的嗎?
-
讀操作是執行緒安全的:多個執行緒或程序讀取同一個資料庫的內容,是可以的。
-
寫操作多個執行緒操作會拋異常(我感覺這裡不能直接說執行緒不安全吧,因為SqlLite確實是有鎖機制的):在多程序或多執行緒中使用sqlite,同時操作同一個資料庫的話,會導致異常丟擲。不同執行緒或例項化多個SqliteOpenhelper來操作同一個資料庫,也會導致同樣的問題。但不同執行緒使用同一個sqliteopenhelper來獲取SqliteDatabase進行操作的話,是可以的。
5.SharePreference的實現原理,是不是執行緒安全的,apply和commit有什麼區別?
commit方法是有一個boolean的返回值,當資料變化進行儲存時是一個原子性的操作,當兩個editor物件同時對一個共享的preferences引數進行操作時,永遠都是最後一個呼叫commit方法的editor變更了最後的資料值。
apply方法是沒有返回值的,當兩個editor同時對preferences物件編輯時,也是最後一個呼叫apply方法的物件編輯資料。apply的提交操作也是原子性的,但是隻提交到記憶體,速度更快。
6.Handler機制
7.HashMap、HashTable、ConcurrentHashMap的原理
8.計算機網路五層模型
9.http狀態碼
10.你遇到的最難解決的問題?
我說我們公司專案沒有采用動態載入框架,但是後面整合 U3D 專案需要動態載入,但只需要用到 so 和資源動態載入,功能上第三庫也不支援我們的需求,我就自己硬著頭皮看了各大版本的原始碼,支援動態修復替換載入 so 和 assets 資源動態修復載入,然後把具體的細節說了一遍。
最後
簡歷首選內推方式,速度快,效率高啊!然後可以在拉鉤,boss,脈脈,大街上看看。簡歷上寫道熟悉什麼技術就一定要去熟悉它,不然被問到不會很尷尬!做過什麼專案,即使專案體量不大,但也一定要熟悉實現原理!不是你負責的部分,也可以看看同事是怎麼實現的,換你來做你會怎麼做?做過什麼,會什麼是廣度問題,取決於專案內容。但做過什麼,達到怎樣一個境界,這是深度問題,和個人學習能力和解決問題的態度有關了。大公司看深度,小公司看廣度。大公司面試你會的,小公司面試他們用到的你會不會,也就是崗位匹配度。
面試過程一定要有禮貌!即使你覺得面試官不尊重你,經常打斷你的講解,或者你覺得他不如你,問的問題缺乏專業水平,你也一定要尊重他,誰叫現在是他選擇你,等你拿到offer後就是你選擇他了。
另外,描述問題一定要慢!不要一下子講一大堆,慢顯得你沉穩、自信,而且你還有時間反應思路接下來怎麼講更好。現在開發過多依賴ide,所以會有個弊端,當我們在面試講解很容易不知道某個方法怎麼讀,這是一個硬傷......所以一定要對常見的關鍵性的類名、方法名、關鍵字讀準,有些面試官不耐煩會說“你到底說的是哪個?”這時我們會容易亂了陣腳。正確的發音+沉穩的描述+好聽的嗓音決對是一個加分項!
最重要的是心態!心態!心態!重要事情說三遍!面試時間很短,在短時間內對方要摸清你的底子還是比較不現實的,所以,有時也是看眼緣,這還是個看臉的時代。
希望大家都能找到合適自己滿意的工作!
如果需要PDF版本可以在GitHub中自行領取!
進階學習視訊
附上:我們之前因為秋招收集的二十套一二線網際網路公司Android面試真題?(含BAT、小米、華為、美團、滴滴)和我自己整理Android複習筆記(包含Android基礎知識點、Android擴充套件知識點、Android原始碼解析、設計模式彙總、Gradle知識點、常見演算法題彙總。)