一些Android面試題目(一)

個(gè)人搜集的一下Android面試的題目

解析部分间坐,盡量弄成在面試中回答的模式吧,把重點(diǎn)挑出來,盡量精簡(jiǎn)回答竹宋。

最后再把詳細(xì)解析的網(wǎng)址發(fā)出來放到拓展這塊劳澄,暫時(shí)這么規(guī)劃吧


分類:

第一篇解決內(nèi)容:

java相關(guān)的部分

第二篇正在整理


Java相關(guān):

1、多線程操作蜈七、volatile解析秒拔、死鎖

2、HashMap相關(guān)(原理飒硅、怎么解決碰撞這些)

Android相關(guān):

1砂缩、LRUCache

2、組件化三娩、插件化庵芭、熱修復(fù)

3、AIDL

4雀监、ANR双吆、內(nèi)存泄漏、內(nèi)存溢出

5会前、Activity啟動(dòng)好乐、Activity的View生成和繪制(window、activity瓦宜、veiw)

6曹宴、handler、looper(拓展:ThreadLocal)之類的歉提,舉個(gè)例子:主線程中的Looper.loop()一直無限循環(huán)為什么不會(huì)造成ANR?

7区转、進(jìn)程線程通訊相關(guān)苔巨。

8、事件分發(fā)

9废离、sharedpreferences 的 commit apply區(qū)別

10侄泽、String、StringBuffer蜻韭、StringBuilder

11悼尾、四大引用使用場(chǎng)景、GC

10肖方、Retrofit闺魏、Okhttp、EventBus之類的源碼

算法:

快速排序

求兩個(gè)字符串的最長(zhǎng)公共子串

交換2個(gè)變量的值俯画,不用中間變量

網(wǎng)絡(luò)相關(guān):

tcp析桥、udp(tcp為啥一定是三次握手、四次揮手,2次行不行)


解析:

1泡仗、java題目:

1.1埋虹、多線程和volatile、死鎖

1.1.1 java中多線程的一些知識(shí)點(diǎn):

線程的start()方法和run()方法的區(qū)別:

start才是真正意義上的啟動(dòng)線程娩怎,run方法在結(jié)果上就跟把線程當(dāng)成方法來啟動(dòng)差不多搔课。在多線程情況下,我們應(yīng)該使用start截亦,這樣才能實(shí)現(xiàn)異步爬泥,run的話還是一個(gè)個(gè)順序排下來的,沒實(shí)現(xiàn)異步魁巩。(可以這么理解急灭,start就是讓線程開啟多線程模式,然后調(diào)用run正式使用線程)谷遂。

多線程操作葬馋、volatitle 、?synchronized 怎么理解:

多線程操作肾扰、基本方法就是同步代碼塊畴嘶,使用?synchronized 來修飾操作方法。

volatitle的解析:

被volatitle所修飾的變量集晚,會(huì)被同步到主內(nèi)存中窗悯,其他線程獲取這個(gè)變量的時(shí)候,如果這個(gè)變量被修改了偷拔,自然內(nèi)存地址不一樣蒋院,因此其他線程就會(huì)知道這個(gè)變量不是正確的數(shù)值,會(huì)再次從朱內(nèi)存中取新數(shù)值莲绰,這樣來保證同步欺旧。

synchronized的解析:

synchronized 能修飾在哪里:1、普通方法蛤签;2辞友、靜態(tài)方法;3震肮、代碼塊称龙;4、類(修飾類這個(gè)基本等同于靜態(tài)方法戳晌,因?yàn)樾揎楈o態(tài)方法實(shí)際上就是修飾了靜態(tài)方法所在的類)

原理是什么:

synchronized是根據(jù)monitor 來實(shí)現(xiàn)的鲫尊,可以說,它規(guī)定了被synchronized所修飾的成員沦偎,最多只有一個(gè)可以執(zhí)行马昨,否則就阻塞竞帽,當(dāng)monitor 為0,即原來持有此成員的對(duì)象退出了鸿捧,其他對(duì)象方可獲取持有權(quán)

死鎖

什么叫死鎖:

