拿到鵝廠的Offer啦!

企鵝想必是大部分開發者夢寐以求的歸宿了,除了有豐富的福利之外,還有優厚的薪資待遇,以及大廠光環,即使幹幾年跳槽了,也能有很多選擇。

這不,訓練營的小夥伴在拿下字節跳動之後,又拿下一城,順便把騰訊也給收了:
4fd85302bcbf429015cd4c39c5373d8.png
但弱水三千只取一瓢飲,去哪家公司變成了最大的苦惱了,果然,優秀的人從來都不缺機會。

好了,那咱們這些喫瓜羣衆來看看騰訊面試題的難度吧,看看咱們這些普通人是不是也能搞定這場面試呢?

1.自我介紹一下?

好的自我介紹要講清楚以下問題:

  1. 你是誰?我是張三,今年有N年工作經驗/XXX大學畢業的24屆學生。
  2. 你會啥?技術棧 -> 招聘崗位的技術要求去說。
  3. 你最大的成就是啥?-> 程序設計大賽的名次/XXX個項目。

2.ThreadLocal什麼情況內存泄漏?

ThreadLocal 內存泄漏的場景有以下兩個:

  1. 使用完 ThreadLocal 之後沒有進行 remove 操作。
  2. ThreadLocal 相關的線程未關閉(ThreadLocal 生命週期和線程相關)。

3.Spring AOP實現原理?

AOP 底層實現是:動態代理

動態代理的具體實現:

  1. JDK Proxy
  2. CGLib

4.單例模式的好處?

  1. 整個生命週期只有一個對象 -> 對象複用
  2. 性能比較好(對象在使用前初始化好了)。

5.Redis內存結構知道哪些?

內存結構=數據類型,總共有以下幾種:

  • 字符 -> 簡單動態字符。
  • Hash -> 哈希表。
  • List -> 雙向鏈表。
  • Set -> 哈希表 + 數組。
  • ZSet -> 壓縮列表(ziplist)/緊湊列表(listpack) + 跳躍表(skiplist)。

6.說說Redis過期鍵的刪除策略?

Redis 過期刪除策略包含以下兩種:

  1. 惰性刪除:查詢時在檢查 key 是否過期 -> 內存利用率比較低。
  2. 定期刪除:每秒檢查設置了過期鍵的鍵值對,把過期的數據進行刪除 -> 不是檢索所有的數據進行刪除、定期刪除有最大的執行時間。

7.緩存雪崩以及如何解決?

緩存雪崩是指有大量緩存同時失效,造成了大量請求發送到數據庫。

緩存雪崩的常見解決方案:

  1. 設置隨機的過期時間。
  2. 緩存預熱:當緩存快要過期之前,先去預加載緩存。
  3. 使用多級緩存:分佈式緩存(Redis)+本地緩存。
  4. 使用限流手段。

8.MySQL爲什麼要選用B+樹?

使用排除法:Hash、鏈表(查詢慢)、AVL(二叉樹添加、刪除、查詢性能低)、黑紅樹(二叉樹添加、刪除、查詢性能低),所以只剩下多叉樹:B 樹、B+ 樹。

B+ 相比於 B 樹的優勢:

  1. B+ 樹 IO 次數更少,查詢效率高。
  2. B+ 樹有冗餘節點,寫入(新增/刪除)通常改動小,速度快。
  3. B+ 節點之間使用有序鏈表來連接,所以更適合範圍查詢。

9.如何優化MySQL查詢效率?

MySQL 查詢效率優化的手段有以下幾個:

  1. 使用正確的索引進行查詢。
  2. 儘量能夠實現索引覆蓋(無需回表查詢效率高)。
  3. 不能使用 select *。
  4. 不能進行函數運算。
  5. 數據量比較大的情況下,可以分庫分表。
  6. 使用分佈式數據庫,例如 TiDB。

10.說說聯合索引和覆蓋索引?

聯合索引是一種在數據庫中對多個字段同時建立的索引,它包含這些字段的值,並且這些值在索引中有特定的順序。

聯合索引的特徵是:

  1. 多字段組合:聯合索引可以包含兩個或更多的字段,這些字段的值一起構成了索引鍵。
  2. 有序性:組成聯合索引的字段順序是重要的,不同的順序會創建不同的索引。例如,ABC 和 ACB 是兩種不同的聯合索引。
  3. 最左匹配原則:在使用聯合索引進行查詢時,SQL 語句中的條件應該涉及到聯合索引的最左邊的字段,這樣才能充分利用索引的優勢。如果不遵循最左匹配原則,索引可能不會被使用。

索引覆蓋是數據庫優化查詢性能的重要手段之一,索引覆蓋是指查詢所需的所有列數據都可以從索引中直接獲取,而不需要回表查詢原始數據行。

例如,我們員工表中有一個聯合索引 age,id,此時我們使用以下 SQL 查詢時就是索引覆蓋(無需進行回表查詢):

select id from users where age>18

但如果是 select * 的話就需要回表查詢了,因此索引覆蓋是數據庫優化查詢性能的重要手段之一,能不使用 select * 就不要使用 select *。

11.JVM 永久代存的是什麼內容?

永久代是 Hotspot JVM 在 JDK 7 之前的叫法,而 JDK 8 之後就更改爲元空間了。

永久代包含的內容如下:

  • 類信息。
  • 常量池。
  • 靜態變量(JDK 7 後移動到堆上)。
  • 字符串常量池(JDK 7 後移動到堆上)。

12.SpringBoot如何做到啓動的時候注入一些Bean?

依靠的是自動裝配機制 -> 自動裝配的底層實現是反射機制

13.SpringBoot 默認的包掃描路徑?

默認的包掃描路徑是 Spring Boot 啓動類(添加了 @SpringBootApplication 註解的類)的同級目錄,爲默認的包掃描路徑。

14.TCP 爲什麼需要 4 次揮手?

  1. 第一次揮手原因(客戶端發消息給服務器端):此請求一定需要,因爲我要告訴對方要斷開連接。
  2. 第二次揮手原因(服務器端消息應答):TCP 本身它有消息應答,我要告訴發送方我收到你的消息了。
  3. 第三次揮手原因(服務器端發消息給客戶端):服務器端要將接收緩衝區的任務執行完之後,才能真正的斷開連接。
  4. 第四次揮手原因(客戶端消息應答):對第三次握手的確認應答,真正的斷開連接的迴應。

15.java.util.concurrent包下了解哪些?

JUC 下的四個著名類:

  1. ReentrantLock:加鎖機制,保證線程安全。
  2. Semaphore:基於計數器實現的限流器。
  3. CountDownLatch:用於一個線程等待其他多個線程完成各自工作之後才能繼續執行的場景。它像是一個倒計數器,當計數達到零時,等待的線程被喚醒繼續執行。
  4. CyclicBarrier:允許一組線程相互等待,直到所有線程都準備好繼續執行。與 CountDownLatch 不同的是,CyclicBarrier 可以重用,並且可以指定在釋放等待之前每個線程必須完成的工作。

一起刷面試真題

我最近晚上 20:00~22:00 都在直播間帶大家一起刷大廠面試真題,大家可以關注一波:
image.png

本文已收錄到我的面試小站 www.javacn.site,其中包含的內容有:Redis、JVM、併發、併發、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設計模式、消息隊列等模塊。

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