Java面試題(一)

HolleDream發表於2020-10-25

Java面試題總結:基礎及語法169道

收集整理:秦疆 聯絡方式QQ:24736743 微信:qinlvejiang

答案來源收集與網際網路,部分內容經供參考,程式碼全部為手寫驗證通過.

1~20

1.Java跨平臺原理(位元組碼檔案、虛擬機器)

C/C++語言都直接編譯成針對特定平臺機器碼。如果要跨平臺,需要使用相應的編譯器重新編譯。

Java源程式(.java)要先編譯成與平臺無關的位元組碼檔案(.class),然後位元組碼檔案再解釋成機器碼執行。解釋是通過

Java虛擬機器來執行的。

位元組碼檔案不面向任何具體平臺,只面向虛擬機器。

Java虛擬機器是可執行Java位元組碼檔案的虛擬計算機。不同平臺的虛擬機器是不同的,但它們都提供了相同的介面。

Java語言具有一次編譯,到處執行的特點。就是說編譯後的.class可以跨平臺執行,前提是該平臺具有相應的Java虛

擬機。但是效能比C/C++要低。

Java的跨平臺原理決定了其效能沒有C/C++高

2020JAVA社招面試問題總結(一年工作經驗)

https://blog.csdn.net/qq_37909141/article/details/108180837?utm_medium=distribute.pc_category.none-task-blog-hot-8.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-8.nonecase&request_id=

位元組跳動實習面試了兩個面試官
第一個面試官
\1. 怎麼自學的,看書,看視訊,研究框架?瞎逼逼了一通,想裝個逼,結果看起來很蠢
\2. 計算機網路為什麼要分那麼多層
\3. 核心態和使用者態
\4. 程式執行緒的區別
\5. tcp為什麼要三次握手,四次揮手
\6. 瞭解零拷貝嗎
\7. hashmap底層原理
\8. 紅黑樹的特點(好煞筆啊,這會兒才想起來那五個特點,當時瞎說什麼平衡二叉樹,誰不知道這是個平衡二叉樹)
\9. 作業系統中,從網路介面到使用者空間的資料流向問題
\10. mysql聚簇索引和非聚簇索引的區別
\11. 用過哪些資料庫
\12. 面了哪些公司
\13. 資料庫三大正規化
\14. java物件建立到回收的過程
\15. 手撕程式碼:1. sql 2. 給一個二維字元陣列和一個字串,看看這個字串在不在二維陣列裡
第二個面試官
\1. 瞭解哪些開源專案,傻逼兮兮說了netty,都是坑
\2. 一般netty用來幹嘛的
\3. 半包粘包怎麼解決的
\4. 看過哪些編解碼器呢
\5. 看過哪些channel
\6. spring有哪些even呢
\7. rocketmq事務訊息什麼意思
\8. half訊息一開始不可見嘛,怎麼實現的不可見(我以為會問異常回撥,這一下子給我整蒙了)
\9. sentinel熔斷器簡單說一下
\10. 用linux實現統計一個檔案裡的ip頻率出現最高的10個
\11. 手撕程式碼,兩個佇列實現一個棧
總結和體會:1. 作業系統太弱了;2. 經常答非所問,覆盤的時候才明白麵試官的意圖,表達能力需要提高;3. 準備的問題基本沒被問到,感覺位元組跳動很重視基本功和整體的理解。。達到面試官的要求不知道還要多久。。。

作者:我要進國企!
連結:https://www.nowcoder.com/discuss/511499
來源:牛客網

