对知识的理解以及实际操作要做到融汇贯通,要能够独自解决问题
1,Arraylist扩容机制:三个构造方法,添加元素的时候,会直接放到列表末尾。调用add方法的时候,会首先调用
ensureCapacityInternal方法, 然后在这个方法内部调用
ensureExplicitCapacity() 方法,当我们add元素的时候,添加到第几个元素,这个时候minCapacity就是第几,这个时候都是小于原有长度的。直到添加第原有长度+1个元素的时候,两者相减大于0,这个时候就要调用grow方法来进行扩容
,直接对旧容量进行扩充一半,是原来的1.5倍,这里是通过位运算来解决的,然后得到新容量以后,再对新容量和最小容量做比较。如果还是小于最小需要容量,就把最小需要容量当作新容量。如果鑫融联大于最大数组容量,就将新容量设置位最大允许容量。然后执行数组元素的拷贝。
arraycopy() 需要目标数组,将原数组拷贝到你自己定义的数组里或者原数组,而且可以选择拷贝的起点和长度以及放入新数组中的位置 copyOf() 是系统自动在内部新建一个数组,并返回该数组
ArrayList 源码中有一个 ensureCapacity 方法,是提供给用户来调用的,可以减少重新分配的次数
2,springboot中注解问题,
XML中注解来配置<bean>对象 <bean id = "beanid" class = "全类名">,或者直接通过注解,类上直接加注解@Configuration,是告诉Spring这是一个配置类,,类中Bean注解的方法都可以被Spring调用,注册@Bean可以给Bean指定一个名字,通常是类名首字母小写的形式,不指定名字的情况下,spring将用方法名作为Bean的名称。然后当我们使用Bean对象的时候,可以通过@Autowired来注入,默认按照类型来进行装配依赖对象,如果对象可能为null的话,可以将required= false,如果我们想使用按照名称来装配,可以结合@Qualfiler
bean注入的时候也可以用@Resource,需要导包,但是Spring支持该注解的注入,默认按照byName自动注入,spring会将resource注解的name属性解析为Bean的名字,,当我们在里面使用name属性的时候会使用byname的自动注入策略,当我们使用type属性的时候会使用bytype自动。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序:
①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。
@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。
@component,@service, @controller,@repository 中@bean,然后使用的时候,直接@Autowired,@qualfier, @resource来使用
@value,直接使用配置文件中的内容,@ConfiguratiuonProperties 这两个是读取配置信息的
@pathvariable是获取请求连接中的参数,@requestParm是获取请求对象中的参数,@requestbody是直接获取请求体
@SpringbootApplication @enableAutoConfiguration 启动spring boot的自动配置,@componentSacn扫描被@component注解的所有bean,@configuration允许导入额外的bean。