自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 数据库三大范式总结

可见三大范式的目的是将表最大化精简,这样做的好处是减少数据冗余和尽可能地做到数据一致性。想象一下,如果代表同一个意义的字段在多个表中都有存储,那不就是一种数据冗余码,这种数据冗余也给数据的一致性提高了难度。修改一个字段值,必须把所有相关表的相关字段都修改一遍,如果有一个表修改失败就造成多个表中代表同一含义的多个字段值数据不一致。实际业务场景中,也不会完全按昭三大范式去设计数据库,因为太严格的话,会降低数据查询的性能。

2025-01-24 15:29:32 350

原创 MySQL隔离级别和锁应用总结

mysql读已提交隔离级别下要保证数据一致性,使用事务即可,事务会在更新数据时自动应用排它锁,不需要手动使用锁。这种情况出现的概率比较小,如果出现的不频繁就再更新一次,如果比较频繁就做个定时任务,定时更新数据。共享锁也叫读锁,一个事务对某条数据加了共享锁,别的事物只能读这条数据,如果要写就会处于阻塞等待状态。排他锁也叫写锁,一个事务对某条数据加了排他锁,别的事物如果要读或者写这条数据都会处于阻塞等待状态。排他锁也是可重复读和读已提交隔离级别下事务进行写操作时自动应用的。常用的锁也就是排他锁和共享锁。

2025-01-24 09:47:53 248

原创 MySQL数据库锁

读已提交隔离级别下,只要某个事务先执行到更新操作,就会锁住要更新的数据,直到事务提交,其他要更新目标数据的事务都得等待,此时所有事务读取的目标数据都是一致的,如果目标数据的目标字段不冲突,各个抢到锁的事务一次提交事务即可,没有更新冲突的情况,如果两个或两个以上的事务要更新的目标字段冲突,也会按抢到锁的顺序一次更新,目标字段的更新结果就是最后一个事务的更新结果。由于所有并发的事务都是基于同一个原目标数据做计算,所以即使是只有最后一个事务的更新也被保留下来,也是数据一致的,因为原数据已经是最新的数据。

2025-01-23 17:53:51 635

原创 mysql的mvcc

可序列化隔离级别下,事务都是串行的,不存在并发,所以此隔离级别下,mvcc也是不运作的。最小事务id<=db_tx_id<=最大事务id,db_tx_id不在活跃的事务id列表中,说明该结果已经提交,应可见,db_tx_id在活跃的事务id列表中,则说明此创建该结果的事务还没提交,该结果应不可见。只有在刚进入事务时会创建一个视图,由于mvcc的过滤原则时只提取已提交的数据,所以随着时间的推移,进入事务之后的查询,能查出来新增的数据的事务id都是比刚进入事务时查出来的数据事务id大,新的数据不会被筛选出来。

2025-01-20 14:15:50 1125

原创 IP地址分类

IP地址的分类

2024-08-02 16:33:46 234

原创 子网掩码的计算

子网掩码的计算

2024-08-02 16:32:59 471

原创 非对称加解密和签名

非对称加密算法的应用

2024-07-15 17:48:25 524

原创 tx-lcn使用

tx-lcn使用

2024-04-07 17:28:27 1472

原创 使用插件将swagger文档转html或pdf

github上有maven开源插件swagger2markup将swagger文档转为.adoc格式的文档,另外一个maven开源插件asciidoctorj-pdf则可以将.adoc格式的文档转为html和pdf。由于GitHub访问不稳定,在gitee上有镜像项目。所以我就贴gitee上的项目地址了。实现从swagger文档转为html或pdf的项目有两个。一个一个说。

2024-03-23 23:36:08 1407 1

原创 Linux命令_用户和权限相关

linux 用户权限相关命令

2024-03-12 11:05:27 462

原创 iptables

使用 -N 选项可以创建自定义链iptables -t 表 -N 需要定义的链名例如:创建一个叫做IN_WEB的自定义链 iptables -t filter -N IN_WEB实现别的主机不能ping通本机 iptables -t filter -I IN_WEB -p icmp --icmp-type 8/0 -j REJECT命令解释:-p icmp: 这指定了协议类型为 ICMP。ICMP 是用于在 IP 主机和路由器之间传递控制消息的协议。

2024-01-30 12:40:43 1067

原创 linux服务初步学习

stop);;restart);;status);;*)exit 1;;

2024-01-26 10:16:06 1165

原创 Linux安装应用程序的几种方式

