記一次阿里巴巴電話面試題


前幾天投了阿里巴巴校招簡歷,今天晚上突然來了阿里的面試電話,有點緊張又有點激動,面試的問題問的挺全面,但是有些准備不足,因此回答的並不算太滿意,現在整理一下分享給大家,希望進阿里的小伙伴可以來踩踩。

1.自我介紹(打電話時我剛吃完飯,上來就介紹自己,簡單的介紹自己學的專業,以后的發展方向和目標,在學校參加過實驗室並參加比賽獲得過榮譽),我准備的倉促,下次吸取教訓。

2.實驗室參加的項目主要做了些什么,用了什么技術?

   這個有過項目實戰經歷的自己總結吧。

3.說說java內存模型?

java內存模型也叫JMM,由工作內存和主存構成,主存用來存儲數據,工作內存再程序讀取數據時將主存中要讀取的數據copy一份到工作內存,然后程序讀取數據進行運算。

我在說JMM的時候講了一下計算機的內存模型,計算機的cpu運算速度很快,計算機內存存儲cpu運算需要的數據,但是cpu直接從內存讀取數據太慢,效率太低,所以cpu內置了高速緩存器Cache,cpu需要讀取數據時,將內存中數據copy一份到Cache中,然后cpu從Cache讀取數據,大大提高了執行效率和速度。

4.我的項目用到了多線程,所以問到了線程的問題,首先問的線程安全機制怎樣實現的?

   主要回答了兩個關鍵字,一個synchronized關鍵字修飾方法或者語句塊實現線程的同步,還有volatile關鍵字修飾共享變量。

5.說說volatile關鍵字可見性的實現原理?

volatile關鍵字主要功能是為了共享變量的在線程間實現可見性,我們在多線程並發編程中,每個線程讀取的變量都是存貯在虛擬機的主存中,這里要說一下java虛擬機的內存模型,java內存模型主要有部分組成,一個是主存,用來存貯數據,類似計算機的內存,一個是工作內存,類似cpu中的高速緩存Cache,線程讀取數據需要將主存的數據copy一份存儲到工作內存,然后線程再從工作內存讀取數據進行運算,之后再將運算結果返回工作內存,工作內存再返回到主存。那么存在這樣一種情況,一個線程剛進行完數據的運算a++,還沒有返回運算結果,這是另外一個線程搶到cpu進行運行,並且一直完成了對數據的讀取和運算並且將結果返回到主存的操作,這樣主存中的數據就增加了一次,這時第一個線程接着運行,將執行結果返回到主存,但是返回值和第二個線程是一樣的,這樣本來共享變量應該增加兩次,可是只增加了一次,就會出現問題,這就是緩存不一致問題,而使用volatile關鍵字修飾的共享變量就能解決這個問題,被修飾的共享變量一旦被修改,修改結果直接存儲到主存中,其他線程再次讀取這個變量發現被volatile關鍵字修飾,會導致工作內存中用來緩存該變量的變量行失效,直接從主存中讀取變量的值。

可以參考這篇文章:https://blog.csdn.net/eff666/article/details/67640648

 

6.說說集合框架

這個這要講一下集合框架的構成就行了。

 

7.你經常用哪個集合類?

我說的ArrayList,他說這個線程安全嗎?我說不安全,安全的只有Vector,但是他又問我除了Vector還有其他的集合類安全嗎?我真想不起來了,查了資料有Stack,繼承自Vector。但是我實在沒想起來,只能說我還知道Map集合中有一個hashtable類線程安全。。。

 

8.你用的什么java版本?

我說的jdk8,我一聽就想壞了,我對jdk8的新特性不知道啊,果然他又問我jdk8比jdk7新增了哪些新特性?我只能說不知道。

 

9.平常用過什么數據庫?除了mysql和oracle外你還知道什么數據庫?

我說我用mysql,oracle沒用過但是學過,除此之外還看過redis,然后說了一下redis的存儲原理。

 

10.說說mysql和oracle兩者區別?

說實話,不知道,但是還是說mysql適合輕量級,oracle適用於大型的項目,mysql開源免費,oracle收費,但是oracle出現問題能夠問客服,讓別人解決問題,mysql都是小項目用的,出問題自己解決。。。。說的很勉強。

 

11.java方向做過什么項目?印象最深的是哪個?

基本每個技術階段都會做一個項目,我說了一個用springboot做的項目,並提前告訴他我目前不知道這些框架原理如何實現的!免得問我我也不會,他就問我使用了什么技術讓我印象最深刻,為什么這個項目用了springboot框架。我只能照實說我第一次用mybatis技術,並被它深深的高效快捷的功能所吸引,用它實現了底層數據庫的操作,並且能夠節省很大的代碼量,能夠自動生成對底層數據庫的操作代碼,但是只限於單表操作,又說了用mybatis如何處理表與表之間的關系。

 

12.spring了解多少?

我說了spring的面相切面和依賴注入,原理沒說,就過去了。

 

13.說說類的加載機制。

我忘了。。。

可以參考這篇文章:https://www.cnblogs.com/ITtangtang/p/3978102.html

14.讀過什么類型的書?

最近正好在讀java並發編程和深入理解java虛擬機,說了一下書中的內容。

 

15.有沒有想過考研?

我堅定的說沒有。

我也不知道為啥問這個。

 

16.有什么要問他的?

我主要問了一些學習的方法。

 

 

大概就這么多內容,面試了50分鍾,以上解答若有問題,歡迎指出!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM