2021 金三銀四的最後一次 Java 面試,快手三面一輪遊,如今已拿意向書!

熬夜不加班發表於2021-05-27

2021 金三銀四的最後一次Java面試,我去了快手。快手的面試挺有挑戰性的,而且還特別有意思,感覺啥都能問到。(二面是10天前約的面試,差點要忘了)然後是HR面,前天我就收到offer。

image.png

一面二面啥的我都忘記具體的了,就簡單的總結一下

1 基礎

  • 為什麼 Java 中只有值傳遞?

  • int 範圍?float 範圍?

  • hashCode 與 equals,什麼關係?

  • String StringBuffer 和 StringBuilder 的區別是什麼?String 為什麼是不可變的?

  • Java 序列化中如果有些欄位不想進行序列化 怎麼辦?

  • 構造器 Constructor 是否可被 override?

  • java 異常體系?RuntimeException Exception Error 的區別,舉常見的例子

  • 字元型常量和字串常量的區別?

  • 在呼叫子類構造方法之前會先呼叫父類沒有引數的構造方法,其目的是?

2 集合

集合這塊關注一下 1.8 的實現吧,和 1.7 相比變化了很多

  • ArrayList和linkedList的區別?

  • 堆是怎麼儲存的,插入是在哪裡?

  • HashMap和HashTable的區別?講一下 hashMap 原理。hashMap 可以併發讀麼?併發寫會有什麼問題?

  • 集合類存放於 Java.util 包中, 主要有幾種介面?

  • Array與ArrayList有什麼不一樣?簡單介紹下 ArrayList 怎麼實現,加操作、取值操作,什麼時候擴容?

  • 說說ConcurrentHashMap?頭插法還是尾插法?擴容怎麼做?

  • 集合在迭代的過程中,插入或刪除資料會怎樣?

3 併發

  • notify()和notifyAll()有什麼區別?

  • volatile 是什麼?可以保證有序性嗎?

  • 為什麼wait, notify 和 notifyAll這些方法不在thread類裡面?

  • SynchronizedMap和ConcurrentHashMap有什麼區別?

  • 什麼是執行緒安全?Vector是一個執行緒安全類嗎?

  • 執行緒程式和執行緒的區別?並行和併發的區別?瞭解協程麼?程式間如何通訊:程式 A 想讀取程式 B 的主存怎麼辦?執行緒間通訊?執行緒的生命週期有哪些狀態?怎麼轉換?wait 和 sleep 有什麼區別?什麼情況下會用到 sleep?怎麼停止執行緒?怎麼控制多個執行緒按序執行?

  • 說說自己是怎麼使用 synchronized 關鍵字,在專案中用到了嗎?synchronized關鍵字最主要的三種使用方式

  • 為什麼要用 join()方法?

  • 什麼是多執行緒中的上下文切換?

  • 死鎖與活鎖的區別,死鎖與飢餓的區別?

  • Java 中用到的執行緒排程演算法是什麼?

  • 什麼是原子操作?在 Java Concurrency API 中有哪些原子類(atomic classes)?

  • 什麼是阻塞佇列?阻塞佇列的實現原理是什麼?如何使用阻塞佇列來實現生產者-消費者

  • 模型?

  • AQS瞭解 AQS 麼?講講底層實現原理AQS 有那些實現?講講 AtomicInteger 的底層實現

  • 為什麼我們呼叫 start()方法時會執行 run()方法,為什麼我們不能直接呼叫 run()方

  • 法?

  • Java 中你怎樣喚醒一個阻塞的執行緒?

  • 什麼是執行緒組,為什麼在 Java 中不推薦使用?

4 IO

IO 這塊我不熟,沒有多講

  • 瞭解 NIO 麼?講講

  • NIO 與 BIO 有什麼區別?

  • 瞭解 Netty 原理麼

JVM

1 記憶體與 GC

  • GC 是什麼?為什麼要有 GC?

  • jvm 記憶體區域分佈?gc 發生在哪些部分?

  • 你能保證 GC 執行嗎?

  • 怎麼獲取 Java 程式使用的記憶體?堆使用的百分比?

  • 介紹一下垃圾回收過程。

  • 垃圾回收演算法的瞭解。現在用的什麼回收演算法?

  • 什麼時候會觸發FullGC

  • 現在使用的什麼垃圾回收器?知道哪些?講講 G1

  • 容器的記憶體和 jvm 的記憶體有什麼關係?引數怎麼配置?

