背景
首先我是個菜雞,工資也低的一筆。
剛畢業時候在一家國企上班干 app 開發,干了快兩年的時候,跳槽到了一家偽大廠干安全。投了不少簡歷都沒有回音,只有這加偽大廠要我就來了。當時說好了會接觸一些底層的東西,然而平時也就寫 python 腳本,逆向,android 上寫了一些風控的東西,感覺有點 low,工資也不高,當初沒敢多要,hr 給的比我要的還高。剛剛 leader 談了談明年的規劃,現在想跳槽。
現在也是很尷尬,原來 app 開發的東西也忘了不少,然后其實我想干 framework 開發,自己對 ams,pms 還算挺了解的,平時也根據他們原創了一點微小的解決方案。最近開始 fork 一個 aosp,買個 pixel 改改刷刷練習一下。
理想畢竟是理想,Android 低端不好混,沒什么經驗跳到 framework 上去感覺也是挺難的,跳回 app 開發又不甘心,現在的狀態貌似是干了快 3 年沒有特別精通的東西。最近鬧的裁員,我司也是其中之一。加薪怕是沒戲了,然而生活還要繼續,跳槽避無可避。
背景
面是是上海的Android leader崗位,周日一輪面試,自我感覺答的都還不錯。
結果收到郵件面試結束了,說什么"你優秀的學識和能力給我們留下了深刻的印象!經過對你綜合情況的仔細評估,并經過與崗位需求進行謹慎匹配和權衡之后, 非常遺憾,我們這次沒有和你達成合作。但你的信息已經被錄入到公司人才庫"。意思就是掛了唄。
后來打電話問hr,沒跟我說原因。然后面試過程中,有一點奇怪的地方,面試前面試官跟我說我面的而這個崗位有點奇怪,他也沒跟我說哪奇怪。
面試過程
下面是面試官提的一些問題:
面試官:點擊一個圖標到這個應用啟動的全過程(前面是項目經驗沒啥好說的)。
回答:
點擊圖標后通過startActivity遠程調用到ams中,ams中將新啟動的activity以activityrecord的結構壓入activity棧中,并通過遠程binder回調到原進程,使得原進程進入pause狀態,原進程pause后通知ams我pause了。ams再根據棧中activity的啟動intent中的flag是否含有new_task的標簽判斷是否需要啟動新進程,啟動新進程通過startProcessXXX的函數。啟動新進程后通過反射調用ActivityThread的main函數,main函數中調用looper.prepar和lopper.loop啟動消息隊列循環機制。
最后遠程告知ams我啟動了。ams回調handleLauncherAcitivyt加載activity。在handlerLauncherActivity中會通過反射調用Application的onCreate和activity的onCreate以及通過handleResumeActivity中反射調用activity的onresume。一個應用就此啟動。
面試官:Retrofit原理。
回答:
主要是通過動態代理將接口直接轉換成代理對象。動態代理和靜態代理的區別,動態代理直接在虛擬機層面構建字節碼對象。
面試官:View自定義的流程,實現哪些方法。
回答:
實現OnMeasure,onlayout,onDraw。
繼續問“onMeasure中會用哪些方法?”(我覺得這題可能沒大好,我是想回答的詳細點的,結果還沒打到點他就說好,繼續下一題,不知道是認可了還是覺得我答的過于啰嗦,如果覺得太啰嗦可以提出來啊。。。)
我回答onMeasure 中傳入兩個int數值,這個數值32位,前2位表示模式,后30位表示寬度、高度。這是外表容器給內部view的限制。
一種模式是容器給你多大的值,你就是多大的值(match_parent),
第二種,容易給內部view多大的空間,內部view不用管,是多大就是多大。
第三種,容器給子view多大的空間,和子view自己算出來的占用空間,選擇小的那個(wrap_content)。說到這我正打算說onMeasure會調用measureChildwithmargin類的函數,他說好了,然后下一題。
面試官:怎么設計app的。
回答:
基本都用的mvc架構,曾經有個項目使用mvp。還有其它一些整體設計上的問題,很零碎,但都答的差不多。
面試官:(最后是算法題,面試官的表述不是很清晰,所以開始沒理解他的意思,我歸納一下題目)
有1,3,7三個面值的金錢,現在要取n元。怎么取個數最少。(n是已知數) 意思就是 1 * a+3 * b+7 * c=n 什么情況(a+b+c)最小。
當然這是我自己歸納出來的,他開始的描述讓我想哭。
回答:
開始腦子有點沒反應過來,把它當邏輯題做了,想了5分鐘后才反應過來,這是編程題啊。遍歷呀, a的取值范圍(0n)b的取值范圍(0n/3) c的取值范圍(0~n/7) 遍歷取最小值。當然這種情況效率并不高,我當時也和面試官說了,沒太考慮效率,如果需要可以再改。感覺他也認可,思路對就行了。 其它一些零碎的問題沒印象了,主要就這些。
我想大家應該看過很多分享面試成功的經驗,但根據幸存者偏差的理論,也許多看看別人面試失敗在哪里,比如我這次的掛了的面試,大家可以對比下,發現一些自己回答的話會有哪些問題,這樣對自己之后的面試才更有幫助。
最后
我這里整理了一份完整的學習思維以及Android開發知識大全PDF,有需要的同學可以自行領取。
資料獲取方式:Android完整知識學習體系路線
當然實踐出真知,即使有了學習線路也要注重實踐,學習過的內容只有結合實操才算是真正的掌握。
com/doc/DSkNLaERkbnFoS0ZF)**
當然實踐出真知,即使有了學習線路也要注重實踐,學習過的內容只有結合實操才算是真正的掌握。