變態:來瞧瞧阿里一面【Java崗】都面些什麼(筆試+機試)

絮叨

說實話,能有機會面一下阿里對我來說幫助確實有蠻多,至少讓我知道了自己的不足在哪,都說面試造火箭,上班擰螺絲。但就算是如此,為了生存,你也只有不停的學習,唯有光頭,才能更強。哈哈

起因

2月28日在Boss上,有個阿里的大佬找我打招呼說可以幫我內推,我想也沒想就把簡歷給他了,然後就一直忘記這事了。因為我覺得我一個垃圾學校的小垃圾,怎麼會有面試機會,虧人家還讓我準備一下,我也拋到九霄雲外了。


變態:來瞧瞧阿里一面【Java崗】都面些什麼(筆試+機試)

然後也收到了阿里的內推消息

變態:來瞧瞧阿里一面【Java崗】都面些什麼(筆試+機試)

開始第一輪電話面

然後在3月4號的晚上8點鐘(看來阿里的工作時間確實長,我估計面試也是他們kpi的一部分吧),一個來自杭州的陌生電話打過來

面試官

xxx,你好,我是杭州阿里巴巴xxx的,我想問你現在有沒有時間,我來簡單的給你做個面試,你這邊先來個自我介紹

當時我還沒意識到是內推,因為我早已經忘的差不多了,還以為是啥新的詐騙方式,直到他說它是來給我面試的,然後說有人內推過我的簡歷,我這才想起幾天前的事情。然後我巴拉巴拉的做了一個傳統的自我介紹,就是那些套路,之類的,然後面試官開始問問題了

面試官

你對多線程瞭解嗎,說說你對Synchronized和lock,說說他們之間的區別

其實這個問題,應該算是很基礎的問題了,我就說了一下,一個樂觀鎖,一個是悲觀鎖,然後說了一下Synchronized的鎖升級的過程(這個還行我自己覺得),然後我說了一下 Synchronized 鎖方法 ,靜態方法,同步代碼塊的一些區別(這個點其實我沒答上來,有點忘記了。就是在JVM裡面的標記位不同的區別),然後是lock這點我也沒答上,這個應該說他的幾個實現,然後跟面試官聊聊他的底層實現原理,但是我這個是目前真的不是很熟悉,因為平時不用,可能前面走馬觀花的看了,但是這次面試是突擊,所以真的對於lock就是知道他是aqs實現的具體的全忘記了

面試官

然後面試官說lock不熟,沒事,那你還有沒有用過什麼東西來保證線程安全

然後突然想到了一下CAS,然後說了一下CAS,這個我感覺說的7788吧,至少怎麼保證安全的我說出來,先在本地線程記錄原來的值和計算之後的值,去刷到主存的時候,先比較原來的值。但是他讓我說底層原來的時候,我又好像說錯了,我把他和voliate搞混了,我竟然說是因為有一個內存總線,真的是尷尬呀,能夠說讓其他的本地線程無效,在Cpu層面(這就是那種靠背的結果,哎),其實CAS的底層是一個lock指令來實現的在多核系統中,反正就這樣扯。。被我扯到了分佈式鎖。。。我感覺自己拉開話題的技術還是可以的,哈哈

面試官

你說你們公司用的redisson來實現分佈式鎖,如果不用redisson你能實現分佈式鎖嘛,自己用redis,或者你給我說說redission是怎麼實現分佈式鎖的

當時我就在想,我怎麼把自己從一個坑,挖到另外一個坑,因為redisson的底層源碼,我是真的沒看,這個我是真說不出來,然後我就說怎麼實現分佈式鎖,用exist 和 setNX命令,還有加超時時間,然後用lua腳本做成一個原子性操作,來實現一個分佈式鎖,這個我以前自己做過demo,然後現在手寫不出來,但是至少做過,印象還是深點。然後我就搭了一下,然後他又說,那你還有什麼方法保證原子性呢?我其實也不清楚他想問的是啥,我就隨便搭了個事務。。。。

面試官

我看你對redis 蠻熟悉的,那我們就來聊聊redis,說說他的數據結構

