最全 BATJ 大廠面試題整理!(速度收藏)

網上的都是按照公司劃分的,想找具體某一方面的知識點有點不好找,我這裏就根據知識點分門別類的整理了一下,想看哪一塊可以快速找到,希望可以幫助大家,祝大家求職順利。

主要分爲以下幾部分:

  • (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中喚醒其他進程的實現方式

3非技術性問題&HR問題彙總

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

(一)非技術問題
  • 介紹你做過的哪些項目

  • 都使用過哪些框架、平臺?

  • 都使用過哪些自定義控件?

  • 研究比較深入的領域有哪些?

  • 對業內信息的關注渠道有哪些?

  • 最近都讀哪些書?

  • 有沒有什麼開源項目?

  • 自己最擅長的技術點,最感興趣的技術領域和技術點

  • 項目中用了哪些開源庫,如何避免因爲引入開源庫而導致的安全性和穩定性問題

  • 實習過程中做了什麼,有什麼產出?

(二)HR提出的面試問題
  • 您在前一家公司的離職原因是什麼?

  • 講一件你印象最深的一件事情

  • 介紹一個你影響最深的項目

  • 介紹你最熱愛最擅長的專業領域

  • 公司實習最大的收穫是什麼?

  • 與上級意見不一致時,你將怎麼辦?

  • 自己的優點和缺點是什麼?並舉例說明?

  • 你的學習方法是什麼樣的?實習過程中如何學習?實習項目中遇到的最大困難是什麼以及如何解決的?

  • 說一件最能證明你能力的事情

  • 針對你你申請的這個職位,你認爲你還欠缺什麼

  • 如果通過這次面試我們單位錄用了你,但工作一段時間卻發現你根本不適合這個職位,你怎麼辦?

  • 項目中遇到最大的困難是什麼?如何解決的?

  • 你的職業規劃以及個人目標、未來發展路線及求職定位

  • 如果你在這次面試中沒有被錄用,你怎麼打算?

  • 評價下自己,評價下自己的技術水平,個人代碼量如何?

  • 通過哪些渠道瞭解的招聘信息,其他同學都投了哪些公司?

  • 業餘都有哪些愛好?

  • 你做過的哪件事最令自己感到驕傲?

  • 假如你晚上要去送一個出國的同學去機場,可單位臨時有事非你辦不可,你怎麼辦?

  • 就你申請的這個職位,你認爲你還欠缺什麼?

  • 當前的offer狀況;如果BATH都給了offer該如何選?

  • 你對一份工作更看重哪些方面?平臺,技術,氛圍,城市,還是money?

  • 理想薪資範圍;杭州崗和北京崗選哪個?

  • 理想中的工作環境是什麼?

  • 談談你對跳槽的看法

  • 說說你對行業、技術發展趨勢的看法

  • 實習過程中周圍同事/同學有哪些值得學習的地方?

  • 家人對你的工作期望及自己的工作期望

  • 如果你的工作出現失誤,給本公司造成經濟損失,你認爲該怎麼辦?

  • 若上司在公開會議上誤會你了,該如何解決?

  • 是否可以實習,可以實習多久?

  • 在五年的時間內,你的職業規劃

  • 你看中公司的什麼?或者公司的那些方面最吸引你?


原文發佈時間爲:2018-10-9

本文作者:全校開發者社區

本文來自雲棲社區合作伙伴“全棧開發者社區”,瞭解相關信息可以關注“全棧開發者社區”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章