1. 簡要介紹一下你自己以及你最近在做的項目嗎?2. 其他時間有別的項目要做嗎?3. 你是怎麼看待自己的身份的?開發?產品經理?還是二者都是?4. 你會如何管理一個程序員團隊?5. 告訴他們公司想要的人是怎樣的。不過面試之前可以做一套在線筆試測試題,像猿圈科技的,就是針對程序員的,後面可以給分析報告
❷ 面試android高級開發工程師具備哪些技能
1、關於團隊:對內:能提升團隊內聚力和執行力,注重個人成長,能快速提高團隊戰鬥力;對外:能住區更多的資源,使項目和組內成員獲得更好的成長和發展。
2、關於技術:領導項目優化,架構變更、核心模塊的修改,也能不斷引入新技術、對標競品,不但技術上領先,也能做出更優秀的作品。
一、了解系統核心機制
1. 了解SystemServer的啟動過程
2. 了解主線程的消息循環模型
3. 了解AMS和PMS的工作原理
4. 能夠回答問題」一個應用存在多少個Window?「
5. 了解四大組件的大概工作流程
二、基本知識點的細節
1. Activity的啟動模式以及異常情況下不同Activity的表現
2. Service的onBind和onReBind的關聯
3. onServiceDisconnected(ComponentName className)和binderDied()的區別
4. AsyncTask在不同版本上的表現細節
5. 線程池的細節和參數配置
6.熟悉設計模式,有架構意識
三、技術要求
1.稍微深入的知識點
2.系統核心機制
3.基本知識點的細節
4.設計模式和架構
當然,除了上面的知識點和技能外,你還要能玩轉Rxjava、掌握自定義view 、要會進程間通信與進程保活、熱修復等知識點。
❸ Java、Android程序員自我介紹
個人經歷
->姓名、年齡、籍貫、專業、學歷、學位
興趣愛好
->運動、旅遊、發表文章、學習新技術等
工作經驗
->工作時長
->掌握的技術(如JAVA的三層開發框架SSH,Android2.3版本以上的應用框架)
->解決過什麼問題
->負責或開發過什麼項目
應聘目的
->能為貴公司解決什麼樣的問題(為寫APP)
->能為貴公司做什麼(能夠做出一手漂亮的文檔)
行業看法
->從事這個行業你領域有什麼看法
->你覺得從事這個行業領域最需要的是什麼(如吃苦耐勞)等
以上,夠你講上15分鍾的,不過估計招聘人員不會讓你講那麼久的(盡量簡要寫,看對方給的時間)。
當然,如果是面試外資的話,作好英文自我介紹的准備。
成功總是留給有準備的人的。
備註:
若面試復試開展群P類的頭腦風暴,最重要的是以下幾點
1 不搶風頭
2 在關鍵或者正常的情況下發表自己的觀點(觀點要有理由和支撐)
3 別人發表自己的看法,自己要聽,不要斷別人的話
4 不急不躁,以穩為主;立於此地,決策千里。
❹ android程序員面試時要注意什麼
第一個問題就是「不求甚解」。
何為不求甚解?其大多數的問題就是在於大量的使用第三方的jar包,問他個原理一點也答不上來,甚至是最基礎的。舉個例子說明,比如我問他json數據怎麼解析,都知道哪些解析器,直接不知道,因為現在的開發者都直接去使用GJSON,從來不去了解解析的整個過程和原理,更不會寫。雖然用google提供的工具可以輕松實現,但是原理和過程還是得要學習的。學了總會有用,現在第三方的jar包多的是,封裝的也都比較好,不是不能用,但是一定要學習原理和機制,這樣才能提高自己,舉一反三,如果只會用第三方,只會粘貼復制,你還僅僅處在碼畜的級別,甚至有可能還不如。這個問題你犯了嗎?記得要對號入座哦!
第二個問題就是不思進取,或者說叫技術落後。
怎麼說呢,技術是不斷在進步的,不斷的在革新,尤其是我們程序員這個行業。很多程序猿一旦學習完了,工作了,雖然用舊的知識和技術也能實現這種效果,但是從不會考慮效率,不去學習新的技術,明明有更好的控制項提供了,也不知道,或者知道並不去學習,還停留在以前的知識,面試時要的工資還挺高。再舉個例子,面試時,問他們ListView的復用,大家答的都挺好的,都非常明白,我再問一句:Android5.0提供了新的控制項替代了它,你們知道嗎?用過嗎?就全都啞火了。我都不知道該說什麼好?程序猿之所以累,之所以叫猿就是因為他要時時刻刻保持一顆活到老學到老的心,要利用最新的技術知識解決新的難題。
講到這里,兩個問題已經講完了,不知道你自己是否也有這樣的毛病呢?請記得對號入座哦。現在我們再說一說面試者的另一方面的事,那就是簡歷的書寫。
我相信大家寫面試簡歷肯定都有誇大的成分,都會吹牛,這不要緊,牛吹好了,工資自然高,但是別吹過頭,面試的時候我看到面試者的簡歷時,給我的感覺是:我靠,好屌,好厲害啊!這時一個情不自禁的想法就來了,我要問問他這方面的知識。比如:一個面試應用層開發的,非把自己底層開發也寫的很牛逼,你真的像你簡歷上寫的那樣「精通」嗎?面試者把簡歷寫的每個技術知識點都是精通與熟練,有時候,反而是搬起石頭砸了自己的腳,吹牛可以,誇大也可以,都是為了生存嗎?但是要適可而止,要在自己掌握的一個度里,這樣既能自己面試的漂亮和順利,給面試官也有好的印象,這樣的情況不招你,招誰啊?
❺ 工作二年以上的程序員前輩如何准備面試
做一份工作,實際就是追尋夢想的過程,而為了完成夢想,必須有一個長期規劃,從而指導我們選擇工作。它是擇業過程中最本質和最原始的參考借鑒
❻ android面試題及答案
android面試題及答案
本文是我精心整理的android面試題及答案,歡迎大家參考。
1. 下列哪些語句關於內存回收的說明是正確的? (b ) A、 程序員必須創建一個線程來釋放內存
B、 內存回收程序負責釋放無用內存
C、 內存回收程序允許程序員直接釋放內存
D、 內存回收程序可以在指定的時間釋放內存對象
2. 下面異常是屬於Runtime Exception 的是(abcd)(多選) A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
3. Math.round(11.5)等於多少(). Math.round(-11.5)等於多少(c). c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12
4. 下列程序段的輸出結果是:(b )
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、true B、false C、1 D、011.activity
5. 對一些資源以及狀態的操作保存,最好是保存在生命周期的哪個函數中進行(d) A、onPause() B、onCreate() C、 onResume() D、onStart()
6. Intent傳遞數據時,下列的數據類型哪些可以被傳遞(abcd)(多選) A、Serializable B、charsequence C、Parcelable D、Bundle
7. android 中下列屬於Intent的作用的是(c) A、實現應用程序間的數據共享
B、是一段長的生命周期,沒有用戶界面的程序,可以保持應用在後台運行,而不會因為切換頁面而消失
C、可以實現界面間的切換,可以包含動作和動作數據,連接四大組件的紐帶
D、處理一個應用程序整體性的工作
8. 下列屬於SAX解析xml文件的優點的是(b) A、將整個文檔樹在內存中,便於操作,支持刪除,修改,重新排列等多種功能
B、不用事先調入整個文檔,佔用資源少
C、整個文檔調入內存,浪費時間和空間
D、不是長久駐留在內存,數據不是持久的,事件過後,若沒有保存數據,數據就會
消失
9. 下面的對自定style的方式正確的是
A、
B、
C、
fill_parent
D、
fill_parent
10. 在android中使用Menu時可能需要重寫的方法有(ac)。(多選) A、onCreateOptionsMenu()
B、onCreateMenu()
C、onOptionsItemSelected()
D、onItemSelected()
11. 在SQL Server Management Studio 中運行下列T-SQL語句,其輸出值(c)。 SELECT @@IDENTITY
A、 可能為0.1
B、 可能為3
C、 不可能為-100
D、 肯定為0
12. 在SQL Server 2005中運行如下T-SQL語句,假定SALES表中有多行數據,執行查詢之 後的結果是(d)。 BEGIN TRANSACTION A
Update SALES Set qty=30 WHERE qty<30
BEGIN TRANSACTION B
Update SALES Set qty=40 WHEREqty<40
Update SALES Set qty=50 WHEREqty<50
Update SALES Set qty=60 WHEREqty<60
COMMITTRANSACTION B
COMMIT TRANSACTION A
A、SALES表中qty列最小值大於等於30
B、SALES表中qty列最小值大於等於40
C、SALES表中qty列的數據全部為50
D、SALES表中qty列最小值大於等於60
13. 在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個資料庫,並可以對資料庫版本進行管理的方法可以是(ab) A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()
14. android 關於service生命周期的onCreate()和onStart()說法正確的是(ad)(多選題) A、當第一次啟動的時候先後調用onCreate()和onStart()方法
B、當第一次啟動的時候只會調用onCreate()方法
C、如果service已經啟動,將先後調用onCreate()和onStart()方法
D、如果service已經啟動,只會執行onStart()方法,不在執行onCreate()方法
15. 下面是屬於GLSurFaceView特性的是(abc)(多選) A、管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖
view上。
B、管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。
C、讓渲染器在獨立的線程里運作,和UI線程分離。
D、可以直接從內存或者DMA等硬體介面取得圖像數據
16. 下面在AndroidManifest.xml文件中注冊BroadcastReceiver方式正確的
A、
android:name="android.provider.action.NewBroad"/>
B、
android:name="android.provider.action.NewBroad"/>
C、
android:name="android.provider.action.NewBroad"/>
D、
android:name="android.provider.action.NewBroad"/>
17. 關於ContenValues類說法正確的是(a) A、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的
名是String類型,而值都是基本類型
B、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的
名是任意類型,而值都是基本類型
C、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的
名,可以為空,而值都是String類型
D、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中
的名是String類型,而值也是String類型
18. 我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當,你的機器就會變得越慢,那麼線程銷毀的方法是(a) A、onDestroy()
B、onClear()
C、onFinish()
D、onStop()
19. 下面退出Activity錯誤的方法是(c) A、finish()
B、拋異常強制退出
C、System.exit()
D、onStop()
20. 下面屬於android的動畫分類的有(ab)(多項) A、Tween B、Frame C、Draw D、Animation
21. 下面關於Android dvm的進程和Linux的進程,應用程序的進程說法正確的是(d) A、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定擁有一個獨立的Dalvik虛擬機實例.而每一個DVM都是在Linux中的一個進程,所以說可以認為是同一個概念.
B、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定擁有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux中的一個進程,所以說不是一個概念.
C、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux中的一個進程,所以說不是一個概念.
D、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的 Dalvik虛擬機實例.而每一個DVM都是在Linux中的一個進程,所以說可以認為是同一個概念.
22. Android項目工程下面的assets目錄的作用是什麼bA、放置應用到的圖片資源。
B、主要放置多媒體等數據文件
C、放置字元串,顏色,數組等常量數據
D、放置一些與UI相應的布局文件,都是xml文件
23. 關於res/raw目錄說法正確的是(a)A、 這里的文件是原封不動的存儲到設備上不會轉換為二進制的格式
B、這里的'文件是原封不動的存儲到設備上會轉換為二進制的格式
C、 這里的文件最終以二進制的格式存儲到指定的包中
D、這里的文件最終不會以二進制的格式存儲到指定的包中
24. 下列對android NDK的理解正確的是(abcd )A、 NDK是一系列工具的集合
B、 NDK 提供了一份穩定、功能有限的 API 頭文件聲明。
C、 使 「Java+C」 的開發方式終於轉正,成為官方支持的開發方式
D、 NDK 將是 Android 平台支持 C 開發的開端
二.文件存儲方式
三.SQLite資料庫方式
四.內容提供器(Content provider)方式
二、Android面試填空題
25. android中常用的四個布局是framlayout,linenarlayout,relativelayout和tablelayout。26. android 的四大組件是activiey,service,broadcast和contentprovide。27. java.io包中的objectinputstream和objectoutputstream類主要用於對對象(Object)的讀寫。28. android 中service的實現方法是:startservice和bindservice。29. activity一般會重載7個方法用來維護其生命周期,除了onCreate(),onStart(),onDestory() 外還有onrestart,onresume,onpause,onstop。30. android的數據存儲的方式sharedpreference,文件,SQlite,contentprovider,網路。31. 當啟動一個Activity並且新的Activity執行完後需要返回到啟動它的Activity來執行 的回調函數是startActivityResult()。32. 請使用命令行的方式創建一個名字為myAvd,sdk版本為2.2,sd卡是在d盤的根目錄下,名字為scard.img, 並指定屏幕大小HVGA.____________________________________。33. 程序運行的結果是:_____good and gbc__________。 public classExample{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
34. 在android中,請簡述jni的調用過程。(8分)1)安裝和下載Cygwin,下載 Android NDK
2)在ndk項目中JNI介面的設計
3)使用C/C++實現本地方法
4)JNI生成動態鏈接庫.so文件
5)將動態鏈接庫復制到java工程,在java工程中調用,運行java工程即可
35. 簡述Android應用程序結構是哪些?(7分)Android應用程序結構是:
Linux Kernel(Linux內核)、Libraries(系統運行庫或者是c/c++核心庫)、Application
Framework(開發框架包)、Applications (核心應用程序)
36. 請繼承SQLiteOpenHelper實現:(10分) 1).創建一個版本為1的「diaryOpenHelper.db」的資料庫,
2).同時創建一個 「diary」 表(包含一個_id主鍵並自增長,topic字元型100
長度, content字元型1000長度)
3).在資料庫版本變化時請刪除diary表,並重新創建出diary表。
publicclass DBHelper extends SQLiteOpenHelper{
public final static String DATABASENAME ="diaryOpenHelper.db";
public final static int DATABASEVERSION =1;
//創建資料庫
public DBHelper(Context context,Stringname,CursorFactory factory,int version)
{
super(context, name, factory,version);
}
//創建表等機構性文件
public void onCreate(SQLiteDatabase db)
{
String sql ="create tablediary"+
"("+
"_idinteger primary key autoincrement,"+
"topicvar100),"+
"contentvar1000)"+
")";
db.execSQL(sql);
}
//若資料庫版本有更新,則調用此方法
public void onUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion)
{
String sql = " ifexists diary";
db.execSQL(sql);
this.onCreate(db);
}
}
37. 頁面上現有ProgressBar控制項progressBar,請用書寫線程以10秒的的時間完成其進度顯示工作。(10分)答案
publicclass ProgressBarStu extends Activity {
private ProgressBar progressBar = null;
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progressbar);
//從這到下是關鍵
progressBar = (ProgressBar)findViewById(R.id.progressBar);
Thread thread = new Thread(newRunnable() {
@Override
public void run() {
int progressBarMax =progressBar.getMax();
try {
while(progressBarMax!=progressBar.getProgress())
{
intstepProgress = progressBarMax/10;
intcurrentprogress = progressBar.getProgress();
progressBar.setProgress(currentprogress+stepProgress);
Thread.sleep(1000);
}
} catch(InterruptedException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
});
thread.start();
//關鍵結束
}
}
38. 請描述下Activity的生命周期。 必調用的三個方法:onCreate() --> onStart() --> onResume(),用AAA表示
(1)父Activity啟動子Activity,子Actvity退出,父Activity調用順序如下
AAA --> onFreeze() --> onPause() --> onStop() --> onRestart()--> onStart(),onResume() …
(2)用戶點擊Home,Actvity調用順序如下
AAA --> onFreeze() --> onPause() --> onStop() -- Maybe -->onDestroy() – Maybe
(3)調用finish(), Activity調用順序如下
AAA --> onPause() --> onStop() --> onDestroy()
(4)在Activity上顯示dialog,Activity調用順序如下
AAA
(5)在父Activity上顯示透明的或非全屏的activity,Activity調用順序如下
AAA --> onFreeze() --> onPause()
(6)設備進入睡眠狀態,Activity調用順序如下
AAA --> onFreeze() --> onPause()
39. 如果後台的Activity由於某原因被系統回收了,如何在被系統回收之前保存當前狀態? onSaveInstanceState()
當你的程序中某一個Activity A在運行時,主動或被動地運行另一個新的Activity B,這個時候A會執行onSaveInstanceState()。B完成以後又會來找A,這個時候就有兩種情況:一是A被回收,二是A沒有被回收,被回收的A就要重新調用onCreate()方法,不同於直接啟動的是這回onCreate()里是帶上了參數savedInstanceState;而沒被收回的就直接執行onResume(),跳過onCreate()了。
40. 如何將一個Activity設置成窗口的樣式。 在AndroidManifest.xml 中定義Activity的地方一句話android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就變成半透明的
41. 如何退出Activity?如何安全退出已調用多個Activity的Application?對於單一Activity的應用來說,退出很簡單,直接finish()即可。
當然,也可以用killProcess()和System.exit()這樣的方法。
但是,對於多Activity的應用來說,在打開多個Activity後,如果想在最後打開的Activity直接退出,上邊的方法都是沒有用的,因為上邊的方法都是結束一個Activity而已。
當然,網上也有人說可以。
就好像有人問,在應用里如何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME即可,而事實上如果不修改framework,根本不可能做到這一點一樣。
所以,最好還是自己親自試一下。
那麼,有沒有辦法直接退出整個應用呢?
在2.1之前,可以使用ActivityManager的restartPackage方法。
它可以直接結束整個應用。在使用時需要許可權android.permission.RESTART_PACKAGES。
注意不要被它的名字迷惑。
可是,在2.2,這個方法失效了。
在2.2添加了一個新的方法,killBackgroundProcesses(),需要許可權android.permission.KILL_BACKGROUND_PROCESSES。
可惜的是,它和2.2的restartPackage一樣,根本起不到應有的效果。
另外還有一個方法,就是系統自帶的應用程序管理里,強制結束程序的方法,forceStopPackage()。
它需要許可權android.permission.FORCE_STOP_PACKAGES。
並且需要添加android:sharedUserId="android.uid.system"屬性
同樣可惜的是,該方法是非公開的,他只能運行在系統進程,第三方程序無法調用。
因為需要在Android.mk中添加LOCAL_CERTIFICATE := platform。
而Android.mk是用於在Android源碼下編譯程序用的。
從以上可以看出,在2.2,沒有辦法直接結束一個應用,而只能用自己的辦法間接辦到。
現提供幾個方法,供參考:
1、拋異常強制退出:
該方法通過拋異常,使程序ForceClose。
驗證可以,但是,需要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。
2、記錄打開的Activity:
每打開一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。
3、發送特定廣播:
在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後,關閉即可。
4、遞歸退出
在打開新的Activity時使用startActivityForResult,然後自己加標志,在onActivityResult中處理,遞歸關閉。
除了第一個,都是想辦法把每一個Activity都結束掉,間接達到目的。
但是這樣做同樣不完美。
你會發現,如果自己的應用程序對每一個Activity都設置了nosensor,在兩個Activity結束的間隙,sensor可能有效了。
但至少,我們的目的達到了,而且沒有影響用戶使用。
為了編程方便,最好定義一個Activity基類,處理這些共通問題。
42. 請介紹下Android中常用的五種布局。FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)