自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 日志追踪-类加载器扩展-实战手写热部署

文章目录目标热部署Spring dev-tools 与 JReble实现方式Spring dev-tools源码分析两个机制全盘委托机制双亲委派机制一些问题实战-热部署代码实战自定义类加载器Class文件监听重新加载类方法入口程序和测试代码测试扩展目标使用自定义ClassLoader 实现热部署参考:Spring-Boot-Devtools 热部署源码详解 与 双亲委派机制(单步源码级分析)class卸载、热替换和Tomcat的热部署的分析 建议阅读HotSwap和JRebel原理深入探

2021-04-21 10:02:41 105

原创 一秒美化你的Markdown文档

听说点赞关注的人,身体健康,一夜暴富,升职加薪迎娶白富美!!!点我领取领取白富美一枚微信公众号:耿子blog文章目录说明✏️ 字体变色????表情图案的使用 ​​:green_heart: 图片居中设置大小????文章最开头的模块️☁️ 这个模板如下:说明看到别人用Markdown语法写出的文档都很好看,所以学习一下。✏️ 字体变色参考:Markdown文字添加颜色方法总结(珍藏)听说点赞...

2020-04-15 21:02:11 9581

原创 日志追踪-TransmittableThreadLocal -源码分析-侵入业务代码形式

之前想实现一个分布式链路追踪,考虑一次请求链路的TranceId,spanId要在整当前微服务下整个方法调用中传递,考虑使用Threadlocal和InheritableThreadLocal来实现存放TranceId和spanId。但是在线程池的场景下,会复用线程池线程,会出现丢失和污染调用链路的TranceId和spanId。需要解决这个问题,我尝试通过Javaagent的形式去修改java线程池源码的方式,来实现在执行前捕获父线程的threadlocal信息。在之前线程方法时使用。...

2022-07-19 00:07:21 75

原创 Mysql数据库死锁实战-死锁预防

目标了解如何预防mysql死锁参考:mysql查看看开启事务_mysql如何查看正在运行的事务和事务上加的锁【MySQL】如何阅读死锁日志查找现在的sql 谁持有行锁mysql 查看锁等待以下实例演示基于 MySQL 5.7.33版本 Innodb引擎mysql 5.7 版本官方文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 理论内容很多借鉴官方文档的描述在第一篇文章

2021-12-09 14:30:23 390

原创 Mysql数据库死锁实战-死锁演示-共享锁与互斥锁排队等待(二)

文章目录目标死锁案例需求1和需求2 的交叉事务需求1sql需求2sql死锁演示官方案例其他情况死锁案例总结目标了解共享锁与互斥锁排队等待死锁情况死锁死锁是一种不同事务无法继续进行的情况,因为每个事务都持有另一个事务所需的锁。因为两个事务都在等待资源可用,所以它们都不会释放它所持有的锁。当事务锁定多个表中的行(通过UPDATE或SELECT…FOR UPDATE等语句)但顺序相反时,可能会发生死锁。当这样的语句锁定索引记录和间隙的范围时,也会发生死锁,因为每个事务都会由于时间问题而获得一些锁。

2021-11-29 17:20:30 552

原创 Mysql数据库死锁实战-死锁演示-共享锁与互斥锁排队等待

文章目录目标死锁案例实现需求2死锁演示: 共享锁与互斥锁排队等待并发测试jmeter数据库事务并发测试聚合报告官方案例案例一案例2解决办法死锁问题优化优化死锁-实现需求2总结目标了解共享锁与互斥锁排队等待死锁情况死锁死锁是一种不同事务无法继续进行的情况,因为每个事务都持有另一个事务所需的锁。因为两个事务都在等待资源可用,所以它们都不会释放它所持有的锁。当事务锁定多个表中的行(通过UPDATE或SELECT…FOR UPDATE等语句)但顺序相反时,可能会发生死锁。当这样的语句锁定索引记录和间隙

2021-11-23 17:16:03 759

原创 Mysql数据库死锁实战-锁的基础知识

文章目录目标基础知识事务的演进并发事务方式一:逐个执行方式二:排他锁(互斥锁)方式三: 读写锁方式四:MVCC(多版本并发控制)隔离级别事务的分类Innodb 锁的基础定义共享锁(S)和 独占锁(X)意向锁(I锁)记录锁(RecordLock)间隙锁(GapLock)Next-key锁插入意向锁(Insert Intention Locks)事务隔离级别和锁的关系提出几个问题?加锁过程分析目标了解mysql innodb 引擎下锁机制常见死锁问题排查和解决参考:MySQL批量更新数据详解

2021-11-17 11:12:03 569

原创 Mysql数据库死锁实战-死锁演示-排他锁的相互等待

文章目录目标死锁案例实现需求1死锁演示:排他锁的相互等待查看最近一次死锁记录并发测试jmeter数据库事务并发测试步骤一 配置jmeter 连接数据库步骤二:添加线程组,添加jdbc请求和监听器执行测试以及结果察看结果树用表格察看结果聚合报告死锁问题优化优化死锁-实现需求1并发测试总结目标了解常见死锁场景和排查解决方法参考:一次mysql死锁的排查过程【MySQL】如何阅读死锁日志连接数据库时allowMultiQueries=true的作用死锁死锁是一种不同事务无法继续进行的情况,

2021-11-17 11:01:44 878

原创 Mysql数据库死锁实战-Jmeter连接配置数据库[Mysql]

文章目录目标jmeter4.0步骤1: 在测试计划中添加mysql驱动步骤2:添加配置元件> JDBC Connection Configuration步骤3: 添加线程组,JDBC Request步骤四: 添加监听器jmeter 5.4目标了解jmeter如何配置数据库测试参考:建立数据库测试计划jmeter连接MySQL构造大量并发测试数据『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL) 强烈建议阅读jmeter执行多条sql语句性能测试工具Jmet

2021-11-16 17:59:03 950

原创 并发编程-线程卡死问题实践

文章目录目标代码实践模拟线程卡死-代码请求发起类请求接受类分析优雅关闭线程的几种方式守护线程(不推荐)Future超时机制(推荐)状态一状态二状态三Thread的interrupt 中断策略尝试解决我们的问题(其实无法解决,具体看下列描述)实践请求接收类请求发起类测试总结目标线上线程卡死问题排查参考: Java并发编程(第十章,第四章)Future.get卡死,线程池的一个坑点 可以参考,注意点FutureTask的cancel方法真的能停止掉一个正在执行的异步任务吗 可以看下一个线

2021-07-12 23:04:19 487 3

原创 并发编程-线程卡死问题排查与解决

目标线程卡死问题排查参考: Java并发编程(第十章,第四章)Future.get卡死,线程池的一个坑点 可以参考,注意点前言发现线程卡死的业务场景:有一个数据接口,因整个业务流程比较耗时,采用了异步形式。异步线程将业务数据存到数据库,并将数据发给Mq,在后续流程中再消费。在消费MQ数据时,会获取文件存储系统上的图片整合业务数据,生成PDF文件。这里通过异步处理,拆分各个业务,以此提升用户体验。问题发现和解决方式某日发现MQ 队列中出现消息堆积,有一百多条数据没有确认回执。程序开

2021-07-12 23:02:33 1576

原创 日志追踪-类加载器-自定义类加载器

文章目录目标类加载过程加载验证准备解析初始化\目标了解类加载器并自定义类加载器使用参考:深入理解java虚拟机 书籍 第七章系统学习让你轻松定义java类加载器-视频 比较详细,常见类加载器的使用都有Host容器:Tomcat如何实现热部署和热加载?tomcat 类加载器分析实战项目之-手写热部署实现 讲的挺详细,可以听下如下内容,多数参考深入理解java虚拟机书籍第七章,只增加了一些关键内容和自我理解,如需完整学习,还需要看书籍知识类加载过程1, 类加载从文件目录或者网络获取字

2021-04-15 10:20:11 123

原创 日志追踪-类加载器-线程上下文类加载器

