三年java面試題


前言: 樓主畢業三年,從大學時期就開始一直從事java web方面的開發。我在去年的今天有一篇帖子:兩年java面試經驗。經歷了一年的上班,成長了很多。今年因為某些原因辭職了。從2月底辭職,到3月初,大概花了半個月的時間,面試了很多家公司,其中包括:阿里、京東、去哪兒、美團、攜程等互聯網公司,在此分享一下面試的經驗,整理一下三年的java web的開發面試經驗,希望能給廣大的網友朋友一些參考,大家共同進步:

1:手寫一個單例模式(雙重檢查鎖機制)

2:volatile是如何實現變量可見的?用到了哪些指令?工作內存和主內存解決了什么問題?以及他們之間的交互過程

3:jvm如何調優?寫幾個參數出來?嘗試設計一個自己的JVM,你會如何設計?

4:dubbo的group怎么用?超時時間設置的作用域有哪些?優先級是什么?

5:ThreadLocal底層如何實現?map中的key是什么?vlaue是什么?需要解決什么問題?哪個方法可以防止內存泄露

6:講一下currentHashMap的get方法過程,如何鏈表轉紅黑樹?

7:有一個表t1,列為ABC,索引為AC,現在select xx from table where c=xx a =xx有沒有用到索引?

8:cas是什么?給你筆畫一下具體的實現過程?cas什么時候結束?

9:java的鎖存儲在哪?占幾個比特位?鎖是如何升級的?

10:redis的緩存淘汰策略有哪些?LRU和LFU區別,手寫一個LRU

11:寫出線程池的核心參數,並解釋,然后說明線程池是有哪些放棄策略?

12:http屬於什么層協議?與https的區別是什么?Tcp協議屬於那一層?OSI七層網絡模型有哪些?三次握手和四次揮手的過程?為什么握手要三次,揮手要四次?

13:線上cpu占用率高怎么辦?如何排查這個問題,用哪些命令

14:spring使用了哪些設計模式?BeanFactory和Factory的區別是什么?

15:策略模式的使用場景?說一下它的優點和缺點?

16:給你一個秒殺場景,如何應對短時間的高峰請求問題?數據庫如何防止並發問題?秒殺如何實現不同的客戶端的時間一致性?

17:redis的基本數據類型有哪些?hash的使用場景?如何通過redis實現一個阻塞隊列?

18:畫出dubbo的調用關系圖?並舉例說明調用鏈

19:cas是什么?解釋一下cas的原理。並用筆畫出來,aba問題怎么解決?

20:你們的線程池是如何配比的?默認的線程數是多少?寫出線程池的幾個參數,並結合你們的項目解釋一下是如何調優的?

21:sring的事務用過嗎?簡述一下如何使用?當方法A使用了事務,方法B也使用了事務,他們的事務策略都是:如果沒有新的事務就開啟一個事務,問調用過程中事務是如何傳播的?

22:給你一串連續的數字,1到10000,隨機除去兩個數,怎樣快速找到這兩個數?

23:tomcat的IO框架經歷了怎樣的變化?談談你對NIO流的理解?

24:redis的緩存策略有哪些?手動寫一下LRU的實現方法,並介紹一下LFU

25:redis的集群是如何找到具體的key的?你們的集群采用哪種持久化策略?為什么?集群搭建模式是什么?

26:一串有負數和正數的數字,用算法實現連續的數字加起來的和最大的一串數字?

27:hashmap為什么是線程不安全的?線程安全的有哪些集合?講一下集合框架,包括map和list

28:秒殺場景下如何實現分布式鎖?redis搭建的集群會存在並發問題嗎?怎么解決?

29:目前jdk用的垃圾回收器是什么?講一講垃圾回收的內存划分?引用鏈可達是從哪里開始回收的?擴展:職責鏈模式

30:java有哪些加載器?Java的類加載機制是什么?雙親委派機制是什么?有什么好處?我如果想自定義一個名為Object的類,如何加載它?

31:你知道哪些設計模式?在項目中用到了哪些設計模式?講一講具體的應用場景和實現方式

32:redis集群是把數據存儲在所有節點嗎?如果是存儲一個節點?它怎么知道存儲到哪個節點?當master節點掛了,緩存是不是就刪除了?增加一個節點或者刪除一個節點,集群會怎么處理?

33:方法前如果不聲明private、public,那么是什么?它的級別是什么?

34:有沒有線上調優JVM的經驗?如何打印gc細節?

35:把你知道的GC算法都說一下,虛擬機經歷了怎樣的變化才發展到今天?

36:你做了什么項目?有哪些功能?有什么優勢?解決了什么問題?你認為還有那些優化的點?

37:什么是可重入鎖?假如我一個線程申請了可重入鎖,那么子線程可以再次用到可重入鎖嗎?

38、jvm的內存結構是什么樣的?請畫出來並且是哪些是線程共享的?哪些是線程私有的?

39、雙向升序鏈表的插入和刪除(筆試)

40、二維數組的遍歷和賦值(筆試)

42、算法:一個公司找獵頭拿簡歷 1000份,每個獵頭需要的佣金一樣,但每個獵頭擁有的簡歷數不相同(可能重復) ,問公司如何能雇佣最少的獵頭找到更多的簡歷

42、 接口限流策略有哪些

43、微服務雪崩后怎么處理的?

44、多線程環境,線程如何同步?

45、用多線程統計1到1000000之間有多少個素數,並輸出素數(假設cpu有四核)(機試)

46、用java實現各訂單生成器,需要考慮可讀、並發、不可重復(機試)

47、歸並排序(機試)

48、rabbitmq消息重復和丟失如何處理?

49、一個部分有序的數組,如何找到一個指定的數字?要求時間復雜度不能超過log(n)

50: hystrix如何實現服務降級、治理、熔斷,講一講微服務中服務熔斷的過程?你們都是怎么處理的?

 51:mysql的limit查詢如何進行優化?索引遵循什么原則?

52:ElasticSearch了解嗎?ElasticsSearch如何計算評分?評分公式寫出來,有哪些查詢命令?

53:微服務的事務你們用什么解決?事務的傳播機制,方法A調用方法B,方法A有事務,問調用方法B還會有事務嗎?

總結: 看一下兩年的面試和三年的面試,有一個很明顯的變化是:目前市場對三年的要求不僅重視深度,並且重視廣度。大公司對於的算法的重視程度基本是首位的。現在的面試都不僅僅讓你回答,更是讓你用筆寫出來,給面試官解釋清楚問題。所以如果是很模糊的話,就基本沒戲了。也包括一些機試題,三年的技術總結更加重視於高並發的處理,包括不限於消息隊列、鎖、redis、mysql、jvm、事務、微服務的考察都是互聯網公司必面試的,所以不僅要臨時抱好佛腳,更要重視平時在工作中的積累。2019年是個行情很差的年份,很多人出去找工作好幾個月最終都無功而返。但我不唱衰行業,任何時候都是優勝略汰制,就業環境差了,但是作為一名開發,技術才是考量你的第一因素(當然我的意思不是唯技術論,情商和素質、與同事相處也同等重要),路漫漫其修遠兮,大家共勉加油吧。

再次送上福利:加java技術群:618626589 ,群資料里有,隨時可下載(群內無任何廣告和推銷培訓,博主是自學過來的,推薦自學的朋友一起交流技術)ps:為什么我要建自己的群:博主也加了很多群,大部分都是在閑扯,斗圖,無聊的話題,我選擇自己創建一個純技術交流群,旨在創建一個干凈的交流環境,歡迎各位高手或者新手加入!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM