1. 程式人生 > 其它 >Android開發經驗談:你有過迷茫嗎?2021最新版!

Android開發經驗談:你有過迷茫嗎?2021最新版!

開頭

大家都知道,找工作的時候高薪不好拿,一般人能拿 30k 的 offer 就不錯了。據我所知百分之九十的Android開發都在30k以下!?

但是在我的群裡有一位同學,平時就喜歡研究原始碼和框架,然後經過一個月的刷題,跳槽到頭條,拿到了 50k 的月薪,我覺得太厲害了,羨慕嫉妒恨啊。??

後來我和他聊了下,發現他技術確實好,在刷題期間,除了演算法,他還把自己的 Android 筆記拿了出來,裡面都是他平時的積累,內容全面,深度也有,有外掛化、依賴注入,還有各種架構知識。??

果然,只要技術好,走到哪裡都不怕啊。大家在學習的時候,除了看書看部落格之外,最好能夠找一套系統化的,而且有足夠深度的學習視訊學習,搭建自己的知識框架。??

面經分享

我是那邊的朋友幫忙內推的,簡歷通過後電話約的面試。

當時約的是 10:30 的面試時間,我提前了二十機分鐘左右到達公司樓下。公司樓層有點複雜,花了十分鐘左右到目的地(約的食堂)。

第一輪是兩個面試官輪流問問題。第一面大約面了一個小時到了 11:40差不多到飯點了。面完我就準備走了,兩個面試官要我等會,然後就直接去叫二面的面試官了,我就在食堂看大家吃飯。

大約等了十幾分鍾第二面的面試官把我叫到了 31 樓。

也是兩個面試官,輪流問了大概一個小時。二面後就差不多到了下午一點,面試官帶我去食堂吃了個飯,然後幫我約了下午兩點的 HR 面。

整個流程下來挺爽的,總共三輪面試,兩輪技術面(都是2個面試官),一輪 HR 面。

技術一面

  1. 常 見 的 Activity 類 型+描述Activity 生命週期
    Activity 從建立到銷燬有多種狀態,從一種狀態到另一種狀態時會激發相應的回 調方法,這些回撥方法包括:onCreate onStart onResume onPause onStop onDestroy 其實這些方法都是兩兩對應的,onCreate 建立與 onDestroy 銷燬; onStart 可見與 onStop 不可見;onResume 可編輯(即焦點)與 onPause。。

  2. 兩個 Activity 之間跳轉時必然會執行的是哪幾個方法?
    一般情況下比如說有兩個activity,分別叫A,B,當在A裡面啟用B元件的時候, A 會呼叫 onPause()方法,然後 B 呼叫 onCreate() ,onStart(), onResume()。 這個時候 B 覆蓋了窗體, A 會呼叫 onStop()方法. 如果 B 是個透明的,或者 是對話方塊的樣式, 就不會呼叫 A 的 onStop()方法。

  3. 系統是怎麼幫我們啟動找到桌面應用的
    我說通過意圖,他說怎麼找到是哪個意圖? 我說 PMS 會解析所有 apk 的 AndroidManifest.xml ,如果解析過會存到 package.xml 中不會反覆解析,PMS 有了它就能找到了。

  4. 橫豎屏切換時 Activity 的生命週期
    跟清單檔案裡的配置有關係。
    不設定 Activity 的 android:configChanges 時,切屏會重新呼叫各個生 命週期預設首先銷燬當前 activity,然後重新載入。
    設定 Activity android:configChanges="orientation|keyboardHidden|screenSize"時,切 屏不會重新呼叫各個生命週期,只會執行 onConfigurationChanged 方法。 通常在遊戲開發, 螢幕的朝向都是寫死的。

  5. 螢幕適配的處理技巧都有哪些
    手機自適應主要分為兩種情況:橫屏和豎屏的切換,以及解析度大小的不同。

  6. 網路優化的問題
    同一個 ip 同一個埠能複用一個連線,後面問道了 http 2.0 的多路複用,我說一個 tcp 可以多個請求,原理呢?我說不知道。後面讓我說了下 https 。

  7. 快排和遞迴

  8. 陣列和連結串列的區別

技術二面

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知識點、常見演算法題彙總。)