網上的都是按照公司劃分的,想找具體某一方面的知識點有點不好找,我這裏就根據知識點分門別類的整理了一下,想看哪一塊可以快速找到,希望可以幫助大家,祝大家求職順利。
主要分爲以下幾部分:
-
(1)java面試題
-
(2)高端技術面試題
-
(3)非技術性問題&HR問題彙總
1java面試題
熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉源碼實現原理,甚至要你知道有哪些不足,怎麼改進,還有一些java有關的一些算法,設計模式等等。
(一) java基礎面試知識點
-
java中==和equals和hashCode的區別
-
int、char、long各佔多少字節數
-
int與integer的區別
-
探探對java多態的理解
-
String、StringBuffer、StringBuilder區別
-
什麼是內部類?內部類的作用
-
抽象類和接口區別
-
抽象類的意義
-
抽象類與接口的應用場景
-
抽象類是否可以沒有方法和屬性?
-
接口的意義
-
泛型中extends和super的區別
-
父類的靜態方法能否被子類重寫
-
進程和線程的區別
-
final,finally,finalize的區別
-
序列化的方式
-
Serializable 和Parcelable 的區別
-
靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?
-
靜態內部類的設計意圖
-
成員內部類、靜態內部類、局部內部類和匿名內部類的理解,以及項目中的應用
-
談談對kotlin的理解
-
閉包和局部內部類的區別
-
string 轉換成 integer的方式及原理
(二) java深入源碼級的面試題(有難度)
-
哪些情況下的對象會被垃圾回收機制處理掉?
-
講一下常見編碼方式?
-
utf-8編碼中的中文佔幾個字節;int型幾個字節?
-
靜態代理和動態代理的區別,什麼場景使用?
-
Java的異常體系
-
談談你對解析與分派的認識。
-
修改對象A的equals方法的簽名,那麼使用HashMap存放這個對象實例的時候,會調用哪個equals方法?
-
Java中實現多態的機制是什麼?
-
如何將一個Java對象序列化到文件裏?
-
說說你對Java反射的理解
-
說說你對Java註解的理解
-
說說你對依賴注入的理解
-
說一下泛型原理,並舉例說明
-
Java中String的瞭解
-
String爲什麼要設計成不可變的?
-
Object類的equal和hashCode方法重寫,爲什麼?
(三) 數據結構
-
常用數據結構簡介
-
併發集合瞭解哪些?
-
列舉java的集合以及集合之間的繼承關係
-
集合類以及集合框架
-
容器類介紹以及之間的區別(容器類估計很多人沒聽這個詞,Java容器主要可以劃分爲4個部分:List列表、Set集合、Map映射、工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections)。
-
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的關於線程相關的源碼級別的東西。
2高端技術面試題這裏講的是大公司需要用到的一些高端技術,這裏專門整理了一個文檔,希望大家都可以看看。這些題目有點技術含量,需要好點時間去研究一下的。
(一)圖片
-
圖片庫對比
-
圖片庫的源碼分析
-
圖片框架緩存實現
-
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提出的面試問題
-
您在前一家公司的離職原因是什麼?
-
講一件你印象最深的一件事情
-
介紹一個你影響最深的項目
-
介紹你最熱愛最擅長的專業領域
-
公司實習最大的收穫是什麼?
-
與上級意見不一致時,你將怎麼辦?
-
自己的優點和缺點是什麼?並舉例說明?
-
你的學習方法是什麼樣的?實習過程中如何學習?實習項目中遇到的最大困難是什麼以及如何解決的?
-
說一件最能證明你能力的事情
-
針對你你申請的這個職位,你認爲你還欠缺什麼
-
如果通過這次面試我們單位錄用了你,但工作一段時間卻發現你根本不適合這個職位,你怎麼辦?
-
項目中遇到最大的困難是什麼?如何解決的?
-
你的職業規劃以及個人目標、未來發展路線及求職定位
-
如果你在這次面試中沒有被錄用,你怎麼打算?
-
評價下自己,評價下自己的技術水平,個人代碼量如何?
-
通過哪些渠道瞭解的招聘信息,其他同學都投了哪些公司?
-
業餘都有哪些愛好?
-
你做過的哪件事最令自己感到驕傲?
-
假如你晚上要去送一個出國的同學去機場,可單位臨時有事非你辦不可,你怎麼辦?
-
就你申請的這個職位,你認爲你還欠缺什麼?
-
當前的offer狀況;如果BATH都給了offer該如何選?
-
你對一份工作更看重哪些方面?平臺,技術,氛圍,城市,還是money?
-
理想薪資範圍;杭州崗和北京崗選哪個?
-
理想中的工作環境是什麼?
-
談談你對跳槽的看法
-
說說你對行業、技術發展趨勢的看法
-
實習過程中周圍同事/同學有哪些值得學習的地方?
-
家人對你的工作期望及自己的工作期望
-
如果你的工作出現失誤,給本公司造成經濟損失,你認爲該怎麼辦?
-
若上司在公開會議上誤會你了,該如何解決?
-
是否可以實習,可以實習多久?
-
在五年的時間內,你的職業規劃
-
你看中公司的什麼?或者公司的那些方面最吸引你?
原文發佈時間爲:2018-10-9
本文作者:全校開發者社區