主頁 > 移動端開發 > 2020年10月份面試問題記錄

2020年10月份面試問題記錄

2020-12-04 12:35:34 移動端開發

映客

1.ConstraintLayout 、FrameLayout 右下方放一個view

約束布局,可以對他的子view,比如TextView,約束其右邊界在某某控制元件的右部一側,約束其底部在某某控制元件的底部一側,layout_constraintRight_toRightOf="parent",layout_constraintBottom_toBottomOf="parent";FrameLayout,默認其子控制元件都是堆疊在布局的左上角,如果要實作將一個View放在其右下角,可以給view設定layout_gravity="right|bottom"屬性,相對其父控制元件居右、居底,

2.從架構層面介紹自己設計的模塊

3.專案中遇到多執行緒的問題

4.Recycler中onCreateViewHolder何時被呼叫多次 ,利用RecyclerView如何畫圓環

5.執行緒池的原理,執行緒個數最優分配 ,如果是無限長佇列,如何設定拒絕策略

6.volatile的作用

7.Activity生命周期方法,透明和非透明兩種

8.onDraw方法需要注意什么

9.圖片壓縮的幾種方式

10.大圖片加載

11.jpg和png的差別

12.資料庫升級遇到的過什么問題,怎么解決?

TraxChina

1.String 、StringBuffer 、 StringBuilder區分

2.Invalidatefinish方法

3.是否可以在方法里定義靜態變數

public void test(){

Static int a = 3;

}

跟誰學

1.Android事件分發機制,dispatchTouchEvent方法回傳true、false、super.dispatchTouchEvent各表示什么意思

2.屬性影片、和幀影片,從性能上有何優缺點,

3.Arouter核心原理

4.Glide核心原理

5.如何從view層性能優化,TraceView如何使用

6.Activity的啟動流程,可以從哪些地方做優化

7.UI卡頓的檢查、處理

8.HashMap底層原理,ArrayList底層原理

9.兩個int型別的鏈表,合并成一個鏈表并按順序排列,

作業幫

1.ClassLoader的雙親委派機制

2.HashTable、HashMap原理

3.Arouter關聯表關系,EventBus實作原理,

4.物件的結構

5.IPC Binder機制

6.歸并排序,二叉樹遍歷

7.View.post()和handler.postDelay()實作原理

8.系統原始碼有沒有留意單例的使用

9.LogUtils的封裝

10.執行緒池阻塞佇列的實作原理

11.WebView優化 (加載的時候先將資源快取)

12.泛型擦除

微博一面

1.方法鎖、類鎖的區別

2.ThreadLocal的實作原理

3.一個view被繪制到頁面上的流程

4.OkHttp原理

5.事件分發流程,如果所有View都不消耗,最后事件由誰處理

6.怎樣確保A、B、C三個執行緒都執行完后,才執行D執行緒

7.觀察者模式和訂閱者模式的區別

8.UI優化

9.亮點功能

微博二面:

1.Glide快取原理,LruCache如何實作,如果讓你自己實作該如何做?

2.記憶體優化都做了哪些優化?

3.Handler機制原理,可否利用handler機制監控頁面卡頓,怎么做?

4.Dalvik和ART虛擬機差別?

5.青蛙跳箱子問題

WiFi鑰匙

1.什么是服務,前臺服務和后臺服務有沒有了解?

2.AIDL流程

千喜鶴

1.HashMap底層原理,怎么判斷存鏈表還是存紅黑樹?

2.ConcurrentHashMap如何使用,如何保證執行緒安全?

3.Handler訊息機制,同步訊息、異步訊息、訊息屏障區別,post和send的區別

4.APP繪制流程

