Hash Map
原理
散列 (hash)
把 key 转化为数字哈希,再把数据存入数组,实现 O(1) 查询
冲突
构造理想的 Hash 函数
提供冲突解决方案
开放寻址法
线性查探
Linear Probing
查询下一个位置是否为空,为空直接插入。
查询 key 如果被占用就查询下一个。
哈希表比较慢会影响性能,多次查询
二次查探
Quadratic Probing
由线性查探 i 步长,改为 i^2 步长
双三列
Double Hash
两个或以上的 Hash 函数
链表法
利用链表去解决重复 hash 的问题
链表长,转为红黑树
红黑树节点少,转为链表...
阳光十六阴天八,多云十一日暮四,乌云压顶五点六,雪天落雨同日暮。
天气
光圈
ISO
快门
晴天
F16
125
1/125
F16
500
1/500
F11
250
1/1000
阴天
F8
多云
F11
日暮 / 雪天 / 雨天
F4
乌云
F5.6
完整光圈值 F1, F1.4, F2, F2.8, F4, F5.6, F8, F11, F16, F22, F32, F44, F64
界定光线阳光灿烂 (F16) = 影子黑,...
原链接:
https://blog.csdn.net/lywstuding/article/details/121117136
[toc]
1. C 语言,C++ 的诞生
这一段和 Java 毫无关系,感觉是作者拿来凑字数的,可以跳过。
Java 的诞生离不开 C 语言和 C++,C++ 是在 C 语言的基础上改造的,后来 Sun 公司又对 C++ 进行改写,产生了 Java。也可以说 Java 源自于 C 和 C++。
1956 年 FORTRAM 的诞生1956 年,美国计算机科学家约翰・巴克斯带领团队开发出了世界上第一个高级编程语言 FORTRAN。
FORTRAN 语言是世界上...
Java一门编程语言,这个没啥好说的。
JVMJava Virtual Machine 虚拟机
例如:
Sun Classic VM
JDK 1.0 提供的虚拟机
Exact VM
JDK 1.2 引入,被 HotSpot 替代
HotSpot VM
JDK 1.2 引入
JDK 1.3 之后默认的虚拟机
OpenSDK 的默认虚拟机
JRockit
BEA 公司,被 Oracle 收购
起特性被引入到 OpenSDK 所使用的 HotSpot
可以说现在 OpenSDK 使用的 jvm 其实是两者的合体
J9
IBM 家的虚拟机
JRE
Java Runti...
JVM 内存模型
虚拟机栈
每个线程都有私有的栈
栈帧
每个方法会创建一个栈帧
包含
局部变量表
操作数栈
方法出口
…
StackOverflowError
本地方法栈
虚拟机的 Native 方法所用的栈
PC 寄存器
线程的程序计数器
堆
堆内存
所有线程共享部分
包含所有对象和数组(所有指针型变量?)
GC 的对象
方法区
物理位置也属于堆
包含
存储类的信息
常量池
方法数据
方法代码
PermGen 永久代
jdk 1.7 HotSpot 特有,jdk 1.8 移除
方法区的具体实现
jdk 7 中,存储在永久代的部分数据就已经转移到了J...
Serial GC
单线程收集器
需要暂停其他工作线
Client 模式
Serial Old GC
Serial 老年代版本,Client 版本
其他功能
搭配Parallel Scavenge收集器使用。
做为 CMS 收集器的后备方案,当 CMS 出现 Concurrent Mode Failure 时使用。
做为 G1 的 fullGC 收集器。这也是我们在使用 G1 的时候需要注意的,G1 应该尽量杜绝FullGC。否则就会退化为串行 GC。
ParNew GC
Serial 收集器的多线程版本,其他参数方式都一样
XX:parallelGCThr...
前几天看文章,看到了一篇文章给了一份 jvm7 的启动调优参数。可以学习下 JVM7 的一些特性。
1java -server -Xms2G -Xmx2G -XX:MaxPermSize=256M -Xss256K -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/gc.log -XX:+PrintTenuringDi...
乐观锁
并发控制概念
OCC
适合写入少,回滚成本低于锁的场景
本质没有锁,靠自身校验来实现”锁的效果“
事务写入数据后,提供时间戳或者类似的凭证
通过凭证检查数据是否被修改
被修改,回滚事务
无修改,提交事务
不足
读取独占的资源可能造成死锁
悲观锁
并发控制概念
PCC
适合写入多,回滚成本高于锁的场景
先竞争获取锁,获得锁只能才能写入数据,写完数据释放锁
不足
容易造成死锁
加锁会有效率消耗
自旋锁
技术方案
现成执行忙循环
占用时间长会导致资源消耗
CAS
默认 10 次
-XX:PreBlockSpin 修改
可重入锁
递归...
Maven 常见的配置文件由以下几部分:
proxy
mirror
repository
server
profiles
其中 proxy 就是代理服务,这一点暂时不管。
idrepository 和 mirror 和 server 都拥有一个字段是 id。这里的 id 就单纯的用来标识一个 server 的唯一的标识字段。
我一开始以为类似 central, thirdparty 是固定的字段,后面理解开来,应该只是属于常用的 id,并没有固定的含义。
profilesprofiles 可以认为是配置,其 id 是标识配置的唯一 id (和 server 无关)。
可以认为为了方便...
[toc]
命令行
ls / ls2
delete
set
get
stat
节点持久类型1234567PERSISTENT // 持久节点,一旦创建成功不会被删除,除非客户端主动发起删除请求PERSISTENT_SEQUENTIAL // 持久顺序节点,会在用户路径后面拼接一个不会重复的自增数字后缀,其他同上EPHEMERAL // 临时节点,当创建该节点的客户端链接断开后自动被删除EPHEMERAL_SEQUENTIAL // 临时顺序节点,基本同上,也是增加一个数字后缀CONTAINER // 容器节点,一旦子节点被删除完就会被服务端删除PERSISTE...