金三銀四,衝擊大廠,你值得擁有的一份2019初中級Android開發社招面試總結+解答

Focusing發表於2019-03-08

引言

2017年初Android市場飽和的傳言一度甚囂塵上。2018年經濟寒潮下,眾多大廠和曾經風口上的網際網路企業也不得不裁員自保,通過小程式、前端渲染以達到原生的實現。

面對外界的紛繁複雜和技術棧的日新月異,我們更應該清楚認識到自身技術的短板來進行知識鞏固。目前移動端Android初中級人才大量湧入,正所謂僧多粥少,但樓主始終認為 苦心人,天不負,只要自身有過硬的知識廣度和深度儲備,在寒冬之下,同樣也能站穩腳跟。

樓主年前走了一波社招試試水,一番廝殺後最終拿到多家offer,回味之餘,不得不感嘆現在的985、211出身的技術人才真的強(樓主只是普通本科),為了踐行社會主義核心價值觀,於是總結自己的面試經歷,結合參考其他社招面試總結整理出這一份面試解答,承蒙大家不棄,文中知識點如有描述錯誤,還望提出探討糾正。

再此感謝以下博主,文章部分知識點有引用,他們的文章使我得到很多啟發

郭霖 鴻洋 任玉剛 Android開發官方文件 Carson_Ho

注:答案在最下面,因為實際開發與參考答案會有所不同,再者怕誤導大家的理解,所以這些面試題答案還是自己去理解!面試官會針對簡歷中提到的知識點由淺入深提問,所以不要背答案,多理解。

金三銀四,衝擊大廠,你值得擁有的一份2019初中級Android開發社招面試總結+解答

Android篇

Activity

  • 說下Activity生命週期 ?
  • Activity A 啟動另一個Activity B 會呼叫哪些方法?如果B是透明主題的又或則是個DialogActivity呢 ?
  • 說下onSaveInstanceState()方法的作用 ? 何時會被呼叫?
  • 說下 Activity的四種啟動模式、應用場景 ?
  • 瞭解哪些Activity常用的標記位Flags?
  • 說下 Activity跟window,view之間的關係?
  • 橫豎屏切換的Activity生命週期變化?
  • 如何啟動其他應用的Activity?
  • Activity的啟動過程?(重點)

Fragment

  • 談一談Fragment的生命週期 ?與Activity生命週期的不同 ?
  • 談談Activity和Fragment的區別?
  • Fragment中add與replace的區別(Fragment重疊)
  • getFragmentManager、getSupportFragmentManager 、getChildFragmentManager之間的區別?
  • FragmentPagerAdapter與FragmentStatePagerAdapter的區別與使用場景

Service

  • 談一談Service的生命週期?
  • Service的兩種啟動方式?區別在哪?
  • 如何保證Service不被殺死 ?
  • 能否在Service開啟耗時操作 ? 怎麼做 ?
  • 用過哪些系統Service ?
  • 瞭解ActivityManagerService嗎?發揮什麼作用(重點)

Broadcast Receiver

  • 廣播有幾種形式 ? 都有什麼特點 ?
  • 廣播的兩種註冊方式 ?
  • 廣播傳送和接收的原理了解嗎 ?(Binder機制、AMS)

ContentProvider

  • ContentProvider瞭解多少?
  • ContentProvider的許可權管理?
  • 說說ContentProvider、ContentResolver、ContentObserver 之間的關係?

資料儲存

  • 描述一下Android資料持久儲存方式?
  • SharedPreferences的應用場景?注意事項?
  • SharedPrefrences的apply和commit有什麼區別?
  • 瞭解SQLite中的事務操作嗎?是如何做的
  • 使用SQLite做批量操作有什麼好的方法嗎?
  • 如何刪除SQLite中表的個別欄位?
  • 使用SQLite時會有哪些優化操作?

IPC(重點)

  • Android中程式和執行緒的關係? 區別?
  • 如何開啟多程式 ? 應用是否可以開啟N個程式 ?
  • 為何需要IPC?多程式通訊可能會出現的問題?
  • Android中IPC方式、各種方式優缺點,為什麼選擇Binder?
  • Binder機制的作用和原理?
  • Binder框架中ServiceManager的作用?
  • Bundle傳遞物件為什麼需要序列化?Serialzable和Parcelable的區別?
  • 講講AIDL?原理是什麼?如何優化多模組都使用AIDL的情況?

View

  • 講下View的繪製流程?
  • MotionEvent是什麼?包含幾種事件?什麼條件下會產生?
  • 描述一下View事件傳遞分發機制?
  • 如何解決View的事件衝突 ? 舉個開發中遇到的例子 ?
  • scrollTo()和scollBy()的區別?
  • Scroller是怎麼實現View的彈性滑動?
  • invalidate()和postInvalidate()的區別 ?
  • SurfaceView和View的區別?
  • 自定義View如何考慮機型適配 ?

