自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

乙壳虫的博客

编程之路

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

原创 深入解析 MyBatis 的一级缓存和二级缓存

在传统的数据库操作中,每次查询都会向数据库发送 SQL 请求并返回结果。这种频繁的 IO 操作不仅耗时,还对数据库造成较大压力。在高并发场景下,优化数据库访问次数成为必然选择。MyBatis 作为一种流行的 ORM 框架,通过引入缓存机制有效缓解了这一问题。

2024-11-25 17:12:25 555

原创 深入探讨 TaskDecorator —— Spring 中线程上下文传递的利器

它可以理解为一个“任务装饰器”,允许开发者在任务执行前后插入一些自定义逻辑,如线程上下文的传递、初始化等。特别是在使用线程池时,线程会被复用,如果没有正确清理上下文信息,后续任务可能会使用到上一个任务的上下文。比如在身份认证和权限管理系统中,可以确保用户的身份信息在异步任务中得以传递。的一个子类,可以在创建子线程时,将父线程的上下文信息自动传递给子线程。在异步任务中传递用户的权限信息,确保在异步任务执行时能正确识别用户身份和权限。在复杂的异步任务中,通常需要传递一些上下文信息,如数据库事务、用户会话等。

2024-10-25 11:23:51 2160 3

原创 深入理解Spring Boot事务管理:隔离级别、事务失效场景、使用场景及实现方法

事务(Transaction)是指一系列操作的集合,这些操作要么全部成功,要么全部失败,确保数据的一致性和完整性。原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。一致性(Consistency):事务结束后,数据必须保持一致状态。隔离性(Isolation):一个事务的执行不能被其他事务干扰。持久性(Durability):事务一旦提交,其结果是永久的。特性基于注解的事务管理基于编程式的事务管理使用简单性简单,代码量少复杂,需显式管理事务状态灵活性。

2024-08-23 17:04:04 2600

原创 在Logback中配置`requestId`进行日志追踪的实践与应用

