每個人都有每個人的不同,每個人都會有自己不同的道路

每個人都有每個人的不同,每個人都會有自己不同的道路。
下面的大廠面試你又是否懂了,希望你可以了解。變得更加優秀。

主要分為以下幾部分:

(1)java面試題
(2)Android面試題
(3)混合開發面試題
(4)高端技術面試題
(5)非技術性問題&HR問題匯總

一、java面試題

熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉源碼實現原理,甚至要你知道有哪些不足,怎么改進,還有一些java有關的一些算法,設計模式等等。

(一) java基礎面試知識點
?java中==和equals和hashCode的區別
“==”vs"euqal ":

"hashcode”vs"euqal ":
http://www.lxweimin.com/writer#/notebooks/20925198/notes/34482417
?int、char、long各占多少字節數
https://blog.csdn.net/never_cxb/article/details/47204485
?int與integer的區別
https://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html
?談談對java多態的理解
?String、StringBuffer、StringBuilder區別
簡述從線程安全上看
String 不可變,因此是線程安全的
StringBuilder 不是線程安全的
StringBuffer 是線程安全的,內部使用 synchronized 進行同步
?什么是內部類?內部類的作用
?抽象類和接口區別
?抽象類的意義
?抽象類與接口的應用場景
?抽象類是否可以沒有方法和屬性?
?接口的意義
?泛型中extends和super的區別
?父類的靜態方法能否被子類重寫
?進程和線程的區別
?final,finally,finalize的區別
?序列化的方式
?Serializable 和Parcelable 的區別
?靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?
?靜態內部類的設計意圖
?成員內部類、靜態內部類、局部內部類和匿名內部類的理解,以及項目中的應用
?談談對kotlin的理解
?閉包和局部內部類的區別
?string 轉換成 integer的方式及原理

(二) java深入源碼級的面試題(有難度)
?哪些情況下的對象會被垃圾回收機制處理掉?
?講一下常見編碼方式?
?utf-8編碼中的中文占幾個字節;int型幾個字節?
?靜態代理和動態代理的區別,什么場景使用?
?Java的異常體系
?談談你對解析與分派的認識。
?修改對象A的equals方法的簽名,那么使用HashMap存放這個對象實例的時候,會調用哪個equals方法?
?Java中實現多態的機制是什么?
http://www.cnblogs.com/hupp/p/4854918.html
?如何將一個Java對象序列化到文件里?
?說說你對Java反射的理解
?說說你對Java注解的理解
?說說你對依賴注入的理解
?說一下泛型原理,并舉例說明
?Java中String的了解 ? String為什么要設計成不可變的?
https://www.programcreek.com/2013/04/why-string-is-immutable-in-java/
?Object類的equal和hashCode方法重寫,為什么?

(三) 數據結構
?常用數據結構簡介
?并發集合了解哪些?
?列舉java的集合以及集合之間的繼承關系
?集合類以及集合框架
?容器類介紹以及之間的區別(容器類估計很多人沒聽這個詞,Java容器主要可以劃分為4個部分:List列表、Set集合、Map映射、工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections),具體的可以看看這篇博文 Java容器類)
?List,Set,Map的區別
?List和Map的實現方式以及存儲方式
?HashMap的實現原理
?HashMap數據結構?
?HashMap源碼理解
?HashMap如何put數據(從HashMap源碼角度講解)?
?HashMap怎么手寫實現?
?ConcurrentHashMap的實現原理
?ArrayMap和HashMap的對比
?HashTable實現原理
?TreeMap具體實現
?HashMap和HashTable的區別
?HashMap與HashSet的區別
?HashSet與HashMap怎么判斷集合元素重復?
?集合Set實現Hash怎么防止碰撞
?ArrayList和LinkedList的區別,以及應用場景
?數組和鏈表的區別
?二叉樹的深度優先遍歷和廣度優先遍歷的具體實現
?堆的結構
?堆和樹的區別
?堆和棧在內存中的區別是什么(解答提示:可以從數據結構方面以及實際實現方面兩個方面去回答)?
?什么是深拷貝和淺拷貝
?手寫鏈表逆序代碼
?講一下對樹,B+樹的理解
?講一下對圖的理解
?判斷單鏈表成環與否?
?鏈表翻轉(即:翻轉一個單項鏈表)
?合并多個單有序鏈表(假設都是遞增的)

