日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MS

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Handler

  • 談談消息機制Handler作用 ?有哪些要素 ?流程是怎樣的 ?
    用于線程間通信,要素有handler, message, message queue, looper
    子線程創建handler之前必須創建looper,looper prepare() 會 創建message queue
    new handler時候會綁定到當前Thread中Threadlocal的looper
    looper.loop的時候會開始輪訓Meesage隊列
    發送消息調用messagequeue.enqueue()調用native方法喚醒讓message.next()執行
    取消息for(;;){message.next()}沒有消息的話會調用Native方法 讓出CPU,如果是主線程的話,
    Activity沒有事情做休眠也是可以的
  • 一個線程能否創建多個Handler,Handler跟Looper之間的對應關系 ?
    一個線程可以創建多個handler,每個handler會放入message的target變量里面
    一個looper可以對應多個handler.

  • Handler 引起的內存泄露原因以及最佳解決方案
    匿名內部類會默認持有外部類的引用,所以要是用靜態內部類,如果需要引用Actvity context,可以使用weakReference<>
  • 軟引用跟弱引用的區別
    軟引用在內存不足的時候GC會被清理
    弱引用GC就會清理
  • 為什么系統不建議在子線程訪問UI?
    UI空間不支持多線程操作,而且加鎖容易造成死鎖,使UI邏輯復雜。
    子線程textview.setText("")

    https://baijiahao.baidu.com/s?id=1620358105307361783&wfr=spider&for=pc
  • Looper死循環為什么不會導致應用卡死?
    Looper是保證Activity工作的循環操作,如果Looper退出的話ActivityThread就結束了,Activity的生命周期就是依靠looper來控制的,所以looper死循環不存在的,message.next()會調用native方法判斷nativemessagequeue,為空的話讓出CPU
  • 使用Handler的postDealy后消息隊列會有什么變化?
    會把消息根據時間順序 插入messagequeue隊列
  • 可以在子線程直接new一個Handler嗎?怎么做?
    不能,需要創建Looper使用looper.prepare(),或者直接使用handlerThread.
  • Message可以如何創建?哪種效果更好,為什么?
    Message最好使用obtain方法,Obtain會從meesage pool中獲取message,減少創建message的開銷,這里使用的是享元模式式即:Flyweight,它是對象池的一種實現。享元模式用來盡可能的減少內存的使用量。多用于存在大量重復對象的場景,或需要緩沖池的時候。用來緩存共享的對象。這樣來避免內存移除等。
  • Looper能創建多個實例嘛?能自己創建Looper實例嘛?
    每個Thread只有一個Looper實例,保存在ThreadLocal里面
    自己不能new Looper實例,因為Looper構造方法是private的
  • 在子線程創建的handler能與主線程通信嘛?如果能怎么實現。
    在子線程中new handler時候傳入主線程looper對象即可與主線程通信
  • handler,asyncTask有什么區別?
    AsyncTask就是對Handler的封裝,有四個方法onprepare(主) doinbackground(子線程) onpostprogress(主) oncomplete(主)
  • 線程

  • 線程池的好處? 四種線程池的使用場景,線程池的幾個參數的理解?
    控制并發,管理線程(定時,單線程),快速執行減少創建和銷毀的開銷
    newCachedThreadPool() 最大線程數Integer.MAX_VALUE 任務量大耗時少場景
    newFixedThreadPool(int nThreads) 適用于任務量固定 且運行時間較長的場景 核心線程=最大線程不銷毀 超過核心線程的任務阻塞在無界的LinkedBlockingQueue
    ScheduledThreadPoolExecutor(int corePoolSize) 適用于執行定時任務和具體固定周期的重復任務 DelayedWorkQueue
    newSingleThreadExecutor() 按順序執行 LinkedBlockingQueue
    參數有 核心線程數(一直存在不會銷毀) 最大線程數 等待時間(超時銷毀) 等待時間單位 線程隊列 線程工廠 拒絕策略(拋異常或者拋棄新任務 丟掉老任務)
  • Android中還了解哪些方便線程切換的類?
    handler asynctask intentService Rxjava handlerThread
  • 講講AsyncTask的原理
    SerialExecutor(保證順序執行)+ThreadPool(線程池 執行) +sHandler(主線程looper)
  • IntentService有什么用 ?
    Service+handlerThread onhandleintent執行耗時任務 任務執行完自己關閉service
  • 直接在Activity中創建一個thread跟在service中創建一個thread之間的區別
    主線程創建thread一般是執行短暫的異步任務
    service創建的thread一般是執行長期的任務 如長連接
  • ThreadPoolExecutor的工作策略 ?
    1核心線程沒滿放入核心線程2隊列沒滿放入隊列3線程池沒滿創建線程池執行
  • Handler、Thread和HandlerThread的差別?
    Handler用于線程間通信,Thread用于開啟并運行新線程,HandlerThread自己會創建Handler的Thread
  • ThreadLocal的原理
    threadlocal tl = new ThreadLocal();
    Thread1{ tl.set(123)}
    Thread2{tl.set(234)}
    set的時候調用的是Thread內部的threadLocals.

  • 多線程是否一定會高效(優缺點)
    不一定,主要用于異步操作把耗時任務放到后臺,提高用戶體驗,多用于IO 網絡 操作
    缺點是線程太多造成CPU競爭,CPU需要不停切換線程,處理同步問題
  • 多線程中,讓你做一個單例,你會怎么做
    懶漢雙重檢查加同步鎖(懶加載)
    餓漢(創建線程前已經建好)
  • 除了notify還有什么方式可以喚醒線程
    還有notifayall(),notify只喚醒一個等待的線程,notifyall喚醒所有等待的線程,然后多個線程通過競爭得到鎖
    在生產消費者模式下,如果只喚醒一個進程的話可能
  • 什么是ANR ? 什么情況會出現ANR ?如何避免 ? 在不看代碼的情況下如何快速定位出現ANR問題所在 ?
    Activity5秒 broadcast 10秒 service 20秒 不要在主線程做耗時操作
    查看data/anr trace
    情景
    1 binder調用導致anr,如果不需要返回值的話就在AIDL方法參數定義in(c-s)不需要等待返回
    2 主線程等待鎖,使用trylock解決
    3 主線程做耗時操作
    4 系統IO文件操作導致ANR,將文件操作放入子線程 ANRManager: 100% TOTAL: 2% user + 2.1% kernel + 95% iowait + 0.1% softirq
    5 JE NE后系統dump信息導致ANR,解決JE NE即可
    6 每個進程只分配15個binder線程,短時間大量binder調用可能導致超出的binder請求得不到處理
    7 mokey可不處理
  • 可重入鎖的實現,公平鎖非公平鎖都是什么定義?
    如果當前線程==獲得鎖的線程 則可以獲取鎖 鎖count++, 釋放一個鎖的話count--,如果count ==0的話才釋放

    公平和非公平鎖的隊列都基于鎖內部維護的一個雙向鏈表,表結點Node的值就是每一個請求當前鎖的線程。
    公平鎖則在于每次都是依次從隊首取值。
    非公平鎖:在等待鎖的過程中, 如果有任意新的線程妄圖獲取鎖,都是有很大的幾率直接獲取到鎖的。

  • 說說Android中線程池的實現
    線程池的七個參數為核心線程數,最大線程數,等待時間,等待時間單位,線程隊列,線程工廠,拒絕策略
    步驟1執行任務,如果核心線程滿 進入隊列,如果隊列滿,新建線程,如果超過最大線程的話 執行拒絕策略
    常見線程池
    固定線程池:核心線程等于最大線程,隊列使用無邊界的likedBlockQueue,適用于知道線程數,并且時間較長的任務
    緩存線程池:大量耗時較少的任務
    scheduledThreadPool:
    singletonThreadPool:按順序執行 不需要同步操作 要求順序執行的任務如數據庫操作 文件操作 應用安裝
  • 進程線程在操作系統中的實現
    進程是應用的實體,一個應用至少有一個進程
    線程是CPU調度的最小單元,App的主線程就是ActivityThread, 他里面的ApplicationThread是用來和AMS通信的binder.Activity啟動后會有主線程和幾個binder線程(用于AMS WMS通信)。
  • 安卓線程間通信有哪幾種方式
    Handler asynctask rxjava handlerthread intentService
  • 能在子線程創建handler嘛?有什么要注意的嗎?
    可以 子線程創建handler需要綁定Looper,綁定子線程looper需要使用looper.prepare() 然后用looper.loop()
    也可以直接使用HandlerThread
  • 說一下為什么要用線程池?線程池的幾個參數,以及它是怎么工作的?核心線程數一般有多少?
    線程池可以控制并發,減少新建/銷毀線程的開銷,可以控制線程執行間隔和執行順序
    7個參數 核心線程數 最大線程數 超時時間 超時時間單位 線程隊列 線程工廠 拒絕策略
    核心線程->隊列->線程->拒絕策略
  • Android多線程的實現方式有哪些?
    Thread+runnable, Thread(FutureTask(Callable)), asyncTask,handlerThread,rxjava
  • Android開發中何時使用多進程?使用多進程的好處是什么?
    webView 大圖 定位 push 不穩定操作(保護主線程)
    可以使用更多內存,每個進程分配的內存固定,兩個進程就可以拿到兩倍內存
  • 數據結構與算法

  • 都用過那些常用的數據結構,說說對樹的了解?
    鏈表(遍歷使用迭代器效率高) 數組 棧(先進后出) 隊列(隊尾入隊 隊首刪除這點和棧不同) hashmap
  • 快排寫一下,動態規劃了解嗎?
    sort(start, end)
    {
    int pivor = findPivot(start, end)
    sort(start, pivot-1)
    sort(pivot+1,end)
    }
    findPivot(){
    while(){
    while right--
    while left++
    }
    }
    swap(int a,int b)
  • 冒泡排序的鏈表實現
  • HashMap如果Hash沖突了怎么解決?
    1.7頭插進鏈表,1.8尾插進鏈表,長度超過8數組不大于64先擴容
  • 雙線程通過線程同步的方式打印12121212…….
  • 快排 堆排 選擇排序
  • 二叉樹排序方式
  • 二分查找(手寫)
  • 10大排序算法
  • Bitmap

  • Bitmap使用需要注意哪些問題 ? public Bitmap.Config inPreferredConfig = Bitmap.Config.ARGB_8888; argb_8888:每個像素占32位,a=8;r=8;g=8;b=8;一共8*4=32位,一個字節8位,共占四個字節; 一張480*800,argb_8888的圖片有多大內存:480*800*4/1024=1500kb; jpg圖片所占內存大小 =?圖片被解析出來后的寬 * 圖片被解析出來后的高 * 單位像素顏色模式所占字節數 jpg圖片所占內存大小 = (寬 * density / 160) * (高 * density / 160)* 像素模式所占字節數 https://my.oschina.net/u/217380/blog/1486626
  • Bitmap.recycle()會立即回收么?什么時候會回收?如果沒有地方使用這個Bitmap,為什么垃圾回收不會直接回收?
  • 一張Bitmap所占內存以及內存占用的計算
    h*w*ARGB_8888(4)
  • Android中緩存更新策略 ?
    LruCache DiskLRUcache
  • LRU的原理 ?
    LinkedHashMap按訪問排序,最新最近訪問的放在鏈表尾端。
  • 性能優化

  • 圖片的三級緩存中,圖片加載到內存中,如果內存快爆了,會發生什么?怎么處理?

    會發生GC 回收內存
  • 內存中如果加載一張500*500的png高清圖片.應該是占用多少的內存?
    不考慮縮放的話 500*500*4/1024 = 976Kb
  • WebView的性能優化 ?

    webview首次初始化耗時長,優化打開頁面速度,創建全局webview,應用啟動就創建webview實例
    H5頁面拉取優化,把html,css,js,image等資源預置在客戶端本地預置在應用內部提高加載速度
    webview加載圖片最慢 可以先加載內容(setBlockNetworkImage(boolean)方法)然后再加載圖片:在onPageStarted時屏蔽圖片加載,在onPageFinished時開啟圖片加載。
  • Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM?
  • 內存回收機制與GC算法(各種算法的優缺點以及應用場景);GC原理時機以及GC對象
  • 內存泄露和內存溢出的區別 ?AS有什么工具可以檢測內存泄露?
  • 性能優化,怎么保證應用啟動不卡頓? 黑白屏怎么處理?
  • 強引用置為null,會不會被回收?
  • ListView跟RecyclerView的區別?
  • ListView的adapter是什么adapter?
  • LinearLayout、FrameLayout、RelativeLayout性能對比,為什么?
  • Android UI優化
  • Android啟動優化
  • 屏幕適配方式
  • apk瘦身技巧
  • webp使用的注意事項
  • 要做一個盡可能流暢的ListView,你平時在工作中如何進行優化的?
  • Android下解決滑動沖突的常見思路是什么?
  • 內存泄露檢測有什么好方法?
  • 設計模式

  • 你所知道的設計模式有哪些?
  • 談談MVC、MVP和MVVM,好在哪里,不好在哪里 ?
  • 封裝p層之后.如果p層數據過大,如何解決?
  • 是否能從Android中舉幾個例子說說用到了什么設計模式 ?
  • 裝飾模式和代理模式有哪些區別 ?
  • 實現單例模式有幾種方法 ?懶漢式中雙層鎖的目的是什么 ?兩次判空的目的又是什么 ?
    懶漢 惡漢
    加鎖是讓多線程訪問同步
    兩次判空,第一次判空是防止取鎖 競爭是是防止排隊中的線程創建多個實例
  • 用到的一些開源框架,介紹一個看過源碼的,內部實現過程。
  • Fragment如果在Adapter中使用應該如何解耦?
  • 是否了解責任鏈模式?
  • 說說你對設計模式的理解,開發過程中主要用到了哪些設計模式?
  • 寫個單例模式
  • Java

  • 如何理解Java的多態?其中,重載和重寫有什么區別?
  • 談一下JVM內存區域劃分?哪部分是線程公有的,哪部分是私有的?
  • final關鍵字的用法?
  • 死鎖是怎么導致的?如何定位死鎖
  • 數據庫如何進行升級?SQLite增刪改查的基礎sql語句?
  • Java內存模塊分區和GC機制,GC算法有哪些
  • HashMap的實現機制,怎么樣HashMap線程安全
  • Finalize機制
  • 強引用 弱引用 軟引用 虛引用的區別和使用場景
  • 反射能反射私有方法以及靜態方法嘛?
  • Broadcast

  • Broadcast的分類?
  • 廣播中怎么進行網絡請求
  • Activity

  • Activity啟動模式,allowReparent的特點和棧親和性
  • 異常生命周期
  • 設備橫豎屏切換的時候,接下來會發生什么?
  • Activity A啟動Activity B,這兩個Activity生命周期變化順序?
  • Service

  • Service的兩種啟動模式?其生命周期各是什么?
    ?
  • IntentService與普通Service的區別?
  • Android原理

  • Android中的事件傳遞機制?
  • ANR出現的情況有幾種? 怎么分析解決ANR問題?
  • 內存泄露的場景有哪些?內存泄漏分析工具使用方法?
  • 如何實現啟動優化,有什么工具可以使用?
  • Android View繪制流程,當一個TextView的實例調用setText()方法后執行了什么
  • Android dalvik虛擬機和Art虛擬機的優化升級點
  • Android屏幕渲染機制
  • 熱修復的原理,你都了解過哪幾種熱修復框架
  • OkHttp的原理
  • Android 線程池的實現原理
  • 從點擊應用圖標到進入應用,Android系統都做了哪些工作,期間涉及到的進程切換有哪些?
  • Android事件傳遞流程和OnTouchListener的關系
  • 雙指縮放拖動大圖
  • RecyclerView繪制步驟和復用機制
  • Activity遵循什么設計模式
  • EventBus源碼解析,遵循什么設計模式
  • 系統的啟動流程,從桌面點擊圖標開始。
  • 自定義view的實現,以及注意事項
  • MVC和MVP的區別,為什么要使用MVP?MVP有什么缺點嘛?
  • 單例有哪幾種?單例為什么要雙重檢查,優點? 那么雙重檢查就絕對是安全的嘛?
  • 既然雙重檢查還不是絕對安全的,那么有沒有辦法完善呢?
  • LRUCache原理
  • Tinker熱修復的原理
  • 黃油刀(butterknife)實現原理
  • rxjava是如何實現線程切換的
  • 請介紹下AsyncTask的內部實現,適用的場景是?
  • 如何把一個應用設置為系統應用?
  • 進程間通信

  • 說說你了解的IPC方法
  • 說說Binder的大體實現
  • 怎么控制另外一個進程的View顯示
  • Android中進程間通信有哪些實現方式?
  • 網絡

  • HTTPS是怎么實現的?
  • 客戶端網絡安全實現
  • 對服務器眾多錯誤碼的處理(錯誤碼有好幾萬個)
  • HTTPS的組成是什么?
  • tcp,udp的區別
  • 為什么要三次握手
  • tcp包過大怎么辦?
  • 網絡傳輸你們是怎么加密的?
  • 實際問題

  • Android應用保活
  • RemoteViews實現和使用場景
  • LeakCanary的使用和實現原理
  • 介紹一下你在開發過程中使用到的設計模式
  • ClassLoader的雙親委托
  • Android中的ClassLoader
  • 各大圖片框架之間的區別,如果讓你自己實現,怎么實現?
  • kotlin有什么優點,或者說你在使用它之前做了什么考慮?
  • 如何實現一個bug統計框架(如bugly,友盟)
  • 混淆的注意事項(反射不能混淆等),第三方框架能混淆嘛?
  • 斷點續傳實現原理。怎么從斷點處繼續下載?下載完怎么確保文件是正確的?
  • 基礎

  • 安卓的動畫有哪幾類,有什么區別
  • 多個進程,會創建幾個application實例?
  • anr怎么定位
  • https://www.jianshu.com/p/ca2ecc3ea0f0

    https://www.jianshu.com/p/81a17da4d695

    作者:秀葉寒冬
    鏈接:https://www.jianshu.com/p/c8dd2cb55b81
    來源:簡書

    總結

    以上是生活随笔為你收集整理的MS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。