我是從2月份開始準備,一開始就看完了java基礎,雖然基本看完沒啥印象了。計網和資料結構的話都是本科學的了,沒啥印象了sad,然後就開始看面經了,這時候高頻的面經還都是去年總結的,所以我看的面經還挺有大局觀的hhh,就老是看到牛友說要先打好基礎,然後再狂刷面經,當時的我錯誤的估計了我菜的程度,居然準備開始先修煉內功,把書先看紮實了。。。再回頭來刷面經,於是我開始了悠閒的看書之旅。。。真是恐怖的想法hhh,看了一段時間計網、作業系統、資料庫後,時間來到3月份了,牛客網找實習的帖子多了起來,這時候一個更恐怖的想法就出現了。。。我要去找實習,那會刷了一丟丟劍指,我就開始投簡歷了,真是佩服那會的一腔孤勇,像個傻子一樣。其實現在想想春招找實習是很幸福的,基本都不用筆試就能面試真的很友好,春招的面經我就列一下,秋招的我就不一家一家列了,彙總了一下~依稀記得第一家給面試機會的是七牛雲,一開始我以為不是大廠應該難度還好吧。。還好吧。。。後來我被毒打以後才發現我是弟中弟,這應該是最慘的一次面試了。。我大概回答了15個不會。。你懂我的意思吧。吧。。。

好了上面經,七牛雲

  1. 常見的密碼加密演算法
  2. Redis做快取的原因
  3. B+樹、B樹、紅黑樹二叉樹做索引區別
  4. B+樹和hash索引
  5. Mysql主從複製
  6. Mysql讀寫分離
  7. 怎麼利用索引來進行查詢
  8. 程式 執行緒 綠色執行緒
  9. 怎麼優化IO效能
  10. 執行程式為什麼可以超出記憶體容量
  11. 容器和虛擬機器有什麼區別
  12. OSI七層模型
  13. NAT
  14. ++是執行緒安全的嗎
  15. java是動態還是靜態的
  16. 為什麼要編譯成位元組碼
  17. 設計模式

嗯。。。確實是給當時年幼的我好好上了一課。。。我差點就準備躺平去研究所了。。。。又低效率學了一個月,4月份出擊~

Aibee

  1. leetcode 34
  2. Top K

問了幾個問題後,小哥哥開始讓我直接寫程式碼了,年幼的我第一次手撕程式碼。。。卒

快手

  1. 手寫單例模式
  2. 判斷連結串列是否有環
  3. 找出連結串列的入口節點
  4. 兩個字串的最長公共子序列
  5. 反轉連結串列(遞迴非遞迴)

面試老哥人不錯的,發現我稀爛的基礎後話不多說,寫題寫題,有了第一次的經驗,這次的我居然寫出來了4個。。。可能基礎太拉閘,還是沒能突破第一輪

於是感覺看書太慢了,開始看面經速成,準備應付一波,通過個第一輪,這時候已經差不多5月份了吧,心態也出現了一些微妙的變化,之前覺得自己很菜,過不了也很正常,挺無所謂的,但這會本科舍友上岸了,壓力就來了hhh人果然還是要被push

問境

  1. 資料庫事務有哪些特性

  2. Mysql事務的是實現原理

  3. Mysql索引

  4. Mysql隔離級別

  5. 程式和執行緒

  6. TCP/IP協議四層模型

  7. 三次握手、四次揮手

  8. TCP和UDP區別

  9. 流量控制、擁塞控制

  10. aop含義

  11. aop的實現原理

  12. 快排的思路

  13. 無向圖的複製

這次因為已經5月份了,我普通題其實已經背了一些了,應付小公司問題不是很大,1-12基本答得還可以,感覺就穩了。。。結果這次手撕不會,圖永遠的神。。。話不多說繼續複習

一晃5月底了,劍指刷完了,開始leetcode。。基礎繼續複習,然後學校就準備開學了,封閉管理,思考了一下,決定還是去學校吧,到了學校迎來了第一戰58同城,我投的這些其實都是我不想去的,因為我真的很怕面試留記錄hhh,所以這些公司看上去挺偏的,南京上海的我一個沒投。。。準備再醞釀醞釀。。

