【小家面試】螞蟻金服(2018年)Java一面面試題

_YourBatman發表於2018-07-30

相關閱讀

【小家java】java5新特性(簡述十大新特性) 重要一躍
【小家java】java6新特性(簡述十大新特性) 雞肋升級
【小家java】java7新特性(簡述八大新特性) 不溫不火
【小家java】java8新特性(簡述十大新特性) 飽受讚譽
【小家java】java9新特性(簡述十大新特性) 褒貶不一
【小家java】java10新特性(簡述十大新特性) 小步迭代
【小家java】java11新特性(簡述八大新特性) 首個重磅LTS版本


每篇一句

我們都是農村走出來的孩紙,不能拼爹,只能拼命

廢話不多說,直接把印象中的面試題貼出來:

雖然我自己沒有完全答得很好,但本文給出一些參考性的答案。如果覺得不妥的,可以給我留言討論

1、自我介紹、自己做的專案和技術領域

2、專案中的監控:常見的監控指標有哪些?

QPS、進出口流量、CPU使用率、記憶體使用率、磁碟使用率、谷值和峰值

3、微服務涉及到的技術以及需要注意的問題有哪些?

4、註冊中心你瞭解了哪些?

Eureka、consul、zk。使用過Eureka、consul

5、consul 的可靠性你瞭解嗎?

consul是google開源的一個使用go語言開發的服務發現、配置管理中心服務。內建了服務註冊與發現框 架、分佈一致性協議實現、健康檢查、Key/Value儲存、多資料中心方案,不再需要依賴其他工具(比如ZooKeeper等)
它使用 Raft 演算法來保證一致性, 比複雜的 Paxos 演算法更直接
支援http和dns協議封口
相比同類的服務發現與配置的主流的產品,我個人更看好的功能是DNS API,並且提供簡單的web管理介面。
高可用叢集:首先部署一個3節點的consul server 叢集,用於提供主要服務。其次redis主從服務部署,consul client 並且註冊服務,並提供讀域名和寫域名。最後 APP應用服務的DNS解析指向consul server 節點,通過consul dns解析 獲得後端的redis master和slave的ip地址。當故障發生,redis的主從切換時。consul會自動做DNS和域名的對應關係。

6、consul 的機制你有沒有具體深入過?有沒有和其他的註冊中心對比過?

這個接觸較少

7、專案用 Spring 比較多,有沒有了解 Spring 的原理?AOP 和 IOC 的原理

8、Spring Boot除了自動配置,相比傳統的 Spring 有什麼其他的區別?

遵循"習慣優於配置"原則,使用Spirng Boot只需很少的配置,大部分時候可以使用預設配置;
專案快速搭建,另外還可以無配置整合第三方框架;
可完全不使用xml配置,只使用自動配置和Java Config;
內嵌入Servlet如Tomcat容器,應用可用jar包執行(java -jar);
執行中應用狀態的監控.

9、Spring Cloud 有了解多少?

Spring Cloud 作為最新最火的微服務的翹楚,就是微服務的一個全家桶。眾多產品開箱即用。就是微服務開發的腳手架

10、Spring Bean 的生命週期

11、HashMap 和 hashTable 區別?

參見我的另外一篇博文:HashMap原理

12、Object 的 hashcode 方法重寫了,equals 方法要不要改?

參考我上面貼出的一篇部落格,裡面有說明

13、Hashmap 執行緒不安全的出現場景

參考上一篇博文

14、線上服務 CPU 很高該怎麼做?有哪些措施可以找到問題

使用top命令檢視資源佔用情況
定位問題執行緒,必要時候可以使用jstack 檢視棧
限流

15、JDK 中有哪幾個執行緒池?順帶把執行緒池講了個遍

參考:JDK中執行緒池相關

16、SQL 優化的常見方法有哪些

推薦你到另外一篇博文:sql語句優化的13中方法
我認為“如何寫出統一SQL語句”這一點特別重要,所以我認為common元件很有必要
8個SQL語句常用優化技巧

17、SQL 索引的順序,欄位的順序

18、檢視 SQL 是不是使用了索引?(有什麼工具)

檢視執行計劃EXPLAIN ,可以檢視索引是否被命中

19、TCP 和 UDP 的區別?TCP 資料傳輸過程中怎麼做到可靠的?

TCP
缺點:
[1] 三次握手四次揮手,傳輸更多包,浪費一些頻寬
[2] 為了進行可靠通訊,雙方都要維持線上,通訊過程中伺服器server可能出現非常大的併發連線,浪費了系統資源,甚至會出現當機
[3] 確認重傳也會浪費一些頻寬,且在不好的網路中,會不斷的斷開和連線,降低了傳輸效率
UDP
優點:
[1] 沒有握手,起步快延時小
[2] 不需要維持雙方線上,server不用維護巨量併發連線,節省了系統資源
[3] 沒有重傳機制,在不影響使用的情況下,能更高效的利用網路頻寬


TCP相比UDP為什麼是可靠的
[1] 確認和重傳機制:建立連線時三次握手同步雙方的“序列號 + 確認號 + 視窗大小資訊”,是確認重傳、流控的基礎。傳輸過程中,如果Checksum校驗失敗、丟包或延時,傳送端重傳
[2] 資料排序:TCP有專門的序列號SN欄位,可提供資料re-order
[3] 流量控制:視窗和計時器的使用。TCP視窗中會指明雙方能夠傳送接收的最大資料量
[4] 擁塞控制:這個比較複雜,這裡不做介紹

20、說下你知道的排序演算法吧

氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序。雖然有這麼多,但是你真的都熟悉嗎?建議只回答你最熟悉的幾種

21、查詢一個無序陣列的中位數?

方法一:排序好,取出中間的值,就很好處理了(基數很好取,如果是偶數,那就取出中間的兩個數然後/2即可)排序的時間複雜度最好情況下是O(nlogn),空間複雜度O(1)
方法二:由於我們的目標是找到中位數,不需要把每一個數都排好序,因此還有優化的空間。除了排序以外,我們還可以用快排中的Partition思想。
首先,隨機選取一個數作為分類的標準,比它小的都放在它左邊,比它大的都放在它右邊。
如果這個數的下標剛好是n/2 ,那麼這個數就是中位數;
如果這個數的下標小於n/2,說明中位數在它的右邊;
如果這個數的下標大於n/2,說明中位數在它的左邊
這是一個典型的遞迴過程~(程式碼略,但是效率明顯高於方法一)

22、你有什麼問題想問我的嗎?

總結

螞蟻金服的一面問題總體上還算比較簡單的,但想回答得讓面試官眼前一亮,還是需要些積累的。

知識交流

在這裡插入圖片描述
若群二維碼失效,請加微訊號(或者掃描下方二維碼):fsx641385712。
並且備註:“java入群” 字樣,會手動邀請入群

在這裡插入圖片描述

相關文章