面试前
蚂蚁的面试挺独特,每轮面试都没有 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:
题目是这样的:启动两个线程, 一个输入 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?配置核心如何保障一致性?Spring 里用了单例 Bean, 怎么保障拜访 Bean 字段时的并发平安?用并发平安的数据结构,比方 ConcurrentHashMap;或者加互斥锁
- 如果我还想隔离两个线程的数据, 怎么办?
ThreadLocal,而后举了个例子
- Golang 里的逃逸剖析是什么?怎么防止内存逃逸?
这个不晓得,认怂了
- 比照一下 Golang 和 Java 的 GC
答了一下 CMS、G1和三色标记,我比照的点是 JVM 有分代回收,Go 的 Runtime 没有,没能深刻地讲
- Golang 的 GC 触发机会是什么
阈值触发;被动触发;两分钟定时触发;
- 有没有写过 k8s 的 Operator 或 Controller?(我:没有写过)
- 谈一谈你对微服务架构的了解大体思路”微服务实质是人员组织架构演进与关注点拆散”
- 谈一谈你对 Serveless 的了解
大体思路”Serveless 是继 docker 与容器编排之后的又一次利用开发与基础设施提供方之间的边界划分”
- 你认为 Serveless 是将来吗? 为什么?
大体思路”是云服务的将来,把蛋糕从企业的IT、运维与中间件部门切走,造成规模效应,做得越多赚得越多;公司内的话 servless 可能帮忙减速前台业务迭代,但对中后盾的收益还看不到,将来可能会有比 servless 更适宜中后盾的架构”
面试官:最初你有什么要问我的?我:为什么足足安顿了五轮技术面,而且其中有两轮仿佛和 k8s 没有关系啊?面试官:咱们感觉你做过的货色挺多的,各个方向都想让你尝试一下 (我的心田:……) 我:那这轮是最初一轮技术面吗?面试官:不肯定(我的心田:……)
五面最初的三个吹水问题我还挺感兴趣,惋惜面试官只是听我讲,没有跟我探讨。还有就是问了面试官才晓得,二面四面的面试官是 PaaS 平台那边的,因而次要问 Java 没有波及到 k8s 和 go。
六面
HR 面,之前就据说过阿里系的 HR 是来”闻滋味的”(看你是否适宜阿里的格调),而且有一票否决权。所以还是挺有压力的。
问经验为什么要思考进去看看呢?金句:”当初本人的技术成长有点碰到瓶颈,加上始终对您公司钦慕有加“”
当初公司的主营业务是什么?(这块往技术上问了很多,感觉是想考查我解释简单问题的能力) 当初带人吗?report 层级是怎么的?对本人这几年的经验称心吗?感觉本人有什么毛病?碰到过什么很挫败的事件吗?将来的职业规划是怎么的?看机会的时候,次要思考的是待遇、平台、人员还是什么其余因素?当初的待遇如何 有什么想问我的
整体聊了 40 多分钟,话题挺广的,面试官也说了系统部这边压力挺大的,优良的人才能力留下来。集体感觉 HR 面里除了谈薪酬的局部没有什么可筹备的,想说什么直说就行。因为到了 HR 面至多证实你的技术没什么问题,直说进去不便 HR 判断两边的价值观是否合拍,如果真的不合拍,那其实在 HR 这一面挂了比起进去之后再悔恨又跳槽要好很多,毕竟大家都不喜爱频繁跳槽的简历。