你離BAT之間,只差這一套Java面試題

最近,各大公司開始了春招,不少人已經開始在準備面試了,特意來總結下初中級程序員應該掌握的面試題目。這篇面試指南,只適用於初中級程序員,其中不涉及分佈式等問題。關於中高級的程序員問題,我後面可能再出一篇文章。java

對於一個初中級程序員來講,面試問題不只僅涉及到Java語言,還會包括不少其餘知識,好比計算機基礎知識(數據結構、計算機網絡、操做系統等)、C語言基礎、Java底層知識以及一些框架相關知識等。本文幾乎覆蓋到了全部領域。c++

  1. 計算機基礎知識
  2. C語言基礎
  3. Java基礎
  4. Java高級
  5. Java Web
  6. 設計模式
  7. 知識的綜合能力
  8. 工具使用
  9. 項目相關
  10. 技術熱情
  11. 表達能力
  12. 思考方式
  13. 其餘
  14. 推薦閱讀

還有,我知道不少人會問關於這些題目的答案問題。答案我都有,因爲篇幅有限沒辦法直接貼上來。這些題目的答案我會在個人公衆號及知識星球中給出,感謝關注。git

爲了方便,我把他們分了類,有一些是必看的,我用!標註,有一些進階型的我用%標註,有一些須要瞭解的,我用?標註。程序員

必會關鍵字

void byte int long char short float double String StringBuffer StringBuilder Array CollectionCollections List ArrayList LinkedList Vector Set HashMap TreeMap LinkedHashMapConcerrentHashMap Set TreeMap HashMap synchronized volatile transient implements extendspublic private protected this super static final const run start thread enmu stack queue listheap throw throws try catch finally break continue instanceof

計算機基礎知識

數據結構

!一、什麼是隊列、棧、鏈表web

!二、什麼是樹(平衡樹,排序樹,B樹,B+樹,R樹,紅黑樹)、堆(大根堆、小根堆)、圖(有向圖、無向圖、拓撲)面試

!三、棧和隊列的相同和不一樣之處ajax

?四、棧一般採用的兩種存儲結構正則表達式

%五、兩個棧實現隊列,和兩個隊列實現棧算法

算法

!一、排序都有哪幾種方法?spring

!二、會寫經常使用的排序算法,如快排,歸併等。

%三、各類排序算法的時間複雜度穩定性 ,重點快排。

!四、單鏈表的遍歷和逆序

!五、深度優先搜索廣度優先搜索

?六、最小生成樹

!七、常見Hash算法,哈希的原理和代價

%八、全排列、貪心算法、KMP算法、hash算法

?九、一致性Hash算法

操做系統

?一、虛擬內存管理

?二、換頁算法

!三、進程間通訊

?四、進程同步:生產者消費者問題、哲學家就餐問題、讀者寫者問題

!五、死鎖的四個必要條件,避免方法

!六、Linux的一些基本命令,如lstailchmod

計算機網絡

!一、tcp,udp區別

!二、HTTP請求和響應的全過程

!三、HTTP常見響應碼:200、30一、30二、40四、500

!四、get和post的區別

!五、forward和redirect的區別

!六、osi七層模型

!七、tcp/ip四層模型及原理

!八、TCP和UDP區別

!九、TCP的三次握手,四次關閉

%十、丟包,粘包,

?十一、容量控制,擁塞控制

?十二、子網劃分

%1三、IPV4和IPV6

?1四、HTTPS和HTTP/2

數據庫:

!一、範式

!二、數據庫事務和隔離級別

!三、爲何須要鎖,鎖定分類,鎖粒度

%四、樂觀鎖悲觀鎖的概念及實現方式

!五、分頁如何實現(OracleMySql

!六、Mysql引擎

?七、MYSQL語句優化

%八、從一張大表讀取數據,如何解決性能問題

!九、內鏈接左鏈接右鏈接做用及區別

!十、StatementPreparedStatement之間的區別

%十一、索引以及索引的實現(B+樹介紹、和B樹、R樹區別

?十二、什麼是數據庫鏈接池

海量數據處理

%一、海量日誌數據,如何提取出某日訪問淘寶次數最多的IP

%二、上億數據,統計其中出現次數最多的前N個數據

%三、5億個int,找出他們的中位數

%四、兩個文件,各存放50億條URL,每一個URL佔64字節。內存限制是4G,找出兩個文件中相同的URL

%五、有40億個不重複的unsigned int的整數,沒排過序,如今給一個數,如何快速判斷這個數是否在這40億個數當中。

?六、提示:分治、Hash映射、堆排序、雙層桶劃分、Bloom filter、bitmap、數據庫索引、mapreduce

C語言基礎

構造函數、析構函數

!一、構造函數和析構函數

%二、爲何不要在構造器中調用虛函數

%三、爲何不要在析構函數中拋出異常

c++相關

!一、面向對象的三大基本特徵,五大基本原則

%二、C++繼承的內存佈局

!三、C++多態的實現機制

!四、new/deletr和malloc/free的區別

其餘

!一、爲何使用補碼

%二、C語言中的內存泄漏

!三、進制轉換

% 四、本身編寫strlen/strcpy/strcmp

! 五、C、C++以及Java之間的區別和各自優缺點

Java基礎

封裝、繼承、多態

!一、Java中實現多態的機制是什麼,動態多態和靜態多態的區別

!二、接口和抽象類的區別,如何選擇

!三、Java能不能多繼承,可不能夠多實現

%四、Static Nested Class 和 Inner Class的不一樣

!五、重載和重寫的區別。

!六、是否能夠繼承String

!七、構造器是否可被override?

!八、public,protected,private的區別?

集合相關

!一、列舉幾個Java中Collection類庫中的經常使用類

!二、ListSetMap是否都繼承自Collection接口?存儲特色分別是什麼?

!三、ArrayListLinkedListVector之間的區別與聯繫

!四、HashMapHashtableTreeMap以及ConcurrentHashMap的區別

!五、Collection 和 Collections的區別

%六、其餘的集合類:treeset,linkedhashmap等。

異常相關

!一、ErrorException的區別

!二、異常的類型,什麼是運行時異常

!三、finalfinallyfinalize的區別

%四、try-catch-finally中,若是在catchreturn了,finally中的代碼還會執行麼,原理是什麼?

!五、列舉3個以上的RuntimeException

!六、Java中的異常處理機制的簡單原理和應用

其它

!一、StringStringBufferStringBuilder的區別

!二、==equals的區別

%三、hashCode的做用,和equals方法的關係

!四、Input/OutputStreamReader/Writer有什麼區別

!五、如何在字符流和字節流之間轉換?

!六、switch可使用那些數據類型

%七、Java的四種引用

!八、序列化與反序列化

!九、正則表達式

!十、intInteger的區別,什麼是自動裝箱和自動拆箱

Java高級

多線程

!一、進程和線程的區別

!二、並行和併發的區別和聯繫

!三、同步與異步

!四、多線程的實現方式,有什麼區別

!五、什麼叫守護線程

%六、如何中止一個線程?

!七、什麼是線程安全

!八、synchronized 和 lock的區別

!九、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?

!十、啓動一個線程是用run()仍是start()?

!十二、wait和sleep的區別

%1三、notify和notifyAll的區別

%1四、線程池的做用

%1五、Java中線程池相關的類

JVM底層技術

!一、gc的概念,若是A和B對象循環引用,是否能夠被GC?

%二、jvm gc如何判斷對象是否須要回收,有哪幾種方式?

!三、Java中能不能主動觸發GC

!四、JVM的內存結構,堆和棧的區別

!五、JVM堆的分代

%六、Java中的內存溢出是什麼,和內存泄露有什麼關係

!七、Java的類加載機制,什麼是雙親委派

!八、ClassLoader的類加載方式

IO

! 一、NIO、AIO和BIO 之間的區別

?二、IONIO經常使用用法

其它

?一、hashcode 有哪些算法

!二、反射的基本概念,反射是否能夠調用私有方法

!三、Java中範型的概念

?四、JVM啓動參數,-Xms和 -Xmx

%五、代理機制的實現

!六、String s = new String("s"),建立了幾個對象。

Java Web

Servlet

!一、JSPServlet的區別,Servelt的概念。

!二、Servlet的生命週期

!三、Servlet中的session工做原理 ,以及設置過時時間的方式

!四、Servlet中,filter的應用場景有哪些?

?五、JSP的動態include和靜態include

%六、web.xml中經常使用配置及做用

%七、Servlet的線程安全問題

MVC框架

!一、介紹幾個經常使用的MVC框架

!二、什麼是MVC

!三、Struts中請求的實現過程

%四、Spring mvcStruts mvc的區別

?五、Service嵌套事務處理,如何回滾

!六、struts2 中攔截器與過濾器的區別及執行順序

%七、struts2攔截器的實現原理

http相關

!一、sessioncookie的區別

!二、HTTP請求中session實現原理?

%三、若是客戶端禁止Cookie能實現Session嗎

!四、http中 getpost區別

!五、redirectforward的區別

!六、常見的web請求返回的狀態碼。40四、30二、30一、500分別表明什麼

SSH相關

?一、Hibernate/Ibatis/MyBatis之間的區別

?二、什麼是OR Mapping

%三、hibernate的緩存機制、一級和二級緩存

!四、使用Spring的好處是什麼,Spring的核心理念

!五、什麼是AOPIOC,實現原理是什麼

!六、spring bean的初始化過程

!七、Spring的事務管理 ,Spring bean注入的幾種方式

%八、spring四種依賴注入方式

容器相關

!一、什麼是web服務器、什麼是應用服務器

!二、經常使用的web服務器有哪些?

?三、Tomcatweblogic的區別

web安全

!一、什麼是SQL注入 ,如何避免。

%二、什麼是XSS攻擊,如何避免

%三、什麼是CSRF攻擊,如何避免

動態代理

!一、Java的動態代理的概念

%二、Java的動態代理的實現

編碼問題

!一、經常使用的字符編碼

!二、如何解決中文亂碼問題

其它

%一、XML的解析方式,以及優缺點。

%二、什麼是ajax,Ajax如何解決跨域問題

設計模式

%一、談一下本身瞭解或者熟悉的設計模式

!二、Singleton的幾種實現方式,實現一個線程安全的單例。

?三、工廠模式抽象工廠模式之間的區別

知識的綜合能力

!一、請介紹一下一個http請求的全過程,描述的越全面越好

!二、當你在瀏覽器地址欄輸入www.taobao.com,敲下回車以後都發生了什麼

工具使用

!一、知道git/svn是幹什麼的嗎?用過嗎

!二、知道maven/gradle是幹什麼的嗎?用過嗎

!三、日常使用什麼IDE,爲何

!四、日常使用什麼瀏覽器,爲何

!五、日常開發機器是什麼操做系統的

!六、會在Linux上開發嗎。Linux經常使用命令會嗎

項目相關

!一、請簡單介紹一下你的這個項目

!二、你在這個項目中充當什麼角色

!三、這個項目的技術選型有作過麼。

!四、選擇某項技術作過哪些調研和對比

!五、這個項目中遇到的最大的問題是什麼?你是如何解決的。

!六、項目中是否考慮過性能、安全性等問題

技術熱情

!一、當前Java的最新版本

!二、Java8的lambda表達式

%三、Java8的stream API

%四、Java9的模塊化

%五、Java10的局部變量類型推斷

%六、Spring Boot2.0

%七、HTTP/2

%八、會FQ麼,知道FQ的原理嗎

!九、你最近在讀什麼書

表達能力

!一、能不能簡單作一個自我介紹。

!二、能不能描述一下杭州給你的印象。用三句話歸納一下。

思考方式

!一、如何估算杭州有多少軟件工程師

!二、你最近讀過的印象最深的文章是什麼

!三、這篇文章中有幾個觀點,你最同意哪個,最不同意哪個

其餘

!一、你對加班怎麼看

!二、你還有什麼問題要問我(面試官)的麼

推薦閱讀

程序員面試筆試寶典

程序員面試金典

Java編程思想

Effective Java

深刻理解Java虛擬機

大話數據結構

劍指Offer

!我的公衆號(Java團長)

最近,我公衆號的粉絲,部分拿到了阿里、京東、58等offer<,均表示這套題目覆蓋率幾乎能夠達到80%。快來關注個人公衆號吧,一塊兒進步!

我有一個微信公衆號,常常會分享一些Java技術相關的乾貨;若是你喜歡個人分享,能夠用微信搜索「Java團長」或者「javatuanzhang」關注。

相關文章
相關標籤/搜索