自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 8 Map 新增方法详解

动态计算键的新值(处理存在/不存在情况):安全获取值,若key不存在则返回默认值。:替换所有值(基于键值对的函数计算):通过Entry对象创建不可变Map。:创建0-10个元素的不可变Map。:key不存在时通过函数生成值。:key存在时通过函数计算新值。:合并键值(处理null值):仅当key不存在时插入值。:创建键值对Entry对象。:遍历Map的所有键值对。:创建Map的不可变副本。:仅当键值匹配时才删除。:仅当旧值匹配时才替换。:替换存在的key的值。

2025-06-12 20:04:08 326

原创 MySQL中的事务隔离级别

说明:事务1,在查询id=1的数据时,没查到。这时候事务1中,再查询id=1的数据其实还是查不到的(因为需要支持可重复读),事务1进行插入id=1的数据,发现主键冲突,插入失败,这时候事务1再进行查询id=1的数据,其实还是查不到的。引发的问题:不可重复读,即在同一事务中,多次读取同一数据可能得到不同的结果,因为其他事务可能在两次读取之间提交了修改。引发的问题:脏读,即一个事务读取了另一个事务未提交的数据,如果后者回滚,前者读取的数据就是无效的。描述:这是最低的隔离级别,允许事务读取其他事务未提交的数据。

2025-03-17 13:55:54 353

原创 带着你读源码,了解Springboot启动原理(一)

关键的run方法,请继续关注后续文章。

2025-03-07 14:36:23 287

原创 Java集合框架中常用类及其底层数据结构的详细分类

有序存储,支持高效查找、插入和删除(时间复杂度 O(log n))。:内存连续,支持随机访问,增删效率低(需扩容或移动元素)。:表示节点与边的关系,Java 标准库未直接提供图实现。:优先队列,按优先级出队(通常是小顶堆或大顶堆)。:后进先出(LIFO),通过限制操作实现栈语义。:内存不连续,增删效率高,随机访问效率低。:先进先出(FIFO)或按优先级出队。

2025-02-20 09:23:07 1034

原创 Spring中常见的设计模式

Spring框架是一个庞大的生态系统,设计模式的应用广泛分布在其各个模块中。

2025-02-11 09:41:53 469

原创 数据库死锁及解决办法

加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获得写锁(排他锁)。当两个事务互相之间需要等待对方释放获得的资源时,如果系统不进行干预则会一直等待下去,也就是进入了死锁(deadlock)状态。

2025-01-10 15:02:49 626

原创 vm配置固定ip

直接上图。

2024-12-07 13:30:56 257

原创 使用vm配置网络

vm使用nat模式,导致vm中docker部署的服务,无法通过局域网中其他机器连接。三张图看懂vm中,三种网络模式。

2024-12-07 13:28:32 294

原创 一款高可用的文件系统服务minio使用教程

【代码】一款高可用的文件系统服务minio使用教程。

2024-11-05 10:18:46 364

原创 Mysql的Processlist怎么用

这个语句可以使客户端发来的执行语句也可以是内部执行的语句,默认只显示前100个字符,也就是你看到的语句可能是截断了的,要看全部信息,需要使用 show full processlist。注意:root用户使用此命令能看到所有正在运行的线程,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。这样就过滤出来哪些是正在干活的,然后按照消耗时间倒叙展示,排在最前面的,极大可能就是有问题的链接了,然后查看 info 一列,就能看到具体执行的什么 SQL 语句了。

2024-10-18 10:08:44 2009

原创 记录一次系统进行服务器迁移的过程

由于系统有mysql数据库、上传图片附件、生成pdf文件等占用磁盘空间大的问题,最后通过定位,证实了为图片目录过大,将一点几个T的磁盘分区占满了,为了能保证系统能正常启动,临时将历史图片目录压缩成tar,移到根目录下面。命令说明: -o代表需要将镜像备份到的目录 test:2024.09.06.1代表需要备份的镜像名称(这里记住用镜像名称,如果使用惊醒id备份的话,后期reload后镜像出不来)在目标服务器上,通过sftp链接源服务器后,将备份的镜像文件下载过来,进入tar所在目录,载入。

2024-09-16 15:37:07 1079

原创 使用vscode写java

Ctrl + Shift + Alt + (Arrow Key) 也是插入多行光标的[方向键控制]Ctrl + Shift + Alt + PgUp/PgDown 也是插入多行光标的[整屏生效]2、Ctrl+Shift+p ,搜索框中输入create,并找到创建java项目。1、Ctrl + Shift + X 搜索插件 Maven For Java。Ctrl + Shift + M 或 Ctrl + J 打开问题展示面板。Ctrl + Shift + L 选择所有出现在当前选中的行-操作。

2024-09-16 15:33:59 3507

原创 多版本node管理工具nvm

在项目开发过程中,使用到vue框架技术,需要安装node下载项目依赖,但经常会遇到node版本不匹配而导致无法正常下载,重新安装node却又很麻烦。为解决以上问题,nvm:一款node的版本管理工具,能够管理node的安装和使用,使用简单,可下载指定node版本和切换使用不同版本,方便了node的使用。

