如何优雅的回答自己不会的技术问题?

1.背景

假设你在项目中经常使用Redis中间件,但是没有使用过rabbitmq,也没有系统的学习过,只是有所了解,知道是中间件
这时候面试官提的问题是:

rabbitmq如何避免消息重复和消息丢失?

2.面试回答

2.1.普通面试者回答

之前没用过rabbitmq,只是知道是中间件等;

2.2.成功面试者回答

实际开发中我没有使用过rabbitmq,我们在项目中使用的是Redis,
对于消息的重复和消息的丢失问题,在实际业务中处理思路个人觉得应该是一样的;


以我个人的实际开发经验来说,中间件最核心的功能是用来做数据交互(传递),不应该参与更多的业务;


比如你刚才提出的避免消息的重复和丢失,我们应在业务逻辑中来控制这个重复和丢失的问题,而不是仅仅依赖中间件;


解决消息重复问题:在消费者这端,如果我们获取到一条需要处理的消息,不是立即处理,而是先检查这条数据是否满足处理条件,如果不满足就丢弃;


解决消息丢失问题:在生产者这端,我们应该每隔几秒钟(具体多久根据业务而定),就去检查数据库有没有等待处理的数据,如果有就放入消息中(中间件);

项目举例:(用我们面试准备的虚拟充值项目,这个项目就是用来充话费或爱奇艺会员,百度网盘会员等)

以手机充值为例,用户下完单后,我们先将订单写入数据库,并标记订单等待充值,然后把订单号放入消息队列中;
正常情况:消费者获取到消息后,根据订单号到数据库查询订单是否是等待充值的状态,如果是就修改订单状态为充值中,然后在调用上游充值接口充值,最后修改订单状态为充值成功;
假设消息丢失的情况:(中间件宕机,获取到消息后系统异常了等),有一个定时任务,每隔5秒钟检查一次数据库,看数据库中是否有等待充值的订单,如果有就再次放入中间件中;
假设消息重复的情况:(订单量大,消息中订单一直没有被消费,会再次放入消息中),消费者获取到消息后,根据订单号查询订单状态,如果不是等待处理,就丢弃消息就可以了;

按照这个业务逻辑处理,不论是Redis还是rabbitmq或者其他中间件,理论上应该都能解决消息重复和丢失的问题

至于rabbitmq本身是否具有避免消息丢失或者重复的功能我不是很清楚,回去后我在去学习学习;

个人的感觉如果不依赖业务逻辑,完全依赖rabbitmq解决丢失或重复问题估计有点困难;
这时可以反问一下面试官你们在项目中是如何避免消息重复和丢失的?

3.总结&评论

在Java面试中,面对自己不熟悉的问题是很常见的情况。处理这种情况的关键是保持冷静、诚实,并展现出你解决问题的能力和学习意愿。以下是一些建议,可以帮助你更好地应对这种情况:

1.诚实地表达不熟悉:
直接告诉面试官你对这个问题不熟悉或没有经验。
例如:“我对这个问题不是特别熟悉,但我很乐意尝试根据我的理解来回答,或者我们可以讨论一下我熟悉的相关领域。”

2.展示你的思考过程,找到替代方案并举例:
即使你不熟悉具体答案,也可以展示你的逻辑思维和问题解决能力。
尝试从基本概念出发,分析问题的关键点,并提出可能的解决方案或思路。

3.表现出学习意愿:
告诉面试官你愿意学习新知识和技能。
例如:“虽然我现在对这个问题的具体细节不熟悉,但我非常愿意在入职后快速学习并掌握它。”

4.将问题关联到你熟悉的领域:
尝试将不熟悉的问题与你熟悉的Java概念或技术联系起来。
例如:“虽然我没有直接处理过rabbitmq消息重复和丢失的问题,但我处理过Redis避免消息重复和丢失的问题,也许我们可以从那个角度来探讨这个问题。”

5.提问以获取更多信息:
如果你对问题的一部分不清楚,可以提问以获取更多信息。
例如:“为了更好地回答这个问题,我想先了解一下您提到的这个技术或概念的具体应用场景是什么?比如刚才提到的案例都是解决消息重复和丢失的问题,只是使用的中间工具不同而已”

6.保持积极态度:
即使面对不熟悉的问题,也要保持自信和积极的态度。
展现出你对挑战的兴奋和对成长的渴望

最后,大家在遇到不熟悉的问题时是如何回答的呢,欢迎评论区留言!

完美

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值