1根据哈希值查哈希表
2.哈希桶的个数必须 是2的N次方,初始默认16个,最大2的31次方
3.如果没有初始化,哈希桶并没有创作出来
4.按位&, hash&(length - 1), 2的n次方-1的二进制都是11111..., 所以进行&操作会拿到数组下标。分布还是均匀的。
5.自动扩容,大于本身的0.75,则扩容。16*0.75=12.把所有迁移到新的哈希表中。
6.java7中死锁 7.java8中的改进
字符串的不可变性
final只能指向该数组,但数组内里可以改变,(很难) 为了安全的使用string,java生命周期中一个数值只有一个对应的hashcode。所以改变必须改变相应hashcode,创建新对象。
Stringbuild不保证线程同步(不安全),Stringbuffer是线程安全(多线程时使用)
字符串编码
unicode从U+0000到U+FFFF
java内部程序编码是UTF-16,都用utf8编码
解码编码 都是用来不同的字符集出现错误。
搜索 size: "不会改变" xxx:xsl(表) xxx.pfd
类型和反射
Java的类和class
rpc 远程功能调用;
一个类就是一个说明书,静态变量就是一个说明书,归属于这个对象。
类加载与ClassLoader
animal - >cat -> whitecat->
说明书是classloader加载出来
文件的本质是字节流。
classloader是级联的 任何一个类加载器加载都会问父亲,父亲返回类加载模型,自己就不会再尝试加载,除非父亲为空。
java语言规范告诉你是不是合法的java语言 虚拟机规范是告诉你如何在java虚拟机上跑