Logback 是一个高效、灵活的Java日志框架,广泛用于Spring Boot项目中。它支持多种日志输出格式和策略,允许用户灵活配置日志级别、输出格式、目标位置等。requestIdMDC(映射诊断上下文)是slf4j提供的一种机制,允许在多线程环境中存储和共享上下文信息(例如requestIdMDC数据与当前线程相关联,因此能够有效区分和跟踪多线程环境中的日志。通过在Spring Boot应用中正确配置Logback、MDC和线程池,我们可以确保每个请求的日志都能包含一个唯一的requestId。

2024-08-23 16:43:23 1627

原创 数字化时代的技术风暴:从网易云音乐故障事件看团队应急响应能力的提升

1. 事件复盘与经验总结每次故障处理结束后,进行事后总结是持续改进的重要步骤。通过复盘,团队可以分析故障发生的根本原因、处理过程中的得失以及有哪些改进的空间。这个过程应包括相关技术团队的参与,并形成详细的总结报告,记录故障的发生时间、影响范围、处理过程和改进建议。2. 持续优化监控和应急预案基于事后总结的经验,企业应不断优化监控系统和应急预案。对于在故障中暴露出的监控盲区,应及时补充监控项和预警指标;对于应急预案中的不足之处,应根据实际情况进行修订和完善。

2024-08-22 14:33:07 857

原创 内存映射文件(Memory-Mapped Files)在Java中的应用详解

内存映射文件是一种将文件的全部或部分内容映射到应用程序的内存地址空间的技术。通过这种映射,程序可以像操作内存一样直接访问文件内容,而不需要显式地调用read或write方法。这种操作方式不仅可以简化代码,还能显著提升文件I/O的性能,特别是在处理大文件或频繁访问文件内容的场景中。在Java中,内存映射文件的实现主要依赖于java.nio包中的类。通过的map方法,可以将文件的内容映射到内存中,并通过对文件内容进行读写操作。

2024-08-22 14:11:17 1741

原创 基于缓存提高Java模板文件处理性能:减少磁盘I/O的实践与探索

特别是在用户访问量高峰期,生成文档的请求激增,每次都需要从磁盘读取模板文件,这就导致了大量的磁盘I/O操作堆积,进而使系统响应时间变长,用户体验下降。通过将模板文件缓存至内存中,只需在第一次加载时进行磁盘读取,后续操作则直接使用缓存中的模板文件,大幅减少了磁盘I/O操作的次数,从而提升了系统整体性能。模板文件本身是不会变的,所以每次生成文件都要去读取一遍模板文件,会有很多的磁盘IO操作,并且如果模板文件比较大的话,会更加的影响性能。此外,可以通过监听文件系统的变化事件,实时更新缓存中的模板文件。

2024-08-22 11:46:48 1141

原创 MySQL中的存储文件和IO机制详细解析

例如,当一个页中的数据满时,会触发页的分裂,形成新的页;当查询涉及多个页时(即跨页操作),需要多次从磁盘读取数据,这可能会导致IO操作的增加,从而影响查询的性能。每当需要对数据库中的数据进行增删改查时,MySQL不会直接访问磁盘上的数据,而是首先将数据页从磁盘加载到内存中的缓冲池(Buffer Pool)中进行操作。树的叶子节点包含了表的行数据,而非叶子节点存储的是指向子节点的指针。同时结合底层的数据结构原理,如B+树等,深入探讨数据在磁盘与内存之间的流动过程,理解跨页操作、分页读取对性能的影响。

2024-08-16 10:41:09 715 2

原创 深入理解MySQL索引:原理、数据结构与优化策略

索引类似于一本书的目录,它可以帮助我们快速定位到需要的内容。没有索引时,MySQL 需要遍历整个表来找到目标记录,而索引通过构建特定的结构,可以加速查找的过程。索引的主要作用是提高数据库查询效率,减少数据库检索的行数,从而提升查询速度。B-Tree 索引:这是 MySQL 中最常见的索引结构,适用于大多数场景。B-Tree 是平衡树的一种,能够保持数据有序,从而加快查找速度。哈希索引(Hash Index):通过将键映射为固定大小的哈希值来加速查找,适用于精确查找。

2024-08-16 08:54:14 1440

原创 SpringBoot集成Hikari连接池及其原理和配置详解

HikariCP 是一个高性能的 JDBC 连接池,它以其快速、轻量和高效的特点在众多连接池中脱颖而出。HikariCP 的设计目标是提供最小化的性能开销,并在高并发环境中提供优异的性能。在这篇文章中,我们详细介绍了如何在 Spring Boot 项目中集成 Hikari 连接池,并展示了一个简单的用户管理系统示例。同时,我们还对比了 HikariCP 和 Druid,介绍了它们各自的优缺点。

2024-07-31 10:41:15 2770

原创 SpringBoot集成 Druid 连接池及监控配置详解

Spring Boot 是当前 Java 开发中的热门框架,而在数据库连接池的选择上,Druid 因其性能和功能强大也备受青睐。在这篇文章中,我们将深入探讨如何在 Spring Boot 项目中集成 Druid 连接池,并配置相关的监控功能。通过这种方式,我们不仅能够高效地管理数据库连接,还能通过直观的监控页面了解系统的运行状态,从而更好地优化和维护我们的应用。这些配置项涵盖了连接池的初始化大小、最小空闲连接数、最大活跃连接数、最大等待时间等参数,以及 Druid 提供的监控、SQL 过滤等功能。

2024-07-31 10:16:29 936

原创 Druid连接池的常用配置及默认值

Druid 是一个高性能的 JDBC 连接池,提供了多种配置选项来优化连接池的性能和稳定性。

2024-07-30 16:24:07 3582

原创 GetConnectionTimeoutException:wait millis 30000,active 0,maxActive 50,creating 0, createErrorCount 1

这个是在项目启动时,加载数据库连接池报错。因为有很多项目都连了同一个数据库,当前数据库的max_connections是300,(show variables like ‘%max_connections%’;),已经被其他项目用完了,所以获取不到连接,线程池就创建失败了。active是0,表示没有活跃的,maxActive表示最大活跃数,createErrorCount 1表示创建失败。

2024-07-18 09:38:24 3022

原创 Springboot-配置文件中敏感信息的加密:三种加密保护方法比较

在Spring Boot应用中,数据库密码、Redis密钥等敏感信息的保护至关重要。本文详细介绍了如何使用AES加密算法对这类关键配置进行加密处理,确保它们不会被轻易泄露。通过实现EnvironmentPostProcessor接口,我们可以在应用启动时自动解密这些配置,从而保证应用能够安全地使用这些敏感数据,同时大大降低了信息泄露的风险。这种方法为开发者提供了一种实用且高效的安全策略,以应对日益严峻的信息安全问题。

2024-05-13 14:32:45 8899 1

原创 Redis常用数据结构及原理

了解不同的数据结构和其对应的操作命令,可以根据不同的需求选择合适的数据结构,高效地存储和管理数据,提高系统的性能和可扩展性。同时,熟悉 Redis 数据结构也是设计和开发高性能应用的基础。

2023-07-17 14:35:08 5282

原创 【MySQL表设计常用规范-结合实际工作经历说明】

作为一名程序员,数据的设计和优化等操作是必须要掌握的。此文结合实际工作场景来讲述关于MySQL表结构设计优化等常用方案和注意事项。

2023-07-15 15:58:52 6124

原创 提高代码调试能力——IDEA debug技巧

代码调试是每个开发人员必备的技能。熟悉并掌握调试的一些必备技巧可以大大提升调试能力,快速定位问题。文中介绍了debug必备技巧:断点、运行到下一行、回到上一步、运行到指定行,调试过程修改变量值、远程调试等

2023-06-20 14:54:05 9034

原创 收件地址解析成 省+市+区+详细地址的形式

将用户输入的地址解析成规范的省市区+详细地址的形式

2023-06-17 16:16:28 10027 2

原创 java递归实现多级Map集合合并(结合实际场景)

递归实现多级Map集合合并

2022-12-15 16:46:32 8970

原创 Springboot中上一个定时任务没执行完,是否会影响下一个定时任务执行分析及结论

本文将用测试代码验证:定时任务阻塞问题。在springboot中使用定时任务的步骤在启动类上加上注解:@EnableScheduling,表示允许定时任务执行定时任务需要在类上加上@Component或者其衍生类(Controller、Service等),用于纳入Spring容器管理。在需要定时任务方法上增加注解@Scheduled,注解的参数是定时任务执行时机首先需要知道:定时任务默认是单线程的。,所以默认情况下,上一个定时任务没有执行完,下一个定时任务是不会开始的。单线程定时

2022-05-10 14:43:24 21919 5

原创 spring事务失效原因及解决方案

1. 需求示例需求伪代码如下:@Servicepublic class JysdService { public String test1(args) { try { test2(args); } catch (Exception e) { return "异常"; } .... } @Transactional(rollbackFor = Exceptio

2022-02-17 14:46:08 11325

原创 爬虫—微博博主动态及相册的请求构造规律

1. 查找的博主u_id1.1 请求通过https://s.weibo.com/ajax/topsuggest.php?key=博主名称&_k=1636439925298&_t=1&outjson=1&uid=自己账号的uid查找到他的u_id,后面的操作需要用到。1.2 参数参数描述key待查找的博主的名称_k我没有找到是什么东西,但是我估计是时间戳,因为我发现这个值跟我当前的时间是就差了几毫秒,并且只要传入的是一个时间戳,返回的结果都

2021-11-09 15:55:22 10614

原创 浅谈CAS原理

1. 背景我们知道,synchronized就是一种独占锁,独占锁是一个悲观锁,会导致其他所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一种更加有效的锁就是乐观锁,CAS就是一种乐观锁2. CAS原理CAS(Compare And Swap),比较并交换。我们知道,如果我要对一个变量进行操作,可以分为三个步骤读取该变量的值进行一系列的运算得到新的结果将运算的结果保存这儿需要知道CAS中有三个概念:内存地址的值V,旧值(从内存地址读取到的值)A,新值(进行操作后的结果值)。对应上面三

2021-08-08 08:51:45 9135

原创 layui表单提交了多次的两个原因

layui表单提交时出现提交多次的原因1. js文件引用了多次一般使用layui需要引用layui.js,有的会引用layui.all.js。如果使用layui默认的表单提交方式,且你的上述js文件同时引用,或者重复引用,那么就会导致表单渲染多次,就会导致表单提交多次的情况。引用的时候,注意不要同时引用layui.js和layui.all.js。如果自己的页面需要引入其他的页面,那么也要注意你需要引入的页面中是否已经引用过layui.js了,避免重复引用。2. 提交触发的事件出现在<form

2020-12-17 11:20:09 7683 1

原创 因搜狗输入法引发的Ubuntu下idea卡死的问题

1. 问题前几天升级Ubuntu系统(18->20),一些包自然也跟着更新了,但是升级完之后,我的idea会莫名其妙的卡死。其他应用没有任何问题。2.解决过程如果要直接看解决方案的,查看本文中的尝试三,或者访问输入法切换至fcitx导致IDEA进程卡死问题2.1 尝试一一开始以为是内存不够,但是查看内存使用情况,并不是这个问题。而且如果是内存不够,那么就不是idea卡死了,是整个系统用起来都会卡顿,但是我现在只是idea卡死,其他的应用没有任何影响。所以不是这个问题。2.2 尝试二会不会

2020-10-16 17:24:19 8587 4

原创 echart多图表切换时图表宽度变成100px,而不是100%

现页面中有如下图表需要显示现我希望页面在进行缩放的时候,图表大小也跟着变。首先想到的就是宽度设置为100%,但是当我在“总计”,“加分”,“扣分”之前切换时,发现图表宽度变成了100px(如果你设置的宽度是固定大小的,比如500px,那就不会有这个问题),这是echart本身的原因。那么如何解决图表自适应问题呢,现在有如下代码(只展示了主要的部分代码)<!--图表容器--><div class="tab-pane active" id="total"> <!--

2020-09-14 09:46:47 5910 2

原创 如何使用线程安全的时间类(jdk1.8)

1. Java8新时间特性我们一般描述时间会用Date()对象来表示,但是为了时间显示更加符合习惯,会使用SimpleDateFormat来进行格式化。但是这种使用是存在缺陷的。1.1 SimpleDateFormat线程不安全SimpleDateFormat是线程不安全的,因为这个这个类是继承于DateFormat的,DateFormat中有一个Calender属性,可以说SimpleDateFormat的格式化就是依赖于这个属性进行操作的。SimpleDateFormat的format方法中将传

2020-09-02 09:36:10 4850 1

原创 Java集合如何在JSP中展示

1. Java集合如何在JSP中展示1.1 JSP遍历Java中的List、Set集合现Java中有如下的数据,通过ModelAndView绑定传到JSP页面public ModelAndView userList() { List<String> userList = new ArrayList<>(); userList.add("张三"); userList.add("李四"); userList.add("王二麻子"); Mode

2020-08-18 21:43:17 5877

原创 win10安装jdk8和eclipse(使用镜像下载解决官网下载慢的问题)

1. 安装jdk81)下载并安装jdk8jdk8可以在Oracle官网下载,但是下载速度有些慢。我们可以去清华镜像下载OpenJDK8,下载地址。下载完之后,直接解压就可以了。2)添加系统环境变量添加JAVA_HOME在系统环境变量中新增变量JAVA_HOME(下载的包解压之后可能是这样的D:\Applications\OpenJDK8\OpenJDK8U-jdk_x64_window...

2020-04-19 00:08:32 5302

原创 安装QQ for Linux(腾讯终于在2019/10/24发布了Linux版的QQ了)

腾讯之前也有过Linux版的QQ,但是不久就停止维护了,时隔10年,终于回来了。下面介绍一下安装方法1. 去官网下载安装包这个根据你自己的Linux发行版来看,我的是Ubuntu,所以下载得到的是linuxqq_2.0.0-b1-1024_amd64.deb。2. 执行命令安装进入下载包所在目录,执行命令:sudo dpkg -i linuxqq_2.0.0-b1-1024_amd64....

2020-03-03 19:15:03 4135

原创 ArrayList底层扩容机制

ArrayList学习List集合下常用的两个实现类是ArrayList和LinkedList,在LinkedList中我们知道了LinkedList的内部是用双向链表实现的,而本文要说的ArrayList是用一个Object型的数组实现的。ArrayList继承和实现类有哪些图中红色线代表的是继承关系,蓝色线代表的是实现关系,A表示这是一个抽象类,I表示这是一个接口Arra...

2019-12-28 22:07:52 5603

原创 LinkedList底层原理分析

LinkedList分析下面是LinkedList所继承和实现的父类的关系图图中,红色的线代表的是继承关系,蓝色的线代表实现关系,方框标明红色A的表示是抽象类,红色I的表示是接口。Iterable(Interface))这个接口的意思是可迭代,也就是说,实现该接口的类都是可以迭代的。Collection(Interface)这是集合的父类,我们熟知的Set和List都是这...

2019-12-28 22:04:22 5445

原创 html+css+jQuery实现购物车功能

购物车1. 搭建简单的架子<!DOCTYPE html><html> <head> <title>购物车</title> <meta charset="utf-8"/> <script src="../jquery-1.9.1.min.js"></...

2019-12-22 21:26:49 6967

原创 html+css+jQuery写一个简单的计算器

写一个简单的计算器由于代码不多,而且为了方便,就把css和js都写在html文件里就行了。1. 搭建一个简单的架子<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"> <title>计算器</title> ...

2019-12-22 17:10:27 3327

原创 Ubuntu无法联网的问题解决

我将一些常用的Ubuntu软件安装汇总在了github上,方便自己和大家使用。Ubuntu无法联网的问题解决更多Ubuntu软件安装注:因为仓库会一直维护,所以如果链接失效,请留言,谢谢...

2019-10-18 20:49:32 3057

原创 Ubuntu安装Google浏览器

我将一些常用的Ubuntu软件安装汇总在了github上,方便自己和大家使用。Ubuntu安装Google浏览器更多Ubuntu软件安装注:因为仓库会一直维护,所以如果链接失效,请留言,谢谢...

2019-10-18 20:48:30 2990

原创 Ubuntu安装网易云音乐

我将一些常用的Ubuntu软件安装汇总在了github上,方便自己和大家使用。Ubuntu安装网易云音乐更多Ubuntu软件安装注:因为仓库会一直维护,所以如果链接失效,请留言,谢谢...

2019-10-18 20:46:01 2845

原创 Ubuntu安装flameshot截图工具

我将一些常用的Ubuntu软件安装汇总在了github上,方便自己和大家使用。Ubuntu安装flameshot截图工具更多Ubuntu软件安装注:因为仓库会一直维护,所以如果链接失效,请留言,谢谢...

2019-10-18 20:44:57 2533

原创 Ubuntu安装Typora

我将一些常用的Ubuntu软件安装汇总在了github上,方便自己和大家使用。Ubuntu安装Typora更多Ubuntu软件安装注:因为仓库会一直维护,所以如果链接失效,请留言,谢谢...

2019-10-18 20:43:33 2560

原创 Ubuntu安装搜狗输入法

我将一些常用的Ubuntu软件安装汇总在了github上,方便自己和大家使用。Ubuntu安装搜狗输入法更多Ubuntu软件安装注:因为仓库会一直维护,所以如果链接失效,请留言,谢谢...

2019-10-18 20:42:10 2413

空空如也

空空如也

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

TA关注的人

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