- 相關(guān)推薦
關(guān)于Android工程師面試題
singletask:棧內(nèi)復(fù)用模式。不是在當(dāng)前任務(wù)棧中查找是否存在,實(shí)際過程如下:
查找該Activity所需的任務(wù)棧是否存在(由taskAffinity控制,或者默認(rèn)為包名)。
在任務(wù)棧當(dāng)中查找該Activity是否存在。
這里面存在任務(wù)棧的切換,也就是當(dāng)開啟的singtask類型的Activity不屬于當(dāng)前任務(wù)棧時(shí),則會(huì)切換到其任務(wù)棧。
singleInstance:?jiǎn)螌?shí)例模式。
包含了singleTask的所有特性,另外加上:設(shè)置為該模式的Activity,只能單獨(dú)存在于一個(gè)任務(wù)棧中。當(dāng)有兩個(gè)singleInstace的Activity設(shè)置成同樣的任務(wù)棧時(shí),會(huì)出現(xiàn)兩個(gè)同名的任務(wù)棧,分別用來存放同名的Activity。
注:在任何跳轉(zhuǎn)的時(shí)候,首先調(diào)用本Activity的onPause,然后跳轉(zhuǎn)。如果被跳轉(zhuǎn)的activity由于啟動(dòng)方式而沒創(chuàng)建新的實(shí)例,則會(huì)先調(diào)用onNewIntent,然后按照正常的生命周期調(diào)用。
如
1:A→B,A:onPause;B:onCreate,onStart,onResume。
2:A(singleTop)→A,A:onPause;A:onSaveInstanceState;A:onResume。
3、View的繪制
推薦郭霖大神的博客:
https://blog.csdn.net/guolin_blog/article/details/16330267
4、canvas的使用
推薦以下博客:
https://blog.csdn.net/qinjuning/article/details/6936783
5、ActivityManagerService的相關(guān)知識(shí)點(diǎn)
推薦以下博客:
https://wiki.jikexueyuan.com/project/deep-android-v2/activity.html
6、Activity切換時(shí)生命周期交集
Activity之間的協(xié)作當(dāng)一個(gè)activity A啟動(dòng)了另外一個(gè)activity B,它們的生命周期是有交叉的;
首先A的onPause()被調(diào)用;
之后B的onCrate(), onStart()及onResume() 方法會(huì)被調(diào)用(此時(shí)B擁有用戶焦點(diǎn));
最后,如果A在屏幕上不可見,onStop()方法被調(diào)用;
因此,我們?cè)趦蓚(gè)activities中傳遞數(shù)據(jù),或者共享資源時(shí)(如數(shù)據(jù)庫(kù)連接),需要在前一個(gè)activity的onPause()方法而不是onStop()方法中進(jìn)行;
7、Hybrid(重要加分項(xiàng))
java和JS的交互
https://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/
https://rensanning.iteye.com/blog/2043049
WebView開啟JavaScript腳本執(zhí)行
WebView設(shè)置供JavaScript調(diào)用的交互接口。
8、網(wǎng)絡(luò)編程
volley
https://bxbxbai.github.io/2014/09/14/android-working-with-volley/
https://blog.csdn.net/guolin_blog/article/details/17656437
如何控制TCP連接時(shí)的擁塞
https://blog.csdn.net/yechaodechuntian/article/details/25429143
三次握手
https://blog.csdn.net/whuslei/article/details/6667471
Android客戶端和服務(wù)端如何使用Token和Session
https://wyong.blog.51cto.com/1115465/1553352
移動(dòng)端獲取網(wǎng)絡(luò)數(shù)據(jù)優(yōu)化的幾個(gè)點(diǎn)連接復(fù)用 :
節(jié)省連接建立時(shí)間,如開啟 keep-alive。
對(duì)于 Android 來說默認(rèn)情況下 HttpURLConnection 和 HttpClient 都開啟了 keep-alive。只是 2.2 之前 HttpURLConnection 存在影響連接池的 Bug,具體可見:Android HttpURLConnection 及 HttpClient 選擇
請(qǐng)求合并:
即將多個(gè)請(qǐng)求合并為一個(gè)進(jìn)行請(qǐng)求,比較常見的就是網(wǎng)頁(yè)中的 CSS Image Sprites。如果某個(gè)頁(yè)面內(nèi)請(qǐng)求過多,也可以考慮做一定的請(qǐng)求合并。
減少請(qǐng)求數(shù)據(jù)的大。
對(duì)于post請(qǐng)求,body可以做gzip壓縮的,header也可以作數(shù)據(jù)壓縮(不過只支持http 2.0)。
返回的數(shù)據(jù)的body也可以作gzip壓縮,body數(shù)據(jù)體積可以縮小到原來的30%左右。(也可以考慮壓縮返回的json數(shù)據(jù)的key數(shù)據(jù)的體積,尤其是針對(duì)返回?cái)?shù)據(jù)格式變化不大的情況,支付寶聊天返回的數(shù)據(jù)用到了)
根據(jù)用戶的當(dāng)前的網(wǎng)絡(luò)質(zhì)量來判斷下載什么質(zhì)量的圖片(電商用的比較多)。
9、android開發(fā)中,可能會(huì)導(dǎo)致內(nèi)存泄露的問題
不要讓生命周期長(zhǎng)于Activity的對(duì)象持有到Activity的引用
盡量使用Application的Context而不是Activity的Context
盡量不要在Activity中使用非靜態(tài)內(nèi)部類,因?yàn)榉庆o態(tài)內(nèi)部類會(huì)隱式持有外部類實(shí)例的引用(具體可以查看細(xì)話Java:”失效”的private修飾符了解)。如果使用靜態(tài)內(nèi)部類,將外部實(shí)例引用作為弱引用持有。
垃圾回收不能解決內(nèi)存泄露,了解Android中垃圾回收機(jī)制
**更多內(nèi)容可以參考以下博客:
https://spencer-dev.lofter.com/post/d7b9e_6faf120
10、activity的啟動(dòng)過程:
https://www.cloudchou.com/android/post-788.html
以上是我遇到和搜集到的各類題目以及相應(yīng)的解答,接下來一段時(shí)間也會(huì)持續(xù)更新,大家遇到什么經(jīng)典或者不會(huì)的問題也可以給我留言,在此統(tǒng)一分享給大家。祝大家能夠找到自己心儀的工作,前途一片光明!
【Android工程師面試題】相關(guān)文章:
投行面試題07-24
軟件測(cè)試面試題01-17
中層副職競(jìng)聘面試題09-05
來看看谷歌的面試題08-17
壓力危機(jī)類面試題目突破技巧11-09
人力資源行業(yè)常見面試題匯總02-03
面試題:給我們一個(gè)錄取你的理由?11-16