(四) 線程、多線程和線程池
?開啟線程的三種方式?
?線程和進程的區別?
?為什么要有線程,而不是僅僅用進程?
?run()和start()方法區別
?如何控制某個方法允許并發訪問線程的個數?
?在Java中wait和seelp方法的不同;
?談談wait/notify關鍵字的理解
?什么導致線程阻塞?
?線程如何關閉?
?講一下java中的同步的方法
?數據一致性如何保證?
?如何保證線程安全?
?如何實現線程同步?
?兩個進程同時要求寫或者讀,能不能實現?如何防止進程的同步?
?線程間操作List
?Java中對象的生命周期
?Synchronized用法
?synchronize的原理
?談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解
?static synchronized 方法的多線程訪問和作用
?同一個類里面兩個synchronized方法,兩個線程同時訪問的問題
?volatile的原理
?談談volatile關鍵字的用法
?談談volatile關鍵字的作用
?談談NIO的理解
?synchronized 和volatile 關鍵字的區別
?synchronized與Lock的區別
?ReentrantLock 、synchronized和volatile比較
?ReentrantLock的內部實現
?lock原理
?死鎖的四個必要條件?
?怎么避免死鎖?
?對象鎖和類鎖是否會互相影響?
?什么是線程池,如何使用?
?Java的并發、多線程、線程模型
?談談對多線程的理解
?多線程有什么要注意的問題?
?談談你對并發編程的理解并舉例說明
?談談你對多線程同步機制的理解?
?如何保證多線程讀寫文件的安全?
?多線程斷點續傳原理
?斷點續傳的實現

(五)并發編程有關知識點(這個是一般Android開發用的少的,所以建議多去看看):

平時Android開發中對并發編程可以做得比較少,Thread這個類經常會用到,但是我們想提升自己的話,一定不能停留在表面,,我們也應該去了解一下java的關于線程相關的源碼級別的東西。

學習的參考資料如下:

Java 內存模型
?java線程安全總結
?深入理解java內存模型系列文

并發編程:
?Java并發編程:Thread類的使用
?Java多線程編程總結
?Java并發編程的總結與思考
?Java并發編程實戰-----synchronized
?深入分析ConcurrentHashMap

二、Android面試題

Android面試題包括Android基礎,還有一些源碼級別的、原理這些等。所以想去大公司面試,一定要多看看源碼和實現方式,常用框架可以試試自己能不能手寫實現一下,鍛煉一下自己。

(一)Android基礎知識點
?四大組件是什么
?四大組件的生命周期和簡單用法
?Activity之間的通信方式
?Activity各種情況下的生命周期
?橫豎屏切換的時候,Activity 各種情況下的生命周期
?Activity與Fragment之間生命周期比較
?Activity上有Dialog的時候按Home鍵時的生命周期
?兩個Activity 之間跳轉時必然會執行的是哪幾個方法?
?前臺切換到后臺,然后再回到前臺,Activity生命周期回調方法。彈出Dialog,生命值周期回調方法。
?Activity的四種啟動模式對比
?Activity狀態保存于恢復
?fragment各種情況下的生命周期
?Fragment狀態保存startActivityForResult是哪個類的方法,在什么情況下使用?
?如何實現Fragment的滑動?
?fragment之間傳遞數據的方式?
?Activity 怎么和Service 綁定?
?怎么在Activity 中啟動自己對應的Service?
?service和activity怎么進行數據交互?
?Service的開啟方式
?請描述一下Service 的生命周期
?談談你對ContentProvider的理解
?說說ContentProvider、ContentResolver、ContentObserver 之間的關系
?請描述一下廣播BroadcastReceiver的理解
?廣播的分類
?廣播使用的方式和場景
?在manifest 和代碼中如何注冊和使用BroadcastReceiver?
?本地廣播和全局廣播有什么差別?
?BroadcastReceiver,LocalBroadcastReceiver 區別
?AlertDialog,popupWindow,Activity區別
?Application 和 Activity 的 Context 對象的區別
?Android屬性動畫特性
?如何導入外部數據庫?
?LinearLayout、RelativeLayout、FrameLayout的特性及對比,并介紹使用場景。
?談談對接口與回調的理解
?回調的原理
?寫一個回調demo
?介紹下SurfView
?RecycleView的使用
?序列化的作用,以及Android兩種序列化的區別
?差值器
?估值器
?Android中數據存儲方式

