- 博客(19)
- 收藏
- 关注
原创 double精度 为53位bit,而非52位
53位bit实验背景知识2^52 = 4503599627370496将第一位设置成6 (小于2^53次方)double d = 6503599627370496L;for (int i = 0; i < 100; i++) { d++; System.out.println((long)d);}结果正常+1将第一位设置成9 (大于2^53次方)double d = 6503599627370496L;for (int i = 0; i &
2022-03-01 11:46:18 492
原创 mysql checkpoint 相关简述
利用checkpoint来去批量刷新到磁盘,在日志重做的时候,就可以在这个点后重新回放对应的东西,然后把没提交的东西回滚fuzzy checkpoint 记录checkpoint的起始和结束,start以后的事务无需放置在checkpoint里面,因为之后的事务后面去提交,无需跟随fuzzy checkpoint放置在log中。同时将对应的脏页刷新到磁盘中。 起始: 就记录start 结束 包括att和dtp为了达成这个目的,需要以下结构ac...
2021-08-07 19:24:32 275
原创 jdk读写锁
误区:读写锁公平读锁抢占的时候,是去判断,队列中的第一个是不是写锁,如果是,那么就写入。公平不公平其实体现在是否要直接抢占,如果前面有写锁,而且被感知,无论公平与否,都会阻塞读锁。获取写锁后,可以降级为读锁。参照https://www.jianshu.com/p/cd485e16456eprotected final int11 tryAcquireShared(int unused) { Thread current = Thread.currentThread();
2021-08-05 18:03:59 197
原创 threadLocalMap 为啥用弱引用
结论:为了让threadlocal的回收逻辑与使用该threadlocal的线程的回收逻辑相独立threadlocal举例来说可以作为一个对象中的引用,比如这个对象回收了,但线程是复用的(比如线程池)如果entry是强引用,就会引起threadlocal一直不回收。为了防止类似情况发生,采用的弱引用。有人说我平时都是用静态变量啊?没错,静态变量会导致threadlocal一直被强引用指着,threadlocalMap中的弱引用强引用并没有什么区别,刚刚提到的只有threadloca.
2021-08-05 17:22:40 626
原创 mysql 优化,锁
锁住show processlist 查看waiting for table metadata lock出现这个状态表示的是,现在有一个线程正在表t上请求或者持有MDL写锁,把select语句堵住了。这类问题的处理方式,就是找到谁持有MDL写锁,然后把它kill掉。但是,由于在show processlist的结果里面,session A的Command列是“Sleep”,导致查找起来很不方便。不过有了performance_schema和sys系统库以后,就方便多了。(MySQL启动.
2021-08-01 11:29:55 71
原创 redis skip list 结构解析
先从基本的,去除掉span以后的开始// zset的数据结构定义/* ZSETs use a specialized version of Skiplists */typedef struct zskiplistNode { sds ele; double score; struct zskiplistNode *backward; struct zskiplistLevel { struct zskiplistNode *forward; .
2021-07-21 13:58:33 132
原创 常见排序算法
o(n2)的算法插入排序 int[] arr = new int[]{2,3,1,2}; int length = arr.length; for (int i = 1; i < length; i++) { int j = i; int cur = arr[j]; for (; j >0; j--) { if (cur < arr
2021-07-20 13:57:42 80
原创 CyclicBarrier demo
CyclicBarrier 这个东西到达一定程度后,同时唤醒某个值,里面有个lock,同时有个condition,condition,设置一个初始值数量 int threadNum = 5; CyclicBarrier barrier = new CyclicBarrier(threadNum, new Runnable() { @Override public void run() { ..
2021-07-12 17:45:14 164
原创 装饰器模式 动态代理模式 适配器模式
目录 装饰器模式 适配器模式 桥接模式 装饰器模式 装饰器模式就是类似于适配器模式,但是适配器模式持有的对象不需要继承或实现持有待装饰的对象。 适配器模式 adaptee是持有的目标的三方类库/老代码等不太好动的,所以用个这玩意去适配接口,我们对外提供的接口是我们自己定义的。桥接模式桥接模式是各自的接口进行结合的过程。单独去做抽象从意图上看适配器是为了复用已有接口的功能,而通过适配将已有接口功能引入到所需接口的一种模式,目的是能够结合。桥...
2021-07-11 16:48:30 135
原创 volatile 可见性 以及synchronized到jmm
volatile带有可见性,可见性是指什么,可见性就是说我一个地方修改的,另外一个线程能看到。为啥会有这种问题呢?这是因为多核cpu导致的。对于某个核的cpu来说,寄存器存储的东西可能和另一个cpu的寄存器存储的东西不一样,包括后面为了处理cpu和内存之间的延时的数量级鸿沟而引入的 L1 L2cache 等各个cpu核之间都可能不一样。有些东西我要保证多个核之间的cpu的数值一致,或者说弱一点,这个东西对另外一个东西可见之前的volatile可见性的实现,是通过重型的锁总线,但是这个东西性能
2021-07-08 19:22:08 69
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人