Android史上最全面試題(持續(xù)更新ing)

前言

博主Android開發(fā)三年了!不論是大公司(百度抖锥、美團亿眠、網(wǎng)易),還是小公司的面試都經(jīng)歷過磅废。這篇面試題是我積累了好幾年的心血纳像,之前都是在有道云筆記、印象筆記中拯勉,通過自己一次次的面試竟趾,每次都會把面試官問的問題自己回來記錄好,做好總結(jié)宫峦。直到現(xiàn)在岔帽,我選擇發(fā)出來,是因為我覺得我已經(jīng)積累的差不多了导绷,這些面試題差不多能應(yīng)對一場面試了犀勒。

聊聊面試這件事。面試,我認為不光是考察技術(shù)(當(dāng)然技術(shù)是必不可少的)贾费,有時候天時地利人和到了钦购,你技術(shù)可能一般,也就通過面試了褂萧,面試官看你看對眼了的話押桃,再加上今天面試官可能表白成功,你可能就是走了狗屎運了[偷笑]导犹。當(dāng)然唱凯,我只是舉個例子而已,只是想闡述面試考的不止是技術(shù)谎痢,也是有運氣成分的磕昼。所以,如果你面試很多次都沒有offer的話舶得,不要灰心,不要氣餒爽蝴,總有個坑會要你這根蘿卜的沐批,這就好比是相親,相了好多次蝎亚,都沒有看上你的話九孩,不要灰心,不要氣餒发框,總有個瞎了狗眼的會看上你躺彬。

我把面試的問題分為java基礎(chǔ)、Android知識點梅惯、數(shù)據(jù)結(jié)構(gòu)與算法宪拥、項目相關(guān)的問題四部分。

java基礎(chǔ)這部分很重要铣减,這個看你基本功她君,去大公司面試比較注重基礎(chǔ),所以這部分會問的比較多葫哗,jvm問的挺多缔刹,線程池這塊也是重點,還有劣针,大公司面試還會問你并發(fā)這塊的知識點校镐,比如鎖機制,一些volatile捺典、synchronized關(guān)鍵字用來做什么的鸟廓,內(nèi)部實現(xiàn)原理等問題。

Android知識點,這塊自然不用多說肝箱,肯定是面試的重災(zāi)區(qū)哄褒。去大公司面試都都喜歡問你源碼、內(nèi)部實現(xiàn)煌张,這樣的問題呐赡。所以,handler骏融,asynctask這樣常用的API內(nèi)部原理必須會链嘀,面試官還經(jīng)常問你看過哪些開源框架的源碼,所以你得熟悉幾個開源框架的內(nèi)部實現(xiàn)档玻,比如volley怀泊、retrofit、OkHttp误趴、butterknife枣申、glide楼雹。Android還是要做多項目積累經(jīng)驗。

數(shù)據(jù)結(jié)構(gòu)與算法這部分是我的弱項,多扯兩句,這部分是去大公司面試的必問問題,博主去美團答恶、百度面試都讓算法給刷掉了包竹,所以這塊很重要饵蒂,要想進大公司算法是繞不過去的渊迁,雖然Android一般用不到太多膏萧、太復(fù)雜的算法。我在面試題中,關(guān)于算法這塊我也寫了幾個,比如排序,二分查找,面試小公司饲窿,可能會讓你寫個什么冒泡排序,快排辽故,二分查找喂走,但是進大公司面試,面試官根本不問這些最普通的面試問題睡汹,他們都會自己給你出一個題,讓你寫出最優(yōu)算法寂殉,平時多看看《劍指offer》囚巴、刷LeetCode。算法也是我的弱項友扰,我就不在這里侃了彤叉。數(shù)據(jù)結(jié)構(gòu),也是很重要的村怪!常用的數(shù)據(jù)結(jié)構(gòu)(ArrayList秽浇、LinkedList、HashMap)內(nèi)部實現(xiàn)都得知道实愚,能跟面試官侃侃而談兼呵,還有延伸的一些數(shù)據(jù)結(jié)構(gòu)你也得有所了解兔辅,比如問到HashMap都知道他不是線程安全的,那線程安全的ConcurrentHashMap击喂,你知道內(nèi)部的機制维苔,他是怎么來保證線程安全的前提下,最大的提高讀寫效率的呢懂昂?還有Android特有的數(shù)據(jù)結(jié)構(gòu)SparseArray等一些原理介时。了解數(shù)據(jù)結(jié)構(gòu)內(nèi)部實現(xiàn)其實挺好的,對編碼有幫助凌彬。

