面试官: 毛毛,欢迎来到面试环节。我们今天以一个支付与金融服务的场景做技术深度探讨。首先,简要介绍一下你最近的项目经验吧。
毛毛: 嗯,我最近参与了一个支付平台的开发,用的是Java,Spring Boot和MySQL。我们主要是做线上支付和对账,呃……还有一些别的东西。
面试官: 好的,那你觉得Spring Boot和Spring MVC有什么区别?
毛毛: 啊,这个嘛,Spring Boot就是Spring MVC的升级版吧,功能更强大!
面试官(微笑): 有点意思。那说说你们支付系统中是如何实现分布式事务的?
毛毛: 这个……我们用了分布式锁啊,比如Redis锁啥的。
面试官(点头): 那最后一个问题,支付系统中日志是怎么设计的?你们用的哪种日志框架?
毛毛: 日志?呃,我们……用的是那个Log4j2吧,或者是SLF4J?其实这些框架都差不多。
面试官: 进入第二轮。假设现在有一个场景,用户支付成功后需要通知多个业务系统完成后续处理,比如积分系统、对账系统和风控系统等。你会如何设计这个异步通知架构?
毛毛: 嗯……我们可以用……消息队列,比如Kafka?
面试官: 那消息的幂等性如何保证呢?
毛毛: 哦,这个啊,我们可以加一个主键约束……或者用Redis缓存?
面试官: 再假设,Kafka集群有一个节点宕机了,消息会丢失吗?
毛毛: 不会吧,Kafka很强大,它不会丢消息的!
面试官: 最后一轮。我们假设你的支付系统已经微服务化,并部署在Kubernetes上。你如何实现服务的动态扩容?
毛毛: Kubernetes不是自带扩容功能吗?我觉得直接用它就行了。
面试官: 那你如何监控这些服务的性能?
毛毛: 监控啊,用Prometheus加Grafana,画几个图表就好了。
面试官: 最后一个问题,如果用户反馈支付系统偶尔有延迟,你会怎么排查问题?
毛毛: 这个……可以看日志吧!
面试官: 好的,毛毛,感谢你的回答,回去等通知吧!
Spring Boot和Spring MVC的区别
分布式事务的实现
日志框架的选择
异步通知架构设计
Kafka的幂等性保证
Kafka的可靠性
Kubernetes的动态扩容
性能监控
排查延迟问题