成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖


成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

螞蟻金服一面

一面的時候大概是3月1號,面完等了差不多半個月才突然接到二面面試官的電話。一面可能是簡歷面,所以問題比較簡單。

ArrayList和LinkedList區別

  • ArrayList 是一個可改變大小的數組。當更多的元素加入到ArrayList中時,其大小將會動態地增長。內部的元素可以直接通過get與set方法進行訪問,因為ArrayList本質上就是一個數組,
  • LinkedList 是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能.但在get與set方面弱於ArrayList。

當然,這些對比都是指數據量很大或者操作很頻繁的情況下的對比,如果數據和運算量很小,那麼對比將失去意義。

什麼情況會造成內存洩漏

在Java中,內存洩漏就是存在一些被分配的對象,這些對象有下面兩個特點:

首先,這些對象是可達的,即在有向圖中,存在通路可以與其相連;

其次,這些對象是無用的,即程序以後不會再使用這些對象。

如果對象滿足這兩個條件,這些對象就可以判定為Java中的內存洩漏,這些對象不會被GC所回收,然而它卻佔用內存。

什麼是線程死鎖,如何解決

產生死鎖的條件有四個:

  1. 互斥條件:所謂互斥就是進程在某一時間內獨佔資源。
  2. 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
  3. 不剝奪條件:進程已獲得資源,在末使用完之前,不能強行剝奪。
  4. 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。

線程死鎖是因為多線程訪問共享資源,由於訪問的順序不當所造成的,通常是一個線程鎖定了一個資源A,而又想去鎖定資源B;在另一個線程中,鎖定了資源B,而又想去鎖定資源A以完成自身的操作,兩個線程都想得到對方的資源,而不願釋放自己的資源,造成兩個線程都在等待,而無法執行的情況。

要解決死鎖,可以從死鎖的四個條件出發,只要破壞了一個必要條件,那麼我們的死鎖就解決了。在java中使用多線程的時候一定要考慮是否有死鎖的問題哦。

紅黑樹是什麼?怎麼實現?時間複雜度

紅黑樹(Red-Black Tree,簡稱R-B Tree),它一種特殊的二叉查找樹。紅黑樹是特殊的二叉查找樹,意味著它滿足二叉查找樹的特徵:任意一個節點所包含的鍵值,大於等於左孩子的鍵值,小於等於右孩子的鍵值。除了具備該特性之外,紅黑樹還包括許多額外的信息。

紅黑樹的每個節點上都有存儲位表示節點的顏色,顏色是紅(Red)或黑(Black)。紅黑樹的特性:

  1. 每個節點或者是黑色,或者是紅色。
  2. 根節點是黑色。
  3. 每個葉子節點是黑色。
  4. 如果一個節點是紅色的,則它的子節點必須是黑色的。
  5. 從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。

關於它的特性,需要注意的是:

第一,特性(3)中的葉子節點,是隻為空(NIL或null)的節點。

第二,特性(5),確保沒有一條路徑會比其他路徑長出倆倍。因而,紅黑樹是相對是接近平衡的二叉樹。

成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

文末領取面試資料

具體實現代碼這裡不貼了,要實現起來,需要包含的基本操作是添加、刪除和旋轉。在對紅黑樹進行添加或刪除後,會用到旋轉方法。旋轉的目的是讓樹保持紅黑樹的特性。旋轉包括兩種:左旋 和 右旋。

紅黑樹的應用比較廣泛,主要是用它來存儲有序的數據,它的查找、插入和刪除操作的時間複雜度是O(lgn)。

TCP三次握手

三次握手(three times handshake;three-way handshake)所謂的“三次握手”即對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而確定的數據確認數及數據發送、接收完畢後何時撤消聯繫,並建立虛連接。

為了提供可靠的傳送,TCP在發送新的數據之前,以特定的順序將數據包的序號,並需要這些包傳送給目標機之後的確認消息。TCP總是用來發送大批量的數據。當應用程序在收到數據後要做出確認時也要用到TCP。


成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

文末領取面試資料

第一次握手:建立連接時,客戶端發送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連接成功)狀態,完成三次握手。

螞蟻金服二面

介紹項目

Storm怎麼保證一致性

  • Storm是一個分佈式的流處理系統,利用anchor和ack機制保證所有tuple都被成功處理。如果tuple出錯,則可以被重傳,但是如何保證出錯的tuple只被處理一次呢?Storm提供了一套事務性組件Transaction Topology,用來解決這個問題。
  • Transactional Topology目前已經不再維護,由Trident來實現事務性topology,但是原理相同。

說一下hashmap以及它是否線程安全

HashMap基於哈希表的 Map 接口的實現。HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。HashMap中hash數組的默認大小是16,而且一定是2的指數。Hashtable、HashMap都使用了 Iterator。而由於歷史原因,Hashtable還使用了Enumeration的方式 。HashMap 實現 Iterator,支持fast-fail。

哈希表是由數組+鏈表組成的,它是通過把key值進行hash來定位對象的,這樣可以提供比線性存儲更好的性能

成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

文末領取面試資料

HashMap不是線程安全的。

十億條淘寶購買記錄,怎麼獲取出現最多的前十個

這是一道典型的有限內存的海量數據處理的題目。一般這類題目的解答無非是以下幾種:

  • 分治,hash映射,堆排序,雙層桶劃分,Bloom Filter,bitmap,數據庫索引,mapreduce等。
  • 具體情形都有很多不同的方案。這類題目可以到網上搜索一下,瞭解下套路,後面就基本都會了。