項目相關(guān)的問題沸柔,這部分基本都是在二面、三面上吧(終于過了一年了)铲敛,這塊你就跟面試官聊聊你做的項目褐澎,用到了什么技術(shù),怎么來解決問題啥的伐蒋,這個針對自己項目來說就行工三,就不多說了。

面試要點寫完了先鱼,來一句感受:面試搬大象俭正,干活擰螺絲!

今天臨時想到的基本都是這些焙畔,最后奉獻上我積累幾年的面試題[無私]掸读,祝愿各位都能拿到不錯的offer。

Java

1. jvm垃圾回收機制

2. hashCode()和equals()

Java hashCode() 和 equals()的若干問題解答

3. java內(nèi)存管理

Java進階10 內(nèi)存管理與垃圾回收

java內(nèi)存優(yōu)化
  • 釋放連接
  • 優(yōu)化邏輯,釋放不必要的對象 盡量使用局部變量
  • 減少循環(huán)邏輯里的對象的創(chuàng)建
  • 基本類型代替對象類型
  • 使用stringBuffer和stringBuilder替代多次String對象
  • 單線程盡量使用hashmap和ArrayList
  • 提前分配stringBuffer宏多,數(shù)組儿惫,array,vector等容量
  • 合適的場所使用單例
  • 盡量不要隨意使用靜態(tài)變量
  • 處理內(nèi)存泄露

4.線程池

線程池绷落,這一篇或許就夠了

5. 進程和線程的關(guān)系

6. Thread和Runnable的區(qū)別

java線程(上)Thread和Runnable的區(qū)別

7. 死鎖

java 死鎖及解決
【Java并發(fā)編程】之九:死鎖(含代碼)

8. 單例

JAVA設(shè)計模式之單例模式

9. 強引用 軟引用 弱引用 虛引用

Java 7之基礎(chǔ) - 強引用姥闪、弱引用始苇、軟引用砌烁、虛引用

10. http

Android之Http通信——1.初識Http協(xié)議
Android Http請求頭與響應(yīng)頭的學(xué)習(xí)

11. 接口和抽象類的區(qū)別

  • 接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法催式。
  • 類可以實現(xiàn)很多個接口函喉,但是只能繼承一個抽象類
  • 類如果要實現(xiàn)一個接口,它必須要實現(xiàn)接口聲明的所有方法荣月。但是管呵,類可以不實現(xiàn)抽象類聲明的所有方法,當(dāng)然哺窄,在這種情況下捐下,類也必須得聲明成是抽象的账锹。
  • 抽象類可以在不提供接口方法實現(xiàn)的情況下實現(xiàn)接口。
  • Java接口中聲明的變量默認都是final的坷襟。抽象類可以包含非final的變量奸柬。
  • Java接口中的成員函數(shù)默認是public的。抽象類的成員函數(shù)可以是private婴程,protected或者是public廓奕。
  • 接口是絕對抽象的,不可以被實例化档叔。抽象類也不可以被實例化桌粉,但是,如果它包含main方法的話是可以被調(diào)用的衙四。

12.字符串

Java中的字符串常量池
Java細節(jié):字符串的拼接

13. java并發(fā)

Android

Android基礎(chǔ)知識