58同城

  1. 資料庫讀寫分離原理
  2. 事務中原子性的實現
  3. Redis的瞭解
  4. 執行緒池中的引數
  5. 執行緒池初始化後有執行緒嗎
  6. private
  7. spring ioc aop
  8. hashmap原始碼
  9. volatile
  10. 單例模式手寫
  11. top k

這是一個女程式設計師面的我,第一次遇到女面試官呢,面完就說我過了hhh,不錯不錯。。。但說出來你可能不信,現在9月份了,我還在等二面呢,這真是一個悲傷的故事。。。。到這邊感覺我已經有點感覺了,leetcode100題,基礎內容計網、作業系統、mysql、spring、java基礎、java併發、jvm的話基礎題已經瞭解了

然後這時候我上岸了順豐實習,我人生的第一個實習offer吧,不錯不錯,然後還拿了一些金融證券的。。。雖然我最後一個實習都沒去。。。那麼這究竟是為何呢,請看下一集《秋招》

​ 秋招歷程 6月份到了學校以後,突然發現VIVO提前批開始了,我的天,怎麼會有公司這麼早啊啊。。。當時心態都崩了,難道今年因為疫情都這麼早的嗎,後來才知道,不不不,只有VIVO這麼早滴~抱著試一試的想法,我就投了一波VIVO,這邊吹爆VIVO效率,筆試、技術面、Hr面、發offer一週結束,於是我就拿到了人生第一個sp offer,這運氣也太好了吧,還是在南京,我這會就感覺特別滿意了,想結束秋招了,順豐自然也是不想去實習了hhh,可能這就是懶狗吧。。。唯一有一些遺憾的就是,這個崗位不是java後端的,是安卓開發的,然後調研了一下客戶端的前景,感覺技術棧不是很穩定,要入行的話還是要想想清楚的,但當時當然是喜悅大約憂慮的,覺得好歹是sp,難度又比java後端小好多,有一種賺到了的竊喜hhh。之後的幾天題也刷得少了,面經也不怎麼整理了,心情舒暢,逛逛牛客,養老式複習開始了。之後看看脈脈之類的,就感覺可能私企的話確實沒有國企適合自己吧,而且這時候的技術配上雙南理工的學歷,進國企基本上還是挺穩的,所以這段日子過得還是很開心的,順便看看行測啥的,為銀行、事業單位考試做做準備,歲月靜好,感覺這樣一直到秋招結束的話應該是愜意的。。。。但大概人就是奇怪的動物,等到7月多的時候,周圍陸續有人上岸了大廠,因為做技術的嘛大廠其實都聽過的,肯定也都想試試的嘛,於是就投了幾個大廠的後端,不出意外百度上海有點難的簡歷沒過;然後位元組DNS解析虛擬碼沒寫出來、掛;滴滴sp專場三面掛、其實表現還可以(小聲bb)排序掛了、大家確實很強;然後網易雲提前批筆試3/4筆試沒過img,這時候面試官的評價一般都是基礎還可以,廣度不太行,於是7月底吧,我又重新進入了網際網路複習模式hhh

我的演算法水平一直還可以,因為我是跟著大雪菜學的,在8月份我把他B站的刷題課,跟著一起刷了一遍,確實按塊刷的效果是非常顯著的,我後來的面試手撕中,貌似就快手華為手撕翻過車hhh強烈推薦大家跟著y神學,y神我永遠滴神!

然後技術棧的話在這段時間,我把redis和kafka仔細看了看,增加到了簡歷中嘿嘿,可一定要很熟悉再加嗷~然後基礎的話,因為面經其實複習得還可以了,鞏固的話意義一般吧,這段時間主要就是看書,我看的書有《高效能Mysql》、《Redis設計與實現》、《Kafka技術內幕》、《Spring技術內幕》、《深入理解java虛擬機器》、《java併發程式設計的美》、《計算機網路自頂向下的方法》,感覺純看面經知識點還是不夠連貫,我這邊的話一般一週面一次,然後一週的話,6天在看書寫題,1天用來刷面經,然後面試,然後再6+1這樣,無限迴圈,無限月讀hhh

