1. 程式人生 > 其它 >2021年最新Java面試經歷

2021年最新Java面試經歷

2021年最新Java面試經歷

一、阿里 (會員中臺)

1. Java

  • 重寫hashcode()是否需要重寫equals(),不重寫會有什麼後果

2. 併發

  • 自旋鎖和阻塞鎖的區別
  • 公平鎖和非公平鎖的區別
  • jdk中哪種資料結構或工具可以實現當多個執行緒到達某個狀態時執行一段程式碼
  • 柵欄和閉鎖的區別
  • 如何使用訊號量實現上述情況

3. JVM

  • 新生代和年老代的GC演算法分別是什麼
  • 標記清除和標記整理的區別
  • 瞭解過CMS收集器嗎

4. 網路

  • 解釋HTTPs
  • HTTPs為什麼要用對稱加密+非對稱加密,相對於只使用非對稱加密有什麼好處

5. 資料庫

  • 給定一個表,其中有三列(員工名稱,工資,部門號),找出每個部門工資最高的員工

6. 程式碼

  • LeetCode 863 二叉樹中所有距離為K的結點

二、阿里 - 新零售技術事業群(一面掛)

1. 框架

  • 用過哪些Java開源框架
  • 講一講對Spring的理解
  • 看過IOC和AOP的原始碼嗎
  • 它們底層是如何實現的
  • 用過其他什麼框架
  • 瞭解過分散式或者微服務的開源框架嗎
  • 講一講對分散式系統模型的理解
  • 分散式系統中有一個節點宕機怎麼辦
  • 分散式系統如何實現負載均衡

2. 資料庫

  • MySQL和Oracle資料庫有哪些不同
  • 資料庫有哪些鎖
  • 表鎖和行鎖的區別
  • 哪些場景需要加表鎖
  • 插入一條資料需要加什麼鎖
  • 分散式資料庫如何保證資料可靠性
  • 瞭解過MySQL的主從複製嗎

三、騰訊 - TEG

1. 資料結構

  • B+樹與紅黑樹的區別

2. Java

  • HashMap的底層資料結構,侷限性與執行緒安全
  • 如何實現執行緒安全的HashMap
  • Collections.sychronizedMap與ConcurrentHashMap的區別
  • HashMap與ConcurrentHashMap的效能比較

3. JVM

  • 類的編譯過程
  • 類的載入過程
  • JVM的記憶體空間
  • JVM的GC機制

4. 作業系統

  • 程序與執行緒的區別
  • 程序間如何通訊
  • 共享記憶體與Socket的優缺點與效能比較
  • 子程序從父程序繼承了什麼
  • 什麼是殭屍程序
  • 執行緒與協程的區別

5. 網路

  • TCP的四次揮手
  • TIME_WAIT狀態處在哪一方以及為什麼需要它
  • TCP與UDP的區別與可靠性
  • 如何實現UDP的可靠傳輸

6. 資料庫

  • 解釋ACID四大特性
  • 原子性的底層實現
  • 資料庫宕機後恢復的過程
  • 如何保證事務的ACID特性
  • MySQL日誌型別

7. 分散式

  • 談談對分散式系統的理解
  • 分散式資料庫的實現
  • 如何保證不同資料庫之間的資料一致性
  • 如何實現主從資料庫間的同步

四、騰訊 - FIT

1. 網路

  • TCP三次握手/四次揮手
  • TIME_WAIT狀態
  • 網路延遲大的情況怎麼處理
  • HTTP請求到響應全過程(服務端)
  • HTTP請求頭及其作用
  • HTTP和HTTPs
  • HTTPs的握手過程

五、位元組 - 頭條(二面掛)

1. 一面

  • 作業系統
  • 講一講程序和執行緒
  • 講一講多執行緒和執行緒池
  • Linux的最大程序數限制

WEB

  • 輸入URL到頁面載入的過程
  • 後端怎麼處理前端傳過來的檔案

JVM

  • GC機制(GC演算法,分代收集,收集器,STW)

程式碼

  • 給定一個數組a[N]和一個整數P,求a[i] + a[j] + a[k] =P,保證i<j<k

2. 二面

