成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

金9銀10,分享幾個(gè)重要的Android面試題

andycall / 1121人閱讀

摘要:優(yōu)點(diǎn)線程被掛起的幾率減少,線程執(zhí)行的連貫性加強(qiáng)。用于對(duì)于鎖競爭不是很激烈,鎖占用時(shí)間很短的并發(fā)線程。解釋本地副本為,共享內(nèi)存為,線程要把修改成。

#### 說一下java多態(tài)的理解,以及接繼承,和接口的理解

于哥在這里只講多態(tài),其他自己上網(wǎng)體會(huì)

對(duì)于多態(tài)的定義
不同類的對(duì)象對(duì)統(tǒng)一函數(shù)做出不同對(duì)的響應(yīng)或者動(dòng)作。
作用
主要是消除類之間的耦合性,靈活性比較強(qiáng),利于代碼的編寫和修改。尤其在處理大量的運(yùn)算和操作時(shí),可以靈活地簡化,替換或者是修改代碼!

三個(gè)必要條件
1、一個(gè)凳子(繼承extends)
2、重寫
3、父類引用指向子類對(duì)象

for example


測試結(jié)果:

oKhttp的 原理

1.同步和異步:

1.異步使用了Dispatcher來將存儲(chǔ)在 Deque 中的請(qǐng)求分派給線程池中各個(gè)線程執(zhí)行。

2.當(dāng)任務(wù)執(zhí)行完成后,無論是否有異常,finally代碼段總會(huì)被執(zhí)行,也就是會(huì)調(diào)用Dispatcher的finished函數(shù),它將正在運(yùn)行的任務(wù)Call從隊(duì)列runningAsyncCalls中移除后,主動(dòng)的把緩存隊(duì)列向前走了一步。

2.連接池:

1.一個(gè)Connection封裝了一個(gè)socket,ConnectionPool中儲(chǔ)存s著所有的Connection,StreamAllocation是引用計(jì)數(shù)的一個(gè)單位

2.當(dāng)一個(gè)請(qǐng)求獲取一個(gè)Connection的時(shí)候要傳入一個(gè)StreamAllocation,Connection中存著一個(gè)弱引用的StreamAllocation列表,每當(dāng)上層應(yīng)用引用一次Connection,StreamAllocation就會(huì)加一個(gè)。反之如果上層應(yīng)用不使用了,就會(huì)刪除一個(gè)。

3.ConnectionPool中會(huì)有一個(gè)后臺(tái)任務(wù)定時(shí)清理StreamAllocation列表為空的Connection。5分鐘時(shí)間,維持5個(gè)socket

3.選擇路線與建立連接

1.選擇路線有兩種方式:

1.無代理,那么在本地使用DNS查找到ip,注意結(jié)果是數(shù)組,即一個(gè)域名有多個(gè)IP,這就是自動(dòng)重連的來源

2.有代理HTTP:設(shè)置socket的ip為代理地址的ip,設(shè)置socket的端口為代理地址的端口

3.代理好處:HTTP代理會(huì)幫你在遠(yuǎn)程服務(wù)器進(jìn)行DNS查詢,可以減少DNS劫持。

2.建立連接

1.連接池中已經(jīng)存在連接,就從中取出(get)RealConnection,如果沒有命中就進(jìn)入下一步

2.根據(jù)選擇的路線(Route),調(diào)用Platform.get().connectSocket選擇當(dāng)前平臺(tái)Runtime下最好的socket庫進(jìn)行握手

3.將建立成功的RealConnection放入(put)連接池緩存

4.如果存在TLS,就根據(jù)SSL版本與證書進(jìn)行安全握手

5.構(gòu)造HttpStream并維護(hù)剛剛的socket連接,管道建立完成

4.職責(zé)鏈模式:緩存、重試、建立連接等功能存在于攔截器中網(wǎng)絡(luò)請(qǐng)求相關(guān),主要是網(wǎng)絡(luò)請(qǐng)求優(yōu)化。網(wǎng)絡(luò)請(qǐng)求的時(shí)候遇到的問題

線程同步的問題,常用的線程同步