setContentView 其內部是通過PhoneWindow將我們的布局添加到其內部的mContentParent中,在ActivityThread的handleResumeActivity中,會呼叫WindowManager的addView方法將DecorView添加到WMS中,這樣DecorView被渲染到螢屏上顯示,并且可以接收螢屏觸摸事件;而WindowManager的最終實作是WindowManagerGlobal,在其setView方法中創建了一個最關鍵的物件ViewRootImpl物件,通過ViewRootImpl的setView方法,執行requestLayout()完成測量繪制,并將View添加WMS中,而且在setView中還設定了輸入事件的處理,設定了一系列的輸入管道,一個觸屏事件發生后,經過驅動層一系列計算通過Socket跨行程通知WMS,最終螢屏事件會被發送到輸入管道里,最終呼叫PhoneWindow的dispatchTouchEvent,其內部的callback指的就是activity,這樣事件就到了Activity的dispatchTouchEvent中了,

5.AMS、PMS

6.6.0~10.0的適配

7.Glide使用流程,傳入Application和Activity有什么區別

8.OKHTTP原理,攔截器加載順序

9.Retrofit的使用

10.APP啟動流程

1.ActivityA --> ActivityManagerService:我們的呼叫startActivity后最終交由Instrumentation的exeStartActivity方法,Instrumentation是用來做應用行程和系統行程互動的,在其方法內通過AIDL 來呼叫AMS的startActivity方法,

2.ActivityManagerService --> ApplicationThread:AMS只做了兩件事,一是綜合處理LaunchMode和Intent的flag標志位,并根據處理結果生成一個目標Activity物件,二是判斷是否要為目標物件創建一個新的行程或新的任務堆疊,我們在執行Instrumentation的方法時傳入了一個ApplicationThread的參考,這個類就是負責行程間通信的,AMS最終就是呼叫了B行程中的一個ApplicationThread參考,從而間接通知B行程進行相應操作,

3.ApplicationThread -> Activity:通過ApplicationThread參考,最終呼叫ActivityThread的scheduleTransaction方法,該方法通過Handler發送了一個Message,Message的obj就是啟動Activity的事務物件,最終呼叫事務的execute方法,最終呼叫ActivityThread的handleLaunchActivity方法,通過反射創建指定的Activity,最終通過Instrumentation呼叫其onCreate方法,

小紅書

1.自定義view ,在draw方法里畫個背景,設定Wrap_content,放到一個100*100的父布局里,view的寬高多大

不處理wrap_content,默認是match_parent的效果,我們可以在wrap_content的時候設定一個最小默認寬高,來解決這個問題;

2.在onCreate能獲取View的寬高嗎,onResume里可以嗎?

都不可以,在onResume方法里,DecorView才被添加到WMS中,觸發View的繪制,

在onCreate中

3.EventBus原理,EventBus是跨行程的嗎?

不是跨行程的,

首先在EventBus的register方法中通過反射遍歷注冊物件的所有方法,將帶有@Subscribe標簽的方法放入到一個串列里,最后以注冊物件為key,以串列為value放入一個HashMap中,

訂閱事件和訂閱者之間也有一個關聯關系表,當post執行的時候會查找訂閱了該Event的訂閱者并呼叫其方法,

postSticky的時候會將event和event.getClass保存起來,當有新事件要注冊監聽時,遍歷map,如果有會執行一次回呼,

4.在ListView和RecyclerView中LayoutInflater的inflate方法,最后一個布林值設定什么,設定為true會有問題嗎?

  1. root不能為空,否則布局檔案中設定的布局引數不會起作用
  2. attach不能設定為true,否則inflate回傳的布局為RecylerView,而不是我們希望回傳的自定義布局物件
  3. 必須為RecylerView指定LayoutManager,否則會拋出例外

就拿我們的Adapter來說吧,在創建item布局時,有下列幾種情況:

  • inflate(R.layout.xxx,null);
  • inflate(R.layout.xxx,parent,false);
  • inflate(R.layout.xxx,parent,true);

那么就講一下這三種情況把,

首先,inflate(R.layout.xxx,null) ,這是最簡單的寫法,這樣生成的布局就是根據http://R.layout.xxx回傳的View,要知道,這個布局檔案中的寬高屬性都是相當于父布局而言的,由于沒有指定parent,所以他的寬高屬性就失效了,因此不管你怎么改寬高屬性,都無法按你想象的那樣顯示,

