2015年阿里巴巴螞蟻金服校招JAVA研發工程師內推電話面試


  沒想到阿里校招如此之早,雖然早已進入復習備戰狀態,但還是感覺有些措手不及。。。找了個在螞蟻金服做HR的同學幫忙了內推,然后在最近的幾天匆匆忙忙地復習JAVA(之前都把精力放在了數據結構、算法等基礎上了)。上周五投遞的簡歷,這周四就接到了面試電話,面試GG聲音很有磁性,也比較溫柔。。。一開始是自我介紹,媽的,好緊張,可能是好久沒面試了,感覺中氣不足。自我介紹猶如敘說自傳,廢話講了一大推,看來最好還是事先准備好一段台詞。然后問了參加過哪些社團活動,還是因為緊張竟然把電腦醫院的經歷給漏說了。。不過這些都是次要的,感覺只是”前戲“,是面試官了解你並幫助你進入技術面試狀態的一種方式,無須太介意自己說的怎么樣。

  好了,轉入正題。以下是面試官的幾個問題,知識面還是涉及蠻廣的,有JAVA、數據庫、http方面的知識、前端以及linux。接下來一一闡述並且總結。

  1、Object類中的方法有哪些,它們各自的作用是什么?

  回答:我當時說了equals(),hashcode(),finalize(),clone(),然后說了它們各自的作用。對於clone()方法我當時提到了默認是淺層復制,然后面試官隨即就問到深層復制和淺層復制的區別。我回答淺層復制的話原對象和被克隆對象的引用屬性共用一個對象,而深層復制時引用變量類型的屬性也會被復制一份。然后他繼續問到clone的應用場景,這個問題沒答上來。接着他讓我用偽代碼寫一下如果一個對象覆蓋equals方法,該怎么寫?我邊在草稿紙上寫邊和他說,中間有一步出現了差錯,if(o instanceof Student)這一步我說成了強制轉換,囧。。。如果不是Student類型的對象會拋出ClassCastException異常的呀,哎。。幸好其他的都是說對的。

  糾錯:說了這四個方法,從數量來說尚可,但竟然把最基礎的toString()和getClass()方法給忘了,還是因為太緊張的緣故吧。

  toString():重寫該方法可以對對象進行自定義的格式輸出。默認輸出是類名@hashcode值;

  getClass():獲取該對象的類類型。

  wait():如果對象調用了wait方法,那么持有該對象的線程會把該對象的控制權交出去,然后處於等待狀態。

  notify():如果對象調用了notify()方法就會通知某個正在等待該對象的控制權的線程可以繼續運行,但必須等待當前線程執行完sychronized中的代碼塊。

  notifyAll():如果對象調用了notifyAll()方法就會通知所有正在等待該對象的控制權的線程可以繼續運行,但必須等待當前線程執行完sychronized中的代碼塊。

  關於wait和notify的總結

  以上對wait和notify的理解不是很到位。一個線程中的某個同步共享對象執行wait方法,該線程就釋放了該對象的對象鎖,進入對象等待池,等待被喚醒;在另一個線程中,這個同步共享變量執行notify方法,喚醒因wait而正在等待使用該對象的線程,使其進入對象鎖等待池,有機會獲得對象鎖,等到獲取對象鎖,該線程獲得CPU調度,繼續運行。需要注意wait、notify以及notifyall方法必須在synchronized代碼塊中,切記!

  詳見synchronized與lock的區別。

  2、談談對事務的理解。

  根據事務的原則來談對事務的理解,然后舉了一個A賬戶給B賬戶轉賬的例子來解釋。

  3、Spring中的事務管理有哪兩種?

  我只知道AOP有事務管理的功能。。。

  4、接下來是有關數據庫鎖的一個問題:在分布式服務器群中,有兩台服務器對共享數據庫的同一條數據進行並發修改,如果解決同步問題。

  這個問題完全不會。最后的答案是可以在該表中增加一個字段,A服務器操作時,將該字段的值改為正在修改的標記,則B服務器去操作時,查詢該字段的值,判斷是否有其他服務器正在修改該行數據,如果有則等待,否則可以去修改該行數據。這里的兩台服務器好比是線程,而字段好比是線程鎖。學習了,呵呵。。。

  5、考察hashmap。

  說了關於hashmap的理解,自己說的都是很多JAVA面試題中常考的哪些知識點,比如實現原理啊,是否線程安全等,這些都沒問題。但后面他繼續問hashmap兩種迭代的方式,各自的時間復雜度是多少?點擊詳情

  6、Servlet的生命周期,是否是線程安全的?

  Servlet的生命周期:Servlet類加載-->實例化-->服務-->銷毀。servlet是單例,所以是線程不安全的,需要處理線程同步問題。具體方法:對於線程共享的變量,應該用synchronized對使用該共享變量時的那段代碼加鎖,使當前線程獲得該Servlet對象的對象鎖。

關於synchronized的使用,點擊。

  7、對session的理解。

  session是用於保存用戶狀態的一種機制。服務器端保存用戶狀態信息,並分配一個sessionID給客戶端,客戶端通過cookie機制在瀏覽器保存這個SessionID,在下次訪問同一個URL時,瀏覽器會把該URL對應的sessionID傳遞給服務器端,服務器端根據這個sessionID查詢對應的用戶狀態信息。如果瀏覽器端cookie遭禁用,則可以再URL重寫來實現sessionID的傳遞。

  8、了解前端的一些知識嗎?

  html+css+js

  9、get和post的區別?

  區別容易,他問我get和post分別能傳遞多少字節量的數據。我說get是幾kb吧,post不知道具體的數量級,反正要比get大很多。。。事實上get是1024byte,post沒有限制。。

  10、熟悉的linux命令有哪些?

  報了一些熟悉的命令,他說可以了。。


免責聲明!

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



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