知识库
文章平均质量分 65
知识总结
morganEngineer
这个作者很懒,什么都没留下…
展开
-
接口幂等性探讨
接口幂等性原创 2022-09-01 23:27:34 · 458 阅读 · 0 评论 -
java修改字节码技术,Javassist修改class,ASM修改class
背景: 项目使用的Logback 1.1.11版本的类ch.qos.logback.core.rolling.helper.RollingCalendar的periodBarriersCrossed方法long转换成int发生溢出,导致日志无法删除,最终决定在不升级logback版本的前提下使用java修改字节码技术修复此bug。1:ASM直接修改字节码:<dependency> <groupId>asm</groupId>...原创 2021-05-24 11:46:17 · 1865 阅读 · 0 评论 -
java按位取反“~“运算符,负数右移
知识点:java中数字以补码存储, 正数的原码,反码,补码相同, 负数的反码是在原码基础上符号位不变,其他位按位取反,负数补码是在反码基础上加一例子1:求~10(byte类型)byte a = 10;原码,补码,反码:00001010按位取反后11110101再将补码转换成源码,由于负数生成补码的规则是:在反码基础上加1,因此需要按照此规则...原创 2020-02-03 18:58:54 · 470 阅读 · 0 评论 -
jvm gc日志
java -Xms100m -Xmx600m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=4M -XX:+UseGCLogFileRotation -jar iic-ssp-mgr-0.0.1-SNAPSHOT.war;原创 2020-05-24 15:58:17 · 229 阅读 · 1 评论 -
java高位转低位注意事项,int转 short/byte溢出过程
对上述代码的输出结果有没有人觉得是89呢,现实中看见不少直接使用java保留字进行强制高位转低位的。上述代码输出结果是21。我们都只知道int类型占用的是32位,4字节,byte类型是占用一字节共八位,因此有符号byte最大存储的数值是127。从32位int强制转换成byte类型必定要舍去高位的24位,只保留低八位。123456789变成21的大致过程如下:1: 123456789对应的二进制(原码)是:00000111 01011011 11001101...原创 2020-06-18 21:29:08 · 1364 阅读 · 0 评论 -
单例模式volatile
java实现单例模式的方式有很多种,常见的有通过枚举,饿汉式,懒汉式。懒汉式一般需要double check。需要注意的事情,这种单例模式,单例对象声明的时候需要加volatile关键字,确保在单例对象实例化的过程中不会发生重排序导致其他线程获取到一个未完成初始化的对象,原理如下图:出现上图这种情况:instance指针指向对象的指令发生在对象的初始化之前,那就会出现并发问题。...原创 2020-06-27 17:19:46 · 213 阅读 · 0 评论 -
mysql批量更新,批量插入之replace语句/insert into... on duplicate key update语句
先说结论:1:如果业务逻辑强依赖自增ID,建议不要用REPLACE2:replace语句当存在主键冲突的时候是先DELETE再INSERT,无冲突直接进行insert3:当存在唯一索引冲突的时候是直接UPDATE,UPDATE操作不会涉及到AUTO_INCREMENT的修改4:很大程度上会导致主备中断,存在容灾风险使用语法:1:如果给定行数据不存在,那么MySQL REPLACE语句会插入一个新行(是否存在以UNIQUE索引或PRIMARY KEY为准),不存在则删除旧行,插入新行原创 2021-04-18 00:12:49 · 3887 阅读 · 0 评论 -
mysql InnoDB 聚集索引,二级索引
InnoDB索引分为聚集索引(聚簇索引)与二级索引。聚集索引:1: 全表唯一且必有一个,主键索引属于聚集索引。2: 索引项的顺序就是表中数据记录的物理顺序。3: 若定义了主键索引InnoDB则使用主键索引当做该表的聚集索引,没有主键索引则使用第一个非空的唯一(UNIQUE)索引作为聚集索引,二者都没有则自动创建一个6字节的自增隐藏列作为聚集索引,此列包含了每一行的自增row ID,此聚集索引名为GEN_CLUST_INDEX,按此rowID排序的行在物理上按插入顺序。二级索引:除..原创 2021-05-16 18:54:22 · 477 阅读 · 0 评论 -
解析性语言与编译性语言优劣对比
高级编程语言分为解析语言和编译性语言,各自代表有Js,python 以及c/c++,golang等,java某种意义上说既是解析语言也是编译性语言。以下是解析语言与编译性语言的一些优劣对比:1:效率 编译比解析方式可能会取得更高的效率。一般情况下,在解析方式下允许程序时,解析程序可能需要反复扫描源程序。例如,每一次引用变量都要进行类型检查,甚至重新进行存储分配,从而降低程序的运行速度。在空间上,以解析方式运行程序需要更多的空间,因为系统不但需要为用户程序分配运行空间还要为解析程序及其支...原创 2021-04-13 15:15:57 · 854 阅读 · 1 评论