記錄之前一次面試。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、鄂溫克網(wǎng)站維護、網(wǎng)站推廣。
先說一下面試問到的需要的點:tcp/udp.volatile關(guān)鍵字.多進程.hashmap.anr.activity.MVP.算法題.自定義view.OKHTTP.java相關(guān).數(shù)據(jù)結(jié)構(gòu).性能優(yōu)化.
為此我整理了一份983頁的PDF,把自己平時收集的面試題,和平時工作中碰到的都融合進去了
(更多完整項目下載。未完待續(xù)。源碼。圖文知識后續(xù)上傳github。)
可以點擊關(guān)于我聯(lián)系我獲取完整PDF
(VX:mm14525201314)
問到的問題中,還是性能優(yōu)化相關(guān)的對我的印象比較深刻,所以著重講一下(答案僅供參考)
首先我們要清楚圖片的三級緩存是如何的
如果內(nèi)存足夠時不回收。內(nèi)存不夠時就回收軟引用對象
inTargetDensity
/inDensity
) x 高度像素 x(inTargetDensity
/ inDensity
)x 一個像素所占的內(nèi)存字節(jié)inTargetDensity
表示目標屏幕的 dpi一個加載網(wǎng)頁的過程中,native、網(wǎng)絡(luò)、后端處理、CPU 都會
參與,各自都有必要的工作和依賴關(guān)系;讓他們相互并行處理
而不是相互阻塞才可以讓網(wǎng)頁加載更快:
參考回答:避免 OOM 的問題就需要對大圖片的加載進行管理,主要通
過縮放來減小圖片的內(nèi)存占用。
BitmapFactory
提供的加載圖片的四類方法(decodeFile
、decodeResource
、decodeStream
、decodeByteArray
)BitmapFactory.Options
參數(shù),通過 inSampleSize
參inSampleSize
的取值應(yīng)該總是為 2 的指數(shù),即BitmapFactory.Options
的inJustDecodeBounds
參數(shù)設(shè)為 true 并加載圖片BitmapFactory.Options
中取出圖片的原始寬高信inSampleSize
BitmapFactory.Options
的inJustDecodeBounds
參數(shù)設(shè)為 false,重新加載圖片參考回答:
內(nèi)存判定對象可回收有兩種機制:
引用計數(shù)算法:給對象中添加一個引用計數(shù)器,每當有
一個地方引用它時,計數(shù)器值就加 1;當引用失效時,
計數(shù)器值就減 1;任何時刻計數(shù)器為 0 的對象就是不可
能再被使用的。然而在主流的 Java 虛擬機里未選用引用
計數(shù)算法來管理內(nèi)存,主要原因是它難以解決對象之間相互循環(huán)引用的問題,所以出現(xiàn)了另一種對象存活判定
算法。
GC 回收算法有以下四種:
AndroidProfiler
工具或 MAT另外,影響界面卡頓的兩大因素,分別是界面繪制和數(shù)據(jù)處
理。
ConstraintLayout
等)onCreate()
中不執(zhí)行耗時操作 把頁面顯示的 View 細AsyncTask
里逐步顯示,用 Handler
onCreate()
和onReume()
的時間,使得用戶能盡快看到頁面,操作AdapterView
的效率。startActivity
中的 intent 的信息,然后在去創(chuàng)建進程,最后啟Acitivy
,即冷啟動。而啟動出現(xiàn)白黑屏的問題,就是在這段windowIsTranslucent
和 windowNoTitle
,將這兩個android:windowBackground
屬性為啟動頁背景圖即不會立即釋放對象占用的內(nèi)存。如果對象的引用被置為 null,
只是斷開了當前線程棧幀中對該對象的引用關(guān)系,而 垃圾收集
器是運行在后臺的線程,只有當用戶線程運行到安全點(safe
point)或者安全區(qū)域才會掃描對象引用關(guān)系,掃描到對象沒有被
引用則會標記對象,這時候仍然不會立即釋放該對象內(nèi)存,因
為有些對象是可恢復(fù)的(在 finalize 方法中恢復(fù)引用 )。只有
確定了對象無法恢復(fù)引用的時候才會清除對象內(nèi)存。
動畫區(qū)別:
RecyclerView
中,內(nèi)置有許多動畫 API,例如:notifyItemChanged()
, notifyDataInserted()
,notifyItemMoved()
等等;如果需要自定義動畫效果,RecyclerView.ItemAnimator
類)完成RecyclerView.setItemAnimator();
ListView
并沒有實現(xiàn)動畫效果,但我們可以在刷新區(qū)別:
ListView
中通常刷新數(shù)據(jù)是用全局刷新notifyDataSetChanged()
,這樣一來就會非常消耗資onItemChanged()
方法,在方法里面獲取到這個 itemgetFirstVisiblePosition()
),然getView()
方法來刷新這個 item 的數(shù)據(jù);RecyclerView
中可以實現(xiàn)局部刷新,例如:notifyItemChanged();
緩存區(qū)別:
RecyclerView
比 ListView
多兩級緩存,支持多個離ItemView
緩存,支持開發(fā)者自定義緩存處理邏輯,支RecyclerView
共用同一個RecyclerViewPool
(緩存池)。 ListView
和 RecyclerView
緩存機制基本一致,但緩存BaseAdapter
:抽象類,實際開發(fā)中我們會繼承這個類并且重ArrayAdapter
:支持泛型操作,最簡單的一個適配器,只能展SimpleAdapter
:同樣具有良好擴展性的一個適配器,可以自SimpleCursorAdapter
:用于顯示簡單文本類型的 listView
,RelativeLayout
會讓子 View 調(diào)用 2 次 onMeasure
,LinearLayout
在有 weight 時,也會調(diào)用子 View 2 次onMeasure
RelativeLayout
的子 View 如果高度和RelativeLayout
不同,LinearLayout
和FrameLayout
而不是 RelativeLayout
。
請查看完整的PDF版
(更多完整項目下載。未完待續(xù)。源碼。圖文知識后續(xù)上傳github。)
可以點擊關(guān)于我聯(lián)系我獲取完整PDF
(VX:mm14525201314)
文章標題:把面試官唬住了,就要50K。沒唬住,就要5K!Android
網(wǎng)頁地址:http://jinyejixie.com/article2/iihjoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、用戶體驗、App設(shè)計、面包屑導(dǎo)航、定制網(wǎng)站、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)