- 相關(guān)推薦
Android開發(fā)工程師面試試題
很早就想寫一下面經(jīng)總結(jié)一下自己最近的經(jīng)歷,然而面完以后人一下子就懶了,緊張不起來了,一拖就拖到了十一,如果來不及對今年找工作的同學(xué)有幫助,那對來年春招或者更小一些的學(xué)弟學(xué)妹有所參考也是好的,還是寫一下吧。lz來自四川成都某211 985院校 通信學(xué)院,應(yīng)聘職位Android開發(fā)工程師,在秋招一共面了BAT、美團(tuán)和蘑菇街五家公司,網(wǎng)易互聯(lián)網(wǎng)是內(nèi)推時(shí)候面的。總的感覺吧,百度重編程算法、騰訊重基礎(chǔ)和智力、阿里呵呵呵、美團(tuán)蘑菇街基礎(chǔ)應(yīng)用并重、網(wǎng)易重應(yīng)用。
一、網(wǎng)易內(nèi)推面試(電話一面、杭州二面、跪)
其實(shí)呢,內(nèi)推有兩大好處,一是不用筆試,二嘛,電話面試,發(fā)揮余地就很強(qiáng)了(我不細(xì)說了 大家都懂的),而且一般不會(huì)問復(fù)雜的算法,就算問也只會(huì)問個(gè)思路,對我這種算法白癡來說簡直是贊到不行。
一面:
電話面,中午12點(diǎn)整,面試官好像很著急去吃飯的樣子。。說話特別快,而且問問題一旦聽幾個(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相對于java自帶的線程池的好處
4、onTouch事件的處理機(jī)制
5、說一下MVC以及其在Android中的應(yīng)用
6、說一下OOM以及你怎么解決的
7、了解Android的Framework么
8、說一下一個(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)場面,一個(gè)月了路費(fèi)還沒報(bào)銷回來。!,F(xiàn)場面是一個(gè)看起來很囂張的面試官,看你的眼神從頭到尾都充滿了鄙視,從一開始的感覺就很不好。。
1、viewpager里面只能嵌套view嗎 可不可以嵌套Activity
2、假如viewpager里面的每一頁都有有很大數(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。。。是用來展示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漸漸清晰,要怎么編寫頁面?說說你對android:theme的理解,說說你對alpha值的理解
10、ListView在數(shù)據(jù)量很大圖片很多的情況下怎么優(yōu)化?假如一個(gè)圖片,輕輕的向上滑動(dòng)一丟丟,那么需要重繪嗎?(什么鬼。。。)
11、詳細(xì)展開說一下所有LaunchMode的應(yī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、說一下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、說一下canvas
20、dialog和popupwindow的應(yīng)用場景 如果popupwindow在沒有dismiss的時(shí)候Activity finish了,會(huì)出現(xiàn)什么情況?
21、了解過什么三方庫?為什么不用三方庫?
22、你覺得安卓的未來在哪里?你自己為什么都用IOS了(╯‵□′)╯︵┻━┻
23、Service和推送通知,通知有沒有可能出現(xiàn)有推送但是通知欄收不到通知?service被kill掉會(huì)如何?如何保證service不被kill掉
24、了不了解Scrollview scrollview和ListView有什么相似點(diǎn) 有什么不同 那如果這兩個(gè)是繼承關(guān)系 那應(yīng)該是誰繼承誰?
25、dp sp px各自的應(yī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各種問我,你看我這里是這樣的,你說一下我是怎么實(shí)現(xiàn)的,我怎么知道你是怎么實(shí)現(xiàn)的啊真是的(╯‵□′)╯︵┻━┻。 之前為準(zhǔn)備校招相對基礎(chǔ)準(zhǔn)備的比較多, 應(yīng)用僅限于使用過的比較熟練,其他沒接觸過的就呵呵了。最讓我生氣的是,面試官居然問我,身為一個(gè)女生,你覺得你做Android開發(fā),有未來嗎?當(dāng)時(shí)真是氣死我了,做Android的女生怎么就沒未來了 (╯‵□′)╯︵┻━┻
這一面跪的很慘,面完回來就把問題全都記錄下來而且每個(gè)問題都專門找了詳細(xì)的解答,雖說面完這一面回來著實(shí)也是消沉了好幾天,期間蘑菇街打來內(nèi)推電話我還直接跟人家說改天,就是不想面了,不過后來振作回來以后也發(fā)現(xiàn)這一次挫折真的是一次相當(dāng)寶貴的經(jīng)驗(yàn)。
二、美團(tuán)(拿到offer)
美團(tuán)是一口氣三面面完的,其實(shí)當(dāng)時(shí)三面面完的人特別多,到最后收到offer的并不是那么多,感覺決定權(quán)基本在三面面試官那里吧,這種也沒什么可說的。一二面面試官那里都是有一張表,每個(gè)面試官都要打分,我瞄了一下,有編程能力、操作系統(tǒng)。。其他沒看到。。分?jǐn)?shù)有2.5有3據(jù)說有人還有3.5的。是美團(tuán)讓我找到了之后面試的總套路,最后說。
一面,40分鐘,除去項(xiàng)目介紹等,貌似并沒有問什么特殊的,我提到我平時(shí)主要做界面,所以后面的問題大多與界面相關(guān) :
ListView的優(yōu)化
OOM的處理
GC原理
循環(huán)引用的問題
引用計(jì)數(shù)與可達(dá)性算法
LaunchMode 這一點(diǎ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里面一頁的寬度超過了屏幕的寬度,ViewPager是怎么顯示的,這還真沒試過。。
然后問到了app是怎么通知Android系統(tǒng)頁面有刷新的,還有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è),也很簡單。
然后問了一個(gè)智力題,說有十層樓,每層樓有一個(gè)鉆石,鉆石大小不一,沒有規(guī)律,電梯只上不下,只能選一層下電梯,拿走該層鉆石,問什么樣的策略可以盡量大的拿到鉆石。
三面,20分鐘吧,基本聊人生,跟技術(shù)有關(guān)的人生,并沒有什么說的。
總結(jié):其實(shí)這三面中,一面是答得最不好的,因?yàn)檎f了太多我平時(shí)是做界面的,面試官就把界面問到了比較深,然而我并沒有準(zhǔn)備過各種view的繪制方面的知識,所以答的不是那么的好,也是一面讓我找到了我以后面試的總套路,一是要誘導(dǎo)面試官到你擅長的方面去,我這里就是典型的誘導(dǎo)錯(cuò)誤==自己給自己挖坑了,所以以后尤其是騰訊,我就使用了另一套引導(dǎo)說辭。二是要逗面試官笑。。可能很沒邊。。但是我后續(xù)的各種面試基本上都是跟面試官說說笑笑的過的,好處一是面試官本身面試很無聊,能笑一下放松心情自然對你的印象好一些,二是在說說笑笑中,體現(xiàn)出來了你的溝通交流能力,這也是拿到offer以后,美團(tuán)的面試官所說的,覺得我軟實(shí)力很強(qiáng),可能就來源于這一點(diǎn)。三是說說笑笑扯閑話,時(shí)間一下就過去了,面試官對于每個(gè)應(yīng)聘者,時(shí)間大約都是有一個(gè)限度的,扯廢話時(shí)間越長,真正考察你的時(shí)間就越短,出錯(cuò)的幾率就越小。
三、百度(面完三面,居然沒消息了,呵呵呵)
百度給我的最大感覺是,重編程,重算法,面經(jīng)都寫不了多少因?yàn)楦径紱]問多少,就是寫寫寫。
一面面試官比我大不了幾歲,上來就問我,你們學(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)出來了重編程,讓我自我介紹,還沒介紹完呢就說,我們寫個(gè)程序吧,我只好一臉委屈的說,人家剛剛就要說到最最重點(diǎn)的項(xiàng)目呢,然后他就讓我繼續(xù)說了。。。說完展示了一下自己的APP,之后就是寫寫寫了。第一個(gè)讓我寫二叉樹的深度,我想這簡單啊,在美團(tuán)剛寫過view樹的,結(jié)果寫寫寫就寫岔了。。面試官一看我卡殼了,說沒事,來寫個(gè)冒泡壓壓驚= =。。壓壓驚。。。寫完冒泡以后,說,冷靜下來沒?繼續(xù)寫二叉樹的深度吧。。冷靜下來寫好以后,又讓寫了個(gè)二分查找,問了個(gè)java的反射,就沒了,然后跟我說你過了,等三面吧?次姨(dòng)了還問我,我是不是問的太簡單了。。。
三面面試官跟我說,我一點(diǎn)都不想問技術(shù),但是這個(gè)表上有,那我們走個(gè)過場,隨便問問,就問了個(gè)android中的MVC,問了一下Activity的生命周期,沒寫代碼,然后就是聊人生了,一聊就停不下來,聊了一個(gè)半小時(shí),還說什么別的面試官都下了要求說最多要幾個(gè),我這里我覺得行就行,聊的特別親切,最后走的時(shí)候還送我到電梯口。。然并卵,后來就沒下文了。。沒下文了你對我這么好干嘛。。。
四、騰訊(拿到Offer)
一面重基礎(chǔ),自從美團(tuán)以后我一是誘導(dǎo)面試官去我擅長的方面,二是逗面試官笑。然而一面面試官并不笑。。從頭到尾嚴(yán)肅臉。。
首先問了一個(gè)智力題,說有1000瓶水,其中一瓶有毒,有10條狗,狗喝了毒水以后會(huì)在1小時(shí)內(nèi)死去,問怎樣能最快發(fā)現(xiàn)哪瓶水有毒。
然后寫了代碼,用遞歸和非遞歸方式實(shí)現(xiàn)二叉樹的前序遍歷。
后面我在自我介紹的時(shí)候直接就說我不是計(jì)算機(jī)出身,操作系統(tǒng)什么的都沒學(xué)過,本身是學(xué)通信的所以網(wǎng)絡(luò)方面了解比較多,然后面試官就開始,哦?你網(wǎng)絡(luò)學(xué)得好?那我問下你網(wǎng)絡(luò)。這就掉到我挖的坑里了嘛。有關(guān)網(wǎng)絡(luò)方面,http://www.nowcoder.com/discuss/1937?type=2&order=0&pos=12&page=2這里已經(jīng)總結(jié)的比較全面,另外我自己還準(zhǔn)備了HTTPS和TCP的慢啟動(dòng)和擁塞控制,不等面試官問,直接就說,從它第一個(gè)問的就開始不停的說,把網(wǎng)絡(luò)相關(guān)的問題全都說完,面試官就一副,你果然網(wǎng)絡(luò)學(xué)的很好的表情。我覺得如果面試官問一個(gè)你答一個(gè),可能你都答上來了但是面試還是沒有過,所以我覺得干脆在面試官問一個(gè)點(diǎn)的時(shí)候,把跟這個(gè)點(diǎn)所有相關(guān)的問題全跟他說一遍,這樣一個(gè)是你自己掌握了面試的內(nèi)容,一個(gè)是讓面試官覺得你的知識范圍的確比較廣。
二面面試官好帥,而且很年輕,后來聽說居然是cto,驚呆了Σ( ° △ °|||)︴。也是照樣說項(xiàng)目,說擅長網(wǎng)絡(luò),然后問了TCP三次握手,為什么是三次,兩次為什么不行。還有,如果你的APP突然連接不上Server了,你怎么一步步排查出來是哪里的問題。緊接著就是智力題了,100層樓,兩個(gè)瓶子,用你的策略在最壞情況下最少扔多少次能測出來從幾樓開始扔瓶子會(huì)碎,我算出來是19次,類似于TCP擁塞控制的那么一種思想,后來出來百度了一下發(fā)現(xiàn)是14次,不過我前一個(gè)同學(xué)貌似答的是50+次,所以感覺表現(xiàn)的還行。之后問如果只有一個(gè)瓶子呢?我說那只能一層一層扔啊,最壞情況就是100次嘛,面試官一直在問,沒有更好的了么?我表示想不出來,F(xiàn)在依舊覺得沒有更好的了,如果哪位大神有更好的思路的話麻煩告訴我謝謝。
三面HR,看人很準(zhǔn),說話很犀利,女的,好不擅長對付女的面試官,沒什么可說的。
我覺得騰訊校招主要是從人才培養(yǎng)出發(fā),所以項(xiàng)目經(jīng)驗(yàn)不足并不是什么特別大的問題,主要是基礎(chǔ)要很扎實(shí),腦袋要很靈光能答得上智力題,做過的項(xiàng)目要掌握的很清晰。
五、蘑菇街(差cto沒面)
蘑菇街是9月1號打來電話內(nèi)推面,當(dāng)時(shí)正在網(wǎng)易消沉期,不想面,推了以后覺得不會(huì)再打來了,結(jié)果9月8號又打來面試,問的全是Android,但是比較基礎(chǔ),生命周期、LaunchMode、ListView與ViewPager的優(yōu)化等。二面說是并到校招,然而校招仍然是一面=。=,內(nèi)容跟之前電話一面類似,二面是HR面,談及人才培養(yǎng)的時(shí)候說,我們認(rèn)為能者多勞,所以有能力的人會(huì)當(dāng)好幾個(gè)同學(xué)的導(dǎo)師,言外之意是,人少,不能一個(gè)人一個(gè)導(dǎo)師。。印象一般吧,后來約cto面的時(shí)候在火車上,改天約。
六、阿里(一輪游)
阿里其實(shí)沒什么說的,不怎么要人了,想著軟件園那邊有家飯館想吃,就去了,一輪游很happy。因?yàn)樽约旱捻?xiàng)目有推送功能所以主要問了怎么保持長連接,怎么選擇是長連接還是短連接,怎么在長連接的時(shí)候盡可能降低功耗等,還有GC、jvm內(nèi)部使用了什么數(shù)據(jù)結(jié)構(gòu)以及循環(huán)引用,然后問道如果就要使用引用計(jì)數(shù)算法,怎么避免循環(huán)引用。就不能乖乖的用可達(dá)性算法么真是的=。=。。。
最后一點(diǎn)就是,多在牛客網(wǎng)上刷題,筆試過了是王道,霸面真的很吃虧、很費(fèi)時(shí)間,有時(shí)候默默等著希望很渺茫,其實(shí)可以托正式面試的同學(xué)把簡歷帶上去或者直接堵門,機(jī)會(huì)要略大些。不過我的騰訊面試官比較嚴(yán)肅,態(tài)度也比較強(qiáng)硬,幫別人霸面未遂,一直也挺愧疚的。。。
大概就是這么多了,希望給接下來或者來年找工作的人一點(diǎn)幫助吧。
【Android開發(fā)工程師面試試題】相關(guān)文章:
Android面試試題08-04
Android面試試題及答案07-16
android面試題摘要08-05
android面試題目匯總08-01
百度面試Android面試題08-01
應(yīng)用系統(tǒng)開發(fā)工程師面試試題08-04
Android開發(fā)工程師優(yōu)秀簡歷模板07-24
android開發(fā)自我介紹面試06-10