寫在前面
四月面臨了人生第一次比較重大的變化:現在的公司因為融資不利,收回了我的正式offer。這一波很傷…
所以在得知訊息之後,接下來差不多一個月的時間裡,自己開始了的頻繁的面試之旅。其中有導師/朋友給內推的,也有自投的….
這篇文章最初是在簡書上發的,後來越來越覺得掘金好用,所以會逐步把文章轉到掘金上釋出。我的簡書
沒想到關注的同道中人們這麼多,所以準備逐步把我對這些題目的理解寫出來,還望各位大佬們可以評論區指正,互相學習。
我們基友團其他朋友的文章:
面試記錄
首先,我是一個雙非本科的大四狗,一直在搞安卓,自學一年多的時間,然後有半年多的實習經歷…安卓真好玩,就是肚子有點餓~
接下來,按時間的順序的記一記我這一個月以來所經歷的面試。
(現在已經畢業參加工作了,目前就職人人車,做客戶端開發。)
百度:社招(導師內推)
一面:
1、四種啟動模式,結合具體情況分析。
答案更新:這個就不多說,現在沒人想聽概念性的答案,一般都會結合實際場景,去考察對singleTask,singleTop,singeInstance的理解
2、onNewIntent被回撥,Intent內容是最新的麼?那其他回撥裡的Intent是最新的麼?
答案更新:在onNewIntent方法中的Intent是最新,但是其他回撥裡不是。如果想讓其他回撥也是最新的intent,需要在onNewIntent裡,setIntent(),對最新的intent進行賦值。
3、Service的start和bind的區別?多次start和bind的生命週期情況?start和bind都呼叫了會怎麼樣?
答案更新:區別就不多說了。首次啟動呼叫onCreate(),再次啟動只會重複呼叫onStartCommand;bind方式不會呼叫onStartCommand,並且onBind()也只會呼叫一次。重複bind和unbind,並不會重複出發onBind和onUnBind,但是onServiceConnect和onDis…會重複呼叫。
start和bind都被呼叫,必須unbind和stop都呼叫才會徹底kill掉。
4、常見的記憶體洩漏/記憶體溢位?怎麼解決?
答案更新:可以使用LeakCanary或者Androidstudio自帶的工具進行分析。這類文章比較多。
常見的記憶體洩漏,套路性也是比較常見的:1、內部匿名類Handler做耗時操作。因為會持有外部引用,尤其是Activity,如果耗時操作沒有結束,而Activity銷燬,那麼此時Activity是沒辦法被gc回收掉的。2、一些Listener沒有其實的remove掉,其實和Handler的原因很歷史。3、還有一些需要unRegister沒有unRegister。等等
5、多程式application會初始化幾次?怎樣進行跨程式通訊?SP屬於檔案,為什麼不能跨程式?聊一下對Binder機制的瞭解?
答案更新:每一個程式都會初始化一個Application。跨程式可以使用AIDL,或者廣播,資料庫,第三方的檔案等操作。SP雖然是存在xml檔案裡,但是系統對SP進行了快取操作,因此更新不及時,所以多程式並不安全。
Binder機制…比較複雜,各位看官可以搜一搜對應的文章。
6、能否在子執行緒更新UI?那為什麼onCreate中可以更新UI?簡單聊一下View的繪製過程?
答案更新:子執行緒檢查方法checkThread()在ViewRootImpl中被呼叫,而ViewRootImpl在handleResumeActivity時被新增,也就是對應的是onResume()。所以也就是說在onCreate時根本不會執行checkThread()方法。
7、聊一下Handler機制?為什麼loop是死迴圈不會阻塞主執行緒?postDelayed怎麼做到延時的?
答案更新:關於這個問題,可以看這個答案:https://www.zhihu.com/question/34652589
8、手寫一個連結串列翻轉吧。
答案更新:思路有很多,如果不要求空間複雜度,可以使用棧,將連結串列一個個push到棧中,然後逐個pop,就把連結串列翻轉了。
寫完連結串列翻轉,一面就結束了。整體來看難度適中吧。面試官沒有特別狠的追問。
二面:
二面剛開始沒怎麼聊技術,問一問我是一個應屆生怎麼參與社招了。我如實回答了一下,又扯了扯其他的。然後大部分時間是在聽我說。
1、聊一下你看過的原始碼吧?EventBus、OkHttp、屬性動畫。
2、你說你擅長自定義UI,聊一聊吧?
3、有沒有做過的什麼效果?看過一些後問怎麼實現的?
二面沒怎麼發問,就到了三面….
三面:
三面就問了一下TCP和UDP的區別,執行緒和程式的區別。
然後就很直白的說,前倆輪面試對你評價還可以。但是你沒有正式的工作經驗,社招肯定是不行,校招又已經過去了,我只能給你實習offer。但是我還得去問一下HR那邊….
不得不承認,這次面試的結果給的挺快。離開百度科技園之後,還沒到家。HR那邊就打來電話…..總結下來就是連實習offer也不能發…手動攤手.png
大疆(自投,實習)
因為崗位是實習,所以整體感覺難度一般。
一面:
面試官應該是主要做UI的,所以問的問題大多數和UI相關
1、onMeasure() / onLayout() / onDraw() 區別?Measure的三種模式?Canvas有沒有邊界,View的邊界怎麼確定?
2、事件分發的過程?onTouch和onClick的先後順序?onTouch和onTouchEvent返回true是什麼情況?如果在onTouch中的DOWN返回了true,MOVE返回false會接到後續的事件麼?
3、瞭解什麼設計模式?日常開發用到過麼?
4、手寫倆條連結串列合併
二面:
二面並沒有追問我什麼,大部分時間再根據我的簡歷,讓我自己說…
大疆的效率還是比較高的。我中午吃飯的時候,HR給了我反饋說可以過來實習,但是我們目前並沒有校招的hc,所以不能給你正式的身份…所以我並沒有選擇過去實習。
樂視(自投,校招)
筆試:
筆試沒啥特別的東西,都是一些java基礎,安卓基礎,幾道中規中矩的演算法。
一面:
1、四種啟動模式?寫了幾個情況,讓我說back鍵的情況?
2、LayoutManager和MeasureSpec之間的關係?
3、堆排的思想?快排的時間複雜度?手寫一下快排?
4、Handler機制?
5、Service即start又bind,怎麼才能徹底停止?IntentService怎麼實現的?
6、Aidl中Stub和Proxy的區別?聊一聊對Binder的理解?
7、手寫一個有序陣列的合併?
二面:
二面整體就是根據我的簡歷,問了問。讓我聊一聊看過的OkHttp的原始碼。
手寫了倆個演算法:
1、用最小的時間複雜度判斷單連結串列是否有交點。
2、手寫二叉樹的按層級進行遍歷。
HR面:
談人生談理想…
樂視的效率不算高…一週後給了答覆,可以給offer…不過鑑於樂視最近的情況…再考慮吧
知乎
知乎算是一次體驗比較差的體驗…一面就讓我走了,而且我都不知道啥原因。手動攤手.png
一面:
1、聊一聊ArrayList原始碼?什麼時候初始化陣列?怎麼擴容?擴容時使用什麼樣的方式增大陣列?
2、聊一聊HashMap原始碼?怎麼擴容?原始碼的hash是怎麼保證平均雜湊的?hash衝突後,使用什麼方式解決?插入的時候在頭結點,還是尾結點?key為空的處理?
3、java中的序列化和安卓中的序列化
4、聊一聊安卓中特有的集合
5、執行緒安全的Map有什麼?使用什麼樣的方式保證執行緒安全?分段鎖和重入鎖的區別?
6、synchronized和Lock的區別?
7、Measure的三種情況?
8、切圓角有幾種方式?(必須吐槽這個題…)
9、Handler機制?postDelayed怎麼處理的?
10、演算法:翻轉一個int型的大數
一面結束….就沒有然後了…
尾聲
不得不承認4月份校招真的不好找….而且由其對我這種雙非,體驗真的是很差….唉,難啊….
如果各位看官感覺有收穫,不妨點下贊,給個關注哦~~~
本菜開源的一個自己寫的Demo,這個專案拆解並組合了很多業務。目的在於遇到類似業務,可以快速的ctrl+c/v。希望能給Androider們有所幫助,水平有限,見諒見諒…
github.com/zhiaixinyan…
這是一個主推面試踩坑的公眾號!
我們是一個應屆生學習小組,這些分享我們會堅持下去,一定會。這條路大家都走的太辛苦,一起互相鼓勵,一起並肩同行!
不感興趣的就直接無視掉吧
因為身邊的同學從事網際網路相關職業的比較多,並且大家閒時聊天時總會吐槽找工作有很多坑,所以打算把身邊同學找工作的經驗,統統收集起來。提供給想從事這方面同學,希望圈內好友可以共同進步,共同少踩坑。