1. Android生命周期

2. Android啟動模式

3. Service

Android Service完全解析铃肯,關(guān)于服務(wù)你所需知道的一切

Service兩種啟動方式的區(qū)別

Android 服務(wù)兩種啟動方式的區(qū)別

如何讓一個Service一直保持存活?

IntentService的特點
  • 它創(chuàng)建了一個獨立的工作線程來處理所有的通過onStartCommand()傳遞給服務(wù)的intents。
  • 創(chuàng)建了一個工作隊列传蹈,來逐個發(fā)送intent給onHandleIntent()缘薛。
  • 不需要主動調(diào)用stopSelft()來結(jié)束服務(wù)。因為卡睦,在所有的intent被處理完后宴胧,系統(tǒng)會自動關(guān)閉服務(wù)。
  • 默認實現(xiàn)的onBind()返回null
  • 默認實現(xiàn)的onStartCommand()的目的是將intent插入到工作隊列中

4. 自定義view

Android LayoutInflater原理分析表锻,帶你一步步深入了解View
Android View 四個構(gòu)造函數(shù)詳解

5.DiskLruCache LruCache

Android DiskLruCache完全解析恕齐,硬盤緩存的最佳方案

6.Touch事件傳遞機制

Android Touch事件傳遞機制通俗講解

  1. Touch事件分發(fā)中只有兩個主角:ViewGroup和View。ViewGroup包含onInterceptTouchEvent瞬逊、dispatchTouchEvent显歧、onTouchEvent三個相關(guān)事件。View包含dispatchTouchEvent确镊、onTouchEvent兩個相關(guān)事件士骤。其中ViewGroup又繼承于View。
  2. ViewGroup和View組成了一個樹狀結(jié)構(gòu)蕾域,根節(jié)點為Activity內(nèi)部包含的一個ViwGroup拷肌。
  3. 觸摸事件由Action_Down、Action_Move旨巷、Aciton_UP組成巨缘,其中一次完整的觸摸事件中,Down和Up都只有一個采呐,Move有若干個若锁,可以為0個。
  4. 當(dāng)Acitivty接收到Touch事件時斧吐,將遍歷子View進行Down事件的分發(fā)又固。ViewGroup的遍歷可以看成是遞歸的仲器。分發(fā)的目的是為了找到真正要處理本次完整觸摸事件的View,這個View會在onTouchEvent結(jié)果返回true仰冠。
  5. 當(dāng)某個子View返回true時娄周,會中止Down事件的分發(fā),同時在ViewGroup中記錄該子View沪停。接下去的Move和Up事件將由該子View直接進行處理煤辨。由于子View是保存在ViewGroup中的,多層ViewGroup的節(jié)點結(jié)構(gòu)時木张,上級ViewGroup保存的會是真實處理事件的View所在的ViewGroup對象:如ViewGroup0-ViewGroup1-TextView的結(jié)構(gòu)中众辨,TextView返回了true,它將被保存在ViewGroup1中舷礼,而ViewGroup1也會返回true鹃彻,被保存在ViewGroup0中。當(dāng)Move和UP事件來時妻献,會先從ViewGroup0傳遞至ViewGroup1蛛株,再由ViewGroup1傳遞至TextView。
  6. 當(dāng)ViewGroup中所有子View都不捕獲Down事件時育拨,將觸發(fā)ViewGroup自身的onTouch事件谨履。觸發(fā)的方式是調(diào)用super.dispatchTouchEvent函數(shù),即父類View的dispatchTouchEvent方法熬丧。在所有子View都不處理的情況下笋粟,觸發(fā)Acitivity的onTouchEvent方法。
  7. onInterceptTouchEvent有兩個作用:1.攔截Down事件的分發(fā)析蝴。2.中止Up和Move事件向目標View傳遞害捕,使得目標View所在的ViewGroup捕獲Up和Move事件。
