當前位置:編程學習大全網 - 源碼下載 - 面試時,問哪些問題能試出壹個 Android 應用開發者真正的水平

面試時,問哪些問題能試出壹個 Android 應用開發者真正的水平

首先,面試官們壹定要知道,每個人由於經歷不同,擅長的方向是千差萬別的,所以壹定不要抓住自己擅長的某個方面去問的很深,覺得“如果連這個都不會還算毛程序員啊”。

所以我問問題的時候,往往是“兩步走”的循環:

1. 問他做過什麽,如果有成品的話,我能看看更好。

2. 從他做過的東西裏面,找到問題進行提問。具體的問題要看情況,可以是界面或效果的實現方式、相關bug的排除、該部分原理的分析。

舉壹次面試時的對話作為例子吧:

我先開始:

“這份簡歷和網上投過來的那份是壹樣的吧?”

“嗯,應該是壹樣的。”

“嗯好。妳在之前的團隊的位置是什麽?”

“中高級吧。”

“具體的工作呢?”

“寫框架,讓新人比較容易上手,能夠輕松工作。”

“妳說的框架具體包括什麽呢?”

“壹些會***用的東西,寫出來可以讓新人就算是剛來也能很好的完成工作。”

“聯網是妳封裝的嗎?”

“是。”

“妳們聯網用的是什麽?”

“就是……安卓自帶的……HttpClient。”

“直接用的?”

“嗯。”

“那妳們的網絡請求是怎麽做的異步呢?”

“嗯……用Handler嘛,還有AsyncTask。”

“能具體壹點嗎?”

“嗯……就是……額……”

“例如什麽情況下用Handler,什麽情況下用AsyncTask,妳是怎麽決定的呢?”

“嗯……”

“或者說,他們有什麽區別呢?谷歌為什麽要造他們兩個出來,而不是只造壹個呢?”

“區別……區別……他們肯定是有區別的,不然谷歌不可能造兩個。嗯……”(到這裏,這個問題就可以結束了。評級減壹。)

“這樣吧,妳的簡歷上提到‘熟悉大圖片的加載’,能說壹下大圖片加載有什麽需要註意的嗎?”

“緩存嘛。”

“緩存?”

“嗯,大圖片的加載不就是ListView裏面的大圖片加載嗎?要防止內存溢出。”

“ListView裏面壹定是大圖?”

“嗯……”(不了解的東西卻說自己熟悉,評級減壹。繼續順著問。)

“那麽ListView中圖片的緩存妳是怎麽做的呢?”

“三級緩存嘛。”

“哪三級?”

“如果內存裏面有,就用內存裏面的;如果沒有就用本地的;如果本地也沒有就從網絡上取。三級。”

“網絡上的也叫緩存?”

“啊。妳可以把他看作緩存,也可以不看作緩存嘛。”(這個……)

“內存緩存妳是怎麽實現的?”

“用的壹個HashMap。”

“直接用的HashMap嗎?”

“嗯……嗯。”

“直接用HashMap的話,怎麽防止妳剛才提到的內存溢出呢?”

“妳可以用軟引用嘛。”(首先答案有問題,另外當聽到關鍵詞“妳可以”,多數情況下這個問題也可以結束了——八成是不會,僅僅聽說過。不過出於謹慎還是繼續問了)

“軟引用就能防止內存溢出嗎?”

“還有……還有谷歌出的壹個叫LRUCache的。”(回避正面回答,確認他是不會。這個問題結束。評級減壹。到此就再沒必要聊下去了。)

然後簡單過渡壹下,就結束了面試。

所以妳看,只需要簡單提問,然後接著對方的回答繼續往深了問,就什麽都問出來了。

--------------------------------------------------------------------------------

評論中有人問到這次面試中我沒有問完的問題的答案,那簡單就說壹下,想了解更多還請自行谷歌。

Handler和AsyncTask:這倆類都是用來實現異步的,其中AsyncTask的集成度較高,使用簡單,Handler則需要手動寫Runnable或者Thread的代碼;另外,由於AsyncTask內部實現了壹個非常簡單的線程池,實際上是只適用於輕量級的異步操作的,壹般不應該用於網絡操作。我問他Handler和AsyncTask的區別,壹方面是因為他說用AsyncTask聯網,因此我認為他對AsyncTask並不熟悉;但更重要的是在我問他實現異步的具體手段的時候,他同時提到了Handler和AsyncTask——用這種“混搭”的使用方式來寫聯網框架,就算不考慮AsyncTask的可用性,也顯得非常怪異,這聽起來更像是在“列舉Android實現異步操作最常用的類”,而非“講述實現網絡異步操作的具體方式”。也就是說,我聽了這句話後開始懷疑他封裝過聯網框架這件事的真實性。但我只是懷疑,並不確定,因此接著問了我想問的。

圖片緩存:大多數情況下,內存中使用LRUCache是最合適的。如果用HashMap來實現,不是不可以,但完全沒必要嘛!需要註意在合適的時候釋放緩存。至於具體怎麽釋放,我沒考慮過,但用軟引用的問題在於,妳很難控制緩存的大小,也就是說,只有等到妳的內存快要撐爆,妳的圖片緩存才會被回收。是不是感覺傻傻的?

對於初級和中級工程師,我更傾向於考慮對方的學習能力,也就是妳對於自己所做過的東西是否足夠了解,而非要求妳那裏都強,因為就像我開頭說的,每個人由於經歷不同,擅長的方向是千差萬別的,我不喜歡挑別人的軟肋問。只要妳學習能力強,我就安全感滿滿噠!

  • 上一篇:誘導是什麽意思
  • 下一篇:新加坡留學的入學要求很嚴格嗎?非計算機專業可以獲得新加坡留學資格嗎?
  • copyright 2024編程學習大全網