携程线下一面
投的java岗,投的时候看到岗位要求里是精通至少一门编程语言(Java/Golang),就带着我的golang版本的简历去面了。结果一上来就被让解释为什么拿着go简历投java,解释了一通后感觉对面好像不是很满意。
📍面试公司:携程
🕐面试时间:50min
💻面试岗位:java后端开发
❓面试问题:
1. 那你用一两点总结一下,你觉得 Go 和 Java 最大的区别在哪里?
2. 那 RocketMQ 是怎么保证消息可靠性的?
3. 好的,那在使用 RocketMQ 重试功能时,需要注意些什么呢?
4. 那在失败场景下,如果出现大量重试,首先要考虑失败原因,比如是不是下游服务扛不住了,这也是一种可能的失败场景。如果这种情况下还一直在批量重试,可能会导致下游服务的压力进一步升级,那基于这方面考虑,我们有哪些手段可以预防或避免这种情况呢?
5. 你可以站在两个角度思考:一是作为下游 A 服务的提供者,二是作为调用 A 服务的消费方。假设这两个系统都是你负责的。那你要怎么保证整个系统的稳定性?分别对应的应该做哪些调整?
6. 这个暂停是出于什么考虑呢?那在什么情况下会选择暂停呢?这种情况下,按你说的,流量大的时候反而要暂停调用下游服务,这不是和实际业务需求不符吗?
7. 那暂停要停多久呢?什么时候恢复呢?
8. 那我再问一个问题,你多次提到 “根据监控来做决策”,但如果有很多业务场景、很多系统,都需要投入大量精力做监控,还要求看监控的人具备调控系统的能力,这显然不现实,怎么解决这个问题呢?
9. 自动告警机制确实是个好方法。那告警之后呢?系统后续该怎么运行,才能形成一个闭环,确保业务能继续推进?
10. 那什么时候需要人工去恢复系统正常运行呢?
11. 对,那你这个很很明显的一个问题就是人工嘛,这个我刚才也说了,要求人工有这个能力。它不仅仅是一个系统,它可能很多个系统。如果你采用这个架构去设计的话,你会有很多很多这种东西要去看。比如我们做卖票业务,假设有很多代理人,还有很多航司网站,国内有几十家航司,国外也有不少。那每一个航司它可能都是有一个类似的一个产品设计,对不对?那要是某天东航扛不住了,就要处理东航的问题;明天国航、南航等多家航司同时出问题,就需要很多人去处理。假设都用同一种方案,成百上千个系统都这样设计,人工根本忙不过来,这现实吗?就是一个我能做,10 个还勉强能行。当成百上千的时候,这个人还能玩得过来吗?我就把问题抛得这么严重,我们现在系统就是一个典型的生态,就会有这种问题。那我们该怎么去思考这个问题?
12. 那再问一个关于 RocketMQ 的问题,你之前提到了顺序消费,那 MQ 的消息有序性会在哪些阶段出现问题?什么情况下会导致消息无序?
13. 那再假设一个场景:生产者生成消息 ID 后,发送消息时突然挂掉了,因为之前提到用事务提交,这种情况下消息可能发送失败,导致消息断档。那消费方那边,他在消费的时候,他一直在等上一条消息。那消费者其实不用一直等,也可以处理后面的消息,但这样就会破坏有序性。那消费者怎么知道有一条消息中断了呢?比如消息 ID 从 1 到 10,发送 ID 为 2 的消息时失败了,消费者消费完 ID 为 1 的消息后,按逻辑该等 ID 为 2 的消息,但 ID 为 2 的消息永远不会来了。
14. 那不等的话直接消费到第四条消息怎么办,因为2后面还有34,如果不等2的话先消费4怎么办
15. redis使用经验讲讲
16. redis持久化机制有哪些
17. 缓存穿透、击穿、雪崩
18. 缓存击穿时,分布式锁是在什么时候加载的
19. 用分布式锁的话会让大量用户请求等待,有没有更好的解决方案
20. 多级缓存为什么能解决这个问题
21. MySQL事务隔离级别
22. mvcc怎么实现可重复读
23. MySQL的exist和in的区别
24. 为什么不用select * 查询
25. 索引失效的场景有哪些
27. 设计索引参考哪些原则
#发面经攒人品#
📍面试公司:携程
🕐面试时间:50min
💻面试岗位:java后端开发
❓面试问题:
1. 那你用一两点总结一下,你觉得 Go 和 Java 最大的区别在哪里?
2. 那 RocketMQ 是怎么保证消息可靠性的?
3. 好的,那在使用 RocketMQ 重试功能时,需要注意些什么呢?
4. 那在失败场景下,如果出现大量重试,首先要考虑失败原因,比如是不是下游服务扛不住了,这也是一种可能的失败场景。如果这种情况下还一直在批量重试,可能会导致下游服务的压力进一步升级,那基于这方面考虑,我们有哪些手段可以预防或避免这种情况呢?
5. 你可以站在两个角度思考:一是作为下游 A 服务的提供者,二是作为调用 A 服务的消费方。假设这两个系统都是你负责的。那你要怎么保证整个系统的稳定性?分别对应的应该做哪些调整?
6. 这个暂停是出于什么考虑呢?那在什么情况下会选择暂停呢?这种情况下,按你说的,流量大的时候反而要暂停调用下游服务,这不是和实际业务需求不符吗?
7. 那暂停要停多久呢?什么时候恢复呢?
8. 那我再问一个问题,你多次提到 “根据监控来做决策”,但如果有很多业务场景、很多系统,都需要投入大量精力做监控,还要求看监控的人具备调控系统的能力,这显然不现实,怎么解决这个问题呢?
9. 自动告警机制确实是个好方法。那告警之后呢?系统后续该怎么运行,才能形成一个闭环,确保业务能继续推进?
10. 那什么时候需要人工去恢复系统正常运行呢?
11. 对,那你这个很很明显的一个问题就是人工嘛,这个我刚才也说了,要求人工有这个能力。它不仅仅是一个系统,它可能很多个系统。如果你采用这个架构去设计的话,你会有很多很多这种东西要去看。比如我们做卖票业务,假设有很多代理人,还有很多航司网站,国内有几十家航司,国外也有不少。那每一个航司它可能都是有一个类似的一个产品设计,对不对?那要是某天东航扛不住了,就要处理东航的问题;明天国航、南航等多家航司同时出问题,就需要很多人去处理。假设都用同一种方案,成百上千个系统都这样设计,人工根本忙不过来,这现实吗?就是一个我能做,10 个还勉强能行。当成百上千的时候,这个人还能玩得过来吗?我就把问题抛得这么严重,我们现在系统就是一个典型的生态,就会有这种问题。那我们该怎么去思考这个问题?
12. 那再问一个关于 RocketMQ 的问题,你之前提到了顺序消费,那 MQ 的消息有序性会在哪些阶段出现问题?什么情况下会导致消息无序?
13. 那再假设一个场景:生产者生成消息 ID 后,发送消息时突然挂掉了,因为之前提到用事务提交,这种情况下消息可能发送失败,导致消息断档。那消费方那边,他在消费的时候,他一直在等上一条消息。那消费者其实不用一直等,也可以处理后面的消息,但这样就会破坏有序性。那消费者怎么知道有一条消息中断了呢?比如消息 ID 从 1 到 10,发送 ID 为 2 的消息时失败了,消费者消费完 ID 为 1 的消息后,按逻辑该等 ID 为 2 的消息,但 ID 为 2 的消息永远不会来了。
14. 那不等的话直接消费到第四条消息怎么办,因为2后面还有34,如果不等2的话先消费4怎么办
15. redis使用经验讲讲
16. redis持久化机制有哪些
17. 缓存穿透、击穿、雪崩
18. 缓存击穿时,分布式锁是在什么时候加载的
19. 用分布式锁的话会让大量用户请求等待,有没有更好的解决方案
20. 多级缓存为什么能解决这个问题
21. MySQL事务隔离级别
22. mvcc怎么实现可重复读
23. MySQL的exist和in的区别
24. 为什么不用select * 查询
25. 索引失效的场景有哪些
27. 设计索引参考哪些原则
#发面经攒人品#
全部评论
懵了
相关推荐
09-27 09:27
华南理工大学 Java 点赞 评论 收藏
分享