- 相關(guān)推薦
Android開發(fā)工程師面試試題
很早就想寫一下面經(jīng)總結(jié)一下自己最近的經(jīng)歷,然而面完以后人一下子就懶了,緊張不起來(lái)了,一拖就拖到了十一,如果來(lái)不及對(duì)今年找工作的同學(xué)有幫助,那對(duì)來(lái)年春招或者更小一些的學(xué)弟學(xué)妹有所參考也是好的,還是寫一下吧。下面是小編為大家收集的Android開發(fā)工程師面試試題,歡迎閱讀與收藏。
一、網(wǎng)易內(nèi)推面試(電話一面、杭州二面、跪)
其實(shí)呢,內(nèi)推有兩大好處,一是不用筆試,二嘛,電話面試,發(fā)揮余地就很強(qiáng)了(我不細(xì)說(shuō)了 大家都懂的),而且一般不會(huì)問復(fù)雜的算法,就算問也只會(huì)問個(gè)思路,對(duì)我這種算法白癡來(lái)說(shuō)簡(jiǎn)直是贊到不行。
一面:
電話面,中午12點(diǎn)整,面試官好像很著急去吃飯的樣子。說(shuō)話特別快,而且問問題一旦聽?zhēng)讉(gè)字感覺你像是知道,馬上就打住問下一個(gè)問題,一共問了15分鐘,20問題,java部分問比較基礎(chǔ),Android稍微問到了內(nèi)核。
java部分:
1、jvm分區(qū),GC(基本上后續(xù)所有地方面試都問了,基礎(chǔ)中的基礎(chǔ))
2、volatile和Synchronized區(qū)別
3、原子性、可見性的概念
4、進(jìn)程與線程的區(qū)別
5、線程池的概念、好處、常見的線程池舉例
6、Callable和Runnable的區(qū)別
7、HashMap的內(nèi)部原理
8、ConcurrentHashMap原理
Android部分:
1、Android的存儲(chǔ)方式
2、Handler、Lopper、MessageQueue
3、AsyncTask 為什么java已經(jīng)有線程池的實(shí)現(xiàn)了,還要繼續(xù)使用AsyncTask,AsyncTask相對(duì)于java自帶的線程池的好處
4、onTouch事件的處理機(jī)制
5、說(shuō)一下MVC以及其在Android中的應(yīng)用
6、說(shuō)一下OOM以及你怎么解決的
7、了解Android的Framework么
8、說(shuō)一下一個(gè)Android APP從點(diǎn)擊打開開始,是怎樣展示在用戶面前的(Zygote、Ams、Wms等)
網(wǎng)絡(luò)基礎(chǔ)部分:
1、TCP、UDP的區(qū)別
2、TCP的三次握手、四次揮手
3、HTTP的特點(diǎn)
4、HTTP與HTTPS的區(qū)別
二面:
杭州現(xiàn)場(chǎng)面,一個(gè)月了路費(fèi)還沒報(bào)銷回來(lái)。現(xiàn)場(chǎng)面是一個(gè)看起來(lái)很囂張的面試官,看你的眼神從頭到尾都充滿了鄙視,從一開始的感覺就很不好。
1、viewpager里面只能嵌套view嗎 可不可以嵌套Activity
2、假如viewpager里面的每一頁(yè)都有有很大數(shù)據(jù)量的內(nèi)容,那么在快速的左右滑動(dòng)時(shí),如果出現(xiàn)了內(nèi)存被回收的情況,如何處理 假如出現(xiàn)了OOM,怎么處理
3、同上情況,使用Fragment,又當(dāng)如何?與viewpager有什么區(qū)別
4、ExpandableListView的Adapter怎么寫
5、在ListView的每個(gè)item中如果可能出現(xiàn)的view都不一樣,如何處理?動(dòng)態(tài)獲取view種類數(shù)量的話是不是就不能使用viewHolder進(jìn)行優(yōu)化?固定顯示view如果不存在該種view就不顯示的方法是否太耗內(nèi)存
6、ListView的Adapter的getView具體是什么機(jī)制?
7、Activity之間傳遞大量的數(shù)據(jù)用什么方法
Binder
Bundle不夠大
Socket 在同一應(yīng)用中沒必要使用
共享內(nèi)存
static變量——同一應(yīng)用中static變量如何控制,會(huì)不會(huì)并發(fā)出問題,如果Activity由于內(nèi)存不足被kill掉,再重啟的時(shí)候static變量的值還可靠嗎:設(shè)置專門的訪問類,進(jìn)行讀寫控制,以及Activity重啟后的初始化工作。
8、SQLite在使用時(shí) 假如ActivityA是用于修改SQLite,ActivityBCDEF。是用來(lái)展示SQLite的內(nèi)容,如何在修改SQLite的同時(shí)使得BCDEF...都立刻獲得最新的數(shù)據(jù)?SQLite有沒有類似于ContentObserver的這么一種監(jiān)視類可以監(jiān)聽到SQLite內(nèi)容的改變?如果廣播通知所有類,那么廣播可以攜帶多大的數(shù)據(jù)?
9、假設(shè)把一個(gè)ActivityB向右滑動(dòng)可以回到上一個(gè)ActivityA,B漸漸透明,A漸漸清晰,要怎么編寫頁(yè)面?說(shuō)說(shuō)你對(duì)android:theme的理解,說(shuō)說(shuō)你對(duì)alpha值的理解
10、ListView在數(shù)據(jù)量很大圖片很多的情況下怎么優(yōu)化?假如一個(gè)圖片,輕輕的向上滑動(dòng)一丟丟,那么需要重繪嗎?(什么鬼。)
11、詳細(xì)展開說(shuō)一下所有LaunchMode的應(yīng)用場(chǎng)景
假如A-》B-》C,想讓C后退直接到A,使用什么樣的intentflag?
假如A-》B-》C,C使用singleTask,C后退,后退到什么地方呢?
12、在全屏顯示高清大圖的時(shí)候,網(wǎng)速慢的情況下如何顯示?漸進(jìn)式顯示是怎么做到的?如果想顯示下載進(jìn)度圈圈,該如何實(shí)現(xiàn)?
13、AsyncTask在4.x以后有什么改變?怎樣改回并發(fā)執(zhí)行好多個(gè)?如果一個(gè)AsyncTask結(jié)束取得結(jié)果之前Activity就因?yàn)閮?nèi)存原因被Destroy掉了,那會(huì)有什么情況發(fā)生?會(huì)內(nèi)存泄露嗎?會(huì)空指針嗎?需要在Activity徹底死掉之前把AsyncTaskcancel掉嗎?如果沒有cancel掉,然后Activity重啟了,那這個(gè)Asynctask又當(dāng)如何呢?
14、AsyncTask內(nèi)部實(shí)現(xiàn)機(jī)理 與Thread+Handler有什么不同
15、說(shuō)一下HandlerThread
16、你的APP里,是每個(gè)Activity都有一個(gè)Handler呢還是所有Activity共享一個(gè)Handler
17、基于事件監(jiān)聽、基于事件回調(diào) 假如一個(gè)touch事件發(fā)生,那是監(jiān)聽先收到還是onTouch函數(shù)先收到
18、假如你要記錄ListView滾動(dòng)到的位置,要記錄什么信息,view怎樣獲得坐標(biāo)信息
19、說(shuō)一下canvas
20、dialog和popupwindow的應(yīng)用場(chǎng)景 如果popupwindow在沒有dismiss的時(shí)候Activity finish了,會(huì)出現(xiàn)什么情況?
21、了解過什么三方庫(kù)?為什么不用三方庫(kù)?
22、你覺得安卓的未來(lái)在哪里?你自己為什么都用IOS了?
23、Service和推送通知,通知有沒有可能出現(xiàn)有推送但是通知欄收不到通知?service被kill掉會(huì)如何?如何保證service不被kill掉
24、了不了解Scrollview scrollview和ListView有什么相似點(diǎn) 有什么不同 那如果這兩個(gè)是繼承關(guān)系 那應(yīng)該是誰(shuí)繼承誰(shuí)?
25、dp sp px各自的應(yīng)用場(chǎng)景是什么 換算關(guān)系是什么 使用sp的時(shí)候如果調(diào)整系統(tǒng)字體,顯示字體會(huì)跟著調(diào)整嗎?
26、gallery為什么被廢棄?為什么Google推薦使用viewpager代替gallery呢?有什么改進(jìn)?
27、handler.postAtTime不是延時(shí)post么 那handler怎么延時(shí)處理Message
總結(jié):二面問的很偏應(yīng)用,面試官應(yīng)該是開發(fā)網(wǎng)易新聞,直接不看我的APP,拿著網(wǎng)易新聞的APP各種問我,你看我這里是這樣的,你說(shuō)一下我是怎么實(shí)現(xiàn)的,我怎么知道你是怎么實(shí)現(xiàn)的啊真是的。 之前為準(zhǔn)備校招相對(duì)基礎(chǔ)準(zhǔn)備的比較多, 應(yīng)用僅限于使用過的比較熟練,其他沒接觸過的就呵呵了。最讓我生氣的是,面試官居然問我,身為一個(gè)女生,你覺得你做Android開發(fā),有未來(lái)嗎?當(dāng)時(shí)真是氣死我了,做Android的女生怎么就沒未來(lái)了。
這一面跪的很慘,面完回來(lái)就把問題全都記錄下來(lái)而且每個(gè)問題都專門找了詳細(xì)的解答,雖說(shuō)面完這一面回來(lái)著實(shí)也是消沉了好幾天,期間蘑菇街打來(lái)內(nèi)推電話我還直接跟人家說(shuō)改天,就是不想面了,不過后來(lái)振作回來(lái)以后也發(fā)現(xiàn)這一次挫折真的是一次相當(dāng)寶貴的經(jīng)驗(yàn)。
二、美團(tuán)(拿到offer)
美團(tuán)是一口氣三面面完的,其實(shí)當(dāng)時(shí)三面面完的人特別多,到最后收到offer的并不是那么多,感覺決定權(quán)基本在三面面試官那里吧,這種也沒什么可說(shuō)的。一二面面試官那里都是有一張表,每個(gè)面試官都要打分,我瞄了一下,有編程能力、操作系統(tǒng)。其他沒看到。分?jǐn)?shù)有2.5有3據(jù)說(shuō)有人還有3.5的。是美團(tuán)讓我找到了之后面試的總套路,最后說(shuō)。
一面,40分鐘,除去項(xiàng)目介紹等,貌似并沒有問什么特殊的,我提到我平時(shí)主要做界面,所以后面的問題大多與界面相關(guān) :
ListView的優(yōu)化
OOM的處理
GC原理
循環(huán)引用的問題
引用計(jì)數(shù)與可達(dá)性算法
LaunchMode 這一點(diǎn)我之前也是簡(jiǎn)簡(jiǎn)單單準(zhǔn)備的有四種,每種什么意思,然后網(wǎng)易讓我發(fā)現(xiàn)了,大家都知道這些,重點(diǎn)是要知道如何應(yīng)用。美團(tuán)這里問到的是我A打開了B,B打開了C,C的右上角有一個(gè)叉叉,那我怎樣做到使我點(diǎn)擊C的叉叉,就直接關(guān)閉了BC回到A,PS,不可以用startActivityForResult
我提到我的APP中使用到了ViewPager,面試官問,假如,ViewPager里面一頁(yè)的寬度超過了屏幕的寬度,ViewPager是怎么顯示的,這還真沒試過。
然后問到了app是怎么通知Android系統(tǒng)頁(yè)面有刷新的,還有view的measure函數(shù)之類的,進(jìn)而討論到了View樹,然后編程就讓我寫View樹。
編程題是,因?yàn)樵谟械男阅鼙容^差的機(jī)型上,view樹深度過大會(huì)造成crash,那么我想做一個(gè)提醒,進(jìn)入APP后首先求出這個(gè)APP的最大View樹深度,如果深度過大則進(jìn)行提醒。其實(shí)就是二叉樹的最大深度只不過換成了View樹嘛,并沒有什么難度。
二面,30分鐘,除去項(xiàng)目介紹等沒有什么特殊的,期間突然看到一面面試官在操作系統(tǒng)那里很可愛的寫了一句 忘了問了。
主要問了ListView的優(yōu)化、HTTP與HTTPS、進(jìn)程與線程,編程題是給定一個(gè)char,然后翻轉(zhuǎn),其實(shí)就是翻轉(zhuǎn)字符串啦,然后進(jìn)一步的就是給出一個(gè)句子,翻轉(zhuǎn)這個(gè)句子但是不翻轉(zhuǎn)其中的單詞,就是劍指offer那個(gè),也很簡(jiǎn)單。
然后問了一個(gè)智力題,說(shuō)有十層樓,每層樓有一個(gè)鉆石,鉆石大小不一,沒有規(guī)律,電梯只上不下,只能選一層下電梯,拿走該層鉆石,問什么樣的策略可以盡量大的拿到鉆石。
三面,20分鐘吧,基本聊人生,跟技術(shù)有關(guān)的人生,并沒有什么說(shuō)的。
總結(jié):其實(shí)這三面中,一面是答得最不好的,因?yàn)檎f(shuō)了太多我平時(shí)是做界面的,面試官就把界面問到了比較深,然而我并沒有準(zhǔn)備過各種view的繪制方面的知識(shí),所以答的不是那么的好,也是一面讓我找到了我以后面試的總套路,一是要誘導(dǎo)面試官到你擅長(zhǎng)的方面去,我這里就是典型的誘導(dǎo)錯(cuò)誤==自己給自己挖坑了,所以以后尤其是騰訊,我就使用了另一套引導(dǎo)說(shuō)辭。二是要逗面試官笑?赡芎軟]邊。但是我后續(xù)的各種面試基本上都是跟面試官說(shuō)說(shuō)笑笑的過的,好處一是面試官本身面試很無(wú)聊,能笑一下放松心情自然對(duì)你的印象好一些,二是在說(shuō)說(shuō)笑笑中,體現(xiàn)出來(lái)了你的溝通交流能力,這也是拿到offer以后,美團(tuán)的面試官所說(shuō)的,覺得我軟實(shí)力很強(qiáng),可能就來(lái)源于這一點(diǎn)。三是說(shuō)說(shuō)笑笑扯閑話,時(shí)間一下就過去了,面試官對(duì)于每個(gè)應(yīng)聘者,時(shí)間大約都是有一個(gè)限度的,扯廢話時(shí)間越長(zhǎng),真正考察你的時(shí)間就越短,出錯(cuò)的幾率就越小。
三、百度(面完三面,居然沒消息了,呵呵呵)
百度給我的最大感覺是,重編程,重算法,面經(jīng)都寫不了多少因?yàn)楦径紱]問多少,就是寫寫寫。
一面面試官比我大不了幾歲,上來(lái)就問我,你們學(xué)校好有意思啊,面了這么多你們學(xué)校做移動(dòng)端的,居然都是通信學(xué)院的,你們學(xué)校的計(jì)算機(jī)學(xué)院的人呢?然后就扯開了,從我們學(xué)校的培養(yǎng)人才的方式扯到了阿里的擁抱變化,然后扯到了阿里的股價(jià)以及百度的股價(jià),面試了一共50分鐘有30分鐘在閑聊,10分鐘寫了個(gè)翻轉(zhuǎn)字符串,10分鐘問了點(diǎn)java基礎(chǔ)的不能再基礎(chǔ)的問題,上面的公司基本都問過,然后這就過了。
二面面試官是充分的體現(xiàn)出來(lái)了重編程,讓我自我介紹,還沒介紹完呢就說(shuō),我們寫個(gè)程序吧,我只好一臉委屈的說(shuō),人家剛剛就要說(shuō)到最最重點(diǎn)的項(xiàng)目呢,然后他就讓我繼續(xù)說(shuō)了。說(shuō)完展示了一下自己的APP,之后就是寫寫寫了。第一個(gè)讓我寫二叉樹的深度,我想這簡(jiǎn)單啊,在美團(tuán)剛寫過view樹的,結(jié)果寫寫寫就寫岔了。面試官一看我卡殼了,說(shuō)沒事,來(lái)寫個(gè)冒泡壓壓驚= =。壓壓驚。寫完冒泡以后,說(shuō),冷靜下來(lái)沒?繼續(xù)寫二叉樹的深度吧。冷靜下來(lái)寫好以后,又讓寫了個(gè)二分查找,問了個(gè)java的反射,就沒了,然后跟我說(shuō)你過了,等三面吧?次姨(dòng)了還問我,我是不是問的太簡(jiǎn)單了。
三面面試官跟我說(shuō),我一點(diǎn)都不想問技術(shù),但是這個(gè)表上有,那我們走個(gè)過場(chǎng),隨便問問,就問了個(gè)android中的MVC,問了一下Activity的生命周期,沒寫代碼,然后就是聊人生了,一聊就停不下來(lái),聊了一個(gè)半小時(shí),還說(shuō)什么別的面試官都下了要求說(shuō)最多要幾個(gè),我這里我覺得行就行,聊的特別親切,最后走的時(shí)候還送我到電梯口。然而,后來(lái)就沒下文了。沒下文了你對(duì)我這么好干嘛。
四、騰訊(拿到Offer)
一面重基礎(chǔ),自從美團(tuán)以后我一是誘導(dǎo)面試官去我擅長(zhǎng)的方面,二是逗面試官笑。然而一面面試官并不笑。從頭到尾嚴(yán)肅臉。
首先問了一個(gè)智力題,說(shuō)有1000瓶水,其中一瓶有毒,有10條狗,狗喝了毒水以后會(huì)在1小時(shí)內(nèi)死去,問怎樣能最快發(fā)現(xiàn)哪瓶水有毒。
然后寫了代碼,用遞歸和非遞歸方式實(shí)現(xiàn)二叉樹的前序遍歷。
后面我在自我介紹的時(shí)候直接就說(shuō)我不是計(jì)算機(jī)出身,操作系統(tǒng)什么的都沒學(xué)過,本身是學(xué)通信的所以網(wǎng)絡(luò)方面了解比較多,然后面試官就開始,哦?你網(wǎng)絡(luò)學(xué)得好?那我問下你網(wǎng)絡(luò)。這就掉到我挖的坑里了嘛。有關(guān)網(wǎng)絡(luò)方面,這里已經(jīng)總結(jié)的比較全面,另外我自己還準(zhǔn)備了HTTPS和TCP的慢啟動(dòng)和擁塞控制,不等面試官問,直接就說(shuō),從它第一個(gè)問的就開始不停的說(shuō),把網(wǎng)絡(luò)相關(guān)的問題全都說(shuō)完,面試官就一副,你果然網(wǎng)絡(luò)學(xué)的很好的表情。我覺得如果面試官問一個(gè)你答一個(gè),可能你都答上來(lái)了但是面試還是沒有過,所以我覺得干脆在面試官問一個(gè)點(diǎn)的時(shí)候,把跟這個(gè)點(diǎn)所有相關(guān)的問題全跟他說(shuō)一遍,這樣一個(gè)是你自己掌握了面試的內(nèi)容,一個(gè)是讓面試官覺得你的知識(shí)范圍的確比較廣。
二面面試官好帥,而且很年輕,后來(lái)聽說(shuō)居然是cto,驚呆了。也是照樣說(shuō)項(xiàng)目,說(shuō)擅長(zhǎng)網(wǎng)絡(luò),然后問了TCP三次握手,為什么是三次,兩次為什么不行。還有,如果你的APP突然連接不上Server了,你怎么一步步排查出來(lái)是哪里的問題。緊接著就是智力題了,100層樓,兩個(gè)瓶子,用你的策略在最壞情況下最少扔多少次能測(cè)出來(lái)從幾樓開始扔瓶子會(huì)碎,我算出來(lái)是19次,類似于TCP擁塞控制的那么一種思想,后來(lái)出來(lái)百度了一下發(fā)現(xiàn)是14次,不過我前一個(gè)同學(xué)貌似答的是50+次,所以感覺表現(xiàn)的還行。之后問如果只有一個(gè)瓶子呢?我說(shuō)那只能一層一層扔啊,最壞情況就是100次嘛,面試官一直在問,沒有更好的了么?我表示想不出來(lái),F(xiàn)在依舊覺得沒有更好的了,如果哪位大神有更好的思路的話麻煩告訴我謝謝。
三面HR,看人很準(zhǔn),說(shuō)話很犀利,女的,好不擅長(zhǎng)對(duì)付女的面試官,沒什么可說(shuō)的。
我覺得騰訊校招主要是從人才培養(yǎng)出發(fā),所以項(xiàng)目經(jīng)驗(yàn)不足并不是什么特別大的問題,主要是基礎(chǔ)要很扎實(shí),腦袋要很靈光能答得上智力題,做過的項(xiàng)目要掌握的很清晰。
五、蘑菇街(差cto沒面)
蘑菇街是9月1號(hào)打來(lái)電話內(nèi)推面,當(dāng)時(shí)正在網(wǎng)易消沉期,不想面,推了以后覺得不會(huì)再打來(lái)了,結(jié)果9月8號(hào)又打來(lái)面試,問的全是Android,但是比較基礎(chǔ),生命周期、LaunchMode、ListView與ViewPager的優(yōu)化等。二面說(shuō)是并到校招,然而校招仍然是一面=。=,內(nèi)容跟之前電話一面類似,二面是HR面,談及人才培養(yǎng)的時(shí)候說(shuō),我們認(rèn)為能者多勞,所以有能力的人會(huì)當(dāng)好幾個(gè)同學(xué)的導(dǎo)師,言外之意是,人少,不能一個(gè)人一個(gè)導(dǎo)師。印象一般吧,后來(lái)約cto面的時(shí)候在火車上,改天約。
六、阿里(一輪游)
阿里其實(shí)沒什么說(shuō)的,不怎么要人了,想著軟件園那邊有家飯館想吃,就去了,一輪游很happy。因?yàn)樽约旱捻?xiàng)目有推送功能所以主要問了怎么保持長(zhǎng)連接,怎么選擇是長(zhǎng)連接還是短連接,怎么在長(zhǎng)連接的時(shí)候盡可能降低功耗等,還有GC、jvm內(nèi)部使用了什么數(shù)據(jù)結(jié)構(gòu)以及循環(huán)引用,然后問道如果就要使用引用計(jì)數(shù)算法,怎么避免循環(huán)引用。就不能乖乖的用可達(dá)性算法么真是的。
最后一點(diǎn)就是,多在?途W(wǎng)上刷題,筆試過了是王道,霸面真的很吃虧、很費(fèi)時(shí)間,有時(shí)候默默等著希望很渺茫,其實(shí)可以托正式面試的同學(xué)把簡(jiǎn)歷帶上去或者直接堵門,機(jī)會(huì)要略大些。不過我的騰訊面試官比較嚴(yán)肅,態(tài)度也比較強(qiáng)硬,幫別人霸面未遂,一直也挺愧疚的。
大概就是這么多了,希望給接下來(lái)或者來(lái)年找工作的人一點(diǎn)幫助吧。
【Android開發(fā)工程師面試試題】相關(guān)文章:
android面試題08-16
Android面試試題及答案02-06
android面試題大全12-30
android面試題摘要02-20
android面試題目匯總02-17
70道Android面試題(大全)07-03
BIOS開發(fā)工程師筆試題02-18
前端開發(fā)常見面試試題02-14