程式設計師去阿里面試,沒想到過程如此壯烈 (內含資料包)
對於面試,對於選擇一家心儀的公司,是每個求職者都要經歷的。但是越是一些網際網路大企業,面試時需要注意的事項就會越多,嚴格度相對也較高,這不嘛,一位在結束了阿里面試的程式設計師,把面試的心裡路程分享了出來~
今天本是一個陽光明媚,鳥語花香的日子。於是我決定在逛街中感受春日的陽光~結果晚上七點的時候,螞蟻金服後端大佬來了電話,要進行一輪的技術面試。我一臉黑人問號???現在的面試都流行突襲嗎?
於是我的第一次面試之旅,就此壯烈的展開。
自我介紹
首先呢,大佬讓我用兩分鐘自我介紹。我本以為自己能滔滔不絕,將對方視作相親物件般全方位介紹自己。結果不到半分鐘,我就介紹完了==。
五秒鐘的沉默後,大佬嗯了一聲。
感覺自己的臉上堆滿了尷尬而不失禮貌的微笑。
最近的專案經歷
這時大佬問我最近從事了什麼專案,研究生階段都進行了什麼樣的工作。
那必須吹一吹!從JAVA的起源到Spring的發展再到jenkin的使用順便提一嘴dva+antd,結果半分鐘一到,又說不下去了==
大佬很有耐心的聽我說了一堆語無倫次的話,開始進入正題。
Spring
大佬:我看你用過這個Spring啊,你來聊聊為什麼我們要使用Spring呢?
我:(因為大家都說好啊)首先呢,spring是一個龐大的框架,它封裝了很多成熟的功能能夠讓我們無需重複造輪子。其次呢,它使用IOC進行依賴管理,我們就不用自己初始化例項啦。
大佬:(我就知道你會說IOC啦)那你解釋一下IOC吧
我:IOC就是依賴控制轉化,利用JAVA的反射機制,將例項的初始化交給Spring。Spring可以透過配置檔案管理例項。
大佬:那我們可以直接使用工廠模式呀。工廠模式也可以管理例項的初始化呀,為什麼一定要使用Spring呢?
我:啊........因為.......方便?(彷彿看到大佬凝固的表情,為了不那麼尷尬,我決定轉移話題)。而且spring的IOC是單例模式呢。
大佬:預設的是實現是單例模式嗎?
我:對的。
這裡查了一下為什麼不用工廠模式而使用IOC。其實本質上還是因為IOC是透過反射機制來實現的。當我們的需求出現變動時,工廠模式會需要進行相應的變化。但是IOC的反射機制允許我們不重新編譯程式碼,因為它的物件都是動態生成的。
資料庫
大佬:你使用過哪些資料庫呀?
我:mysql還有sqlight。(被遺忘的mongodb在角落裡無聲哭泣)
大佬:那你使用的ORM框架除了hibernate還有哪些,比如IBatis?
我:我用過MyBatis
大佬:哦,那你能講一下你對兩個框架使用後的感受嗎?
我:當時使用Mybaits的時候,也有去社群瞭解了一下兩個框架的口碑,發現大家的戰隊都堅定而對立。對Hibernate的不滿通常是因為它在複雜關聯中往往會帶來嚴重的效能問題,也就是N+1的問題。但是它是物件導向支援的最好的框架了。而Mybatis則相對而言比較易於使用,只需要會SQL語句就行了。但是也意味著會破壞一些物件導向的規則。
大佬:(似乎有點認可)那你瞭解資料庫的事務嗎?能講一下資料庫的事務級別嗎?
我:(忘得一乾二淨)emmm不好意思我記不太清楚了。
大佬:那你還記得資料庫的加鎖嗎?比如樂觀鎖,悲觀鎖?
我:(求您別問了T T)
大佬:(鍥而不捨)那我現在假設有一張使用者表,你也知道,正常的表只能存放大概一千萬或是兩千萬左右的資料。但是阿里巴巴有上億的使用者?你會怎麼儲存呢?
我:可以縱向分割與橫向分割。
大佬:那你覺得這裡應該縱向還是橫向呢?
我:縱向(載入史冊的嘴瓢)
大佬:(很有耐心)可是這樣我的資料庫還是放不下啊
我:(彷彿突然睡醒)應該是橫向分割,把表拆分成多個表然後分散式儲存
大佬:那你覺得我們怎樣分割比較合適呢?
我:(還能再問?)可以根據地域,但是根據使用者分佈的情況來說,還是會有某些地域訪問稠密而有些地域比較稀疏的問題。難道按照使用者等級?
大佬:不,使用者等級會變動,不合適。你這個階段暫時沒有考慮這個問題
我:(謝謝您的臺階啊!)
Linux
大佬:你們伺服器用的是什麼作業系統啊?
我:(呀,送命題)我們用的是阿里雲上的centos系統
大佬:那你對linux熟練嗎?
我:不是很熟悉,僅僅是入門,能夠敲一點指令。
大佬:好,那你知道庫函式和核心呼叫嗎?
我:核心呼叫是指進入核心態然後執行指令然後再回到使用者態嗎?
大佬:對
我:我知道的大概就這麼多了,只瞭解一些概念上的內容。(涼涼送給自己)
大佬:那你知道如何檢視程式嗎?
我:啊...記不得了,我一般都查一下指令(於是大佬果斷放棄了其它linux問題)。
JVM
大佬:你瞭解JAVA虛擬機器嗎?能解釋一下底層的模組嗎?
我:(如果你通知我明天面試,我就瞭解了><)不好意思,這一塊知識我不熟悉,但是我很願意去了解(趕緊表忠心啊!)
執行緒
大佬:你知道什麼是執行緒安全嗎?
我:(烏魯烏魯說了一堆)就是比如如果同時有兩個執行緒訪問同一個變數,那麼它們對變數造成的修改所帶來的結果可能是不確定的。
大佬:那你知道JAVA有什麼方法來實現執行緒安全嗎?
我:(前幾天還翻譯了部落格,但是一問起來忘得比啥都快)首先是synchronized修飾詞,然後JAVA還自己實現了一些封裝好的類比如LatchDown,Atomic系列(????????後來一查是CountDownLatch!還有大明湖畔的final關鍵字呢?還有小明湖畔的Lock呢?還有那些實現執行緒的collections比如ConcurrentHashMap呢?)
大佬果然開啟了下一個問題。
分散式
大佬:你有寫過分散式的業務嗎?
我:我寫過一個基於HDFS分散式儲存的KVStore,上層使用Hadoop的API實現。
大佬:那個是分散式儲存,我想了解一下分散式業務?
我:(趕緊糾正)那dubbo算嗎?(於是介紹了一下自己瞭解的dubbo)
大佬:ok。那你覺得分散式的話會遇到什麼問題呢?
我:那就是經典的CAP問題了。沒有資料庫能夠同時滿足這三個問題
大佬:那你能具體解釋一下CAP代表什麼嗎?
我:(緊張到一片空白)Consistency?Atomic?P...Persistency???
大佬:。。。。。。
CAP:是指Consistency一致性,Availability可用性,Partition Tolerance分割槽容忍性
設計模式
大佬:你瞭解過設計模式嗎?
我:瞭解瞭解
大佬:那你瞭解過哪些設計模式呢?
我:blablabla
大佬:那你解釋一下指令模式吧
我:這個有點像函數語言程式設計的思想。指令模式就是指將各個操作封裝為統一的介面,並且提供各個操作的實現類。這樣我們只需要面向command介面程式設計,解除了呼叫類和指令之間的強耦合。
總結
最後當然和大佬話一話家常,進行最後的掙扎。總結來說,要想成功進行一次阿里巴巴的面試,你需要了解甚至掌握以下內容:
-
JAVA語言,尤其是執行緒
-
JVM原理
-
資料庫(事務,加鎖,ORM)
-
Linux
-
Spring(重點!)
-
分散式
-
設計模式
可以說是涉及範圍非常廣了。不過其實要想成為一名優秀的後端開發,是需要這些知識面的,只能說自己還是太菜了。要繼續深入學習!
原文連結:https://mp.weixin.qq.com/s/wYCqyAzzM9wd3qME_BQSJA
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548982/viewspace-2212537/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師面試資料程式設計師面試
- 面試沒過的程式設計師都到哪去了?面試程式設計師
- UI設計師的面試過程UI面試
- iOS面試·一個iOS程式設計師的BAT面試全記錄(內含百度+網易+阿里面試真題)iOS面試程式設計師BAT阿里
- 程式設計師面試必備規程程式設計師面試
- 想進阿里、京東、美團面試的Java程式設計師看過來阿里面試Java程式設計師
- 這些神奇又搞笑的bug,真的讓程式設計師萬萬沒想到!程式設計師
- 萬萬沒想到,程式設計師的一天竟然是這樣....程式設計師
- 我,35歲程式設計師,沒想到今年找工作這麼難程式設計師
- 大資料面試題整理-好程式設計師大資料面試題程式設計師
- 程式設計師面試之MySQL資料庫表的設計程式設計師面試MySql資料庫
- 強烈推薦:程式設計師必須懂的資料庫知識程式設計師資料庫
- 【JAVA面試資料】程式設計師面試之葵花寶典1Java面試程式設計師
- 【JAVA面試資料】程式設計師面試之葵花寶典2Java面試程式設計師
- 好程式設計師大資料培訓分享之hive儲存過程程式設計師大資料Hive儲存過程
- 好程式設計師大資料培訓分享Hadoop的shuffle過程程式設計師大資料Hadoop
- 程式設計師,為什麼如此迷茫?程式設計師
- Java程式設計師面試學習資料彙總Java程式設計師面試
- 程式設計師面試過程中,該怎麼判斷該公司好壞?程式設計師面試
- 好程式設計師java分享Java面試寶典:類的載入過程程式設計師Java面試
- 程式設計師面試過程中,該怎麼判斷該公司好壞程式設計師面試
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 程式設計師面試資源大收集程式設計師面試
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- 沒有關係的DS程式設計師們如何去創業?程式設計師創業
- 程式設計師面試因抽菸被拒,網友:沒毛病程式設計師面試
- 萬萬沒想到,學習風變程式設計Python課程還有這個用處程式設計Python
- 程式設計師內功修煉之資料結構程式設計師資料結構
- 某程式設計師去相親程式設計師
- 程式設計師面試技巧程式設計師面試
- 如何面試程式設計師?面試程式設計師
- 資料庫開發程式設計師在開發過程中的注意事項資料庫程式設計師
- 程式設計老手的哪些特點,是值得新手程式設計師學習的?(附上一些學習資料和阿里面試資料)程式設計師阿里面試
- 資料庫設計:儲存過程資料庫儲存過程
- GitHub 2018年度報告 | 萬萬沒想到你是這樣的程式設計師Github程式設計師
- 過了 35 歲, 程式設計師真的沒前途了嗎?程式設計師
- 阿里面試回來,和Java程式設計師談一談阿里面試Java程式設計師
- 程式設計師程式碼面試指南程式設計師面試