(二)Android源碼相關分析
?Android動畫框架實現原理
?Android各個版本API的區別
?Requestlayout,onlayout,onDraw,DrawChild區別與聯系
?invalidate和postInvalidate的區別及使用
?Activity-Window-View三者的差別
?談談對Volley的理解
?如何優化自定義View
?低版本SDK如何實現高版本api?
?描述一次網絡請求的流程
?HttpUrlConnection 和 okhttp關系
?Bitmap對象的理解
?looper架構
?ActivityThread,AMS,WMS的工作原理
?自定義View如何考慮機型適配
?自定義View的事件
?AstncTask+HttpClient 與 AsyncHttpClient有什么區別?
?LaunchMode應用場景
?AsyncTask 如何使用?
?SpareArray原理
?請介紹下ContentProvider 是如何實現數據共享的?
?AndroidService與Activity之間通信的幾種方式
?IntentService原理及作用是什么?
?說說Activity、Intent、Service 是什么關系
?ApplicationContext和ActivityContext的區別
?SP是進程同步的嗎?有什么方法做到同步?
?談談多線程在Android中的使用
?進程和 Application 的生命周期
?封裝View的時候怎么知道view的大小
?RecycleView原理
?AndroidManifest的作用與理解

(三)Android性能優化分析

Android UI布局優化;

(四)常見的一些原理性問題
?Handler機制和底層實現
?Handler、Thread和HandlerThread的差別
?handler發消息給子線程,looper怎么啟動?
?關于Handler,在任何地方new Handler 都是什么線程下?
?ThreadLocal原理,實現及如何保證Local屬性?
?請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系
?請描述一下View事件傳遞分發機制
?Touch事件傳遞流程
?事件分發中的onTouch 和onTouchEvent 有什么區別,又該如何使用?
?View和ViewGroup分別有哪些事件分發相關的回調方法
?View刷新機制
?View繪制流程
?自定義控件原理
?自定義View如何提供獲取View屬性的接口?
?Android代碼中實現WAP方式聯網
?AsyncTask機制
?AsyncTask原理及不足
?如何取消AsyncTask?
?為什么不能在子線程更新UI?
?ANR產生的原因是什么?
?ANR定位和修正
?oom是什么?
?什么情況導致oom?
?有什么解決方法可以避免OOM?
?Oom 是否可以try catch?為什么?
?內存泄漏是什么?
?什么情況導致內存泄漏?
?如何防止線程的內存泄漏?
?內存泄露場的解決方法
?內存泄漏和內存溢出區別?
?LruCache默認緩存大小
?ContentProvider的權限管理(解答:讀寫分離,權限控制-精確到表級,URL控制)
?如何通過廣播攔截和abort一條短信?
?廣播是否可以請求網絡?
?廣播引起anr的時間限制是多少?
?計算一個view的嵌套層級
?Activity棧
?Android線程有沒有上限?
?線程池有沒有上限?
?ListView重用的是什么?
?Android為什么引入Parcelable?
?有沒有嘗試簡化Parcelable的使用?

