牛客網Java面試題

Java開發校招面試考點彙總(附面試題和答案)

牛妹 牛客網 7月17日
Java後臺開發面試考點彙總

以下不作爲Java學習路徑,只是彙總的校招Java後臺開發面試考點(因爲還有筆試考點,後面結合在一起給大家學習路徑),後續會爲大家更新10w+字數的Java校招面試題庫,還有其他崗位的相關題庫和資料,想要什麼崗位的可以留言哦~

本篇根據各個公司的面試問的問題的大數據進行總結,後面還會更新面試中考察所佔比例,當然,本文只包括技術面,不包括hr面或者一些其他談人生理想的

(點擊圖片可查看大圖)

附題目

一、JavaSE部分

1、Java基礎

1、爲什麼重寫equals還要重寫hashcode
2、說一下map的分類和常見的情況
3、Object若不重寫hashCode()的話,hashCode()如何計算出來的?
4、==比較的是什麼?
5、若對一個類不重寫,它的equals()方法是如何比較的?
6、java8新特性
7、說說Lamda表達式的優缺點。
8、一個十進制的數在內存中是怎麼存的?
9、爲啥有時會出現4.0-3.6=0.40000001這種現象?
10、Java支持的數據類型有哪些?什麼是自動拆裝箱?
11、什麼是值傳遞和引用傳遞?
12、數組(Array)和列表(ArrayList)有什麼區別?什麼時候應該使用Array而不是ArrayList?
13、你瞭解大O符號(big-O notation)麼?你能給出不同數據結構的例子麼?
14、String是最基本的數據類型嗎?
15、int 和 Integer 有什麼區別
16、String 和StringBuffer的區別
17、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
18、int和Integer有什麼區別?
19、&和&&的區別?
20、在Java中,如何跳出當前的多重嵌套循環?
21、你能比較一下Java和JavaSciprt嗎?
22、簡述正則表達式及其用途。
23、Java中是如何支持正則表達式操作的?
24、請你說說Java和PHP的區別?

2、關鍵字

1、介紹一下Syncronized鎖,如果用這個關鍵字修飾一個靜態方法,鎖住了什麼?如果修飾成員方法,鎖住了什麼?
2、介紹一下volatile?
3、鎖有了解嘛,說一下Synchronized和lock
4、講一講Java裏面的final關鍵字怎麼用的?

3、面向對象

1、wait方法底層原理
2、Java有哪些特性,舉個多態的例子。
3、String爲啥不可變?
4、類和對象的區別
5、請列舉你所知道的Object類的方法。
6、重載和重寫的區別?相同參數不同返回值能重載嗎?
7、”static”關鍵字是什麼意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
8、String能繼承嗎?
9、StringBuffer和StringBuilder有什麼區別,底層實現上呢?
10、類加載機制,雙親委派模型,好處是什麼?
11、靜態變量存在哪?
12、講講什麼是泛型?
13、解釋extends 和super 泛型限定符-上界不存下界不取
14、是否可以在static環境中訪問非static變量?
15、談談如何通過反射創建對象?
16、Java支持多繼承麼?
17、接口和抽象類的區別是什麼?
18、Comparable和Comparator接口是幹什麼的?列出它們的區別。
19、面向對象的特徵有哪些方面
20、final, finally, finalize的區別。
21、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
22、abstract class和interface有什麼區別?
23、Static Nested Class 和 Inner Class的不同
24、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏到底是值傳遞還是引用傳遞?
25、Java的接口和C++的虛類的相同和不同處。
26、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以拋出異常嗎?
27、內部類可以引用他包含類的成員嗎?有沒有什麼限制?
28、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code說法是否正確?
29、重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?
30、如何通過反射獲取和設置對象私有字段的值?
31、談一下面向對象的"六原則一法則"。
32、請問Query接口的list方法和iterate方法有什麼區別?
33、Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
34、Java中,什麼是構造函數?什麼是構造函數重載?什麼是複製構造函數?
35、hashCode()和equals()方法有什麼聯繫?

