- 博客(415)
- 资源 (33)
- 问答 (7)
- 收藏
- 关注
原创 为什么MySQL推荐使用自增主键?
主键数据记录本身被存于主索引(一棵B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点),如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页;为什么MySQL推荐使用自增主键?
2025-04-28 17:02:24
586
1
原创 与传统累加器对比,LongAdder 为何如此出众?
在使用AtomicLong时,如果是在高并发场景下去同时竞争修改同一个原子变量,由于内部使用的是CAS,只会有一个线程修改成功,这就造成了大量的线程竞争失败后,通过无限循环来不断的进行CAS操作,白白的浪费了CPU资源,在JDK8中为了解决这种问题,提供了LongAdder来进行原子性递增递减LongAdder将一个变量分解为多个变量,在内部维护了多个Cell变量,每个Cell变量中有一个初始值为0的long类型变量。当多线程争夺同一个Cell原子变量时如果失败,并不是在当前Cell变量上一直自旋CAS重试
2025-04-28 16:59:42
308
原创 查看MySql操作日志
今天在排查问题的时候发现数据对不上,怀疑是有些数据被人误删了,那如何知道是否该数据被人删除了呢。如果由于误操作数据,想要进行数据恢复的话,可以。看一下当前记录在哪个日志中了。也可以使用sql语句去查看。找到文件位置之后查看日志。查看MySql操作日志。先看一下日志是否开始了。
2025-04-22 15:57:27
533
原创 一文拆解 Java CAS:从原理到避坑全攻略
之前说在java.util.concurrent.atomic包下提供的原子操作类底层使用的是CAS,那么什么是CAS呢,CAS的全称为Compare And Swap,比较并替换,CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。解决这个问题很简单,ABA的本质就是无法感知中间过程,那么加一个版本号就可以了,每次版本号递增1,在比较时,不仅要比较内存地址V和旧的预期值A,还要比较一下版本号。虽然CAS采用的无锁操作来提供性能,但是CAS并不是完美的,存在了很多的不足。
2025-04-22 15:54:13
341
原创 SQL优化
某条查询涉及到大表,无法进一步优化,如果返回的数据量不大且变化频率不高但访问频率很高,此时应该考虑将返回的数据放在应用端的缓存当中或者 Redis 这样的缓存当中,以提高存取速度。返回的数据需要通过网络数据包传回客户端,如果取出的Column越多,需要传输的数据量自然会越大。尽量在查询中加入一些可以提前过滤数据的条件,比如按照时间过滤数据等,可以减少数据的扫描量,对查询更友好;SQL的优化并不是一开始就进行优化的,而是需要先进行观察的,所以SQL优化的步骤应该是这样的。永远使用小结果集驱动大的结果集。
2025-04-11 11:33:11
419
原创 速学!Java 原子操作,开启并发编程新境界
在java.util.concurrent.atomic包下提供了很多原子操作类,多个线程执行一个操作时,其中任何一个线程要么完全执行此操作,要么没有执行此操作的任何步骤,其内部使用的Unsafe来实现的CAS操作。JVM会根据处理器的特性适当的重新排序机器指令,使机器指令更符合CPU的执行特点,最大限度的发挥机器的性能,但是会导致执行顺序可能会与代码顺序不一致。以AtomicInteger为例。
2025-04-11 11:28:25
235
原创 MySQL in和exists的取舍
in的参数是子查询时,会将子查询结果存储在一张临时的表中(内联视图),然后扫描整个视图。之前说过要小表驱动大表,即先遍历小表再遍历大表,接下来看一下in和exists的区别。将主查询数据放到子查询中做验证,根据验证结果来确定主查询结果的去留。根据执行顺序也就得知了什么时候该用in什么时候该用exists了。以外层表作为驱动表,外层表先被访问,适合于外表大而内表小的情况。先执行子查询,适合于外表大而内表小的情况。使用exists数据库不会生成临时的表。in和exists的取舍。
2025-03-31 11:38:02
543
1
原创 MySQL的数据文件
mysql的数据都存放在datadir所指的位置,其中包含了mysql中创建的数据库,数据库中包含了表结构(frm文件)、表数据(myd文件)、表索引(myi文件).ibd和.ibdata 用于存储innodb存储引擎的表数据和索引信息。.myi 存储使用myisam存储引擎的表数据文件中任何索引的数据树。.frm 存放和表相关的数据信息,主要包括表结构的定义信息。.myd 存储myisam存储引擎的表数据信息。MySQL的数据文件。
2025-03-24 10:33:51
582
原创 与普通日期格式化对比,FastDateFormat 为何能线程安全?
将格式化格式、时区和国际化作为一个key存在了cInstanceCache中,cInstanceCache是一个ConcurrentHashMap,相当于相同的格式化格式、时区和国际化会使用同一个FastDateFormat实例。那么FastDateFormat为什么是线程安全的呢?首先FastDateFormat是有一个缓存的,在进行实例化的时候是通过cache缓存来获取实例的。而在使用FastDateFormat进行格式化的时候,是在方法中定义的Calendar局部变量,是不会出现线程安全问题的。
2025-03-24 10:27:09
505
原创 MySQL如何存储表情符号?
MySQL中的utf8其实是utf8mb3,最多只用3个字节存储字符,存储不了表情。如果要支持表情,需要使用完整的utf8字符集utf8mb4,可用4个字节来存储。默认mysql的字符集是utf8,排序规则为 utf8_general_ci。utf8和utf8mb4的区别。在存储表情的时候会报。
2025-03-18 11:41:44
1467
原创 困扰无数人的 POI 读取合并单元格内容难题,终于有解了
产品们想到的excel真是千奇百怪,这次又遇到一个读取包含合并单元格的excel文件,一开始直接读取,直接报空了,没办法,只能对于这些列进行判断是否为合并单元格。如果是合并单元格的话,使用单独的方法来进行读取。POI读取合并单元格内容。
2025-03-18 11:38:19
638
原创 连接数问题
在使用mysql时有时候会报too many connections错误,这是连接数过多导致的,然后就会去修改max_connections参数,但是这个参数也不能无上限的增大,容易造成机器内存不足,还是需要找到为什么会有这么多连接的原因。
2025-03-11 10:46:56
417
原创 Excel 后缀竟成 “拦路虎”?POI 读取报错原因大揭秘
由于有时候上传的是xls文件有时候上传的是xlsx文件,使用POIFSFileSystem来读取文件。使用WorkbookFactory来读取excel文件。POI读取excel报错。
2025-03-11 10:42:54
333
原创 MySQL忽略大小写问题
然后查了一下资料,说是utf8_general_ci中的_ci是指忽略大小写Case-insensitive,但是我只设置了字符编码utf8,没有设置为utf8_general_ci呀,原来utf8默认的是就是utf8_general_ci。今天使用MySQL查询时遇到一个问题,使用一个字符串去查询时,查出来两条数据,但是查到的数据大小写并不一样。果然是utf8_general_ci,好吧,那么如何修改呢?我查到了name为a和A的两条数据,这就很奇怪,难道mysql会忽略大小写吗?
2025-03-04 15:28:51
745
原创 Excel 图片插入难题?POI 三招轻松化解
使用HSSFPatriarch来将图片写入EXCEL中。注:在将图片添加到工作簿中时,必须将其存储为字节数组。POI操作EXCEL插入图片。
2025-03-04 15:26:45
533
原创 MySQL自动备份脚本
mysqldump命令将数据库中的数据备份成一个文本文件,表的结构和数据将存储在生成的文本文件中。将备份出来的数据还原到某个数据库中。备份一个数据库下的多个表。MySQL自动备份脚本。也可以登入数据之后进行。
2025-02-24 15:20:05
1065
原创 MySQL配置文件读取顺序
在启动MySQL数据库时可以没有配置文件,这种情况下,MySQL会按照编译时的默认参数设置启动实例。按照顺序读取配置文件,且如果多个配置文件中有相同的参数,则以读取到的最后一个配置文件为准。
2025-02-18 10:41:43
581
原创 别再瞎摸索!POI 操作 Excel 轻松添加下拉框
有时候通过excel将数据批量导入到系统,而业务操作人员对于一些列不想手动输入,而是采用下拉框的方式来进行选择。可以在EXCEL中的数据有效性看到数据来源。采用隐藏sheet页的方式来进行操作。
2025-02-18 10:39:53
304
原创 MySQL使用count进行行数统计
https://zhhll.icu/2021/数据库/关系型数据库/MySQL/基础/20.MySQL count/](https://zhhll.icu/2021/数据库/关系型数据库/MySQL/基础/20.MySQL count/)在使用count进行数据统计行数时,有时候会使用count(*),有时候会使用count(1),有时候会使用count(列名),那么这些有什么不同呢。当使用列名作为参数时,count函数会自动忽略null值,而使用*或者常量时,就会包含null值。
2025-02-07 14:36:19
468
原创 lombok常用注解
NoArgsConstructor, @RequiredArgsConstructor,@AllArgsConstructor:作用于类上,用于生成构造函数。@Data:作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor。@ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。lombok常用注解。
2025-02-07 14:33:16
327
原创 MySQL忘记密码了怎么办
validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;validate_password.special_char_count 整个密码中至少要包含特殊字符的个数;validate_password.number_count 整个密码中至少要包含阿拉伯数字的个数;validate_password.policy 指定密码的强度验证等级,默认为 MEDIUM;2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;0/LOW:只验证长度;
2025-01-14 10:55:29
558
原创 MySQL自定义函数
函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回。特别提醒一下:我在创建函数的时候出错了。MySQL自定义函数。
2025-01-07 15:51:03
367
原创 MySQL存储过程
存储过程一般是独立执行,而函数一般是作为其他sql语句的组成部分出现。减少了编译次数并且减少了和数据库连接次数,提高效率。INOUT 该参数既可以作为输入,也可以作为输出。存储过程是一组预先编译好的SQL语句的集合。IN 该参数可以作为输入,需要调用方传入。存储过程可以返回多个值,而函数只能返回一个。OUT 该参数可以作为输出,作为返回值。
2024-12-30 10:02:31
417
原创 Druid密码错误重试导致数据库超慢
有同事把项目的数据库密码配错了,导致其他所有连接该数据库的项目全部连接都获取缓慢了,一个页面加载要花费十几秒。由于连接的host全是我们服务器的ip,所以一开始想到的是服务器是不是被黑了,然后频繁的尝试破解数据库密码。如果失败5次后不想重试,直接退出呢?这样就算数据库恢复也不会连接到数据库了,可以这样配置。结果发现pid是我们自己的项目,拉下来代码一看,密码配置的不对。如果连重试都不想重试呢?这样配置的话失败5次之后,会休眠10s在进行重试。druid有个配置是连接重试次数。密码错误重试导致数据库超慢。
2024-12-30 09:58:48
504
原创 MySQL变量
用户变量针对于当前会话有效,用户变量在声明时必须进行初始化。仅在定义该局部变量的begin end中有效。MySQL变量分为系统变量和自定义变量。自定义变量的步骤:声明、赋值、使用。自定义变量分为用户变量和局部变量。系统变量有全局变量和会话变量。
2024-12-24 10:20:16
434
原创 MySQL查询顺序
在sql中对于null值一定要小心处理,true or null的运算结果是true,而false or null的运算结果是null,一旦混入了null,结果就会是null,所以在使用in或者or来进行逻辑运算时,一定要考虑是否会涉及null值。在order by中也可以使用case表达式来根据条件逻辑动态的调整排序项。在进行MySQL查询之前首先要先知道MySQL执行查询语句的执行顺序。使用聚集函数进行计算(sum、max、min、count等)使用order by进行排序。
2024-12-17 11:55:01
429
原创 MySQL约束
MySQL约束数据库有六大约束,分别为NOT NULL 非空约束,用于保证这个字段不能为空DEFAULT 默认约束,用于保证该字段有默认值PRIMARY KEY 主键约束,用于保证该字段可以唯一表示该行记录,唯一且非空UNIQUE 唯一约束,用于保证该字段的唯一性,可以为空CHECK 检查约束(MySQL不支持该约束)FOREIGN KEY 外键约束,用于限制两个表的关系,用于保证该字段必须来自于主表关联列的值(在从表中添加外键约束,用于引用主表中某列的值)示例:create tab
2024-12-10 14:42:34
408
原创 xuggle操作视频
有个需求是要读取视频的宽高,找到了Xuggle和FFmpeg两种方式,FFmpeg很强大,但是我并不需要那些功能,所以使用了轻量一点的Xuggle。该依赖中包含有xuggle-xuggler且maven仓库中存在。可能maven仓库中没有该依赖,可以下载后放到本地仓库或私服。xuggle操作视频。
2024-12-10 14:39:00
675
原创 MySQL删除数据要谨慎
truncate比delete速度快,因为delete每删除一条数据需要在事务日志中为删除的每行数据进行记录,而truncate则通过释放数据页来删除数据,且只在事务日志中记录页的释放。delete删除不会删除自增长字段,再次新增字段时从断点继续自增,truncate删除数据之后自增长字段从1开始。delete可以加where条件进行删除,truncate不可以,只能删除全表数据。delete删除会返回删除的条数,truncate删除不会返回。delete删除可以回滚,truncate删除不可以回滚。
2024-12-03 18:13:15
515
1
原创 java获取汉语拼音
当然是有解决方案的,该工具提供了一个外挂,可以自定义一些词的多音字组合。之前有个需求是要显示汉语拼音,然后找了一个工具包。但是有时候是多音字的怎么处理的,比如长沙市。后续的多音字直接在该文件中加入就行。在一块的话读changsha。
2024-12-03 18:08:04
393
原创 博客搭建之路:hexo博客next主题使用echarts图表
在next/layout/_layout.swig文件中添加echarts引用(在。在next/scripts/helpers下创建charts.js。在next/layout/archive.swig文件中修改。在next/layout/page.swig文件中修改。在next/layout/page.swig文件中修改。hexo博客next主题使用echarts图表。创建charts.js。添加echarts引用。标签页增加标签统计图。分类页增加分类统计图。归档页增加归档统计图。
2024-11-26 14:31:05
331
Mycat-server-1.6.7.4-release-20200105164103-mac.tar.gz
2022-05-20
apache-shardingsphere-incubating-4.0.1-sharding-proxy-bin.tar.gz
2022-05-13
java中的强引用软引用问题
2017-05-21
myeclipse报错自动关闭
2017-05-19
java内部类中的局部变量
2017-05-19
关于JavaScript的事件
2017-04-24
myeclipse下编写的jsp中文乱码
2017-04-23
html表格单元格焦点事件问题
2017-04-22
myeclipse中编写html表单
2017-04-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人