Kang's Blog

疯狂创作中···

其它-常用命令集

常用命令

数据库 binlog解析 二进制binlog转换为阅读文本文件: 1 mysqlbinlog --base64-output=DECODE-ROWS -vv -d 二进制文件 > XXX.txt Linux 字符串内容查找截取: 1 grep '清洗异常' online.base.traderplat.service-2020-01-08-0.l...

多线程-BlockingQueue

BlockingQueue概括与总结

简介 BlockingQueue即阻塞队列,它算是一种将ReentrantLock用得非常精彩的一种表现,其最常用的还是用于实现生产者与消费者模式,大致如下图所示: 源码简解 BlockingQueue内部有一个ReentrantLock,其生成了两个Condition,在ArrayBlockingQueue的属性声明中可以看见: 1 2 3 4 5 6 7 8 9 10 11 12 ...

多线程-AQS简单总结

AQS与锁

考虑了三分钟,最终还是觉得两者放在一起好,驱动自己一次性总结完也方便后面观看。 基础知识 公平锁与非公平锁   公平锁:实现机理在于每次有线程来抢占锁的时候,都会检查一遍有没有等待队列,如果有,当前线程会进入队列。   非公平锁:与公平锁的区别在于新晋获取锁的进程会有多次机会(进入时/排队前)去抢占锁。如果被加入了等待队列后则跟公平锁没有区别。 可重入锁   如果当前线程已经获得了锁,...

多线程-线程池

线程池概括与总结

基础知识 相关创建类   Executors、ThreadPoolExecutor、ExecutorService 核心参数   corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue等待队列、handler拒绝策略 参数的使用 初始阶段:刚创建是,工作线程为0,此时当任务加入时,线程数不断增加,任务被直接执行; 达到...

基础-ConcurrentHashMap

ConcurrentHashMap简单总结

特点   jdk7:数组+链式+分段锁结构,在扩容时直接一把梭,添加全局锁。最大并发个数就是Segment的个数。   jdk8:数组+链式+红黑树+无锁结构,采用渐进式扩容。JDK8通过Unsafe类的CAS自旋赋值+synchronized同步+LockSupport阻塞等手段实现的高效并发,JDK8的锁粒度更细,理想情况下talbe数组元素的大小就是其支持并发的最大个数。 打标...

基础-HashMap

HashMap概括与总结

HashMap的快失败(非并发)   HashMap中存在modCount表示一个集合被修改的次数,使用expectedModCount在创建iterator时被赋值为modCount,每次有修改时加一。   在使用集合的操作remove、put方法操作数据时只会修改modCount,但是迭代器在变更数据时会变更modCount和同步更新expectedModCount。这样若同时存在集...

基础-Synchronized

Synchronized概括与总结

线程通知 当线程执行wait()时,会把当前的锁释放,然后让出CPU,直接进入等待状态。 当线程执行notify()/notifyAll()方法时,会唤醒一个处于等待状态该对象锁的线程,但是当前线程让然持有锁会继续往下执行,直到执行完退出对象锁锁住的区域(synchronized修饰的代码块)后再释放锁。   Java中的线程和操作系统原生线程是一一对应的,线程被阻塞或者唤醒时...

基础-JVM内存模型

JVM内存模型粗理解

部分基础概念 Minor GC:发生于年轻代 Major GC:发生于永久代 Full GC :发生于整个堆空间 动态链接:将方法中的符号引用变更为具体的对象方法指针。 内存溢出:要求分配的内存超出了系统能给你的。 内存泄漏:申请内存后,一直可达无法进行内存释放。 安全点:safepoint,方法调用前后、循环跳转、异常跳转等流程切换时间周期较长的特殊位置,应用线程检查GC标志...

基础-java内存模型

java内存模型粗理解

java内存模型   由于CUP的速度远远高于内存的速度,所以为了加快处理,CUP自己携带一块高速缓存,在处理时,先将数据从主存中copy一份到高速缓存中,后面再刷入主存。   这种模式就导致一个问题:在多处理器下,工作缓存中和主存中数据不一致。   上图为一个简单地示例,存在变量flag,初始flag=false,线程2修改为true;当总线嗅探到后,将工作内存中的数据置为失效。 ...

技巧-代码查询优化

批量查询小技巧

技巧 业务需要单条获取   一般来说,在没有前台页面的情况下,会将数据全部查询出来,这样就可能导致单次查询的数据量过大,查询耗时,所以需要对查询进行优化,可以使用引入分页和本地缓存的方式来优化整个查询,具体示例代码: ExampleRecordDBTableReader   特别需要注意的是,在使用的时候,ExampleRecordDBTableReader需要为有状态的,所以必须为非...