4、集合

1、Map和ConcurrentHashMap的區別?
2、hashMap內部具體如何實現的?
3、如果hashMap的key是一個自定義的類,怎麼辦?
4、ArrayList和LinkedList的區別,如果一直在list的尾部添加元素,用哪個效率高?
5、HashMap底層,負載因子,爲啥是2^n?
6、ConcurrentHashMap鎖加在了哪些地方?
7、TreeMap底層,紅黑樹原理?
8、concurrenthashmap有啥優勢,1.7,1.8區別?
9、ArrayList是否會越界?
10、什麼是TreeMap?
11、ConcurrentHashMap的原理是什麼?
12、Java集合類框架的基本接口有哪些?
13、爲什麼集合類沒有實現Cloneable和Serializable接口?
14、什麼是迭代器?
15、Iterator和ListIterator的區別是什麼?
16、快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什麼?
17、HashMap和Hashtable有什麼區別?
18、ArrayList和LinkedList有什麼區別?
19、ArrayList,Vector,LinkedList的存儲性能和特性是什麼?
20、Collection 和 Collections的區別。
21、你所知道的集合類都有哪些?主要方法?
22、List、Set、Map是否繼承自Collection接口?
23、闡述ArrayList、Vector、LinkedList的存儲性能和特性
24、List、Map、Set三個接口存取元素時,各有什麼特點?

5、線程

1、多線程中的i++線程安全嗎?爲什麼?
2、如何線程安全的實現一個計數器?
3、多線程同步的方法
4、介紹一下生產者消費者模式?
5、線程,進程,然後線程創建有很大開銷,怎麼優化?
6、線程池運行流程,參數,策略
7、講一下AQS吧。
8、創建線程的方法,哪個更好,爲什麼?
9、Java中有幾種方式啓動一個線程?
10、Java中有幾種線程池?
11、線程池有什麼好處?
12、cyclicbarrier和countdownlatch的區別
13、如何理解Java多線程回調方法?
14、創建線程有幾種不同的方式?你喜歡哪一種?爲什麼?
15、概括的解釋下線程的幾種可用狀態。
16、同步方法和同步代碼塊的區別是什麼?
17、啓動線程有哪幾種方式,線程池有哪幾種?
18、在監視器(Monitor)內部,是如何做線程同步的?程序應該做哪種級別的同步?
19、sleep() 和 wait() 有什麼區別?
20、同步和異步有何異同,在什麼情況下分別使用他們?舉例說明。
21、設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。使用內部類實現線程,對j增減的時候沒有考慮順序問題。
22、啓動一個線程是用run()還是start()?
23、請說出你所知道的線程同步的方法
24、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
25、java中有幾種方法可以實現一個線程?用什麼關鍵字修飾同步方法? stop()和suspend()方法爲何不推薦使用?
26、線程的sleep()方法和yield()方法有什麼區別?
27、當一個線程進入一個對象的synchronized方法A之後,其它線程是否可進入此對象的synchronized方法B?
28、請說出與線程同步以及線程調度相關的方法。
29、舉例說明同步和異步
30、什麼是線程池(thread pool)?
31、說說線程的基本狀態以及狀態之間的關係?
32、如何保證線程安全?

6、鎖

1、講一下非公平鎖和公平鎖在reetrantlock裏的實現。
2、講一下synchronized,可重入怎麼實現。
3、鎖和同步的區別。
4、什麼是死鎖(deadlock)?
5、如何確保N個線程可以訪問N個資源同時又不導致死鎖?
6、請你簡述synchronized和java.util.concurrent.locks.Lock的異同?

7、JDK

1、Java中的LongAdder和AtomicLong的區別
2、JDK和JRE的區別是什麼?

8、反射

1、反射的實現與作用

9、JVM