1.sycn:保證了原子性、可見性、有序性
2.鎖:保證了原子性、可見性、有序性

1.自旋鎖:可以使線程在沒有取得鎖的時(shí)候,不被掛起,而轉(zhuǎn)去執(zhí)行一個(gè)空循環(huán)。

1.優(yōu)點(diǎn):線程被掛起的幾率減少,線程執(zhí)行的連貫性加強(qiáng)。用于對(duì)于鎖競爭不是很激烈,鎖占用時(shí)間很短的并發(fā)線程。

2.缺點(diǎn):過多浪費(fèi)CPU時(shí)間,有一個(gè)線程連續(xù)兩次試圖獲得自旋鎖引起死鎖

2.阻塞鎖:沒得到鎖的線程等待或者掛起,Sycn、Lock

3.可重入鎖:一個(gè)線程可多次獲取該鎖,Sycn、Lock

4.悲觀鎖:每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以會(huì)阻塞全部其他線程 Sycn、Lock

5.樂觀鎖:每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù),可以使用版本號(hào)等機(jī)制。cas

6.顯示鎖和內(nèi)置鎖:顯示鎖用Lock來定義、內(nèi)置鎖用synchronized。

7.讀-寫鎖:為了提高性能,Java提供了讀

3.volatile

1.只能保證可見性,不能保證原子性

2.自增操作有三步,此時(shí)多線程寫會(huì)出現(xiàn)問題

4.cas

1.操作:內(nèi)存值V、舊的預(yù)期值A(chǔ)、要修改的值B,當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時(shí),將內(nèi)存值修改為B并返回true,否則什么都不做并返回false。

2.解釋:本地副本為A,共享內(nèi)存為V,線程A要把V修改成B。某個(gè)時(shí)刻線程A要把V修改成B,如果A和V不同那么就表示有其他線程在修改V,此時(shí)就表示修改失敗,否則表示沒有其他線程修改,那么把V改成B。

3.局限:如果V被修改成V1然后又被改成V,此時(shí)cas識(shí)別不出變化,還是認(rèn)為沒有其他線程在修改V,此時(shí)就會(huì)有問題

4.局限解決:將V帶上版本。

5.線程不安全到底是怎么回事:

1.一個(gè)線程寫,多個(gè)線程讀的時(shí)候,會(huì)造成寫了一半就去讀

2.多線程寫,會(huì)造成臟數(shù)據(jù)

Asynctask和線程池,GC相關(guān)(怎么判斷哪些內(nèi)存該GC,GC算法)

1.Asynctask:異步任務(wù)類,單線程線程池+Handler
2.線程池:

1.ThreadPoolExecutor:通過Executors可以構(gòu)造單線程池、固定數(shù)目線程池、不固定數(shù)目線程池。

2.ScheduledThreadPoolExecutor:可以延時(shí)調(diào)用線程或者延時(shí)重復(fù)調(diào)度線程。

3.GC相關(guān):重要

1.搜索算法:

1.引用計(jì)數(shù)
2.圖搜索,可達(dá)性分析

2.回收算法:

1.標(biāo)記清除復(fù)制:用于青年代
2.標(biāo)記整理:用于老年代

3.堆分區(qū):

1.青年區(qū)eden 80%、survivor1 10%、survivor2 10%
2.老年區(qū)

4.虛擬機(jī)棧分區(qū):

1.局部變量表
2.操作數(shù)棧
3.動(dòng)態(tài)鏈接
4.方法返回地址

5.GC Roots:

1.虛擬機(jī)棧(棧楨中的本地變量表)中的引用的對(duì)象
2.方法區(qū)中的類靜態(tài)屬性引用的對(duì)象
3.方法區(qū)中的常量引用的對(duì)象
4.本地方法棧中JNI的引用的對(duì)象

java類加載過程:

1.加載時(shí)機(jī):創(chuàng)建實(shí)例、訪問靜態(tài)變量或方法、反射、加載子類之前

2.驗(yàn)證:驗(yàn)證文件格式、元數(shù)據(jù)、字節(jié)碼、符號(hào)引用的正確性