現在的話vivo(安卓)、oppo(java後端)、中興(不懂)、貝殼(java後端)、位元組(後端)過了,滴滴等意向書,華為等主管面,美團等三面,京東等後續;就是一步步打怪升級的過程,bat的話可能緣分還是沒有到,作為一個懶狗已經比較滿意了,準備面完華為美團就結束了嘿嘿~感覺是經典的半場開香檳哈哈哈哈

面試真的是很玄學的,感覺就是緣分到了,實力到了就過了,拿滴滴來說吧,這次的三面就很玄幻,太逗了,面完第一輪,那個面試官說,你特別適合我們這啊,我心裡想(兄弟,你又不是主管,別給我畫餅啊。。你難道還有權利直接要我的咯。。)然後再大家都在等待二面的時候,我直接二面面試官秒過來面我了。。。15分鐘結束聊聊天,然後三面面試官說,他們說有個xx很符合我們要求,我直接來了。。。然後又是嘮嘮嗑寫個題結束了,說過了,等訊息就行。。。真是玄幻。。。(一面面試官我錯了,你地位還是高的hhh)最後我總結一些常見題吧,大佬們珠玉在前了,我就稍微寫一寫吧

常見面試題

計算機網路

  1. 網路模型和協議

  2. TCP和UDP的區別

  3. UDP如何保證可靠

  4. TCP、UDP、IP報文格式

  5. 三次握手四次揮手

  6. TCP粘包

  7. TCP 協議如何保證可靠傳輸

  8. TCP的流量和擁塞控制

  9. ARQ協議

  10. 從瀏覽器中輸入url之後發生了什麼

  11. DNS伺服器基本流程

  12. http get和post的區別

  13. cookies和session的關係

  14. 伺服器怎麼知道客戶端已經傳送資料完畢?

  15. 數字證照、簽名

  16. HTTP1.0、1.1、2.0之間的區別

  17. HTTP狀態碼

  18. http請求報文有什麼?

  19. http快取

作業系統

  1. 程式間通訊的方式

  2. 執行緒同步的實現方式(拋開語言,作業系統裡)

  3. 程式排程演算法

  4. 死鎖的必要條件和處理方法

  5. 銀行家演算法,死鎖

  6. 虛擬記憶體

  7. 常見的幾種記憶體管理機制

  8. 快表和多級頁表

  9. 頁面置換演算法

  10. 磁碟排程演算法

  11. 阻塞式io和非阻塞式io的區別

  12. IO多路複用,講下select、poll、epoll

  13. NIO、BIO、同步和非同步的理解?

  14. 協程呢?

  15. 程式在自己虛擬地址空間都是什麼

  16. 殭屍程式、孤兒程式

Mysql

  1. 資料庫事務有哪些特性

  2. 髒讀和幻讀的區別是什麼?

  3. 可重複讀的隔離級別下如何保證不幻讀

  4. 非關係型資料庫和關係型資料庫的區別

  5. Mysql mvcc?

  6. 樂觀鎖與悲觀鎖的區別

  7. 資料庫正規化講一下

  8. 主鍵是什麼?

  9. 內連線 左連線 右連線

  10. union與union all的區別

  11. Explain

  12. 最左字首

  13. B+樹的結構?與二叉樹的區別?與B樹的區別?

  14. Hash索引和 B+樹索引優劣分析

  15. 索引用B+樹而不用紅黑樹

  16. 資料庫怎麼優化

  17. 什麼時候不該使用索引?

  18. 聚集索引和非聚集索引的區別

  19. Mysql知道幾種儲存引擎,有什麼區別

  20. 覆蓋索引

  21. 主從複製、讀寫分離、分庫分表

  22. Mysql鎖劃分

  23. Mysql架構

  24. in和exist區別