我靠,終於來了個會的了,嗶哩吧啦的說了一下,然後他又問了一些基礎的東西,比如說緩存穿透這些,這些其實還好,畢竟自己有試過。

面試官

既然你對redis那麼熟悉,你知道為啥redis那麼快嘛

其實這個問題是為後面做鋪墊的,我搭 單線程 內存 IO多路複用,媽的這個IO多路複用我只是以前看書的時候看過,我根本還不是很熟悉這個東西,然後他就盯著這個問了。。。然後我就尷尬的一批。就沒問我了,可能知道了我的深度了吧,哈哈

面試官

那你對多線程方面的知識,還有哪些瞭解的,比如線程池,或者原子性的類這些

我心裡,一萬字曹尼瑪,又來多線程,然後我說了幾個我自己並不是很熟悉的原子類,然後聊到底層,又不會(還是太菜),然後聊線程池,然後聊線程池的創建,線程池的運行過程,然後他的優化啥的,然後聊了一下,感覺我也沒啥深度,就終於不再跟我聊多線程了,(目前為止,就聊了2個東西 redis和多線程,redis的東西,至少我感覺比多線程要好很多),然後面試官,又開始問了

面試官

我看你用的rabbitmq 說說你是如何保證消息的可靠性的

這個其實還是很簡單,從發送端就是 confirm機制,接收端就是用的ack機制,然後引用到我們自己項目用的Aop把失敗的消息存到redis中,並通知相關負責人去處理,這樣,然後我來聊到了 我用它來做分佈式事務的可靠消息最終一致性,因為這些東西都是我自己引申過去說的,肯定是我比較會的,說到了如何去做它的冪等,防止重複消費,然後中間還插了一下rocketmq ,可惜我不是很熟悉,它裡面的事務機制,稍微說了下 然後說了一下它的持久化機制啥的,最後它問了一個啥問題,說假設你什麼都做到最好的情況下,怎麼樣才能更好的保證消息的可靠,包括你的服務器被炸了,斷點,啥的。。。完成不知道再問啥,然後mq就沒問了,其實看著說的簡單,但是實際聊的東西還是有點的,什麼死信隊列啥的都是有設計到的。

面試官

我看你對JVM調優有了解,我們聊聊JVM吧,然後因為垃圾回收算法,垃圾回收器。

這個還好畢竟自己有看過這方面的知識,然後就把JVM的知識說了一遍,反正就是自己知道各種扯

面試官

說說你是怎麼定位線上問題的定位吧,比如說CPU 或者是內存

其實我這塊沒怎麼實戰過,還是看過一些人家的解決方案,然後我就靠著記憶Cpu:通過 top 命令找到 CPU 消耗最高的進程,並記住進程 ID。再次通過 top -Hp [進程 ID] 找到 CPU 消耗最高的線程 ID,然後找到線程ID是十進制的,把他轉換成十六進制,然後用jstack找到當前線程的jstack.log的快照,然後分析他的問題。內存:其實對於內存的話無非就是2種一直是內存溢出,另外一種是內存不健康,就是內存洩露 內存溢出的情況可以通過加上 -XX:+HeapDumpOnOutOfMemoryError 參數,該參數作用是:在程序內存溢出時輸出 dump 文件。有了dump文件,我們找問題就很簡單了,比如我們用MAT等等,找到原因 如果是內存洩露的話就得具體分析了 比如你的young GC的頻率,和Full GC的頻率 ,如果是和平時完全不一樣的話,我們也可以用MAT去分析一下看是否是每個對象佔用的內存特別大,並且還沒有回收他,然後找到這個對象去分析他的邏輯,並且來解決這種內存洩露的問題

面試官

聊聊MySQL吧,平時怎麼做查詢,優化

反正就是那些套路 什麼索引啥的,說到索引了,那你對b+數熟悉嗎,我。。。。又是挖坑給我,我擦。我就其實我不懂,我因為沒有準備去面試題。。。。唉(還是不能注重形式)

面試官

沒關係,我們來聊聊MySQL的隔離級別

我又把那幾個背了一下(還好這個好記得,因為真的是死背的以前)