安装python使用rpm安装,也可以用源文件安装,感觉rpm安装更省事,直接一个命令 rpm -ivh 软件名.rpm ,如果缺少依赖会有提示,根据提示安装缺少的包,还是用 rpm -ivh 软件名.rpm 这个命令安装,如果安装不上有冲突可以强制安装 rpm -ivh --force 软件名.rpm。三种方式源码安装最困难,因为要安装的程序不一定是C写的,可能是其他语言写的,比如yum是用python写的,tomcat是用Java写的。安装yum需要先安装python,因为yum是用python写的。

2024-01-25 13:37:41 2447

原创 docker中WireGuard使用

docker中安装wire-guard

2024-01-19 14:46:46 3811

原创 wsl下的Ubuntu安装openVPN

服务端私钥路径:/etc/openvpn/easy-rsa/pki/private/server.key。客户端私钥路径:/etc/openvpn/easy-rsa/pki/private/client.key。服务端证书路径:/etc/openvpn/easy-rsa/pki/issued/server.crt。客户端证书路径:/etc/openvpn/easy-rsa/pki/issued/client.crt。CA根证书生成位置:/etc/openvpn/easy-rsa/pki/ca.crt。

2024-01-12 14:50:28 2194

原创 docker使用,Dockerfile构建示例

docker run -d --name 容器名 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 镜像名:tag(或者镜像id) #从一个镜像启动一个容器(或者叫从一个镜像启动一个虚拟机),并且指定容器名称,容器端口和宿主机端口映射关系,将容器某个目录持久化到宿主机某个目录。Docker 会从这个目录开始构建镜像。docker logs -f -t --tail 100 容器id #查看容器日志(比如容器的镜像只是把jdk和一个业务jar包打在一起,那么容器跑起来,日志其实就是jar包的日志)

2024-01-04 17:57:31 587 1

原创 windows WSL Ubuntu安装docker

打开Windows的powerShell 运行命令 wsl -l -v如上图我的版本是1.0 VERSION列是1要切换到wsl2 需要下载最新的linux内核安装包 地址: https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package 这个地址步骤四,如下图:然后安装。

2024-01-04 09:29:39 894

原创 文件预览服务器kkfileview安装部署(linux 版)

使用的时候将一个被预览的文件的地址做如下处理:先base64编码再urlencode得到一个编码后的地址encodeUrl,用这个地址和预览服务的地址拼接出最终的预览地址 http://localhost:8012/onlinePreview?或者从码云(gitee)https://gitee.com/kekingcn/file-online-preview/releases 下载发行版,用maven自行编译得到 kkFileView-x.x.x.tar.gz。安装完依赖再用步骤2验证一下。

2023-09-21 11:43:39 2257

原创 linux中更新jar包中指定文件和jar包

1、进入目标jar包所在路径2、先解压 jar xvf 目标jar包名.jar 目标文件在jar包中的路径+文件名(例如 BOOT-INF/classes/cn/pinming/guarantee/web/controller/CJDBApiController.class)3、再替换文件,用修改后的文件替换解压出来的文件(使用可视化客户端如xshell或者cp命令拷贝都行)

2023-09-09 11:22:03 1202

原创 WebFlux使用

当我们运行这段代码时,将输出 “Result: 2”、“Result: 4”、“Result: 6”、“Result: 8”、“Result: 10”,分别对应原始值的两倍。是一种实现了 Reactive Streams 规范的发布者(Publisher),它可以发送一个或零个元素,并提供了丰富的操作符来处理异步流。当我们运行这段代码时,将输出 “Value: 42”,表示我们成功创建了一个包含值 42 的 Mono,并且成功接收到该值。方法接受一个参数作为元素的值,并返回一个包含该元素的 Mono。

2023-07-20 17:34:28 489

原创 logback日志框架使用

1、导包,如果是springboot项目就不用,spring-boot-starter里已经导过了。2、在项目resources目录下添加配置文件:logback.xml。

2023-07-15 13:00:45 139

原创 juc的CountDownLatch

CountDownLatch

2023-06-30 13:32:10 82

原创 信号量控制类Semaphore

信号量控制类Semaphore

2023-06-30 11:37:08 73

原创 并发修改的数据在MySQL等关系型数据库使用的锁

3、用乐观锁,乐观锁就是在数据库表上添加一个version字段,每次更新都对这个字段+1,每次更新前先读出version的值,更新时将version也一并作为更新条件,如果不成功再执行上面的查询更新,直到成功为止。比如第一个线程释放锁后还未提交事务,第二个线程获得锁,执行查询,查询到第一个线程操作前的数据,继续往下执行。注意这里两个对数据库的操作一个查询,一个更新。2、集群部署,很明显不是同一个进程,甚至不是同一台服务器,jvm本地锁自然失效,本地锁只能对统一进程内的多个线程起到锁定同步作用。