文章目录目标引入问题线程上下文类加载器服务提供者接口(SPI)JDBC 源码分析代码实践工程一SPI 服务接口基础调用类打包工程二导入base.jar包SPI 服务实现测试代码测试测试1:测试2:目标了解线程上下文类加载的作用和用法参考:深入理解Java虚拟机——JVM高级特性与最佳实践(第2版) 书籍mermaid你知道java反射机制中class.forName和classloader的区别吗?JAVA之SPI-服务发现机制引入问题如何破坏类加载器的双亲委派模型?(转换为更简单的

2021-03-07 14:38:45 95

原创 日志追踪-Java字节码-类文件结构

文章目录目标类文件结构Class 类文件的结构魔数和class文件的版本常量池访问标志类索引,父类索引,接口索引字段表集合access_flags 访问标志name_index 简单名称descriptor_index 描述符实例演示方法表集合实例演示属性表集合code 属性最后目标了解Java字节码相关的知识点参考:深入理解Java虚拟机——JVM高级特性与最佳实践(第2版) 书籍本文仅是从书籍内容做了记录,不过补充了一些图示,可能会更清晰一点。如果需要阅读完整内容,还请参考书籍内容。

2021-02-23 22:10:39 147

原创 Postman高级用法

文章目录[1]Postman账户0. 同步请求历史记录1. 切换账户[2] 发送conllections中的请求[4] 创建一个环境(environment)0. 添加环境[5]保存响应内容(save Response)0. 保存响应[6] 拦截请求(使用Postman的代理服务器)0.设置代理[7] 设置Pre-request-Script 和 Tests0.预请求脚本(Pre-request-Script )设置1. 测试脚本(Tests )设置3. 分支和循环0. 执行请求1. 设置CSV数据文件

2021-02-10 09:41:00 302

原创 Docsify支持Markdown多种流程图

文章目录目标docsifyMarkdown 文档支持 mermaid支持 DOT 语言作图支持 LaTex 数学公式支持 Flow 流程图目标实现docsify支持Markdown多种流程图参考:使用 docsify 并定制以使它更强大docsify官方文档:https://docsify.js.org/#/docsify 可以快速帮你生成文档网站。不同于 GitBook、Hexo 的地方是它不会生成静态的 .html 文件,所有转换工作都是在运行时。如果你想要开始使用它,只需要创建一

2021-01-25 20:46:21 1307

原创 链路追踪Logback-ERROR日志邮件发送

文章目录目标SMTPAppender介绍基本配置格式化日志定制缓冲区大小定制触发事件STARTTLS/SSL 认证实践邮箱开启SMTP依赖logback.log 配置代码示例目标了解logback配置错误日志邮件发送参考:Appenderslogback发送告警邮件logback 发送邮件和自定义发送邮件;java类发送邮件Appender 最基本的责任是将日志事件进行输出。比如最常见的在logback.xm配置的 ConsoleAppender (控制台)、RollingFileApp

2021-01-20 23:06:57 733

原创 链路追踪Logback-MDC介绍

文章目录目标诊断上下文映射 (MDC)引入MDC 的目的MDC 的作用用法示例高级用法代码示例一些问题MDC 与线程管理代码示例MDCInsertingServletFilter注意点目标了解MDC基本概念和用法参考:MDC官方文档 推荐参考阅读前需要先了解logback的基本内容。以下内容,都是从官方文档引用,只是增加了一些示例情况。诊断上下文映射 (MDC)引入MDC 的目的在一个多线程程序中,不同线程处理不同客户端的请求,如果对每个客户端都实例化一个新的且独立的 logger对象

2021-01-18 23:44:22 461

原创 SpringBoot热部署

文章目录目标DevTools 工具(免费)LiveReload实践Jrebel 工具(收费)实践总结目标了解SpringBoot的热部署参考:spring boot之 DevTools 热部署,修改代码立刻见效,快速重启devtools官方文档说明DevTools 工具(免费)推荐:可以使用(☆☆☆)以下内容来源于官方文档:devtools官方文档说明spring-boot-devtools只要类路径上的文件发生更改,使用的应用程序就会自动重新启动。触发重启的机制:当DevToo

2021-01-16 11:05:36 62

原创 Redis-动态切换数据库(集成SpringBoot工程)

文章目录目标前言动态切换数据库思路第一种:目标前言动态切换数据库思路第一种:第二种代码实现构建多个RedisTemplateyml 配置初始化测试方法启动日志注意第二种代码实现构建多个RedisTemplateyml 配置初始化测试方法启动日志注意目标了解动态切换Redis数据库了解Spring提供的一些注解和接口参考:SpringBoot2+Redis动态切换db数据源(db)最佳实践 推荐参考PostConstruct官方说明如何动态切换数据库 为什么 Redis 默认 16 个

2021-01-06 09:46:41 1775 4

原创 Redis-事务(集成SpringBoot工程)

文章目录目标Redis 事务命令文档要点应用场景Spring 示例代码示例事务使用要点Redis事务与脚本目标了解Redis事务参考:深入分布式缓存 书籍spring-data-redis的事务操作深度解析–原来客户端库还可以攒够了事务命令再发?Redis官方文档Redis 事务命令命令参考:https://www.redis.net.cn/order/3638.html## 乐观锁# watch 用于监视 key,一旦key 在事务之前被其他命令改动,会导致事务失败127.0

2020-12-31 14:56:31 78

原创 Redis-Lua脚本(集成SpringBoot工程)

文章目录目标提出一个问题?保证原子性操作的两种做法Redis Lua 脚本命令EVAL 命令调用执行Redis 命令EVALSHA使用场景Lua 脚本语法常用类库调试与日志开启Redis 日志Spring boot 集成资料参考Controller注意RedisScriptLua脚本程序执行日志其他命令注意目标了解Redis Lua脚本知识参考:使用redisTemplate设置过期时间是不是不能保证原子性?在Redis中设置了过期时间的Key,需要注意哪些问题?Springboot整合Red

2020-12-25 13:46:05 284

原创 2020

文章目录2020疫情生活家庭工作展望20202020即将过去,新的一年又要来到,年龄又大了一岁。❤️疫情本来准备过完年,就回北京。疫情把计划都打乱了,不过在家也享受了一段惬意的时光。陪陪家人,玩玩游戏。来京后,先是为期14天的隔离。这14天感觉过的很漫长,都快黑白颠倒了,白天睡觉,晚上醒着。解除隔离后,每天出门都戴着口罩,一直到现在。不过口罩的价格越来越便宜了。???? 希望疫情早点过去,生活回归平静。生活今年做了一件重要的事,拜访了女朋友的家人,从北京飞往杭州,紧张也期待,希望有个好结果。女朋

2020-12-24 21:55:28 93

原创 SpringSecurity实战(八)-通用第三方登陆-自定义认证配置实现

文章目录目标通用第三方登陆设计思路自定义登陆流程代码实现核心依赖创建第三方授权应用调用第三方平台部分login.htmlcontroller 层service 层核心配置通用第三方登陆配置本系统的授权认证部分认证流程一:已经绑定现有用户流程OtherSysOauth2LoginFilterOtherSysOauth2LoginAuthenticationTokenOtherSysOauth2LoginProviderOtherSysOauth2LoginUserDetailsServiceImpl认证成功事

2020-12-08 22:15:59 1701

原创 SpringSecurity实战(七)-对接第三方登陆-流程分析

文章目录目标第三方登陆流程登陆流程必要概念了解授权码模式(Authorization Code)实现第三方登陆框架目标了解第三方登陆流程参考:如何在Markdown中画流程图关于第三方登录,你应该知道的Spring Security 实战 书籍JustAuth与用户系统整合本文分三篇来介绍第三方登陆的实现。第三方登陆流程许多人应该对第三方登陆不陌生,当你登陆某网站,会发现在登陆选项中,允许使用其他平台账户登陆。比如微信,QQ,微博等方式。登陆流程以Gitee 这个网站的第三方登

2020-12-08 22:10:38 1191

原创 SpringSecurity实战(六)-集成图形验证码-自定义认证实现

文章目录目标自定义认证配置代码实践生成图片验证码部分验证“图片验证码”部分设置"图片验证码"参数自定义AuthenticationProvider核心配置注意目标了解自定义认证方式集成图片验证码参考:Spring Security 实战 书籍使用redis时遇到的一些异常尽管创建了自己的实现,但仍创建了额外的DaoAuthenticationProvider自定义认证配置业务需求:用户进入登录页面,输入用户名,密码,验证码,进行登录。要求校验用户输入的验证码是否正确,不正确拒绝用户登陆

2020-12-08 22:06:52 112

原创 SpringSecurity实战(五)-认证流程源码分析

文章目录目标认证流程总结目标了解Spring Security的认证流程参考:Spring Security 实战书籍SpringSecurity使用JustAuth扩展第三方登录 推荐阅读尽管创建了自己的实现,但仍创建了额外的DaoAuthenticationProvider Spring boot + Spring Security 多种登录认证方式配置(一)使用redis时遇到的一些异常在第一篇已经简单说明了,认证授权的简单流程和概念,本文详细介绍一下,在认证流程中,具体执行了

2020-12-08 22:04:28 104

原创 SpringSecurity实战(四)-集成图片验证码-过滤器方式实现

文章目录目标实现的方式自定义验证码过滤器(简单方式)代码实践生成图片验证码部分页面controller 层验证“图片验证码”部分图片过滤器核心配置注意目标了解Spring Security 集成图片验证码参考:spring security 实战书籍实现的方式验证码是区分人与机器的有效方式,几乎所有系统的登陆,都要求输入验证码。Spring Security 集成图片验证码,有两种方式:使用Filter过滤器(简单方式)使用Spring Security 提供的认证配置的方式

2020-12-08 22:02:44 168

原创 SpringSecurity实战(三)-整合SpringSession-Redis

文章目录目标集群会话session 保持session 复制session 共享Session 共享实现代码实践核心依赖核心配置redisson.ymlspring session 的配置Spring Security 整合 Spring session问题解决目标了解与Spring session ,redis 的整合参考:spring security 实战书籍 6.6 章节集群会话单机提供单服务只能存在于测试环境,正式环境部署工程,一般都是集群部署或者单机多服务部署。看下两者会话信息

2020-12-08 22:01:01 681

原创 SpringSecurity实战(二)-基于数据库认证授权

文章目录目标基于数据库的认证授权数据库设计代码实践依赖实现 UserDetails 用户详情实体实现 UserDetailsService 用户详情服务核心配置类注意目标了解基于数据库的 spring security 方式参考: spring security 实战书籍关于spring security 基本部分,可以直接看 spring security 实战书籍 或者官方文档参考。基于数据库的认证授权一个后台管理系统,最基础的功能就是权限管理。通常情况下会设计5张表来实现,三张基

2020-12-08 21:59:13 377

原创 SpringSecurity实战(一)-认证鉴权流程

文章目录目标spring security 实现认证鉴权的流程认证授权综上所述目标了解 spring security 认证授权流程参考:spring security 实战书籍前后端分离Spring security 从healer的token获取Session资源:在线生成ascii字符画网站spring-security 系列文章小问题解决:Invalid ON UPDATE clause for ‘create_date’ columnspring security 中文文

2020-12-08 21:57:33 644

原创 CountDownLatch

文章目录目标概念使用场景方法详情示例场景1场景2目标了解CountDownLatch参考:countDownLatchCountDownLatch的介绍和使用概念CountDownLatch 允许一个或多个线程等待其他线程完毕后再执行流程:通过一个计数器来设置需要完成的线程数,每个线程完成任务会让计数器减1,直到所有线程完成,计数器变0 。在让等待其他线程完成的线程再执行。使用场景通用的同步工具,将CountDownLatch初始化为1,可以看做一道门,其他线程都在

2020-11-24 23:12:04 82

原创 VMware-bridge桥接网络连接

《VMware安装Linux-Ubuntu系统(三<2>)》上一篇: VMware-Host only(主机模式)网络连接方式,说了一下主机模式下怎么与主机通信,并连接外网。这一篇说使用桥接模式与主机通信,连接外网bridge(桥接模式) 这种模式下,Vmware默认使用VMnet0虚拟交换机来实现,虚拟机就像是局域网中的一台独立的主机,与宿主计算机一样,它可以访问网内...

2020-11-16 15:07:04 567

原创 并发和并行

文章目录目标并发和并行问题对于多核cpu,java多线程是并发还是并行?知乎上的一些回答扩展目标了解并发和并行的区别参考:并发和并行AVA中的多线程能在多CPU上并行执行吗Java 多线程如何实现在多 CPU 上分布?使用多线程踩的“坑”——使用多线程真会使用CPU所有的内核吗? 这篇文章评测的是否使用多个内核的方式,有待考究,因为在第二个示例中,存在文件读写的情况,这种情况线程会切换,但是不一定线程会阻塞java线程与内核线程的关系,及怎么定义ThreadPoolExecutor相关参

2020-11-11 23:40:13 89

原创 阿里性能调优工具Arthas

文章目录目标Arthas简单使用其他其他诊断工具目标了解Arthas 性能调优工具参考: Arthas - Java 线上问题定位处理的终极利器spring-boot 速成(3) actuatorJVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)java性能监控利器ArthasArthas是一个Java诊断工具,支持JDK 6+,支持Linux/Mac/Winodws官方文档:https://alibab

