蚂蚁金服-蚂蚁面试前的面试比较有特色,没有HR预约每轮面试,一般晚上8:00左右,面试官会打电话询问是否可以面试。如果是,开始采访。如果没有,请再预约一次。整个过程一共有6次面试,前五次是技术面试,电话面试,最后一次是HR面试和现场面试。老板说技术一定要掌握好。其实面试题也是可以背的。如果他有时间提前看完面试题,或许能更好地回答一些问题,可以作为一个拥抱。一方面介绍一下自己,问一下项目经历,说说“数据同步”再说说K8S项目。有没有深入研究过的技术?(大哥:kubernetes、golang、prometheus、java)kubernetes的架构是怎样的?比较vm,协程支持,面向对象和泛型的区别,以及我自己对它们各自使用场景的理解。golang的GC算法知道是三色标记,但是细节不好说。从无限人物流中,随机抽取10个这个人物我没见过也没考虑过。我查了一下。这是水库采样算法。这是一道经典的面试题。如果你没有任何疑问,如何扩展kubernetesscheduler使其能够处理大规模节点调度?单节点提速:优化阶段随机选择部分节点进行优化;横向扩展scheduler节点,pod做consistenthash决定调度哪个scheduler。你想问我什么?一边倒是有些僵硬,老大自己也丝毫没有松手。面试官给老板的回答没有任何反馈,也没有深度,都是“哦还行”就完了。所以boss觉得自己面试完就直接挂了(如果他对候选人不感兴趣,有时候就直接问个问题,走个过场),然后接到第二个电话的时候真的很意外。第二面,我们先讲项目对Prometheus做了哪些改变?自研的配置中心具体做了什么?您是否使用过MySQL的任何高级功能?这里我不太明白。我问什么才算是高级特性,面试官就切换到下一个问题。配置中心的核心数据表是如何设计的?业务中为什么要用Redis,Redis有什么?优点?单线程:并发安全;高性能;丰富的原语和数据结构;应用广泛,踩坑成本低你熟悉Redis中数据结构的实现吗?前面讲了一个zset跳表用到了Redis的哪些数据结构,分别用在什么场景下?Java初始化线程池可以配置哪些参数,它们的作用是什么?自己写的Java应用调了哪些JVM参数,为什么?使用Jetty时最小堆、开启G1、开启GC日志、OOMdumper(basic),有没有配置什么参数,为什么?如果JettyQTP等待队列配置成无限大,你觉得可以吗?会不会有什么问题?您使用过LinuxBash中的哪些命令,为什么要使用它们?一道笔试题:需要在给的链接里回答,不能google,不能跳出,不能用IDE:题目是这样的:启动两个线程,一个输出1,3,5,7...99,另一个输出2,4,6,8...100最后在STDOUT中依次输出1,2,3,4,5...100老大:用Go实现面试官:不行,用Java的notify机制实现大哥::(还没意识到问题的严重性)然后用JavaBlockingQueue面试官:不行,需要用Java的wait+notify机制,因为我没写过wait+通知。只能说不行,面试官说可以,你可以用go写,最后用gochannel实现一个版本,但是代码不能在给定的网页上运行,不知道写对了没有,然后采访结束。这一轮面试官延续了一面之词的风格。问完一个问题后,他们又赶到下一个问题。他们似乎对我的回答没有任何兴趣或赞同。所以这一轮面试过后,他觉得自己可能又要挂了……三方还是先谈项目。他对监控告警这个项目很感兴趣,问了很多细节。最后问了一个问题:现在我要你实现一种语义不弱于PromQL的查询语言,你能实现吗?(虽然在这里看到了一些Prometheus的代码,但实际上并没有仔细看PromQL的词法分析器和解析器部分。嗯,因为在数据同步项目中想写声明式的StreamSQL,稍微研究了一下ANTLR,以及被用ANTLR写语法+AST遍历塞查询逻辑搞糊涂了。)你觉得最深入的项目是什么(当然是数据同步)?数据同步项目问Linux进展如何?(我没研究过系统,基本都是通过自己运维积累的。)Golang是怎么掌握的?(用了半年,看了有效go)你是怎么掌握算法的?(到图还好)问最短路径算法(我只记得dijkstra,描述过代码流程)k8s怎么掌握的?(我自己没写过controller和scheduler,但是概念比较熟悉,看过xxx部分k8s的源码)k8s中exec是怎么实现的?(这道题正是我要的,之前在PinGCAP上写过一个小作业,非常熟悉)这一轮聊的顺畅多了。同时发现蚂蚁的面试官好像很喜欢让你评价一下自己:“Howdoyouthinkyouhavemasteredxxx?”(面试官只有五个人,样本不够大,算不上),这种问题其实把我吓死了,我怕吹多了就答不上来.面试失败没什么大不了的,丢脸才是大事。如果我早知道,我会预览如何吹牛。从各个方面介绍自己。你觉得你的基础知识怎么样?你通常使用什么数据结构?链表与数组相比有哪些优缺点?如何判断两个非循环单链表是否有交集循环入口点?描述TCP4第一波期间TCP的状态是什么?TCPLISTEN的状态是什么?TCPCLOSE_WAIT是什么状态?建立套接字连接的步骤是什么?常见的HTTP状态码有哪些?HTTP有什么区别?写一道算法题:手写快速排序。整轮题的基础知识。基础扎实的话是没有问题的,但是老大感觉有点像校招的提问方式。五面介绍一下你在k8s上做了哪些二次开发?你用过Helm构建过图表吗?什么?有没有想过自己封装一个研发型的PaaS平台?配置中心是做什么的?为什么不使用动物园管理员?配置中心如何保证一致性?Spring中使用了SingletonBean,访问Bean字段时如何保证并发安全?使用并发安全的数据结构,比如ConcurrentHashMap;或者如果我想隔离两个线程的数据,加一个互斥锁,怎么办?ThreadLocal,然后举个例子。Golang中的逃逸分析是什么?如何避免内存溢出?这个我就不知道了,我们对比一下Golang和Java的GC,关于CMS、G1和三色标记的回答。我比较的重点是JVM有分代回收,而Go的Runtime没有。Golang的GC触发我不能深入讲。什么是定时阈值触发;主动触发;两分钟定时触发;你写过k8sOperator或Controller吗?(老大:没写过)说说你对微服务架构的大概理解。“微服务的本质是人员组织结构和关注点分离的演进。”谈谈你对Serveless的总体理解。容器编排后应用开发与基础设施提供商的又一次分界《你认为Serveless是未来吗?为什么?大体思路》是云服务的未来,从企业的IT、运维、中间件部门手中抢蛋糕切去形成规模效应,做的越多,赚的越多;servless可以帮助加速公司前端业务迭代,但是中后台的收益还没有显现出来。未来可能会有比servless更适合中后台的架构”面试官:最后,有什么想问我的吗?老板:为什么安排了五轮技术方面,其中两轮好像和k8s没有关系?面试官:我们觉得你做了很多事情,我希望你在各个方向都去尝试。我:这是最后一轮技术吗?面试官:不一定。我问面试官一些后面跟业务相关的问题,第五页最后三个吹的问题就不细说了,老板说挺有兴趣的,可惜面试官只是听他说,并没有跟他讨论一下。。另外问了面试官才知道,两边的面试官都是PaaS平台的,所以主要问的Java不涉及k8s和go。流面(HR方)之前听说过阿里部门的HR是来“闻”的(看你适不适合阿里的风格),有否决权。所以压力很大。为什么要考虑体验?金句:“现在我的技术成长遇到了瓶颈,一直很佩服贵公司,松了口气。”“现在公司的主营业务是什么?”(这道题问的技术比较多,感觉要考解释复杂问题的能力)你现在带人了吗?报告级别是多少?您对过去几年的经历满意吗?你觉得你有什么缺点?你遇到过挫折吗?你未来的职业规划是什么??看机会主要考虑的是薪水、平台、人员还是其他因素?现在的薪水如何?你有什么想问我的吗?我们聊了40多分钟,话题挺广的。面试官还说到了系统部。这里压力很大,只有优秀的人才才能留下来。老板觉得HR面试除了薪水那部分,没什么好准备的,想说什么就说什么。因为至少到了HR面试的时候就证明你的技能没问题。方便HR判断双方的价值观是否契合。如果实在不和谐,挂在HR这边其实比进去后后悔跳槽要好得多。毕竟大家不喜欢频繁跳槽的简历。总结完之后问了一些主观评价:面试难度:一般面试体验:不错,我觉得没那么难。(反正我是酸了)题偏:基础知识,开发常识,技术感悟当然除了这些,还有一些漂亮的学习资料很全,包括29个知识点,从基础要进阶!限于篇幅展示了部分内容,需要完整版的可以点此获取文中文档!最后提供的Java架构学习资料包括:架构基础、开源框架、分布式、微服务、高并发、网络等,点击这里等Java架构高级架构搭建基础(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法)Java架构高级开源框架(设计模式+Spring+SpringMVC+MyBatis)Java架构高级分布式架构(限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通信(MQ/kafka))Java架构进阶微服务架构(RPC+SpringBoot+SpringGCloud+Dubbo+K8s)总结只有充分准备好面试之后,才能更有底气战胜面试官。每一方面的知识都是必要的,不可或缺的。需要完整版的朋友可以点这里