1、JVM回收算法和回收器,CMS採用哪種回收算法,怎麼解決內存碎片問題?
2、類加載過程
3、JVM分區
4、eden區,survial區?
5、JAVA虛擬機的作用?
6、GC中如何判斷對象需要被回收?
7、JAVA虛擬機中,哪些可作爲ROOT對象?
8、JVM內存模型是什麼?
9、jvm是如何實現線程?
10、jvm最大內存限制多少
11、什麼是Java虛擬機?爲什麼Java被稱作是“平臺無關的編程語言”?
12、描述一下JVM加載class文件的原理機制?

10、GC

1、java中內存泄露是啥,什麼時候出現內存泄露?
2、minor gc如果運行的很頻繁,可能是什麼原因引起的,minor gc如果運行的很慢,可能是什麼原因引起的?
3、闡述GC算法
4、GC是什麼? 爲什麼要有GC?
5、垃圾回收的優點和原理。並考慮2種回收機制
6、java中會存在內存泄漏嗎,請簡單描述。
7、垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?(垃圾回收)

11、IO和NIO、AIO

1、怎麼打印日誌?
2、運行時異常與一般異常有何異同?
3、error和exception有什麼區別?
4、給我一個你最常見到的runtime exception
5、Java中的異常處理機制的簡單原理和應用。
6、java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
7、什麼是java序列化,如何實現java序列化?
8、運行時異常與受檢異常有什麼區別?

二、JavaEE部分

1、Spring

1、說一下IOC和AOP?
2、介紹一下bean的生命週期
3、Spring裏面註解用過沒有?autowired 和resource區別?
4、@Controller和@RestController的區別?
5、依賴注入的方式有幾種,哪幾種?
6、springIOC原理?自己實現IOC要怎麼做,哪些步驟?
7、Spring中BeanFactory和ApplicationContext的區別?、
8、什麼是IoC和DI?DI是如何實現的?
9、請問Spring中Bean的作用域有哪些?
10、談談Spring中自動裝配的方式有哪些?
11、aop的應用場景?
12、AOP的原理是什麼?
13、你如何理解AOP中的連接點(Joinpoint)、切點(Pointcut)、增強(Advice)、引介(Introduction)、織入(Weaving)、切面(Aspect)這些概念?
14、Spring支持的事務管理類型有哪些?你在項目中使用哪種方式?
15、介紹一下spring?
16、Struts攔截器和Spring AOP區別?
17、spring框架的優點?
18、選擇使用Spring框架的原因(Spring框架爲企業級開發帶來的好處有哪些)?
19、持久層設計要考慮的問題有哪些?你用過的持久層框架有哪些?

2、Hibernate

1、闡述實體對象的三種狀態以及轉換關係。
2、Hibernate中SessionFactory是線程安全的嗎?Session是線程安全的嗎(兩個線程能夠共享同一個Session嗎)?
3、Hibernate中Session的load和get方法的區別是什麼?
4、如何理解Hibernate的延遲加載機制?在實際應用中,延遲加載與Session關閉的矛盾是如何處理的?
4、簡述Hibernate常見優化策略。
5、鎖機制有什麼用?簡述Hibernate的悲觀鎖和樂觀鎖機制。
6、Hibernate如何實現分頁查詢?
7、談一談Hibernate的一級緩存、二級緩存和查詢緩存。

3、Struts

1、說說STRUTS的應用

4、Mybatis

1、解釋一下MyBatis中命名空間(namespace)的作用。
2、MyBatis中的動態SQL是什麼意思?

5、MVC

1、Spring MVC註解的優點
2、springmvc和spring-boot區別?
3、SpringMVC的運行機制,運行機制的每一部分的相關知識?
4、談談Spring MVC的工作原理是怎樣的?

6、各框架對比與項目優化

1、Mybatis和Hibernate區別?
2、介紹一下你瞭解的Java領域的Web Service框架。

7、JPA