所謂死鎖是指多個(gè)線程因競(jìng)爭(zhēng)資源而造成的一種僵局(互相等待)屹篓,若無外力作用,這些進(jìn)程都將無法向前推進(jìn)匙奴。

1.2堆巧、HashMap相關(guān)(原理、怎么解決碰撞這些)

HashMap的一些基本知識(shí):

hashMap的底層結(jié)構(gòu):數(shù)組+鏈表泼菌,即將一大串拉鏈法構(gòu)成的鏈表填入數(shù)組中谍肤,一個(gè)鏈表對(duì)應(yīng)一個(gè)數(shù)組下標(biāo);鏈表才用拉鏈法哗伯,即鏈表中存在下一個(gè)鏈表荒揣;hashmap的鏈表中除了下一個(gè)鏈表,還保存有key-value焊刹,以及hash值系任。

hashmap的最大容量: 1 << 30,即2的30次方虐块,hashMap本身容量超過這個(gè)容量和負(fù)載因子的乘積俩滥,會(huì)執(zhí)行rehash,即擴(kuò)大容量(默認(rèn)翻倍)贺奠,然后重新把數(shù)據(jù)填入擴(kuò)容后的hashMap(因此非常耗性能)

hash碰撞:

hashMap的put方法是根據(jù)key值的hashcode來獲取地址的霜旧,但相同的hashcode不一定是一個(gè)對(duì)象,所以可能存在多個(gè)對(duì)象存在同一個(gè)hashcode的情況儡率,這就是hash沖突(也有叫hash碰撞)

put方法的理解:

第一步挂据,就是去找key值對(duì)應(yīng)的hashcode,并計(jì)算對(duì)應(yīng)的hash值儿普,這步被稱為“擾動(dòng)函數(shù)”崎逃,混合高位和低位的數(shù)據(jù),增加hash散列值的隨機(jī)性箕肃,減少?zèng)_突;

第二步今魔,是計(jì)算下標(biāo)勺像,也就是indexFor方法,將上一步計(jì)算得到的值和當(dāng)前容量大小-1做一個(gè)“與”操作错森,這樣就得到了一個(gè)小于當(dāng)前數(shù)組大小的值(這里hashmap的設(shè)計(jì)者有個(gè)很巧妙的做法吟宦,一般是直接除以容量大小取余,但是由于規(guī)定了hashmap的容量為2的次冪涩维,所以容量大小減一的結(jié)果就是一堆1殃姓,執(zhí)行“與”計(jì)算袁波,這樣效率就比取余高了),從而當(dāng)做數(shù)組下標(biāo)蜗侈。

第三步篷牌,是根據(jù)上一步的數(shù)組下標(biāo),從HashMapEntry(也就是底層結(jié)構(gòu)中的數(shù)組)這個(gè)數(shù)組中取得鏈表踏幻,因?yàn)橛捎跊_突的存在枷颊,所以還要遍歷一遍取出來的鏈表,將對(duì)應(yīng)的key值找出來该面;如果存在這個(gè)key值夭苗,那么將value覆蓋掉,并返回舊值隔缀。

第四步题造,如果第三步并未找到舊的值,那么就添加一個(gè)HashMapEntry猾瘸,在這個(gè)過程中界赔,先會(huì)判斷是否需要擴(kuò)容,如果需要须妻,那么先擴(kuò)容仔蝌,然后再次重新計(jì)算hash值。如果不需要荒吏,則直接添加鏈表中敛惊。

get方法的理解:

第一步,首先判斷是否key為空绰更,為空的話瞧挤,像put的2、3兩步一樣儡湾,獲取數(shù)組下標(biāo)特恬,循環(huán)遍歷數(shù)組中所有鏈表癌刽,去除key值為空的那個(gè)显拜。

第二步,如果不為空爹袁,那么還是執(zhí)行put中的2远荠、3兩步,然后判斷hash值失息、key是否都是相同的譬淳,如果是档址,取出對(duì)應(yīng)的value,如果不是邻梆,則返回空

hashMap的擴(kuò)容:

