雙非學子第一次java實習面試--弱小、無助

一、寫在前面

我會將整個流程都寫出來,可能我這個經歷是更符合大多數人,個人大概情況:雙非本科,目前大三,沒獲過什麼大獎,考試成績也非很優秀這種,這或許就是普通的味道吧。個人經過三個月以上的學習,第一次面試實習,公司叫我明天來上班。

二、面試流程

面試官:自我介紹一下吧
自我介紹時很重要的,在這裏是可以引着面試官對你擅長的方向走,你就在結尾哪裏說,我最近在學什麼,收穫什麼等等之類的,前提是你真的準備了這些,因爲面試官必問。
我就說了,我最近在學習jvm和在做一個秒殺的系統。
可能是實習面試,面試官直接忽略了jvm。

1、 說說你做的秒殺系統
秒殺這個概念是一件熱門商品需要定時搶購的一種現象,往往搶購商品數量是有限的,屆時會有很多人會進行搶購,當然不乏會有程序員使用程序進行搶購,那到時系統將面臨一個超高併發。鑑於以上的現象,所以我設計的秒殺系統主要解決的三個問題:
1、保證商品不被超賣。
2、防護服務器被打垮。
3、保證高可用,將秒殺模塊以微服務的方式獨立出整個系統。

目前呢,我的秒殺系統還沒有做完,不過的已經設計好了我的秒殺後端系統。
我的總體思路是緩存+限流+負載聚恆來解決上面所提到的四個問題,緩存我選擇的是redis類,限流是須有限流算法(漏桶算法、令牌桶算法)作用在nginx層面上,負載聚恆是主要有nginx承擔。

目前在java代碼層面我已經實現了,主要是對redis的事務控制的使用來解決保證商品不被超賣的問題,而且將當個項目打包,佈置在多臺機器上,使用nginx對多臺機器進行負載聚恆來保證高可用。

2、說說你對面對對象的理解
1.1、面對對象有三種特性:封裝、繼承、多態
封裝:封裝就是說目前有a類和b類,a類裏有自己的方法和屬性,若是b類想要調用a類的屬性或是方法,就需要再b類裏面進行對a類進行實例化,從而獲得一個a的實例對象,通過a的對象就可以調用a類裏封裝的屬性和方法。
繼承:繼承就是可以一個若未被final修飾,它就可以被繼承,形成子父類的光系,子類是可以擁有父類的屬性和方法,子類可以對父類的方法進行增強,子類也可以有自己的方法。
多態:多態就是一個編譯時和運行時的對象的類型是可以不一樣的的過程,歸根結底就是棧中變量是運行時才進行對堆內存指向的。比如一個父類變量指向一個子類對象,編譯時,也就是將.java->.class的過程中的,該父類的變量就是代表它是一個父類對象(它未來指向的就是一個父類對象);但是代碼上的我們寫的是該父類變量就是指向它的一個子類實例,程序運行時該父類變量指向一個子類對象,所以該父類對象就是一個子類對象。

3、 說下static和final關鍵字。
這個我就不寫出來了,較簡單,可結合jvm的類加載器,唬住面試官。

4、final 修飾 ArrayList 變量,它的實例對象能使用add等函數添加值嗎。
這個問題其實面試官估計只是想知道結果,不過是可以聯繫jvm來解釋的,
首先,該ArrayList變量指向的對象是可以添加值的
也就是final List aaa=new ArrayList();,aaa.add(xx)是可以的,但是aaa = new ArrayList();是不可以的。
因爲final是修飾jvm棧中的aaa這個變量引用的,aaa對變量的引用是隻能賦值一次的,但是aaa所指向的對象,,這個對象是在堆中的,是沒有被final限制的,所以該對象的修改是不受限制的。

5、說下常見的Exception類
我:嗯嗯嗯。。。。面試官,不如我說說oom吧
面試官:你確定oom是Exception
我:。。。。。這個問題我不是很熟悉,要不我們過了吧
(我:面試官我再也不裝逼了,我錯了,給個機會繼續下去吧)
關於這個我有文章寫過,但是我卻沒說出來。
java異常