dispatchTouchEvent源碼分析總結(jié)
  1. 觸摸控件(View)首先執(zhí)行dispatchTouchEvent方法闷畸。
    在dispatchTouchEvent方法中先執(zhí)行onTouch方法尝盼,后執(zhí)行onClick方法(onClick方法在onTouchEvent中執(zhí)行,下面會分析)佑菩。
  2. 如果控件(View)的onTouch返回false或者mOnTouchListener為null(控件沒有設(shè)置setOnTouchListener方法)或者控件不是enable的情況下會調(diào)運onTouchEvent盾沫,dispatchTouchEvent返回值與onTouchEvent返回一樣。
  3. 如果控件不是enable的設(shè)置了onTouch方法也不會執(zhí)行倘待,只能通過重寫控件的onTouchEvent方法處理(上面已經(jīng)處理分析了)疮跑,dispatchTouchEvent返回值與onTouchEvent返回一樣组贺。
  4. 如果控件(View)是enable且onTouch返回true情況下凸舵,dispatchTouchEvent直接返回true,不會調(diào)用onTouchEvent方法失尖。

7.動畫

Android屬性動畫完全解析啊奄,初識屬性動畫的基本用法

8.View的繪制流程

從ViewRoot的performTraversals()方法開始依次調(diào)用perfromMeasure渐苏、performLayout和performDraw這三個方法。這三個方法分別完成頂級View的measure菇夸、layout和draw三大流程琼富,其中perfromMeasure會調(diào)用measure,measure又會調(diào)用onMeasure庄新,在onMeasure方法中則會對所有子元素進行measure鞠眉,這個時候measure流程就從父容器傳遞到子元素中了,這樣就完成了一次measure過程择诈,接著子元素會重復(fù)父容器的measure械蹋,如此反復(fù)就完成了整個View樹的遍歷.

同理,performLayout和performDraw也分別完成perfromMeasure類似的流程羞芍。通過這三大流程哗戈,分別遍歷整棵View樹,就實現(xiàn)了Measure荷科,Layout唯咬,Draw這一過程,View就繪制出來了畏浆。

9.Android性能優(yōu)化

  • 布局優(yōu)化:盡量減少布局文件的層級胆胰,刪除布局中無用的控件和層級。<merge> <incude> <ViewStub>提供按需加載的功能
  • 繪制優(yōu)化:onDraw()方法中不要創(chuàng)建新的局部對象刻获,不要做耗時的任務(wù) GPU過度繪制 HierarchyView來檢測 開發(fā)者選項 顯示開發(fā)者過度繪制選項
  • 內(nèi)存泄露優(yōu)化:context煮剧、handler、bitmap将鸵、單例模式勉盅、內(nèi)部類、靜態(tài)變量顶掉、資源對象沒有關(guān)閉
  • 響應(yīng)速度優(yōu)化和ANR日志分析:避免在主線程中做耗時操作草娜,系統(tǒng)會在/data/anr目錄下創(chuàng)建一個文件traces.txt
  • 避免創(chuàng)建過多的對象
  • 不要過多使用枚舉芝薇,枚舉占用的內(nèi)存空間要比整型大
  • 常量請使用static final 來修飾
  • 使用一些Android特有的數(shù)據(jù)結(jié)構(gòu)田度,比如SparseArray和Pair等兑凿,他們都具有更好的性能
  • 適當(dāng)使用軟引用和弱引用
  • 采用內(nèi)存緩存和磁盤緩存
  • 盡量采用靜態(tài)內(nèi)部類雄妥,這樣可以避免潛在的由于內(nèi)部類而導(dǎo)致的內(nèi)存泄露
  • Android的性能優(yōu)化
  • Android應(yīng)用開發(fā)性能優(yōu)化完全分析

10.MVP模式

淺談 MVP in Android

