當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]筆者作為一個今年剛畢業(yè)的初級JAVA,根據(jù)群里水友的討論,也結(jié)合自己剛畢業(yè)時的一些面經(jīng),加上近期一點點在公司面試別人的經(jīng)驗,總結(jié)了如下的常見面試問題,適用于初級和中級JAVA。

筆者作為一個今年剛畢業(yè)的初級JAVA,根據(jù)群里水友的討論,也結(jié)合自己剛畢業(yè)時的一些面經(jīng),加上近期一點點在公司面試別人的經(jīng)驗,總結(jié)了如下的常見面試問題,適用于初級和中級JAVA。

1 JAVA

HashMap相關(guān)

HashMap一直是經(jīng)典的面試題,所有面試官都喜歡問他,因為它可以牽扯出非常多的知識點,而面試者到底能了解到何種程度,則一定程度反映其綜合能力。

細節(jié)聊擴容因子LoadFactor=0.75,初始大小InitailCapacity=16

縱向聊其底層實現(xiàn),數(shù)據(jù)結(jié)構(gòu)是數(shù)組+鏈表,提到j(luò)dk1.8之后對鏈表節(jié)點到達8之后轉(zhuǎn)換為紅黑樹加分。繼續(xù)追問的話便是引申出常用的數(shù)據(jù)結(jié)構(gòu):隊列,棧,樹,圖。

橫向聊線程安全,HashMap為線程不安全,一般問多線程操作會導(dǎo)致其死循環(huán)的原因。與線程安全的ConcurrentHashMap對比,又擴展到ConcurrentHashMap的實現(xiàn)。繼續(xù)追問的話便是引申出線程安全的定義,問一些常用的并發(fā)容器,考察面試者對java.util.concurrent包的掌握情況。那么至少可以牽扯出如下的問題:

ConcurrentHashMap相關(guān)

面試者可以先說歷史,1.8之前采用分段鎖,核心就是一句話:盡量降低同步鎖的粒度。1.8之后使用CAS思想代替冗雜的分段鎖實現(xiàn)。不出意料,面試者答出CAS之后必定會被追問其思想以及應(yīng)用,換做我自己的話會有如下思路作答:CAS采用樂觀鎖思想達到lock free,提一下sun.misc.Unsafe中的native方法,至于CAS的其他應(yīng)用可以聊一聊Atomic原子類和一些無鎖并發(fā)框架(如Amino),提到ABA問題加分。

線程安全與鎖

線程安全這個詞也是面試的高頻詞,說完上面的并發(fā)容器,回頭說一說線程安全的定義,按照周志明大大的話回答私以為是極好的:

當(dāng)多個線程訪問某個類時,不管運行時環(huán)境采用何種調(diào)度方式或者這些線程將如何交替進行,并且在主調(diào)代碼中不需要任何額外的同步或協(xié)同,這個類都能表現(xiàn)出正確的行為,那么稱這個類是線程安全的

通常與鎖一起出現(xiàn):除了synchronized之外,還經(jīng)常被問起的是juc中的Lock接口,其具體實現(xiàn)主要有兩種:可重入鎖,讀寫鎖。這些都沒問題的話,還會被詢問到分布式下的同步鎖,一般借助于中間件實現(xiàn),如Redis,Zookeeper等,開源的Redis分布式鎖實現(xiàn)有Redisson,回答注意點有兩點:一是注意鎖的可重入性(借助于線程編號),二是鎖的粒度問題。除此之外就是一些juc的常用工具類如:CountdownLatch,CyclicBarrir,信號量

線程

創(chuàng)建線程有幾種方式:這個時候應(yīng)該毫不猶豫的回答1種。面試官會有些驚訝于你的回答,因為似乎他已經(jīng)習(xí)慣了聽到Thread和Runnable2種方式的“標(biāo)準(zhǔn)答案”。其實,仔細審題會發(fā)現(xiàn),java創(chuàng)建線程只有一種方式:Thread。Runnable是代表任務(wù),無論是Callable,Runnable,ThreadPool,最終都是Thread,所以2種的回答一定是錯誤的。

設(shè)計模式