6、說說spring的好處
解析下ioc和aop

7、說說spring提供的解耦例子
在推敲推敲ioc

8、說下spring mvc一次請求流程
當時沒說出來。。。。。
在這裏插入圖片描述
9、mysql索引都有哪幾種索引
我:主鍵索引、普通索引、聯合索引。
(不知當時面試官心裏是怎麼想的,我看出他表情有點愕然,我心想我說這三個其實問題不大的,難道是想讓我回答FULLTEXT,HASH,BTREE,RTREE?)

10、讓你說說聯合索引遵循一個什麼原則
我:最左前綴原則。

11、既讓聯合索引遵循這麼一個原則,爲什麼我們不直接創建最左那個列的普通索引呢?
我:這個一個對於業務優化的查詢過程,比如我們表中的某幾列纔是我們業務需要得到的數據,這樣我們就可以想着只取這幾列的條件來查詢,當然不能少了最左邊那一列,這樣我們就可以利用聯合索引,聯合索引將這幾列的值都可以存儲在同一個b+樹索引的樹節點上,我們按條件找到索引的時,找到的索引的葉子節點就是我們所需要的值,這樣我們就不需要再進行一次回表操作了(回表就是通過得到葉子節點,再通過葉子節點裏面的)。少一次索引尋找操作,說白了就是索引覆蓋。
(最後面試官還在和我扯,我又講了一遍,不知是我說錯了,還是我說的不清晰,以上是自己的理解)

12、說下redis有幾種的基本數據類型。
String
Hash
List
Set
Sorted Set
再結合地說下它們的特性。

13、有用過出來String的其他redis的基本數據類型嗎
這個問題怎麼說呢,要自己積累幾個例子,比如你存儲的是一個列表集合,且列表集合裏面沒有重複元素,你就是說使用過List,以爲List方便對集合的存儲和獲取,而且與Set相比,List的效率和速度會更快。

14、redis有什麼持久化的方式
有兩種:RDB和AOF
在說下這兩種持久化的實現。

(回答這個問題就是答上面兩個東西就好,不要去扯硬盤到內存,內存到硬盤。一聽到RDB和AOF這兩個東西,面試官就會心想:小夥子,不錯啊,就是你了,明天來上班吧)

15、怎麼保證redis的安全性
我:是哪一方面的安全呢
面試官:你所能想到的關於redis的安全。
我:這個我不是很瞭解。
面試官:給redis客戶端連接時要加密碼驗證。
(這是沒想到的答案,不瞞大夥說,我當時覺得就加個連接密碼太簡單了,就和麪試官說這個太簡單了)

三、寫在最後

或許這廠子不大吧,去到現場,做一份筆試題,個人覺得做的還行,然後是技術面只有一輪,而且問的東西面試官也不爲難我,隨後立即是hr面,hr叫我明天來上班。。。。。
個人的學習歷程:個人利用了三個月過了一遍java開發的技術棧,再回頭看基礎知識,多看看別人的面經總結,也可刷刷面試題,算法是必不可少的,雖然本次面試沒有人來問我算法的問題,但是算法確實重要。
心路歷程:慌慌慌。。。。想着疫情期間不開學,自己無所事事,想去找個實習,又想着自己太普通了。。。。。。於是可能覺醒了吧,天天學習。有付出就會有回報吧,起碼有人邀我面試,而且拿到offer。
面試時的star法則:最好的回答就是遵循star原則,一步一步的前進,這樣可以講的東西多,面試官也覺得你的邏輯性很強。

四、小總結

不要去看網上的哪些不停出售悲觀思想的同行,只要你足夠優秀,那裏都會有你的位置的。所以,我建議還在躊躇和還是找工作的小夥伴,不管之前你是怎麼樣的一個狀態,只要你確定你的目標,一直朝前努力,你想要的100%絕對可以收穫60%,懂?

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