蚂蚁国际Java后端笔试&一面(社招)

0.笔试

形式:线上笔试。

笔试题就一道,是一个多线程编程题:二十个银行账户,每个账户初始余额10000元。有十个线程,每个线程每次随机从二十个账户中选取两个进行转账,转账金额是1-100中的任意一个正整数(比如账户1给账户7转了47元),每个线程转账一百次。转账完毕后,打印每个账户的余额。

思路:创建两个类:账户类Account、转账类TransferThread。Account类实现转账方法(transfer),用静态对象锁确保原子性和避免死锁。还包含id和balance属性,分别表示id和余额。TransferThread类继承Thread类,并实现run方法:for循环中随机生成两个账户(不能相同)进行转账。main方法中初始化Account类和TransferThread类的实例,启动,并使用join方法确保所有线程执行完毕再打印。

1.一面

在笔试完成后的两天进行,在线视频面试,耗时约38分钟。问题如下:

(1)自我介绍

(2)简历上的项目的流程是什么?(介绍项目的用户使用流程和后台大致的业务逻辑)

(3)项目所用的技术栈有哪些(提到了Nacos)?服务注册和服务配置,从CAP理论的角度看,二者有差别吗,更应看重可用性还是一致性?在什么情况下应该追求一致性牺牲可用性,什么情况下反过来?

(4)为什么用RabbitMQ作为消息队列?项目中用到消息队列的场景有哪些?使用手动确认消息的出发点是?

(5)用过事务型消息吗(与分布式事务不同)?介绍一下分布式事务锁的应用场景。

(6)MySQL优化方式有哪些?MySQL有哪些锁?在项目中的优化效率有多高?如果实在避免不了使用like模糊查询,该怎么办?

(7)介绍了一下布隆过滤器。

(8)ElasticSearch,项目中是如何把数据上传到其索引库的,如何更新的?如果MySQL数据库更新了,ES索引库是否会自动更新?介绍一下ES的倒排索引?ES使用时间长了,会产生数据碎片,你知道ES如何解决这个问题吗?对ES的了解程度有多深?只是使用过(还写过一些DSL语句)?

(9)Seata的几种工作模式介绍一下,介绍一下AT模式的回滚。

(10)场景题:多线程环境下,依次打印同一个数字num,要求每次打印严格加一,有哪几种实现的方式?(使用synchronized加对象锁,使用Reentrantlock锁,使用线程池规范线程顺序)

(11)项目中用到了CompletableFuture进行异步编排,介绍一下具体的应用场景,有没有其它的实现方式?(答的消息队列)

(12)了解过AQS、Condition吗?(之前了解过,忘记了)了解Java的Wait/Notify吗?(不了解)

(13)反问:工作地点?业务技术栈(纯Java相关),主业务(境外信贷金融业务)。

感受:应加深Seata的学习,学习面试中未了解的技术,进一步熟悉所做的项目,对简历中项目涉及的技术栈再进一步熟悉。

后续:一面没过。

#Java##蚂蚁集团##蚂蚁##后端##社招#
我的社招经历-Java开发岗 文章被收录于专栏

记录本人的社招经历。

全部评论

相关推荐

评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务