Java面试题精选(一)
最近面试,把遇到的题目整理一下。
你是怎么定位线上问题的?
在有监控系统的情况下,先看监控报警信息,如果是业务代码层面的报警,那么直接就知道问题所在了,如果是机器资源或中间件报警,那就需要进一步排查,不管怎么样,都可以想想最近是否有发布过系统 如果有,可以先回滚到上一版本,如果没有,则追踪下监控信息和日志,—般通过日志都能有所头绪,结合日志和监控信息,看看是不是有慢查询,是不是数据库压力较大,或者Redis内存不够,或者网络有问题,或者就是本身接口代码写得有问题,这就得具体分析了,如果还是不能排查出来,只能多打些日志,进一步排查了。
你是怎么理解消息队列的作用的?
消息队列有三个作用,解耦、异步、消峰。 当一个应用要调用另外一个应用的接口时,我们可以通过发送消息来进行调用,这样两个应用就不用相互依赖,相互不影响,同时其他应用也可以订阅消息来进行处理,消息发送者不用做调整。 消息发送者发送消息时通常是异步的方式,这样不影响当前主线程执行后续的逻辑,并且通过异步发送消息是提高吞吐量和并发量的,单位时间内主线程能执行更多的请求,同时也能发更多的请求。 如果请求量突然增加,导致发送消息增多,由于消息是存在消息队列里的,所以是能够抗住一定的并发量的,也就是消峰,消息消费者仍然可以按照自己的能力来消费消息,不至于应用挂掉。
公众号:程序员小册子
为什么IDEA不推荐使用@Autowired注解,而推荐@Resource注解
@Autowired是Spring提供的,它是特定loC提供的特定注解,这就导致了应用与框架的强绑定,一旦换用了其他的loC框架,是不能够支持注入的,而@Resource是JSR-250提供的,它是Java标准,我们使用的loC容器应当去兼容它,这样即使更换容器,也可以正常工作。
Spring Aop 和AspectJ之间是什么关系?
首先Aop表示面向切面编程,是一种思想,任何组织都可以开发框架来实现这种思想,而Spring Aop 和AspectJ就是这样的组织。 AspectJ使用特定的编译器实现了Aop,SpringAop则利用动态代理机制实现了Aop,值得注意的是,SpringAop借鉴了AspectJ中所设计的注解,比如@Before 等,虽然注解是同样的注解,但是底层实现是完全不一样的。
转载自:https://juejin.cn/post/7186250777646596154