天天看點

面試BAT時,他們問了我這些!(下)

分類題集

Java基礎:

面向對象和面向過程的差別

Java的四個基本特性(抽象、封裝、繼承,多态)

Overload和Override的差別

構造器Constructor是否可被override

通路控制符public,protected,private,以及預設的差別

是否可以繼承String類

String和StringBuffer、StringBuilder的差別

hashCode和equals方法的關系

抽象類和接口的差別

自動裝箱與拆箱

什麼是泛型、為什麼要使用以及泛型擦除

Java中的集合類及關系圖

HashMap實作原理(看源代碼)

HashTable實作原理(看源代碼)

HashMap和HashTable差別

HashTable如何實作線程安全(看源代碼)

ArrayList和vector差別(看源代碼)

ArrayList和LinkedList差別及使用場景

Collection和Collections的差別

Concurrenthashmap實作原理(看源代碼)

Error、Exception差別

Unchecked Exception和Checked Exception,各列舉幾個

Java中如何實作代理機制(JDK、CGLIB)

多線程的實作方式

線程的狀态轉換

如何停止一個線程

什麼是線程安全

如何保證線程安全

Synchronized如何使用

synchronized和Lock的差別

多線程如何進行資訊互動

sleep和wait的差別(考察的方向是是否會釋放鎖)

多線程與死鎖

如何才能産生死鎖

什麼叫守護線程,用什麼方法實作守護線程

Java線程池技術及原理

java并發包concurrent及常用的類

volatile關鍵字

Java中的NIO,BIO,AIO分别是什麼

IO和NIO差別

序列化與反序列化

常見的序列化協定有哪些

記憶體溢出和記憶體洩漏的差別

Java記憶體模型及各個區域的OOM,如何重制OOM

出現OOM如何解決

用什麼工具可以查出記憶體洩漏

Java記憶體管理及回收算法

Java類加載器及如何加載類(雙親委派)

xml解析方式

Statement和PreparedStatement之間的差別

JavaEE:

servlet生命周期及各個方法

servlet中如何自定義filter

JSP原理

JSP和Servlet的差別

JSP的動态include和靜态include

Struts中請求處理過程

MVC概念

Spring mvc與Struts差別

Hibernate/Ibatis兩者的差別

Hibernate一級和二級緩存

Hibernate實作叢集部署

Hibernate如何實作聲明式事務

簡述Hibernate常見優化政策

Spring bean的加載過程(推薦看Spring的源碼)

Spring如何實作AOP和IOC

Spring bean注入方式

Spring的事務管理(推薦看Spring的源碼)

Spring事務的傳播特性

springmvc原理

springmvc用過哪些注解

Restful有幾種請求

Restful好處

Tomcat,Apache,JBoss的差別

memcached和redis的差別

有沒有遇到中文亂碼問題,如何解決的

如何了解分布式鎖

你知道的開源協定有哪些

json和xml差別

設計模式:

設計模式的六大原則

常用的設計模式

用一個設計模式寫一段代碼或畫出一個設計模式的UML

如何了解MVC

高内聚,低耦合方面的了解

算法:

深度優先、廣度優先算法

排序算法及對應的時間複雜度和空間複雜度

寫一個排序算法

查找算法

B+樹和二叉樹查找時間複雜度

KMP算法、hash算法

常用的hash算法有哪些

如何判斷一個單連結清單是否有環?

給你一萬個數,如何找出裡面所有重複的數?用所有你能想到的方法,時間複雜度和空間複雜度分别是多少?

給你一個數組,如何裡面找到和為K的兩個數?

100000個數找出最小或最大的10個?

一堆數字裡面繼續去重,要怎麼處理?

資料結構:

隊列、棧、連結清單、樹、堆、圖

編碼實作隊列、棧

Linux:

linux常用指令

如何檢視記憶體使用情況

Linux下如何進行程序排程

作業系統:

作業系統什麼情況下會死鎖

産生死鎖的必要條件

死鎖預防

資料庫:

範式

資料庫事務隔離級别

資料庫連接配接池的原理

樂觀鎖和悲觀鎖

如何實作不同資料庫的資料查詢分頁

SQL注入的原理,如何預防

資料庫索引的實作(B+樹介紹、和B樹、R樹差別)

SQL性能優化

資料庫索引的優缺點以及什麼時候資料庫索引失效

Redis的存儲結構

網絡:

OSI七層模型以及TCP/IP四層模型

HTTP和HTTPS差別

HTTP封包内容

get送出和post送出的差別

get送出是否有位元組限制,如果有是在哪限制的

TCP的三次握手和四次揮手

session和cookie的差別

HTTP請求中Session實作原理

redirect與forward差別

DNS

TCP和UDP差別

安全:

如果用戶端不斷的發送請求連接配接會怎樣

DDos攻擊

DDos預防

那怎麼知道連接配接是惡意的呢?可能是正常連接配接

其它:

說一個你參與的項目、其中作為什麼角色

遇到最困的問題是什麼,怎麼解決的

你認為自己有那些方面不足

平常如何學習的

如何評價自己

智力題:

給你50個紅球和50個黑球,有兩個一模一樣的桶,往桶裡放球,讓朋友去随機抽,采用什麼政策可以讓朋友抽到紅球的機率更高?

從100個硬币中找出最輕的那個假币?

 【 BAT面試經驗總結】

【 BAT面試經驗總結】

總結下來,面試題目主要集中在:

1.進階Java,譬如虛拟機、并發線程、分布式、NIO等。

2.中間件方面,譬如Redis的實作原理、叢集、資料存儲、持久化等。

3.後端部分,譬如候選人的MySQL資料庫的掌握情況,從索引、sql慢查詢、長事務等性能優化方面。

4.自己實操過的項目,是面試中的重點,從容從設計到編碼,以及後續環境部署等等。

5.大資料相關的算法題目必問。

6.秒殺、高并發項目也是必問的,主要考查候選人對高并發場景的技術知識點掌握程度。

7.面試過程中自信很重要,即便遇到不會的問題,也坦然回答,在面試結束虛心請教面試官,可以給面試官留下謙遜愛學習的印象。

面試題目涉及範圍比較廣泛,從技術基礎到項目經驗,從技術廣度到技術深度,全方位深度挖掘候選人的技能水準。建議大家在參加任何一家公司的面試之前,都要多花時間溫故而知新,準備充分,這樣在面試過程中會從容很多,也能提高拿到offer的機率。