如經(jīng)典的單利模式。當(dāng)被問到單例模式時,私以為在有準(zhǔn)備的前提下,回答使用雙檢鎖的方式實現(xiàn)可以很好地誘導(dǎo)面試官。雙檢鎖實現(xiàn)線程安全的單利模式有兩塊注意點:1鎖的粒度問題 2 靜態(tài)變量需要被volatile修飾。前者已經(jīng)被上文提過,重點是后者,必定會誘導(dǎo)面試官繼續(xù)詢問你有關(guān)volatile原則的問題,無非是happens-before原則或者JMM(java內(nèi)存模型)相關(guān)。前者只需要熟記幾條關(guān)鍵性的原則即可,而后者回答的重點便是需要提到主存與工作內(nèi)存的關(guān)系。

工廠模式,觀察者模式,模板方法模式,策略模式,職責(zé)鏈模式等等,通常會結(jié)合Spring和UML類圖提問。

JVM相關(guān)

說實話,我自己對JVM的掌握幾乎完全來自于《深入理解java虛擬機》,加上一點點線上的經(jīng)驗。初級崗位常問的問題也是固定的那么幾個。

內(nèi)存分區(qū):主要就是堆和棧,嚴謹點回答可以答方法區(qū),虛擬機棧,本地方法棧,堆,程序計數(shù)器。聊一聊Hotspot在jdk1.7中將常量池移到了堆中,jdk1.8移除永久代用MetaSpace代替起碼可以佐證:你喜歡在一些JAVA群里面吹水。

垃圾回收算法:新生代由于對象朝生夕死使用標(biāo)記-清除(or標(biāo)記-整理)算法,老年代生命力強使用復(fù)制算法。提到一句分代收集即可。

垃圾回收器一兩個名字還是得叫的上來:Serial,Parallel,CMS,G1...

如何判斷一個對象可以被回收:引用計數(shù)(可以提到Netty中的使用案例),可達性分析(JVM使用)

IO相關(guān)

bio,nio區(qū)別要熟知,了解nio中的ByteBuffer,Selector,Channel可以幫助面試者度過不少難關(guān)。幾乎提到nio必定會問netty,其實我分析了一下,問這個的面試官自己也不一定會,但就是有人喜歡問,所以咱們適當(dāng)應(yīng)付一下就好:一個封裝很好擴展很好的nio框架,常用于RPC框架之間的傳輸層通信。

反射

聊一聊你對JAVA中反射的理解:運行時操作一個類的神器,可以獲取構(gòu)造器,方法,成員變量,參數(shù)化類型...使用案例如Hibernate,BeanUtils。

動態(tài)代理

jdk動態(tài)代理和cglib動態(tài)代理的區(qū)別:前者需要實現(xiàn)一個接口,后者不需要;前者依賴于jdk提供的InvocationHandler,后者依賴于字節(jié)碼技術(shù);前者我還能寫一些代碼,后者完全不會。大概就這些差別了。

2 開源框架

Tomcat

我沒看過源碼,除了老生常談的雙親委托類加載機制,似乎只能問一些相關(guān)參數(shù)了。

Spring

在我不長的面試官生涯中,比較煩的一件事便是:當(dāng)我還沒問全:“聊一聊你對Spring的理解”這句話時,部分面試者的臉上已經(jīng)浮現(xiàn)出了笑容,并迫不及待的回答:AOP和IOC。這本無可厚非,但一旦這成了條件反射式的回答,便違背了面試的初衷。

在面試中,Spring從狹義上可以被理解成Spring Framework&SpringMVC。而廣義上包含了Spring眾多的開源項目,如果面試者連spring.io都沒有訪問過,私以為是不應(yīng)該的扣分項。

Spring常見的問題包括:Spring Bean的scope取值,BeanFactory的地位,@Transactionl相關(guān)(傳播機制和隔離級別),SpringMVC工作流程

SpringBoot

SpringBoot是當(dāng)今最火的框架之一了,其starter模塊自動配置的思想是面試中經(jīng)常被問到的。如spring-boot-starter-data-jpa模塊會默認配置JpaTransactionManager事務(wù)管理器,而spring-boot-starter-jdbc則會默認配置DataSourceTransactionManager事務(wù)管理器,兩者的差異經(jīng)常被用來做對比。@ConditionalOnMissingBean,@ConditionalOnBean等注解作用也需要被掌握。

JPA&Hibernate

ORM的思想

懶加載如何配置以及意義