然后,inflate(R.layout.xxx,parent,false),相較于前者,這里加了父布局,不管后面是true還是false,由于有了parent,布局檔案的寬高屬性是有依靠了,這時候顯示的寬高樣式就是布局檔案中的那樣了,

最后,inflate(R.layout.xxx,parent,true),這樣……等等,報錯了???哦,不要驚奇,分析一下原因:首先,有了parent,所以可以正確處理布局檔案的寬高屬性,然后,既然attachToRoot為true,那么根據上面的原始碼就會知道,這里會呼叫root的addView方法,而如果root是listView或者RecyclerView都會報錯,

adpater里面不要用true,那么什么時候用true呢?答案是fragment,在為fragment創建布局時,如果為true,那么這個布局檔案就會被添加到父activity中盛放fragment的布局中

5.自定義view滑動的時候,通過設定什么方法實作滑動位置,

在MOVE事件里獲取坐標,然后設定setX(),setY()

6.啟動優化都做了哪些?

影響啟動速度的因素有:

  1. 高耗時任務:比如三方框架初始化、MultiDex的加載、大檔案讀取導致c阻塞;
  2. 復雜的View層級:嵌套的Layout過多,導致View渲染程序中,影響Measure、layout的執行速度;
  3. 類過于復雜:Java物件創建需要一定的時間,如果一個類結構特別復雜,new一個物件也比較耗資源,特別是單例;
  4. 主題及Activity配置:由于主題切換,可能導致白屏,或者點了icon,過了一會才啟動頁面;

解決方案:

  1. 優化方法數:通過配置minify選項,打包時洗掉掉沒有用的方法,少用一些不必要的框架,或者找輕量級框架;
  2. Dex懶加載,將dex的加載放到Splash頁面;
  3. 三方框架放到執行緒池里初始化,或者通過異步作業協程;
  4. 一些優先級低的三方庫初始化,我們可以通過Looper.myQueue().addIdleHandler(),向MessageQueue中插入一條IdleHandler,IdleHandler只會在主執行緒空閑時才會被Looper從佇列中取出來執行,
  5. 避免在APP啟動的時候做資料庫的耗時任務;
  6. 通過Studio工具Layout Inspector,分析層級嵌套,優化布局;
  7. 使用沒有ActionBar、TitleBar的主題,相當于在DecorView里少了一個view,所以能有效提高啟動速度;(全屏主題,并設定背景為layer-list,這樣不 生成view,減少view繪制時間)

7.怎么優化Activity的啟動速度,怎么優化跨行程的Activity啟動速度

通過Studio工具Layout Inspector,分析層級嵌套,優化布局;在onPause方法里少做操作;在第二個頁面里盡量避免大物件的使用;

8.Arouter原理,Arouter怎么生成java檔案

Arouter使用Apt技術,在編譯階段將路由path和組件類生成具有映射關系類,Arouter根據用戶請求的postcard,需要要跳轉的目標地址,

Arouter采用了分組+按需加載的思想,分組就是在原來的path到目標的map外,再加一個新的map,這個map保存了組名到組加載器的映射關系,組加載器是一個類,可以加載組內的path到目標的映射關系,按需加載時,當呼叫navigation方法時,執行緒記憶體里的path到目標的映射表去找(第一次通常為空),找不到然后再從通過組名找到對應的組加載器,組加載器加載改組內的路由映射關閉,并將其添加到快取中,

9.ConcurrentHashMap支持并發讀嗎,支持并發寫嗎?

10.事件分發流程,

11.HashMap插入鏈表的時候,是在表頭插入還是表尾插入?

12.Kotlin

13.Glide的加載流程

14.二叉樹遍歷

前、中、后遍歷,以根節點父節點的遍歷順序來區分的,如果先遍歷父節點,再遍歷左子樹、右子樹就是前序遍歷;

15.Android做了哪些適配,8.0通知欄適配,和10.0適配

6.0隱私權限動態申請;7.0的FileProvider,和不支持權限組申請;

