你离BAT之间,只差这一套Java面试题
最近,各大公司開始了春招,很多人已經(jīng)開始在準(zhǔn)備面試了,特地來總結(jié)下初中級程序員應(yīng)該掌握的面試題目。這篇面試指南,只適用于初中級程序員,其中不涉及分布式等問題。關(guān)于中高級的程序員問題,我后面可能再出一篇文章。
對于一個初中級程序員來說,面試問題不僅僅涉及到Java語言,還會包括很多其他知識,比如計算機基礎(chǔ)知識(數(shù)據(jù)結(jié)構(gòu)、計算機網(wǎng)絡(luò)、操作系統(tǒng)等)、C語言基礎(chǔ)、Java底層知識以及一些框架相關(guān)知識等。本文幾乎覆蓋到了所有領(lǐng)域。
還有,我知道很多人會問關(guān)于這些題目的答案問題。答案我都有,由于篇幅有限沒辦法直接貼上來。這些題目的答案我會在我的公眾號及知識星球中給出,感謝關(guān)注。
為了方便,我把他們分了類,有一些是必看的,我用!標(biāo)注,有一些進階型的我用%標(biāo)注,有一些需要了解的,我用?標(biāo)注。
必會關(guān)鍵字
void?byte?int?long?char?short?float?double?String?StringBufferStringBuilder?Array?Collection?Collections?List?ArrayList?LinkedListVector?Set?HashMap?TreeMap?LinkedHashMap?ConcerrentHashMap?Set?TreeMapHashMap?synchronized?volatile?transient?implements?extends?public?privateprotected?this?super?static?final?const?run?start?thread?enmu?stackqueue?list?heap?throw?throws?try?catch?finally?break?continue?instanceof
計算機基礎(chǔ)知識
數(shù)據(jù)結(jié)構(gòu)
!1、什么是隊列、棧、鏈表
!2、什么是樹(平衡樹,排序樹,B樹,B+樹,R樹,紅黑樹)、堆(大根堆、小根堆)、圖(有向圖、無向圖、拓?fù)?#xff09;
!3、棧和隊列的相同和不同之處
?4、棧通常采用的兩種存儲結(jié)構(gòu)
%5、兩個棧實現(xiàn)隊列,和兩個隊列實現(xiàn)棧
算法
!1、排序都有哪幾種方法?
!2、會寫常用的排序算法,如快排,歸并等。
%3、各種排序算法的時間復(fù)雜度和穩(wěn)定性?,重點快排。
!4、單鏈表的遍歷和逆序
!5、深度優(yōu)先搜索和廣度優(yōu)先搜索
?6、最小生成樹
!7、常見Hash算法,哈希的原理和代價
%8、全排列、貪心算法、KMP算法、hash算法
?9、一致性Hash算法
操作系統(tǒng)
?1、虛擬內(nèi)存管理
?2、換頁算法
!3、進程間通信
?4、進程同步:生產(chǎn)者消費者問題、哲學(xué)家就餐問題、讀者寫者問題
!5、死鎖的四個必要條件,避免方法
!6、Linux的一些基本命令,如ls、tail、chmod等
計算機網(wǎng)絡(luò)
!1、tcp,udp區(qū)別
!2、HTTP請求和響應(yīng)的全過程
!3、HTTP常見響應(yīng)碼:200、301、302、404、500
!4、get和post的區(qū)別
!5、forward和redirect的區(qū)別
!6、osi七層模型
!7、tcp/ip四層模型及原理
!8、TCP和UDP區(qū)別
!9、TCP的三次握手,四次關(guān)閉
%10、丟包,粘包,
?11、容量控制,擁塞控制
?12、子網(wǎng)劃分
%13、IPV4和IPV6
?14、HTTPS和HTTP/2
數(shù)據(jù)庫:
!1、范式
!2、數(shù)據(jù)庫事務(wù)和隔離級別
!3、為什么需要鎖,鎖定分類,鎖粒度
%4、樂觀鎖,悲觀鎖的概念及實現(xiàn)方式
!5、分頁如何實現(xiàn)(Oracle,MySql)
!6、Mysql引擎
?7、MYSQL語句優(yōu)化
%8、從一張大表讀取數(shù)據(jù),如何解決性能問題
!9、內(nèi)連接,左連接,右連接作用及區(qū)別
!10、Statement和PreparedStatement之間的區(qū)別
%11、索引以及索引的實現(xiàn)(B+樹介紹、和B樹、R樹區(qū)別
?12、什么是數(shù)據(jù)庫連接池
海量數(shù)據(jù)處理
%1、海量日志數(shù)據(jù),如何提取出某日訪問淘寶次數(shù)最多的IP
%2、上億數(shù)據(jù),統(tǒng)計其中出現(xiàn)次數(shù)最多的前N個數(shù)據(jù)
%3、5億個int,找出他們的中位數(shù)
%4、兩個文件,各存放50億條URL,每個URL占64字節(jié)。內(nèi)存限制是4G,找出兩個文件中相同的URL
%5、有40億個不重復(fù)的unsigned int的整數(shù),沒排過序,現(xiàn)在給一個數(shù),如何快速判斷這個數(shù)是否在這40億個數(shù)當(dāng)中。
?6、提示:分治、Hash映射、堆排序、雙層桶劃分、Bloom filter、bitmap、數(shù)據(jù)庫索引、mapreduce
C語言基礎(chǔ)
構(gòu)造函數(shù)、析構(gòu)函數(shù)
!1、構(gòu)造函數(shù)和析構(gòu)函數(shù)
%2、為什么不要在構(gòu)造器中調(diào)用虛函數(shù)
%3、為什么不要在析構(gòu)函數(shù)中拋出異常
c++相關(guān)
!1、面向?qū)ο蟮娜蠡咎卣?#xff0c;五大基本原則
%2、C++繼承的內(nèi)存布局
!3、C++多態(tài)的實現(xiàn)機制
!4、new/deletr和malloc/free的區(qū)別
其他
!1、為什么使用補碼
%2、C語言中的內(nèi)存泄漏
!3、進制轉(zhuǎn)換
%?4、自己編寫strlen/strcpy/strcmp
!?5、C、C++以及Java之間的區(qū)別和各自優(yōu)缺點
Java基礎(chǔ)
封裝、繼承、多態(tài)
!1、Java中實現(xiàn)多態(tài)的機制是什么,動態(tài)多態(tài)和靜態(tài)多態(tài)的區(qū)別
!2、接口和抽象類的區(qū)別,如何選擇
!3、Java能不能多繼承,可不可以多實現(xiàn)
%4、Static Nested Class?和?Inner Class的不同
!5、重載和重寫的區(qū)別。
!6、是否可以繼承String類
!7、構(gòu)造器是否可被override?
!8、public,protected,private的區(qū)別?
集合相關(guān)
!1、列舉幾個Java中Collection類庫中的常用類
!2、List、Set、Map是否都繼承自Collection接口?存儲特點分別是什么?
!3、ArrayList、LinkedList和Vector之間的區(qū)別與聯(lián)系
!4、HashMap和Hashtable、TreeMap以及ConcurrentHashMap的區(qū)別
!5、Collection?和?Collections的區(qū)別
%6、其他的集合類:treeset,linkedhashmap等。
異常相關(guān)
!1、Error和Exception的區(qū)別
!2、異常的類型,什么是運行時異常
!3、final、finally和finalize的區(qū)別
%4、try-catch-finally中,如果在catch中return了,finally中的代碼還會執(zhí)行么,原理是什么?
!5、列舉3個以上的RuntimeException
!6、Java中的異常處理機制的簡單原理和應(yīng)用
其它
!1、String和StringBuffer、StringBuilder的區(qū)別
!2、==和equals的區(qū)別
%3、hashCode的作用,和equals方法的關(guān)系
!4、Input/OutputStream和Reader/Writer有什么區(qū)別
!5、如何在字符流和字節(jié)流之間轉(zhuǎn)換?
!6、switch可以使用那些數(shù)據(jù)類型
%7、Java的四種引用
!8、序列化與反序列化
!9、正則表達(dá)式
!10、int和Integer的區(qū)別,什么是自動裝箱和自動拆箱
Java高級
多線程
!1、進程和線程的區(qū)別
!2、并行和并發(fā)的區(qū)別和聯(lián)系
!3、同步與異步
!4、多線程的實現(xiàn)方式,有什么區(qū)別
!5、什么叫守護線程
%6、如何停止一個線程?
!7、什么是線程安全?
!8、synchronized?和?lock的區(qū)別
!9、當(dāng)一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
!10、啟動一個線程是用run()還是start()?
!12、wait和sleep的區(qū)別
%13、notify和notifyAll的區(qū)別
%14、線程池的作用
%15、Java中線程池相關(guān)的類
JVM底層技術(shù)
!1、gc的概念,如果A和B對象循環(huán)引用,是否可以被GC?
%2、jvm gc如何判斷對象是否需要回收,有哪幾種方式?
!3、Java中能不能主動觸發(fā)GC
!4、JVM的內(nèi)存結(jié)構(gòu),堆和棧的區(qū)別
!5、JVM堆的分代
%6、Java中的內(nèi)存溢出是什么,和內(nèi)存泄露有什么關(guān)系
!7、Java的類加載機制,什么是雙親委派
!8、ClassLoader的類加載方式
IO
!?1、NIO、AIO和BIO 之間的區(qū)別
?2、IO和NIO常用用法
其它
?1、hashcode?有哪些算法
!2、反射的基本概念,反射是否可以調(diào)用私有方法
!3、Java中范型的概念
?4、JVM啟動參數(shù),-Xms和?-Xmx
%5、代理機制的實現(xiàn)
!6、String s = new String("s"),創(chuàng)建了幾個對象。
Java Web
Servlet
!1、JSP和Servlet的區(qū)別,Servelt的概念。
!2、Servlet的生命周期
!3、Servlet中的session工作原理 ,以及設(shè)置過期時間的方式
!4、Servlet中,filter的應(yīng)用場景有哪些?
?5、JSP的動態(tài)include和靜態(tài)include
%6、web.xml中常用配置及作用
%7、Servlet的線程安全問題
MVC框架
!1、介紹幾個常用的MVC框架
!2、什么是MVC
!3、Struts中請求的實現(xiàn)過程
%4、Spring mvc與Struts mvc的區(qū)別
?5、Service嵌套事務(wù)處理,如何回滾
!6、struts2 中攔截器與過濾器的區(qū)別及執(zhí)行順序
%7、struts2攔截器的實現(xiàn)原理
http相關(guān)
!1、session和cookie的區(qū)別
!2、HTTP請求中session實現(xiàn)原理?
%3、如果客戶端禁止Cookie能實現(xiàn)Session嗎?
!4、http中?get和post區(qū)別
!5、redirect與forward的區(qū)別
!6、常見的web請求返回的狀態(tài)碼。404、302、301、500分別代表什么
SSH相關(guān)
?1、Hibernate/Ibatis/MyBatis之間的區(qū)別
?2、什么是OR Mapping
%3、hibernate的緩存機制、一級和二級緩存
!4、使用Spring的好處是什么,Spring的核心理念
!5、什么是AOP和IOC,實現(xiàn)原理是什么
!6、spring bean的初始化過程
!7、Spring的事務(wù)管理?,Spring bean注入的幾種方式
%8、spring四種依賴注入方式
容器相關(guān)
!1、什么是web服務(wù)器、什么是應(yīng)用服務(wù)器
!2、常用的web服務(wù)器有哪些?
?3、Tomcat和weblogic的區(qū)別
web安全
!1、什么是SQL注入?,如何避免。
%2、什么是XSS攻擊,如何避免
%3、什么是CSRF攻擊,如何避免
動態(tài)代理
!1、Java的動態(tài)代理的概念
%2、Java的動態(tài)代理的實現(xiàn)
編碼問題
!1、常用的字符編碼
!2、如何解決中文亂碼問題
其它
%1、XML的解析方式,以及優(yōu)缺點。
%2、什么是ajax,Ajax如何解決跨域問題
設(shè)計模式
%1、談一下自己了解或者熟悉的設(shè)計模式
!2、Singleton的幾種實現(xiàn)方式,實現(xiàn)一個線程安全的單例。
?3、工廠模式和抽象工廠模式之間的區(qū)別
知識的綜合能力
!1、請介紹一下一個http請求的全過程,描述的越全面越好
!2、當(dāng)你在瀏覽器地址欄輸入www.taobao.com,敲下回車之后都發(fā)生了什么
工具使用
!1、知道git/svn是干什么的嗎?用過嗎
!2、知道m(xù)aven/gradle是干什么的嗎?用過嗎
!3、平常使用什么IDE,為什么
!4、平常使用什么瀏覽器,為什么
!5、平常開發(fā)機器是什么操作系統(tǒng)的
!6、會在Linux上開發(fā)嗎。Linux常用命令會嗎
項目相關(guān)
!1、請簡單介紹一下你的這個項目
!2、你在這個項目中充當(dāng)什么角色
!3、這個項目的技術(shù)選型有做過么。
!4、選擇某項技術(shù)做過哪些調(diào)研和對比
!5、這個項目中遇到的最大的問題是什么?你是如何解決的。
!6、項目中是否考慮過性能、安全性等問題
技術(shù)熱情
!1、當(dāng)前Java的最新版本
!2、Java8的lambda表達(dá)式
%3、Java8的stream API
%4、Java9的模塊化
%5、Java10的局部變量類型推斷
%6、Spring Boot2.0
%7、HTTP/2
%8、會翻墻么,知道翻墻的原理嗎
!9、你最近在讀什么書
表達(dá)能力
!1、能不能簡單做一個自我介紹。
!2、能不能描述一下杭州給你的印象。用三句話概括一下。
思考方式
!1、如何估算杭州有多少軟件工程師
!2、你最近讀過的印象最深的文章是什么
!3、這篇文章中有幾個觀點,你最贊成哪一個,最不贊成哪一個
其他
!1、你對加班怎么看
!2、你還有什么問題要問我(面試官)的么
推薦閱讀
程序員面試筆試寶典
程序員面試金典
Java編程思想
Effective Java
深入理解Java虛擬機
大話數(shù)據(jù)結(jié)構(gòu)
劍指Offer
!Hollis技術(shù)博客(http://www.hollischuang.com)及個人公眾號(Hollis)
總結(jié)
以上是生活随笔為你收集整理的你离BAT之间,只差这一套Java面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ 928 小M的因子和(数论)
- 下一篇: Lambda、函数式接口、Stream