Redis

  1. Redis有哪些資料結構

  2. String型別的底層實現:

  3. Hash字典型別

  4. Redis漸進式rehash 為什麼

  5. Redis中zset的內部實現跳躍表 為什麼

  6. Redis支援事務嗎

  7. Redis單執行緒還是多執行緒,為什麼?

  8. Redis單執行緒為什麼還併發量那麼高

  9. Redis為什麼快?

  10. 快取穿透以及解決

  11. 快取雪崩以及解決

  12. 快取擊穿以及解決

  13. redis記憶體滿了怎麼辦

  14. Redis持久化的方法

  15. AOF重寫

  16. redis主從結構

  17. redis哨兵

  18. Redis叢集

  19. 叢集是如何判斷是否有某個節點掛掉

  20. 分散式鎖作用

  21. 一致性雜湊

  22. 快取與資料庫雙寫一致

Kafka

  1. Kafka佇列與釋出訂閱

  2. 介紹下kafka都有哪些元件

  3. kafka是怎樣保證全域性有序的 Kafka如何保證訊息的消費順序

  4. kafka 有哪些保證訊息不被丟失的手段 (Kafka如何保證訊息的可靠性)

  5. kafka如何防止訊息重複消費? kafka保證訊息唯一

  6. kafka副本機制 (Kafka如何保證高可用)

  7. ISR:為何用

  8. Kafka訊息是採用Pull模式,還是Push模式?

  9. Kafka的特點

  10. Kafka的實現原理

  11. Kafka儲存機制

  12. kafka寫入資料時的高效能?

  13. kafka如何保證高吞吐 kafak為什麼效率比較高

  14. kafka如何作為系統通知的過程

  15. Kafka一致性

  16. 多個消費者能不能消費同一個分割槽

  17. 除了Kafka還知道哪些訊息佇列?

基礎分散式和大資料場景

  1. 分散式鎖
  2. 分散式事務
  3. CAP、BASE
  4. 分散式ID
  5. 分散式協議
  6. URL黑名單問題:判斷值是否已經存在於集合中
  7. 20億個32位整數中出現次數最多的數:
  8. 40億個非負整數沒出現的數:
  9. 找到100億個URL重複的URL
  10. 40億非負整數出現兩次的數:
  11. 大資料的中位數,桶排序

Java集合

  1. List、set、map三者的區別

  2. ArrayList和LinkedList的區別

  3. HashMap原始碼說一下(細說,從初始化到put、get、擴容、紅黑樹、1.8做了哪些優化)

  4. Hashmap連結串列要轉紅黑樹,為什麼長度超過8轉

  5. 多執行緒Put可能發生的問題

  6. ConcurrentHashMap的實現

  7. Concurranthashmap和Hashtable的區別

  8. concurrenthashmap的 size如何計算

  9. LinkedHashMap,如何在o(1)的時間裡面刪除一個元素

  10. Hashset和hashmap的區別

  11. HashTable與hashMap的不同

  12. TreeMap

  13. List遍歷時刪除元素

  14. 快速失敗(fail—fast)、安全失敗(fail—safe)

  15. CopyOnWriteArrayList

  16. HashMap遍歷時刪除元素

Java基礎

  1. java有幾種基本型別,分別是什麼?String是基本型別嗎?

  2. Final、 static 、this、super關鍵字?

  3. final,finalize, finally有什麼區別

  4. String、Stringbuffer和StringBuilder的區別

  5. Equals方法重寫時為什麼要重寫hashcode方法?

  6. ==和equals的區別

  7. 介面和抽象類的區別

  8. jdk和jre的區別

  9. 深拷貝、淺拷貝

  10. Java中為何要有泛型?

  11. 方法覆蓋與過載的區別?

  12. Java類初始化順序

  13. java的三大特性 物件導向的特性。(封裝、繼承、多型) 的含義

  14. 多型的實現原理

  15. Java有這些許可權:public,protected,private。如果不寫,那預設許可權是哪個?

  16. Java中類修飾符、成員變數修飾符、方法修飾符的種類與類別?

  17. 什麼是記憶體洩漏?Java中存在記憶體洩漏嗎?

  18. RuntimeException有哪些,提到了空指標異常,問怎麼避免空指標異常

  19. 反射了解嗎,應用場景

  20. Jdk動態代理原理

  21. Arrays.sort()的實現?

  22. Java8 有什麼新特性

  23. 記憶體模型

  24. 建立物件的幾種方式

  25. 註解元、標準、自定義

  26. 註解原理

  27. Java I/O的種類

  28. 怎麼實現序列化與反序列化

  29. 5種IO模型的區別

  30. Object方法