3.加載:根據(jù)全類名獲取文件字節(jié)流、將字節(jié)流轉(zhuǎn)化為靜態(tài)儲(chǔ)存結(jié)構(gòu)放入方法區(qū)、生成class對(duì)象

4.準(zhǔn)備:在堆上為靜態(tài)變量劃分內(nèi)存

5.解析:將常量池中的符號(hào)引用轉(zhuǎn)換為直接引用

6.初始化:初始化靜態(tài)變量

mvc、mvp、mvvm:

1.mvc:數(shù)據(jù)、View、Activity,View將操作反饋給Activity,Activitiy去獲取數(shù)據(jù),數(shù)據(jù)通過觀察者模式刷新給View。循環(huán)依賴

1.Activity重,很難單元測試

2.View和Model耦合嚴(yán)重

2.mvp:數(shù)據(jù)、View、Presenter,View將操作給Presenter,Presenter去獲取數(shù)據(jù),數(shù)據(jù)獲取好了返回給Presenter,Presenter去刷新View。PV,PM雙向依賴

1.接口爆炸

2.Presenter很重

3.mvvm:數(shù)據(jù)、View、ViewModel,View將操作給ViewModel,ViewModel去獲取數(shù)據(jù),數(shù)據(jù)和界面綁定了,數(shù)據(jù)更新界面更新。

1.viewModel的業(yè)務(wù)邏輯可以多帶帶拿來測試

2.一個(gè)view 對(duì)應(yīng)一個(gè) viewModel 業(yè)務(wù)邏輯可以分離,不會(huì)出現(xiàn)全能類

3.數(shù)據(jù)和界面綁定了,不用寫垃圾代碼,但是復(fù)用起來不舒服

apk瘦身:

1.classes.dex:通過代碼混淆,刪掉不必要的jar包和代碼實(shí)現(xiàn)該文件的優(yōu)化
2.資源文件:通過Lint工具掃描代碼中沒有使用到的靜態(tài)資源
3.圖片資源:使用tinypng和webP,下面詳細(xì)介紹圖片資源優(yōu)化的方案,矢量圖
4.SO文件將不用的去掉,目前主流app一般只放一個(gè)arm的so包

ANR的形成,各個(gè)組件上出現(xiàn)ARN的時(shí)間限制是多少

1.只要是主線程耗時(shí)的操作就會(huì)ARN 如io
2.broadcast超時(shí)時(shí)間為10秒 按鍵無響應(yīng)的超時(shí)時(shí)間為5秒 前臺(tái)service無響應(yīng)的超時(shí)時(shí)間為20秒,后臺(tái)service為200秒

Serializable和Parcelable 的區(qū)別

1.P 消耗內(nèi)存小
2.網(wǎng)絡(luò)傳輸用S 程序內(nèi)使用P
3.S將數(shù)據(jù)持久化方便
4.S使用了反射 容易觸發(fā)垃圾回收 比較慢

Sharedpreferences源碼簡述

1.儲(chǔ)存于硬盤上的xml鍵值對(duì),數(shù)據(jù)多了會(huì)有性能問題
2.ContextImpl記錄著SharedPreferences的重要數(shù)據(jù),文件路徑和實(shí)例的鍵值對(duì)
3.在xml文件全部內(nèi)加載到內(nèi)存中之前,讀取操作是阻塞的,在xml文件全部內(nèi)加載到內(nèi)存中之后,是直接讀取內(nèi)存中的數(shù)據(jù)
4.apply因?yàn)槭钱惒降臎]有返回值, commit是同步的有返回值能知道修改是否提交成功
5.多并發(fā)的提交commit時(shí),需等待正在處理的commit數(shù)據(jù)更新到磁盤文件后才會(huì)繼續(xù)往下執(zhí)行,從而降低效率; 而apply只是原子更新到內(nèi)存,后調(diào)用apply函數(shù)會(huì)直接覆蓋前面內(nèi)存數(shù)據(jù),從一定程度上提高很多效率。 3.edit()每次都是創(chuàng)建新的EditorImpl對(duì)象.