2 異常與調優

  • 線上有什麼 jvm 引數調整?

  • oom 問題排查思路

  • 線上問題排查,突然長時間未響應,怎麼排查,oom

  • cpu 使用率特別高,怎麼排查?通用方法?定位程式碼?cpu高的原因?

  • 頻繁 GC 原因?什麼時候觸發 FGC?

  • 怎麼獲取 dump 檔案?怎麼分析?

3 類載入器

  • 怎麼實現自己的類載入器?

  • 類載入過程?

  • 初始化順序?

Spring

  • 不同版本的 Spring Framework 有哪些主要功能?

  • 講一下 ioc、aop

  • ioc 怎麼防止迴圈依賴

  • aop 的實現原理、動態代理過程

  • 區分 BeanFactory 和 ApplicationContext?

  • spring bean 容器的生命週期是什麼樣的?

  • @Autowired 註解有什麼用?

  • 使用 Spring 訪問 Hibernate 的方法有哪些?

  • Spring 處理請求的過程?

Redis

  • 為什麼要用 redis /為什麼要用快取(高效能、高併發)

  • redis 常見資料結構以及使用場景分析(String、Hash、List、Set、Sorted Set)

  • Redis 常見異常及解決方案(快取穿透、快取雪崩、快取預熱、快取降級)

  • 分散式環境下常見的應用場景(分散式鎖、分散式自增 ID)

  • Redis叢集方案應該怎麼做?都有哪些方案?

  • Redis 叢集的主從複製模型是怎樣的?

  • redis 持久化機制(怎麼保證 redis 掛掉之後再重啟資料可以進行恢復)

  • 如何解決 Redis 的併發競爭 Key 問題?

  • 如何保證快取與資料庫雙寫時的資料一致性?

  • redis 的 zset 的使用場景?底層實現?為什麼要用跳錶?

MySQL

  • 事務的併發?事務隔離級別,每個級別會引發什麼問題,MySQL預設是哪個級別?

  • MySQL的MyISAM與InnoDB兩種儲存引擎在,事務、鎖級別,各自的適用場景?

  • 有哪些鎖(樂觀鎖悲觀鎖),select 時怎麼加排它鎖?

  • sql查詢語句確定建立哪種型別的索引?如何最佳化查詢?

  • 什麼是臨時表,臨時表什麼時候刪除?

  • mysql 髒頁?

  • 分庫分表有哪些策略?怎麼保證 id 唯一?

  • 非關係型資料庫和關係型資料庫區別,優勢比較?

  • 資料庫的讀寫分離、主從複製,主從複製分析的 7 個問題?

  • MySQL都有什麼鎖,死鎖判定原理和具體場景,死鎖怎麼解決?

  • 資料庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌)?

  • 對 uuid 的理解?知道哪些 GUID、Random 演算法?

  • 主鍵選隨機 id、uuid 還是自增 id?為什麼?主鍵有序無序對資料庫的影響?

  • 主從複製的過程?複製原理?怎麼保證強一致性?

Kafka

  • 生產者和消費者的命令列是什麼?

  • Kafka 怎麼保證資料可靠性?

  • 講講 kafka 維護消費狀態跟蹤的方法

  • 為什麼需要訊息系統,mysql 不能滿足需求嗎?

  • Kafka 判斷一個節點是否還活著有那兩個條件?

  • Kafka 與傳統 MQ 訊息系統之間有三個關鍵區別?

  • kafka 分散式(不是單機)的情況下,如何保證訊息的順序消費?

  • kafka 如何不消費重複資料?比如扣款,我們不能重複的扣

網路

  • tcptcp 有哪些機制確保可靠性?擁塞控制怎麼實現?close_wait 太多怎麼處理?為什麼會出現這種情況?

  • 講講三次握手,四次揮手?

  • keepalive 有什麼用?Https 原理?知道哪些 http 狀態碼有哪些?http 有哪些請求方法?put、post 實現上有什麼區別?

  • 前後端分離與不分離的區別?各有什麼優缺點?

  • 常見 web 攻擊有哪些?瞭解 csrf 攻擊麼?

  • nginx 達到上限了怎麼辦?怎麼對 nginx 負載均衡?dns?

  • nginx 負載均衡有哪些演算法?各自有什麼優缺點?

  • restful 的作用?有哪些優點和缺點?

  • 什麼是 cdn?header 中涉及到快取的欄位有哪些?cookie session 介紹一下html 頁面,怎麼與後端互動?流程是什麼?涉及到哪些元件?http 協議,報文格式?

