1. 程式人生 > 其它 >ndk開發環境,4面阿里拿到P7Offer,順利通過阿里Android崗面試

ndk開發環境,4面阿里拿到P7Offer,順利通過阿里Android崗面試

  • 前言

筆者看了一些NDK的專案。一些教程不是HelloWord就是直接整FFmpeg或OpenCV,可謂一個天一個地,而且目錄結構和Android3.5的預設結構並不是太一致,一直沒找到什麼合心的文章。故寫此文連線這天地,來總結一下在NDK開發之前你應知道的東西。


  • 在此之前,先劃分三類人,如果不認清自己是什麼角色就去玩NDK,你會很糟心:

user : 純粹.so連結庫使用者(伸手黨)
creator : 純粹ndk開發者,創作.so連結庫(創作家)
designer : 在現有的.so上自己開發.so連結庫實現特定功能(程式設計師)

這是我印象深刻的一道題,很明顯它是我的第一次,那時我去一家公司(暫時叫它T公司吧)面試外派到韓國三星的工作機會。T公司的面試官是一個叫Bely架構師,顯然那個時候Android開發是稀缺資源,知道Service那都不得了了,當然Bely也沒打算為難我(必竟也工作4年多了,人長得也不錯),我輕鬆對答:

Service是一個專門在後臺處理長時間任務的Android元件,它沒有UI。它有兩種啟動方式,startService和bindService。

你猜得沒錯,Bely緊接著問我:這兩種啟動方式的區別。

startService只是啟動Service,啟動它的元件(如Activity)和Service並沒有關聯,只有當Service呼叫stopSelf或者其他元件呼叫stopService服務才會終止。
bindService方法啟動Service,其他元件可以通過回撥獲取Service的代理物件和Service互動,而這兩方也進行了繫結,當啟動方銷燬時,Service也會自動進行unBind操作,當發現所有繫結都進行了unBind時才會銷燬Service。

這應該是比較關鍵的區別了,在面試前我剛剛用Serivce做過一個音樂播放器。幾年後,我在深圳面試過很多人,他們中有60-70%的人沒有使用Service的經驗,讓我一度感覺得深圳這座城市做Android開發的比較浮躁。因為這兒工作機會太多了,初級的開發者都比較急功近利,不需要在自己身上下太多的功夫也可以找到工作(當然這是片面的認識)。

當然還有其他的區別,如兩種呼叫對Service生命週期函式影響,面試官也可以就這個問題展開一下。

當我遇到面試者知道怎麼使用Service,也如多年前的我可以自如的答出startService和bindService的區別時,我一般會多問一句:

Service的onCreate回撥函式可以做耗時的操作嗎?

很多人都會說:可以。

原形畢露,他前面的回答只是在面試前預習了一下面試題而已。如果知道Service的onCreate是在主執行緒(ActivityThread)中呼叫的,耗時操作會阻塞UI,我一般再接著問:

如果需要做耗時的操作,你會怎麼做?

問題便這樣展開了,一個人是否真正懂得原理會靈活運用,一下子便能看出來。 當面試者回答到執行緒和Handler方式時,我會再問一下對方:

是否知道IntentService,在什麼場景下使用IntentService?

這也是面試官要看的點,真正的專案需要一個開發人員對某個問題有一定的深度,也需要對整個Android的知識點有一定的廣度。深度代表這個人對問題認真對待有鑽研的精神,廣度代表這個人在面對同一個問題時,會更容易從多種可行的方案中選出最合適的一種。

Service的實際專案中一直被很多人忽略,為什麼我一再強調Service很重要,我們來看看,如果對Service完全無知會在工作中遇到什麼問題。

場景:如果一個應用要從網路上下載MP3檔案,並在Activity上展示進度條,這個Activity要求是可以轉屏的。那麼在轉屏時Actvitiy會重啟,如何保證下載的進度條能正確展示進度呢?

沒有Service概念的人,一般想出來的方案如下:

  1. 在轉屏前將進度快取,轉屏後再讀出來。
  2. 使用android:configChanges設定,讓轉屏時Activity不銷燬和重建。

針對第1個方案,我會繼續問他將進度值存在哪裡? 轉屏的過程中,我們知道Activity的重建算是比較耗時的,會可能會有幾百毫秒以上,那麼這時候下載執行緒仍然在工作,進度肯定和儲存時的進度不一致了,如何處理這個問題呢?

第2個方案,大家可以自己展開思考,實際的專案中可能會需要額外做一些事情來處理ContentView的橫豎佈局的問題。

如果使用Service來解決這個問題,看似是比較完美的,不過就會涉及Activity(UI)和Service的互動問題,這個我們以後再討論。

最後

今天關於面試的分享就到這裡,還是那句話,有些東西你不僅要懂,而且要能夠很好地表達出來,能夠讓面試官認可你的理解,例如Handler機制,這個是面試必問之題。有些晦澀的點,或許它只活在面試當中,實際工作當中你壓根不會用到它,但是你要知道它是什麼東西。

最後在這裡小編分享一份自己收錄整理上述技術體系圖相關的幾十套騰訊、頭條、阿里、美團等公司2021年的面試題,把技術點整理成了視訊和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,這裡以圖片的形式給大家展示一部分。

還有?高階架構技術進階腦圖、Android開發面試專題資料,高階進階架構資料 幫助大家學習提升進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習。

Android學習PDF+架構視訊+面試文件+原始碼筆記領取

【Android核心高階技術PDF文件,BAT大廠面試真題解析】

【演算法合集】

【延伸Android必備知識點】

【Android部分高階架構視訊學習資源】

Android精講視訊領取學習後更加是如虎添翼!進軍BATJ大廠等(備戰)!現在都說網際網路寒冬,其實無非就是你上錯了車,且穿的少(技能),要是你上對車,自身技術能力夠強,公司換掉的代價大,怎麼可能會被裁掉,都是淘汰末端的業務Curd而已!現如今市場上初級程式設計師氾濫,這套教程針對Android開發工程師1-6年的人員、正處於瓶頸期,想要年後突破自己漲薪的,進階Android中高階、架構師對你更是如魚得水,趕快領取吧!