hashcode是hashmap中确定数据存放在数组上的位置的
equal是hashcode相同时确定是否是相同的key
==是用来比较基本类型的数据是否相等
equals是用来比较引用类型数据是否相等
重写是子类对父类的方法的重写
重载是同一个类中,方法名相同方法参数不同
1.静态代理
2.动态代理
2.1 jdk自带的动态代理
特点:面向接口的,不需要导入三方依赖的动态代理,可以对多个不同的接口进行增强,通过反射读取注解时,只能读取到接口上的注解
原理:面向接口,只能对实现类在实现接口中定义的方法进行增强
创建代理类:入参有类构造器,接口类,反射处理类的实现类
2.2 cglib动态代理
特点:面向父类的动态代理,需要导入第三方依赖
原理:面向父类,底层通过子类继承父类并重写方法的形式实现增强
一个增强类:设置父类,设置拦截类
一个方法拦截类:需要用户实现
一个jdk方法的代理类:方便实现用源对象方法的调用
String内容不能被修改
StringBuffer和StringBuilder的内容可以修改
buffer和builder底层都是数组,value是数组,count是统计数组的使用数量
buffer是线程安全的
final修饰的类不能被继承,Math类就是final修饰的类
1.throws方法的声明处,后面跟异常的类型
2.throw方法内部,后面跟异常的对象
3.try catch捕获异常
封装:封装了类的内部的实现机制,对外部只展示了类的调用方法,便于使用
继承:避免对相同特征进行重复描述
多态:父类指向子类
arrayList底层是数组,有索引,查询时间复杂度O(1),插入和删除的效率低
linkedList底层是链表,查询需要遍历时间复杂度O(N)插入和删除的效率高
1.第一代线程安全集合
Vector,hashTable:synchronized修饰
2.第二代线程非安全集合
hashMap,arrayList
不安全,性能好
可以使用Collection的synchronized方法,实现线程安全,
使用的是代码块锁,锁在方法里面,提升了性能
3.第三代线程安全集合类
concurrent包下的
concurrentHashMap
copyOnWriteArrayList
在保证线程安全的同时,性能也很高
底层采用Lock锁,cas自旋锁
ApplicationContext继承于BeanFactory
BeanFactory不支持国际化
beanfactory在调用getBean方法时才会创建实例,ApplicationContext在启动时就会创建一个单例bean
BeanFactory只实现了IOC和DI的基本功能, ApplicationContext提供高级功能
1.hashTable是线程安全的hashMap不是线程安全的
2.hashTable不允许有空键值,hashMap允许有空值
3.hashTable数组默认的大小是11, 扩容的方式的size *2+ 1,hashMap中默认容量是16,增长方式是2的倍数。
4.hashtable继承Dictionary类,hashMap继承自AbstractMap类
原子性是由undolog,它记录了需要回滚的日志信息,事务回滚时,撤销已经执行成功sql,undolog逻辑日志,根据事务id不同会有不同的undolog
一致性,是由其它三大特性一起保证的
隔离性是由mvcc保证的
持久性是由redolog来保证,mysql修改数据时会在redolog中记录一份日志数据,只要日志记录成功了,数据就不会丢失