Java併發

  1. 什麼是執行緒?

  2. java執行緒通訊同步有幾種方式

  3. 多執行緒共享資料

  4. 訊號量和互斥量的區別

  5. 執行緒是怎麼實現的 執行緒有哪些方法?Wait()是執行緒的方法嗎?

  6. wait和sleep的區別

  7. 執行緒實現各有什麼優缺點?

  8. 要用start()方法區執行run()方法而不是直接呼叫run()方法

  9. 執行緒有幾種狀態 上下文切換

  10. ThreadLocal是什麼

  11. 就緒狀態和阻塞狀態有什麼區別 兩者可以互相切換嗎

  12. 程式和執行緒切換開銷對比

  13. Java中的鎖

  14. CAS的含義 ABA問題

  15. java volatile關鍵字

  16. 說一下volatile 指令不可重排 怎麼不可重排,為什麼不可重排,重排會發生什麼

  17. Volatile關鍵字和synchronized關鍵字

  18. synchronized三種使用方式:

  19. synchronized的瞭解

  20. synchronized鎖狀態轉換

  21. synchronized實現原理?

  22. synchronized和Lock的區別?

  23. AQS,基於AQS實現的lock, CountDownLatch、CyclicBarrier、Semaphore介紹

  24. CyclicBarrier 和 CountDownLatch 的區別

  25. 非公平鎖和公平鎖

  26. JUC原子類

  27. 兩個執行緒讀,一個執行緒寫,如何實現,不用鎖可以嗎

  28. 執行緒池作用、引數、有幾種

  29. Executor

  30. workQueue:

  31. 拒絕策略有幾種?

  32. Java中如何正常終止執行緒?

  33. 主執行緒可以捕獲子執行緒丟擲的異常嗎?

  34. 多執行緒個數?

JVM

  1. java虛擬機器執行的流程

  2. java虛擬機器的核心設計思想

  3. JAVA記憶體如何分配?

  4. 畫出java執行時記憶體區結構圖

  5. 堆區如何分類

  6. 堆與棧區別

  7. 為什麼要把字串常量池放到堆區

  8. java8方法區的變化

  9. 判斷物件已經無效

  10. 引用計數法實現原理

  11. 哪些物件可以作為GC Root

  12. GCRoot詳細

  13. finalize()方法回收物件的兩次標記過程

  14. Java四種引用及場景

  15. 垃圾回收演算法和流程

  16. 如何減少full gc的次數?

  17. 方法區是否需要gc

  18. 檢視GC狀態的命令

  19. CMS收集器的流程

  20. G1收集器的流程

  21. CMS收集器和G1收集器的區別

  22. 記憶體管理(物件建立、佈局、訪問定位)

  23. 堆記憶體分配策略

  24. 檢視java虛擬機器記憶體佔用?

  25. java的類載入流程

  26. 類載入器

  27. 類載入器的雙親委派

  28. 為什麼需要雙親委派

  29. 執行緒上下文類載入器

  30. 物件的建立過程

  31. Class類檔案怎麼回收

  32. Minor Gc和FULL Gc的區別

框架的話其實就ioc、AOP、Bean生命週期、MVC最好還是搭配技術內幕看看原始碼,不用很廣,需要深度0

相關文章