自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DEVZYH

不要辜负这个最好的时代

  • 博客(20)
  • 收藏
  • 关注

原创 MySQL5.7使用in查询不走索引

前提有一个订单表,4000w+的数据量。因为某些原因,需要执行一下这条查询SQL,简化后如下,in内有4w个数据:执行后发现特别慢,且无法查询出结果。

2022-06-14 18:34:59 1724

原创 MySQL分页查询优化

LIMIT分页查询SQL查询语句: select * from platform_user_trade limit start,1000表数据量在两亿行左右,id列为主键。通过limit语句分页查询表数据。start表示当前分页的起始行数。start取值查询耗时情况:start参数取值查询耗时(单位:秒)13.056100003.2731000003.27710000006.0771000000052.94出现的问题:当st

2022-01-18 17:54:37 1261

原创 Java8支持TLSv1.3协议请求

Java默认使用的协议版本Java版本HTTPS请求默认使用的TLS版本支持的协议JDK7TLSv1TLSv1、TLSv1.1、TLSv1.2、SSLv3JDK8TLSv1.2TLSv1、TLSv1.1、TLSv1.2、SSLv3JDK11TLSv1.3TLSv1、TLSv1.1、TLSv1.2、TLSv1.3、SSLv3协议版本不支持的异常信息Exception in thread "main" javax.net.ssl.SSLHandshakeE

2021-12-21 22:19:34 10312 1

原创 金额数据处理