平時有沒有用linux系統,怎麼查看某個進程

<code>ps aux|grep java 查看java進程ps aux 查看所有進程ps –ef|grep tomcat 查看所有有關tomcat的進程ps -ef|grep --color java 高亮要查詢的關鍵字kill -9 19979 終止線程號位19979的進程/<code>

說一下Innodb和MySIAM的區別

  • MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,而InnoDB提供事務支持以及外部鍵等高級數據庫功能。
  • InnoDB不支持FULLTEXT類型的索引。
  • InnoDB 中不保存表的具體行數,也就是說,執行select count() from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count()語句包含 where條件時,兩種表的操作是一樣的。
  • 對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。
  • DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
  • LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。

說一下jvm內存模型,介紹一下你瞭解的垃圾收集器

其實並沒有jvm內存模型的概念。應該是Java內存模型或者jvm內存結構,這裡面試者一定要聽清楚問的是哪個,再回答。

你說你是大數據方向的,瞭解哪些大數據框架

作者回答了一些zookeeper、storm、HDFS、Hbase等

其他問題

  • 100個有序的整型,如何打亂順序?
  • 如何設計一個可靠的UDP協議?

二面大概就是這些,其中storm一致性這個問題被面試官懷疑了一下,就有點緊張,其實沒答錯,所以還是要對知識掌握得更明確才行。

準備充足的三面

  • 介紹項目:項目介紹完之後沒問太多
  • 介紹一下hashmap:HashMap真的是面試高頻題,多次面試都問到了,一定要掌握。
  • 介紹一下併發:這裡可以把整個併發的體系都說下,包括volatile、synchronized、lock、樂觀悲觀鎖、鎖膨脹、鎖降級、線程池等
  • 銀行賬戶讀寫怎麼做:我說了讀寫鎖以及可能出現死鎖問題

說一下關係型數據庫和非關係型數據庫的區別

非關係型數據庫的優勢:

  1. 性能:NOSQL是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過SQL層的解析,所以性能非常高
  2. 可擴展性:同樣也是因為基於鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。

使用場景:日誌、埋點、論壇、博客等

關係型數據庫的優勢:

  1. 複雜查詢:可以用SQL語句方便的在一個表以及多個表之間做非常複雜的數據查詢
  2. 事務支持:使得對於安全性能很高的數據訪問要求得以實現。

使用場景:所有有邏輯關係的數據存儲

如何訪問鏈表中間節點

<code>對於這個問題,我們首先能夠想到的就是先遍歷一遍整個的鏈表,然後計算出鏈表的長度,進而遍歷第二遍找出中間位置的數據。這種方式非常簡單。
若題目要求只能遍歷一次鏈表,那又當如何解決問題?
可以採取建立兩個指針,一個指針一次遍歷兩個節點,另一個節點一次遍歷一個節點,當快指針遍歷到空節點時,慢指針指向的位置為鏈表的中間位置,這種解決問題的方法稱為快慢指針方法。/<code>

說下進程間通信,以及各自的區別

進程間通信是指在不同進程之間傳播或交換信息。方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。

螞蟻金服hr面

成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

遇到什麼挫折:這種問題主要考察面試者遇見困難是否能堅持下去,並且可以看出他的解決問題的能力。

可以簡單描述挫折,並說明自己如何克服,最終有哪些收穫。

職業規劃:表明自己決心,首先自己不準備繼續求學了,必須招工作了。然後說下自己不會短期內換行業,或者換工作,自己比較喜歡,希望可以堅持幾年看自己的興趣再規劃之類的。

對阿里的認識:這個比較簡答,誇就行了。

有什麼崇拜的人嗎:我說了詹姆斯哈登,hr小姐姐居然笑了。這個可以說一些IT大牛。

希望去哪裡就業:這個問題果斷回答該公司所在的城市啊。

其他問題:有什麼興趣愛好,能拿得上臺表演的有嗎

總結

提前批更多的是考察基礎知識,大公司都有自己在用的框架,你進去後基本上得重新學這些框架,所以對他們來說,基礎是否紮實才是考察的關鍵。

基礎包括:操作系統、linxu、數據庫、數據結構、算法、java(基礎、容器、高併發、jvm)、計算機網絡等

建議要投資知識,系統學習!雖然購買的課很多還來不及讀(慚愧)

我有很多架構課程錄播分享在私人群了,也可以免費分享給大家,可以私信【資料】免費領取!

成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

視頻資料免費領取

成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

視頻資料免費領取

當時我問一個java群的師兄,學不下了怎麼辦,他說,換種姿勢繼續學.......

面試建議是,一定要自信,敢於表達,面試的時候我們對知識的掌握有時候很難面面俱到,把自己的思路說出來,而不是直接告訴面試官自己不懂,這也是可以加分的。

最後

分享一些我的學習筆記和整理的一份JAVA核心知識點JVM,JAVA集合,JAVA多線程併發,JAVA基礎,Spring原理,微服務,網絡,Zookeeper,Kafka,RabbitMQ,MongoDB,設計模式,負載均衡,數據庫,一致性哈希,JAVA算法,數據結構,加密算法,分佈式緩存

注意注意:需要我在文章分享的這些資料的朋友請私信“面試”免費領取,小編會一一回復大家的哦~

成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖

JAVA架構專題面試知識點(含解析)+JAVA學習書籍資料

成功砍下螞蟻金服offer且定位P8,四面真題解答,數據庫到線程鎖



分享到:


相關文章: