最近一位筆者經歷了漫長一個月的等待,終於在前幾天經過面試官獲悉已被螞蟻金服錄取,這期間的焦慮、痛苦自沒必要說,知道被錄取的那一刻,一全年的陰霾都一掃而空了。java
筆者面的是阿里的Java研發工程師崗,面試流程是3輪技術面+1輪hr面。linux
一面的時候大概是3月12號,面完等了差很少半個月才忽然接到二面面試官的電話。一面多是簡歷面,因此問題比較簡單。面試
ArrayList和LinkedList區別算法
固然,這些對比都是指數據量很大或者操做很頻繁的狀況下的對比,若是數據和運算量很小,那麼對比將失去意義。數據庫
什麼狀況會形成內存泄漏數組
在Java中,內存泄漏就是存在一些被分配的對象,這些對象有下面兩個特色:tomcat
首先,這些對象是可達的,即在有向圖中,存在通路能夠與其相連;安全
其次,這些對象是無用的,即程序之後不會再使用這些對象。服務器
若是對象知足這兩個條件,這些對象就能夠斷定爲Java中的內存泄漏,這些對象不會被GC所回收,然而它卻佔用內存。網絡
什麼是線程死鎖,如何解決
產生死鎖的條件有四個:
線程死鎖是由於多線程訪問共享資源,因爲訪問的順序不當所形成的,一般是一個線程鎖定了一個資源A,而又想去鎖定資源B;在另外一個線程中,鎖定了資源B,而又想去鎖定資源A以完成自身的操做,兩個線程都想獲得對方的資源,而不肯釋放本身的資源,形成兩個線程都在等待,而沒法執行的狀況。
要解決死鎖,能夠從死鎖的四個條件出發,只要破壞了一個必要條件,那麼咱們的死鎖就解決了。在java中使用多線程的時候必定要考慮是否有死鎖的問題哦。
紅黑樹是什麼?怎麼實現?時間複雜度
紅黑樹(Red-Black Tree,簡稱R-B Tree),它一種特殊的二叉查找樹。紅黑樹是特殊的二叉查找樹,意味着它知足二叉查找樹的特徵:任意一個節點所包含的鍵值,大於等於左孩子的鍵值,小於等於右孩子的鍵值。除了具有該特性以外,紅黑樹還包括許多額外的信息。
紅黑樹的每一個節點上都有存儲位表示節點的顏色,顏色是紅(Red)或黑(Black)。紅黑樹的特性:
關於它的特性,須要注意的是:
第一,特性(3)中的葉子節點,是隻爲空(NIL或null)的節點。
第二,特性(5),確保沒有一條路徑會比其餘路徑長出倆倍。於是,紅黑樹是相對是接近平衡的二叉樹。
具體實現代碼這裏不貼了,要實現起來,須要包含的基本操做是添加、刪除和旋轉。在對紅黑樹進行添加或刪除後,會用到旋轉方法。旋轉的目的是讓樹保持紅黑樹的特性。旋轉包括兩種:左旋 和 右旋。
紅黑樹的應用比較普遍,主要是用它來存儲有序的數據,它的查找、插入和刪除操做的時間複雜度是O(lgn)。
TCP三次握手
三次握手(three times handshake;three-way handshake)所謂的「三次握手」即對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而肯定的數據確認數及數據發送、接收完畢後什麼時候撤消聯繫,並創建虛鏈接。
爲了提供可靠的傳送,TCP在發送新的數據以前,以特定的順序將數據包的序號,並須要這些包傳送給目標機以後的確認消息。TCP老是用來發送大批量的數據。當應用程序在收到數據後要作出確認時也要用到TCP。
第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP鏈接成功)狀態,完成三次握手。
一面的時候大概是3月12號,面完等了差很少半個月才忽然接到二面面試官的電話。
介紹項目
Storm怎麼保證一致性
說一下hashmap以及它是否線程安全
HashMap基於哈希表的 Map 接口的實現。HashMap中,null能夠做爲鍵,這樣的鍵只有一個;能夠有一個或多個鍵所對應的值爲null。HashMap中hash數組的默認大小是16,並且必定是2的指數。Hashtable、HashMap都使用了 Iterator。而因爲歷史緣由,Hashtable還使用了Enumeration的方式 。HashMap 實現 Iterator,支持fast-fail。
哈希表是由數組+鏈表組成的,它是經過把key值進行hash來定位對象的,這樣能夠提供比線性存儲更好的性能
HashMap不是線程安全的。
十億條淘寶購買記錄,怎麼獲取出現最多的前十個
這是一道典型的有限內存的海量數據處理的題目。通常這類題目的解答無非是如下幾種:
平時有沒有用linux系統,怎麼查看某個進程
ps aux|grep java 查看java進程ps aux 查看全部進程ps –ef|grep tomcat 查看全部有關tomcat的進程ps -ef|grep --color java 高亮要查詢的關鍵字kill -9 19979 終止線程號位19979的進程
說一下Innodb和MySIAM的區別
說一下jvm內存模型,介紹一下你瞭解的垃圾收集器
其實並無jvm內存模型的概念。應該是Java內存模型或者jvm內存結構,這裏面試者必定要聽清楚問的是哪一個,再回答。
你說你是大數據方向的,瞭解哪些大數據框架
做者回答了一些zookeeper、storm、HDFS、Hbase等
其餘問題
二面大概就是這些,其中storm一致性這個問題被面試官懷疑了一下,就有點緊張,其實沒答錯,因此仍是要對知識掌握得更明確才行。
清明節的時候例外地沒有回家掃墓,由於知道本身的弱項是操做系統和海量數據題這塊,因此想着惡補這方面的知識,不過以後的面試意外的並無問到這方面的內容。
說一下關係型數據庫和非關係型數據庫的區別
非關係型數據庫的優點:
使用場景:日誌、埋點、論壇、博客等
關係型數據庫的優點:
使用場景:全部有邏輯關係的數據存儲
如何訪問鏈表中間節點
對於這個問題,咱們首先可以想到的就是先遍歷一遍整個的鏈表,而後計算出鏈表的長度,進而遍歷第二遍找出中間位置的數據。這種方式很是簡單。
若題目要求只能遍歷一次鏈表,那又當如何解決問題?
能夠採起創建兩個指針,一個指針一次遍歷兩個節點,另外一個節點一次遍歷一個節點,當快指針遍歷到空節點時,慢指針指向的位置爲鏈表的中間位置,這種解決問題的方法稱爲快慢指針方法。
說下進程間通訊,以及各自的區別
進程間通訊是指在不一樣進程之間傳播或交換信息。方式一般有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。
之因此說hr面焦慮,是由於面試前我還在看IG的半決賽(實在複習不下),接到電話的時候分外緊張,在一些點上答得不好。
遇到什麼挫折:這種問題主要考察面試者碰見困難是否能堅持下去,而且能夠看出他的解決問題的能力。
能夠簡單描述挫折,並說明本身如何克服,最終有哪些收穫。
職業規劃:代表本身決心,首先本身不許備繼續求學了,必須招工做了。而後說下本身不會短時間內換行業,或者換工做,本身比較喜歡,但願能夠堅持幾年看本身的興趣再規劃之類的。
對阿里的認識:這個比較簡答,誇就好了。
有什麼崇拜的人嗎:我說了詹姆斯哈登,hr小姐姐竟然笑了。這個能夠說一些IT大牛。
但願去哪裏就業:這個問題果斷回答該公司所在的城市啊。
其餘問題:有什麼興趣愛好,能拿得上臺表演的有嗎
提早批更多的是考察基礎知識,大公司都有本身在用的框架,你進去後基本上得從新學這些框架,因此對他們來講,基礎是否紮實纔是考察的關鍵。
基礎包括:操做系統、linxu、數據庫、數據結構、算法、java(基礎、容器、高併發、jvm)、計算機網絡等
當時我問一個java羣的師兄,學不下了怎麼辦,他說,換種姿式繼續學.......
面試建議是,必定要自信,勇於表達,面試的時候咱們對知識的掌握有時候很難面面俱到,把本身的思路說出來,而不是直接告訴面試官本身不懂,這也是能夠加分的。
總之,能夠拿到螞蟻金服的offer真的很意外,也很幸運,螞蟻金服歷來是我以爲很難達到的目標,但它確實發生了,也許這就是幸福來敲門吧,我能夠給到本身或其餘人的建議就是,必定要把握好時機。我有整理本身面試寶典須要的也能夠免費領取!
掃描下方二維碼便可
Don't ever let somebody tell you you can't do something, not even me. You got a dream, you gotta protect it. People can't do something by themselves,they wanna tell you you can not do it. If You want something. Go get it!