2020-11-09 23:17:38 1719

原创 Docker-jenkins安装与部署

文章目录目标Jenkins docker 安装Jenkins 的使用组件安装jenkins 中jdk配置jenkins 中 maven 安装和配置jenkins 的git安装其他命令:出现的问题以及解决方法小技巧目标了解docker安装和部署jenkins参考:Ubuntu怎么开启/关闭防火墙jenkins 更改插件下载镜像地址为国内镜像下载地址ubuntu 下 maven安装Jenkins学习笔记(一):Docker安装Jenkins及自动部署Maven项目Maven 镜像Jenkin

2020-11-06 13:42:39 247

原创 Tomcat配置优化(一)

文章目录目标指定tomcat日志按天输出,保存日志天数为15天修改tomcat 加载指定目录下的web 工程创建tomcat 启动脚本指定tomcat运行web项目的jvm配置设置tomcat 热部署目标了解 tomcat 优化配置指定tomcat日志按天输出,保存日志天数为15天参考:ubuntu手动安装deb文件deb安装包日志分隔工具Cronolog的使用tomcat的catalina.out日志按天生成日志的按天输出方便我们查看日志,也方便拷贝和查找。下载安装# 下载 c

2020-10-25 11:46:14 370 1

原创 java8-实战

文章目录目标实战函数式接口,默认方法OptionalStream枚举类for循环集合类过滤和映射等操作时间APIjava8 其他改变目标了解 java8 在项目中的使用参考: 这些Java8官方挖的坑,你踩过几个?关于Java Stream的使用心得JDK8 stream 在项目中的应用Java 8 开发的 4 大顶级技巧Java8——优化 实战项目中使用:函数式接口,默认方法在设计接口时,如果有需求,可以设计函数式接口,使用。或者使用java8提供的函数式接口使用。默认方

2020-10-24 11:49:44 1219 1

原创 java8-date

文章目录目标Date目标了解java8 的date 相关操作参考:java8 实战书籍 第12章 java8 简明教程Datejava8 提供新的处理时间的api,是为了优化之前的时间处理方式。// 常见的几个类// LocalDate 本地时间,年-月-日// LocalTime 本地时间,时-分-秒-毫秒// LocalDateTime 本地时间,年-月-日 时-分-秒-毫秒// DateTimeFormatter 线程安全,格式化时间 // 常规方法// 获

2020-10-24 11:48:41 183

原创 java8-optional

文章目录目标Optional 解决的问题Optional api 了解实践调用其他接口或者方法返回结果,判空优化入参参数校验其他的一些用法faltmap目标了解java8 提供的 Optional 用法参考: java8 实战 书籍Optional 解决的问题避免空指针异常(NullPointerException)经常遇到的异常就是空指针异常,具体表现 对象实例.调用方法,提示对象实例是一个null,抛出异常。使用 Optional 修饰对象,避免出现空指针异常优化判空校

2020-10-24 11:46:43 84 1

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