2024-09-16 15:27:22 1106

原创 运行在docker环境下的图片压缩小工具

说明:运行容器时需要执行目录,防止在容器内部找不到目录,程序报错。,若获取jar包失败,可尝试将jar下载本地,然后打入本地仓库。说明:使用时根据实际需要调整源码。

2024-09-16 14:40:28 877

原创 Docker配置nginx,及各种代理配置

在一些没有cookie的网站,或者不支持cookie(比如app端),在请求资源地址时,通过在资源路径后边加上json来保持会话,使用不同uri访问服务器,hash后的结果也不一样。在上面的示例中,server指令定义了一个虚拟服务器,监听端口为80,服务名为example.com和www.example.com,根目录为/var/www/example.com,在配置文件中添加以下内容即可。我们还可以通过设置权重(weight)的方式来控制每台机器的负载量,如果一台机器的带宽很大,可以将其权重设高一点。

2024-05-13 13:53:15 2014 2

原创 SpingBoot常用的五个扩展点

本文前三个讲的是Spring Boot里面自己有的扩展点,后两个因为Spring Boot底层调的是Spring的源码,所以属于Spring里面的扩展点,所以如果这么算的话Spring里面的扩展点还有很多扩展点,比如InitializeBean、Aware等等。定义了这9个初始化器,那一定是有地方在调它们的,不然怎么会打印出来呢,那具体在什么地方调的,我们在自己的初始化器的地方打断点,看到已经进来了,然后看下方的堆栈信息,这个就是调用的地方。此时我们再看下扩展点图。

2024-02-23 14:28:58 913

原创 idea检出提示token解决

我们在拉取的时候,只需要gitlab生成token,将②改成带token的url,即③,最终拉取的地址为④。一次在拉取gitlab代码时提示Token问题,这里给出解决方法,下面给出几个url地址。

2024-02-19 15:45:54 3165

原创 docker中导出mysql binlog

no-defaults 可以避免 my.cnf 里配了 [client] 某些 mysqlbinlog 没有的参数导致 mysqlbinlog 失败。–skip-gtids 不保留 GTID 事件信息,这样回放 binlog 时会跟执行新事物一样,生成新的 GTID。加-v,从行格式中重建伪SQL(带注释),不显示 binlog_rows_query_log_events 参数效果。–base64-output 不显示行格式,如果同时加 -v 参数,可以从行格式中解码为带注释的伪SQL。

2024-02-19 15:40:01 582

原创 记录一次Linux磁盘满了处理过程

新年开工第一天,正在兴致勃勃的调试代码,由于正在开发的功能需要借助公司测试环境与第三方进行接口调用,但突然发现测试环境登录不了。最后发现是一个程序生成pdf文件目录比较大,进行删除无用pdf即可,或扩展磁盘空间,这里由于是测试环境,则进行删除了操作。查看实际的目录磁盘占用情况。目录占用磁盘空间比较大。进入指定目录后,执行。

2024-02-19 15:35:35 461

原创 使用docker部署jar包

配置好sftp后,指定Mappings后,即可选中文件然后,Deployment - Upload to。

2023-10-20 19:14:28 212

原创 Docker搭建Prometheus+Grafana监控系统

导入仪表盘模板ID:12423。

2023-10-14 17:40:24 137

原创 Docker、Docker-compose 入门教程

docker 是一个开源的应用容器引擎。启动容器参数:-d #后台运行-p #端口映射,-p 8080:80, 8080 表示宿主机端口,80 表示容器端口-v #目录映射,-v /data/nginx:/opt/nginx,/data/nginx表示宿主机目录,/opt/nginx,/opt/nginx表示容器目录–name #设置容器名称nginx #容器镜像查看正在运行的容器docker ps参数:-a #查看运行的所有容器,包括运行状态和停止状态的容器启动、停止、重启容器。

2023-10-05 12:46:56 492

原创 使用IntelliJ IDEA连接Docker

3、安装后,打开IDEA,依次进入File -> Settings -> Build,Execution,Deployment -> Docker -> TCP Socket -> Engine API URL,添加tcp://ip:2375。找到ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock。2、目标机器也需要先安装Docker,具体安装教程,可百度或看我的其它文章。9、 重新加载防火墙。

2023-10-05 12:08:01 763

原创 docker部署canal,并在springboot中使用

server_id=66 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复。第二个红框是你数据库的用户和密码,这个用户信息一定是要有全部权限的用户,非root用户;#找到文件位置后 exit退出容器 将容器内部文件copy到上面新建的目录中。log-bin=mysql-bin # 开启 binlog。binlog-format=ROW # 选择 ROW 模式。第一个红框是你需要监听数据库的地址和端口;#启动新容器,并挂载上面配置的相关目录。

2023-05-30 17:20:29 1310

原创 Tomcat是如何处理请求的(下)

再来看Htp11NioProtocol,和Http11Protocol非常类似,在它的底层有一个NioEndpoint,NioEndpoint中也存在一个Acceptor线程,但是需要注意的是,现在虽然是No模型,但是Acceptor线程在接收Socket连接时,并不是非阻塞的方式,仍然是通过阻塞的方式来接收Socket连接。也就是如何判断一个请求的请求体何时结束?所以,如果大家现在用的是Tomcat中的BIo模式,如果要进行性能调优,就可以调整该线程池的大小,默认10个核心线程,最大为200个线程。

