25暑期-蚂蚁Java二面,练习时长两个半小时,天昏地暗

TimeLine:

2024.04.02一面 25min------面试官态度好,很客气

2024.04.07二面 提前一天打电话约面试,发了邮件没有视频链接,开始面试后鼓捣了半天说你能不能开摄像头?我说你给我打过来显示的是系统的电话打来的,怎么开,鼓捣十分钟后失败,正式开始噩梦 2h20min

等了两周没消息,给校招组发邮件催流程

2024.04.18 HR打电话道歉,问要不要释放流程,我说催下部门。

3分钟后部门Leader打电话来说方不方便面试-------13min结束,态度不好,很轻蔑

2024.04.19 感谢信

二面面经:

* 简历上有两个项目,重点介绍一个复杂的,介绍一下项目业务背景,你的角色,参与了哪些工作,技术方案整体情况,技术选型,自己的思考。整体介绍。

* 技术方案是你设计的吗?还是设计好了只做开发?

* 跟产品经理沟通理解需求,然后去做概要设计这一部分的工作是怎么完成的?在这一阶段主要做了哪些工作?

* 技术方案是怎么设计的?是什么样的过程?

* 有没有产出概要设计文档之类的?从你拿到需求到开始写代码之前有没有产出一些产出物?还是说直接沟通完需求之后就开始写代码?

* 产出的文档只有需求说明文档和数据库设计文档吗?其他的有涉及到吗?

* 想象一下如果项目开发人员有多个,涉及到不同人员之间涉及到输入输出的过程,概要设计,阐述设计的方案,给到多个开发人员。开发人员拿到这个方案去做拆解,然后具体去开发某一个模块。如果是这样涉及到多个人员角色参与同一个项目,想象一下这个概要设计一般会覆盖哪些部分?

* 系统的架构图是什么样的架构图?描述的内容是什么?

* 架构图中前后端设计具体是指什么?

* 模块流程图主要描述的内容是什么?

* 讨论一下,如果你是开发人员,分配到一个系统里的某个具体模块的开发,考虑一下,你希望有一个什么样的技术文档,能够知道你顺利理解整个系统的技术方案是怎样的,以及指导你具体模块怎么开发?你希望里面有什么内容?

* 前面你降到第二部分技术架构那里,你说技术架构图主要用来描述这个模块组件之间协同工作,这一部分应该如何理解?就是用架构图来描述这个模块和组件之间这种协同工作。希望用什么形式表现他们?就是比方说画一张图,这张图用什么方式去提现模块之间的协调工作?

* 系统架构图中模块之间的关系会有什么注意点吗?

* 技术选型会考虑哪些因素?

* 可扩展性一般会怎么考虑?可扩展性怎么来决策你的技术选型?

* 你刚刚说的大概是技术的成熟度。扩展性可以结合你项目的具体需求去讲一讲。

* 看过面向对象设计的书吗?里面有几个原则,你有印象吗?

* 封装继承多态是特征,我说的是原则,类似与单一职责这种,还有一个原则可以跟我们现在讨论的扩展性可以关联上。是什么?

* 开闭原则的话,其实它就是对扩展开放,对修改关闭,然后你在项目里面其实包括你的技术方案学习的时候,其实应该也要遵循这个原则,然后你怎么去体现你的扩展,对吧?嗯,就是你有新的需求,或者是有新的这种一些技术的方案要对接的时候,或者是一些技术的这种,包括外部的一些中间件或者组件要去对接的时候,你不是对原有的系统的这个结构或者是代码进行修改,是吧?嗯,不是进行这个改造,而是你去扩展一个,比方说新的一个这种模块,或者我们叫扩展点出来,然后去做对接,这样相当于是你的系统设计的时候是有一定扩展性的。

* 模块设计你讲到模块组件的划分,那你模块组件的划分的话,你现在根据什么原则来做模块组件的划分?什么样会把它?你把它定义成一个模块或者一个组件。

* 你是按照业务的领域去划分模块是吧?业务功能有不是完全一对一的情况出现吗?

* 你讲的所有模块都是想通的,如何理解?