Handler

  • 談談訊息機制Handler ? 作用 ?有哪些要素 ?流程是怎樣的 ?
  • 一個執行緒能否建立多個Handler,Handler跟Looper之間的對應關係 ?
  • 軟引用跟弱引用的區別
  • Handler 引起的記憶體洩露原因以及最佳解決方案
  • 為什麼系統不建議在子執行緒訪問UI
  • Looper死迴圈為什麼不會導致應用卡死
  • 使用Handler的postDealy後訊息佇列會有什麼變化 ?
  • 可以在子執行緒直接new一個Handler嗎 ?怎麼做 ?
  • Message可以如何建立 ? 哪種效果更好 ? 為什麼 ?

執行緒(重點)

  • 執行緒池的好處? 執行緒池的幾個引數的理解,四種執行緒池的使用場景
  • Android中還了解哪些方便執行緒切換的類?
  • 講講AsyncTask的原理
  • IntentService有什麼用 ?
  • 直接在Activity中建立一個thread跟在service中建立一個thread之間的區別
  • ThreadPoolExecutor的工作策略 ?
  • Handler、Thread和HandlerThread的差別?
  • ThreadLocal的原理
  • 多執行緒是否一定會高效(優缺點)
  • 多執行緒中,讓你做一個單例,你會怎麼做
  • 除了notify還有什麼方式可以喚醒執行緒
  • 什麼是ANR ? 什麼情況會出現ANR ?如何避免 ? 在不看程式碼的情況下如何快速定位出現ANR問題所在 ?

Bitmap

  • Bitmap使用需要注意哪些問題 ?
  • Bitmap.recycle()會立即回收麼?什麼時候會回收?如果沒有地方使用這個Bitmap,為什麼垃圾回收不會直接回收?
  • 一張Bitmap所佔記憶體以及記憶體佔用的計算
  • Android中快取更新策略 ?
  • LRU的原理 ?

效能優化(重點)

  • 圖片的三級快取中,圖片載入到記憶體中,如果記憶體快爆了,會發生什麼?怎麼處理?
  • 記憶體中如果載入一張500*500的png高清圖片.應該是佔用多少的記憶體?
  • WebView的效能優化 ?
  • Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
  • 記憶體回收機制與GC演算法(各種演算法的優缺點以及應用場景);GC原理時機以及GC物件
  • 記憶體洩露和記憶體溢位的區別 ?AS有什麼工具可以檢測記憶體洩露
  • 效能優化,怎麼保證應用啟動不卡頓? 黑白屏怎麼處理?
  • 強引用置為null,會不會被回收?
  • ListView跟RecyclerView的區別
  • ListView的adapter是什麼adapter ?
  • LinearLayout、FrameLayout、RelativeLayout效能對比,為什麼?

JNI

  • 對JNI是否瞭解
  • 如何載入NDK庫 ?如何在JNI中註冊Native函式,有幾種註冊方法 ?
  • 你用JNI來實現過什麼功能 ? 怎麼實現的 ?(加密處理、影音方面、圖形影象處理)

設計模式

  • 你所知道的設計模式有哪些?
  • 談談MVC、MVP和MVVM,好在哪裡,不好在哪裡 ?
  • 封裝p層之後.如果p層資料過大,如何解決
  • 是否能從Android中舉幾個例子說說用到了什麼設計模式 ?
  • 裝飾模式和代理模式有哪些區別 ?
  • 實現單例模式有幾種方法 ?懶漢式中雙層鎖的目的是什麼 ?兩次判空的目的又是什麼?
  • 用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。
  • Fragment如果在Adapter中使用應該如何解耦?

Android進階延伸點

  • 如何進行單元測試,如何保證App穩定
  • Android中如何檢視一個物件的回收情況
  • TabLayout如何設定指示器的寬度包裹內容 ?
  • APK的大小如何壓縮 ? 多渠道包 ?
  • 外掛化原理分析
  • 組建化原理,元件化中路由、埋點的實現
  • Hook以及插樁技術
  • Android的簽名機制,APK包含哪些東西 ?
  • v3簽名key和v2還有v1有什麼區別
  • 熱修復流派、原理,如何進行dex替換的 ?
  • Android5.0~10.0之間大的變化 ?
  • 說下Measurepec這個類
  • WebView相關(記憶體洩露、JS互動)
  • 請例舉Android中常用佈局型別,並簡述其用法以及排版效率
  • 區別Animation和Animator的用法,概述其原理
  • 如何實現一個推送,極光推送原理
  • 是否使用過DataBinding ? ButterKnife是怎麼做到佈局繫結的 ?
  • 使用過什麼圖片載入庫 ?Glide的原始碼設計哪裡很微妙 ?
  • 做過螢幕適配嗎 ?你的處理方案有哪些 ?
  • 做過主題切換嗎?你的處理方案有哪些?
  • 做過許可權適配嗎 ?動態許可權適配方案、許可權組的概念
  • 用過哪些網路載入庫 ?OkHttp、Retrofit實現原理 ?
  • 對於應用更新這塊是如何做的 ? (灰度,強制更新、分割槽域更新)
  • 瞭解GPS、GIS嗎 ?
  • 會用Kotlin、Fultter嗎 ? 談談你的理解

