1、spring的原理
Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架
1.IOC(Inversion of Control)控制反转:
简单地说,由spring来负责控制对象的生命周期和对象间的关系。传统的Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IOC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;就是把new对象实例化的工作交给spring容器来完成,spring帮我们负责销毁对象,控制对象的生命周期,在需要使用对象的时候直接向spring申请即可。控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
2.DI(Dependency Injection)依赖注入:
组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件之中。在系统运行中,动态的向某个对象提供它所需要的其他对象。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。.
注入方式:set方式注入、构造器注入、工厂方法注入,注解方式注入
①属性注入:目标对象中需要提供相关的set方法,需要调用set方法将资源传递给目标对象使用。
②构造器注入:目标对象中提供带参数的构造方法,通过构造方法将资源传递给目标对象使用。
③工厂注入:调用实例工厂的方法来获取自己需要的对象。(使用很少)
注:在 Spring 中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。
IOC/DI 底层是通过反射实现的,可以通过某个类的权限定名用 Class.forName(类的权限定名)获取这个类的类对象,再通过这个类的类对象通过Clazz.getInstance()方法类创建一个bean实例。
3.AOP(Aspect-OrientedProgramming)面向切面:
纵向重复的代码横向抽取,使用过滤器 Filter,在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。
注意:AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类 采用CGLIB 方式实现动态代理
2、java的集合
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
Set下有HashSet,LinkedHashSet,TreeSet
List下有ArrayList,Vector,LinkedList
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
3、hashmap的默认长度为什么是16
如果两个元素不相同,但是hash函数的值相同,这两个元素就会产生哈希冲突,要尽量避免哈希冲突,需要实现一个尽量均匀分布的hash函数,在HashMap中通过利用key的hashcode值和默认长度减一来进行位运算
公式:index = e.hash & (newCap - 1)
举个例子:
1.计算"book"的hashcode
十进制 : 3029737
二进制 : 101110001110101110 1001
2.HashMap长度是默认的16,length - 1的结果
十进制 : 15
二进制 : 1111
3.把以上两个结果做与运算
101110001110101110 1001 & 1111 = 1001
1001的十进制 : 9,所以 index=9
hash算法最终得到的index结果,取决于hashcode值的最后几位,当index取其他的值时index相同的概率会更大,反观长度16或者其他2的幂,length - 1的值是所有二进制位全为1,这种情况下,index的结果等同于hashcode后几位的值,只要输入的hashcode本身分布均匀,hash算法的结果就是均匀的。所以,HashMap的默认长度为16,是为了降低hash碰撞的几率
4、hashmap出现线程问题会导致什么
HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。
5、springboot的自动配置原理✔️
6、springboot如果不想用他的容器了可以怎么处理
7、sql优化常见✔️
8、用程序打印出所有的 “水仙花数 ”,所谓 “水仙花数 ”是指一个三位数,其各位数字立方和等于该数本身。

9、用程序打印杨辉三角前十行


网友评论