1. 程式人生 > >20181013某大廠的一次android面試經歷

20181013某大廠的一次android面試經歷

1.activity的啟動模式LaunchMode以及使用場景

1.standard標準模式,也是預設模式

	每次啟動一個activity不管這個例項是否存在,都會重新建立一個新的例項。這就是多例項實現。
	一個棧內可以有多個這個例項,每個例項可以屬於不同的任務棧。
	被建立的例項的生命週期就是典型的activity的生命週期。
	這種模式下誰啟動了這個activity,他就執行在啟動他的那個棧內。
	
2.singleTask模式,棧內複用模式,單例項模式
	只要這種模式的activity在一個棧中存在,那麼多次啟動這貨都不會重新建立例項,系統會回撥onNewIntent.
	 ERROR/AndroidRuntime(556): Caused by: android.util.AndroidRuntimeException: 
	 Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. 
	 Is this really what you want?

	當用ApplicationContext啟動standard模式的activity時候會報這種錯誤。
	standard模式的acitivty預設進入啟動他的任務棧,但是非activity型別的context並沒有任務棧,就撲街了。
	為了解決這個問題就是為被啟動的activity指定FLAG_ACTIVITY_NEW_TASK標記位,這樣啟動的時候會為他建立一個新的任務棧,這時候被啟動的activity的模式就是singleTask.
	singleTask具有cleartop的效果哦

3.singleTop:棧頂複用模式

	這種模式下,如果新的activity已經位於任務棧的棧頂,那麼這貨不會被重新建立,只是呼叫
	他的onNewIntent方法,這個activity的oncreate,onstart不會被呼叫,因為這貨沒有發生改變。
	如果這貨已經存在但是不是在棧頂不好意思了,只能重建了,這也是跟singletask的區別。


4.singleInstance單例項模式,是singletask 的plus版

	具有singletask模式的所有特性,外加這種模式的activity單獨的位於一個任務棧中。

2.java中的引用型別記憶使用場景,描述一下GC

引用型別,以及回收順序,無非是那些老生常談,百度一下即可。
gc相關就不多說了,下邊是本人手寫版筆記,比較詳細。

	jvm的相關:
	https://blog.csdn.net/github_37610197/article/details/82865680
	gc策略:
	https://blog.csdn.net/github_37610197/article/details/82870638

4.私有構造方法的使用場景

		這個出門百度吧

5.join的作用和實現原理

控制執行緒的執行順序,實際是呼叫了wait()方法

6.android的效能優化包括哪些方面,分別使用什麼方式

8.HashMap和ArrayList的實現原理

	資料結構

9.執行緒池的實現原理是怎麼樣的,執行緒有哪些狀態
10.關於對AIDL的理解,以及實現AIDL的流程或者步驟
11.git命令的問答
平時用圖形化介面用的多了,基本忘記這些命令行了,