螞蟻金服6面,95%Java開發者已收藏的十大開源庫

歡喜程式設計發表於2021-09-18

image

  • 第六部分:其他:併發程式設計+設計模式+資料結構與演算法+網路

image

一面

  • 介紹一下自己

  • 問專案經歷, 聊"資料同步"

  • 接著聊上了 K8S 的專案

  • 有沒有什麼鑽研得比較深得技術?(大佬:kubernetes, golang, prometheus, java)

  • kubernetes 的架構是怎麼樣的?

  • 這個問題很大,拆成 apiserver、controller、kubelet、scheduler 講了一下

  • golang 與 java 的比較

  • 這個問題又很大,當時主要對比了 vm、協程支援、物件導向和泛型的區別、以及自己對各自使用場景的一些理解

  • golang 的 gc 演算法

  • 知道是三色標記,不過細節說不上來

  • 從無限的字元流中, 隨機選出 10 個字元

  • 沒見過也沒想出來,查了一下是蓄水池取樣演算法,經典面試題,沒刷題吃虧了

  • 怎麼擴充套件 kubernetes scheduler, 讓它能 handle 大規模的節點排程

  • 單節點提速:優選階段隨機取部分節點進行優選;水平擴充套件 scheduler 節點,pod 做一致性 hash 來決定由哪個scheduler 排程

  • 你有什麼想問我的?

一面其實有點僵,大佬自己完全沒放開,面試官對大佬的回答沒有什麼反饋和深入,都是"哦好的"然後就過了。所以大佬當時面完覺得自己其實已經掛了(要是對候選人不感興趣,有時候也就問完問題走個過場溜了),後來收到二面電話著實吃驚了一下。

二面

  • 先聊了聊專案

  • 給 Prometheus 做了哪些改動?

  • 自研配置中心, 具體做了哪些內容?

  • 有用過 MySQL 的什麼高階特性嗎?

  • 這裡不太理解,我問什麼算高階特性,面試官就切換到了下一個問題

  • 配置中心的核心資料表是怎麼設計的?

  • 為什麼在業務裡用 Redis, Redis 有什麼優點?

  • 單執行緒:併發安全;高效能;原語與資料結構豐富;採用廣泛,踩坑成本低

  • 對 Redis 裡資料結構的實現熟悉嗎?

  • 說了一個 zset 跳錶

  • 用過 Redis 的哪些資料結構, 分別用在什麼場景?

  • Java 初始化一個執行緒池有哪些引數可以配置, 分別是什麼作用?

  • 自己寫的 Java 應用調優過哪些 JVM 引數, 為什麼這麼調優?(這個問住了,大佬只知道最大堆最小堆,開 G1,開 GC 日誌以及 OOM dumper 這些基本的)

  • 用 Jetty 的時候有沒有配什麼引數, 為什麼這麼配?

  • Jetty QTP 等待佇列配置成無限的話, 你覺得好嗎? 會有什麼問題嗎?

  • 用過 Linux Bash 裡的哪些命令, 分別用它們幹嘛?

  • 一道筆試題: 需要在給的連結中作答, 不能 google, 不能跳出, 不能用 IDE:

題目是這樣的:

啟動兩個執行緒, 一個輸出 1,3,5,7…99, 另一個輸出 2,4,6,8…100 最後 STDOUT 中按序輸出 1,2,3,4,5…100

大佬:用 Go 實現吧 面試官:不可以,用 Java 的 notify 機制實現 大佬::(還沒意識到問題的嚴峻) 那用 Java BlockingQueue 面試官:說不可以, 要求用 Java 的 wait + notify 機制來實現

因為完全沒寫過 wait + notify,只能表示不會, 面試官說那行吧你可以用 go 寫

最後用 go channel 實現了一版, 不過給的網頁上不能執行程式碼,也不知道寫得對不對,然後面試結束。

