小白如何入職阿里?——精講阿里巴巴的十道面試題

點擊右上方關注,每天都能收到精華技術好文

小白如何入職阿里?——精講阿里巴巴的十道面試題

  全文2300字,建議閱讀時長8分鐘

一、string、stringbuffer、stringbuild之間的區別

1、String是final修飾的,是不可變的對象, 因此在每次對 String 類型進行改變的時候其實都等同於生成了一個新的 String 對象,然後將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用 String ,因爲每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。

2、StringBuffer、StringBuilder和String一樣,也用來代表字符串,是可變類,任何對它所指代的字符串的改變都不會產生新的對象,他們的原理和操作基本相同,區別在於StringBufferd支持併發操作,線性安全的,適合多線程中使用。StringBuilder不支持併發操作,線性不安全的,不適合多線程中使用。StringBuilder類不是線程安全的,但其在單線程中的性能比StringBuffer高。

string、stringbuffer、stringbuild之間的區別更全面的鏈接如下

http://blog.csdn.net/shenhonglei1234/article/details/54908934

小白如何入職阿里?——精講阿里巴巴的十道面試題

二、cookie的大小,一個站點可以存儲多少個cookie

小白如何入職阿里?——精講阿里巴巴的十道面試題

三、Set保證元素唯一底層依賴的兩個方法

hashCode和equals來完成的

  • 如果元素的hashCode值相同,纔會判斷equals是否爲true

  • 如果hashCode的值不同,不會調用equals方法

  • 注意:對於判斷元素是 否存在,以及刪除等操作。依賴的方法是元素的hashCode和equals方法。

**四、Hashmap和hashtable的區別,hashmap的底層以及怎麼變成線程安全

區別比較:**

小白如何入職阿里?——精講阿里巴巴的十道面試題
HashMap基於hashing原理,我們通過put()和get()方法儲存和獲取對象。當我們將鍵值對傳遞給put()方法時,它調用鍵對象的hashCode()方法來計算hashcode,讓後找到bucket位置來儲存值對象。當獲取對象時,通過鍵對象的equals()方法找到正確的鍵值對,然後返回值對象。HashMap使用鏈表來解決碰撞問題,當發生碰撞了,對象將會儲存在鏈表的下一個節點中。 HashMap在每個鏈表節點中儲存鍵值對對象。

當兩個不同的鍵對象的hashcode相同時會發生什麼? 它們會儲存在同一個bucket位置的鏈表中。鍵對象的equals()方法用來找到鍵值對。小白如何入職阿里?——精講阿里巴巴的十道面試題

五、線程的有幾種實現方式,線程的幾種狀態,死鎖產生的原因,sleep和wait的區別,多線程在項目中使用了嗎,線程的安全問題

實現方式:

1、繼承Thread類創建線程;

2、實現Runnable接口創建線程;

3、實現Callable接口通過FutureTask包裝器來創建Thread線程;

使用ExecutorService、Callable、Future實現有返回結果的線程

重點記住第一點和第二點

線程的狀態: 線程從創建、運行到結束總是處於下面五個狀態之一:新建狀態、就緒狀態、運行狀態、阻塞狀態及死亡狀態。

死鎖產生的原因(可以舉例課上講解的A、B線程獲取對方鎖):

死鎖:

指多個進程因競爭共享資源而造成的一種僵局,若無外力作用,這些進程都將永遠不能再 向前推進。

小白如何入職阿里?——精講阿里巴巴的十道面試題
產生死鎖的原因:小白如何入職阿里?——精講阿里巴巴的十道面試題

(1)競爭系統資源 (2)進程的推進順序不當

產生死鎖的必要條件:

互斥條件:進程要求對所分配的資源進行排它性控制,即在一段時間內某資源僅爲一進程所佔用。

請求和保持條件:當進程因請求資源而阻塞時,對已獲得的資源保持不放。

不剝奪條件:進程已獲得的資源在未使用完之前,不能剝奪,只能在使用完時由自己釋放。

環路等待條件:在發生死鎖時,必然存在一個進程--資源的環形鏈。

Sleep、wait區別:

1,這兩個方法來自不同的類分別是Thread和Object

2,最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。

3,wait,notify和notifyAll只能在同步控制方法或者同步控制塊裏面使用,而sleep可以在任何地方使用

4,sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常

JAVAWEB開發中,直接使用多線程的並不多,因爲servlet等技術已經實現了,我們只是直接用,並不用實現多線程

如果你的代碼在多線程下執行和在單線程下執行永遠都能獲得一樣的結果,那麼你的代碼就是線程安全的。

死鎖和髒數據就是典型的線程安全問題。

解決線程安全通常做法:訪問狀態變量時使用同步。 synchronized和Lock都可以實現同步。簡單點說,就是在你修改或訪問可變狀態時加鎖,獨佔對象,讓其他線程進不來。達到線程隔離,保證線程安全
小白如何入職阿里?——精講阿里巴巴的十道面試題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章