* 我的问题你可以思考一下,有没有说我们技术的这种系统的模块或者组件和业务的这种功能不是完全一对一的情况,什么时候会出现这种情况?还是说把只是把产品经理那边提的需求,他对这个产品从业务或者产品的这个视角做着这个产品功能的划分,我们一对一映射到我们系统的这个模块或者组件上面就可以。

* 通用的功能之前有遇到什么?

* 非功能性的,是吗?

* 模块之间的交互,在前面的技术架构里也提过,整体设计上应该有什么样的原则去设计他们之间的交互?

* 和外部系统交互的话一般需要注意哪些点?

* 数据库设计这部分,ER图这部分,一般怎么设计?

* 画ER图怎么确定有哪些对象?

* 找对象,确定对象的过程总结一下叫什么?答曰:确定实体

* 实体有点抽象,你能用白话说一下什么叫实体吗?就是或者你在实际的这个工作里面,应该怎么去找这个实体或者叫对象?有没有就是通俗易懂的这种方法?

* 找名词,应该叫。。。。

* 把名词找完以后把这个实体确定下来,然后第二步干什么呢?

* 关系的属性怎么理解?

* 你们之前有领域模型这次层面的设计吗?

* 你的项目里用了Netty处理和IoT设备之间的TCP连接,你们用的TCP协议是吧?介绍一下TCP和HTTP之间的区别?

* TCP的特点?

* Nginx是自己搭的吗?还是用现成的?

* 校园社区的Redis,Kafka、ES这些用过吗?

* 为什么要在项目中用Redis这种非持久化存储?不直接把他写到数据库里面去?答曰:快,用到set等数据结构,实现点赞

* 原子操作,是吧?控制并发是吧?

* 点赞和关注的数据怎么持久化呢?Redis里面的这些非持久化数据怎么最终同步到数据库呢?怎么保证最终一致性?

* 项目里 缓存里面更新到数据库里是怎么做的?

* 同步更新,如果更新失败了呢?答曰:主要看失败原因

* Redis 正常的,往数据库里面去同步去写数据库的时候失败了,怎么办?答曰:主要看失败原因

* 多种情况都有可能,我现在数据库可能 down 掉了,或者是你缓存和数据库之间这个网络不通,那接下来你发现这种情况以后系统层面怎么做?

* 这个时候先不要人肉去做这个事情,因为你不可能每一笔都人肉去做的,你想一想蚂蚁这边这些系统一天多少量级的这个请求并发进来,然后人肉去做不了这个事情,系统层面怎么处理?

* 你说的自动化工具,假如说让你来设计这个自动化工具,你怎么设计?自动化工具的处理逻辑是什么样子?

* 它的备份和恢复具体是指什么?

* 备份指具体备份什么?

* 你是说一条数据,我现在有一个用户的ID,然后对应有一个简单的这个数量,然后这个数据你说 Redis 和数据库各自来备份吗?还是什么意思?

* 我现在 Redis 备份没问题,但是我有可能网络就没通,就没请求到数据库的那个服务器那里去,怎么办?

* 不一定是数据库 down 掉了,我刚才跟你说中间可能是网络不通,你现在不确定是什么情况,你不能直接上来就开始告警重启吧?

* 你也不用先分析,我刚才前面已经跟你提示过了,你像蚂蚁这么多系统,这么多数据库,这么多服务器,这么多的 Redis 服务器,不可能一台一台的人肉去接入去看的。总不过蚂蚁这 2 万多号员工也看不过来。系统层面怎么自动化去解决这个问题?

* 修复是指什么?通过什么方式去修复?

* 谁来发起网络重连呢?

* 自动化工具在哪里呢?部署在一台服务器上还是在哪里?

* 他怎么监控每一台服务器呢?用户点赞写数据库失败了,怎么监控到呢?

* 监控完了以后呢?

* 你说的那个修复脚本怎么理解呢?

* 重连网络,会重连多少次呢?

* 监控服务所在的服务器down掉了,现在怎么办?写数据库失败了,你希望监控服务捕获到这个错误,发起修复,如果监控服务所在的服务器down掉,这时怎么办?

* 监控服务备份是指什么?

* agent捕获到异常后,怎么跟监控服务做交互?确保这些监控服务能收到?

* 监控服务怎么高可用呢?

