一、java部分
String、StringBuffer與StringBuilder之間區(qū)別
http://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html
ArrayList呻待、Vector巷波、LinkedList的存儲(chǔ)性能和特性
http://www.cnblogs.com/jiangyi-uestc/p/5682699.html
理解java的三大特性之多態(tài)
http://www.cnblogs.com/chenssy/p/3372798.html
java抽象類的使用
http://www.cnblogs.com/liangqiyuan/p/5568464.html
Java內(nèi)存管理
http://www.cnblogs.com/andy-zhou/p/5316084.html
HashMap和HashTable的區(qū)別
http://www.cnblogs.com/lintong/p/4363533.html
heap(堆)和stack(棧)的區(qū)別
Java內(nèi)存分為兩類郎逃,一類是棧內(nèi)存,一類是堆內(nèi)存祟霍,棧內(nèi)存是指程序進(jìn)入一個(gè)方法時(shí)杏头,會(huì)為這個(gè)方法單獨(dú)分配一塊存儲(chǔ)空間,用于存儲(chǔ)這個(gè)方法內(nèi)部的局部變量沸呐,當(dāng)這個(gè)方法結(jié)束時(shí)醇王,分配給這個(gè)方法的棧也會(huì)釋放,這個(gè)棧中的變量也隨之釋放崭添。
堆一般用于存放對(duì)象寓娩,或final修飾的局部變量。
****wait()和sleep()的區(qū)別****
1.sleep來(lái)自Thread類呼渣,和wait來(lái)自O(shè)bject類
2.調(diào)用sleep()方法的過(guò)程中棘伴,線程不會(huì)釋放對(duì)象鎖。而 調(diào)用 wait 方法線程會(huì)釋放對(duì)象鎖
3.sleep睡眠后不出讓系統(tǒng)資源屁置,wait讓出系統(tǒng)資源其他線程可以占用CPU
4.sleep(milliseconds)需要指定一個(gè)睡眠時(shí)間焊夸,時(shí)間一到會(huì)自動(dòng)喚醒,wait需要notify或notifyAll才能喚醒。
ArrayList源碼分析
http://blog.csdn.net/jzhf2012/article/details/8540410
垃圾回收器的基本原理是什么蓝角?垃圾回收器可以馬上回收內(nèi)存嗎阱穗?有什么辦法通知虛擬機(jī)進(jìn)行垃圾回收?
http://www.cnblogs.com/zhangxiaopeng/p/5001171.html
線程池概念及使用
http://www.cnblogs.com/dolphin0520/p/3932921.html
JVM中的垃圾收集算法和Heap分區(qū)
http://www.cnblogs.com/caca/p/jvm_gc_algorithm_heap_space.html
內(nèi)存泄露-基礎(chǔ)知識(shí)
http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=21&extra=page%3D1%26filter%3Ddigest%26digest%3D1
內(nèi)存泄露-排查方法
http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=62&extra=page%3D6
內(nèi)存泄露-常見(jiàn)原因
http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=125&extra=page%3D3
算法
http://www.reibang.com/p/ae97c3ceea8d
二使鹅、Android部分
Handler異步處理信息機(jī)制
http://blog.csdn.net/lmj623565791/article/details/38377229/
View 事件傳遞
http://a.codekk.com/blogs/detail/54cfab086c4761e5001b253e
Parcelable和Serializable的區(qū)別
http://blog.csdn.net/djun100/article/details/9667283
View 繪制流程
http://a.codekk.com/blogs/detail/54cfab086c4761e5001b253f
android存儲(chǔ)數(shù)據(jù)方式
1.sharePreference揪阶,它是android提供的用來(lái)存儲(chǔ)一些簡(jiǎn)單配置信息的機(jī)制,采用了xml格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中患朱。
2.文件存儲(chǔ)遣钳,即常說(shuō)的文件(I/O)存儲(chǔ)方法,常用語(yǔ)存儲(chǔ)大數(shù)量的數(shù)據(jù)麦乞,但是缺點(diǎn)是更新數(shù)據(jù)將是一件困難的事情蕴茴。
3.SQLite存儲(chǔ),SQLite是Android所帶的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)姐直,它支持SQL語(yǔ)句倦淀,它是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫(kù)。
4.使用ContentProvider存儲(chǔ)声畏,主要用于應(yīng)用程序之間的數(shù)據(jù)交換撞叽,從而能夠讓其他應(yīng)用保存或讀取此ContentProvider的數(shù)據(jù)。
5.網(wǎng)絡(luò)存儲(chǔ)插龄,通過(guò)網(wǎng)絡(luò)上提供給我們的存儲(chǔ)空間來(lái)上傳和下載我們?cè)诖鎯?chǔ)空間的數(shù)據(jù)信息愿棋。
view、surfaceView均牢、GLSurfaceView的關(guān)系和區(qū)別
view是最基礎(chǔ)的糠雨,必須在UI主線程內(nèi)更新畫面,速度較慢徘跪。
SurfaceView是view的子類甘邀,使用雙緩機(jī)制琅攘,在新的線程中更新畫面,刷新速度比View快松邪。
GLSurfaceView是SurfaceView的子類坞琴,openGL專用。
橫豎屏切換時(shí)逗抑,activity的生命周期
1.不設(shè)置activity的android:configchanges時(shí)剧辐,切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏執(zhí)行一次邮府,切豎屏執(zhí)行兩次荧关。
2.設(shè)置activity的android:configchanges="orientation"時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期挟纱,切橫羞酗、豎屏只會(huì)執(zhí)行一次。
3.設(shè)置activity的android:configchanges="orientation|ketboardHidden"時(shí)紊服,切屏不會(huì)重新調(diào)用各個(gè)生命周期檀轨,只會(huì)執(zhí)行onConfigChanged方法。
何如打開(kāi)raw目錄中的數(shù)據(jù)庫(kù)文件欺嗤?
在android中不能直接打開(kāi)raw目錄中的數(shù)據(jù)庫(kù)文件参萄,需要在程序第一次啟動(dòng)時(shí),將文件復(fù)制到手機(jī)內(nèi)存中或SD卡中煎饼,然后再打開(kāi)數(shù)據(jù)庫(kù)文件讹挎,復(fù)制的基本方法是使用getResources().openRawResource獲得raw目錄中資源的InputStream,然后將InputStream的數(shù)據(jù)寫入其他目錄中的相應(yīng)文件吆玖,然后使用SQLiteDatabase打開(kāi)筒溃。
android四種啟動(dòng)模式
standard:每啟動(dòng)一個(gè)新的activity,它就會(huì)在返回棧中入棧沾乘,并處于棧頂?shù)奈恢谩?br>
singleTop:棧頂復(fù)用模式怜奖,如果新activity已經(jīng)位于任務(wù)棧的棧頂,那么此activity不會(huì)被重新創(chuàng)建翅阵,同時(shí)它的onNewIntent方法會(huì)被調(diào)用歪玲,如果不是則仍會(huì)創(chuàng)建。
singleTask:棧內(nèi)復(fù)用模式掷匠,這是一種單例模式滥崩,只要activity在一個(gè)棧內(nèi)存在,那么多次啟動(dòng)此activity都不會(huì)被重新創(chuàng)建實(shí)例讹语,會(huì)調(diào)用onNewIntent钙皮,并把次activity上的所有activity出棧。
singleInstance:?jiǎn)?dòng)一個(gè)新的返回棧來(lái)管理這個(gè)activity,這個(gè)返回棧只有這個(gè)實(shí)例株灸,不允許有別的activity存在崇摄。
android內(nèi)存優(yōu)化
1.循環(huán)內(nèi)盡量不要使用局部變量擎值。
2.不用的對(duì)象即時(shí)釋放慌烧。
3.數(shù)據(jù)庫(kù)的cursor及時(shí)關(guān)閉。
4.構(gòu)造adapter時(shí)鸠儿,使用緩存的converview屹蚊。
5.即時(shí)關(guān)閉InputStream / OutputStream。
6.對(duì)于service調(diào)用registReceiver()后进每,對(duì)應(yīng)的生命周期方法中調(diào)用unRegistReceiver汹粤。
7.圖片盡量使用軟引用,較大的圖片可以通過(guò)BitmapFactory縮放后再使用田晚,并及時(shí)recycle嘱兼。
加載大圖片時(shí)如何防止內(nèi)存溢出
1.盡量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource來(lái)設(shè)置一張大圖,通過(guò)BitmapFactory.decodeStream創(chuàng)建出一個(gè)bitmap贤徒,再將其設(shè)為ImageView的source芹壕。
2.使用BitmapFactory.Options對(duì)圖片進(jìn)行壓縮。
3.運(yùn)用java軟引用接奈,進(jìn)行圖片緩存踢涌,將需要經(jīng)常加載的圖片放進(jìn)緩存里,避免重復(fù)加載序宦,及時(shí)銷毀不再使用的bitmap對(duì)象睁壁。
屏幕適配
1.圖片適配:不同手機(jī)分辨率會(huì)找到不同drawable對(duì)應(yīng)的目錄,在做屏幕適配時(shí)互捌,會(huì)把一些對(duì)應(yīng)分辨率的圖片放在drawable中潘明。
2.布局適配:不同手機(jī)屏幕的大小不一樣,可以讓布局的展示也不一樣秕噪,在res目錄下創(chuàng)建layout-1280 *720文件夾钳降,里面創(chuàng)建的布局文件會(huì)加載在1280 * 720 的手機(jī)屏幕上。
3.尺寸適配:在res下創(chuàng)建values - 1280 * 720 文件夾巢价,dimens代碼用@dimen/imagewidth 調(diào)用牲阁。
Application Not Responding(ANR)定位和修復(fù)
1.主線程中存在耗時(shí)的計(jì)算。
2.主線程中錯(cuò)誤的操作(如Thread.wait或Thread.sleep)壤躲。
3.BroadcastReceiver未在10秒內(nèi)完成相關(guān)處理城菊。
4.Activity的onCreate和onResume回調(diào)中盡量避免耗時(shí)的代碼
如何避免OOM
1.使用更加輕量的數(shù)據(jù)結(jié)構(gòu),如使用ArrayMap/SparseArray而不是HashMap等傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)碉克。
2.避免在Android中使用Enum凌唬。
3.減少bitmap對(duì)象的內(nèi)存占用,通常有2個(gè)方法漏麦,inSampleSize縮放比例客税,把圖片載入內(nèi)存之前况褪,我們需要計(jì)算出一個(gè)合適的縮放比例,避免不必要的大載入更耻。 decode format:解碼格式测垛,選擇ARGB_8888 / RBG_565 等存在很大差異。
4.使用更小的圖片秧均,在涉及到資源圖片時(shí)食侮,我們需要特別留意這張圖片是否存在可以壓縮的空間,是否可以使用更小的圖片目胡。
5.內(nèi)存對(duì)象的重復(fù)利用
- 復(fù)用系統(tǒng)自帶的資源锯七,Android系統(tǒng)本身內(nèi)置了很多的資源,如字符串誉己、顏色眉尸、圖片、動(dòng)畫巨双、樣式等噪猾,這些資源都可以在程序中直接引用。
- 注意在listview等出現(xiàn)大量重復(fù)子組件的視圖里堆ConvertView的復(fù)用炉峰。
- Bitmap對(duì)象復(fù)用畏妖,在listview等顯示大量圖片的控件里,需要使用LRU的機(jī)制來(lái)緩存處理bitmap疼阔。
6.避免對(duì)象的內(nèi)存泄露戒劫,內(nèi)存對(duì)象的泄漏,會(huì)導(dǎo)致一些不再使用的對(duì)象無(wú)法及時(shí)釋放婆廊,這樣一方面占用了寶貴的內(nèi)存空間迅细,很容易導(dǎo)致后續(xù)需要分配內(nèi)存的時(shí)候,空閑空間不足而出現(xiàn)OOM淘邻。
- 注意activity的泄露茵典, 1.內(nèi)部類引用導(dǎo)致activity的泄露(如Handler)。2.activity的context被傳遞到其他實(shí)例中宾舅。
- 考慮使用Application Context而不是activity context
7.謹(jǐn)慎使用static對(duì)象统阿,因?yàn)閟tatic的生命周期過(guò)長(zhǎng),和應(yīng)用程序保持一致筹我,使用不當(dāng)很可能導(dǎo)致對(duì)象泄漏扶平。
8.優(yōu)化布局層次,減少內(nèi)存消耗蔬蕊。
Android常見(jiàn)的內(nèi)存泄漏
1.單例造成的內(nèi)存泄漏:由于單例的靜態(tài)特性使得其生命周期跟應(yīng)用的生命周期一樣長(zhǎng)结澄,如果使用不當(dāng)很容易造成內(nèi)存泄漏。(要傳入context時(shí),不要傳入activity的context)
2.匿名內(nèi)部類麻献,非靜態(tài)內(nèi)部類:都持有外部類的引用们妥。
3.Handler造成內(nèi)存泄漏:如果Acitivty被finish,但延時(shí)任務(wù)還沒(méi)處理完成勉吻,它會(huì)持有activity的引用而造成泄漏监婶。 解決方法:聲明Handler為靜態(tài)的,則其存活期跟activity無(wú)關(guān)餐曼,同時(shí)通過(guò)弱引用方式傳入activity压储,最后在activity的onDestory時(shí)應(yīng)移除消息隊(duì)列中的消息鲜漩。
4.盡量避免使用static成員變量源譬。
5.資源未關(guān)閉造成的內(nèi)存泄漏:對(duì)于使用了BraodcastReceiver,F(xiàn)ile孕似,游標(biāo) 踩娘,Stream,Bitmap等資源的使用喉祭,應(yīng)該在Activity銷毀時(shí)及時(shí)關(guān)閉或者注銷养渴,否則這些資源將不會(huì)被回收,造成內(nèi)存泄漏泛烙。
AsyncTask原理及不足
線程池有限理卑,太多異步會(huì)滿線程池,導(dǎo)致ANR(應(yīng)用沒(méi)反應(yīng))
會(huì)開(kāi)大量線程消耗系統(tǒng)資源導(dǎo)致應(yīng)用FC(強(qiáng)制關(guān)閉)
一旦doingbackground蔽氨,cancel不了
如何退出Activity?如何安全退出已調(diào)用多個(gè)Activity的Application?
1.記錄打開(kāi)的Activity藐唠,定義一個(gè)活動(dòng)集合類,對(duì)所有的活動(dòng)進(jìn)行管理鹉究。
2.發(fā)送特定廣播:在需要結(jié)束應(yīng)用時(shí)宇立,發(fā)送一個(gè)特定的廣播,每個(gè)Activity收到廣播后自赔,關(guān)閉即可妈嘹。
3.遞歸退出:在打開(kāi)新的Activity時(shí)使用startActivityForResult,然后自己加標(biāo)志绍妨,在onActivityResult中處理润脸,遞歸關(guān)閉。