Android 8.0通知欄訊息分渠道,如果不適配,訊息通知可能無法完全彈出,所以一定要適配,我們可以創建自己的通知渠道,然后在自定義通知的時候設定下發到哪個渠道,

Android8.0應用圖示適配,將其分為前景層和背景層,

Android9.0默認不支持Http協議;要求啟動前臺服務的時候要先請求FOREGROUND_SERVICE權限,

Android10.0設備id非系統APP無法獲取,可以通過硬體資訊加上一些計算生成一個;取消讀寫本地檔案的權限,新增獲取系統媒體檔案的權限;

16.怎樣啟動一個Activity,是new出來的嗎?

ActivityThread呼叫performLaunchActivity方法,通過反射創建Activity物件,并執行其attach方法,Window就是在attach方法中被創建的;

17.Http和Https區別,抓包方式有差異嗎,Http的post請求和get請求能抓包嗎,都是明文傳輸嗎?

阿里影業

1.Handler機制里Message是怎么獲取的,Message類似什么設計模式

2.session機制過期,后續的處理邏輯是怎樣的,要注意哪些(比如多個請求session失效,請求佇列存盤)

3.Kotlin、Jetpack

4.vue知識

5.Okhttp里執行緒池的阻塞佇列和兩個佇列怎么配合使用的?

6.SharePreferences是執行緒安全的嗎,是行程安全的嗎,commit和apply的區別?

sp是執行緒安全的,谷歌使用3把鎖保證多執行緒下sp的寫操作安全;commit是在UI執行緒做提交,apply是在子執行緒中操作,設計apply的初衷是為了解決ANR,但也無法完全規避,當Activity.onStop()以及Service處理onStop等相關方法時,則會執行 QueuedWork.waitToFinish()等待所有的等待鎖釋放,因此如果SharedPreferences一直沒有完成更新任務,有可能會導致卡在主執行緒,最終超時導致ANR;sp沒有使用跨行程鎖,所以是行程不安全的,跨行程讀寫會有資料丟失的可能,我們可以使用檔案鎖,保證同一時刻只有一個行程在操作sp,也可以使用谷歌倡導的跨行程通信組件ContentProvider,其他行程通過定制ContentProvider,用于訪問sp,同樣也能保證sp的行程安全,同時sp在寫的時候也有檔案備份機制,能夠保證之前存盤的資料恢復,

滴滴

startActivity是同步還是異步,哪個執行緒給哪個執行緒發訊息?

Hander能發送同樣的訊息嗎

Postdelay 1秒和10秒,誰先執行

按執行時間插入排序,所以1秒的先執行,只是他只能保證1秒后執行,不能保證正好在1秒的時候執行,

Aidl是同步還是異步

類點class是什么型別的物件

在主執行緒做耗時操作會報什么例外

如果在主執行緒做網路請求,會拋NetWorkOnMainThreadException例外,如果做其他耗時操作比如遍歷大陣列,IO,會導致ANR,

物件鎖類鎖會不會互相影響

靜態變數是在什么時候被加載到記憶體的

Retroit livedata

Socket 和aidl差別

掌閱

有沒有遇到過https安全性問題

證書篡改、DNS劫持

美團

1.LeakCanary原理

它通過監控Activity的宣告周期,當activity呼叫onDestroy方法時,將activity物件包裝到弱參考中,如果該弱參考物件被回收,弱參考物件就會被放到ReferenceQueue佇列中,通過監控佇列里的內容就能檢查到Activity是否被真正回收,

2.OKHTTP相比HTTPURLConnection的優點是哪里

透明的gzip壓縮;各種攔截器;支持多種型別的資料快取;

3.TCP和UDP的區別

有沒有遇到過線上OOM的情況

一般批量圖片加載的時候,或者加載大圖時,容易OOM,線上遇到過表單泄漏、堆疊溢位的情況(遞回的結束條件沒處理好),執行緒池使用時有可能OOM,

插件化原理