1、EJB是基於哪些技術實現的?並說出SessionBean和EntityBean的區別,StatefulBean和StatelessBean的區別。
2、EJB與JAVA BEAN的區別?
3、EJB包括(SessionBean,EntityBean)說出他們的生命週期,及如何管理事務的?
4、EJB的角色和三個對象是什麼?
5、說說EJB規範規定EJB中禁止的操作有哪些?
6、EJB的激活機制是什麼?
7、EJB的幾種類型分別是什麼
8、EJB需直接實現它的業務接口或Home接口嗎,請簡述理由。

三、Java web編程

1、web編程基礎

1、啓動項目時如何實現不在鏈接裏輸入項目名就能啓動?
2、1分鐘之內只能處理1000個請求,你怎麼實現,手撕代碼?
3、什麼時候用assert
4、JAVA應用服務器有那些?
5、JSP的內置對象及方法。
6、JSP和Servlet有哪些相同點和不同點,他們之間的聯繫是什麼?(JSP)
7、說一說四種會話跟蹤技術
8、講講Request對象的主要方法
9、說說weblogic中一個Domain的缺省目錄結構?比如要將一個簡單的helloWorld.jsp放入何目錄下,然後在瀏覽器上就可打入主機?
10、jsp有哪些動作?作用分別是什麼?
11、請談談JSP有哪些內置對象?作用分別是什麼?
12、說一下表達式語言(EL)的隱式對象及其作用
13、JSP中的靜態包含和動態包含有什麼區別?
14、過濾器有哪些作用和用法?
15、請談談你對Javaweb開發中的監聽器的理解?
16、說說web.xml文件中可以配置哪些內容?

2、web編程進階

1、forward與redirect區別,說一下你知道的狀態碼,redirect的狀態碼是多少?
2、servlet生命週期,是否單例,爲什麼是單例。
3、說出Servlet的生命週期,並說出Servlet和CGI的區別。
4、Servlet執行時一般實現哪幾個方法?
5、闡述一下闡述Servlet和CGI的區別?
6、說說Servlet接口中有哪些方法?
7、Servlet 3中的異步處理指的是什麼?
8、如何在基於Java的Web項目中實現文件上傳和下載?
9、服務器收到用戶提交的表單數據,到底是調用Servlet的doGet()還是doPost()方法?
10、Servlet中如何獲取用戶提交的查詢參數或表單數據?
11、Servlet中如何獲取用戶配置的初始化參數以及服務器上下文參數?
12、講一下redis的主從複製怎麼做的?
13、redis爲什麼讀寫速率快性能好?
14、redis爲什麼是單線程?
15、緩存的優點?
16、aof,rdb,優點,區別?
17、redis的List能用做什麼場景?
18、說說MVC的各個部分都有那些技術來實現?如何實現?
19、什麼是DAO模式?
20、請問Java Web開發的Model 1和Model 2分別指的是什麼?
21、你的項目中使用過哪些JSTL標籤?
22、使用標籤庫有什麼好處?如何自定義JSP標籤?(JSP標籤)

3、web編程原理

1、get和post區別?
2、請談談轉發和重定向的區別?
3、說說你對get和post請求,並且說說它們之間的區別?
4、cookie 和session 的區別?
5、forward 和redirect的區別
6、BS與CS的聯繫與區別。
7、如何設置請求的編碼以及響應內容的類型?
8、什麼是Web Service(Web服務)?
9、談談Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分別是做什麼的?有什麼區別?
10、大型網站在架構上應當考慮哪些問題?
11、請對J2EE中常用的名詞進行解釋(或簡單描述)

四、JDBC編程

1、SQL基礎

1、寫SQL:找出每個城市的最新一條記錄。
2、一個學生表,一個課程成績表,怎麼找出學生課程的最高分數
3、有一組合索引(A,B,C),會出現哪幾種查詢方式?tag:sql語句

2、JDBC基礎