11.橫豎屏切換,Android生命周期的變化

  • 不設(shè)置Activity的android:configChanges時围俘,切屏?xí)匦抡{(diào)用各個生命周期铅碍,切橫屏?xí)r會執(zhí)行一次傻谁,切豎屏?xí)r會執(zhí)行兩次
  • 設(shè)置Activity的android:configChanges="orientation"時书劝,切屏還是會重新調(diào)用各個生命周期老充,切橫葡盗、豎屏?xí)r只會執(zhí)行一次
  • 設(shè)置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調(diào)用各個生命周期啡浊,只會執(zhí)行onConfigurationChanged方法

11.WebView

WebView性能觅够、體驗分析與優(yōu)化
Android中Java和JavaScript交互

12. Android中出現(xiàn)65536的限制的原因以及解決辦法

Android dex 65536 的原因 以及解決辦法

13. Android Lint的工作機制原理

Android Lint工作原理剖析

14. Android中的Dalvik VM ART JVM 的區(qū)別

Android 中的Dalvik和ART是什么胶背,有啥區(qū)別?
Dalvik 虛擬機和 Sun JVM 在架構(gòu)和執(zhí)行方面有什么本質(zhì)區(qū)別喘先?

15.Android內(nèi)存泄露問題

避免Android中Context引起的內(nèi)存泄露
譯文:Android中糟糕的AsyncTask
Android中Handler引起的內(nèi)存泄露
Android內(nèi)存泄漏總結(jié)

16. RecyclerView和ListView的區(qū)別

17.compileSdkVersion, minSdkVersion 和 targetSdkVersion區(qū)別

如何選擇 compileSdkVersion, minSdkVersion 和 targetSdkVersion

18. RelativeLayout和LinearLayout性能分析

Android中RelativeLayout和LinearLayout性能分析

  • RelativeLayout會讓子View調(diào)用2次onMeasure钳吟,LinearLayout 在有weight時,也會調(diào)用子View2次onMeasure
  • RelativeLayout的子View如果高度和RelativeLayout不同窘拯,則會引發(fā)效率問題红且,當(dāng)子View很復(fù)雜時,這個問題會更加嚴重涤姊。如果可以直焙,盡量使用padding代替margin。
  • 在不影響層級深度的情況下,使用LinearLayout和FrameLayout而不是RelativeLayout砂轻。
  • 為什么Google給開發(fā)者默認新建了個RelativeLayout奔誓,而自己卻在DecorView中用了個LinearLayout。因為DecorView的層級深度是已知而且固定的搔涝,上面一個標題欄厨喂,下面一個內(nèi)容欄。采用RelativeLayout并不會降低層級深度庄呈,所以此時在根節(jié)點上用LinearLayout是效率最高的蜕煌。而之所以給開發(fā)者默認新建了個RelativeLayout是希望開發(fā)者能采用盡量少的View層級來表達布局以實現(xiàn)性能最優(yōu),因為復(fù)雜的View嵌套對性能的影響會更大一些诬留。

19. 圖片處理

Android高效加載大圖斜纪、多圖解決方案,有效避免程序OOM

20. 屏幕適配問題

21. 多進程的知識

Android API源碼和第三方框架源碼

1. AsyncTask

Android AsyncTask 源碼解析

  1. 設(shè)置當(dāng)前AsyncTask的狀態(tài)為RUNNING文兑,上面的switch也可以看出盒刚,每個異步任務(wù)在完成前只能執(zhí)行一次。
  2. 執(zhí)行了onPreExecute()绿贞,當(dāng)前依然在UI線程因块,所以我們可以在其中做一些準備工作。
  3. 將我們傳入的參數(shù)賦值給了mWorker.mParams ,mWorker為一個Callable的子類籍铁,且在內(nèi)部的call()方法中涡上,調(diào)用了doInBackground(mParams),然后得到的返回值作為postResult的參數(shù)進行執(zhí)行拒名;postResult中通過sHandler發(fā)送消息吩愧,最終sHandler的handleMessage中完成onPostExecute的調(diào)用。
  4. exec.execute(mFuture)增显,mFuture為真正的執(zhí)行任務(wù)的單元雁佳,將mWorker進行封裝,然后由sDefaultExecutor交給線程池進行執(zhí)行。