一般實作方式有反射、hook等方案,插件化原理多用hook方案,比如hook主IActivityManager,先在清單檔案里占坑,再在合適時候將目標物件塞到啟動占坑頁面的Intent中,在將要啟動占坑頁面的時候再修改具體要跳轉的Activity,

火花思維

深拷貝、淺拷貝區別

參考拷貝:創建一個指向物件的參考變數的拷貝,它指向同一個物件,

物件拷貝:創建物件本身的一個副本,物件拷貝的方法,呼叫物件的clone方法,比如Student stu2 = stu1.clone();

深拷貝和淺拷貝都是物件拷貝,區別如下:

淺拷貝,拷貝原物件里的屬性,但如果屬性有物件屬性,那么只是拷貝物件屬性的參考;深拷貝的話,是拷貝原物件的所有,包括其屬性是物件型別的,也會clone新的地址,

什么是泛型,作用是什么?

泛型字面意思就是廣泛的型別,可以是介面、類、方法應用于非常廣泛的型別,它使代碼和他們操作的資料型別不再系結在一起,同一套代碼可以用于多種資料型別,降低耦合性、提高代碼復用性、安全性,

編譯的時候,編譯器會將泛型轉為非泛型的物件,將泛型擦除,替換為Object,插入必要的強制型別轉換,

什么是反射?

反射就是讓我們獲得一個類的所有資訊,

HashMap相關問題

1.HashMap的初始容量是怎么計算的?

通過位運算,將傳入的引數右移一位、兩位、四位、8位這樣,然后做異或,計算出第一個大于該引數的2的n次冪,HashMap初始容量是16,初始擴容因子是0.75,之所以用位運算,是因為其效率高,

2.hash函式是怎么計算的?

static final hash(Object key){
    int h ;
    return (key == null)? 0 : (h = key.hashCode()^(h >>> 16));
}

key.hashCode()回傳的是一個int型別,也即32位的數,然后將其右移16位后做異或(異或就是相同回傳0,不同回傳1),

hash函式計算出的結果值,再和(容量-1)做與運算,便得出下標索引,

3.put程序是怎樣的?

先獲取位置,然后獲取位置上的值,如果沒有則放置上,如果有,則遍歷節點,通過key判斷是否有和其相同key的Node,如果有直接覆寫,如果沒有,則采用頭插法,插入元素,

4.什么時候擴容,機制時怎么實作的?

HashMap容量達到容器長度*擴容因子時,就會擴容,原容量左移一位,也即是原容量的二倍;遍歷原陣列,其中每個item變成游離的狀態,重新計算各個元素下標,如果下標處沒有值,直接復制,如果有值,變成頭結點,之前的值變成子節點,

5.鏈表過長,每次遍歷這個鏈表,會影響性能嗎?

紅黑樹:能夠減小查找范圍,不用從頭到尾遍歷,紅黑樹是一個搜索樹,是一種接近平衡的二叉樹,

紅黑樹的特性:每個節點要么是黑色,要么是紅色;根節點是黑色;如果節點是紅色,那么它的子節點必須是黑色(反之不一定成立);從根節點到葉節點或者空子節點的每條路徑,都包含相同數目的黑色節點;

6.HashMap,執行緒不安全,可能出現兩種情況,一可能同一個位置的值被覆寫;二可能會在擴容的程序中拋例外;

Android中setOnTouchListener、onTouchEvent、setOnClickListener的呼叫順序?

setOnTouchListener ----> onTouchEvent ----> setOnClickListener,setOnTouchEvent的onTouch事件,回傳true表示不想下傳遞,就不進入到onTouchEvent中了,

onTouchEvent的回傳值,回傳true、false、super.onTouchEvent()的區別?

true,表示消費此次時間,false即不消費;super.onTouchEvent()即直接交由父view的onTouchEvent()方法,

LeakCanary原理

1.通過ActivityLifeCycleCallbacks監聽Activity的宣告周期,在其onDestroy被呼叫的時候,將Activity包裝成一個WeakReference物件,并在弱參考的構造方法里傳入一個ReferenceQueue,

2.同時這個弱引物件會標記一個亂數key,并將這個key存盤在強參考set集合里;

