職位類型:Java研發(fā)工程師
面試地點:沈陽
招聘公司:阿里巴巴
昨天中午接到阿里巴巴的面試通知,心中喜憂參半,喜的是終于能夠有機會進入阿里巴巴,憂的事自己真是一點準備都沒有,完全沒有信心啊~!但是既然機會已經(jīng)來了,我還是要去試一試的。
今天上午9點到了裕寧酒店在等待區(qū)沒等多久就被領(lǐng)去面試了。阿里的一面是在大廳中分組一對一單面的。面試我的是一個二十七八歲的帥哥,面試過程也很友善。進去后,他首先看了我的簡歷,然后問我能不能說一下自己的特長優(yōu)勢什么的(都沒有讓自我介紹)。我簡單的把在校三年來自己學(xué)習(xí)的技術(shù)和參加的項目介紹了下,然后拿出了自己準備好的《項目回顧表》以及自己做的《作品回顧》光盤和已經(jīng)出版發(fā)行的兩張光盤給他看。他看了說不錯,然后就問我項目的事兒。
他說自己對3D開發(fā)不太了解,然后問我感覺在做《山海關(guān)虛擬博物館》的時候有沒有什么技術(shù)難點和重點。我說重點是在尋路上(囧,說完我心里就哇涼哇涼的了,不應(yīng)該說這個),然后他就問我是怎么實現(xiàn)尋路的,我給他畫了下場景地圖,然后解釋了下我的做法(主要是用狀態(tài)機)他可能不太滿意,然后問我能不能用算法來描述。我沒太明白他想要什么,然后他開始引導(dǎo)我回答這個問題,先問我學(xué)沒學(xué)過圖論,我說在數(shù)據(jù)結(jié)構(gòu)和離散數(shù)學(xué)中學(xué)過,然后我明白了他想要什么了,我說可以用圖存儲各個目標(biāo)點,然后通過判斷各點之間的連通性來判斷點是否可以到達,可以通過深度優(yōu)先搜索來完成(說完我心里又是哇涼的,根本就沒準備圖這一塊兒的數(shù)據(jù)結(jié)構(gòu))。
然后他說讓我寫下深度優(yōu)先搜索程序(= =,這個鄙視我吧,我真忘記了)。我想了會兒說記不清楚了,他問我圖是怎么存儲的,我說用臨接表和臨接矩陣,然后他讓我給他畫下,我就畫完(這些還是會的)。他說再試試呢,我思考了下說記不清了(我怕寫完他在讓我寫廣度程序的和優(yōu)化查找,這塊兒真心沒準備)。然后他讓我寫下自己用過的設(shè)計模式,我說有策略模式、單例模式、工廠模式、狀態(tài)模式、適配器模式。然后他讓我寫下單例模式,我用了最簡單的方式,static變量new自身對象。他說有沒什么問題,比如變量被賦值呢。我說在C#中可以用訪問控制符禁止set,在java中也可以用靜態(tài)方法來屏蔽。他又問那你的類被別的類實例化,我說構(gòu)造方法我用private的。(總之是沒寫全,寫全他就不會問了。)
設(shè)計模式談完,他說來說下你的網(wǎng)站項目吧,我的簡歷里有寫“系統(tǒng)架構(gòu)”,他讓我解釋下,我就畫了下MVC圖,jsp頁面作為視圖,servelt作為控制層,然后建立model,建立service和dao,以及他們的作用。他說SSH和這些有什么不同嗎?我說Struts2代替了servlet,hibernate代替了dao,spring貫穿他們,注入對象。他說那你說下spring的核心思想吧。我說主要是IoC,AOP,DI。他說說下IoC和AOP吧,我提到了IoC控制反轉(zhuǎn),通過配置文件將對象注入到程序中,他說你寫下配置文件吧(又要寫,= =,Spring半年沒搞了早忘了)我說平時都是copy,忘記了。他可能以為我不會spring,然后問我那你都知道各個元素的作用嗎,我說知道。(但是真心的忘記bean標(biāo)簽中都有哪些了,我發(fā)誓看見之后都知道有什么用,抓狂啊。)
SSH告一段落(回答的太爛了,這些初級的學(xué)者都會,最主要的是很多都沒記住),我有一個項目寫的是已經(jīng)上線了,他讓我寫下那個URL,我有點蒙,就寫了域名,他說你們就用這個嗎,我不知道他想要什么,我就又寫了127.0.0.1:port,他問我用戶可以訪問?(當(dāng)我是小白了- - ,哎前面回答的太爛了)我說當(dāng)然不可以,我們的申請的IP是172.168.XX.XX:80這個是給用戶的。他說服務(wù)器用的什么,我說tomcat,他問tomcat的端口號在哪里配置,我說在web.xml(說順嘴了,其實我知道在server.xml中配置)。他說都可以配置什么,我說可以配置端口號,虛擬主機。他說還有嗎,我說還可以配置一個監(jiān)聽端口號。他說默認的都多少,我說8080,他問我另外一個,我說不記得了。然后他讓我寫下JSP頁面的標(biāo)準頭部是什么。我把page標(biāo)簽寫上去了,我提到了頁面編碼,他問我用什么編碼我說UTF-8,他說還知道其他的編碼嗎,我說還有GBK。然后他問我UTF-8和GBK的區(qū)別,我只說了表面的,他讓我從計算機組成原理的角度說下GBK和UTF-8,我說我們專業(yè)沒開計算機組成原理,然后他看了下我的簡歷。然后讓我寫下平時都看什么書,我大概寫了下。最后他問我有什么要問他的嗎,我讓他點評了下。點評了啥就不說了,反正都在意料之中。
總結(jié):今天阿里的面試非常爛,問題很簡單,但是因為很久沒搞Java了(有半年多了)所以很多都忘記了。基礎(chǔ)太不扎實,這也是很多應(yīng)屆生的缺點吧。想要進大中型公司應(yīng)該具備以下素質(zhì),留給各位準備面試和將來面試的人吧。
1.數(shù)據(jù)結(jié)構(gòu),這個不是懂了就行,剛學(xué)完數(shù)據(jù)結(jié)構(gòu),各種算法自己也可以很快寫出來的,但是很久沒寫了都忘記了。數(shù)據(jù)結(jié)構(gòu)這個東西必須能信手拈來,隨手就能寫出各種樹、圖的遍歷以及排序、查找等算法,以及二叉樹,B-樹、堆的概念和程序(最好做到能當(dāng)場寫程序)。
2.明白Java API的源代碼實現(xiàn),比如LinkedList和ArrayList,不只是數(shù)據(jù)結(jié)構(gòu)的區(qū)別(這個大家都清楚)還要能從源代碼的角度,比如線程安全性,內(nèi)部擴充方式,每次擴充的長度等等來表達。(你可以想想自己能不能說出String、StringBuffer、StringBuilder的區(qū)別;HashTable、HashMap、TreeMap的區(qū)別呢?屬性類的安全性?等等,別查文檔,也別說你知道,面試的時候不會聽你啰嗦的,就說重點區(qū)別)。
3.設(shè)計模式,要明白各個設(shè)計模式的優(yōu)缺點,應(yīng)用場景,最好能說出哪些框架應(yīng)用了這些設(shè)計模式。對于簡單的設(shè)計模式,如單例等可能會被現(xiàn)場寫。
4.SSH框架,只要搞Java的都會被問這三個框架的很多東西,Spring的IoC,DI,AOP,配置;Struts2的創(chuàng)建過程,F(xiàn)ilter,配置;Hibernate的O/R Mapping,映射的配置,樂觀鎖、悲觀鎖等等。緊緊在項目中用還不行,最好要明白內(nèi)部原理。
5.操作系統(tǒng)的一些知識,筆試的時候有考到LRU算法(差一點就忘了)。
總之大公司考的范圍很廣,絕大部分都學(xué)過,但是很多我們在學(xué)校中學(xué)一次就很可能不會再用(比如頁面置換算法,存儲過程等,學(xué)生項目不會涉及這么復(fù)雜底層的東西)。還有就是平時我們依賴IDE慣了,很多我們知道的東西,比如標(biāo)簽都有哪些屬性什么的,當(dāng)場寫我們可能就寫不出來了(比如各種配置文件,使用自動提示慣了,讓自己寫都不會了,這是平時注意自己敲吧)。
感想:其實阿里巴巴的技術(shù)面反映出來的最主要的問題不是自己的技術(shù)問題,而是自己真正想要做什么。
今天問的這些問題,如果放在大三上學(xué)期問的話,我能很自如的答出來,但是從專業(yè)實習(xí)之后自己一直就在研究Unity3D和Photon,這些很久都沒看了,忘了很自然。自己現(xiàn)在真正應(yīng)該思考的是到底想不想要做Java開發(fā),做Java開發(fā)的話就要用SSH框架,自己又不太喜歡基于SSH框架的網(wǎng)站開發(fā)。(= =真是個糾結(jié)的問題,男怕入錯行,如果你了解的也比較多還是慎重考慮吧,雖然招聘Java的很多,但是面試Java的比招聘的還多,Java發(fā)展了這么多年,想要說你精通Java要有一定實力哦,要不然隨便一個細節(jié)問題,比如Java反射、序列化、反序列化等都可能問死你,不是你不行,是這個太細了)有側(cè)重的復(fù)習(xí)面試很重要。想要深入游戲開發(fā),又怕自己沒學(xué)過C 和圖像處理算法和別人差距太大。這幾天要反思下。