1、數據庫水平切分,垂直切分
2、數據庫索引介紹一下。介紹一下什麼時候用Innodb什麼時候用MyISAM。
3、數據庫兩種引擎
4、索引瞭解嘛,底層怎麼實現的,什麼時候會失效
5、問了數據庫的隔離級別
6、數據庫樂觀鎖和悲觀鎖
7、數據庫的三範式?
8、講一下數據庫ACID的特性?
9、mysql主從複製?
10、leftjoin和rightjoin的區別?
11、數據庫優化方法
12、談一下你對繼承映射的理解。
13、說出數據連接池的工作機制是什麼?
14、事務的ACID是指什麼?
15、JDBC中如何進行事務處理?

3、JDBC進階

1、JDBC的反射,反射都是什麼?
2、Jdo是什麼?
3、Statement和PreparedStatement有什麼區別?哪個性能更好?
4、使用JDBC操作數據庫時,如何提升讀取數據的性能?如何提升更新數據的性能?

五、XML

1、XML基礎

1、XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?

2、Web Service

1、WEB SERVICE名詞解釋,JSWDL開發包的介紹,JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。
2、請你談談對SOAP、WSDL、UDDI的瞭解?
3、談談Java規範中和Web Service相關的規範有哪些?

六、計算機網絡

1、網絡概述

1、TCP協議在哪一層?IP協議在那一層?HTTP在哪一層?

2、運輸層

1、講一下TCP的連接和釋放連接。
2、TCP有哪些應用場景
3、tcp爲什麼可靠
4、tcp爲什麼要建立連接
5、闡述TCP的4次揮手
6、講一下瀏覽器從接收到一個URL到最後展示出頁面,經歷了哪些過程。tag
7、http和https的區別
8、http的請求有哪些,應答碼502和504有什麼區別
9、http1.1和1.0的區別
10、說說ssl四次握手的過程
11、304狀態碼有什麼含義?

3、網絡層

1、arp協議,arp攻擊
2、icmp協議
3、講一下路由器和交換機的區別?

4、應用層

1、DNS尋址過程
2、負載均衡反向代理模式優點及缺點

七、操作系統

1、操作系統概論

1、CentOS 和 Linux的關係?
2、64位和32位的區別?

2、進程的描述與控制

1、怎麼殺死進程?
2、線程,進程區別
3、系統線程數量上限是多少?
4、進程和線程的區別是什麼?
5、解釋一下LINUX下線程,GDI類。

3、輸入輸出系統

1、socket編程,BIO,NIO,epoll?

4、存儲器管理

1、什麼是頁式存儲?
2、操作系統裏的內存碎片你怎麼理解,有什麼解決辦法?

5、處理機調度與死鎖

1、什麼情況下會發生死鎖,解決策略有哪些?
2、系統CPU比較高是什麼原因?
3、系統如何提高併發性?

八、算法與數據結構

1、哈希

1、hashset存的數是有序的嗎?
2、Object作爲HashMap的key的話,對Object有什麼要求嗎?
3、一致性哈希算法
4、什麼是hashmap?
5、Java中的HashMap的工作原理是什麼?
6、hashCode()和equals()方法的重要性體現在什麼地方?

2、樹

1、說一下B+樹和B-樹?
2、怎麼求一個二叉樹的深度?手撕代碼?
3、算法題:二叉樹層序遍歷,進一步提問:要求每層打印出一個換行符
4、二叉樹任意兩個節點之間路徑的最大長度
5、如何實現二叉樹的深度?
6、如何打印二叉樹每層的節點?
7、TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素?

3、遍歷

1、編程題:寫一個函數,找到一個文件夾下所有文件,包括子文件夾
2、二叉樹 Z 字型遍歷

4、鏈表

1、反轉單鏈表
2、隨機鏈表的複製
3、鏈表-奇數位升序偶數位降序-讓鏈表變成升序
4、bucket如果用鏈表存儲,它的缺點是什麼?
5、如何判斷鏈表檢測環