2023-05-20 17:26:24 314

原创 Tomcat是如何处理请求的(上)

所以,我们发现,我们定义的某个Servlet,在Tomcat中可能会存在多个该类型的实例对象,所以Tomcat需要再抽象出来一层,这一层就是Wrapper,一个Wrapper对应一个Servlet类型,包装器中有一个集合,用来存储该包装器对应的Servlet类型的实例对象。2.假如,现在有一段逻辑,想让多个应用内的Servlet公用,就像切面一下,我们希望在请求被这些应用处理之前,能先执行公共逻辑。

2023-05-20 16:55:08 386

原创 使用PostMan进行接口、压力测试

下载地址:https://www.postman.com/选择对应系统版本选择Collections,创建测试窗口创建接口测试1. 创建测试集2. 编写脚本为了检查每次请求都能满足时延要求,需要对每次的请求,增加test脚本,用以检验请求的耗时在Tests中增加检测脚本,如下:脚本里首先检查方法执行正常,其次检查请求返回要求耗时小于200ms脚本是基于JavaScript语言的,具体可以学习可参考右侧说明同时,注意到上述的标签页中,还有一个Pre-request Script标签页,这里简单介绍一下,这

2023-05-07 12:10:35 8697

原创 记录一次线上OOM问题排查处理过程

项目为docker部署的springboot单体项目(非前后端分离),前端文件是集成在项目的类路径的resources路径下的。2. 接下来一顿度娘,发现可以使用Memory Analyzer做分析,于是到官网下一波: https://www.eclipse.org/mat/downloads.php。系统目前没什么用,主要是客户分公司在基础数据模块录入数据比较多,目前系统数据记录条数在122W+。以上就是自己总结的内存溢出排查方法,大家可以参考,欢迎大佬指正!

2023-04-17 22:36:35 500

原创 APP扫码登录实现流程

后续补充示例代码。

2023-04-17 22:24:34 250

原创 Java8 的时间库:检查日期字符串是否合法

Apache Commons 项目提供了一个校验器框架,包含多种校验规则,包括日期、时间、数字、货币、IP 地址、邮箱、URL 地址等。本文主要说检查时间,不过考虑到正则表达式的性能、输入数据的复杂性,一般能用别的方式,就不选正则表达式。这次说一下,怎样检查给出的字符串,是否是合法日期字符串。类是不可变的,也就是天然的线程安全,我们可以在不同线程使用同一个校验器实例。接口方法接收一个字符串,返回布尔类型,表示字符串是否是合法的时间格式。说了 JDK 自带的实现,接下来说说第三方组件的实现方式。

2023-04-13 11:31:21 2496

原创 8天入门GO语言

1.网络概述、socket编程)2.socket编程3.案例:并发聊天服务器。

2023-04-13 00:36:35 108

原创 日常使用ChatGPT能做些什么

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D2WvLNv4-1681316377372)(images/chatGpt/解释代码.png)]

2023-04-13 00:27:40 132

原创 学习使用RocketMQ

官方说明:随着使用越来越多的队列和虚拟主题,ActiveMQ IO模块遇到了瓶颈。我们尽力通过节流,断路器或降级来解决此问题,但效果不佳。因此,我们那时开始关注流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,特别是在低延迟和高可靠性方面。看到这里可以很清楚的知道RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。

2023-04-12 20:31:57 1893 1

原创 SLF4J原理与实践

图元素说明。

2023-04-12 20:02:35 350

原创 Java类加载器原理与实践

AppClassLoaderExtClassLoaderBootClassLoader三者的关系误解注意关系注:文中图片来自于b站某up主,感谢!

2023-04-12 19:58:26 150 1

原创 一文告诉你什么是SPI机制并使用它

SPI:服务提供者接口(Service Provider Interface)官方定义:直译过来是服务提供者接口,学名为服务发现机制,它通过在classpath路径下的META-INF/services目录中查找文件,并自动加载文件里所定义的类SPI机制能够使接口与具体的实现类解耦,可以根据实际的业务情况启用或替换具体组件。SPI机制为很多框架的扩展提供了可能。SPI机制更多的是一种思想。

2023-04-12 19:29:23 303 1

原创 通过IDEA进行远程服务调试DEBUG

1. 打开IDEA,进入Run/Debug Configurations2. 由于我的服务是通过Docker部署的,故这里需要在Dockerfile文件中加入启动配置3. 需要注意在启动容器时,应将对应端口暴露出去4. 在IDEA中启动远程debug即可接下来可以快乐的远程调试服务器端代码了

2023-04-12 19:13:50 545 1

原创 Java中的泛型

java中的泛型分为三种:泛型类、泛型接口、泛型方法一、泛型类public class AuthToken<T> {public T getToken(T o) { return null; }}二、泛型接口public interface Comparable<T> { public int compareTo(T ...

2020-01-01 20:00:29 298

空空如也

空空如也

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

TA关注的人

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