Java篇

基礎

  • equals 跟 ==的區別
  • 你所知道的設計模式有哪些 ?
  • Java為何引入泛型、泛型邊界 ?
  • String、StringBuffer和StringBuilder的區別 ?
  • 什麼是反射,作用是什麼 ?為什麼耗效能 ?關於反射混淆、耗效能的解決方式 ?
  • 如何防止反射例項化單例物件 ?
  • 什麼是內部類 ? 靜態內部類和非靜態內部類的區別 ?(棧、堆、方法區)
  • 重寫和過載的區別 ?
  • 抽象類和介面的異同 ?
  • 實現多型的機制是什麼 ?
  • 靜態代理和動態代理的區別
  • 異常處理機制知道哪些 ? 日常開發遇到過哪些執行時異常 ?

集合

  • Java集合框架中有哪些類 ? 都有什麼特點 ?
  • HashMap與HashTable實現原理 ?執行緒安全性
  • ConcurrentHashMap的原理 ?分的段數是多少 ?如何實現分段鎖 ?
  • Hash衝突以及處理演算法
  • ArrayList和LinkList的區別 ? Vector ?
  • 講下為什麼在Android下推薦使用Arraymap,相比HashMap、SparseArray它有什麼優勢 ?
  • equals()和hashCode()的區別是什麼 ?平時有重寫過它們麼 ? 什麼情況下會去重寫
  • 集合、陣列、泛型的關係,並比較

併發

  • Java的併發、多執行緒、執行緒模型
  • Synchronized原理 、volatile關鍵字的作用 ?與重入鎖的區別 ?
  • ThreadLocal原理,實現及如何保證Local屬性
  • 靜態同步鎖和普通同步鎖的區別 ?
  • 不用鎖如何保證int自增安全
  • sleep()和wait()的區別 ?
  • 同步和非同步、阻塞和非阻塞的區別 ?
  • 死鎖的四個必要條件

Java進階

  • Java的GC機制 、 分代回收策略
  • 常見的Java資料結構
  • Java的四種引用及使用場景
  • DCL單例模式 ?
  • Java&Android關於Classloader原始碼解析
  • 類載入的全過程是怎樣的 ? 什麼事雙親委託模型 ?
  • 工作記憶體和主記憶體、虛擬記憶體的關係 ?
  • 在Java記憶體模式有哪些可以保證併發過程的原子性、可見性和有序性的措施 ?
  • JVM記憶體分佈 ? DVM以及ART是如何進行優化的 ? 具體步驟 ?

TCP

  • TCP的3次握手和四次揮手、TCP與UDP的區別
  • 擁塞控制和流量控制都是什麼 ?兩者的區別 ?
  • Http位於TCP/IP模型中的第幾層 ? 為什麼說Http是可靠的資料傳輸協議 ?
  • 播放視訊用TCP還是UDP ? 為什麼 ?

HTTP

  • 瞭解HTTP協議嗎 ?HTTP報文結構
  • HTTP的狀態碼,常見的請求頭,HTTP快取協議
  • HTTP1.0與2.0的區別
  • HTTPS是如何保證安全的,證照如何校驗,如何加密
  • HTTP與HTTPS區別 ?
  • HTTP與Socket的區別 ?

演算法

  • 手寫DCL單例模式
  • 手寫氣泡排序,並且在不考慮效能的情況下.用雙層for迴圈完成雙向氣泡排序.
  • 常見的排序演算法,手寫二分查詢,二分查詢的複雜度分析
  • 手寫快排,分析原理
  • 求1000以內的水仙花數以及40億以內的水仙花數
  • 迭代和遞迴的特點。並比較優缺點
  • 什麼是斐波那契數列 ?
  • 快速從一組無序數中找到第K大的數/前K個大的數
  • 瞭解二叉樹的遍歷麼 ? 講一講他們
  • 反轉連結串列
  • 多執行緒輪流列印問題
  • 用兩個棧實現佇列

版本控制工具

  • 使用那些版本控制工具
  • 講講SVN和Git的差別 ?Git的優勢是什麼
  • Git常用命令知道哪些 ?

解答篇

由於知識點涉及較廣,因此將解答篇分為上中下三篇,稍後呈上

2019初中級Android開發社招面試解答(上)

2019初中級Android開發社招面試解答(中)

未完待續,敬請期待

相關文章