(四)開發中常見的一些問題
?ListView 中圖片錯位的問題是如何產生的?
?混合開發有了解嗎?
?知道哪些混合開發的方式?說出它們的優缺點和各自使用場景?(解答:比如:RN,weex,H5,小程序,WPA等。做Android的了解一些前端js等還是很有好處的);
?屏幕適配的處理技巧都有哪些?
?服務器只提供數據接收接口,在多線程或多進程條件下,如何保證數據的有序到達?
?動態布局的理解
?怎么去除重復代碼?
?畫出 Android 的大體架構圖
?Recycleview和ListView的區別
?ListView圖片加載錯亂的原理和解決方案
?動態權限適配方案,權限組的概念
?Android系統為什么會設計ContentProvider?
?下拉狀態欄是不是影響activity的生命周期
?如果在onStop的時候做了網絡請求,onResume的時候怎么恢復?
?Bitmap 使用時候注意什么?
?Bitmap的recycler()
?Android中開啟攝像頭的主要步驟
?ViewPager使用細節,如何設置成每次只初始化當前的Fragment,其他的不初始化?
?點擊事件被攔截,但是想傳到下面的View,如何操作?
?微信主頁面的實現方式
?微信上消息小紅點的原理
?CAS介紹(這是阿里巴巴的面試題,我不是很了解,可以參考博客: CAS簡介)

三、混合開發面試題

大廠除了技術深度之外,還要求你具備一些廣度的知識,比如你要會前端知識,會混合開發,至少會一種腳本語言,C c++更不用說了,也是必會的。
?Hybrid做過嗎?
?Hybrid通信原理是什么,有做研究嗎?
?react native有多少了解?講一下原理。
?weex了解嗎?如何自己實現類似技術?
?flutter了解嗎?內部是如何實現跨平臺的?
?Dart語言有研究貴嗎?
?快應用了解嗎?跟其她方式相比有什么優缺點?
?說說你用過的混合開發技術有哪些?各有什么優缺點?
?Python會嗎?
?會不會PHP?
?Gradle了解多少?groovy語法會嗎?

四、高端技術面試題

這里講的是大公司需要用到的一些高端Android技術,這里專門整理了一個文檔,希望大家都可以看看。這些題目有點技術含量,需要好點時間去研究一下的。

(一)圖片
?圖片庫對比
?圖片庫的源碼分析
?圖片框架緩存實現
?LRUCache原理
?圖片加載原理
?自己去實現圖片庫,怎么做?
?Glide源碼解析
?Glide使用什么緩存?
?Glide內存緩存如何控制大小?

(二)網絡和安全機制
?網絡框架對比和源碼分析
?自己去設計網絡請求框架,怎么做?
?okhttp源碼
?網絡請求緩存處理,okhttp如何處理網絡緩存的
?從網絡加載一個10M的圖片,說下注意事項
?TCP的3次握手和四次揮手
?TCP與UDP的區別
?TCP與UDP的應用
?HTTP協議
?HTTP1.0與2.0的區別
?HTTP報文結構
?HTTP與HTTPS的區別以及如何實現安全性
?如何驗證證書的合法性?
?https中哪里用了對稱加密,哪里用了非對稱加密,對加密算法(如RSA)等是否有了解?
?client如何確定自己發送的消息被server收到?
?談談你對WebSocket的理解
?WebSocket與socket的區別
?談談你對安卓簽名的理解。
?請解釋安卓為啥要加簽名機制?
?視頻加密傳輸
?App 是如何沙箱化,為什么要這么做?
?權限管理系統(底層的權限是如何進行 grant 的)?

(三)數據庫
?sqlite升級,增加字段的語句
?數據庫框架對比和源碼分析
?數據庫的優化
?數據庫數據遷移問題