如果現(xiàn)在大家去面試甘穿,被問到AsyncTask的缺陷腮恩,可以分為兩個部分說梢杭,在3.0以前温兼,最大支持128個線程的并發(fā),10個任務(wù)的等待武契。在3.0以后募判,無論有多少任務(wù),都會在其內(nèi)部單線程執(zhí)行咒唆;

2. Handler

Android 異步消息處理機制 讓你深入理解 Looper届垫、Handler、Message三者關(guān)系

  1. 首先Looper.prepare()在本線程中保存一個Looper實例全释,然后該實例中保存一個MessageQueue對象装处;因為Looper.prepare()在一個線程中只能調(diào)用一次,所以MessageQueue在一個線程中只會存在一個浸船。
  2. Looper.loop()會讓當(dāng)前線程進入一個無限循環(huán)妄迁,不端從MessageQueue的實例中讀取消息,然后回msg.target.dispatchMessage(msg)方法李命。
  3. Handler的構(gòu)造方法登淘,會首先得到當(dāng)前線程中保存的Looper實例,進而與Looper實例中的MessageQueue想關(guān)聯(lián)封字。
  4. Handler的sendMessage方法黔州,會給msg的target賦值為handler自身,然后加入MessageQueue中阔籽。
  5. 在構(gòu)造Handler實例時流妻,我們會重寫handleMessage方法,也就是msg.target.dispatchMessage(msg)最終調(diào)用的方法笆制。

好了合冀,總結(jié)完成,大家可能還會問项贺,那么在Activity中君躺,我們并沒有顯示的調(diào)用Looper.prepare()和Looper.loop()方法,為啥Handler可以成功創(chuàng)建呢开缎,這是因為在Activity的啟動代碼中棕叫,已經(jīng)在當(dāng)前UI線程調(diào)用了Looper.prepare()和Looper.loop()方法。

3.Retrofit

Android:手把手帶你深入剖析 Retrofit 2.0 源碼

Retrofit分析-漂亮的解耦套路

4. Glide

Android圖片加載框架最全解析奕删,Glide的基本用法

5.OkHttp

拆輪子系列:拆 OkHttp

6.HandlerThread

Android HandlerThread 源碼分析

7. IntentService

Android IntentService完全解析 當(dāng)Service遇到Handler

8. leakcanary

LeakCanary 工作原理淺析