* 实际在使用Kafka的过程中有没有出现预期意外的情况?答曰:没有实际做

* 以你对Kafka的了解,他是一个什么样的模式?可以实现你的异步站内通知的功能?

* 有没有可能出现订阅不到的情况?思考一下什么情况会出现这个问题?

* 不是在编译时,我指的是在运行时了以后,就是你前期都已经正常调通了,开发完成了,上线了,已经开始运行了,然后发现什么情况下有可能这个消费端订阅不到消息的情况?

* 处理消息太慢或者网络太慢,导致消费者订阅不到的情况,这时Kafka怎么处理?它的工作机制是什么样的?

* 消费慢了以后会出现什么问题?

* 消息堆积以后,kafka的处理方法是什么?

* 消费端有可能是多个,中间的一个处理慢,其他正常,你让生产端不生产的话,会不会影响其他消费者?

* 怎样在尽量不影响业务的前提下,怎么去做一些技术的方案?

* Kafka调整分区数量具体在做什么?为什么他能处理消费慢的问题?

* Kafka里面的分区是按什么来分的?按照什么原则?

* 轮询划分怎么理解?

* 就结合刚才我跟你提的这个问题场景,你觉得它这种分区的这种划分的这种规则的话,有没有更好的一种方式去减少这种问题带来的这种影响?

* 按照分区数量划分,跟前面随机划分有什么区别?

* 有一个场景,网银支付,从你的账户把钱转给你的朋友或者亲戚。就是比方说你转 500 块钱,从你的工商银行账户转给你的朋友,他在他的那个银行账户是招商银行,两家不同银行,它对应的这个机房,然后系统,然后包括数据库肯定是不同的。那其实一笔正常的这一个转账的业务操作,应该是你账户上面的钱扣掉,然后你朋友对方账户的这个钱然后增加,然后这样才算就是两个操作同时完成,这一笔转账的业务操作才算成功。那现在我们设计一个技术方案怎么保证两个操作能同时成功或者同时失败?因为不可能单边的这个成功就认为这个业务这一次转账这个操作就算成功了,可能会出现这种,就会出现账户无缘无故多出来钱或者少了钱,就是整体上面看会出现这种问题。你这边设计一个方案,简单概述一下,就是讲一下你的思路就可以,然后怎么去确保这个业务上面的一次转账业务这个操作能够保证它是成功的,或者它失败也可以。但是你要确保刚才我说的你的账户和你朋友对方账户上面的这个金额没有出现差错。

* 答曰:事务消息队列。两阶段提交。

* 二阶段提交和事务消息队列是两个方案吗?

* 你前面是通过消息队列把消息传过去,对吧?嗯,你传给对方,然后你第二个说公布式事务两阶段提交,这个是指什么?

* 二阶段提交和事务性消息队列的关系是什么?

* 我消息发过去的目的是什么?我发一条什么消息过去呢?

* 转账请求,我发过去以后,对方接收到以后做什么操作?

* 你说的接收到消息以后双方确定是否可以执行,落在系统层面,技术层面要做什么操作呢?你具体要做什么事情?现在刚才你讲的是一个类似于业务逻辑的一段描述。双方确定是否可以提交?那你具体到你变成你代码层面,你现在要写一段代码逻辑,这个技术的逻辑是什么?

* prepare方法里面具体包含什么逻辑呢?要做什么事情?

* 可以具体一点吗?里面做了什么事情,他返回是否可以执行?那根据什么来返回是否执行事务?

* 如何理解你说的获取修改这数据所需要的所有资源,如何理解这句话?

* 其实就一句话就能讲清楚,不用这么复杂。你是检查的对象是谁?怎么检查?检查的对象是谁?检查的方法是什么?我觉得就一句话就能讲清楚。

* 这个账户,账户在技术层面具体是指什么?账户对象是一段代码吗?讲的这个账户对应到技术层面是一个什么东西?一段代码、一个数据。你说的账户的这个对象到底是指什么?

* 你现在你的账户上面有 500 块钱,你朋友对方账户上面有 0 元,现在余额有一个字段叫balance。嗯,然后现在你是500,他是0,然后你现在要怎么检查?

