Java程序員經驗之談 聊聊阿里巴巴的面試題

阿里巴巴是很多程序員都企盼進入的公司,這裏待遇好是出了名的,但是象這樣的公司,沒有兩把刷子,確實真的不好進,今天,IT培訓網就給大家講述一下我在阿里巴巴面試中都經歷了什麼,一定要好好關注喲,裏面有很多的程序員面試題與大家分享。

程序員鳥阿里巴巴的面試之旅

1、Spring

大佬:我看你用過這個Spring啊,你來聊聊爲什麼我們要使用Spring呢?

我:(因爲大家都說好啊)首先呢,Spring是一個龐大的框架,它封裝了很多成熟的功能能夠讓我們無需重複造輪子。其次呢,它使用IOC進行依賴管理,我們就不用自己初始化實例啦。

大佬:(我就知道你會說IOC啦)那你解釋一下IOC吧。

我:IOC就是依賴控制轉化,利用JAVA的反射機制,將實例的初始化交給Spring。Spring可以通過配置文件管理實例。

大佬:那我們可以直接使用工廠模式呀。工廠模式也可以管理實例的初始化呀,爲什麼一定要使用Spring呢?

我:啊........因爲.......方便?(彷彿看到大佬凝固的表情,爲了不那麼尷尬,我決定轉移話題)。而且spring的IOC是單例模式呢。

大佬:默認的是實現是單例模式嗎?

我:對的。

這裏查了一下爲什麼不用工廠模式而使用IOC。其實本質上還是因爲IOC是通過反射機制來實現的。當我們的需求出現變動時,工廠模式會需要進行相應的變化。但是IOC的反射機制允許我們不重新編譯代碼,因爲它的對象都是動態生成的。

2、數據庫

大佬:你使用過哪些數據庫呀?

我:Mysql還有SQLight。(被遺忘的MongoDB在角落裏無聲哭泣)

大佬:那你使用的ORM框架除了Hibernate還有哪些,比如IBatis?

我:我用過MyBatis。

大佬:那你能講一下你對兩個框架使用後的感受嗎?

我:當時使用Mybaits的時候,也有去社區瞭解了一下兩個框架的口碑,發現大家的戰隊都堅定而對立。對Hibernate的不滿通常是因爲它在複雜關聯中往往會帶來嚴重的性能問題,也就是N+1的問題。但是它是面向對象支持的最好的框架了。而Mybatis則相對而言比較易於使用,只需要會SQL語句就行了。但是也意味着會破壞一些面向對象的規則。

大佬:(似乎有點認可)那你瞭解數據庫的事務嗎?能講一下數據庫的事務級別嗎?

我:(忘得一乾二淨)不好意思,我記不太清楚了。

大佬:那你還記得數據庫的加鎖嗎?比如樂觀鎖、悲觀鎖?

我:(求您別問了)

大佬:(鍥而不捨)那我現在假設有一張用戶表,你也知道,正常的表只能存放大概一千萬或是兩千萬左右的數據。但是阿里巴巴有上億的用戶?你會怎麼存儲呢?

我:可以縱向分割與橫向分割。

大佬:那你覺得這裏應該縱向還是橫向呢?

我:縱向(載入史冊的嘴瓢)

大佬:(很有耐心)可是這樣我的數據庫還是放不下啊。

我:(彷彿突然睡醒)應該是橫向分割,把表拆分成多個表然後分佈式存儲。

大佬:那你覺得我們怎樣分割比較合適呢?

我:(還能再問?)可以根據地域,但是根據用戶分佈的情況來說,還是會有某些地域訪問稠密而有些地域比較稀疏的問題。難道按照用戶等級?

大佬:不,用戶等級會變動,不合適。你這個階段暫時沒有考慮這個問題。

我:(謝謝您的臺階啊!)

3、Linux

大佬:你們服務器用的是什麼操作系統啊?

我:(呀,送命題)我們用的是阿里雲上的centos系統

大佬:那你對Linux熟練嗎?

我:不是很熟悉,僅僅是入門,能夠敲一點指令。

大佬:好,那你知道庫函數和內核調用嗎?

我:內核調用是指進入內核態然後執行指令然後再回到用戶態嗎?我知道的大概就這麼多了,只瞭解一些概念上的內容。(涼涼送給自己)

大佬:那你知道如何查看進程嗎?

我:啊...記不得了,我一般都查一下指令

4、JVM&線程

大佬:你瞭解Java虛擬機嗎?能解釋一下底層的模塊嗎?

我:(如果你通知我明天面試,我就瞭解了)不好意思,這一塊知識我不熟悉,但是我很願意去了解(趕緊表忠心啊!)

大佬:你知道什麼是線程安全嗎?

我:(烏魯烏魯說了一堆)就是比如如果同時有兩個線程訪問同一個變量,那麼它們對變量造成的修改所帶來的結果可能是不確定的。

大佬:那你知道Java有什麼方法來實現線程安全嗎?

我:(前幾天還翻譯了博客,但是一問起來忘得比啥都快)首先是synchronized修飾詞,然後Java還自己實現了一些封裝好的類比如LatchDown,Atomic系列(後來查是CountDownLatch!還有大明湖畔的final關鍵字呢?還有小明湖畔的Lock呢?還有那些實現線程的collections比如ConcurrentHashMap呢?)

5、分佈式

大佬:你有寫過分佈式的業務嗎?

我:我寫過一個基於HDFS分佈式存儲的KVStore,上層使用Hadoop的API實現。

大佬:那個是分佈式存儲,我想了解一下分佈式業務?

我:(趕緊糾正)那Dubbo算嗎?(於是介紹了一下自己瞭解的dubbo)

大佬:那你覺得分佈式的話會遇到什麼問題呢?

我:那就是經典的CAP問題了。沒有數據庫能夠同時滿足這三個問題

大佬:那你能具體解釋一下CAP代表什麼嗎?

我:(緊張到一片空白)Consistency?Atomic?P...Persistency?

CAP: 是指Consistency一致性,Availability可用性,Partition Tolerance分區容忍性。

6、設計模式

大佬:你瞭解過設計模式嗎?

我:瞭解瞭解。

大佬:那你瞭解過哪些設計模式呢?

我:blablabla

大佬:那你解釋一下指令模式吧。

我:這個有點像函數式編程的思想。指令模式就是指將各個操作封裝爲統一的接口,並且提供各個操作的實現類。這樣我們只需要面向command接口編程,解除了調用類和指令之間的強耦合。

最後,經過這次面試,雖然過程很艱難和尷尬,但是總結了一些相關的java技術經驗,在這裏和大家分享一下,要想成功進行一次阿里巴巴的面試,你需要了解甚至掌握以下內容:

JAVA語言,尤其是線程

JVM原理

數據庫(事務,加鎖,ORM)

Linux

Spring(重點!)

分佈式

設計模式

最後,提醒大家做好充分準備,祝願大家在這場面試中都能夠成功!
本文摘自http://www.cnitedu.cn/java/share/20197700.html,如有侵權請及時告知。

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