5、數組

1、尋找一數組中前K個最大的數
2、求一個數組中連續子向量的最大和
3、找出數組中和爲S的一對組合,找出一組就行
4、一個數組,除一個元素外其它都是兩兩相等,求那個元素?
5、算法題:將一個二維數組順時針旋轉90度,說一下思路。

6、排序

1、排序算法知道哪些,時間複雜度是多少,解釋一下快排?
2、如何得到一個數據流中的中位數?
3、堆排序的原理是什麼?
4、歸併排序的原理是什麼?
5、排序都有哪幾種方法?請列舉出來。
6、如何用java寫一個冒泡排序?

7、堆與棧

1、堆與棧的不同是什麼?
2、heap和stack有什麼區別。
3、解釋內存中的棧(stack)、堆(heap)和靜態區(static area)的用法。

8、隊列

1、什麼是Java優先級隊列(Priority Queue)?

9、高級算法

1、題目:
Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the following operations: get and put.
get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
put(key, value) - Set or insert the value if the key is not already present. When the cache reaches its capacity, it should invalidate the least frequently used item before inserting a new item. For the purpose of this problem, when there is a tie (i.e., two or more keys that have the same frequency), the least recently used key would be evicted.
Could you do both operations in O(1) time complexity?
2、id全局唯一且自增,如何實現?
3、如何設計算法壓縮一段URL?
4、爲什麼要設計後綴表達式,有什麼好處?
5、LRU算法的實現原理?

九、設計模式

1、結構型模式

1、java中有哪些代理模式?
2、如何實現動態代理
3、IO流熟悉嗎,用的什麼設計模式?

2、創建型模式

1、介紹一下單例模式?懶漢式的單例模式如何實現單例?

3、行爲型模式

1、介紹一下策略模式?
2、設計模式瞭解哪些,手寫一下觀察者模式?

4、模式彙總

1、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法
2、j2ee常用的設計模式?說明工廠模式。
3、開發中都用到了那些設計模式?用在什麼場合?
4、簡述一下你瞭解的Java設計模式

十、場景題

1、場景題彙總

1、情景題:如果一個外賣配送單子要發佈,現在有200個騎手都想要接這一單,如何保證只有一個騎手接到單子?
2、場景題:美團首頁每天會從10000個商家裏面推薦50個商家置頂,每個商家有一個權值,你如何來推薦?第二天怎麼更新推薦的商家?
可以借鑑下stackoverflow,視頻網站等等的推薦算法。
3、場景題:微信搶紅包問題
悲觀鎖,樂觀鎖,存儲過程放在mysql數據庫中。
4、場景題:1000個任務,分給10個人做,你怎麼分配,先在紙上寫個最簡單的版本,然後優化。
全局隊列,把1000任務放在一個隊列裏面,然後每個人都是取,完成任務。
分爲10個隊列,每個人分別到自己對應的隊列中去取務。
5、場景題:保證發送消息的有序性,消息處理的有序性。
6、如何把一個文件快速下發到100w個服務器
7、給每個組分配不同的IP段,怎麼設計一種結構使的快速得知IP是哪個組的?
8、10億個數,找出最大的10個。
建議一個大小爲10的小根堆。
9、有幾臺機器存儲着幾億淘寶搜索日誌,你只有一臺2g的電腦,怎麼選出搜索熱度最高的十個搜索關鍵詞?
10、分佈式集羣中如何保證線程安全?
11、給個淘寶場景,怎麼設計一消息隊列?
12、10萬個數,輸出從小到大?
先劃分成多個小文件,送進內存排序,然後再採用多路歸併排序。
13、有十萬個單詞,找出重複次數最高十個?

十一、UML

1、UML

1、請你談一下UML中有哪些常用的圖?

答案領取

使用PC端進入下方鏈接查看~
↓↓↓
https://www.nowcoder.com/interview/center

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