BigDecimalflot和double进行数字计算时会有精度上的丢失,在一般计算中是没有问题的。涉及到金额上的计算就会产生比较大的影响,这时推荐使用java.math包的BigDecimal类。下面介绍BigDecimal常用的方法。类常用方法方法说明BigDecimal(double val)使用double数值构造BigDecimal对象BigDecimal(int val)使用int数值构造BigDecimal对象BigDecimal(String

2021-12-10 19:06:52 217

原创 活锁的产生

活锁定义程序一直在运行,也没有被阻塞,却一直获取不到结果。活锁一般是因为代码上流程的问题导致的。活锁会一直消耗系统资源。相关案例特定状态的单据需要同步给其他系统,同步成功后更改状态。原有流程如下:1. 根据指定状态获取待同步数据。2. 循环同步单据到其他系统。3. 同步成功后更新当前单据状态。4. 同步失败跳过当前单据执行下一个。5. 再次重复1的动作。当对方系统出现问题时,单据就会一直尝试同步,一直消耗系统资源,从而影响其他任务的执行。以及产生大量的错误日志。

2021-12-08 14:07:34 369

原创 数据库查询超时排查

问题出现系统接口调用方告诉我接口返回错误信息,查询日志之后发现如下报错:org.springframework.dao.DataAccessResourceFailureException:org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransi

2021-12-07 16:53:31 2427

原创 自定义线程池

线程池简介Java的线程与系统的线程一一对应,创建线程的系统资源开销比较大。过多的线程会占用更多的系统资源,线程的上下文切换也会带来系统资源开销。线程池可以对线程进行统一管理,平衡线程与系统资源直接的关系,提高系统资源利用率与程序稳定性。创建一个自定义线程池代码如下:// 使用指定参数创建一个线程池ThreadPoolExecutor executor = new ThreadPoolExecutor( 1, // 最大核心线程数量

2021-12-05 00:38:28 1095

原创 SpringDataJDBC配合Mybatis使用

Spring Data JDBCSpring Data JDBC是Spring Data家族的一部分,它使实现基于JDBC的操作变得容易。这个模块处理对基于JDBC的数据访问层的增强支持。支持QueryDSL,通过 JavaAPI 构建类型安全的 Sql 查询。具体可搜索QueryDSL。Spring Data JDBC的save方法即是新增又是更新,但不推荐用于更新数据。MybatisMyBatis 是支持定制化 SQL以及高级映射的优秀的持久层框架。Mybatis官网:https:/

2021-09-11 16:03:06 2292 1

原创 代码常见缩写

缩写英文全称reqrequestrespresponseresresourceappapplicationauthauthorizationdevdevelopenvenvironmentdbdatabasepkgpackagesvrserversvcservicecertcertificatemsgmessageaddraddresstmptemporarytemp...

2021-08-03 17:00:27 1127

原创 Java操作数据库出现的时间差

问题复现使用参数占位符的形式执行SQL时,若传入的类型为时间类型则可能产生因时区导致的时间差,从而造成数据异常。代码如下:public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); Properties prop = new Properties(); prop.load(Resources.getResourceAsStream

2021-06-03 18:03:11 255

原创 Docker常用命令

Docker安装curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun镜像拉取docker pull 镜像名称:镜像版本镜像查看docker images镜像运行MySQLdocker run -d -p 3306:3306 --name mysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="root" mysql:5.7# -d 后台运行

2021-06-01 18:05:48 244

原创 WSL2下安装的RabbitMQ无法访问

问题复现WSL2下安装的RabbitMQ供本机访问使用。WSL2对地址进行了优化可以直接使用localhost访问到WSL2的Linux子系统启动的服务。RabbitMQ管理端可以正常通过localhost或者ip访问。应用程序可以正常通过ip访问无法通过localhost访问。解决方式进入子系统的RabbitMQ配置文件: vim /etc/rabbitmq/rabbitmq-env.conf在文件内取消注释或增加如下内容:NODE_IP_ADDRESS=127.0.0.1

2021-05-13 20:43:28 699 2

原创 压缩WSL2系统的vhdx文件

vhdx文件vhdx文件是Windows平台下Hyper-V虚拟机的虚拟磁盘文件。WSL2依赖Hyper-V实现,随着使用时间变长vhdx内会产生冗余文件,可以使用diskpart工具进行压缩。压缩方式关掉使用vhdx文件的进程。WSL关机命令如下:wsl --shutdown进入diskpart工具,cmd下输入如下命令:diskpart选择vhdx文件,路径需写绝对路径:select vdisk file = "D:/Ubuntu/ext4.vhdx"执行压

2021-05-13 20:36:06 8089 5

原创 ufw命令的基本使用

ufw 简介Ubuntu 的默认防火墙配置工具是 ufw。ufw 的开发旨在简化 iptables 防火墙的配置。ufw 提供了一种用户友好的方式来创建基于 IPv4 或 IPv6 主机的防火墙。启用 ufw安装 ufw:sudo apt-get install ufw。启用 ufw:sudo ufw enable。禁用 ufw:sudo ufw disable。查看状态sudo ufw status放行端口# 放行 tcp 端口sudo ufw allow 端口号/tc

2021-05-13 20:35:11 1524

原创 @RequestParam出现的数据丢失

问题复现在 Sping MVC 中我们经常使用 @RequestParam 注解来获取请求传入的参数。正常情况下可以正常使用不会产生问题,当传入的参数过大时就会出现参数不全的情况。下有一段控制器代码如下:@RestControllerpublic class ApiController{ @PostMapping("in") public ResponseMessage inbound(@RequestParam Map params) { System.out.println

2021-05-13 20:33:55 1219

原创 类的执行过程

案例Person.javapublic class Person { public String name; public char sex; public int age; public void show(){ int age = this.age + 20; System.out.printf("二十年后 姓名: %s 性别: %c 年龄: %d",name,sex,age); }}PersonTe

2021-05-13 20:33:13 199

原创 Shell常见语法

执行 Shell输入完整脚本文件路径即可执行。提示:权限不够,则执行chmod u+x 文件名。执行bash shell文件名称。简单的脚本#!/bin/bash# 上面的是指定解释器echo $PATHecho 路径输出完毕!echo `date +%Y%M%d`接受输入参数执行shell文件时,在文件后使用空格隔开多个输入参数。shell文件中使用输入参数参数说明$n用户输入的第n个参数,从1开始$#用户输入的擦书总数$*用户输入

2021-05-13 20:32:07 94

原创 编码相关知识

为什么要编码计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个。人类要表示的符号太多,无法用一个字节来完全表示。要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码。常见编码格式编码描述ASCIIASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。ISO-8859-1(扩展ASCI

2021-05-13 17:12:54 108

原创 原码反码补码的转换方法

注意:下面内容中的数字均用8位二进制数表示。原码最高位(最左边)代表符号位,0代表正数,1代表负数。例: 1 的原码是 0000 0001-1 的原码是 1000 0001反码正数的反码与原码一致。负数的反码是对原码按位取反,只是最高位(符号位)不变。例: 1 的反码是 0000 0001-1 的反码是 1111 1110补码正数的补码与原码一致。负数的补码是该数的反码加1。计算机数字运算均是基于补码的。单字

2021-05-13 17:11:45 3921

原创 进制及其转换

常用的进制生活常用的进制是十进制,十进制的权重为:10^0、10^1、10^2...。计算机底层采用的是二进制,二进制权重为:2^0、2^1、2^3、2^4...。底层二进制使用最高位(最左边)的代表符号位,若该位是0则表示为正数,若该位是1表示为负数。书写二进制时习惯上从右向左没四位间隔一个空格。进制表示二进制0b或0B开头。八进制0开头。十六进制0x或0X开头。进制转换正十进制转二进制:除二取余法、拆分法(将数字拆分为若干个权重的和,有该权重写1,其它写0)。45 使用拆

2021-05-13 17:01:49 357

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除