面試官

那你給我說說 可重複讀的底層實現原理嘛

我擦,又掉坑裡面去了。。。。唉我就只好說,還沒空去了解這塊

面試官

沒關係 我看你用的SpringCloud 聊聊他的組件吧

然後我有嗶嗶嗶啦 把這些基礎的 平時工作的這些分佈式組件給他說了

面試官

那你給我說說 註冊中心怎麼保證自己的高可用的

其實這個還好,以前背過哈哈 我就把自己對2pc的選舉過程崩潰恢復,數據同步的過程扯了一遍

面試官

既然你對2pc 這麼熟悉。我給你個場景,你說說看這種情況怎麼處理,就是因為網絡原因,出現了雙主問題。

我的內心的崩潰的,其實我都不知道再說啥了反正,不過有一點我是知道的,肯定是再瞎說,因為我自己也真不知道自己再說什麼了,然後只能說,這個不是很清楚

面試官

好點,沒事。那你說 對於分佈式系統來說,除了我們經常說的2pc 3pc還有什麼更好的方法來做數據一致性

然後我又不知道要說啥了,又只能說不知道了

面試官

然後又問了下Spring ,對於Spring的一些源碼的理解

我靠,終於問到一個我會的了,然後我就Spring容器的初始化過程 和Spring單例bean的注入過程,和循環依賴講了一下。這個它竟然沒往死裡問我了,哈哈(看來平時看點源碼還是有點用的)

面試官

你現在有電腦嗎,我們來做個機試吧,

然後我說我沒帶電腦,我想著就說算了吧,謝謝您的好意,我反正也過不了,然後它就再三約我明天晚上來做,我就說 沒有補全 我代碼都寫不全的,但是他還是邀請我參加,我就只能答應了,然後就掛了電話

開始我的阿里第一次機試,估計也是最後一次(哈哈)

當時我跟這個面試官約的是3月5號 8點以後,看來在阿里工作也是蠻長時間的,但是人家工資高,哪裡像我們做的多,工資少,不過人家水平高,這個沒辦法

到了8點,面試官主動給我打了個電話,然後把機試題目發到了我郵箱,然後高速我看著我寫,我心理拔涼的,擔心啥也寫不來:

變態:來瞧瞧阿里一面【Java崗】都面些什麼(筆試+機試)

然後題目其實很簡單 是力扣上的24題,但是我當時做的時候並不知道,我也不能百度,可惜我在那瞎寫寫了30來分鐘,但是也是完成沒有搞懂再幹嘛:

變態:來瞧瞧阿里一面【Java崗】都面些什麼(筆試+機試)

最後只能選擇放棄:

變態:來瞧瞧阿里一面【Java崗】都面些什麼(筆試+機試)

結束我的阿里面試旅程:

變態:來瞧瞧阿里一面【Java崗】都面些什麼(筆試+機試)

結尾

哈哈,其實還是自己太菜了,雖然說我連一面都沒過(菜是原罪),但是這次面試給我的幫助還是很大,讓我在沒有準備的情況下知道了自己的水平,應該算是比較真實了把,還有一點就是我們工作中大都是CV大法,導致我很多的基礎代碼都不是很會,基礎不紮實,雖然這個機試是算法,但是我很多簡單代碼沒有補全都不會,很多簡單工作的實現都是百度,導致自己的動手能力弱了很多。這點以後要改,我呢?把這次經歷分享給大家,希望大家要引以為戒。好好學習,紮實基礎。

最新整理的Java技術乾貨文檔資料:【Java核心知識點整理】涵蓋29個Java核心技術詳解,JVM,Redis,Nginx,Spring Boot,Spring Cloud,Kafka,併發編程,Tomcat,MyBatis,BAT面試題,Java技術精講視頻等。轉發+關注,私信回覆“乾貨”即可獲得免費領取方式。

掌握了這些知識點,面試時在候選人中又可以奪目不少,暴擊9999點。機會都是留給有準備的人,只有充足的準備,才可能讓自己可以在候選人中脫穎而出。


分享到:


相關文章: