1. 程式人生 > >阿里巴巴面試Java問題總結

阿里巴巴面試Java問題總結

陸陸續續接到了阿里巴巴幾個事業部的面試邀約, 記錄一下自己在阿里面試中問的一些問題,總結一下;

阿里巴巴的面試一般分為五面
一面、電話面,會簡單問一些java基礎,多執行緒等等

二面、電話面,面試官會讓你講幾個自己工作中的業務,然後圍繞你的業務去問一些相關的問題;然後中間摻雜著一些基礎的問題,如果在一面中答的不好的問題,在二面中很大機率會被再次問到,因為每個面試官面完之後都會寫面試評價的,像我之前hashmap為什麼執行緒不安全答的不夠好,然後二面又被問了,面試官說主要看你有沒有學習能力;
再然後會問一些reids相關,rpc,spring等等

三面、現場面,跟二面差不多,也是以專案為主,這個時候一些基礎的問題可能不會問了,主要就是考察你對業務的把控能力,還有表達能力,還有專案管理能力,還會考察你的技術廣度,會不會主動去了解學習其他的技術;

四面、現場面,反正我面的時候是讓我在黑白上畫出我做的專案模組圖,以及上下層服務的流轉,然後跟我的描述 中間是不是打斷我提問,因為這麼多輪下來也沒啥好問的了,聊的都是技術之外的一些,比如說在專案中涉及多個部門如何溝通?
如果判斷你的同事是否優秀?等等
真的表達能力很重要…

五面、
HR面、反正我還沒有到達這一面,哭泣…

以下,為面試問題總結;


#Java基礎

  1. String 和StringBuffer和 StringBuilder的區別?
    String,StringBuffer與StringBuilder的區別??
    String 字串常量
    StringBuffer 字串變數(執行緒安全)
    StringBuilder 字串變數(非執行緒安全)

  2. sleep() 區間wait()區間有什麼區別?

  3. Object 中有哪些方法?其中clone(),怎麼實現一個物件的克隆,Java如何實現深度克隆?

  4. wati() notify() notify()用法,與Condition有什麼區別呢?

  5. HashMap為什麼是不安全的?
    談談HashMap不安全的體現

1.在多執行緒情況下,同時put結點的時候有可能造成資料丟失
2.多執行緒put情況下可能造成 環形鏈;然後再呼叫get方法的時候就會出現死迴圈,造成cpu 100%;

  1. 簡單描述一下HashMap和ConcurrentHash 在1.7 和1.8的實現

    Java 8系列之重新認識HashMap

  2. 為什麼重寫equals時候被要求重寫hashCode()?

  3. jdk1.7和1.8的比較,多了哪些新的特性?

  4. 什麼時候回發生記憶體洩露?讓你寫一段記憶體洩露的程式碼你會怎麼寫?
    JAVA 記憶體洩露詳解(原因、例子及解決)
    Java中關於記憶體洩漏出現的原因以及如何避免記憶體洩漏

我們知道,物件都是有生命週期的,有的長,有的短,如果長生命週期的物件持有短生命週期的引用,就很可能會出現記憶體洩露

下面給出一個 Java 記憶體洩漏的典型例子,
```
Vector v = new Vector(10);
for (int i = 0; i < 100; i++) {
    Object o = new Object();
    v.add(o);
    o = null;
}
```

在這個例子中,我們迴圈申請Object物件,並將所申請的物件放入一個 Vector 中,如果我們僅僅釋放引用本身,那麼 Vector 仍然引用該物件,所以這個物件對 GC 來說是不可回收的。因此,如果物件加入到Vector 後,還必須從 Vector 中刪除,最簡單的方法就是將 Vector 物件設定為 null。
v = null

  1. GC機制簡要說明一下,不同區使用的演算法。

  2. 兩個物件迴圈引用會不會被被GC?

  3. 可達性演算法,和 根節點可達性演算法

  4. 哪些可以算作根節點?

  5. Jvm記憶體結構簡要說一些,棧裡面一般儲存了什麼?

  6. Java記憶體模型簡要描述一下?

  7. 類載入機制簡要描述一下?

  8. 平時有沒有遇到一些棧溢位或者記憶體溢位,記憶體洩露的問題嗎?如果去分析這個問題?
    java記憶體溢位與記憶體洩露
    >記憶體洩漏是指物件例項在新建和使用完畢後,仍然被引用,沒能被垃圾回收釋放,一直積累,直到沒有剩餘記憶體可用。如果記憶體洩露,我們要找出洩露的物件是怎麼被GC ROOT引用起來,然後通過引用鏈來具體分析洩露的原因。分析記憶體洩漏的工具有:Jprofiler,visualvm等。
    記憶體溢位是指當我們新建一個實力物件時,例項物件所需佔用的記憶體空間大於堆的可用空間。
    棧(JVM Stack)存放主要是棧幀( 區域性變量表, 運算元棧 , 動態連結 , 方法出口資訊 )的地方。注意區分棧和棧幀:棧裡包含棧幀。與執行緒棧相關的記憶體異常有兩個:
    a)、StackOverflowError(方法呼叫層次太深,記憶體不夠新建棧幀)
    b)、OutOfMemoryError(執行緒太多,記憶體不夠新建執行緒)
    如果出現了記憶體溢位問題,這往往是程式本生需要的記憶體大於了我們給虛擬機器配置的記憶體,這種情況下,我們可以採用調大-Xmx來解決這種問題

    java記憶體洩漏的定位與分析
    jstat -gc檢視一下GC過程
    拿到dump檔案利用MemoryAnalyzer來分析洩露的地方在哪裡

  9. 如果記憶體猛增,怎麼去排查?
    通過jstack分析問題
    1、利用top名稱檢視哪個java程序佔用了較多的cpu資源;
    2、通過top -Hp pid可以檢視該程序下各個執行緒的cpu使用情況;
    3.通過top -Hp命令定位到cpu佔用率較高的執行緒tid之後,繼續使用jstack pid命令檢視當前java程序的堆疊狀態
    4.然後將剛剛找到的tid轉換成16進位制,在 jstack -pid裡面的堆疊資訊裡面找到對應的執行緒資訊

  10. 簡要描述一下多執行緒,以及執行緒池對應的一些屬性配置?

  11. CAS實現機制?

  12. 垃圾收集器 G1有什麼樣的特性瞭解嗎? CMS呢?

  13. 有哪些常用的排序演算法?

  14. NIO模型描述一下?

  15. 你瞭解SPI機制嗎?
    Java SPI

