1、Nacos和Eureka的区别?
相同点:
1)两者支持服务注册和服务拉取
2)两者都支持服务者心跳机制实现健康检测(续约)
不同点:
1)Nacos可以实现服务注册发现,也可以做配置管理;Eureka只能做服务注册发现。
2)Nacos临时实例心跳不正常会被剔除,非临时实例(永久实例)则不会被剔除;而Eureka只能注册临时实例,实例失效会被剔除(Eureka不支持永久实例)
spring.cloud.nacos.discovery.ephemeral=false 创建永久实例
3)Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式;而Eureka只有心跳模式;
4)Nacos支持服务列表变更的消息主动通知模式,服务列表更新更及时,减少服务调用失败的机率;而Eureka采用被动定时服务列表拉取更新;
2、请问SpringBoot核心注解有哪些?
关键点:根据SpringBoot自动装配的思路来答
@SpringBootApplication: SpringBoot启动类入口标记注解
@EnableAutoConfiguration: 开启自动装配
@AutoConfigurationPackage: 自动导入启动器依赖包
@ConditionalOnClass: 让@Configuration在有条件的情况下生效
@ComponentScan: 设置SpringBoot环境扫描包的路径
3、请说说你在项目中遇到的难点?(高频题)
数据库 Redis 和 MySQL的双写问题
分布式事务
分布式事务 :
我在xx项目中遇到一个xx业务,该业务跨两个服务,同时更新两个数据库的表,在运行中发现该业务如果失败了,一边表成功,一边表不成功,这种情况组长说不允许出现这种数据不一致的情况,后来知道了是分布式事务的问题。我去研究了下seata,顺利用seata解决这个问题。
4、Spring Bean的生命周期?(必会)
1)调用Bean的构建函数(创建对象,底层反射创建对象)(控制反转 IOC)
2)给Bean的成员变量赋值(依赖注入 DI)
3)执行一些Aware接口,这些接口是可选的,例如 BeanNameWare BeanFactoryAware ApplicationContxtAware
4)调用InitializingBean接口的afterProertiesSet方法(可选)
5)调用Bean的init方法(前提是声明该方法)(可选)
@PostConstruct注解声明init方法
6)调用Bean的destroy方法(前提是声明该方法)(可选)(通常不会执行,IOC容器主动销毁 applicationContext.close())
@PreDestroy注解声明destroy方法
5、项目中用到哪些设计模式?(必会)
- 单例模式:DataSource单例
- 工厂模式:SqlSessionFactory创建SqlSession SqlSessionFactory.openSession(),spring的BeanFactory创建bean
- 模板方法模式:RabbitTemplate RedisTemplate RedisTemplate
- 代理模式:Spring的AOP做日志(JDK动态接口代理或Cglib类代理)
- 建造者模式:SqlSessionFactoryBuilder QueryBuilder(ES引擎)