這一輪面試官延續了一面的風格,問完一題就趕忙下一題了,似乎沒有表現出對我的回答有興趣或認可。因此這輪面完,他覺得自己可能又掛了…

三面

  • 依然先聊專案

  • 對監控警報的專案很感興趣, 問了挺多細節,。最後問了一個問題::現在要你實現一個語義不弱於 PromQL 的查詢語言, 你能實現嗎?(這裡雖然看過一些 Prometheus 的程式碼,但其實對 PromQL 的 lexer 和 parser 部分沒有細看,還好之前因為資料同步專案裡想寫宣告式 Stream SQL 研究過一點 ANTLR,用 ANTLR 寫語法 + AST 遍歷塞查詢邏輯給糊弄過去了。)

  • 覺得做得最深入的專案是什麼(當然是資料同步)

  • 聊資料同步專案

  • 問 Linux 掌握得怎麼樣?(沒有系統學習過,基本上是自己運維踩坑積累的)

  • 問 Golang 掌握得怎麼樣?(用了半年, 看過 effective go)

  • 問演算法掌握得怎麼樣?(到圖為止都可以)

  • 問最短路演算法(只記得 dijkstra 了,描述了程式碼流程)

  • k8s 掌握得怎麼樣?(沒有自己寫過 controller 和 scheduler,但是對概念都很熟悉,看過 xxx 這幾部分的原始碼)

  • k8s 的 exec 是怎麼實現的?(這個問題正中下懷,之前寫了 PingCAP 的小作業正好對這塊特別熟悉)

這輪聊得順暢多了。同時發現螞蟻的面試官似乎挺喜歡讓你自己評價:“你覺得自己 xxx 掌握得怎麼樣?”(只有五位面試官,樣本不夠大,不能作數哦),這類問題其實我慌得要死,怕吹過頭了答不上來,面試掛了事小,丟了面子事大。早知道就預習一下怎麼吹噓了。

四面

  • 介紹一下自己

  • 覺得自己基礎知識掌握怎麼樣

  • 平時一般會用到哪些資料結構?

  • 連結串列和陣列相比, 有什麼優劣?

  • 如何判斷兩個無環單連結串列有沒有交叉點

  • 如何判斷兩個有環單連結串列有沒有交叉點

  • 如何判斷一個單連結串列有沒有環, 並找出入環點

  • TCP 和 UDP 有什麼區別?

  • 描述一下 TCP 四次揮手的過程中

  • TCP 有哪些狀態

  • TCP 的 LISTEN 狀態是什麼

  • TCP 的 CLOSE_WAIT 狀態是什麼

  • 建立一個 socket 連線要經過哪些步驟

  • 常見的 HTTP 狀態碼有哪些

  • 301和302有什麼區別

  • 504和500有什麼區別

  • HTTPS 和 HTTP 有什麼區別

  • 寫一個演算法題: 手寫快排

這一輪全程問的基礎知識,基礎紮實的話就沒問題了,不過大佬感覺有一點像校招的問法。

五面

  • 介紹一下自己

  • 在 k8s 上做過哪些二次開發?

  • 自己用 Helm 構建過 chart 嗎?有哪些?

  • 有沒有考慮過自己封裝一個面向研發的 PaaS 平臺?

  • 配置中心做了什麼?

  • 為什麼不用 zookeeper?

  • 配置中心如何保證一致性?

最後

給大家送一個小福利

螞蟻金服6面,95%Java開發者已收藏的十大開源庫

資料附送高畫質腦圖,高畫質知識點講解教程,以及一些面試真題及答案解析。送給需要的提升技術、準備面試跳槽、自身職業規劃迷茫的朋友們。

**[CodeChina開源專案:【一線大廠Java面試題解析+核心總結學習筆記+最新講解影片】](

)**

螞蟻金服6面,95%Java開發者已收藏的十大開源庫



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990490/viewspace-2792804/,如需轉載,請註明出處,否則將追究法律責任。

相關文章