put方法中提到了擴(kuò)容這個(gè)操作守伸,默認(rèn)是執(zhí)行的是2倍大小的擴(kuò)容,所做的操作也就是生成一個(gè)新的數(shù)組确虱,然后遍歷原來的數(shù)組數(shù)據(jù)含友,取出hash值并填入新數(shù)組窘问,最后用新的數(shù)組替換原來的數(shù)組。

SparseArray:

Android官方描述中宜咒,是這么評(píng)價(jià)SparseArray的:當(dāng)使用HashMap(K, V),如果K為整數(shù)類型時(shí),使用SparseArray的效率更高惠赫。?這么說的原因主要有一下幾點(diǎn):

1、SparseArray采用的是2個(gè)數(shù)組一一對(duì)應(yīng)的結(jié)構(gòu)故黑。

2场晶、SparseArray采用二分查找法(因此倒序的時(shí)候是比hashmap慢的)

拓展(即參考學(xué)習(xí)用的文章):

1、java題目:

1.1诗轻、多線程和volatile钳宪、死鎖

Synchronized 使用:

https://blog.csdn.net/luoweifu/article/details/46613015

Synchronized 的解析:

https://www.cnblogs.com/paddix/p/5367116.html

1.2、HashMap相關(guān)(原理扳炬、怎么解決碰撞這些)

hash()方法和indexFor()方法解析:

https://www.cnblogs.com/tonyluis/p/5671873.html

https://www.zhihu.com/question/20733617

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吏颖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恨樟,更是在濱河造成了極大的恐慌半醉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劝术,死亡現(xiàn)場(chǎng)離奇詭異缩多,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)养晋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門衬吆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匙握,你說我怎么就攤上這事咆槽〕陆危” “怎么了圈纺?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵秦忿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蛾娶,道長(zhǎng)灯谣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任蛔琅,我火速辦了婚禮胎许,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罗售。我一直安慰自己辜窑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布寨躁。 她就那樣靜靜地躺著穆碎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪职恳。 梳的紋絲不亂的頭發(fā)上所禀,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音放钦,去河邊找鬼色徘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛操禀,可吹牛的內(nèi)容都是我干的褂策。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼床蜘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼辙培!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起邢锯,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤扬蕊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后丹擎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尾抑,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年蒂培,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了再愈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡护戳,死狀恐怖翎冲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媳荒,我是刑警寧澤抗悍,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布驹饺,位于F島的核電站,受9級(jí)特大地震影響缴渊,放射性物質(zhì)發(fā)生泄漏赏壹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一衔沼、第九天 我趴在偏房一處隱蔽的房頂上張望蝌借。 院中可真熱鬧,春花似錦指蚁、人聲如沸菩佑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擎鸠。三九已至,卻和暖如春缘圈,著一層夾襖步出監(jiān)牢的瞬間劣光,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工糟把, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绢涡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓遣疯,卻偏偏與公主長(zhǎng)得像雄可,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缠犀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本系列出于AWeiLoveAndroid的分享数苫,在此感謝,再結(jié)合自身經(jīng)驗(yàn)查漏補(bǔ)缺辨液,完善答案虐急。以成系統(tǒng)。 Java基...
    濟(jì)公大將閱讀 1,528評(píng)論 1 6
  • Java8張圖 11滔迈、字符串不變性 12止吁、equals()方法、hashCode()方法的區(qū)別 13燎悍、...
    Miley_MOJIE閱讀 3,701評(píng)論 0 11
  • 上帝不會(huì)給人類造就一個(gè)完美的天堂敬惦。完美的天堂要靠每一個(gè)人自己去建造。通往天境的路谈山,也要靠每一個(gè)人自己去修建...
    原石隨感錄閱讀 264評(píng)論 0 1
  • 熱播劇《我的前半生》已放印結(jié)束一段時(shí)間了俄删,但是話題還是居高不下。不管劇情發(fā)展到最后是多么的狗血,但這里面的主角們到...
    5d5121874222閱讀 489評(píng)論 0 0
  • 我叫貓貓畴椰。 貓這種動(dòng)物举哟,我還是喜歡得很糾結(jié)。我只喜歡真的貓以外的所有貓咪迅矛,哈哈,這是哪門子喜歡嘛潜叛。誰叫...
    貓老板閱讀 210評(píng)論 0 0