龙空技术网

【Java电话面试】面试一个4年Java高级开发,看看...

灰灰讲Java 674

前言:

当前兄弟们对“java开发面试视频”大致比较珍视,大家都需要分析一些“java开发面试视频”的相关文章。那么小编也在网络上汇集了一些关于“java开发面试视频””的相关资讯,希望我们能喜欢,我们一起来学习一下吧!

面试4年Java高级开发,看看我都问了哪些微服务问题。

Java电话面试①。你先做一个简单的自我介绍。面试官你好,我叫***毕业于陕西理工大学。现在从事这个开发大概有4年多。最近的一次工作是在陕西****,做的是针对一个大学各大院校的外卖的一个项目。这个主要的模块有这个,还有这个订单模块。

另外还有商家的后台管理提醒,还有这个就是物流,运送这个东西外卖。这个主要用到的技术就是Spring Boot,还有SpringCloudAlibaba。

用到了MyBatis,数据库用的是MySQL,还用的这个Redis和中间键。消息队列用的是RabbitMQ,然后大概就这些。OK,你负责的是哪一块?订单模块还有这个优惠券这个模块,那你优惠券就像我们e了么去下单一样对不对?

然后是店铺的优惠券,还是说你是整个商城的优惠券,这块都是你在负责。因为我们这个用商家其实只有一家,所以说优惠券还是比较简单,有一些具体的菜品或者是用户是一个新的用户,有一个优惠,还有一个是有时商家会搞一些活动,然后你还负责的像订单模块对不对?那么订单模块,你是怎么去保证他们不会重复下单的?

重复下单是用到这个消息队列,消息队列这块就是肯定要保证那个幂等性,因为你这个订单是最后是要存在这个数据库的生成一个订单的时候我们会创建一个唯一的一个组件,因为他是新生成,他是一个插入的操作,如果说就是比方说咱们有网络延迟或者其他的影响,你再进行这个,再次执行这个插入操作,插入不进去,所以说不会出现这个重复消费。

你怎么去保证他插入不进去的?就是数据库不是他有一个萨一主键,唯一主键我这个插入进去之后,他因为已经有了主键了这个数据,所以说你再查就不行了。你们的主键是怎么生成的?主键生成他是根据这个时间戳,然后加上这个用户的手机号,然后进行一个Hash,然后两个加然后进行,那他这两个ID他不会重复,为什么他会有一个重复键?就是你第一次插入一个订单,其实他不会重复,因为你生成的ID是不一样的,对不对?

那你们有做这种订单重复的校验吗?订单重复的校验。就比如说我下了一个订单以后,我还能不能继续下一个订单,或者说我连接两次可不可以?不可以,这个就是,然后你这个订单肯定还有一个在数据库还要存一个,就是一个订单状态的一个一个字段,但是就像我们e了么点,餐我是可以下多个订单的,我现在没支付而已,你说没支付的状态,就是没支付然后就是没有,没有具体就是提交进去。那那他每次生成的就是订单状态是不一样的,现在状态都是都是,不一样这个是可以的,可以的是吧?

然后订单模块,那么你们一天下来大概有多少个订单,一天大概有1,000多单。OK那高峰期的时候,就是他的QPS能达到多少?高峰期每秒可能就是有二三十,因为就是主要就是饭点那一块。然后支付这块你在做吗?支付这块我没有做,那你的订单模块怎么怎么跟支付?去对接的?你的支付发起是在你的订单里面的吗?那你这块是谁负责的?就是订单发起,这块肯定是我这边,要用他那个支付模块那个接口。你们支付模块的接口之间通信是怎么通信的,你怎么去调的?因为我们这个是用的那个微服务吗?

调支付中。假如说他没有给你结果,他就一直在支付中。你们怎么处理?或者说你调它的时候它没有反应,没有反应的话这边我们会有一个有一个时间的延迟记录。如果说一直没有收到,我们会去查一下,再去查什么时候去查呢?

这个大概就是一个设定,用了一个多长时间,就是这个消息延迟,这是一个时间定时时间。过什么方式?你们是通过什么方式?是通过定时任务吗?还是说是通过其他方式,这个是通过那个RabbitMQ,嗯它是一个定时的一个对列,是把支付的订单放到对列里面,对吗?不是,就是那个订单它不是有个订单号吗?我会把这个消息就是给它记录,记录好之后,然后就会去设定一个延迟。如果说它一直没有收到,应该就会去执行。整个流程就是你发起支付吗?你发起支付这个时候它是在,就是如果说它给你结果了你再移除吗?是从队列里面移除吗?是的,如果没有给你结果,那他就是一直在,就是我们这边会去,就是会到它那边去查询吗?你怎么去查的?因为那你们为什么要发到MQ里面去,执行一个延迟处理。假如说你放到RabbitMQ,假如说你很多的订单全部放到里面去,那假如说你前面的没有消费,那后面的我消费不了的,前面没有消费,因为你阻塞了吗?你没有给你结果,那他一直在,就是给每一个,这个不是为了是处理,你说是订单发过去之后它这边支付,然后一直没有收到消息这个问题,就是他发起支付了。

如果收到消息他这边就需要处理,假如说你一直没有收到消息吗?那这个消息就一直在你的RabbitMQ里面、一直不行,那一直没有处理,那是肯定要到支付那边去进行一个查询。那如果你查询还是没有结果,或者是就说你这个订单没有支付,那他这个状态是会变的,我们这边客户端它那边就会响应。OK假如说对吧,就是你没有支付,或者说其他的订单,支付也是支付不了了的。因为你刚刚讲完,你是放在对列里面对不对?对列的话就是必须要前面的写出来,后面的才能出去的。点赞关注评论。

标签: #java开发面试视频