1.循环依赖解决
(1)重新设计
如果您有循环依赖关系,则可能是您遇到了设计问题而且责任分离不清。您应该尝试正确地重新设计组件,以便它们的层次结构设计得很好,并且不需要循环依赖。
如果您无法重新设计组件(可能有许多可能的原因:遗留代码,已经过测试且无法修改的代码,没有足够的时间或资源来完成重新设计……),有一些可行的解决方法。
(2)使用@Lazy
打破循环的一个简单方法是让Spring懒洋洋地初始化其中一个bean。那就是:它不是完全初始化bean,而是创建一个代理将它注入另一个bean。注入的bean只有在第一次需要时才会完全创建。
2.Spring IOC & AOP
IoC IoC(Inverse of Control:控制反转)是⼀种设计思想,就是 将原本在程序中⼿动创建对象的控制 权,交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring ⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。
AOP(Aspect-Oriented Programming:⾯向切⾯编程)能够将那些与业务⽆关,却为业务模块所共 同调⽤的逻辑或责任(例如事务处理、⽇志管理、权限控制等)封装起来,便于减少系统的重复 代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接⼝,那么Spring AOP会使 ⽤JDK Proxy,去创建代理对象,⽽对于没有实现接⼝的对象,就⽆法使⽤ JDK Proxy 去进⾏代 理了,这时候Spring AOP会使⽤Cglib ,这时候Spring AOP会使⽤ Cglib ⽣成⼀个被代理对象的⼦类来作为代理。
3.漏桶算法和令牌桶算法
(1)漏桶算法思路很简单,请求先进入到漏桶里,漏桶以固定的速度出水,也就是处理请求,当水加的过快,则会直接溢出,也就是拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。
该算法很好的解决了时间边界处理不够平滑的问题,因为在每次请求进桶前都将执行“漏水”的操作,再无边界问题。
但是对于很多场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。
(2)令牌桶算法
令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
4.Spring AOP 和 AspectJ AOP 有什么区别
Spring AOP 属于运⾏时增强,⽽ AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying), ⽽ AspectJ 基于字节码操作(Bytecode Manipulation)。 Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java ⽣态系统中最完整的 AOP 框 架了。AspectJ 相⽐于 Spring AOP 功能更加强⼤,但是 Spring AOP 相对来说更简单, 如果我们的切⾯⽐少,那么两者性能差异不⼤。但是,当切⾯太多的话,最好选择 AspectJ , 它⽐Spring AOP 快很多。
5.Spring 中的 bean 的作⽤域有哪些
singleton : 唯⼀ bean 实例,Spring 中的 bean 默认都是单例的。 prototype : 每次请求都会创建⼀个新的 bean 实例。 request : 每⼀次HTTP请求都会产⽣⼀个新的bean,该bean仅在当前HTTP request内有 效。 session : 每⼀次HTTP请求都会产⽣⼀个新的 bean,该bean仅在当前 HTTP session 内有 效。 global-session: 全局session作⽤域,仅仅在基于portlet的web应⽤中才有意义,Spring5已 经没有了。Portlet是能够⽣成语义代码(例如:HTML)⽚段的⼩型Java Web插件。它们基于 portlet容器,可以像servlet⼀样处理HTTP请求。但是,与 servlet 不同,每个 portlet 都有不 同的会话
6.SpringBoot核心自动装配
SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。
(1)SpringBoot启动会加载大量的自动配置类
(2)判断SpringBoot默认写好的自动配置类是否满足我们需求的功能
(3)查看自动配置类到底配置了哪些组件(只要包含我们需求的组件,就不需要额外去添加配置属性了)
(4)给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,我们可以自定义这些属性的值.
8.事务
https://zhuanlan.zhihu.com/p/106907228
https://blog.csdn.net/weixin_39625809/article/details/80707695