資料庫

  • 身份證如何有效建立索引
  • Innodb索引型別
  • 聚簇索引和非聚簇索引的區別
  • 索引失效的情況
  • 寫一個分頁查詢

Java

  • JMM記憶體模型
  • Classloader雙親委派機制
  • 講一下ThreadLocal
  • 執行緒間如何通訊

六、位元組 - 頭條 - 客戶端開發(已拿offer)

1. 一面

作業系統

  • 講一下程序和執行緒
  • 講一下執行緒安全

智力題

  • 兩個人拋硬幣,先拋的人贏的概率

程式碼

  • 單鏈表排序,奇數位升序,偶數位降序

2. 二面

WEB

  • HTML,JS,CSS的區別
  • 輸入URL到頁面載入的過程
  • HTTP的長連線和實現原理

Java

  • 建立和終止一個執行緒
  • 講一下熟悉的容器類
  • ArrayList中如何刪除某個元素的所有相同元素
  • 講一下迭代器的實現原理

SQL

  • 學生表 Student (S#,Sname,Sage,Ssex),課程表 Course (C#,Cname),成績表SC (S#,C#,score),查詢平均成績大於 60 分的同學的學號和平均成績

程式碼

Leetcode 283 移動零

3. 三面

智力題+資料結構+程式碼

  • 撲克牌的移動

併發

  • 樂觀鎖和悲觀鎖的區別
  • 兩種鎖在Java中的具體實現
  • 兩種鎖的使用場景

七、阿里 - 供應鏈平臺事業部(二面掛)

1. 一面

框架

  • 講一下IOC
  • 對SpringBoot的理解
  • Mybatis中#和$的區別

Java

  • HashMap底層實現和擴容機制

程式碼

  • Leetcode 206 連結串列反轉

資料庫

  • InnoDB和MyISAM的區別

其他

  • SQL注入

2. 二面

演算法和資料結構

  • 講一下紅黑樹
  • 紅黑節點的個數
  • 紅黑樹的插入刪除查詢時間複雜度
  • 講一下B+樹
  • B+樹的插入刪除查詢時間複雜度
  • 講一下堆的性質及應用場景
  • 建堆時間複雜度
  • 各種排序演算法的時間複雜度及穩定性

資料庫

  • 講一下三正規化

網路

  • 為什麼要三次握手
  • 二次握手有什麼問題
  • 三次握手有哪些缺陷
  • TCP是如何控制流量的
  • 傳送方傳送頻率過高造成丟包,TCP是如何解決的
  • 講一下OSI網路架構
  • HTTP在哪一層
  • HTTP報文結構
  • HTTP首部欄位
  • HTTPs加密在哪一層實現

作業系統

  • 講一下虛擬記憶體
  • 如果訪問虛擬地址時,該地址在實體記憶體中不存在,會發生什麼

Java

  • 講一下volatile
  • volatile底層實現
  • static修飾用法和區別

JVM

  • 講一下GC演算法
  • JVM記憶體空間

程式碼

  • Leetcode 2 連結串列相加

函數語言程式設計

  • 函數語言程式設計和麵向物件程式設計的區別
  • jdk8為什麼要引入函數語言程式設計

機器學習

  • 講一下梯度下降
  • 梯度下降能保證收斂嗎

完結

Redis基於記憶體,常用作於快取的一種技術,並且Redis儲存的方式是以key-value的形式。Redis是如今網際網路技術架構中,使用最廣泛的快取,在工作中常常會使用到。Redis也是中高階後端工程師技術面試中,面試官最喜歡問的問題之一,因此作為Java開發者,Redis是我們必須要掌握的。

Redis 是 NoSQL 資料庫領域的佼佼者,如果你需要了解 Redis 是如何實現高併發、海量資料儲存的,那麼這份騰訊專家手敲《Redis原始碼日誌筆記》將會是你的最佳選擇。

**感興趣的朋友可以通過點贊+戳這裡的方式免費獲取

百度網盤連結:pan.baidu.com/s/1BDrBZ5sv4rzxyDDFLbpocw

提取碼:exa7

騰訊專家手寫Redis原始碼日誌筆記pdf版本!**