个人学习总结
Java 基础
HashMap
谈一谈什么是hashMap,其工作原理是什么?
- hashMap是一个散列表,其中存的是键值对的映射,即Key-value的映射。
- hashMap的实现是不同步的,也就意味着不安全。其中的key-value值也可以为null。其存的序列也是无序的。
- hashMap继承于abstractMap,实现了Map、cloneable接口
- 其实例化参数中有两个重要的因子,初始容量大小和加载因子。加载因子默认为0.75,是基于时间和空间折中的取法。如果加载因子太高,内存耗费减少,查询成本也会增加。
- 有4个构造函数。
- 1.默认的构造方法
- 2.带有容量大小的构造函数
- 3.带有容量大小和加载因子构造函数
- 4.带有子类Map的构造函数
工作原理:
hashMap中包含一个Entry的内部类,内部类包含了key-value的值作为实例变量。每当往hashMap中存一个key-value对,Entry类都会为其实例化一个Entry对象。对象会存放在Entey数组的table中,具体存放位置由其key的hashcode方法计算出来的hash值来决定。
抽象类 vs 接口
- 从设计层面来讲:抽象是类的抽象,是一种模板设计。接口是行为抽象,一种行为的规范。
- 一个类可以实现多个接口,只能实现一个抽象类
- 接口默认是public的,接口中不能有实现方法,但是抽象类中可以有非抽象方法。
string为什么是final类的(不可变的)
- 主要是出于安全和性能两方面考虑
- 由于是不可变的,可以被多个线程共享,是线程安全的
- 为了实现字符串池,只有是不可变的时候,许多不同的字符串变量指向同一个字符串常量,如果这个变量可变,那么指向他的字符串也会随之改变,所有只要不可变的时候才能实现,节约内存空间。
- 单线程大量数据 建议:stringBuilder(线程不安全)
- 多线程大量数据 建议:stringBuffer(线程安全)
==与equals区别
- ==比较的是对象的地址,即判断两个对象是不是同一个(对于基本数据类型,比较的是值,引用数据类型比较的是内存地址)
- equals如果没有被覆盖则等价于==比较 如果覆盖了则按照覆盖方法的equals来比较
##动态代理相关
- 与传统的new一个对象不同,动态代理在运行期间为目标对象生成一个代理对象,将横切逻辑织入到代理对象中。系统使用的是这个织入横切逻辑的代理对象。
mysql4种隔离级别
- 读取未提交内容
- 读取提交内容
- 可重读
- 可串行化
Java虚拟机
- 直接内存
jdk1.4引入的NIO(New Input/Output)类,引入了一种基于通道和
缓冲区的I/O方式,使用Native函数库直接分配堆外内存,然后再通过
Java堆里的DirectByteBuffer对象作为这个内存的引用进行操作。