个人学习总结
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对象作为这个内存的引用进行操作。