第一篇:個(gè)人面試android面試總結(jié).
本人面試過程部分有價(jià)值的題目摘錄如下:仔細(xì)想想答案都很簡單
不全但是有一定的代表性
去的幾家公司都是外包,項(xiàng)目緊急不會(huì)去看你項(xiàng)目上的那些小應(yīng)用,能干活就行。
外包IBM:考得很基礎(chǔ),但是沒真正的經(jīng)驗(yàn)平時(shí)不會(huì)去記
1>dip設(shè)備獨(dú)立像素
這個(gè)和設(shè)備硬件有關(guān),一般為了支持WVGA、HVGA和QVGA 推薦使用這個(gè),不依賴像素
480*320(160dpi):10*10dip = 10*10px 840*480(240dpi): 10*10dip = 15*15px Pixs = dips *(density / 160)2> WVGA、HVGA和QVGA 屏幕標(biāo)準(zhǔn)
3>屏幕適配.(實(shí)際項(xiàng)目中不會(huì)提供三套drawable圖片資源)Android對于屏幕適配的解決方案分析 圖片適配:9.png 其他適配: 1.Android將UI設(shè)計(jì)部分和代碼邏輯部分分離開來,獨(dú)立成一個(gè)XML文件,方便開發(fā)人員修改。
2.使用的長度單位是密度而不是像素。像素是自適應(yīng)的大敵,固定了絕對坐標(biāo)的像素值,就別想再好好安心地讓它自個(gè)兒適應(yīng)屏幕了。Android推薦使用dp作為長度單位。dp會(huì)根據(jù)手機(jī)的分辨率而自動(dòng)調(diào)整大小。3.布局器功能強(qiáng)大。Android的布局器分為五種:LinearLayout,提供水平/垂直平鋪的布局器;TableLayout,提供行和 列的的布局;FrameLayout,幀布局器,提供分層的布局;AbsoluteLayout,使用絕對坐標(biāo)來定義控件的位 置;RelativeLayout,布局器中的控件用相對位置來布局。布局器的大小有自適應(yīng)內(nèi)容和與父控件相同兩種。這些布局器完全可以承擔(dān)起程序中基本 的布局要求。
4.Android中有一個(gè)密度的概念,表示每英寸有多少個(gè)顯示點(diǎn)。當(dāng)沒有與手機(jī)分辨率相匹配的屏幕適配方案時(shí),會(huì)根據(jù)手機(jī)的屏幕密度選取一個(gè)最接近的屏幕密度的適配方案,這樣會(huì)讓圖片的失真達(dá)到最低。
5> Include使用與傳參 組件復(fù)用
6>橫屏豎屏切換處理
主要是切換時(shí)生命周期方法(結(jié)合你在項(xiàng)目中的應(yīng)用)
7>應(yīng)用程序放在真機(jī)什么目錄下 以及常見的目錄有哪些 系統(tǒng)應(yīng)用程序 system/app 自己安裝的應(yīng)用 data/app
8> 你們項(xiàng)目需求怎么做的,請描述下
奧信面試:(主要是他們公司項(xiàng)目中的東西,演示功能問怎么實(shí)現(xiàn))ImageView點(diǎn)擊后更改背景色
Xml:selector + item
下載后回到剛剛的頁面更新頁面ListView對應(yīng)Item的圖標(biāo)
1.startActivityForResult
2.下載完成發(fā)送廣播
從網(wǎng)絡(luò)上下載大圖片
(可以作為項(xiàng)目難點(diǎn)陳述)ListView異步加載圖片 +緩存()
Handler + 線程池 + 開啟內(nèi)存緩存(SoftReference)
Handler + 線程池 + 保存文件到SD卡上
書架的實(shí)現(xiàn)
平時(shí)多線程用到哪些(區(qū)分兩種方法的特點(diǎn))Handler
AsyncTask
Canvas畫圖用法
自定義控件使用(很經(jīng)常問到)
Android應(yīng)用程序生命周期(區(qū)分與Android組件的生命周期)被請求時(shí)實(shí)例化,系統(tǒng)內(nèi)存不足被清理
Activity的啟動(dòng)模式
Standard singleTop singleTask singleInstance 網(wǎng)絡(luò)7層模型 Tcp/ip(分別位于那一層)
應(yīng)用層 表示層 會(huì)話層 傳輸層
網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層 物理層
常用設(shè)計(jì)模式(非重點(diǎn) 能答更好)簡單工廠,抽象工廠方法,代理模式,…
華訊財(cái)經(jīng): 主要是簡歷上寫的項(xiàng)目
由于項(xiàng)目都從頭到尾敲的沒啥好講的屬于閑聊吹牛的公司。
支付寶面試過程(電面主要問j2ee):
Activity中onCreate(),onStart()方法都會(huì)執(zhí)行為什么不合并為一個(gè)方法
Activity的onCreate()中啟動(dòng)Service,那么onCreate()中的代碼與Service中onStart()方法中的代碼所在線程關(guān)系
耗時(shí)操作問題(主要考慮線程關(guān)系)
項(xiàng)目中的難點(diǎn)
完成!!
Android中MVC設(shè)計(jì)模式的理解
UI布局相關(guān)
一口氣說出有哪幾種布局(每種布局特點(diǎn))對Http協(xié)議的理解 post/get特點(diǎn) TCP/ip 多線程上傳下載
第二篇:Android面試總結(jié)
1.activity的生命周期。
activity主要生命周期的方法說明:
onCreate(Bundle savedInstanceState):創(chuàng)建activity時(shí)調(diào)用。設(shè)置在該方法中,還以Bundle的形式提供對以前儲(chǔ)存的任何狀態(tài)的訪問!
onStart():activity變?yōu)樵谄聊簧蠈τ脩艨梢姇r(shí)調(diào)用。
onResume():activity開始與用戶交互時(shí)調(diào)用(無論是啟動(dòng)還是重新啟動(dòng)一個(gè)活動(dòng),該方法總是被調(diào)用的)。
onPause():activity被暫停或收回cpu和其他資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)的,也是保護(hù)現(xiàn)場,壓棧吧!
onStop():activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時(shí)調(diào)用。
onRestart():重新啟動(dòng)activity時(shí)調(diào)用。該活動(dòng)仍在棧中,而不是啟動(dòng)新的活動(dòng)。
onDestroy():activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用,該方法被
2.橫豎屏切換時(shí)候activity的生命周期
3.android中的動(dòng)畫有哪幾類,它們的特點(diǎn)和區(qū)別是什么
兩種,一種是Tween動(dòng)畫、還有一種是Frame動(dòng)畫。Tween動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng)、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動(dòng)畫,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。
{Android的animation由四種類型組成 XML中
alpha 漸變透明度動(dòng)畫效果 scale漸變尺寸伸縮動(dòng)畫效果
translate 畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果 rotate 畫面轉(zhuǎn)移旋轉(zhuǎn)動(dòng)畫效果
JavaCode中
AlphaAnimation ScaleAnimation 漸變透明度動(dòng)畫效果 漸變尺寸伸縮動(dòng)畫效果
TranslateAnimation畫面轉(zhuǎn)換位置移動(dòng)動(dòng)畫效果 RotateAnimation 畫面轉(zhuǎn)移旋轉(zhuǎn)動(dòng)畫效果
Android動(dòng)畫模式
Animation主要有兩種動(dòng)畫模式: 一種是tweened animation(漸變動(dòng)畫)XML中 JavaCode alpha AlphaAnimation scaleScaleAnimation
一種是frame by frame(畫面轉(zhuǎn)換動(dòng)畫)XML中 JavaCode translate TranslateAnimation rotate RotateAnimation
}
4.handler機(jī)制的原理:
andriod提供了 Handler 和 Looper 來滿足線程間的通信。Handler 先進(jìn)先出原則。Looper類用來管理特定線程內(nèi)對象之間的消息交換(Message Exchange)。
1)Looper: 一個(gè)線程可以產(chǎn)生一個(gè)Looper對象,由它來管理此線程里的Message Queue(消息隊(duì)列)。
2)Handler: 你可以構(gòu)造Handler對象來與Looper溝通,以便push新消息到Message Queue里;或者接收Looper從Message Queue取出)所送來的消息。
3)Message Queue(消息隊(duì)列):用來存放線程放入的消息。
4)線程:UI thread 通常就是main thread,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)Message Queue
5.說說activity,intent,service是什么關(guān)系
[教程] 新手入門之應(yīng)用解析(Activity、Intent、Service等)
Activity, Intent, Service, IntentReceiver, ContentProvider 一般剛開始學(xué)Android時(shí)對這些基本的東西還是要明確一下的,下面的東西摘自新版android開發(fā)教程里面的,介紹比較簡單,希望能夠有幫助。
一、Activity
Activity是android中最今本的應(yīng)用程序組件,應(yīng)用程序中,一個(gè)Activity通常是一個(gè)單獨(dú)的屏幕,每一個(gè)Activity都被實(shí)現(xiàn)為一個(gè)單獨(dú)的類,這些類都是從Activity基類中繼承來的,Activity類會(huì)顯示由視圖控件組成的用戶接口,并對視圖控件的事件做出響應(yīng)。一個(gè)復(fù)雜的應(yīng)用是由多個(gè)屏幕顯示組成。這里每一個(gè)屏幕的顯示就是一個(gè)Activity,從一個(gè)屏幕的顯示到另一個(gè)新屏幕的顯示并完成相關(guān)的事件是很容易實(shí)現(xiàn)的,這些屏幕Activity是相互交互的,他們直接通信從而完成相應(yīng)的功能。當(dāng)一個(gè)新的屏幕打開時(shí),前一個(gè)屏幕將會(huì)暫停,并保存在歷史堆棧中,用戶可以從歷史堆棧中返回前一個(gè)屏幕。當(dāng)屏幕不再使用時(shí),我們可以從歷史堆棧中刪除它,默認(rèn)情況下,Android會(huì)保留從主屏幕到每一個(gè)應(yīng)用的運(yùn)行屏幕。Activity代表一個(gè)用戶所能看到的屏幕,Activity主要是處理一個(gè)應(yīng)用的整體性工作,如監(jiān)聽系統(tǒng)事件(按鍵、觸摸屏幕等)、為用戶顯示指定的View、啟動(dòng)其他Activity等,其他的Activity繼承Activity基類后,通過重寫父類的方法來實(shí)現(xiàn)各種功能。
二、Intent
Android專有類Intent的調(diào)用是用來進(jìn)行架構(gòu)屏幕之間的切換的。Intent是描述應(yīng)用想要做什么。Intent數(shù)據(jù)結(jié)構(gòu)中兩個(gè)最重要的部分是動(dòng)作和動(dòng)作對應(yīng)的數(shù)據(jù),典型的動(dòng)作類型有:Main(活動(dòng)的門戶)、View、Pick、Edit等,而動(dòng)作對應(yīng)的數(shù)據(jù)是應(yīng)URI的形式進(jìn)行表示的,這里的URI就相當(dāng)于這些動(dòng)作的ID,一個(gè)動(dòng)作對應(yīng)一個(gè)動(dòng)作數(shù)據(jù)。Android使用了Intent這個(gè)特殊類,實(shí)現(xiàn)在屏幕與屏幕之間的移動(dòng)。Intent類用用來描述一個(gè)應(yīng)用將會(huì)做什么事情。與之有關(guān)系的一個(gè)類叫IntentFilter類,相對于intent是一個(gè)有效的做事情的請求,一個(gè)IntentFilter則用于描述一個(gè)Activity(或者IntentReceiver)能夠操作那些intent。一個(gè)Activity如果要顯示一個(gè)人的聯(lián)系方式時(shí),需要事先聲明一個(gè)IntentFilter,這個(gè)IntentFilter要知道怎么去處理View動(dòng)作和表示一個(gè)人的URI,IntentFilter需要AndroidManifest.xml中 定義,如AndroidManifest.xml中的:
通過解析各種intent,從一個(gè)屏幕導(dǎo)航到另一個(gè)屏幕是很簡單的。當(dāng)向前導(dǎo)航時(shí),activity 將會(huì)調(diào)用startActivity(IntentmyIntent)方法。然后,系統(tǒng)會(huì)在所有安裝的應(yīng)用程序中定義的IntentFilter 中查找,找到最匹配myIntent 的Intent 對應(yīng)的activity。新的activity 接收到myIntent 的通知后,開始運(yùn)行。當(dāng)startActivity 方法被調(diào)用將觸發(fā)解析myIntent 的動(dòng)作,這個(gè)機(jī)制提供了兩個(gè)關(guān)鍵好處:
A、Activities 能夠重復(fù)利用從其它組件中以Intent 的形式產(chǎn)生的一個(gè)請求;
B、Activities 可以在任何時(shí)候被一個(gè)具有相同IntentFilter 的新的Activity 取代。
三、IntentReceiver
當(dāng)你希望你的應(yīng)用能夠?qū)σ粋€(gè)外部的事件(如當(dāng)電話呼入時(shí),或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí),或者到了晚上時(shí))做出響應(yīng),你可以使用一個(gè)IntentReceiver。雖然IntentReceiver 在感興趣的事件發(fā)生時(shí),會(huì)使用NotificationManage通知用戶,但它并不能生成一個(gè)UI。IntentReceiver 在AndroidManifest.xml 中注冊,但也可以在代碼中使用Context.registerReceiver()進(jìn)行注冊。當(dāng)一個(gè)intentreceiver 被觸發(fā)時(shí),你的應(yīng)用不必對請求調(diào)用intentreceiver,系統(tǒng)會(huì)在需要的時(shí)候啟動(dòng)你的應(yīng)用。各種應(yīng)用還可以通過使用Context.broadcastIntent()將它們自己的intentreceiver 廣播給其它應(yīng)用程序。
四、Service
一個(gè)Service 是一段長生命周期的,沒有用戶界面的程序。比較好的一個(gè)例子就是一個(gè)正在從播放列表中播放歌曲的媒體播放器。在一個(gè)媒體播放器的應(yīng)用中,應(yīng)該會(huì)有多個(gè)activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂重放這個(gè)功能并沒有對應(yīng)的activity,因?yàn)槭褂谜弋?dāng)然會(huì)認(rèn)為在導(dǎo)航到其它屏幕時(shí)音樂應(yīng)該還在播放的。在這個(gè)例子中,媒體播放器這個(gè)activity 會(huì)使用Context.startService()來啟動(dòng)一個(gè)service,從而可以在后臺(tái)保持音樂的播放。同時(shí),系統(tǒng)也將保持這個(gè)service 一直執(zhí)行,直到這個(gè)service 運(yùn)行結(jié)束。另外,我們還可以通過使用Context.bindService()方法,連接到一個(gè)service 上(如果這個(gè)service 還沒有運(yùn)行將啟動(dòng)它)。當(dāng)連接到一個(gè)service 之后,我們還可以service 提供的接口與它進(jìn)行通訊。拿媒體播放器這個(gè)例子來說,我們還可以進(jìn)行暫停、重播等操作。
五、Content Provider
Android 應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite 數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)與其它的應(yīng)用共享時(shí),內(nèi)容提供器就可以發(fā)揮作用了。因?yàn)閮?nèi)容提供器類實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法,從而能夠讓其它的應(yīng)用保存或讀取此內(nèi)容提供器處理的各種數(shù)據(jù)類型。數(shù)據(jù)是應(yīng)用的核心。在Android 中,默認(rèn)使用鼎鼎大名的SQLite 作為系統(tǒng)DB。但是在Android 中,使用方法有點(diǎn)小小的不一樣。在Android 中每一個(gè)應(yīng)用都運(yùn)行在各自的進(jìn)程中,當(dāng)你的應(yīng)用需要訪問其他應(yīng)用的數(shù)據(jù)時(shí),也就需要數(shù)據(jù)在不同的虛擬機(jī)之間傳遞,這樣的情況操作起來可能有些困難(正常情況下,你不能讀取其他的應(yīng)用的db 文件),ContentProvider 正是用來解決在不同的應(yīng)用包之間共享數(shù)據(jù)的工具。
1、所有被一個(gè)Android 應(yīng)用程序創(chuàng)建的偏好設(shè)置,文件和數(shù)據(jù)庫都是私有的。
6.android中線程與線程,進(jìn)程與進(jìn)程之間如何通信
1、一個(gè) Android 程序開始運(yùn)行時(shí),會(huì)單獨(dú)啟動(dòng)一個(gè)Process。
默認(rèn)情況下,所有這個(gè)程序中的Activity或者Service都會(huì)跑在這個(gè)Process。
默認(rèn)情況下,一個(gè)Android程序也只有一個(gè)Process,但一個(gè)Process下卻可以有許多個(gè)
Thread。
2、一個(gè) Android 程序開始運(yùn)行時(shí),就有一個(gè)主線程Main Thread被創(chuàng)建。該線程主要負(fù)責(zé)UI界面的顯示、更新和控件交互,所以又叫UI Thread。
一個(gè)Android程序創(chuàng)建之初,一個(gè)Process呈現(xiàn)的是單線程模型--即Main Thread,所有的任務(wù)都在一個(gè)線程中運(yùn)行。所以,Main Thread所調(diào)用的每一個(gè)函數(shù),其耗時(shí)應(yīng)該越短越好。而對于比較費(fèi)時(shí)的工作,應(yīng)該設(shè)法交給子線程去做,以避免阻塞主線程(主線程被阻塞,會(huì)導(dǎo)致程序假死現(xiàn)象)。
3、Android單線程模型:Android UI操作并不是線程安全的并且這些操作必須在UI線程中執(zhí)行。如果在子線程中直接修改UI,會(huì)導(dǎo)致異常。
Android中Handler、Thread(HanlderThread)、Runnable之間的關(guān)系
首先說明Android的CPU分配的最小單元是線程,Handler一般是在某個(gè)線程里創(chuàng)建的,因而Handler和Thread就是相互綁定的,一一對應(yīng)。而Runnable是一個(gè)接口,Thread是Runnable的子類。所以說,他倆都算一個(gè)進(jìn)程。HandlerThread顧名思義就是可以處理消息循環(huán)的線程,他是一個(gè)擁有Looper的線程,可以處理消息循環(huán)。與其說Handler和一個(gè)線程綁定,不如說Handler是和Looper一一對應(yīng)的。最后需要說明的是,在UI線程(主線程)中: mHandler=new Handler();mHandler.post(new Runnable(){ void run(){ //執(zhí)行代碼...} });這個(gè)線程其實(shí)是在UI線程之內(nèi)運(yùn)行的,并沒有新建線程。
常見的新建線程的方法是: Thread thread = new Thread();thread.start();HandlerThread thread = new HandlerThread(“string”);thread.start();
7.widget相對位置的完成在antivity的哪個(gè)生命周期階段實(shí)現(xiàn)
onStart
8.說說mvc模式的原理,它在android中的運(yùn)用 : MVC(Model_view_contraller)”模型_視圖_控制器”。MVC 應(yīng)用程序總是由這三個(gè)部分組成。Event(事件)導(dǎo)致 Controller改變 Model 或View,或者同時(shí)改變兩者。只要 Controller改變了 Models 的數(shù)據(jù)或者屬性,所有依賴的 View 都會(huì)自動(dòng)更新。類似的,只要 Controller改變了 View,View會(huì)從潛在的 Model 中獲取數(shù)據(jù)來刷新自己。
9.說說在android中有哪幾種數(shù)據(jù)存儲(chǔ)方式
在Android中,可供選擇的存儲(chǔ)方式有SharedPreferences、文件存儲(chǔ)、SQLite數(shù)據(jù)庫方式、內(nèi)容提供器(Content provider)和網(wǎng)絡(luò)
10.android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區(qū)別
DOM、SAX(Simple API for XML)、XmlPullParser
11.listview你是怎么優(yōu)化的。
Adapter的作用就是ListView界面與數(shù)據(jù)之間的橋梁,當(dāng)列表里的每一項(xiàng)顯示到頁面時(shí),都會(huì)調(diào)用Adapter的getView方法返回一個(gè)View。想過沒有? 在我們的列表有1000000項(xiàng)時(shí)會(huì)是什么樣的?是不是會(huì)占用極大的系統(tǒng)資源?
先看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent){
View item = mInflater.inflate(R.layout.list_item_icon_text, null);
((TextView)item.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)item.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return item;
}
怎么樣?如果超過1000000項(xiàng)時(shí),后果不堪設(shè)想!您可千萬別這么寫!
我們再來看看下面的代碼:
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
convertView = mInflater.inflate(R.layout.item, null);
}
((TextView)convertView.findViewById(R.id.text)).setText(DATA[position]);
((ImageView)convertView.findViewById(R.id.icon)).setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
怎么樣,上面的代碼是不是好了很多?系統(tǒng)將會(huì)減少創(chuàng)建很多View。性能得到了很大的提升。
還有沒有優(yōu)化的方法呢? 答案是肯定的:
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
if(convertView == null){
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
holder = new ViewHolder();
holder.text =(TextView)convertView.findViewById(R.id.text);
holder.icon =(ImageView)convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder =(ViewHolder)convertView.getTag();
}
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1)== 1 ? mIcon1 : mIcon2);
return convertView;
}
static class ViewHolder {
TextView text;
ImageView icon;
}
怎么樣?會(huì)不會(huì)又給您的系統(tǒng)帶來很大的提升呢?看看下面三種方式的性能對比圖您就知道了!
12.view的刷新
Android中對View的更新有很多種方式,使用時(shí)要區(qū)分不同的應(yīng)用場合。我感覺最要緊的是分清:多線程和雙緩沖的使用情況。
1.不使用多線程和雙緩沖
這種情況最簡單了,一般只是希望在View發(fā)生改變時(shí)對UI進(jìn)行重繪。你只需在Activity中顯式地調(diào)用View對象中的invalidate()方法即可。系統(tǒng)會(huì)自動(dòng)調(diào)用 View的onDraw()方法。
2.使用多線程和不使用雙緩沖
這種情況需要開啟新的線程,新開的線程就不好訪問View對象了。強(qiáng)行訪問的話會(huì)報(bào):android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.這時(shí)候你需要?jiǎng)?chuàng)建一個(gè)繼承了android.os.Handler的子類,并重寫handleMessage(Message msg)方法。android.os.Handler是能發(fā)送和處理消息的,你需要在Activity中發(fā)出更新UI的消息,然后再你的Handler(可以使用匿名內(nèi)部類)中處理消息(因?yàn)槟涿麅?nèi)部類可以訪問父類變量,你可以直接調(diào)用View對象中的invalidate()方法)。也就是說:在新線程創(chuàng)建并
發(fā)送一個(gè)Message,然后再主線程中捕獲、處理該消息。
3.使用多線程和雙緩沖
Android中SurfaceView是View的子類,她同時(shí)也實(shí)現(xiàn)了雙緩沖。你可以定義一個(gè)她的子類并實(shí)現(xiàn)SurfaceHolder.Callback接口。由于實(shí)現(xiàn)SurfaceHolder.Callback接口,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中l(wèi)ockCanvas()方法可以鎖定畫布,繪制玩新的圖像后調(diào)用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。
13.IPC及原理
什么是Android操作系統(tǒng),所謂的Android:是基于Linux內(nèi)核的軟件平臺(tái)和操作系統(tǒng),早期由Google開發(fā),后由開放手機(jī)聯(lián)盟Open Handset Alliance)開發(fā)。
Linux系統(tǒng)中進(jìn)程間通信的方式有:socket, named pipe,message queque, signal,share memory。Java系統(tǒng)中的進(jìn)程間通信方式有socket, named pipe等。android應(yīng)用程序理所當(dāng)然可以應(yīng)用JAVA的IPC
機(jī)制實(shí)現(xiàn)進(jìn)程間的通信,取而代之的是Binder通信。Google為什么要采用這種方式呢,這取決于Binder通信方式的高效率。Binder通信是通過linux的binder driver來實(shí)現(xiàn)的。Binder通信操作類似線程遷移(thread migration),兩個(gè)進(jìn)程間IPC看起來就象是一個(gè)進(jìn)程進(jìn)入另一個(gè)進(jìn)程執(zhí)行代碼然后帶著執(zhí)行的結(jié)果返回。Binder的用戶空間為每一個(gè)進(jìn)程維護(hù)著一個(gè)可用的線程池,線程池用于處理到來的IPC以及執(zhí)行進(jìn)程本地消息,Binder通信是同步而不是異步。Android中的Binder通信是基于Service與Client的,所有需要IBinder通信的進(jìn)程都必須創(chuàng)建一個(gè)IBinder接口。
系統(tǒng)中有一個(gè)進(jìn)程管理所有的system service,Android虛擬機(jī)不允許用戶添加非授權(quán)的System service,當(dāng)然現(xiàn)在源碼開發(fā)了,我們可以修改一些代碼來實(shí)現(xiàn)添加底層system Service的目的。
對用戶程序來說,我們也要?jiǎng)?chuàng)建server,或者Service用于進(jìn)程間通信,這里有一ActivityManagerService管理JAVA應(yīng)用層所有的service創(chuàng)建與連接(connect)。disconnect,所有的 Activity也是通過這個(gè)service來啟動(dòng),加載的。ActivityManagerService也是加載在Systems Servcie中的。
Android虛擬機(jī)啟動(dòng)之前系統(tǒng)會(huì)先啟動(dòng)service Manager進(jìn)程,service Manager打開binder驅(qū)動(dòng),并通知binder kernel驅(qū)動(dòng)程序這個(gè)進(jìn)程將作為System Service Manager。然后該進(jìn)程將進(jìn)入一個(gè)循環(huán),等待處理來自其他進(jìn)程的數(shù)據(jù)。用戶創(chuàng)建一個(gè)System service后,通過defaultServiceManager得到一個(gè)
遠(yuǎn)程ServiceManager的接口。
通過這個(gè)接口我們可以調(diào)用 addService函數(shù)將System service添加到Service Manager進(jìn)程中,然后client可以通過getService獲取到需要連接的目的Service的IBinder對象。這個(gè)IBinder是 Service的BBinder在binder kernel的一個(gè)參考,所以service IBinder 在binder kernel中不會(huì)存在相同的兩個(gè)
IBinder對象。
每一個(gè)Client進(jìn)程同樣需要打開Binder驅(qū)動(dòng)程序。對用戶程序而言,我們獲得這個(gè)對象就可以通過binder kernel訪問service對象中的方法。Client與Service在不同的進(jìn)程中,通過這種方式實(shí)現(xiàn)了類似線程間的遷移的通信方式,對用戶程序而言當(dāng)調(diào)用Service返回的IBinder接口后,訪問Service中的方法就
如同調(diào)用自己的函數(shù)。實(shí)現(xiàn)接口時(shí)有幾個(gè)原則:
拋出的異常不要返回給調(diào)用者.跨進(jìn)程拋異常處理是不可取的。IPC調(diào)用是同步的。如果你知道一個(gè)IPC服務(wù)需要超過幾毫秒的時(shí)間才能完成地話,你應(yīng)該避免在Activity的主線程中調(diào)用。
也就是IPC調(diào)用會(huì)掛起應(yīng)用程序?qū)е陆缑媸ロ憫?yīng).這種情況應(yīng)該考慮單起一個(gè)線程來處理,能在AIDL接口中聲明靜態(tài)屬性。IPC的調(diào)用步驟:
1.聲明一個(gè)接口類型的變量,該接口類型在.aidl文件中定義。
2.實(shí)現(xiàn)ServiceConnection。
3.調(diào)用ApplicationContext.bindService(),并在ServiceConnection實(shí)現(xiàn)中進(jìn)行傳遞.4.在ServiceConnection.onServiceConnected()實(shí)現(xiàn)中,你會(huì)接收一個(gè)IBinder實(shí)例(被調(diào)用的Service).調(diào)用 YourInterfaceName.Stub.asInterface((IBinder)service)將參數(shù)轉(zhuǎn)換YourInterface類型。
5.調(diào)用接口中定義的方法。你總要檢測到DeadObjectException異常,該異常在連接斷開時(shí)被拋
出。它只會(huì)被遠(yuǎn)程方法拋出。
6.斷開連接,調(diào)用接口實(shí)例中的ApplicationContext.unbindService()
14.Android多線程
在Android下面也有多線程的概念,在C/C++中,子線程可以是一個(gè)函數(shù),一般都是一個(gè)帶有循環(huán)的函數(shù),來處理某些數(shù)據(jù),優(yōu)先線程只是一個(gè)復(fù)雜的運(yùn)算過程,所以可能不需要while循環(huán),運(yùn)算完成,函數(shù)結(jié)束,線程就銷毀。對于那些需要控制的線程,一般我們都是和互斥鎖相互關(guān)聯(lián),從而來控制線程的進(jìn)度,一般我們創(chuàng)建子線程,一種線程是很常見的,那就是帶有消息循環(huán)的線程。
消息循環(huán)是一個(gè)很有用的線程方式,曾經(jīng)自己用C在Linux下面實(shí)現(xiàn)一個(gè)消息循環(huán)的機(jī)制,往消息隊(duì)列里添加數(shù)據(jù),然后異步的等待消息的返回。當(dāng)消息隊(duì)列為空的時(shí)候就會(huì)掛起線程,等待新的消息的加入。這是一個(gè)很通用的機(jī)制。在Android,這里的線程分為有消息循環(huán)的線程和沒有消息循環(huán)的線程,有消息循環(huán)的線程一般都會(huì)有一個(gè)Looper,這個(gè)事android的新概念。我們的主線程(UI線程)就是一個(gè)消息循環(huán)的線程。針對這種消息循環(huán)的機(jī)制,我們引入一個(gè)新的機(jī)制Handle,我們有消息循環(huán),就要往消息循環(huán)里面發(fā)送相應(yīng)的消息,自定義消息一般都會(huì)有自己對應(yīng)的處理,消息的發(fā)送和清除,消息的的處理,把這些都封裝在Handle里面,注意Handle只是針對那些有Looper的線程,不管是UI線程還是子線程,只要你有Looper,我就可以往你的消息隊(duì)列里面添加?xùn)|西,并做相應(yīng)的處理。
但是這里還有一點(diǎn),就是只要是關(guān)于UI相關(guān)的東西,就不能放在子線程中,因?yàn)樽泳€程是不能操作UI的,只能進(jìn)行數(shù)據(jù)、系統(tǒng)等其他非UI的操作。
15.Android為什么要設(shè)計(jì)4大組件,他們之間的聯(lián)系,不設(shè)計(jì)行不行(主要是為了實(shí)現(xiàn)MVC模式,然而java中最難的模式也是這個(gè),很少有產(chǎn)品能將這個(gè)模式做得很好【Technicolor 的面試官問的這個(gè)】
16,service的周期,activity的周期,談下你對Android內(nèi)部應(yīng)用的了解,比如他做電話,以及聯(lián)系人等等應(yīng)用。框架層有很多東西還是多看看,熟悉Android怎么做的,不管你做應(yīng)用程開發(fā)還是應(yīng)用框架層開發(fā)很有好處的。在就是你項(xiàng)目經(jīng)驗(yàn),突出你遇到什么難點(diǎn),然后是怎么解決的!盡量將每個(gè)技術(shù)點(diǎn)凸顯出來,當(dāng)然面試官有時(shí)候會(huì)為了體現(xiàn)你是否真正做過,他會(huì)問你,你在這個(gè)應(yīng)用中做那個(gè)模塊,用了多少個(gè)類之類的問題。偶爾有的面試官會(huì)問你,你用過Android自帶的單元測試了沒,怎么用的?當(dāng)然我面試過很多家單位,有 的是做平板,手機(jī),數(shù)字電視,有的是做出個(gè)erp之類的客戶端等等,出于前面的三個(gè),基本上都是將Android的全部改掉,如果真正要做Android的話,大家要學(xué)的還很多。總之,一句話,什么樣的面試官都有,去面試的時(shí)候要做好一切心理準(zhǔn)備,不管是技術(shù)還是基礎(chǔ)都得扎實(shí)。一個(gè)人的交談能力也很重要,總之不是非常標(biāo)準(zhǔn)的普通話,最起碼你說的得讓別人聽得懂,而且得把面試官講得非常徹底,這樣你獲得offer的機(jī)會(huì)更大,談工資也有優(yōu)勢~~當(dāng)然曾經(jīng)一家公司的面試官跟我說過,技術(shù)是不惜錢的,只要你有能力,多少錢他都請。_ 確實(shí),來北京求職期間,牛人真的很多,而且有的面試官也非常好,給了很多忠肯的意見。并不是每個(gè)面試官都特想為難你的~最主要的還是想知道你的技術(shù),因?yàn)樗麄円彩浅怨撅垼脼檫@個(gè)負(fù)責(zé)。
Basic:
1.基本的UI控件和布局文件
2.UI配套的Adapter的使用
3.Activity, Intent,Service,broadCast Receiver他們的生命周期管理熟悉一下
4.操作手機(jī)上的數(shù)據(jù)庫SQLite應(yīng)用
17.為什么看好 Android
對于開發(fā)人員來講:上手容易,入門簡單,api齊全,適應(yīng)性強(qiáng) 對于用戶來講:軟件豐富,系統(tǒng)穩(wěn)定,功能齊全 對于開發(fā)商來講:可定制性高,開發(fā)成本低,免費(fèi)。
18.現(xiàn)在在公司做哪些工作(關(guān)于 Android)錯(cuò)
手機(jī)軟件開發(fā)一般是分平臺(tái)的,目前比較火的是iPhone和Android手機(jī)平臺(tái)上的軟件開發(fā)。
一般大學(xué)計(jì)算機(jī)畢業(yè),都會(huì)學(xué)過相應(yīng)的編程語言,比如C或C++,有這兩種語言做為基礎(chǔ),相信你可以快速去掌握其他的編程語言。
如果你想從事iPhone平臺(tái)上的開發(fā)就要去學(xué)習(xí)Obj-C語言,想從事Android平臺(tái)上的就學(xué)習(xí)Java語言,除了掌握語言以后,還有的就是不同平臺(tái)上的開發(fā)工具。
如果你想從事手機(jī)軟件開發(fā)方面的工作的話,我建議你可以選擇一家專業(yè)的移動(dòng)互聯(lián)網(wǎng)開發(fā)培訓(xùn)學(xué)校,參加專業(yè)的培訓(xùn)能幫助你更系統(tǒng)更扎實(shí)的掌握目前最先進(jìn)的技術(shù)
19.Android 的框架以及一些基礎(chǔ)知識(shí)
20.Android 一些方面的領(lǐng)悟(如Android框架的 IoC特性,View System 的狀態(tài)機(jī)機(jī)制等)
21.對多線程的運(yùn)用和理解,及多線程之間handle的傳值。
22.對android 虛擬機(jī)的理解,包括內(nèi)存管理機(jī)制垃圾回收機(jī)制。
23.framework工作方式及原理,Activity是如何生成一個(gè)view的,機(jī)制是什么。
24.android本身的一些限制,不如apk包大小限制,讀取大文件時(shí)的時(shí)間限制。
25.Linux中跨進(jìn)程通信的集中方式
1.socket;
2.name pipe命名管道; 3.message queue消息隊(duì)列; 4.singal信號量;
5.share memory共享內(nèi)存;
26.dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個(gè)概念
DVM指dalivk的虛擬機(jī)。每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。而每一個(gè)DVM都是在Linux 中的一個(gè)進(jìn)程,所以說可以認(rèn)為是同一個(gè)概念。
27.sim卡的EF 文件有何作用
sim卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機(jī)通訊,sim本 身可以有自己的操作系統(tǒng),EF就是作存儲(chǔ)并和手機(jī)通訊用的
28.AT命令的User case的概念
1、Use Case的作用:
我個(gè)人認(rèn)為Use Case僅僅用來反映用戶需求,并且在對象分析過程中,能夠起到一個(gè)查漏補(bǔ)缺的作用。但是使用“先確定Use Case,再指認(rèn)對象”實(shí)在是一種愚蠢的方法(恕我直言)。我個(gè)人認(rèn)為,指認(rèn)對象使用Yourdon在《Objuect Oriented Analysis》中提到的使用CheckList的方法在實(shí)踐中是比較實(shí)用的。我近來讀到的幾本書,也印證了我的想法。就我我個(gè)人在實(shí)踐中的經(jīng)驗(yàn),使用“首先確定Use Case”策略,非常容易導(dǎo)致分析員滑入“功能分解”的泥沼。而且從Use Case來導(dǎo)出對象將導(dǎo)致拙劣的分析模型。
2、Use Case之間的關(guān)系:
UML 1.3中,Use Case之間的關(guān)系只有3種,Generalization,Include和Extend,國內(nèi)出版的關(guān)于UML的中文書有兩本,一本是《UML從入門到精通》(其實(shí)應(yīng)該叫做Rose入門),一本是北航的《面向?qū)ο蟮目梢暬<夹g(shù)》,后一本書在這個(gè)方面起到了很壞的作用(前一本書我沒有怎么看,大概也好不到哪里去),一是使用了比較老的UML標(biāo)準(zhǔn),比如使用了Use關(guān)系,而且對于Extend和Generalization關(guān)系的描述也很混亂,很多人受到了誤導(dǎo)(尤其是Extend關(guān)系)。我建議有條件的網(wǎng)友盡量去看英文原版的著作,比如“UML三劍客”的《Unified Modeling Language User Guide》或者直接去讀UML1.3的規(guī)范。(而且Use Case之間的關(guān)系是用虛線+箭頭表示的,直到Rose 2000對此都沒有支持)
3、Actor和Use Case之間的關(guān)系:
在UML 1.3之中,Actor和Use Case之間的關(guān)系應(yīng)該是沒有箭頭的。雖然規(guī)范中并沒有明確禁止使用箭頭,但是從字句中隱含的意義來看,應(yīng)該是沒有箭頭的,而且規(guī)范中給出的示例是沒有箭頭的。我認(rèn)識(shí)的很多人,想當(dāng)然的認(rèn)為Actor和Use Case之間的關(guān)系上的箭頭標(biāo)示信息流向或者主/被動(dòng)關(guān)系,其實(shí)這個(gè)關(guān)系僅僅表示某個(gè)Actor參與了某個(gè)Use Case。
29﹑Android 手機(jī)操作系統(tǒng)的四層架構(gòu)?
架構(gòu)框架以此從上到下:
1.Applications
(應(yīng)用程序(應(yīng)用層));
Android 會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括 email 客戶端,SMS 短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用 JAVA 語 言編寫的。
2.Application FrameWork
(應(yīng)用程序擴(kuò)展層(框架));
由于 Android 的手機(jī)操作系統(tǒng)是,基于 Liunx 2.6 系統(tǒng)之上封裝而成。所以開發(fā)人員可也以直接訪問核心程序所使用的API框架,該核心應(yīng)用程序的API框架設(shè)計(jì)簡化了組件的重用,任何一個(gè)核心應(yīng)用程序(模塊)都暴露出它的功能作用,并且其他應(yīng)用程序也都可以使用該核心應(yīng)用程序(模塊)的功能(不過的遵守該核心應(yīng)用程序框架的安全性限制)。同樣,該應(yīng)用程序的重用機(jī)制也使用戶方便使用應(yīng)程序的相關(guān)組件。API 框架隱藏的核心應(yīng)用程序是一系列的應(yīng)用程序的服務(wù)和系統(tǒng)應(yīng)用,其中包括如下:
(Android 手機(jī)中的 View 是最基本的一個(gè) UI 類)豐富而又可擴(kuò)展的視圖(手機(jī)界面所顯示的組件(Activity上所顯示的))組件,可以用來構(gòu)建應(yīng)用程序
如:(視圖)Views, 網(wǎng)格(grids), 文本框(text boxes), 按鈕(button), 放置圖片區(qū)(imageview),文本編輯區(qū)
(edittext), 文本顯示區(qū)(textview),3.Android RunTime Libraries
(Android 系統(tǒng)運(yùn)行庫);
4.Liunx Kernel
(Android 系統(tǒng)最底層核心系統(tǒng) Liunx)
Android 的核心系統(tǒng)服務(wù)依賴于 Liunx 2.6 內(nèi)核,如系統(tǒng)安全,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。Liunx 內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。
30、Android dvm的進(jìn)程和 Linux 的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個(gè)概念
DVM 指 dalivk 的虛擬機(jī)。每一個(gè) Android 應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的 Dalvik 虛擬機(jī)實(shí)例。而每一個(gè) DVM 都是在 Linux 中的一個(gè)進(jìn)程,所以說可以認(rèn)為是同一個(gè)概念。
31、sim卡的 EF 文件有何作用
sim 卡的文件系統(tǒng)有自己規(guī)范,主要是為了和手機(jī)通訊,sim 本身可以有自己的操作 系統(tǒng),EF就是作存儲(chǔ)并和手機(jī)通訊用的
32、嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性
頁式,段式,段頁,用到了 MMU,虛擬空間等技術(shù)
33.什么是嵌入式實(shí)時(shí)操作系統(tǒng), Android 操作系統(tǒng)屬于實(shí)時(shí)操作系統(tǒng)嗎?
嵌入式實(shí)時(shí)操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以 處理,其處理的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并 控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致運(yùn)行的嵌入式操作系統(tǒng)。主要用于工業(yè)控制、軍事設(shè)備、航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時(shí)間有苛刻的要求,這就需要使用實(shí)時(shí)系統(tǒng)。又可分為軟實(shí)時(shí)和硬實(shí)時(shí)兩種,而 android 是基于 linux 內(nèi)核的,因此屬于軟實(shí)時(shí)。
34、一條最長的短信息約占多少 byte?
中文 70(包括標(biāo)點(diǎn)),英文 160,160 個(gè)字節(jié)
1.2.3.4.5.6.7.8.9.10.11.12.13.14.什么是Activity?
請描述一下Activity生命周期。
兩個(gè)Activity之間跳轉(zhuǎn)時(shí)必然會(huì)執(zhí)行的是哪幾個(gè)方法。
橫豎屏切換時(shí)候Activity的生命周期。
如何將一個(gè)Activity設(shè)置成窗口的樣式。
你后臺(tái)的Activity被系統(tǒng) 回收怎么辦?
如何退出Activity?如何安全退出已調(diào)用多個(gè)Activity的Application?
如果后臺(tái)的Activity由于某原因被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?
兩個(gè)Activity之間怎么傳遞數(shù)據(jù)?
怎么讓在啟動(dòng)一個(gè)Activity是就啟動(dòng)一個(gè)service?
同一個(gè)程序,但不同的Activity是否可以放在不同的Task任務(wù)棧中?
Activity怎么和service綁定,怎么在activity中啟動(dòng)自己對應(yīng)的service? 什么是Service以及描述下它的生命周期。
Service有哪些啟動(dòng)方法,有什么區(qū)別,怎樣停用Service?
15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.不用service,B頁面為音樂播放,從A跳轉(zhuǎn)到B,再返回,如何使音樂繼續(xù)播放?
什么是IntentService?有何優(yōu)點(diǎn)? 什么時(shí)候使用Service?
請描述一下Intent 和 Intent Filter。Intent傳遞數(shù)據(jù)時(shí),可以傳遞哪些類型數(shù)據(jù)? 說說Activity,Intent,Service是什么關(guān)系。請描述一下Broadcast Receiver。
在manifest和代碼中如何注冊和使 用 broadcast receiver。請介紹下ContentProvider是如何實(shí)現(xiàn)數(shù)據(jù)共享的。請介紹下Android的數(shù)據(jù)存儲(chǔ)方式。
為什么要用ContentProvider?它和sql的實(shí)現(xiàn)上有什么差別? 請介紹下Android中常用的五種布局。
談?wù)刄I中,Padding和Margin有什么區(qū)別?
widget相對位置的完成在antivity的哪個(gè)生命周期階段實(shí)現(xiàn)。
請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系。AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?
請解釋下Android程序運(yùn)行時(shí)權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。
系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?
對多線程的運(yùn)用和理解,及多線程之間handle的傳值。對android虛擬機(jī)的理解,包括內(nèi)存管理機(jī)制垃圾回收機(jī)制。
Framework工作方式及原理,Activity是如何生成一個(gè)view的,機(jī)制是什么。android本身的一些限制,比如apk包大小限制,讀取大文件時(shí)的時(shí)間限。如何加載的音樂信息,如何改善其效率。
ListView如何提高其效率?
啟動(dòng)應(yīng)用后,改變系統(tǒng)語言,應(yīng)用的語言會(huì)改變么?
啟動(dòng)一個(gè)程序,可以主界面點(diǎn)擊圖標(biāo)進(jìn)入,也可以從一個(gè)程序中跳轉(zhuǎn)過去,二者有什么區(qū)別?
Android程序與Java程序的區(qū)別?
Android中Task任務(wù)棧的分配。
在Android中,怎么節(jié)省內(nèi)存的使用,怎么主動(dòng)回收內(nèi)存?
不同工程中的方法是否可以相互調(diào)用?
在Android中是如何實(shí)現(xiàn)判斷區(qū)分通話記錄中的電話狀態(tài),去電,來電、未接來電?
dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個(gè)概念
sim卡的EF 文件有何作用
如何判斷是否有SD卡?
嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性。
什么是嵌入式實(shí)時(shí)操作系統(tǒng), Android 操作系統(tǒng)屬于實(shí)時(shí)操作系統(tǒng)嗎? 一條最長的短信息約占多少byte? Linux中跨進(jìn)程通信的幾種方式。談?wù)剬ndroid NDK的理解。
談?wù)凙ndroid的優(yōu)點(diǎn)和不足之處。
Android系統(tǒng)中GC什么情況下會(huì)出現(xiàn)內(nèi)存泄露呢? Android UI中的View如何刷新。簡單描述下Android 數(shù)字簽名。什么是ANR 如何避免它?
59.60.61.62.63.64.65.66.android中的動(dòng)畫有哪幾類,它們的特點(diǎn)和區(qū)別是什么?
handler機(jī)制的原理。
android中線程與線程,進(jìn)程與進(jìn)程之間如何通信。
說說mvc模式的原理,它在android中的運(yùn)用。
android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區(qū)別。
DDMS與TraceView的區(qū)別? res目錄有默認(rèn)幾項(xiàng)resource。android的哪個(gè)版本是一次重大的升級?
第三篇:android面試指南
1、activity的生命周期。
activity主要生命周期的方法說明:
1)onCreate(Bundle savedInstanceState):創(chuàng)建activity時(shí)調(diào)用。設(shè)置在該方法中,還以Bundle的形式提供對以前儲(chǔ)存的任何狀態(tài)的訪問!
2)onStart():activity變?yōu)樵谄聊簧蠈τ脩艨梢姇r(shí)調(diào)用。
3)onResume():activity開始與用戶交互時(shí)調(diào)用(無論是啟動(dòng)還是重新啟動(dòng)一個(gè)活動(dòng),該方法總是被調(diào)用的)。
4)onPause():activity被暫停或收回cpu和其他資源時(shí)調(diào)用,該方法用于保存活動(dòng)狀態(tài)的,也是保護(hù)現(xiàn)場,壓棧吧!
5)onStop():activity被停止并轉(zhuǎn)為不可見階段及后續(xù)的生命周期事件時(shí)調(diào)用。
6)onRestart():重新啟動(dòng)activity時(shí)調(diào)用。該活動(dòng)仍在棧中,而不是啟動(dòng)新的活動(dòng)。
7)onDestroy():activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用,該方法被
2.橫豎屏切換時(shí)候activity的生命周期
3.android中的動(dòng)畫有哪幾類,它們的特點(diǎn)和區(qū)別是什么
4.handler機(jī)制的原理
5.說說activity,intent,service是什么關(guān)系
6.android中線程與線程,進(jìn)程與進(jìn)程之間如何通信
7.widget相對位置的完成在antivity的哪個(gè)生命周期階段實(shí)現(xiàn)
8.說說mvc模式的原理,它在android中的運(yùn)用
9.說說在android中有哪幾種數(shù)據(jù)存儲(chǔ)方式
10.android中有哪幾種解析xml的類,官方推薦哪種?以及它們的原理和區(qū)別 一,listview你是怎么優(yōu)化的。
二,view的刷新,之前說過
三,IPC及原理
四,Android多線程
五,Android為什么要設(shè)計(jì)4大組件,他們之間的聯(lián)系,不設(shè)計(jì)行不行(主要是為了實(shí)現(xiàn)MVC模式,然而java中最難的模式也是這個(gè),很少有產(chǎn)品能將這個(gè)模式做得很好【Technicolor的面試官問的這個(gè)】
六,service的周期,activity的周期,談下你對Android內(nèi)部應(yīng)用的了解,比如他做電話,以及聯(lián)系人等等應(yīng)用。框架層有很多東西還是多看看,熟悉Android怎么做的,不管你做應(yīng)用程開發(fā)還是應(yīng)用框架層開發(fā)很有好處的。
在就是你項(xiàng)目經(jīng)驗(yàn),突出你遇到什么難點(diǎn),然后是怎么解決的!盡量將每個(gè)技術(shù)點(diǎn)凸顯出來,當(dāng)然面試官有時(shí)候會(huì)為了體現(xiàn)你是否真正做過,他會(huì)問你,你在這個(gè)應(yīng)用中做那個(gè)模塊,用了多少個(gè)類之類的問題。
偶爾有的面試官會(huì)問你,你用過Android自帶的單元測試了沒,怎么用的?當(dāng)然我面試過很多家單位,有的是做平板,手機(jī),數(shù)字電視,有的是做出 個(gè)erp之類的客戶端等等,出于前面的三個(gè),基本上都是將Android的全部改掉,如果真正要做Android的話,大家要學(xué)的還很多。
總之,一句話,什么樣的面試官都有,去面試的時(shí)候要做好一切心理準(zhǔn)備,不管是技術(shù)還是基礎(chǔ)都得扎實(shí)。一個(gè)人的交談能力也很重要,總之不是非常標(biāo)準(zhǔn) 的普通話,最起碼你說的得讓別人聽得懂,而且得把面試官講得非常徹底,這樣你獲得offer的機(jī)會(huì)更大,談工資也有優(yōu)勢~~當(dāng)然曾經(jīng)一家公司的面試官跟我 說過,技術(shù)是不惜錢的,只要你有能力,多少錢他都請。_
確實(shí),來北京求職期間,牛人真的很多,而且有的面試官也非常好,給了很多忠肯的意見。并不是每個(gè)面試官都特想為難你的~最主要的還是想知道你的技術(shù),因?yàn)樗麄円彩浅怨撅垼脼檫@個(gè)負(fù)責(zé)。
Basic:
1.基本的UI控件和布局文件
2.UI配套的Adapter的使用
3.Activity, Intent,Service,broadCast Receiver他們的生命周期管理熟悉一下
4.操作手機(jī)上的數(shù)據(jù)庫SQLite應(yīng)用
Advanced_1:
1.為什么看好 Android
2.現(xiàn)在在公司做哪些工作(關(guān)于 Android)
3.Android 的框架以及一些基礎(chǔ)知識(shí)
4.Android 一些方面的領(lǐng)悟(如Android框架的 IoC特性,View System 的狀態(tài)機(jī)機(jī)制等)
Advanced_2:
1.對多線程的運(yùn)用和理解,及多線程之間handle的傳值。
2.對android 虛擬機(jī)的理解,包括內(nèi)存管理機(jī)制垃圾回收機(jī)制。
3.framework工作方式及原理,Activity是如何生成一個(gè)view的,機(jī)制是什么。
4.android本身的一些限制,不如apk包大小限制,讀取大文件 時(shí)的時(shí)間限制。
5.Linux中跨進(jìn)程通信的集中方式
Android_4:
1.dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個(gè)概念
2.sim卡的EF 文件有何作用
3.AT命令的User case的概念
4.嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性
5.什么是嵌入式實(shí)時(shí)操作系統(tǒng), Android 操作系統(tǒng)屬于實(shí)時(shí)操作系統(tǒng)嗎?
6.一條最長的短信息約占多少byte?
補(bǔ)充:
近期很多公司招聘Android程序員,就一些常見的Android面試基礎(chǔ)題做下總結(jié),看看你能做出多少道?
1.Intent的幾種有關(guān)Activity啟動(dòng)的方式有哪些,你了解每個(gè)含義嗎? 這里Android123提示大家,Intent的一些標(biāo)記有
FLAG_ACTIVITY_BROUGHT_TO_FRONT、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和 FLAG_ACTIVITY_NEW_TASK 等。每種含義大家看SDK文檔和具體跑下這樣你的記憶會(huì)更深刻些。
2.Activity和Task的啟動(dòng)模式有哪些? 每種含義是什么?
有關(guān)在AndroidManifest.xml中的android:launchMode定義,主要有standard、singleTop、singleTask和singleInstance,同時(shí)對于android:taskAffinity這些問題大家也要了解,Android開發(fā)網(wǎng)在 以前的文章中講過,不過很多開發(fā)者仍然不是很清楚,這些基礎(chǔ)問題我們以后仍然會(huì)再次總結(jié)。
3.通過Intent傳遞一些二進(jìn)制數(shù)據(jù)的方法有哪些?
1).使用Serializable接口實(shí)現(xiàn)序列化,這是Java常用的方法。
2).實(shí)現(xiàn)Parcelable接口,這里Android的部分類比如Bitmap類就已經(jīng)實(shí)現(xiàn)了,同時(shí)Parcelable在Android AIDL中交換數(shù)據(jù)也很常見的。
4.能說下Android應(yīng)用的入口點(diǎn)嗎?
在Google的虛擬機(jī)中Application實(shí)例中已經(jīng)實(shí)現(xiàn)了main方法,有關(guān)具體的Application介紹可以參考 Android程序的入口點(diǎn)是什么,不是Main()嗎
5.Java基礎(chǔ)問題,說說HashSet和HashTable的區(qū)別?
這個(gè)相信Java程序員都知道HashSet相對于HashMap就是不能存放重復(fù)的數(shù)據(jù),對于HashTable來說,存放的數(shù)據(jù)不能出現(xiàn)key或value為null這樣的情況。
6.Java基礎(chǔ)問題,用Java的集合類寫下廣度優(yōu)先搜索.這個(gè)屬于基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)問題,通過隊(duì)列處理一層一層,相對于深度優(yōu)先的棧處理方式來說更實(shí)用一些。
7.Android都有哪些XML解析器,都熟練掌握嗎?
這里XmlPull、SAX和DOM相信做過Web開發(fā)的都已經(jīng)滾瓜爛熟了。
8.SQLite支持事務(wù)嗎? 添加刪除如何提高性能?
SQLite作為輕量級的數(shù)據(jù)庫,比MySQL還小,但支持SQL語句查詢,提高性能可以考慮通過原始經(jīng)過優(yōu)化的SQL查詢語句方式處理。
9.Android Service和Binder、AIDL你都熟練嗎?
作為Android重要的后臺(tái)服務(wù),這些每個(gè)Android開發(fā)者都應(yīng)該掌握,這也算是和Java SE最大的不同了,具體的實(shí)例大家可以查看Android音樂播放器的源代碼Music.git中的,這里不再贅述。
10.你用過哪款A(yù)ndroid手機(jī),有哪些優(yōu)點(diǎn)和不足,相對于iPhone或Symbian又有哪些優(yōu)缺點(diǎn)?
把這個(gè)作為面試題也是考察下,可以大概了解到它對Android的了解程度,多移動(dòng)開發(fā)的認(rèn)識(shí)。
轉(zhuǎn)自:
第四篇:Android 個(gè)人總結(jié)
Android 個(gè)人總結(jié)
通過本學(xué)期的的學(xué)習(xí),我知道了android是由google開發(fā)的一款手機(jī)平臺(tái),android的基本架構(gòu)是基于linux內(nèi)核,由內(nèi)核向外的反別為庫和應(yīng)用架構(gòu),然后就是我們手機(jī)上的可視化應(yīng)用了,android是一個(gè)系統(tǒng),但是并非是操作系統(tǒng)。
在開發(fā)之前,我們首先要搭建一個(gè)開發(fā)環(huán)境,用的是java編程的eclipse,我們從網(wǎng)上下載sdk包,里面包含了android開發(fā)常用的工具,android既是手機(jī)操作系統(tǒng),也是跨平臺(tái)(windows,mac,linux)的開發(fā)工具,雖然是使用linux為核心的平臺(tái),但是你可以在很多地方感覺到類似做網(wǎng)頁開發(fā)的感覺。具有本身獨(dú)特的進(jìn)程管理方式,完整的上網(wǎng)功能,搭配了google地圖,Gmail等服務(wù),即使像我們這些尚未入門的開發(fā)者也能開發(fā)出自己理想的應(yīng)用程序來。
剛開始的時(shí)候,得知android開發(fā)需要使用java語言心里了小小的畏懼,但隨著學(xué)習(xí)的漸漸深入就會(huì)發(fā)現(xiàn)android平臺(tái)只是使用了java的語法而已,所以,即使我們不具備java語言開發(fā)的基礎(chǔ),也可以放心地加入到android開發(fā)當(dāng)中來。
第一節(jié)課,老師向我們詳細(xì)介紹了開發(fā)界面右邊窗口的內(nèi)容,首先是src目錄,里面包含了我們開發(fā)界面的java文件以及各種我們創(chuàng)建的類組成的開發(fā)包。然后是gen目錄,里面涵蓋的是系統(tǒng)的類文件(如R.java,Buidconfig.java)與android系統(tǒng)的依賴文件(Android Dependencies)。再下來是assets(用戶資源文件),里面文件的訪問是通過文件路徑的形式調(diào)用。Bin文件里面包括了res資源文件,android項(xiàng)目配置文件androidmanifest以及我們開發(fā)之后產(chǎn)生的后綴為.apk的應(yīng)用程序文件。Res是系統(tǒng)資源目錄,我們要用到得圖片資源,顏色資源,字符串資源都在里面。一般的開發(fā)都要用到界面文件也包含在里面。
Eclipse具有史上超豪華的手機(jī)控件,包括常用的文本文件,文本框,按鈕,進(jìn)度條等,還有特殊形式的email,gmail文本框,在開發(fā)過程當(dāng)中,很多控件都是以拖拉的形式拖拽到開發(fā)界面上,大大地減少了我們開發(fā)時(shí)候的工作量,在配置文件中,我們可以添加各種各樣的系統(tǒng)動(dòng)作,以及系統(tǒng)服務(wù),還可以建立用戶自己的文件庫。
當(dāng)我們開發(fā)完成的時(shí)候,就可以運(yùn)行手機(jī)模擬器,在上面,我們可以像操作當(dāng)今市場上最流行的android手機(jī)一樣操作我們的模擬器,可視化的界面可以我們隨心所欲地下載我們開發(fā)的應(yīng)用程序到模擬器上,就可以實(shí)現(xiàn)步步跟進(jìn),想要修改哪里就一目了然了,模擬器上人性化的設(shè)計(jì)界面大大方便了用戶與機(jī)器之間的交流。如果我們擁有一部android系統(tǒng)的手機(jī)的話,就可以把自己開發(fā)的應(yīng)用程序下到手機(jī)上,看到自己的成果,頓生成就感,真的很有樂趣。也加大了我對學(xué)習(xí)android的信心。
總體來說,學(xué)習(xí)android就要不怕困難,迎難而上。Android不久可以滿足自己的成就感,還可以在未來的生活中找到自己理想的工作。用別人準(zhǔn)備好的各種類,包來開發(fā)出自己獨(dú)特風(fēng)格的應(yīng)用程序,既省時(shí)又省力,何樂而不為呢。在這里,要感謝曾老師對我的栽培和關(guān)懷,他教給了我知識(shí),使我在學(xué)習(xí)的時(shí)候少走了很多的彎路,也增加了我對未來工作的信心。
第五篇:面試技巧總結(jié)(個(gè)人總結(jié))
銀行面試技巧總結(jié)
問題一:“請你自我介紹一下”(3分鐘)
1、這是面試的必考題目。
2、介紹內(nèi)容要與個(gè)人簡歷相一致。
3、要切中要害,不談無關(guān)、無用的內(nèi)容。
4、條理要清晰,層次要分明。
5、事先最好以文字的形式寫好背熟。
問題二:“談?wù)勀愕募彝デ闆r”
1、況對于了解應(yīng)聘者的性格、觀念、心態(tài)等有一定的作用,這是招聘單位問該問題的主要原因。
2、簡單地羅列家庭人口。
3、宜強(qiáng)調(diào)溫馨和睦的家庭氛圍。
4、宜強(qiáng)調(diào)父母對自己教育的重視。
5、宜強(qiáng)調(diào)各位家庭成員的良好狀況。
6、宜強(qiáng)調(diào)家庭成員對自己工作的支持。
7、宜強(qiáng)調(diào)自己對家庭的責(zé)任感。
問題三:“你有什么業(yè)余愛好?”
1、業(yè)余愛好能在一定程度上反映應(yīng)聘者的性格、觀念、心態(tài),這是招聘單位問該問題的主要原因。
2、最好不要說自己沒有業(yè)余愛好。
3、不要說自己有那些庸俗的、令人感覺不好的愛好。
4、最好不要說自己僅限于讀書、聽音樂、上網(wǎng),否則可能令面試官懷疑應(yīng)聘者性格孤僻。
5、最好能有一些戶外的業(yè)余愛好來“點(diǎn)綴”你的形象。
問題四:“你最崇拜誰?”
1、最崇拜的人能在一定程度上反映應(yīng)聘者的性格、觀念、心態(tài),這是面試官問該問題的主要原因。
2、不宜說自己誰都不崇拜。
3、不宜說崇拜自己。
4、不宜說崇拜一個(gè)虛幻的、或是不知名的人。
5、不宜說崇拜一個(gè)明顯具有負(fù)面形象的人。
6、所崇拜的人人最好與自己所應(yīng)聘的工作能“搭”上關(guān)系。
7、最好說出自己所崇拜的人的哪些品質(zhì)、哪些思想感染著自己、鼓舞著自己。銀行面試問題五:“你的座右銘是什么?”
思路:
1、座右銘能在一定程度上反映應(yīng)聘者的性格、觀念、心態(tài),這是面試官問這個(gè)問題的主要原因。
2、不宜說那些醫(yī)引起不好聯(lián)想的座右銘。
3、不宜說那些太抽象的座右銘。
4、座右銘最好能反映出自己某種優(yōu)秀品質(zhì)。
5、參考答案——“只為成功找方法,不為失敗找借口”
銀行面試問題六:“談?wù)勀愕娜秉c(diǎn)”
思路:
1、不宜說自己沒缺點(diǎn)。
2、不宜把那些明顯的優(yōu)點(diǎn)說成缺點(diǎn)。
3、不宜說出嚴(yán)重影響所應(yīng)聘工作的缺點(diǎn)。
4、不宜說出令人不放心、不舒服的缺點(diǎn)。
5、可以說出一些對于所應(yīng)聘工作“無關(guān)緊要”的缺點(diǎn),甚至是一些表面上看是缺點(diǎn),從工作的角度看卻是優(yōu)點(diǎn)的缺點(diǎn)。
銀行面試問題七:“談一談你的一次失敗經(jīng)歷”
思路:
1、不宜說自己沒有失敗的經(jīng)歷。
2、不宜把那些明顯的成功說成是失敗。
3、不宜說出嚴(yán)重影響所應(yīng)聘工作的失敗經(jīng)歷,4、所談經(jīng)歷的結(jié)果應(yīng)是失敗的。
5、宜說明失敗之前自己曾信心白倍、盡心盡力。
6、說明僅僅是由于外在客觀原因?qū)е率 ?/p>
7、失敗后自己很快振作起來,以更加飽滿的熱情面對以后的工作。銀行面試問題八:“你為什么選擇我們公司?”
思路:
1、面試官試圖從中了解你求職的動(dòng)機(jī)、愿望以及對此項(xiàng)工作的態(tài)度。
2、建議從行業(yè)、企業(yè)和崗位這三個(gè)角度來回答。
3、參考答案——“我十分看好貴公司所在的行業(yè),我認(rèn)為貴公司十分重視人才,而且這項(xiàng)工作很適合我,相信自己一定能做好。”
銀行面試問題十六:“您在前一家公司的離職原因是什么?”
思路:
1、最重要的是:應(yīng)聘者要使找招聘單位相信,應(yīng)聘者在過往的單位的“離職原因”在此家招聘單位里不存在。
2、避免把“離職原因”說得太詳細(xì)、太具體。
3、不能摻雜主觀的負(fù)面感受,如“太幸苦”、“人際關(guān)系復(fù)雜”、“管理太混亂”、“公司不重視人才”、“公司排斥我們某某的員工”等。
4、但也不能躲閃、回避,如“想換換環(huán)境”、“個(gè)人原因”等。
5、不能涉及自己負(fù)面的人格特征,如不誠實(shí)、懶惰、缺乏責(zé)任感、不隨和等。
6、盡量使解釋的理由為應(yīng)聘者個(gè)人形象添彩。
7、如“我離職是因?yàn)檫@家公司倒閉。我在公司工作了三年多,有較深的感情。最后,同一個(gè)面試問題并非只有一個(gè)答案,而同一個(gè)答案并不是在任何面試場合都有效,關(guān)鍵在于應(yīng)聘者掌握了規(guī)律后,對面試的具體情況進(jìn)行把握,有意識(shí)地揣摩面試官提出問題的心理背景,然后投其所好。