「Java」六面蚂蚁金服,唬住了面试官要了30K;其实Java面试也没那么难


「Java」六面蚂蚁金服,唬住了面试官要了30K;其实Java面试也没那么难

面试前
蚂蚁的面试挺独特 , 每轮面试都没有 HR 约时间 , 一般是晚上 8 点左右面试官来一个电话 , 问是否能面试 , 能的话开始面 , 不能就约一个其它时间 。
全程 6 面 , 前五面技术面 , 电话面试 , 最后一面是 HR 面 , 现场面 。
一面
介绍一下自己
问项目经历 聊\"数据同步\"
接着聊上了 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:
题目是这样的:
启动两个线程 一个输出 1357…99 另一个输出 2468…100 最后 STDOUT 中按序输出 12345…100
我: 我用 Go 实现吧
面试官: 不可以 , 用 Java 的 notify 机制实现
我: (还没意识到问题的严峻) 那我用 Java BlockingQueue
面试官:说不可以 要求用 Java 的 wait + notify 机制来实现
我完全没写过 wait + notify , 只能表示不会(菜鸡本鸡了) 面试官说那行吧你可以用 go 写
最后用 go channel 实现了一版 不过给的网页上不能运行代码 , 也不知道写得对不对 , 然后面试结束 。
这一轮面试官延续了一面的风格 , 问完一题就赶忙下一题了 , 似乎没有表现出对我的回答有兴趣或认可 。 因此这轮面完 , 我又觉得自己挂了…
三面
依然先聊项目
对监控警报的项目很感兴趣 问了挺多细节 最后问了一个问题: 现在要你实现一个语义不弱于 PromQL 的查询语言 你能实现吗?
这里虽然看过一些 Prometheus 的代码 , 但其实对 PromQL 的 lexer 和 parser 部分没有细看 , 还好之前因为数据同步项目里想写声明式 Stream SQL 研究过一点 ANTLR , 用 ANTLR 写语法 + AST 遍历塞查询逻辑给糊弄过去了 。


推荐阅读