級聯(lián)如何配置,什么時候應(yīng)該使用級聯(lián)

一級緩存:Session級別的緩存

@Version的使用:數(shù)據(jù)庫的樂觀鎖

數(shù)據(jù)庫

這里的數(shù)據(jù)庫還是以傳統(tǒng)的RDBMS為主,由于存儲過程,觸發(fā)器等操作一般在互聯(lián)網(wǎng)公司禁止使用,所以基本傳統(tǒng)數(shù)據(jù)庫能問的東西也并不多。

  1. 索引的分類有哪些?面試者可以嘗試自己分類回答。索引和唯一索引;聚集索引和非聚集索引;數(shù)據(jù)結(jié)構(gòu)可以分為Hash和B+樹索引;單列索引和聯(lián)合索引。常見的索引問題還包括(A,B,C)的聯(lián)合索引,查詢(B,C)時會不會走索引等一些數(shù)據(jù)庫的小細節(jié)。

  2. 事務(wù)ACID的描述和隔離級別。

  3. mysql的explain查詢分析也是面試的重點對象,一條分析結(jié)果的查詢時間,影響行數(shù),走了哪些索引都是分析的依據(jù)。

  4. 如果面試官問到存儲引擎,說實話也有點為了面試而面試的感覺,掌握基本的InnoDB和Myisam的區(qū)別即可。

  5. 互聯(lián)網(wǎng)公司可能會比較關(guān)心面試者對分庫分表的掌握:mysql自帶的sharding為什么一般不使用?中間件級別和驅(qū)動級別的分庫分表,sharding-jdbc,cobar,mycat等開源組件的使用,分布式ID和分庫鍵的選擇也備受面試官的青睞。

Redis

這個的確很熱,這年頭不熟悉Redis真不好意思說自己是干互聯(lián)網(wǎng)的。

  1. Redis的常用數(shù)據(jù)結(jié)構(gòu),這不用贅述了。

  2. Redis的持久化策略。了解RDB和AOF的使用場景即可。

  3. Redis的發(fā)布訂閱。

  4. 列舉Redis的使用場景。這個可以自由發(fā)揮,除了主要功能緩存之外,還包括session共享,基于Redis的分布式鎖,簡易的消息隊列等。

  5. 了解Redis的集群和哨兵機制。

  6. 高級話題包括:緩存雪崩,緩存失效,緩存穿透,預(yù)熱等。

MQ

至少掌握一種常用的消息隊列中間件:RabbitMQ,ActiveMQ,RocketMQ,Kafka,了解MQ解耦,提高吞吐量,平滑處理消息的主要思想。常見的面試問題包括如下幾點:

  1. 列舉MQ在項目中的使用場景

  2. 消息的可靠投遞。每當(dāng)要發(fā)生不可靠的操作(如RPC遠程調(diào)用之前或者本地事務(wù)之中),保證消息的落地,然后同步發(fā)送。當(dāng)失敗或者不知道成功失?。ū热绯瑫r)時,消息狀態(tài)是待發(fā)送,定時任務(wù)輪詢待發(fā)送消息表,最終一定可以送達。同時消費端保證冪等。也有朋友告訴過我RocketMQ中事務(wù)消息的概念,不過沒有深入研究。

  3. 消息的ACK機制。如較為常用的事務(wù)機制和客戶端ACK。

  4. DLQ的設(shè)計。

Nginx

  1. 解釋反向代理。

  2. 常用的負載均衡算法。掌握ip_hash ,輪詢,weight,fair即可。

  3. 配置動靜分離。

RPC框架

Dubbo,Motan等主流rpc框架的設(shè)計思想也是面試中寵兒。

  1. 說一說RPC的原理?可初步回答動態(tài)代理+網(wǎng)絡(luò)通信,進一步補充RPC的主要分層:協(xié)議層,序列化層,通信層,代理層。每一層拉出來都可以被問很久:如序列化方式的選擇,通信層的選擇等。

  2. 注冊中心的作用和選擇。Zookeeper,Consul,Eureka等注冊中心完成了什么工作,以及他們的對比。

  3. netty相關(guān)的提問。對于非專業(yè)中間件崗位,其實感覺還是想詢問面試者對非阻塞IO的理解,真要讓面試者用netty手擼一個EchoServer&EchoClient感覺就有點BT了,如果有公司這么干,請告知我[微笑face]。

