Java 面試虐我千百遍,我帶面試如初戀
本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲 。轉載本文請聯系Java極客技術眾號。
Hello 大家好,傳說中的金三銀四就在當下,阿粉知道很多小伙伴都在蠢蠢欲動,明修棧道暗度陳倉,表面上還在公司踏踏實實的干著,心里早就有了自己的小算盤。作為一個 Java 工程師,涉及到的領域會很多,每次面試都會被問到頭破血流,阿粉今天就給大家帶來一份面試題目,具體是哪家公司的阿粉就不說了,因為不管哪家其實都差不多,重點是自己要完全掌握,才能更好的應對。
技術細節
第一個部分我們先來看技術細節,往往很多公司的第一面都是考察技術細節的,小伙伴們如果在面試的過程中經常一面沒有過的話,那往往是基礎不扎實,這個時候我們就需要靜下心來,好好的補一下基礎知識,看看面經刷刷題,或者看看我們 Java 極客技術的文章都是可以的。
1.三分鐘自我介紹
自我介紹這塊是面試的一個開場白,這塊沒什么好說的,不過建議大家可以將自己想表述的內容以文字的形式寫下來,然后熟練的背誦下來,這樣不管是在電話面試,視頻面試還是現場面試都能夠流暢的有條理的表述出來。
2.最熟悉的領域是什么?
這個問題給大家一個忠告!千萬別說自己不會的領域,不然整個面試還沒開始就已經結束了,千萬別為了表現,說自己什么領域都擅長,這樣在被面試官問了幾個問題都答不上來的話,那基本上就判了死刑了,而且整個印象都不會好,以后再想面試都很難了。所以這里我們實事求是就好,熟悉什么就說什么,不熟悉的就不說。
3.Redis 的常用數據類型有哪些?
Redis 常用的五大數據類型,String,Hash,List,Set,Sorted Set。然后不要說完這幾個類型就不說了,可以再擴展下,順便可以說下每種數據類型在自己的項目里面是否有用到,具體使用在什么地方,為什么選用這種類型。面試的過程中雖然說是一問一答,但是也要適當的擴展一下,把自己知道的東西稍微多說一點,讓面試官知道你是真正的了解。問你數據類型有哪些你就回答有這五個,這樣的面試就比較枯燥,很難繼續進展下去,給面試官的印象就不好。
4.Redis 的持久化了解嗎?有幾種方式,區別是什么?
關于 Redis 的持久化,我們公眾號之前有篇文章專門寫了,大家可以看下面試官:請說下 Redis 是如何保證在宕機后數據不丟失的
5.Redis 的三種集群模式了解嗎?
關于 Redis 的集群模式不管自己有沒有搭建過,都可以把自己知道的說出來,主從模式,哨兵模式,集群模式,以及三種模式的區別。
6.Redis 的主從數據是如何同步的?
Redis 的主從數據同步跟上面的集群模式這兩點都可以單獨成一篇文章了,后期阿粉單獨分享。
7.Redis 使用的場景?
Redis 作為目前主流的緩存數據庫,使用的場景有很多,用戶 token 的存儲,熱點數據的存儲,當成隊列使用,分布式鎖,計數器,布隆過濾器等等,結合自己項目中使用的場景可以跟面試官多聊一下。
8.Redis 為何性能如此高?
Redis 官文號稱最高 QPS 可以達到十萬,那么問什么 Redis 可以有這么高的并發呢?主要是 Redis 采用多路復用 IO 模型,在處理命令的時候是采用單線程去處理的,同時 Redis 的底層采用 C 語言編寫,數據結構也相對簡單,所以才能如此快速。
9.MySQL 的存儲引擎有哪些,InnoDB 和 MyISAM有什么區別?
MySQL 常用的存儲引擎主要有 InnoDB 和 MyISAM 以及 Memory,其中關于 InnoDB 和 MyISAM 的區別公眾號前面有文章詳細說過,感興趣的小伙伴可以看一下面試必問的 MySQL 知識點,你還有哪些沒準備好,趕緊收藏腦圖!
10.什么是事務?事務的隔離級別有哪些?為什么需要事務的隔離級別?
事務的內容在上面的文章里面也有詳細說到,可以進去看下。
11.SQL 優化方面的內容?分庫分表是怎么做的?
關于 SQL 優化也是一個老生常談的話題,在面試中也經常會被問到,關于 SQL 優化,有一篇文章很不錯,推薦給大家,里面講到了很多優化的點,認真記下來對我們很有幫助52條SQL語句性能優化策略,建議收藏
12.MySQL 的索引采用的是什么存儲結構?為什么采用這個?
MySQL 的索引也是一個面試中逃避不了的一個問題,詳細的內容可以參考公號前面的文章為什么Mysql的常用引擎都默認使用B+樹作為索引?
13.Java 中的線程池有哪些默認實現,幾個核心參數是如何配合工作的?拒絕策略有哪些?
Java 中的線程池有默認的實現,但是日常工作的時候我們一般都會手動創建線程池,具體的內容可以看文章面試官因為線程池,讓我出門左拐!,聊聊面試中的 Java 線程池
14.Java 中 volatile, synchronized 的作用是什么?
這兩個關鍵詞在 Java 中的重要性已經不言而喻了,不用阿粉在多說什么了,那對于這兩個關鍵詞小伙伴都理解了嗎?同樣的,我們前面也有寫過,詭異的并發之可見性
15.什么是類加載機制?
啥也不說了,直接看文章 JVM 是如何加載 Java 類的?,相信看完你就懂了。
看完上面 15 個面試題,很容易發現一個問題,那就是真正面試的時候很多東西我們公眾號之前都有寫過,只要好好的把這些東西消化了,再加上面試的時候好好發揮,不說一定能拿到 offer,至少前幾面都能很完美的過??吹竭@樣是不是覺得這篇文章值得收藏呢?收藏起來,以后在面試前或者面試別人的時候都可以拿出來用一用。
項目部分
上面提到的是一些技術細節,其實還有很多很多東西,畢竟 Java 的領域涉及到很多地方,像這種面試題簡直可以無休止的問下去。聊完了技術細節,后面一般都是針對項目開始詢問,每個人的項目不一樣,涉及的領域也不一樣,不具有參考性,但是一些通用的問題還是要準備下的,比如
- 項目運用到了哪些技術,整個的框架是什么樣子的?
- 你在這個項目中主要負責哪些內容,你是怎么設計的?
- 在做這個項目的時候有沒有遇到什么技術難點,你是怎么解決的?
- 項目上線后的 QPS 是多少,用戶量有多少,有沒有出現過 Fullgc 或者線上 OOM 的情況,你是如何處理的?
- 模塊與模塊之前是怎樣調用的?HTTP 還是 RPC?RPC 框架用的是什么?了解其實現原理嗎?
- 做這個項目的目的是什么?你對項目所涉及的行業有了解嗎?
上面這幾個都是日常做項目的時候需要知道和思考的,技術上面涉及到的東西肯定要知道,在最后一個問題上面往往很多小伙伴會忽略,認為不就是一個項目嗎?關行業什么事情?其實不是這樣的,了解了一個項目的背景和價值可以更好的幫忙我們理解業務需求,從而做到更好的實現,而且對于一些想在某個方向長期發展的朋友,那就更有必要了。
架構部署方面
- 你們項目是分布式的嗎?怎么部署的?
- 如何在不增加機器的情況下提升 QPS?
- 如何降低各個服務或者機房之間網絡通信耗時?
- 如果機房突然出現故障如何保證數據不丟失?
- 當下游服務出現問題時如何做熔斷限流保證自己的服務不受影響?
上面幾個問題是阿粉遇到的幾個架構部署相關的問題,關于這一方面阿粉也不是特殊熟悉,所以就不做回答了,相信關注阿粉的小伙伴都是厲害的,可以在我們的留言下面回答下,大家一起學習談論,幫助他人同時也是提升自己。