(四)算法
?排序算法有哪些?
?最快的排序算法是哪個?
?手寫一個冒泡排序
?手寫快速排序代碼
?快速排序的過程、時間復雜度、空間復雜度
?手寫堆排序
?堆排序過程、時間復雜度及空間復雜度
?寫出你所知道的排序算法及時空復雜度,穩定性
?二叉樹給出根節點和目標節點,找出從根節點到目標節點的路徑
?給阿里2萬多名員工按年齡排序應該選擇哪個算法?
?GC算法(各種算法的優缺點以及應用場景)
?蟻群算法與蒙特卡洛算法
?子串包含問題(KMP 算法)寫代碼實現
?一個無序,不重復數組,輸出N個元素,使得N個元素的和相加為M,給出時間復雜度、空間復雜度。手寫算法
?萬億級別的兩個URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)
?百度POI中如何試下查找最近的商家功能(提示:坐標鏡像+R樹)。
?兩個不重復的數組集合中,求共同的元素。
?兩個不重復的數組集合中,這兩個集合都是海量數據,內存中放不下,怎么求共同的元素?
?一個文件中有100萬個整數,由空格分開,在程序中判斷用戶輸入的整數是否在此文件中。說出最優的方法
?一張Bitmap所占內存以及內存占用的計算
?2000萬個整數,找出第五十大的數字?
?燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
?求1000以內的水仙花數以及40億以內的水仙花數
?5枚硬幣,2正3反如何劃分為兩堆然后通過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同
?時針走一圈,時針分針重合幾次
?N*N的方格紙,里面有多少個正方形
?x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完?

(五)插件化、模塊化、組件化、熱修復、增量更新、Gradle
?對熱修復和插件化的理解
?插件化原理分析
?模塊化實現(好處,原因)
?熱修復,插件化
?項目組件化的理解
?描述清點擊 Android Studio 的 build 按鈕后發生了什么

(六)架構設計和設計模式
?談談你對Android設計模式的理解
?MVC MVP MVVM原理和區別
?你所知道的設計模式有哪些?
?項目中常用的設計模式
?手寫生產者/消費者模式
?寫出觀察者模式的代碼
?適配器模式,裝飾者模式,外觀模式的異同?
?用到的一些開源框架,介紹一個看過源碼的,內部實現過程。
?談談對RxJava的理解
?RxJava的功能與原理實現
?RxJava的作用,與平時使用的異步操作來比的優缺點
?說說EventBus作用,實現方式,代替EventBus的方式
?從0設計一款App整體架構,如何去做?
?說一款你認為當前比較火的應用并設計(比如:直播APP,P2P金融,小視頻等)
?談談對java狀態機理解
?Fragment如果在Adapter中使用應該如何解耦?
?Binder機制及底層實現
?對于應用更新這塊是如何做的?(解答:灰度,強制更新,分區域更新)?
?實現一個Json解析器(可以通過正則提高速度)
?統計啟動時長,標準

(七)性能優化
?如何對Android 應用進行性能分析以及優化?
?ddms 和 traceView
?性能優化如何分析systrace?
?用IDE如何分析內存泄漏?
?Java多線程引發的性能問題,怎么解決?
?啟動頁白屏及黑屏解決?
?啟動太慢怎么解決?
?怎么保證應用啟動不卡頓?
?App啟動崩潰異常捕捉
?自定義View注意事項
?現在下載速度很慢,試從網絡協議的角度分析原因,并優化(提示:網絡的5層都可以涉及)。
?Https請求慢的解決辦法(提示:DNS,攜帶數據,直接訪問IP)
?如何保持應用的穩定性
?RecyclerView和ListView的性能對比
?ListView的優化
?RecycleView優化
?View渲染
?Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
?java中的四種引用的區別以及使用場景
?強引用置為null,會不會被回收?

(八)NDK、jni、Binder、AIDL、進程通信有關
?請介紹一下NDK
?什么是NDK庫?
?jni用過嗎?
?如何在jni中注冊native函數,有幾種注冊方式?
?Java如何調用c、c++語言?
?jni如何調用java層代碼?
?進程間通信的方式?
?Binder機制
?簡述IPC?
?什么是AIDL?
?AIDL解決了什么問題?
?AIDL如何使用?
?Android 上的 Inter-Process-Communication 跨進程通信時如何工作的?
?多進程場景遇見過么?
?Android進程分類?
?進程和 Application 的生命周期?
?進程調度
?談談對進程共享和線程安全的認識
?談談對多進程開發的理解以及多進程應用場景
?什么是協程?

(九)framework層、ROM定制、Ubuntu、Linux之類的問題
?java虛擬機的特性
?談談對jvm的理解
?JVM內存區域,開線程影響哪塊內存
?對Dalvik、ART虛擬機有什么了解?
?Art和Dalvik對比
?虛擬機原理,如何自己設計一個虛擬機(內存管理,類加載,雙親委派)
?談談你對雙親委派模型理解
?JVM內存模型,內存區域
?類加載機制
?談談對ClassLoader(類加載器)的理解
?談談對動態加載(OSGI)的理解
?內存對象的循環引用及避免
?內存回收機制、GC回收策略、GC原理時機以及GC對象
?垃圾回收機制與調用System.gc()區別
?Ubuntu編譯安卓系統
?系統啟動流程是什么?(提示:Zygote進程 –> SystemServer進程 –> 各種系統服務 –> 應用進程)
?大體說清一個應用程序安裝到手機上時發生了什么
?簡述Activity啟動全部過程
?App啟動流程,從點擊桌面開始
?邏輯地址與物理地址,為什么使用邏輯地址?
?Android為每個應用程序分配的內存大小是多少?
?Android中進程內存的分配,能不能自己分配定額內存?
?進程保活的方式
?如何保證一個后臺服務不被殺死?(相同問題:如何保證service在后臺不被kill?)比較省電的方式是什么?
?App中喚醒其他進程的實現方式

五、非技術性問題&HR問題匯總

這里整理的是一些與技術沒有直接關系的面試題,但是能夠考察你的綜合水平,所以不要以為不是技術問題,就不看,往往有時候就是這樣一些細節的題目被忽視,而錯過了一次次面試機會。

(一)非技術問題
?介紹你做過的哪些項目
?都使用過哪些框架、平臺?
?都使用過哪些自定義控件?
?研究比較深入的領域有哪些?
?對業內信息的關注渠道有哪些?
?最近都讀哪些書?
?有沒有什么開源項目?
?自己最擅長的技術點,最感興趣的技術領域和技術點
?項目中用了哪些開源庫,如何避免因為引入開源庫而導致的安全性和穩定性問題
?實習過程中做了什么,有什么產出?

(二)HR提出的面試問題
?您在前一家公司的離職原因是什么?
?講一件你印象最深的一件事情
?介紹一個你影響最深的項目
?介紹你最熱愛最擅長的專業領域
?公司實習最大的收獲是什么?
?與上級意見不一致時,你將怎么辦?
?自己的優點和缺點是什么?并舉例說明?
?你的學習方法是什么樣的?實習過程中如何學習?實習項目中遇到的最大困難是什么以及如何解決的?
?說一件最能證明你能力的事情
?針對你你申請的這個職位,你認為你還欠缺什么
?如果通過這次面試我們單位錄用了你,但工作一段時間卻發現你根本不適合這個職位,你怎么辦?
?項目中遇到最大的困難是什么?如何解決的?
?你的職業規劃以及個人目標、未來發展路線及求職定位
?如果你在這次面試中沒有被錄用,你怎么打算?
?評價下自己,評價下自己的技術水平,個人代碼量如何?
?通過哪些渠道了解的招聘信息,其他同學都投了哪些公司?
?業余都有哪些愛好?
?你做過的哪件事最令自己感到驕傲?
?假如你晚上要去送一個出國的同學去機場,可單位臨時有事非你辦不可,你怎么辦?
?就你申請的這個職位,你認為你還欠缺什么?
?當前的offer狀況;如果BATH都給了offer該如何選?
?你對一份工作更看重哪些方面?平臺,技術,氛圍,城市,還是money?
?理想薪資范圍;杭州崗和北京崗選哪個?
?理想中的工作環境是什么?
?談談你對跳槽的看法
?說說你對行業、技術發展趨勢的看法
?實習過程中周圍同事/同學有哪些值得學習的地方?
?家人對你的工作期望及自己的工作期望
?如果你的工作出現失誤,給本公司造成經濟損失,你認為該怎么辦?
?若上司在公開會議上誤會你了,該如何解決?
?是否可以實習,可以實習多久?
?在五年的時間內,你的職業規劃

大廠面試題加Android高級進階資料和視屏想要進階的可以獲取哦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。