9. Volley

  1. 當(dāng)一個RequestQueue被成功申請后會開啟一個CacheDispatcher和4個默認的NetworkDispatcher俺泣。
  2. CacheDispatcher緩存調(diào)度器最為第一層緩沖,開始工作后阻塞的從緩存序列mCacheQueue中取得請求;對于已經(jīng)取消的請求伏钠,標記為跳過并結(jié)束這個請求横漏;新的或者過期的請求,直接放入mNetworkQueue中由N個NetworkDispatcher進行處理熟掂;已獲得緩存信息(網(wǎng)絡(luò)應(yīng)答)卻沒有過期的請求缎浇,由Request的parseNetworkResponse進行解析,從而確定此應(yīng)答是否成功赴肚。然后將請求和應(yīng)答交由Delivery分發(fā)者進行處理素跺,如果需要更新緩存那么該請求還會被放入mNetworkQueue中。
  3. 將請求Request add到RequestQueue后對于不需要緩存的請求(需要額外設(shè)置誉券,默認是需要緩存)直接丟入mNetworkQueue交給N個NetworkDispatcher處理指厌;對于需要緩存的,新的請求加到mCacheQueue中給CacheDispatcher處理踊跟;需要緩存踩验,但是緩存列表中已經(jīng)存在了相同URL的請求,放在mWaitingQueue中做暫時處理商玫,等待之前請求完畢后箕憾,再重新添加到mCacheQueue中。
  4. 網(wǎng)絡(luò)請求調(diào)度器NetworkDispatcher作為網(wǎng)絡(luò)請求真實發(fā)生的地方决帖,對消息交給BasicNetwork進行處理厕九,同樣的,請求和結(jié)果都交由Delivery分發(fā)者進行處理地回。
  5. Delivery分發(fā)者實際上已經(jīng)是對網(wǎng)絡(luò)請求處理的最后一層了扁远,在Delivery對請求處理之前,Request已經(jīng)對網(wǎng)絡(luò)應(yīng)答進行過解析刻像,此時應(yīng)答成功與否已經(jīng)設(shè)定畅买;而后Delivery根據(jù)請求所獲得的應(yīng)答情況做不同處理;若應(yīng)答成功细睡,則觸發(fā)deliverResponse方法谷羞,最終會觸發(fā)開發(fā)者為Request設(shè)定的Listener;若應(yīng)答失敗溜徙,則觸發(fā)deliverError方法湃缎,最終會觸發(fā)開發(fā)者為Request設(shè)定的ErrorListener;處理完后蠢壹,一個Request的生命周期就結(jié)束了嗓违,Delivery會調(diào)用Request的finish操作,將其從mRequestQueue中移除图贸,與此同時蹂季,如果等待列表中存在相同URL的請求冕广,則會將剩余的層級請求全部丟入mCacheQueue交由CacheDispatcher進行處理。

數(shù)據(jù)結(jié)構(gòu)與算法

1. 算法實現(xiàn)統(tǒng)計出Activity中的view樹的深度

2. HashMap

Java集合---HashMap源碼剖析

3. LinkedList

Java集合---LinkedList源碼解析

4. ArrayList

Java集合---ArrayList的實現(xiàn)原理

5.ConcurrentHashMap

Java并發(fā)編程:并發(fā)容器之ConcurrentHashMap(轉(zhuǎn)載)

6.List Map Set的區(qū)別

淺談Java中的Set偿洁、List撒汉、Map的區(qū)別

7. 快速排序

圖解快速排序

8. 二分查找

二分查找算法(遞歸與非遞歸兩種方式)

9.數(shù)組去重

Java實現(xiàn)數(shù)組去重、排序操作

其他問題

1. 工作中遇到一次最大困難時什么 你最后是怎么解決的 如果讓你再來一次你是否能夠解決的更好

2. 職業(yè)規(guī)劃

3. HTTP和HTTPS的區(qū)別

  • HTTP協(xié)議使用默認80端口涕滋,HTTPS協(xié)議使用443端口
  • HTTPS協(xié)議需要到CA申請證書睬辐,一般免費的證書較少,需要交費
  • HTTP信息是明文傳輸何吝,HTTPS使用具有安全性的SSL加密傳輸信息

4. http1和http2的區(qū)別

  • http2可以同時發(fā)多個請求
  • http2會壓縮,體積小
  • http2服務(wù)器會推送

3. 加密算法有哪些溉委?對稱加密和非對稱加密的區(qū)別鹃唯?

MD5爱榕,SHA1,Base64坡慌,RSA黔酥,AES,DES

非對稱密鑰加密的使用過程:
  1. A要向B發(fā)送信息洪橘,A和B都要產(chǎn)生一對用于加密和解密的公鑰和私鑰跪者。
  2. A的私鑰保密,A的公鑰告訴B熄求;B的私鑰保密渣玲,B的公鑰告訴A。
  3. A要給B發(fā)送信息時弟晚,A用B的公鑰加密信息忘衍,因為A知道B的公鑰。
  4. A將這個消息發(fā)給B(已經(jīng)用B的公鑰加密消息)卿城。
  5. B收到這個消息后枚钓,B用自己的私鑰解密A的消息,其他所有收到這個報文的人都無法解密瑟押,因為只有B才有B的私鑰搀捷。
  6. 反過來,B向A發(fā)送消息也是一樣多望。