設計模式

  • 什麼是設計模式?你是否在你的程式碼裡面使用過?

  • Java 中什麼叫單例設計模式?請用 Java 寫出執行緒安全的單例模式

  • 在 Java 中,什麼叫觀察者設計模式?

  • 舉一個用 Java 實現的裝飾模式(decorator design pattern) ?它是作用於物件層次還是類層次?

  • 單例對於單例,你知道哪些實現方法?實現一個懶載入單例雙重校驗鎖為什麼需要雙重校驗?

  • 使用工廠模式最主要的好處是什麼?在哪裡使用?

分散式

  • 有哪些分散式元件是你最熟悉的,簡單聊一聊。

  • cap 是指什麼?mysql 滿足 cap 中哪些?

  • 分散式鎖有哪些方式可以實現?各有什麼優缺點?

  • 什麼是一致性 hash?自己實現一致性 hash,會用什麼資料結構?

微服務

  • 微服務架構有哪些優勢?

  • 單片,SOA 和微服務架構有什麼區別?

  • 什麼是 RPC?怎麼實現冪等性?

  • 什麼是 REST / RESTful 以及它的用途是什麼?

  • 配置中心有哪些選項?apollo 的架構?怎麼無感實現已載入資料更新?

  • 講一下熔斷概念?熔斷原理?令牌桶?熔斷三個狀態關係?

  • 熔斷會影響效能麼?有遇到過線上發生熔斷麼?不加會怎樣?

演算法題

基本都會問時間複雜度

  • 有哪些常用排序演算法?

  • 手寫快排,快排時間複雜度是多少?

  • 快排演算法是不是穩定的?什麼是穩定性?

  • 給定一個字母組成的字串,找出不含有重複字元的最長子串的長度。

  • 9 個硬幣中有一個劣幣,用天平秤,最壞幾次?

  • 深度優先,廣度優先

  • 括號匹配,時間複雜度,空間複雜度

  • 單向連結串列的歸併排序

  • 1g 大小檔案,裡面每行是最大 16k 的單詞,限制記憶體 1m,統計單詞頻率最多的 100 個單詞

  • 手寫 100 位帶小數的大數字的減法

你有什麼想問的?+Offer 選擇?

  • 部門定位?崗位職責?目前在做什麼業務?薪酬福利介紹?

  • 目前手頭的 offer 情況?這些公司你自己有什麼傾向性呢?最看重什麼因素?想加入一個怎麼樣的團隊?

  • 你的預期薪酬是多少?目前的薪資情況?

  • 最近一年的績效情況?

image.png

補充一下我2020下半年的offer情況,其實是拿到了美團架構、快手主 app、猿輔導斑馬、騰訊 csig 等意向書的。而且我覺得面試前的““練手””十分重要,像我前期“裸面”就硬生生的浪費了阿里、螞蟻、位元組、Shopee 等的面試機會。所以,在這裡我給大傢伙的建議就是一定要做好充足的準備,不然也是耽擱面試官和自己的時間,並且面試的時候也會手足無措,畢竟肚子裡沒有貨啊!

最後再三思考,還是選擇了快手,準備下週一入職了!大家加油,跳槽面試無時不在,若是還沒準備好,我建議等過完年去參加春招提前批也不錯,但是這段空餘的時間你可不能浪費,好好把握!

說到這兒了,最後在出來放一波福利吧!希望可以幫助到大家!

千千萬萬要記得:多刷題!!多刷題!!

之前演算法是我的硬傷,後面硬啃了好長一段時間才補回來,演算法才是程式設計師的靈魂!!!!

篇幅有限,以下只能截圖分享部分的資源!!

(1)多執行緒(這裡以多執行緒為代表,其實整理了一本JAVA核心架構筆記集)

image

(2)刷的演算法題(還有左神的演算法筆記)

如需原件,可叩u ;
738351470

(3)面經+真題解析+對應的相關筆記(很全面)

在這裡,最後只一句話:祝大家offer拿到手軟!!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000181/viewspace-2774321/,如需轉載,請註明出處,否則將追究法律責任。

相關文章