該面試寶典不僅收錄了本人親身面試遇到的問題,還收錄了從一些朋友那裏收集過來的問題。在以後的工作中本 人也會不斷的更新和充實該面試寶典,當然也希望大家能夠多多奉獻比較優質的面試題。
該面試寶典不僅展示了常見的面試問題以及回答技巧,還詳細講解了每一道題所包含的知識點,讓每個程序員不僅知其然,更知其所以然。
大家可以通過我記錄下的這些面試實戰記錄略微感知一下真實面試的情況,從中學習一些面試技巧以便讓自己在未來的面試中能夠得心應手,順利拿到自己喜歡的 offer。
正文總共分爲6個部分:
- Java 基礎(★★)
- Java 高級(★★)
- Android 基礎(★★★)
- Android 高級(★★★)
- Android 項目(★★★)
- 項目面試常見問題(★★★)
一、Java 基礎(★★)
Java 面向對象思想
- 面向對象都有哪些特性以及你對這些特性的理解
- 如何理解 clone 對象
Java 中的多態
- Java 中實現多態的機制是什麼?
Java 的異常處理
- Java 中異常分爲哪些種類
- 調用下面的方法,得到的返回值是什麼
- error 和 exception 的區別
- java 異常處理機制
- 請寫出你最常見的 5 個 RuntimeException
Java 的數據類型
- Java 的基本數據類型都有哪些各佔幾個字節
- String 是基本數據類型嗎?可以被繼承嗎?
Java 的 IO
- Java 中有幾種類型的流
- 字節流如何轉爲字符流
- 如何將一個 java 對象序列化到文件裏
- 字節流和字符流的區別
Java 的集合
- HashMap 排序題
- 集合的安全性問題
- ArrayList 內部用什麼實現的?
- 併發集合和普通集合如何區別?
- List 的三個子類的特點
- List 和 map 的區別
- HashMap 和 HashTable 有什麼區別?
- 數組和鏈表分別比較適合用於什麼場景,爲什麼?
- Java 中 ArrayList 和 Linkedlist 區別?
- List a=new ArrayList()和 ArrayList a =new ArrayList()的區別?
- 要對集合更新操作時,ArrayList 和 LinkedList 哪個更適合?
- 請用兩個隊列模擬堆棧結構
Java 的多線程
- 多線程的兩種創建方式
- 在 java 中 wait 和 sleep 方法的不同?
- synchronized 和 volatile 關鍵字的作用
- 分析線程併發訪問代碼解釋原因
- 什麼是線程池,如何使用?
- 請敘述一下您對線程池的理解?
- 線程池的啓動策略?
- 如何控制某個方法允許併發訪問線程的個數?
- 三個線程 a、b、c 併發運行,b,c 需要 a 線程的數據怎麼實現
- 同一個類中的 2 個方法都加了同步鎖,多個線程能同時訪問同一個類中的這兩個方 法嗎?
- 什麼情況下導致線程死鎖,遇到線程死鎖該怎麼解決?
- Java 中多線程間的通信怎麼實現?
Java 高級(★★)
Java 中的反射
- 說說你對 Java 中反射的理解
Java 中的動態代理
- 寫一個 ArrayList 的動態代理類
- 動靜態代理的區別,什麼場景使用?
Java 中的設計模式&回收機制
- 你所知道的設計模式有哪些
- 單例設計模式
- 工廠設計模式
- 建造者模式(Builder)
- 適配器設計模式
- 裝飾模式(Decorator)
- 策略模式(strategy)
- 觀察者模式(Observer)
- JVM 垃圾回收機制和常見算法
- 談談 JVM 的內存結構和內存分配
- Java 中引用類型都有哪些?
- heap 和 stack 有什麼區別
Java 的類加載器
- Java 的類加載器的種類都有哪些?
- 類什麼時候被初始化?
- Java 類加載體系之 ClassLoader 雙親委託機制
Android 基礎(★★★)
Android 基本常識
- 寫 10 個簡單的 linux 命令
- 書寫出 android 工程的目錄結構
- 什麼是 ANR 如何避免它?
- 談談 Android 的優點和不足之處
- 一條最長的短信息約佔多少 byte?
- 如何判斷是否有 SD 卡?
- dvm 的進程和 Linux 的進程, 應用程序的進程是否爲同一個概念?
- Android 程序與 Java 程序的區別?
- 啓動應用後,改變系統語言,應用的語言會改變麼?
- 請介紹下 adb、ddms、aapt 的作用
- ddms 和 traceview 的區別
- 補充知識:TraceView 的使用
- Android 中數據存儲方式有哪些?
- DVM 和 JVM 的區別?
- 談一談 Android 的安全機制
- Android 的四大組件都需要在清單文件中註冊嗎?
- 在 Android 中進程的級別有哪些?
- sp 頻繁操作有什麼後果?sp 能存多少數據?
- 描述一下 Android 的系統架構
- 解釋一下 Android 程序運行時權限與文件系統權限的區別?
- AndroidManifest.xml 中的 targerSDK 設置有什麼作用?
Activity
- 什麼是 Activity?
- 請描述一下 Activity 生命週期
- Activity 的狀態都有哪些?
- 如何保存 Activity 的狀態?
- 兩個 Activity 之間跳轉時必然會執行的是哪幾個方法?
- 橫豎屏切換時 Activity 的生命週期
- 如何將一個 Activity 設置成窗口的樣式?
- 如何退出 Activity?如何安全退出已調用多個 Activity 的 Application?
- 請描述一下 Activity 的啓動模式都有哪些以及各自的特點
- 一個啓動模式爲 singleTop 的 activity,如果再試圖啓動會怎樣? 面試官想問的是 onNewIntent()
- 兩個 Activity 之間傳遞數據,除了 intent,廣播接收者,content provider 還有啥 方式?
- 怎樣在兩個 Activity 之間傳遞一張圖片
- 如何實現切換主題功能?
- Android 中 Activity 是如何啓動的?
Service
- Service 是否在 main thread 中執行, service 裏面是否能執行耗時的操作?
- Activity 怎麼和 Service 綁定,怎麼在 Activity 中啓動自己對應的 Service?
- 請描述一下 Service 的生命週期
- 什麼是 IntentService?有何優點?
- 說說 Activity、Intent、Service 是什麼關係
- Service 和 Activity 在同一個線程嗎
- Service 裏面可以彈吐司麼?
- 如何讓一個 Service 成爲前置進程?
- Service 的 onStartCommand 方法有幾種返回值?各代表什麼意思?
- Service 的 onRebind(Intent)方法在什麼情況下會執行?
- Activity 調用 Service 中的方法都有哪些方式?
- Activity 如何給 Service 發送 Message?
- Service 如何給 Activity 發送 Message?
- 子線程不能代替 service 嗎?
BroadCastReceiver
- 請描述一下 BroadcastReceiver
- 在 manifest 和代碼中如何註冊和使用 BroadcastReceiver
- BroadCastReceiver 的生命週期
- 如何讓自己的廣播只讓指定的 app 接收
- 什麼是最終廣播接收者?
- 廣播的優先級對無序廣播生效嗎?
- 動態註冊的廣播優先級誰高?
- 如 何 判 斷 當 前 BroadcastReceiver 接 收 到 的 是 有 序 廣 播 還 是 無 序 廣 播 ?
- Android 引入廣播機制的用意
- 網絡狀態改變是無序廣播還是有序廣播,安裝了,沒啓動過,會接受這個廣播麼?
ContentProvider&數據庫
- 請介紹下 ContentProvider 是如何實現數據共享的?
- 爲什麼要用 ContentProvider?它和 sql 的實現上有什麼差別?
- 說說 ContentProvider、ContentResolver、ContentObserver 之間的關係
- 如何訪問 asserts 資源目錄下的數據庫?
- 如何在高併發下進行數據庫查詢?
Android 中的佈局
- Android 中常用的佈局都有哪些
- 談談 UI 中, Padding 和 Margin 有什麼區別?
- 使用權重如何讓一個控件的寬度爲父控件的 1/3?
- Android 中佈局的優化措施都有哪些?
- android:layout_gravity 和 android:gravity 的區別?
ListView
- ListView 如何提高其效率?
- ViewHolder 爲什麼要聲明爲靜態類?
- 在 Activity 中使用 Handler 的時候如何去除警告信息?
- 談談 ListView 中的 MVC 思想?
- ListView 使用了哪些設計模式?
- 當 ListView 數據集改變後,如何更新 ListView?
- ListView 如何實現分頁加載
- ListView 可以顯示多種類型的條目嗎?
- ListView 如何定位到指定位置
- 如何在 ScrollView 中如何嵌入 ListView
- ListView 中如何優化圖片
- ListView 中圖片錯位的問題是如何產生的
- scrollView 嵌套 listview 方式除了測量還有什麼方法?
JNI & NDK
- 在 Android 中如何調用 C 語言
- 請介紹一下 NDK
- JNI 調用常用的兩個參數
Android 中的網絡訪問
- Android 中如何訪問網絡
- 如何解析服務器傳來的 JSON 文件
- 如何解析服務器傳來的 XML 格式數據
- 如何從網絡上加載一個圖片顯示到界面
- 如何播放網絡視頻
- 常見的訪問網絡 API 都有哪些?
Intent
- Intent 傳遞數據時,可以傳遞哪些類型數據?
- Serializable 和 Parcelable 的區別
- 請描述一下 Intent 和 IntentFilter
Fragment
- Fragment 跟 Activity 之間是如何傳值的?
- 描述一下 Fragment 的生命週期
- Fragment 的 replace 和 add 方法的區別
- Fragment 如何實現類似 Activity 棧的壓棧和出棧效果的?
- ViewPager+Fragment 的左右滑動,如何實現 Fragment 的懶加載,Viewpager 默認加載幾個?
Android 高級(★★★)
Android 性能優化
- 如何對 Android 應用進行性能分析
- 什麼情況下會導致內存泄露
- 如何避免 OOM 異常
- Android 中如何捕獲未捕獲的異常
- Android 動態加載機制
- 如果加載高清大圖片,不用第三方,不壓縮,怎麼處理防止 OOM
Android 屏幕適配
- 屏幕適配方式都有哪些
- 屏幕適配的處理技巧都有哪些
- dp 和 px 之間的關係
AIDL
- 什麼是 AIDL 以及如何使用
自定義控件
- 如何自定義一個控件
- 請描述一下 View 的繪製流程
- View,SurfaceView,GLSurfaceView 有什麼區別?
Android 中的事件處理
- Handler 機制
- 事件分發機制
- 在 Android 中主線程如何給子線程發 Message?
Android 簽名
- 簡單描述下 Android 數字簽名
- 使用 Eclipse 如何生成數字簽名
Android 中的動畫
- Android 中的動畫有哪幾類,它們的特點和區別是什麼
- 如何修改 Activity 進入和退出動畫
網絡協議
- Http 和 Https 有什麼區別?
- 簡述 Socket 通訊編程
- Binder 機制
- 如何保證網絡傳輸數據的安全性
- 自己設計一個 Push 推送服務,需要考慮到那些點
其他
- AsyncTask 如何使用
- 都使用過哪些框架、平臺
- Glide 原理
- Android 四大著名圖片處理框架
- 都使用過哪些自定義控件
- volley 的原理
- okhttp 的原理
- ViewPagerindicator 的原理
- slidingmenu 的原理
- RecyclerView 的原理
Android 項目(★★★)
- 如何讓 LinearLayout 自動換行如下圖的顏色分類所示
- ImageLoader 在項目中的使用
- Java 和 javaScript 互相調用(webview 和 js 的互相調用)
- PopupWindow 彈出層在項目中的使用
- Notification 在 Android 中的使用
- 帶索引的 ListView 在 Android 中的應用
- 隨手勢滑動而消失 Activity 的使用
- TouchGallery 在 Android 中的應用
- TextView 顯示富文本
- CircleImageView 實現圓形圖片
- 網易新聞客戶端頻道管理的實現
- Android 瀑布流的實現
- 監聽鍵盤事件
- 可以按照字母排序的 ListView
- 省市區三級聯動
- 購物客戶端二級菜單
- 微信圖片選擇器
- 如何從 html 的一個動作打開 app 並跳轉到指定的 Activity
- AAR 庫怎麼來配置
- 不借助第三方怎麼顯示圓形圖片
項目面試常見問題(★★★)
- 開發週期
- 項目中遇到的難題
- 項目中最大的收穫
- 項目是如何上線的
- 項目是如何盈利的
- 繪製項目架構圖
- 項目開發流程
- 你在項目中的角色
- 你負責項目中的哪些模塊
- 講講你負責模塊的具體實現
- 項目中都用到了哪些第三發框架
- 有沒有自己寫過框架
- 業餘時間你是如何提高自己(學習)的
- 有沒有自己的技術 blog
- 你的職業規劃
- 爲什麼離職
- 爲什麼選擇我們公司
- 說說你們項目的亮點和不足
- 你們的項目是如何保持風格一致的
- 項目架構是如何搭建的
- 屏幕適配是如何解決的
- 都看過哪些源碼
- 項目版本是如何升級的
- 用的什麼版本控制工具
- 你能獨立開發嗎
- App 跟服務器是如何交互的
- 需求文檔寫過嗎
- 接口文檔寫過嗎
- 雲服務器都用過哪些
- 第三方平臺都用過哪些
簡歷+社招解答+經典HR面試解析
以上是整理總結的Android中高級面試遇到的真題解析,希望對大家有幫助;同時很多人經常也會遇到很多關於簡歷製作,職業困惑、HR經典面試問題回答等有關面試的問題。同樣我也蒐集整理了全套簡歷製作、金三銀四社招困惑、HR面試等問題解析,有疑問,可以提供專業的解答。
對於Android開發的朋友來說應該是最全面最完整的面試資料,爲了更好地整理每個模塊,我參考了很多網上的優質博文和項目,力求不漏掉每一個知識點。很多朋友靠着這些內容進行復習,拿到了BATJ等大廠的offer,這個資料也已經幫助了很多的安卓開發者,希望也能幫助到你。
最後想要獲取完整的《2020 Android BAT面試寶典》,可以私信我【666】。
面試大廠複習路線
多餘的話就不講了,接下來將分享面試的一個複習路線,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!
這裏給大家提供一個方向,進行體系化的學習:
1、看視頻進行系統學習
前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。
另外,我自己也珍藏了好幾套視頻,有需要的我也可以分享給你。
2、進行系統梳理知識,提升儲備
客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。
系統學習方向:
架構師築基必備技能:深入Java泛型+註解深入淺出+併發編程+數據傳輸與序列化+Java虛擬機原理+反射與類加載+動態代理+高效IO
Android高級UI與FrameWork源碼:高級UI晉升+Framework內核解析+Android組件內核+數據持久化
360°全方面性能調優:設計思想與代碼質量優化+程序性能優化+開發效率優化
解讀開源框架設計思想:熱修復設計+插件化框架解讀+組件化框架設計+圖片加載框架+網絡訪問框架設計+RXJava響應式編程框架設計+IOC架構設計+Android架構組件Jetpack
NDK模塊開發:NDK基礎知識體系+底層圖片處理+音視頻開發
微信小程序:小程序介紹+UI開發+API操作+微信對接
Hybrid 開發與Flutter:Html5項目實戰+Flutter進階
知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。
3、讀源碼,看實戰筆記,學習大神思路
“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。
主要內含微信 MMKV 源碼、AsyncTask 源碼、Volley 源碼、Retrofit源碼、OkHttp 源碼等等。
4、面試前夕,刷題衝刺
面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。
關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:
總結
改變人生,沒有什麼捷徑可言,這條路需要自己親自去走一走,只有深入思考,不斷反思總結,保持學習的熱情,一步一步構建自己完整的知識體系,纔是最終的制勝之道,也是程序員應該承擔的使命。
耗時一年多整理的一系列Android學習資源:Android源碼解析、Android第三方庫源碼筆記、Android進階架構師七大專題學習、歷年BAT面試題解析包、Android大佬學習筆記
等等,這些內容均免費分享給大家,需要完整版的朋友,點這裏可以看到全部內容