對稱加密和非對稱加密的區(qū)別
  1. 對稱加密加密與解密使用的是同樣的密鑰嫩舟,所以速度快,但由于需要將密鑰在網(wǎng)絡(luò)傳輸怀偷,所以安全性不高家厌。
  2. 非對稱加密使用了一對密鑰,公鑰與私鑰枢纠,所以安全性高像街,但加密與解密速度慢黎棠。
  3. 解決的辦法是將對稱加密的密鑰使用非對稱加密的公鑰進行加密,然后發(fā)送出去镰绎,接收方使用私鑰進行解密得到對稱加密的密鑰脓斩,然后雙方可以使用對稱加密來進行溝通。

面經(jīng)

一年Android工作經(jīng)驗畴栖,一舉拿下百度随静、網(wǎng)易、美團吗讶、小米燎猛、快手等Offer面經(jīng)

2017年4月x團面試總結(jié)[新]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市照皆,隨后出現(xiàn)的幾起案子重绷,更是在濱河造成了極大的恐慌,老刑警劉巖膜毁,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昭卓,死亡現(xiàn)場離奇詭異,居然都是意外死亡瘟滨,警方通過查閱死者的電腦和手機候醒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杂瘸,“玉大人倒淫,你說我怎么就攤上這事“苡瘢” “怎么了敌土?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绒怨。 經(jīng)常有香客問我纯赎,道長,這世上最難降的妖魔是什么南蹂? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任犬金,我火速辦了婚禮,結(jié)果婚禮上六剥,老公的妹妹穿的比我還像新娘晚顷。我一直安慰自己,他們只是感情好疗疟,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布该默。 她就那樣靜靜地躺著,像睡著了一般策彤。 火紅的嫁衣襯著肌膚如雪栓袖。 梳的紋絲不亂的頭發(fā)上匣摘,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音裹刮,去河邊找鬼音榜。 笑死,一個胖子當(dāng)著我的面吹牛捧弃,可吹牛的內(nèi)容都是我干的赠叼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼违霞,長吁一口氣:“原來是場噩夢啊……” “哼嘴办!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起买鸽,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涧郊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后癞谒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體底燎,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡刃榨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年弹砚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢希。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡桌吃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苞轿,到底是詐尸還是另有隱情茅诱,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布搬卒,位于F島的核電站瑟俭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏契邀。R本人自食惡果不足惜摆寄,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坯门。 院中可真熱鬧微饥,春花似錦、人聲如沸古戴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽现恼。三九已至肃续,卻和暖如春黍檩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背始锚。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工建炫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疼蛾。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓肛跌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親察郁。 傳聞我的和親對象是個殘疾皇子衍慎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,264評論 25 707
  • Java中的String類可以被繼承么? 答:不能皮钠,因為它是一個final類稳捆,同樣的還有Integer,F(xiàn)loat...
    gyymz1993閱讀 3,996評論 2 104
  • 一只蚊子吻吻我的胳膊 胳膊便羞紅了臉頰 深夜里 這只蚊子便是我的摯友 它喝的我的血 那是一汪清泉 深夜仿佛一汪清泉...
    盧城閱讀 413評論 0 1
  • 1 實話說之前一直不是太關(guān)注排球末荐。今天剛巧到酒店打開電視就看到直播了。 對排球的了解還停留在我初中體育老師給我傳遞...
    馬生角陳賓利閱讀 317評論 0 1
  • 如題新锈,我想任性的放肆一回甲脏,不計后果,不計付出和回報妹笆,放肆的想做自己喜歡的事情块请,都世界各地旅游看風(fēng)景…… 我曾放...
    輕舞飛飛揚閱讀 439評論 0 0