java机试 数据结构_来看看阿里面试的一面都面了些什么笔试+机试(java岗)
絮叨
說實話,能有機會面一下阿里對我來說幫助確實有蠻多,至少讓我知道了自己的不足在哪,都說面試造火箭,上班擰螺絲。但就算是如此,為了生存,你也只有不停的學習,唯有光頭,才能更強。哈哈
起因
2月28日在Boss上,有個阿里的大佬找我打招呼說可以幫我內推,我想也沒想就把簡歷給它了,然后就一直忘記這事了。因為我覺得我一個垃圾學校的小垃圾,怎么會有面試機會,虧人家還讓我準備一下,我也拋到九霄云外了。
然后也收到了阿里的內推消息
開始第一輪電話面
然后在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點,面試官主動給我打了個電話,然后把機試題目發到了我郵箱,然后高速我看著我寫,我心理拔涼的,擔心啥也寫不來
然后題目其實很簡單 是力扣上的24題,但是我當時做的時候并不知道,我也不能百度,可惜我在那瞎寫寫了30來分鐘,但是也是完成沒有搞懂再干嘛
最后只能選擇放棄
結束我的阿里面試旅程
結尾
哈哈,其實還是自己太菜了,雖然說我連一面都沒過(菜是原罪),但是這次面試給我的幫助還是很大,讓我在沒有準備的情況下知道了自己的水平,應該算是比較真實了把,還有一點就是我們工作中大都是CV大法,導致我很多的基礎代碼都不是很會,基礎不扎實,雖然這個機試是算法,但是我很多簡單代碼沒有補全都不會,很多簡單工作的實現都是百度,導致自己的動手能力弱了很多。這點以后要改,我呢?把這次經歷分享給大家,希望大家要引以為戒。好好學習,扎實基礎。
Java最全面試手冊(性能優化+微服務架構+并發編程+開源框架)
Java面試手冊
一、性能優化面試專欄
1.1、 tomcat性能優化整理
1.2、JVM性能優化整理
1.3、Mysql性能優化整理
二、微服務架構面試專欄
2.1、SpringCloud面試整理
2.2、SpringBoot面試整理
2.3、Dubbo面試整理
三、并發編程高級面試專欄
四、開源框架面試題專欄
4.1、Spring面試整理
4.2、SpringMVC面試整理
4.3、MyBatis面試整理
五、分布式面試專欄
5.1、分布式限流面試整理.
5.2、分布式通訊面試整理
5.3、分布式數據庫面試整理
正文
一、性能優化專欄
1.1、tomcat性能優化整理
二,微服務架構面試專欄
1、SpringCloud面試整理
1、什么是Spring Cloud?
Spring cloud流應用程序啟動器是基于Spring Boot的Spring集成應用程序,提供與外部系統的集成。Spring cloud Task,一個生 命周期短暫的微服務框架,用于快速構建執行有限數據處理的應用程序。
資料過多就不給大家一一展示了 獲取這份面試手冊的轉發+關注+私信小編(學習)免費獲取哦!
總結
以上是生活随笔為你收集整理的java机试 数据结构_来看看阿里面试的一面都面了些什么笔试+机试(java岗)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英文读法_儿童英语学习-英文字母A
- 下一篇: 传音 Infinix 手机 260W 快