您好,登錄后才能下訂單哦!
記錄之前一次面試。
先說一下面試問到的需要的點:tcp/udp.volatile關鍵字.多進程.hashmap.anr.activity.MVP.算法題.自定義view.OKHTTP.java相關.數據結構.性能優化.
為此我整理了一份983頁的PDF,把自己平時收集的面試題,和平時工作中碰到的都融合進去了
(更多完整項目下載。未完待續。源碼。圖文知識后續上傳github。)
可以點擊關于我聯系我獲取完整PDF
(VX:mm14525201314)
問到的問題中,還是性能優化相關的對我的印象比較深刻,所以著重講一下(答案僅供參考)
首先我們要清楚圖片的三級緩存是如何的
如果內存足夠時不回收。內存不夠時就回收軟引用對象
inTargetDensity
/inDensity
) x 高度像素 x(inTargetDensity
/ inDensity
)x 一個像素所占的內存字節inTargetDensity
表示目標屏幕的 dpi一個加載網頁的過程中,native、網絡、后端處理、CPU 都會
參與,各自都有必要的工作和依賴關系;讓他們相互并行處理
而不是相互阻塞才可以讓網頁加載更快:
參考回答: 避免 OOM 的問題就需要對大圖片的加載進行管理,主要通
過縮放來減小圖片的內存占用。
BitmapFactory
提供的加載圖片的四類方法(decodeFile
、decodeResource
、decodeStream
、decodeByteArray
)BitmapFactory.Options
參數,通過 inSampleSize
參inSampleSize
的取值應該總是為 2 的指數,即BitmapFactory.Options
的inJustDecodeBounds
參數設為 true 并加載圖片BitmapFactory.Options
中取出圖片的原始寬高信inSampleSize
BitmapFactory.Options
的inJustDecodeBounds
參數設為 false,重新加載圖片參考回答:
內存判定對象可回收有兩種機制:
引用計數算法: 給對象中添加一個引用計數器,每當有
一個地方引用它時,計數器值就加 1;當引用失效時,
計數器值就減 1;任何時刻計數器為 0 的對象就是不可
能再被使用的。然而在主流的 Java 虛擬機里未選用引用
計數算法來管理內存,主要原因是它難以解決對象之間相互循環引用的問題,所以出現了另一種對象存活判定
算法。
GC 回收算法有以下四種:
AndroidProfiler
工具或 MAT另外,影響界面卡頓的兩大因素,分別是界面繪制和數據處
理。
ConstraintLayout
等)onCreate()
中不執行耗時操作 把頁面顯示的 View 細AsyncTask
里逐步顯示,用 Handler
onCreate()
和onReume()
的時間,使得用戶能盡快看到頁面,操作AdapterView
的效率。startActivity
中的 intent 的信息,然后在去創建進程,最后啟Acitivy
,即冷啟動。而啟動出現白黑屏的問題,就是在這段windowIsTranslucent
和 windowNoTitle
,將這兩個android:windowBackground
屬性為啟動頁背景圖即不會立即釋放對象占用的內存。 如果對象的引用被置為 null,
只是斷開了當前線程棧幀中對該對象的引用關系,而 垃圾收集
器是運行在后臺的線程,只有當用戶線程運行到安全點(safe
point)或者安全區域才會掃描對象引用關系,掃描到對象沒有被
引用則會標記對象,這時候仍然不會立即釋放該對象內存,因
為有些對象是可恢復的(在 finalize 方法中恢復引用 )。只有
確定了對象無法恢復引用的時候才會清除對象內存。
動畫區別:
RecyclerView
中,內置有許多動畫 API,例如:notifyItemChanged()
, notifyDataInserted()
,notifyItemMoved()
等等;如果需要自定義動畫效果,RecyclerView.ItemAnimator
類)完成RecyclerView.setItemAnimator();
ListView
并沒有實現動畫效果,但我們可以在刷新區別:
ListView
中通常刷新數據是用全局刷新notifyDataSetChanged()
,這樣一來就會非常消耗資onItemChanged()
方法,在方法里面獲取到這個 itemgetFirstVisiblePosition()
),然getView()
方法來刷新這個 item 的數據;RecyclerView
中可以實現局部刷新,例如:notifyItemChanged();
緩存區別:
RecyclerView
比 ListView
多兩級緩存,支持多個離ItemView
緩存,支持開發者自定義緩存處理邏輯,支RecyclerView
共用同一個RecyclerViewPool
(緩存池)。 ListView
和 RecyclerView
緩存機制基本一致,但緩存BaseAdapter
:抽象類,實際開發中我們會繼承這個類并且重ArrayAdapter
:支持泛型操作,最簡單的一個適配器,只能展SimpleAdapter
:同樣具有良好擴展性的一個適配器,可以自SimpleCursorAdapter
:用于顯示簡單文本類型的 listView
,RelativeLayout
會讓子 View 調用 2 次 onMeasure
,LinearLayout
在有 weight 時,也會調用子 View 2 次onMeasure
RelativeLayout
的子 View 如果高度和RelativeLayout
不同,LinearLayout
和FrameLayout
而不是 RelativeLayout
。
請查看完整的PDF版
(更多完整項目下載。未完待續。源碼。圖文知識后續上傳github。)
可以點擊關于我聯系我獲取完整PDF
(VX:mm14525201314)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。