2018屆android校招面試總結:百度,大疆,樂視,知乎(逐步更新答案)

MDove發表於2019-03-04

寫在前面

四月面臨了人生第一次比較重大的變化:現在的公司因為融資不利,收回了我的正式offer。這一波很傷…
所以在得知訊息之後,接下來差不多一個月的時間裡,自己開始了的頻繁的面試之旅。其中有導師/朋友給內推的,也有自投的….

這篇文章最初是在簡書上發的,後來越來越覺得掘金好用,所以會逐步把文章轉到掘金上釋出。我的簡書

沒想到關注的同道中人們這麼多,所以準備逐步把我對這些題目的理解寫出來,還望各位大佬們可以評論區指正,互相學習。

我們基友團其他朋友的文章:

Web基友
Java基友

面試記錄

首先,我是一個雙非本科的大四狗,一直在搞安卓,自學一年多的時間,然後有半年多的實習經歷…安卓真好玩,就是肚子有點餓~
接下來,按時間的順序的記一記我這一個月以來所經歷的面試。
(現在已經畢業參加工作了,目前就職人人車,做客戶端開發。)

百度:社招(導師內推)

一面:

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…


這是一個主推面試踩坑的公眾號!

我們是一個應屆生學習小組,這些分享我們會堅持下去,一定會。這條路大家都走的太辛苦,一起互相鼓勵,一起並肩同行!

不感興趣的就直接無視掉吧

因為身邊的同學從事網際網路相關職業的比較多,並且大家閒時聊天時總會吐槽找工作有很多坑,所以打算把身邊同學找工作的經驗,統統收集起來。提供給想從事這方面同學,希望圈內好友可以共同進步,共同少踩坑。

個人公眾號

我們基友團其他朋友的文章:

Web基友
Java基友

相關文章