Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bump mysql-connector-java from 8.0.15 to 8.0.16 #4

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
547 commits
Select commit Hold shift + click to select a range
a948f58
NIO
zenvzenv Sep 22, 2019
c2b3540
Netty笔记
zenvzenv Sep 22, 2019
d22589d
原子类学习
zenvzenv Sep 23, 2019
1f0e2d1
BiFunction小demo
zenvzenv Sep 25, 2019
c9892cd
Predicate小demo
zenvzenv Sep 25, 2019
c82b5f1
shell函数库,新增获取文件名和获取文件路径的函数,以替代外部函数basename和dirname
zenvzenv Sep 27, 2019
f35a7fa
Predicate函数样例
zenvzenv Sep 28, 2019
cc99153
添加替代wc -l命令的函数lines
zenvzenv Sep 28, 2019
4295d00
Spark脑图-添加Spark事件总线
zenvzenv Sep 29, 2019
b09658f
Spark脑图-Spark运行时环境SparkEnv
zenvzenv Sep 30, 2019
e31ad8c
NIO读写文件相关操作
zenvzenv Oct 3, 2019
c7ab484
Linux学习笔记
zenvzenv Oct 3, 2019
22245a9
想尝试用idea提交spark任务到虚拟机中的yarn中去执行,但是没有成功,以后再做尝试
zenvzenv Oct 4, 2019
f73c605
包装想要原子更新类中字段的AtomicXXXFieldUpdater原子类
zenvzenv Oct 4, 2019
66ae803
源自类的基础-Unsafe类初始
zenvzenv Oct 4, 2019
d21b247
原子整型数组
Oct 11, 2019
5063b4c
规整和添加maven依赖
Oct 11, 2019
536d659
规整项目
Oct 14, 2019
5fbcac2
Merge remote-tracking branch 'origin/master'
Oct 14, 2019
34c56d0
Unsafe简单使用,比较无锁、有锁、原子、自定义CAS的效率
Oct 15, 2019
e83e38b
nio中三个重要的属性capacity,limit和position
Oct 16, 2019
d4ed98a
shidc业务相关
Oct 17, 2019
47c3401
shidc业务相关
Oct 17, 2019
2fe361c
Spark脑图-BlockManager相关
Oct 17, 2019
35048c9
Merge remote-tracking branch 'origin/master'
Oct 17, 2019
a304a7a
BinaryOperator函数式接口
Oct 17, 2019
aba1eb5
Predicate函数式接口
Oct 17, 2019
316d363
Supplier函数式接口
Oct 17, 2019
e17770f
调整unsafe实例方法的修饰权限,改为包下可用
Oct 19, 2019
8bac69a
unsafe可以加载类的一些操作,在unsafe加载类时可以绕过初始化
Oct 19, 2019
7b7be7b
nio文件操作,只读buffer,slice一个buffer快照
Oct 23, 2019
529b7ca
Netty笔记-Java中的nio读取文件的步骤
Oct 23, 2019
3ab278e
Merge remote-tracking branch 'origin/master'
Oct 24, 2019
c610dbe
CountDownLatch学习小demo
Nov 12, 2019
b846b13
Spark脑图-Rpc基本架构
Nov 13, 2019
a9e0edd
CountDownLatch使用小demo
Nov 13, 2019
406b499
CountDownLatch使用小案例,利用CountDownLatch统计event中每个table统计结果的批次控制输出
Nov 13, 2019
6311520
调整Spark工具类为单例模式,添加获取SparkSession的方法
Nov 14, 2019
27e625b
Spark使用案例
Nov 14, 2019
93b4e05
CyclicBarrier的小demo,介绍了CyclicBarrier与CountDownLatch的一些相同点和不同点
Nov 14, 2019
5f123db
利用CountDownLatch来实现了一个形似CyclicBarrier的MyCyclicBarrier,不能够实现线程之间的通讯以达到…
Nov 14, 2019
08d2b6f
Merge remote-tracking branch 'origin/master'
Nov 15, 2019
e8a1a6c
Exchanger的使用小demo
Nov 19, 2019
ee06472
Semaphore简介
Nov 19, 2019
1892944
Thread笔记-Atomic原子类所涉及到的汇编指令
Nov 19, 2019
ca5b703
Semaphore的一些API使用
Nov 19, 2019
a149978
Thread笔记-AQS简介
Nov 20, 2019
6cc27b6
项目结构大变动,将之前以包形式存在的且已形成体系的代码提取出来,形成一个个playground子模块(netty,spark,thread…
Nov 23, 2019
ee52ecd
Java8新引入的对ReadWriteLock的扩展锁StampedLock的一些介绍和使用
Nov 25, 2019
ec0da6a
ForkJoin框架demo
Nov 25, 2019
03f5a9e
Phaser的简单API使用demo
Nov 26, 2019
ca3f1d7
Phaser中的arrive()方法,不阻塞,通知其他线程本线程已到达后会继续执行后续代码
Nov 27, 2019
aeea882
Phaser中的awaitAdvance()方法,给定阶段数,如果给定的阶段数和现在的阶段数不等则立即返回,相等则等待其他线程执行完毕。主…
Nov 27, 2019
118309d
Phaser的API使用demo,arriveAndAwaitAdvance(),getPhase(),getRegisterPartie…
Nov 27, 2019
b69b2ac
Linux平时使用中的一些小技巧总结
zenvzenv Nov 27, 2019
3a46a35
Condition简介以及使用demo
zenvzenv Nov 28, 2019
478a2ed
Thread脑图-并发工具介绍
zenvzenv Nov 28, 2019
455763a
Spark基础设置笔记,目前记录Spark配置和RPC框架
zenvzenv Nov 29, 2019
ec66fb1
Spark脑图-升级Spark到2.4.4并补充一些组件概念
zenvzenv Nov 29, 2019
d5c5d94
ThreadPoolExecutor线程池介绍
zenvzenv Nov 30, 2019
f869a05
NIO中的直接缓冲区
zenvzenv Dec 1, 2019
6297e6b
NIO中的内存映射文件
zenvzenv Dec 1, 2019
d430825
NIO中的Scattering,Gathering
zenvzenv Dec 2, 2019
bef051e
Spark基础设施,TransportConf,TransportClientFactory,TransportClient
zenvzenv Dec 2, 2019
ce5c62a
ThreadPoolExecutor创建线程的机制
zenvzenv Dec 3, 2019
9b8b237
通过Executors创建线程池
zenvzenv Dec 3, 2019
f3c2c02
Executors中newCachedThreadPool和newFixedThreadPool这两种线程池的介绍
Dec 3, 2019
226f6d3
Semaphore的一些API使用
Dec 3, 2019
531c1a0
Exchanger
zenvzenv Dec 4, 2019
28eba0b
iot shell
zenvzenv Dec 5, 2019
5cf37ac
Spark中从缓存中获取TransportClient的过程的介绍
zenvzenv Dec 5, 2019
4e184fc
Merge remote-tracking branch 'origin/master'
Dec 6, 2019
343ed35
Merge remote-tracking branch 'origin/master'
zenvzenv Dec 7, 2019
42dca24
Executors工厂方法创建线程池之newSignalThreadPool
zenvzenv Dec 8, 2019
59d2347
线程池之ForkJoinPool介绍
zenvzenv Dec 8, 2019
ccef452
Thread脑图-ForkJoinPool介绍
zenvzenv Dec 8, 2019
1c08a60
flink
zenvzenv Dec 8, 2019
19da443
flink批处理版WordCount
zenvzenv Dec 8, 2019
5f3fb09
flink流处理版WordCount
zenvzenv Dec 8, 2019
9aeae94
Spark的内置Rpc架构所包含的组件介绍-TransportConf,TransportContext,TransportClientF…
zenvzenv Dec 8, 2019
dc0942f
对于单例SparkUtils修改,主要对获取JavaSparkContext和SparkSession的方法进行修改
zenvzenv Dec 9, 2019
8b8d54d
学习Scala
zenvzenv Dec 9, 2019
3eaed6a
iot shell
zenvzenv Dec 10, 2019
a41b390
NIO的网络编程小demo-selector,buffer,channel
zenvzenv Dec 11, 2019
8318dcb
ExecutorService使用demo,isShutdown(),isTerminated(),thread exception ha…
zenvzenv Dec 11, 2019
c8ca1a0
ThreadPoolExecutor的四大拒绝策略
Dec 11, 2019
6586da1
补充在线程在线程池中遇到异常时比较好的处理方式
Dec 11, 2019
76e19df
ThreadPoolExecutor的一些API使用demo
Dec 11, 2019
806f6d7
Thread脑图-ThreadPoolExecutor中的四大拒绝策略、重要属性(还有待补充)
zenvzenv Dec 12, 2019
52d07d7
ThreadPoolExecutorAPI:remove,prestartCoreThread,prestartAllThread,bef…
zenvzenv Dec 12, 2019
c22df55
Spark内存管理-堆内内存、堆外内存、内存管理接口和静态内存管理初始
zenvzenv Dec 12, 2019
6828379
thread test
zenvzenv Dec 12, 2019
dc117ee
Thread脑图-Executors介绍
Dec 12, 2019
9a2edb7
Spark Markdown笔记图片-Spark1.6.x之前的静态内存分布情况
zenvzenv Dec 13, 2019
9699b0e
iot shell
zenvzenv Dec 17, 2019
82b5d1c
Future介绍
zenvzenv Dec 18, 2019
506b1dc
ThreadPoolExecutor的一些API
zenvzenv Dec 18, 2019
2a3ec80
iot shell
zenvzenv Dec 18, 2019
8c82914
Thread Interrupt
zenvzenv Dec 18, 2019
bd0c15a
Future cancel
Dec 18, 2019
9124264
Merge remote-tracking branch 'origin/master'
zenvzenv Dec 19, 2019
bafae44
Completion小demo
Dec 19, 2019
85481ae
Merge remote-tracking branch 'origin/master'
zenvzenv Dec 20, 2019
559a67a
对于ExecutorService的shutdownNow说明的补充和想要解决重新执行未执行任务的解决方案
zenvzenv Dec 22, 2019
99d7916
SchedulerService的API介绍
zenvzenv Dec 22, 2019
e7d3f09
Completion的API介绍
zenvzenv Dec 22, 2019
c3f3a74
添加ThreadPoolExecutor的invokeAll的说明
zenvzenv Dec 22, 2019
f35ecd8
多线程Visio
zenvzenv Dec 24, 2019
ec73a83
CompletableFuture初体验
Dec 24, 2019
8e03bd2
CompletableFuture API使用
zenvzenv Dec 25, 2019
c6a2f70
ThreadPoolExecutor#addWorker流程图
zenvzenv Dec 25, 2019
a51c011
CompletableFuture的常用静态工厂方法:supplyAsync,runAsync,anyOf,allOf,主要是用来获取Co…
Dec 25, 2019
b9528ac
CompletableFuture中的一些转换方法,由一个CompletableFuture转变成另一个CompleteFuture
Dec 25, 2019
b1724d0
JVM创建对象的过程简述,OOM案例实例
zenvzenv Dec 30, 2019
1342187
CompletableFuture的组合函数API
zenvzenv Dec 31, 2019
2c7d16b
change dir
zenvzenv Dec 31, 2019
208667c
自己实现LinkedList
zenvzenv Jan 1, 2020
f5fabeb
CompletableFuture的组合API
zenvzenv Jan 1, 2020
1048e23
CompletableFuture的终结API
zenvzenv Jan 1, 2020
953250d
ArrayBlockingQueue存取数据API
Jan 2, 2020
ed6ed71
Merge remote-tracking branch 'origin/master'
Jan 2, 2020
252e04b
NIO中FileChannel的读操作,写操作,transfer操作
zenvzenv Jan 4, 2020
88618ce
NIO当中的ByteBuffer中的一些注意点
zenvzenv Jan 4, 2020
90f0c36
LinkedBlockingQueue介绍
zenvzenv Jan 4, 2020
c8aa284
带有优先级的队列PriorityBlockingQueue
zenvzenv Jan 4, 2020
0cc77cb
Nio实现简单的客户端和服务端
zenvzenv Jan 5, 2020
d6169e6
Nio实现简单的多人聊天室
zenvzenv Jan 5, 2020
39e90aa
NIO中的ByteBuffer分散和聚合
zenvzenv Jan 5, 2020
a482d7f
Java集合之ArrayList解读
zenvzenv Jan 8, 2020
5d5abd4
Netty简单实现Tcp客户端发送数到服务器,和服务器发送到客户端样例程序
Jan 8, 2020
c3cb9a7
Merge remote-tracking branch 'origin/master'
zenvzenv Jan 9, 2020
1f8f441
Spark@Yarn梳理
zenvzenv Jan 9, 2020
7bce13f
对于往Netty中的NioChannel中的taskQueue和scheduleTaskQueue提交任务,不让程序阻塞的介绍。
Jan 9, 2020
32c059a
spark向yarn申请资源情况截图
zenvzenv Jan 10, 2020
64d86ea
Netty异步模型:为ChannelFuture添加异步监听器
zenvzenv Jan 11, 2020
70c97c9
对于Spark@Yarn模式的资源分配情况的介绍和Spark对于内存的分配介绍
zenvzenv Jan 11, 2020
105efdf
JVM中堆内存溢出,栈内存溢出和元空间溢出实例
Jan 16, 2020
0ee38b1
添加cglib依赖模拟元空间溢出
Jan 16, 2020
dc2ee91
Merge remote-tracking branch 'origin/master'
zenvzenv Jan 22, 2020
e6311e6
JVM常用命令和GC算法开头
zenvzenv Feb 2, 2020
79674af
针对GC各个算法的解析
zenvzenv Feb 3, 2020
b9dd47a
JVM中分代信息介绍和各个收集器介绍
zenvzenv Feb 5, 2020
bc25d70
js_iot shell
zenvzenv Feb 6, 2020
c9297d5
对于jcmd命令介绍
zenvzenv Feb 7, 2020
34faeb9
JVM的一些启动参数介绍
zenvzenv Feb 7, 2020
68e1968
新加JVM启动参数说明
zenvzenv Feb 8, 2020
e93fd06
经历多次Minor GC后,存活的对象会在From Survivor和To Survivor之间来回存放,而这一前提就是两个空间有足够多的…
zenvzenv Feb 8, 2020
7e4c7de
对于安全点(safe point)和安全区域(safe region)介绍
zenvzenv Feb 11, 2020
1f09c2a
CMS收集器的清理步骤介绍和优缺点总结,内存分配担保介绍
zenvzenv Feb 13, 2020
baf7d01
JVM的G1收集器介绍
zenvzenv Feb 15, 2020
7c5596c
传统IO的传输文件
zenvzenv Mar 8, 2020
4c4c160
NIO传输文件
zenvzenv Mar 11, 2020
d035a7e
自己用NIO实现的简单的群聊系统
zenvzenv Mar 20, 2020
56567e8
Spark内存分布的系数解析
zenvzenv Mar 20, 2020
6b210b5
RpcHandler组件
zenvzenv Mar 20, 2020
65d5b9f
format code style
zenvzenv Mar 20, 2020
86e0ca1
排序算法复习——冒泡排序
zenvzenv Mar 23, 2020
77167ae
排序算法复习——选择排序
zenvzenv Mar 23, 2020
a3434e1
914. 卡牌分组
zenvzenv Mar 28, 2020
bccdc13
Netty组件简介
zenvzenv Mar 29, 2020
8afd7ed
EventLoopGroup补充笔记
Mar 30, 2020
df2e57d
查看CMS垃圾收集日志
zenvzenv Mar 31, 2020
ab646e7
新对象往往在Eden上分配
zenvzenv Mar 31, 2020
0f853e8
查看G1的垃圾收集日志
zenvzenv Mar 31, 2020
562899f
用于平时实验使用
zenvzenv Mar 31, 2020
5685c55
LeetCode第20题:有效的括号字符串
zenvzenv Apr 1, 2020
8bac476
LeetCode第1111题:有效括号字符串的嵌套深度
zenvzenv Apr 1, 2020
1f4713c
Netty中ServerBootstrap中一些常用方法的介绍
zenvzenv Apr 7, 2020
9f7e30e
自定义Spark累加器
zenvzenv Apr 9, 2020
dfbb594
LeetCode第22题:括号生成
zenvzenv Apr 9, 2020
c6cda0b
创建SybaseIQ的脚本
zenvzenv Apr 10, 2020
041d365
Netty中的ChannelPipeline组件介绍
zenvzenv Apr 11, 2020
bd14383
LeetCode第151题:反转文字
zenvzenv Apr 13, 2020
59ff5d9
ChannelFactory和ReflectiveChannelFactory简介和ServerBootstrap中的bind方法简介(有…
zenvzenv Apr 13, 2020
d50042c
LeetCode第445题:两个数字相加
zenvzenv Apr 14, 2020
25bf8ea
Reactor模式模型图
zenvzenv Apr 16, 2020
1936d85
对Reactor模型中的Handle,Synchronous Event Demultipleer和Event Handler进行了介绍
zenvzenv Apr 16, 2020
897330e
Spark内存管理
zenvzenv Apr 16, 2020
c062c82
Spark内存管理图片
zenvzenv Apr 16, 2020
674b3cc
format code
zenvzenv Apr 17, 2020
18863c5
LeetCode第55题:跳跃游戏
zenvzenv Apr 17, 2020
d3ed3db
对于零拷贝一些问题的解答
zenvzenv Apr 17, 2020
bbf06d0
Spark的Broadcast一些问题介绍
zenvzenv Apr 17, 2020
6b4d7c8
介绍Reactor的另外两个组件:Concrete Event Handler和Initiation Dispatch
zenvzenv Apr 21, 2020
10b4c98
Spark的Broadcast详细介绍
zenvzenv Apr 21, 2020
6995e07
LeetCode第1248题:统计最美子数组
zenvzenv Apr 21, 2020
a2c88c3
LeetCode第200题:岛屿数量
zenvzenv Apr 21, 2020
d5127d0
对于Spark提交到Yarn的Cluster模式的内存的计算方式说明
zenvzenv Apr 22, 2020
70dd2cd
对于G1的详细介绍:G1与CMS的对比、适用场景、运行模式运行参数、标记算法、JVM参数和最佳实践
zenvzenv Apr 22, 2020
31b1098
LeetCode第199题:二叉树的右视图
zenvzenv Apr 22, 2020
ca71b42
LeetCode中面试题08.11题:硬币
zenvzenv Apr 23, 2020
731f314
pom文件例行更新
zenvzenv Apr 23, 2020
9ee5721
为Reactor模式添加图片链接
Apr 24, 2020
7018cff
Reactor模式运作流程介绍
Apr 25, 2020
23f0832
Merge remote-tracking branch 'origin/master'
zenvzenv Apr 26, 2020
2babec4
jcmd简单介绍
Apr 26, 2020
aeed07e
Netty中ServerBootstrapAcceptor简介和Channel与ChannelPipeline关系的介绍
zenvzenv Apr 27, 2020
f440aff
将LeetCode单独形成一个子模块,方便日后管理;
zenvzenv Apr 28, 2020
5b16cff
对ChannelPipeline的进一步认识:IO线程与业务线程的分离;线程安全性
zenvzenv Apr 28, 2020
89ab3f9
Merge remote-tracking branch 'origin/master'
Apr 28, 2020
18b30a1
需要补充的组件:ChannelOption,AbstractConstant,ConstantPool,Constant,Attribut…
zenvzenv Apr 29, 2020
42d7f1a
Merge remote-tracking branch 'origin/master'
Apr 29, 2020
cdb7c94
LeetCode第1095题:山脉数组中查找目标值
zenvzenv Apr 30, 2020
3d51638
LeetCode第202题:快乐数
zenvzenv Apr 30, 2020
b5cc61f
独立LeetCode模块
zenvzenv Apr 30, 2020
8653552
LeetCode第22题:合并两个链表
zenvzenv May 1, 2020
7773fa9
LeetCode第53题:最大子序和
zenvzenv May 3, 2020
433e4de
Netty中的ChannelOption和Attribute介绍
zenvzenv May 3, 2020
682c87b
LeetCode第45题:跳跃游戏 II
zenvzenv May 4, 2020
7fae410
LeetCode第98题:验证是否是搜索二叉树
zenvzenv May 5, 2020
40c1a92
LeetCode第746题:使用最小的花费爬楼梯
zenvzenv May 6, 2020
0b765db
Merge remote-tracking branch 'origin/master'
May 6, 2020
7bbd644
Netty中的ChannelInitializer、ChannelHandlerContext和ChannelPipeline、Chann…
May 6, 2020
72e02cc
LeetCode第572题:另一个树的子树
zenvzenv May 7, 2020
72821d9
LeetCode第69题:求一个数的算数平方根
zenvzenv May 9, 2020
574fee8
Netty待补充的内容
zenvzenv May 9, 2020
08c1d71
Spark的cache和checkpoint机制解析
zenvzenv May 14, 2020
856c781
HashMap解析
zenvzenv May 17, 2020
fe83d98
HashMap查找、插入(hash,定位桶位置)、遍历和扩容解析
zenvzenv May 18, 2020
f4fe056
HashMap的初始化、扩容详细介绍
zenvzenv May 19, 2020
bfac68e
HashMap的扩容、链表树化、红黑树链化和删除操作解析
zenvzenv May 20, 2020
8e18cab
读取数据文件并导入数据
zenvzenv May 21, 2020
da92d7c
添加MyMath工具类类,增加计算两个数的最大公约数
zenvzenv May 21, 2020
c11537b
关于HashMap为什么不采用默认的序列化机制取序列化table桶数组的解析
zenvzenv May 21, 2020
35e48b9
对于ArrayList的注意事项的介绍
zenvzenv May 22, 2020
1ead345
AQS
zenvzenv May 25, 2020
45ea5aa
创建例外表的天目录
zenvzenv Jun 1, 2020
0d5ffe0
剑指offer第56-I题
zenvzenv Jun 3, 2020
f157fa0
剑指offer第47题
zenvzenv Jun 3, 2020
bb8dbbc
剑指offer第47题:顺时针遍历二维数组
zenvzenv Jun 5, 2020
a37beb9
剑指offer第47题:顺时针遍历二维数组
zenvzenv Jun 5, 2020
135f8d9
HashMap常见问题总结
zenvzenv Jun 6, 2020
17d8c44
以ReentrantLock中的NonfairSync来解析AQS的加锁和加锁失败逻辑
zenvzenv Jun 8, 2020
2afbfe0
以ReentrantLock中的NonfairSync来解析AQS的加锁失败入队列逻辑
zenvzenv Jun 9, 2020
6807406
为enq、acquireQueued和shouldParkAfterFailedAcquire方法加上详细注释
zenvzenv Jun 11, 2020
4004efe
剑指offer第7题:重构二叉树
zenvzenv Jun 16, 2020
09c6509
LeetCode第1014题:最佳观光位置
zenvzenv Jun 17, 2020
b43304d
LeetCode第343题:整数拆分的最大乘积
zenvzenv Jun 17, 2020
7e5d45d
添加一个问题:jdk1.7中的HashMap出现死循环的问题
zenvzenv Jun 18, 2020
5701425
借助ReentrantLock释放锁理解AQS的释放锁逻辑,
zenvzenv Jun 18, 2020
b3944a9
LeetCode第187题:重复的DNA序列
zenvzenv Jun 18, 2020
97fd131
LeetCode第125题:验证回文串
zenvzenv Jun 19, 2020
51fb33d
剑指offer第11题:旋转数组中的最小数字
zenvzenv Jun 22, 2020
450b0be
模仿jdk实现的ThreadPool
zenvzenv Jun 29, 2020
0e512c4
复习,顺便修改错别字、修改文件换行格式
zenvzenv Jun 29, 2020
8844e23
剑指offer第18题:删除链表的节点
zenvzenv Jun 30, 2020
481e6b1
LeetCode题目中经常用到的链表对象和一些常用方法
zenvzenv Jun 30, 2020
d206597
LeetCode第22题:链表中倒数第k个节点
zenvzenv Jun 30, 2020
c5806c3
抽取出ListNode
zenvzenv Jun 30, 2020
03aeac8
Bump mysql-connector-java from 8.0.15 to 8.0.16
dependabot[bot] Jul 1, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Created by .ignore support plugin (hsz.mobi)
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

.idea
*.iml
target
54 changes: 54 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# playground
## **目的在于平时的学习而写的代码**
### 1.common包
* HttpAPIClient-http请求工具包
* IpUtil-IP格式的互转和IP地址的一些判断
* SysUtils-判断一个对象是否为空
### 2.jvm目录
* 详情参见[zhengwei.jvm.JVM.md](https://github.com/zw030301/playground/blob/master/src/main/java/zhengwei/jvm/JVM.md)

### 3.hdfs包
* HDFSClient-hdfs的客户端
* HDFSIO-hdfs的IO操作,包含往云平台上传文件和下载文件等操作
### 4.LeetCode包
* 是一些平时的LeetCode的刷题代码
* Daily-LeetCode01TwoSum-[两数之和](https://leetcode-cn.com/problems/two-sum/)
* Daily-LeetCode02AddTwoNumbers-[两数相加](https://leetcode-cn.com/problems/add-two-numbers/)
### 5.spark包
* 详情参见[zhengwei.spark.Spark.md](https://github.com/zw030301/playground/blob/master/src/main/java/zhengwei/spark/Spark.md)

### 6.unsafe包
* 闲暇时看一些Java关于unsafe的文章时写的一些代码
### 7.algorithm包-算法
#### 自己的一些白话理解
* 1.选择排序,时间复杂度是O(n^2),空间复杂度是O(1),不稳定的一种排序算法,
主要思想是:遍历整个要排序的数组,要是前一个元素大于后一个元素,则调换元素位置,知道数组有序位置
* 2.冒泡排序,时间复杂度是O(n^2),空间复杂度是O(1),稳定的一种排序,
主要思想:有两层循环,外循环控制着要排序的数组的长度,每完成一次比较,下次要比较的数组长度就会减小一;
内循环控制着数组中元素的比较,如果后一个数大于前一个数就交换位置,大的数就像泡泡一样慢慢的往数组的后面跑去,随着要比较的数组长度减少,数组也逐渐有序。
* 3.插入排序,时间复杂度O(n^2),空间复杂度O(1),稳定的一种排序算法,
主要思想:插入排序就像玩扑克时往手上接牌一样,刚开始牌比较少,随着牌的增多,我们把牌插入到大小合适的地方。
插入排序同样是有两层循环,第一层循环控制着要排序数组的个数,每循环一次要比较的数组长度加一,每次加的一个元素就是要就进行比较的元素,每次新进的元素要和之前的元素进行比较,直到新进的元素大于前一个元素为止。
插入排序适合样本较小和基本有序的元素排序,理论上效率要比选择排序和冒泡排序要高。
### 8.设计模式
#### 8.1 单例模式
* 这里写了4钟单例模式的写法。
* 1.饿汉式,线程安全,也是生产环境中比较常用的一种写法,比较简单的一种方式。这种方式主要是利用JVM只会加载一个类一次的特性来保证线程安全,当类被加载时,静态变量也会被加载;
有一个缺点:就是不论我们是否用到了这个类的对象,JVM都会去加载这个类的实例。
* 2.懒加载,线程不安全和线程不安全的版本都有,主要时利用synchronized关键字去加锁代码块以达到同步效果。但是效率比较低。
* 3.静态内部类的方式,线程安全,这既达到了懒加载也时线程安全的,主要还是利用JVM只加载一次类的这个特性来保证线程安全。
* 4.枚举的方式,真正意义上的单例模式,线程安全,不会被反序列化,这种方法还要继续深入了解下...
#### 8.2 责任链模式
* 可以参阅JavaEE中的过滤器

#### 8.3 观察者模式
* 观察者模式与责任链模式有些相像,都是利用面向对象的多态的这个特性;都是把每个观察者串联起来执行,但是责任链模式中可以中断链的继续执行,而观察者模式一般不中断链的执行。
* 观察者模式有三个主要角色,1.被观察者,2.观察者,3.事件类,还有一些观察者中对于各种事件的处理逻辑的方法。
### 9.thread线程
* 详情参见[zhengwei.thread.Thread.md](https://github.com/zw030301/playground/blob/master/src/main/java/zhengwei/thread/Thread.md)

**平时学习和工作的一些总结**
---
**_zhengwei AKA Sherlock_**
---
**闲暇之余会更新哦**
294 changes: 294 additions & 0 deletions collection/src/main/resources/Collection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
# Java集合
## ArrayList
使用数组实现的List,具有自动扩容机制,在实际使用的过程中,需要尽量避免List的频繁扩容以免损失性能。
### 重要属性
#### 1. private static final int DEFAULT_CAPACITY = 10;
默认的ArrayList的容量大小,如果在初始化ArrayList时没有指定初始容量,或者指定的初始容量为0时,在下一次添加数据时,将会将容量设置为该值。
#### 2. private static final Object[] EMPTY_ELEMENTDATA = {};
当初始化ArrayList时,指定的容量为0时,则将内部数组实例化为该值
#### 3. private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
默认的空数据,当使用空构造器初始化ArrayList时,内部数组被初始化该值
#### 4. transient Object[] elementData
ArrayList中真正存数据的数组
#### 5. private int size
ArrayList中的元素的个数
### 重要方法
#### public boolean add(E e)
##### 1. 源码
````java
public boolean add(E e) {
//当前需要的最小容量size+1
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
private static int calculateCapacity(Object[] elementData, int minCapacity) {
//如果当前数组为默认的额空数组,那么就取当前需要的最小容量和默认的容量的最大值
//一旦扩容过一次之后,原本存放数据的数组就不再是DEFAULTCAPACITY_EMPTY_ELEMENTDATA
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
//默认容量和当前最小容量进行比对,取较大值
return Math.max(DEFAULT_CAPACITY, minCapacity);
}
return minCapacity;
}
private void ensureExplicitCapacity(int minCapacity) {
//修改次数加一,方便快速失败的判断
modCount++;
// overflow-conscious code
//如果当前需要的最小容量大于当前存放数据的数组的长度,则进行扩容
if (minCapacity - elementData.length > 0)
//扩容
grow(minCapacity);
}
````
##### 2. 解析
在ArrayList的末尾添加一个元素,在添加元素之前都会对当前需要的最小容量(size+1)和当前的存储数据的数组的容量进行比对,
如果当前需要的最小容量大于则进行扩容,否则将元素添加到数组的末尾。
该方法会导致modCount的值加一。
#### private void grow(int minCapacity)
##### 1. 源码
```java
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
//扩容为原来容量的1.5倍
int newCapacity = oldCapacity + (oldCapacity >> 1);
//如果扩容之后的容量小于最小需要的容量,那么就将容量扩容到需要的最小容量
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
//如果扩容之后的容量比最大容量的值还大,那么就将新同容量扩容到最大允许容量
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
//将旧数据拷贝到新数组中
elementData = Arrays.copyOf(elementData, newCapacity);
}
private static int hugeCapacity(int minCapacity) {
//如果需要的最小容量溢出了就抛出异常
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
//返回ArrayList的容量
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
```
##### 2. 解析
扩容的策略还是比较容易理解的,有以下几个步骤:
1. 首先扩容到近似原来数组容量的1.5倍
2. 需要的最小容量和扩容之后的大小进行比对。
1. 如果需要的最小容量的大小小于扩容之后的容量的话,则将旧数据拷贝到新数组中即可
2. 如果需要的最小容量小于扩容之后的容量的话,则将存储数据的数组容量扩容到需要的最小容量之后再进行数据拷贝
3. 如果需要的容量超过了最大容量,则将数组扩容到最大容量
#### public void add(int index, E element)
##### 1. 源码
```java
public void add(int index, E element) {
//越界检查
rangeCheckForAdd(index);
//扩容校验,最小需要的容量为size+1
ensureCapacityInternal(size + 1); // Increments modCount!!
//将就数组中index以后的数据向后移一位
System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = element;
size++;
}
private void rangeCheckForAdd(int index) {
//同时检查上界和下界
if (index > size || index < 0)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
```
##### 2. 解析
需要检查上界和下界,将插入的index包括index索引位的值,往后移动一位,将需要插入的元素插入到index索引位即可。
#### public E remove(int index)
##### 1. 源码
```java
public E remove(int index) {
//越界检查
rangeCheck(index);
//修改次数加一,方便快速失败
modCount++;
//取出旧值
E oldValue = elementData(index);
//需要移动的元素的个数
int numMoved = size - index - 1;
if (numMoved > 0)
//将index位置上的元素覆盖掉
System.arraycopy(elementData, index+1, elementData, index, numMoved);
//将最后一位置为null,方便GC进行回收
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
```
##### 2. 解析
移除指定索引位置上的元素,会导致修改次数加一,并且返回原来索引位上的旧值。将最后一位置为null,方便GC回收无用对象
#### public boolean remove(Object o)
##### 1. 源码
```java
public boolean remove(Object o) {
//如果要删除的元素为null
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
//快速删除
fastRemove(index);
return true;
}
//如果删除的元素不为null
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
//快速删除
fastRemove(index);
return true;
}
}
return false;
}
//快速删除,不校验边界,直接移除元素
private void fastRemove(int index) {
//修改次数加一
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index, numMoved);
//最后一个元素置为null,方便GC回收无用对象
elementData[--size] = null; // clear to let GC do its work
}
```
##### 2. 解析
快速删除在ArrayList中第一个与Object对象相等的值
#### public E set(int index, E element)
##### 1. 源码
```java
public E set(int index, E element) {
//边界检查
rangeCheck(index);
//取出旧值
E oldValue = elementData(index);
//将新新值覆盖到旧值
elementData[index] = element;
//返回旧值
return oldValue;
}
E elementData(int index) {
return (E) elementData[index];
}
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
```
##### 2. 解析
将指定索引位的值修改为指定的值并返回旧值
#### public boolean removeAll(Collection<?> c) / public boolean retainAll(Collection<?> c)
##### 1. 源码
```java
public boolean removeAll(Collection<?> c) {
Objects.requireNonNull(c);
return batchRemove(c, false);
}
public boolean retainAll(Collection<?> c) {
Objects.requireNonNull(c);
return batchRemove(c, true);
}
private boolean batchRemove(Collection<?> c, boolean complement) {
final Object[] elementData = this.elementData;
int r = 0, w = 0;
boolean modified = false;
try {
for (; r < size; r++)
if (c.contains(elementData[r]) == complement)
elementData[w++] = elementData[r];
} finally {
// Preserve behavioral compatibility with AbstractCollection,
// even if c.contains() throws.
if (r != size) {
System.arraycopy(elementData, r,
elementData, w,
size - r);
w += size - r;
}
if (w != size) {
// clear to let GC do its work
for (int i = w; i < size; i++)
elementData[i] = null;
modCount += size - w;
size = w;
modified = true;
}
}
return modified;
}
```
### 内部类
#### Itr
Itr实现了Iterator接口,提供遍历功能
#### 注意事项
在使用Itr提供的迭代功能的时候,不可以使用ArrayList提供的remove方法,如果使用了ArrayList提供的方法,会导致modCount发生变化,但是Itr中的next方法中,每次都会去校验modCount和expectModCount,如果两者不相等,
则表示List在迭代过程中发生了变化,会抛出ConcurrentModifyException。
```java
public E next() {
//校验modCount和expectModCount,校验ArrayList是否被修改过
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
```
如果想在迭代过程中删除元素,需要使用Itr提供的remove方法,实际还是调用的ArrayList中的remove方法,但此方法会在remove之后校准modCount和expect,以免下一次next时报错。
```java
public void remove() {
if (lastRet < 0)
throw new IllegalStateException();
checkForComodification();
try {
//实际调用ArrayList中的remove方法
ArrayList.this.remove(lastRet);
//将最后一个元素的下一个元素的索引往前挪一位
cursor = lastRet;
//重置最后一个元素的索引
lastRet = -1;
//校准expectModCount和modCount,以免下一次的next报错
expectedModCount = modCount;
} catch (IndexOutOfBoundsException ex) {
throw new ConcurrentModificationException();
}
}
```
在Java8中新提供的forEachRemaining方法,同样的此方法不能够对元素进行移除.
```java
@Override
public void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
final int size = ArrayList.this.size;
int i = cursor;
if (i < size) {
final Object[] es = elementData;
if (i >= es.length)
throw new ConcurrentModificationException();
for (; i < size && modCount == expectedModCount; i++)
action.accept(elementAt(es, i));
// update once at end to reduce heap write traffic
cursor = i;
lastRet = i - 1;
checkForComodification();
}
}
```
#### ListItr
ListItr继承自Itr,实现了ListIterator接口,提供从后向前遍历的能力
## LinkedList
Loading