* 怎么检查,技术上怎么做?

* 你是用 SQL 写还是用代码写?就是你可以讲具体的,因为讲的太泛了,我是不理解你的逻辑和思路是什么样的,你是要写代码还是 SQL 来检查?

* 代码怎么写的?逻辑。

* 你这个字段的值是有可能随时发生变化的,你现在怎么检查?你刚可能检查完它就变了。

* 怎么加锁?

* 你是加这个代码的锁,代码的这个分布式锁还是在哪里加这个锁?我是这个意思。

* 你是对于这个代码块加锁,是吧?对代码块加锁,你只对这个代码块加的锁,你下面你怎么防止下面数据没变化呀?

* 那对数据进行加锁,怎么对数据进行加锁?数据层面怎么加锁?之前有没有用过。

* 数据层面不用分布式啊,数据库这个层面怎么加锁,之前没接触过吗?

* 你就说sql怎么写吧?加锁sql语句怎么写?之前没用过是吧。

* 悲观锁和乐观锁了解吗?sql语句怎么写?

* 乐观锁和悲观锁各有什么优缺点?

* 一般什么情况下会出现死锁?

* 其实还是加锁顺序不对,互相等待对方释放时就会形成死锁。

* 回到刚刚的问题,前面那个预处理那里,你用了类似于乐观锁的方式,把那一行数据锁定了,然后接下来怎么做?答曰:检查balance是否符合条件,返回true/false

* 接下去再怎么说?答曰:两个都prepare成功之后就可以进行commit操作了

* commit其中有一个失败了怎么办?业务上第一步检查没问题,就是你的预处理检查没问题。你第二步技术上面如果系统层面又 down 掉了,现在 commit 不掉怎么办?答曰:回滚

* 现在一个 a 一个b,你现在 a commit 成功了, b commit 失败了,然后呢?答曰:a回滚

* 回滚失败了呢?commit可能失败,rollback也可能失败,怎么办?

* 回滚失败, a成功了,就是你的钱扣掉了,你朋友对方账户 b 的钱没增加,钱无缘无故没了。

* 自动修复方案是什么?答曰:和之前问的Redis同步数据库的修复方案一样。

* 时间比较长了,再问一些非技术问题。研究生阶段在学校获过奖吗?或者发表过什么论文和专注吗?

* 课余,技术这一方面,一般会有什么样的一些学习方向,或者会可以会看一些什么样的一些书籍,或者一些学习资料,或者一些网上的一些网站,或者是现在就是互联网信息很也很丰富,就是你除了课余以外,你的一些关注点是在哪里?技术上面。

* 现在的实习主要做哪些相关的工作,在这个方向。

* 反问环节

* 学习意见和建议、部门业务

这个部门是给银行或金融公司做科技赋能的,感觉是高级外包?这么硬核嘛?有没有了解情况的友友。

我好菜啊,毁灭吧,道心破碎了

#我的实习求职记录##工作丧失热情的瞬间##我的失利项目复盘##牛客解忧铺#
全部评论
我看这么多面经还是第一次看到这么天昏地暗的
5 回复
分享
发布于 04-20 23:23 江西
大佬 你这二面是我见过最狠的
3 回复
分享
发布于 04-20 23:38 陕西
滴滴
校招火热招聘中
官网直投
首先,面试过程中,面试官可能会根据你的回答提出一些深入的问题,这是正常的。他们希望通过这种方式来了解你的技术能力和解决问题的能力。 其次,面试过程中,面试官可能会提出一些你没有遇到过的问题,这是正常的。他们希望通过这种方式来了解你的应变能力和学习能力。 最后,面试过程中,面试官可能会提出一些关于你的个人经历和职业规划的问题,这是正常的。他们希望通过这种方式来了解你的职业素养和职业规划。 总的来说,面试是一个双向选择的过程,面试官在评估你的同时,你也在评估他们。如果你觉得面试过程中有什么问题,可以向面试官提出,以便更好地了解公司和职位。
点赞 回复
分享
发布于 04-19 09:10 此内容由AI生成
这二面也太逆天了吧
点赞 回复
分享
发布于 今天 01:12 上海

相关推荐

19 42 评论
分享
牛客网
牛客企业服务