1. 程式人生 > >史上最全 BAT 大廠面試題整理

史上最全 BAT 大廠面試題整理

主要分為以下幾部分:

  • (1)java面試題

  • (2)Android面試題

  • (3)高階技術面試題

  • (4)非技術性問題&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),具體的可以看看這篇博文 Java容器類 http://alexyyek.github.io/2015/04/06/Collection/

  • 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的關於執行緒相關的原始碼級別的東西。

2Android面試題

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的作用與理解

(三)常見的一些原理性問題
  • 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?

  • 相關推薦

    BAT 大廠試題整理

    主要分為以下幾部分:(1)java面試題(2)Android面試題(3)高階技術面試題(4)非技術性問題&HR問題彙總1java面試題熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉原始碼實現原理,甚至要你知道有哪些不足,怎麼改進,還有

    阿里 Java 試題總結

    以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識點和相關試題。 JAVA基礎 JAVA中的幾種基本資料型別是什麼,各自佔用多少位元組。 String類能被繼承嗎,為什麼。 String,Stringbuffer

    的iOS試題及答案

    最近在做iOS面試,總結一些實用的面試題以及參考答案,供博友們交流溝通。 可用一些不明確的技術要點引起話題,如: Multithreading:什麼時候處理多執行緒,幾種方式,優缺點。 Delegate, Notification,KVO, other 優

    的Unity試題(含答案)

    一.什麼是渲染管道? 是指在顯示器上為了顯示出影象而經過的一系列必要操作。 渲染管道中的很多步驟,都要將幾何物體從一個座標系中變換到另一個座標系中去。 主要步驟有: 本地座標->檢視座標->背面裁剪->光照->裁剪->投影->檢視變換->光柵化。

    的 struts2 試題

    1 Struts2與Struts1的聯絡與區別 為什麼要用Struts2struts1與struts2都是mvc框架的經典實現模式。Struts2不是從Struts1升級而來,而是有WebWork改名而來,而WebWork只是Xwork加了很多WEB攔截器而已.區別: 1.

    | 前端工程師試題彙總

    A、B兩人分別在兩座島上。B生病了,A有B所需要的藥。C有一艘小船和一個可以上鎖的箱子。C願意在A和B之間運東西,但東西只能放在箱子裡。只要箱子沒被上鎖,C都會偷走箱子裡的東西,不管箱子裡有什麼。如果A和B各自有一把鎖和只能開自己那把鎖的鑰匙,A應該如何把東西安全遞交給B? 答案:A把藥放進箱子,用自

    Spring Boot試題(含答案)看完就是Spring Boot專家!

      一.Spring Boot、Spring MVC 和 Spring 有什麼區別? SpringFrame

    的資料庫面試題,不看絕對後悔

    資料庫面試知識點彙總 一、基本概念 1.主鍵、外來鍵、超鍵、候選鍵 超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。 候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。 主鍵:資料庫表中對儲存資料物件予以唯一和完

    python常見面試題

    大資料的檔案讀取   ① 利用生成器generator   ②迭代器進行迭代遍歷:for line in file 迭代器和生成器的區別 1)迭代器是一個更抽象的概念,任何物件,如果它的類有next方法和iter方法返回自己本身。對於string、list、dic

    如何修改int的列印內容——難的JAVA試題

    序 今天看到了一個比較特別的面試題,考察的是如何改變int的System.out.print的結果。題目如下: 下面的一句話“這是初級java實習生面試題”非常挑釁的激起了大家做題的慾望。 解題思路 解題的思路無外乎是3種方法: 1.作弊大法,

    乾貨 | 中文分詞工具整理

    作者 | fendouai 一.中文分詞  分詞服務介面列表 二.準確率評測: THULAC:與代表性分詞軟體的效能對比 我們選擇LTP-3.2.0 、ICTCLAS(2015版) 、jieba(C++版)等國內具代表性的分詞軟體與THULAC做效能

    BAT大廠Mysql試題在這裡!

    1、MySQL的複製原理以及流程 基本原理流程,3個執行緒以及之間的關聯; 主:binlog執行緒——記錄下所有改變了資

    Java多線程試題及答案

    blog 上下文 exec 線程 單例 通信 流轉 排查 創建 多線程有什麽用? 線程和進程的區別是什麽? Java實現線程有哪幾種方式? 啟動線程方法start()和run()有什麽區別? 怎麽終止一個線程?如何優雅地終止線程? 一個線程的生命周期

    69 道 Spring 試題和答案

    str 路徑 輕量 情況下 list 開發 erp throw 解決方案 史上最全 69 道 Spring 面試題和答案 目錄Spring 概述依賴註入Spring beansSpring註解Spring數據訪問Spring面向切面編程(AOP)Spring MVC S

    50 道 Redis 試題及答案

    1、什麼是Redis? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,Redis的效能非常出色,每秒可以處理超過 10

    50 道 Redis 試題

    1、什麼是Redis? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,Redis的效能非常出色,每秒可以處理超過

    python試題詳解 (二)(附帶詳細答案(關注、持續更新))

    23、re的match和search區別? re.match()從開頭開始匹配string。 re.search()從anywhere 來匹配string。 # 多行模式>>> re.match('X', 'A\nB\nX', re.MULTILINE) # No ma

    python試題詳解(三)(附帶詳細答案(關注、持續更新))

    38、面向物件深度優先和廣度優先是什麼?     39、面向物件中super的作用? 40、是否使用過functools中的函式?其作用是什麼? 1 Python自帶的 functools 模組提供了一些常用的高階函式,也就是用於處理其它函式的特殊函式。

    40 道 Dubbo 試題及答案,看完碾壓面試官!

    想往高處走,怎麼能不懂 Dubbo? Dubbo是國內最出名的分散式服務框架,也是 Java 程式設計師必備的必會的框架之一。Dubbo 更是中高階面試過程中經常會問的技術,無論你是否用過,你都必須熟悉。 下面我為大家準備了一些 Dubbo 常見的的面試題,一些是我經常問

    Redis 試題 50 問,

    1、什麼是Redis? Redis本質上是一個Key-Value型別的記憶體資料庫,很像memcached,整個資料庫統統載入在記憶體當中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,Redis的效能非常出色,每秒可以處理超過