2023-06-29 17:31:20 161

原创 并发修改的数据在redis使用的锁

lua脚本可以一次性发送多条指令给redis所以能保证判断和删除的原子性,redis默认支持lua脚本,所以可以不配置lua环境的情况下使用lua脚本。,误删产生原因:理论上加上自动续期的功能后就不会误删,但是如果别的应用程序没有加锁的步骤,只有解锁的步骤,直接释放锁就造成了误删。,要自动续期原因是:过期时间设置过短,业务逻辑还没走完,锁就释放了,那么跟没加锁是一样的。,加锁解锁的逻辑如果有好几条指令要一起执行,不能被其他线程分开,采用lua脚本实现原子性。使用Redisson的分布式锁。

2023-06-29 17:28:37 302

原创 清华的开源软件镜像地址

清华的开源软件镜像地址:https://mirrors.tuna.tsinghua.edu.cn。

2023-06-28 09:33:53 6397

原创 maven 的scope取值 compile,provided,runtime,test

maven scope

2023-06-17 16:27:24 709

原创 linux系统添加定时任务

dev/null 表示空设备文件 2>&1 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。/user/local/deploy/caseiBackups/$(date -d “today” +“%Y%m%d_%H%M%S”).zip: 打好的压缩包路径。/usr/local/deploy/apache-tomcat-7.0.57 :需要打包的文件的路径。/usr/local/deploy/caseiBackups/ :要查找的目录。-type 表示查找普通类型的文件,f表示普通文件。

2023-05-08 14:08:57 485

原创 nohup 后台启动jar包

2>&1 >log.file :错误输出到终端,标准输出重定向到文件log.file,等于 > log.file 2>&1(标准输出重定向到文件,错误重定向到标准输出)。参考:https://blog.csdn.net/puff_/article/details/122234941。log.file 表示将标准输出输出到log.file中,也就相当于 1>log.file。2> error.log 表示将错误输出到error.log文件中。2>&1 也就表示将错误重定向到标准输出上。

2023-05-08 14:05:10 787

原创 pom文件中个别标签的意思

标签:远程仓库,用于配置当前项目下载依赖的maven仓库地址。标签:分发配置,用于配置当前maven项目要部署的远程仓。>标签:插件仓库,用于配置当前项目所用的插件的下载仓库。

2023-05-08 10:21:23 1036

原创 zabbix安装部署,设置内存使用监控,日志监控及邮件报警(一)

将localhost改为真实的IP。

2023-04-18 23:12:32 260

原创 could not generate dh keypair

Could not generate DH keypair

2023-04-06 17:28:35 399

原创 配置华为云yum源

三、下载华为云yum源 :wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo。阿里云:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo。二、删除原yum源:cd /etc/yum.repos.d && rm -rf *

2023-03-30 09:39:23 3024

原创 Java注解annotation的认识

Java注解学习

2023-03-25 20:00:09 110

原创 基于com.google.guava 的异步回调

基于com.google.guava 的异步回调

2023-02-26 21:29:59 264

原创 @Async的使用

@Async快速入手

2023-02-25 01:21:13 438

原创 java NIO多路复用 原理

一个请求过来时,服务器程序(如tomcat)创建一个与这个请求连接对用的通道,并将此通道对应的文件描述符注册到上述创建的文件描述符集合中。直白地说,在Linux系统下,一切皆文件,我们不管有什么操作,都离不开对文件的读写,而文件描述符实际上就是一个索引值,它会指向一个文件,这个文件维护了进程对文件操作的记录,说白了,看着这个描述符指向的文件,我就知道我下一步要读写哪个文件了。:该函数用于控制某个epoll文件描述符上的事件,可以注册事件,修改事件,删除事件。:操作系统内核缓存中已经有数据,可以读取了。

2023-02-19 00:35:04 255

原创 Spring mvc的controller的同一个接口同时接受多个请求时,程序执行是并发的

在spring中关于并发请求,线程的分配

2023-02-18 14:50:41 2496

原创 开闭原则-软件设计原则

开闭原则

2023-02-18 14:12:54 69

原创 Threadlocal理解

获取ThreadLocal实例值的时候,首先获取当前线程,将当前线程作为key从ThreadLocal类的类变量threadLocals(类型是 static ThreadLocalMap)中获取ThreadLocal实例值。这种数据类型的数据只属于本线程,只能在本线程内访问和修改,其他线程不能访问,更不能修改,所以它天然是线程安全的数据类型。上述代码创建一个localInt变量,由于ThreadLocal是一个泛型类,这里指定了localInt的类型为整数。

2023-02-17 23:09:27 67

空空如也

空空如也

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

TA关注的人

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