ANR的形成,各個(gè)組件上出現(xiàn)ARN的時(shí)間限制是多少

1.只要是主線程耗時(shí)的操作就會(huì)ARN 如io
2.broadcast超時(shí)時(shí)間為10秒 按鍵無響應(yīng)的超時(shí)時(shí)間為5秒 前臺(tái)service無響應(yīng)的超時(shí)時(shí)間為20秒,后臺(tái)service為200秒

apk瘦身:

1.classes.dex:通過代碼混淆,刪掉不必要的jar包和代碼實(shí)現(xiàn)該文件的優(yōu)化
2.資源文件:通過Lint工具掃描代碼中沒有使用到的靜態(tài)資源
3.圖片資源:使用tinypng和webP,下面詳細(xì)介紹圖片資源優(yōu)化的方案,矢量圖
4.SO文件將不用的去掉,目前主流app一般只放一個(gè)arm的so包

#### 閱讀更多

20+個(gè)很棒的Android開源項(xiàng)目

我是如何進(jìn)入Facebook的?

2018年Android面試題含答案—適合中高級(jí)(下)

看完你就該會(huì)git了(手把手教你用vue+node+mongodb搭建一個(gè)小商城

相信自己,沒有做不到的,只有想不到的

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/76545.html

相關(guān)文章

  • 終于,我還是下決心學(xué)Java后臺(tái)了

    摘要:我沒有什么本事,人也丑,也不會(huì)忽悠,只能硬著頭皮學(xué)習(xí)了。最近計(jì)劃學(xué)習(xí)后臺(tái),因?yàn)樽罱恿怂交畹膯栴},好多都要后臺(tái)和前端一起做。 我沒有什么本事,人也丑,也不會(huì)忽悠,只能硬著頭皮學(xué)習(xí)了。最近計(jì)劃學(xué)習(xí)Java后臺(tái),因?yàn)樽罱恿怂交畹膯栴},好多都要Java后臺(tái)和前端一起做。平常我在做什么,當(dāng)然是忙著賺錢了 除了敲代碼,你還有什么副業(yè)嗎?接了活自己還要找開發(fā)Java后臺(tái)開發(fā)的,為什么我自己不會(huì)呢...

    Zoom 評(píng)論0 收藏0
  • 終于,我還是下決心學(xué)Java后臺(tái)了

    摘要:我沒有什么本事,人也丑,也不會(huì)忽悠,只能硬著頭皮學(xué)習(xí)了。最近計(jì)劃學(xué)習(xí)后臺(tái),因?yàn)樽罱恿怂交畹膯栴},好多都要后臺(tái)和前端一起做。 我沒有什么本事,人也丑,也不會(huì)忽悠,只能硬著頭皮學(xué)習(xí)了。最近計(jì)劃學(xué)習(xí)Java后臺(tái),因?yàn)樽罱恿怂交畹膯栴},好多都要Java后臺(tái)和前端一起做。平常我在做什么,當(dāng)然是忙著賺錢了 除了敲代碼,你還有什么副業(yè)嗎?接了活自己還要找開發(fā)Java后臺(tái)開發(fā)的,為什么我自己不會(huì)呢...

    BlackHole1 評(píng)論0 收藏0
  • 終于,我還是下決心學(xué)Java后臺(tái)了

    摘要:我沒有什么本事,人也丑,也不會(huì)忽悠,只能硬著頭皮學(xué)習(xí)了。最近計(jì)劃學(xué)習(xí)后臺(tái),因?yàn)樽罱恿怂交畹膯栴},好多都要后臺(tái)和前端一起做。 我沒有什么本事,人也丑,也不會(huì)忽悠,只能硬著頭皮學(xué)習(xí)了。最近計(jì)劃學(xué)習(xí)Java后臺(tái),因?yàn)樽罱恿怂交畹膯栴},好多都要Java后臺(tái)和前端一起做。平常我在做什么,當(dāng)然是忙著賺錢了 除了敲代碼,你還有什么副業(yè)嗎?接了活自己還要找開發(fā)Java后臺(tái)開發(fā)的,為什么我自己不會(huì)呢...

    Null 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<