#資料庫

  1. Innode 儲存引擎的索引結構瞭解一下?
  2. 為何索引用B+樹 ,而不用紅黑樹等其他的樹?
  3. 以B+樹結構層面分析一下為什麼表資料量大了之後訪問速度會變慢?
  4. Innode和 MYISAM儲存引擎區別
  5. Innodb中有哪些索引?分別介紹一下
  6. 如何優化大資料量分頁limit?
  7. 簡要說下資料庫優化
  8. 在工作中有遇見什麼死鎖的情況嗎?你是怎麼分析的?
  9. 怎麼評估什麼時候需要分庫分表?如果每週曾加100萬資料,要在什麼情況下去考慮分庫分表?
  10. Innodb 支援哪些型別的鎖?

#RPC框架 DUBBO

  1. 一般RPC框架都有哪些模組?
  2. dubbo 各個模組?
  3. 如果zookeeper掛掉了,dubbo還能正常執行嗎?
  4. dubbo怎麼實現的網路通訊?
  5. dubbo的監控是怎麼實現的?
  6. dubbo SPI 機制 與 JAVA SPI?
    這裡寫連結內容

#Zookeeper

  1. zookeeper快速選舉描述一下?
  2. zookeeper實現分散式鎖怎麼實現?
  3. zookeeper叢集可以部署2臺嗎?

#Redis

  1. 怎麼用redis實現分散式鎖?
  2. redis是單執行緒還是雙執行緒?為什麼redis的效能高?什麼決定的?
  3. redis的持久化策略?
  4. redis有哪些資料型別?
  5. 你有嘗試的去優化redis嗎?
  6. rdb和aof工作原理?各有什麼優缺點
  7. redis的有哪些主從同步方式?
  8. redis叢集擴容與收縮

#Spring

  1. 請簡要描述一下IOC 和AOP?
  2. Spring是怎麼解決的迴圈依賴?
  3. Spring 中使用的那種方式來實現動態代理的?
  4. Spring中的事務傳播機制?事務巢狀
  5. Spring中同一個類中有方法A 和 B 兩個方法都被標記了@Transtional,在A中呼叫了B,那麼B的事務會生效嗎?為什麼?
  6. 同樣是同類中有A B 2個方法,都是事務,A呼叫B,B丟擲異常,A把它catch住了,那麼A的事務會不會回滾?

#專案中高併發,秒殺之類

  1. 怎麼實現一個秒殺系統?

#解決問題的能力

  1. 工作中有碰到過線上的問題嗎?怎麼解決的?
  2. 請講一個你工作中讓你影響深刻並且最難尋找和解決的bug?
  3. 如果網站訪問過慢,並且每隔一段時間就會特別卡,你會去怎麼排查問題?
  4. 你有過Jvm調優經驗嗎?
  5. 你做了這麼多系統,是怎麼做系統監控的,系統的穩定性?記憶體滿了,磁碟滿了,和cpu高了之類的?
  6. 有碰到過資料庫死鎖的問題嗎?怎麼解決的?
  7. 平時會使用設計模式嗎?請講一個使用的情景(單例,工廠太簡單不讓算…)

#其他

  1. 怎麼辨別身邊的同事是否優秀?
  2. 如果一個專案中設計到多個部門之間的協調,你要怎麼做?
  3. 你有讀過專案管理之類的書嗎?
  4. 作為一個小組leader,你是怎麼安排工作的?
  5. 如果RocketMq的一個磁碟壞了,怎麼辦?

答案慢慢補充