3.當系統gc的時候,會把被回收物件的弱參考都添加到ReferenceQueue中,主動觸發gc,遍歷佇列,將將佇列里的弱參考物件的key從Set集合里移出,遍歷完之后,仍然在Set集合里的key,對應的WeakReference所包含的物件就是記憶體泄漏的物件,

BlockCanary原理

如果主執行緒被卡住,則其實是在Looper的loop方法里的 msg.target.dispatchMessage(msg)耗時,我們可以記錄該方法執行前后的時間戳,得到差值再跟設定的閥值對比,大于閥值則dump出堆疊資訊,以及CPU資訊,

1.ContentProvider

它主要用來實作跨行程間資料共享,是一套安全的訪問機制,Android通過ContentProvider實作圖片、音頻、視頻資料共享,底層使用的是Binder機制,

1.Service

本地服務:指的是服務和啟動服務的activity在同一個行程中

遠程服務; 指的是服務和啟動服務的activity不在同一個行程中,

啟動本地服務用的是顯式啟動; 遠程服務的啟動要用到隱式啟動,

3.BroadCastReceiver

普通廣播:完全異步執行的廣播,當廣播發出后,幾乎所有廣播接收器都會在同一時間收到這條廣播,

有序廣播:是一種同步執行的廣播,廣播發出后,只會有一個廣播接收器能接收到廣播訊息,當這個廣播接收器接收到后,廣播才會繼承傳遞,對于有序廣播有了先后順序,在Android中提供了優先級的屬性(priority)來控制先后,有序廣播中可以截斷廣播,不被下一個廣播接收器接收,這是有序廣播的特點,

4.執行緒池的shutdown和shutDownNow區別

shutDown是將當前執行的執行緒狀態置為SHUTDOWN狀態,而且不再往執行緒池里添加任務,只在執行的任務執行完畢后才退出;shutDownNow是將當前執行執行緒狀態都置為STOP,并試圖停止執行緒執行,而且不再往執行緒池里添加任務,終止執行緒的辦法是通過呼叫Thread.interrupt()方法來實作的,但如果執行緒中沒有sleep、wait、Condition、定時鎖等,則無法回應中斷,所以仍然會執行下去,

阿里二面

1.final修飾的變數,如果是物件,物件里的屬性能修改嗎?

final修飾的變數,如果是基本資料型別,則初始化后不能再被修改,如果是參考型別,初始化后則不能再指向別的物件,但他指向的物件,其內部屬性是可以更改的,

2.重寫equal和hashCode需要注意什么?

==比較的是兩個參考的指標地址是否相等;equal方法則比較的是兩個物件的內容是否相等,不過Object的equal方法也是==判斷,比的是地址,

如果只重寫equal不重寫hashCode,則在一些集合容器里,相同的物件會散列到不同的位置,導致相同物件不能覆寫的問題,

小米

1.自己對自己的定位評價、能給團隊帶來什么?

2.WebView + Recycler這種如何實作?

3.A (standard)、B(standard)、C(singleTask) D(singleInstance)、B、C,頁面銷毀的先后順序

C銷毀后,同堆疊里的A銷毀,然后才是單獨堆疊里的D銷毀

4.一個大檔案里有很多很多個數,沒法一直讀取到記憶體,請找出最大的數?

5.強、軟、弱、虛的作用

強參考,只要物件和參考直接沒有切斷聯系(沒有置null),即便記憶體不足,也不會被回收,會拋OOM;

軟參考,只有記憶體不足的時候才會被GC回收,常用來實作快取技術,圖片快取、瀏覽器快取等;

弱參考,GC時被回收,可以用來監控物件是否被回收;虛參考,隨時可能被回收,主要用于監控物件是否從記憶體中洗掉,

6.ConcurrentHashMap 1.7和1.8的改動,為什么要這么改?

7.Handler機制里,入佇列不俺順序可以不?

百度

1.MVC,MVP、MVVM區別

MVC:View觸發事件,傳遞到Controller層,Controller層完成業務邏輯后,呼叫Model層更改狀態,Model處理完后將資料傳遞給View,View更新,所有的通信都是單向的,

MVP:以P層為核心,從Model中取資料,并通過介面回呼的形式填充到View中,Model和View不再有聯系,P分別于View和Model保持雙向通信,

MVVM:它與MVP類似,V層和Model層不互相通信,ViewModel層取代了Presenter層,不同點是View和ViewModel采用雙向系結,View的變動自動反應在ViewModel上,

2.Retrofit的使用

3.RxJava

RxJava把復雜的邏輯串成一條線,很簡潔的實作異步操作,RxJava的觀察者模式,Observable是被觀察者,Observer是觀察者,通過subscribe()方法實作訂閱關系,類比Android中的點擊事件也是觀察者模式,View是被觀察者,OnClickListener是觀察者,setOnClickListener來實作訂閱,也就是被觀察者持有觀察者的參考,當被觀察者的某種狀態改變時,呼叫觀察者的回呼方法做通知,RxJava與之不同的是,他不但有onNext()方法,還有onComplete()和onError()方法來處理事件佇列是否正常執行,后兩個方法是互斥執行的,

RxJava默認的規則中,事件的發送和處理都是在同一個執行緒中,但觀察者模式本身的目的就是”后臺處理,前臺回呼“的異步機制,RxJava實作異步的另外一個概念是Scheduler,

  • Schedulers.immediate(): 直接在當前執行緒運行,相當于不指定執行緒,這是默認的 Scheduler
  • Schedulers.newThread(): 總是啟用新執行緒,并在新執行緒執行操作,
  • Schedulers.io(): I/O 操作(讀寫檔案、讀寫資料庫、網路資訊互動等)所使用的 Scheduler,行為模式和 newThread() 差不多,區別在于 io() 的內部實作是是用一個無數量上限的執行緒池,可以重用空閑的執行緒,因此多數情況下 io()newThread() 更有效率,不要把計算作業放在 io() 中,可以避免創建不必要的執行緒,

map()方法是一對一的物件轉換,flatMap()是一對多的轉換,

小米二面

1.EventBus的優點是什么,為什么不用廣播,EventBus怎么實作切執行緒?

2.靜態廣播和動態廣播的注冊時機分別是什么時候?

3.EventBus使用反射影響效率,這個問題有沒有得到解決?

4.如何實作字母索引,繼承View可以實作嗎?

5.Sysnchronized與ReentrantLock實作原理有何不同?

6.volatile是執行緒安全的嗎?

7.startActivity的時候有哪個類加載器去加載?

PathClassLoader

8.APP啟動時發生的事情?

1.先去從zygote行程fork一個行程,

2.fork行程后,會呼叫ActivityThread的main()方法,new出一個ActivityThread物件,并且會把它與Application做關聯,即attach()方法;

3.attach會引發一些列的事件,這個程序會先后創建ClassLoader、appContext和Application,把Application和ActivityThread關聯到一起;

4.呼叫Instrumentation的callApplicationOnCreate(app)觸發Application的onCreate方法;

9.Synchronized和lock的底層實作原理

Synchronized是JVM層面的鎖,映射到位元組碼指令時,會產生兩個指令,monitorEnter、monitorExit,當執行緒遇到monitorEnter的時候就會嘗試獲取鎖,monitorExit釋放鎖,Synchronized是悲觀鎖,而Lock底層是CAS和Volatile來實作,競爭激烈的環境下用lock鎖,競爭不激烈建議用Synchronized,因為Synchronized鎖不可降級,經歷一個短暫的高峰之后,synchronized所有的鎖都會成為重量級鎖,這個時候效率就會降低,

瓜子

1.組件間如何通信,大檔案如何共享讀寫

2.通過腳本轉換格式

3.介紹一次網路通信程序,以及可能遇到的問題

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/229899.html

標籤:其他

上一篇:oc和swift UIView類擴展畫虛線外邊框

下一篇:使用Android Studio 創建第一個Flutter程式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more