SpringCloud

就我所了解的情況,國內(nèi)SpringCloud的普及程度還不是很高,但是SpringCloud的相關(guān)組件會被部分引用,這倒是很常見,所以簡歷中出現(xiàn)SpringCloud也會是一個初級JAVA的亮點。狹義上的SpringCloud指的是SpringCloud Netflix的那些構(gòu)建微服務(wù)的組件,廣義上還包含了Config,Data Flow,Gateway等項目。

  1. Feign,Ribbon,Eureka,Zuul的使用。了解各個組件的作用,會問一些常遇到的問題如Feign的重試機制,Eureka的保護機制,Zuul的路由機制等。

  2. Spring Cloud使用的restful http通信與RPC通信的對比。畢竟...這是一個經(jīng)久不衰的辯題,可以從耦合性,通信性能,異構(gòu)系統(tǒng)的互信等角度對比。

3 分布式

  1. CAP和BASE原理。了解CAP只能同時保證兩個的結(jié)論,以及CP和AP的選擇依據(jù)。了解BASE的最終一致性原理。

  2. 重試和冪等性。如在支付場景中的異步支付回調(diào),內(nèi)外部系統(tǒng)對接保證一致性通常采取的保障手段。

  3. 分布式鏈路跟蹤。Dapper論文的掌握,Trace,Span,Annotation,埋點等基本概念的含義,有過Zipkin,Spring Cloud Slueth的使用經(jīng)驗自然是更好的。

  4. 分布式事務(wù)。雖然我認為這本身并不是一種值得提倡的東西,出現(xiàn)分布式事務(wù)應(yīng)當(dāng)考慮一下你的限界上下文劃分的是否合理。那既然有人會問,或許也有他的道理,可以嘗試了解二階段提交,三階段提交,Paxos。

  5. 一致性Hash。抓住一致性hash環(huán)和虛擬節(jié)點兩個關(guān)鍵點作答即可。

  6. 熔斷、降級。兩者的對比,以及分布式中為何兩者地位很重要。

  7. 谷歌的三駕馬車:分布式文件系統(tǒng)(如開源實現(xiàn)HDFS),分布式存儲系統(tǒng)(如開源實現(xiàn)HBASE),分布式計算框架(Map-Reduce模型)。市面上絕大多數(shù)的海量數(shù)據(jù)問題,最終都是在考著三個東西。典型問題:2個1T的文本文件存儲著URL,篩選出其中相同的URL。海量文件的word count...

4 Linux

  1. 常用指令cd(進入),ls(列表顯示),rm -f /*(優(yōu)化系統(tǒng))這些指令當(dāng)然是必須會的

  2. Linux中的CoreUtils相關(guān)問題。如linux下對文本進行排序并取前十個這些面試題 sort xx.txt | tail -n 10,基本都是在圍繞其在設(shè)計。

  3. 常用腳本的書寫

  4. 高級話題:Linux下的IO模型,epoll和poll的區(qū)別等。

5 算法

通??嫉乃惴}會是一些較為簡單的算法或者經(jīng)典算法。ACM經(jīng)驗會讓你如魚得水。

復(fù)雜度的概念,二分查找,快排的實現(xiàn),一些貪心算法,DP,數(shù)據(jù)結(jié)構(gòu),樹和圖論,位操作,字符串。

總的來說不會很難,要么是考驗思維的算法,要么是可以直接套用經(jīng)典算法的模板,主要是考研面試者的算法思維,畢竟不是算法崗。

6 其他

  1. 業(yè)務(wù)場景的設(shè)計。諸如讓你設(shè)計一個搶紅包的流程,做一個秒殺的系統(tǒng)等等,重點考察的是一個面試者綜合考慮問題的能力。

  2. 你項目中最有挑戰(zhàn)的一個技術(shù)點。

  3. HTTP協(xié)議,TCP/IP協(xié)議

  4. 容器技術(shù)Docker,k8s。這一塊筆者沒接觸,不妄加討論。

7 HR

  1. 你的職業(yè)規(guī)劃是什么?emmmmm

  2. 期望薪資。別不好意思,你自己能拿多少心里沒有點B+樹嗎!

  3. 你有沒有女朋友?喵喵喵?



免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