自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(178)
  • 资源 (4)
  • 收藏
  • 关注

原创 springboot 引入traceid链路追踪实战

开发中很多数据如oauth2的认证信息,日志TracerId都是在请求线程中的,如果内部使用多线程处理就存在获取不到认证信息或TraceId的问题。这时候就需要处理子线程与主线程间数据传递的问题。这个问题需要使用线程的ThreadLocal和TaskDecorator来处理。官方文档中描述意思是TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息。实现方式就是定义一个TaskDecorator,在线程池中设置使用这个TaskDecorator。

2024-04-15 10:00:00 1018 1

原创 动态控制定时任务增删启停

2.创建 DynamicScheduledTaskRegistrar 核心类。Application启动类上添加注解@EnableScheduling。

2024-03-15 09:00:00 139 2

原创 springboot自定义注解实战

1、切面(aspect)散落在系统各处的通用的业务逻辑代码,如日志模块,权限模块,事务模块等,切面用来装载pointcut和advice2、通知(advice)所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类Before advice:在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。After advice:当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

2024-02-26 09:05:00 892

原创 spring事件监听 listener 实战

application.properties 增加配置context.listener.classes=com.example.demo.work.event.MyListener。第三四中最终也是把监听器放入ConfigurableApplicationContext对象,只不过实现有了2个特别的类,注解和配置文件的形式。3.application.properties配置context.listener.classes属性。1.用addListener 方式注入。新建 MyEventHandle。

2024-02-07 10:00:00 203

原创 springboot 整合 actuator监控详情

19 tomcat.sessions.active.max tomcat 最多活跃 session 数 是 显示在监控页面,超过阈值可报警或者进行动态扩容 重要。20 tomcat.sessions.alive.max.second tomcat 最多活跃 session 数持续时间。32 tomcat.threads.config.max tomcat 配置的线程最大数 是 显示在监控页面 重要。18 tomcat.sessions.active.current tomcat 活跃 session 数。

2024-01-14 10:00:00 960

原创 2023 年终总结

我的 2023 年终总结

2023-12-30 21:00:00 435

原创 java 探针两种模式实战

分为两种程序运行前的agent:premain程序运行中的agent:agentmain在程序运行前的agentjavaagent是java命令的一个参数,所以需要通过-javaagent 来指定一个jar包(就是我们要做的代理包)能够实现在主程序运行前来执行我们jar中的方法1.pom文件中

2023-12-16 09:00:00 149

原创 [rocketmq] 如何保证消息可靠性

1、生产者发送消息到Broker时;2、Broker内部存储消息到磁盘以及主从复制同步时;3、Broker把消息推送给消费者或者消费者主动拉取消息时;

2023-06-29 16:55:26 707

原创 2023 年中总结

上半年的琐碎生活

2023-06-28 18:29:35 258 2

原创 [rocketmq] 浅谈结构

几乎是无状态节点,可横向扩展,节点之间无消息同步,主要负责对源数据的管理,包括对于Topic和路由信息的管理。每个 Broker 在启动的时候会到 NameServer 注册,Producer 在发送消息前会根据 Topic 到 NameServer 获取到 Broker 的路由信息,Consumer 也会定时获取 Topic 的路由信息。

2023-06-28 15:22:28 662

原创 2022年终总结

继20年发布了新年计划被男票嘲笑一年后,2022年真的是开始有改变了,确实看了一些书,有了不一样的改变,还要多亏了小郑同学的督促,以及不断的分享,我也要努力在我周围生长出一种向上的螺旋力量。

2022-12-27 19:10:27 772 2

原创 2020年终总结-未来可期

2020年是神奇的一年,我们经历了坎坷的新年,迎来了不同寻常的开篇,我们的生活中多了许多英雄,多了对医务工作者的敬仰。工作没错,我换工作了,脱离了舒适圈,迎来了属于自己的机遇与挑战。面试确实也有碰壁,但也算是有善终,进入了自己比较心仪的公司,结识了温柔美丽的测试运营小姐姐和帅气聪慧的开发小哥哥,还有非常重视个人成长的老大,组长和团队。这真的是我最大的幸运了吧。换了工作发现,当机遇挑战等于压力的时候,是最能够突飞猛进的时候,这个时候如果不积极进取那一定对不起给你机会的那个团队。学习深刻领悟了不断学

2021-01-24 11:32:05 471 9

原创 [java 并发]你真的了解线程池吗?

为什么线程池预先创建若干数量的线程,用户不能直接对线程的创建进行控制,重复使用固定或较为固定的线程来完成任务执行,消除了频繁创建和消亡线程的资源开销,面对过量任务的提交也能够平缓劣化线程池种类Executors.newCachedThreadPool()可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,智能的添加新线程来执行。队列:LinkedBlockingDeque - 由链表结构组成的双向阻塞队列Executors.

2020-08-23 21:10:07 247

原创 redis的数据类型和底层实现

String使用SDS(simple Dynamic String)存储,类似arraylist,可通过预分配冗余空间减少内存的频繁分配简单的key-value类型,value不仅可以是string,也可以是数字编码方式:raw、int、embstrString能够进行扩容,会有一定的free空间,如果删除部分字段的时候空闲时间不会立即删除而是留给下一次操作,如果下一次操作还是没有操作free空间,才会删除回收。而且是按照长度来寻找字符串。HashHashTable、ziplist内部..

2020-08-16 20:18:18 287

原创 ThreadLocal和内存泄露

1. ThreadLocal是什么?线程变量,属于当前线程,该变量对其他线程是隔离的,为变量在每个线程中都创建了一个副本,每个线程都可以访问自己内部的副本变量使用场景:1、在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束。2、线程间数据隔离3、进行事务操作,用于存储线程事务信息。4、数据库连接,Session会话管理。2. 怎么用public static void main(String[] args) { //新建一个ThreadLocal

2020-07-26 20:58:03 241

原创 [面试源码] jdk8 之 LinkedList解析

概述LinkedList 是线程不安全的,允许元素为null的双向链表。其底层数据结构是链表,它实现List, Deque, Cloneable, java.io.Serializable接口,因为实现了Deque接口,所以也可以作为一个双端队列。和ArrayList相比较因为没有实现RandomAccess所以它以下标随机访问数据比较慢。因为底层是链表实现的,所以在增加和删除时只修改指针就可以了,所以时间效率高,也不需要扩容,所以空间效率比arraylist(数组实现)高。缺点就是当随机访问元素时

2020-07-19 21:32:35 249

原创 [面试源码] java8 ArrayList解析

首先看ArrayList实现了 List ,RandomAccess , Cloneable , java.io.Serializable其中的RandomAccess 代表其拥有随机快速访问的能力因为其底层数据结构是数组,是占据一块连续的内存空间,所以其空间效率不高,但是可以根据下标读写(改查)元素,时间效率很高,当集合中的元素超出容量会进行扩容操作,新容量=旧容量*1.5arraylist需要8字节来存储自己的信息,所以最大的容量就是 Integer.MAX_VALUE-8下面来看代码,首先是构

2020-07-12 20:58:36 310

原创 [数据结构]java 队列实现广度优先搜索栈实现深度优先搜索

java代码 用队列实现广度优先搜索 BFS,用栈实现深度优先搜索 DFS

2020-07-05 09:41:30 552

原创 [java 并发] ReentrantLock源码详细解读

对于reentrantlock的源码详细解读,包括AQS内部类的关系及使用

2020-06-28 16:05:19 203

原创 [java 并发] ReentrantLock公平锁和非公平锁的实现

reentrantlock可以实现公平锁和非公平锁 ReentrantLock lock=new ReentrantLock(false); public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); }非公平锁中源码如下 final void lock() { // 如果cas尝试获取锁成功(将state锁状态从0设置为

2020-06-21 20:59:05 510

原创 如何在 github 上找到优质代码

在用github的时候经常会搜索到很多代码,但是又不知道哪个是我们该选择的,经常会眼花缭乱,所以需要提升一下查找效率。搜索in查找项目名字或描述或 readme 中存在搜索关键字的项目格式: XXX关键词 in:name 或description 或 readmespringcloud in :namespringcloud in :descriptionspringcloud in :readme联合查询springcloud in :name,readme,descriptio

2020-06-14 20:25:51 1279 2

原创 mysql 行转列和合并列

文中所用数据库格式如下查询所有学生 ORACLE开发,J2EE从入门到精通,EJB及设计模式 这三门课程的分数SELECT sc.grade, tc.cname, sc.sno FROM t_score sc JOIN t_course tc ON sc.cno = tc.cno where cname='ORACLE开发' or cname='J2EE从入门到精通' or cname='EJB及设计模式’我们查询出来的结果如下要把它从行转为列,,sql 如下SE

2020-06-06 16:19:44 1003 4

原创 LocalDateTime的使用

一般我们用到的 Date 类型的日期如果不经过格式化打印出的数据可读性会比较差所以会需要经过 SimpleDateFormat 来格式化,但是SimpleDateFormat 的 format是线程不安全的,parse方法也是线程不安全的。接下来我们看一下jdk8 的新日期和时间APILocalDate //获取当前年月日 LocalDate now=LocalDate.now(); //指定年月日 LocalDate localDate=LocalDate.of(2020,

2020-05-31 20:25:58 418 1

原创 DevTools 热部署配置

修改pom文件<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>添加插件<plugins&.

2020-05-24 21:01:33 261 1

原创 详解类的加载过程

类加载主要职责就是加载各种 class 文件到 JVM 中,类的加载过程主要分为三个阶段:加载、连接、初始化其中连接又分为:验证、准备、解析三个过程加载类的加载就是将class文件中的二进制数据读取到内存中,然后将该字节流锁代表的静态存储结构转换为方法区中运行时的数据结构,并且在堆内存中生成一个该类的java.lang.Class 对象,作为访问方法区数据结构的入口。连接1. 验证验证阶段主要是确保class文件的字节流锁包含的内容符合当前 jvm 规范的要求,并且不会出现危害 jvm 自

2020-05-17 20:37:49 331

原创 JUC包下关于并发的工具类

在学习多线程的时候还是需要一些工具来加持,所以介绍一下JUC中关于并发的工具类,主要有CountDownLatch、CyclicBarrierDemo、SemaphoreDemo、Phaser、ExchangerCountDownLatch 门闩门闩能够使一个线程在等待另一些线程完成各自的工作后再继续执行。通过使用计数器来实现,计数器的初始值为线程的数量,每当一个线程完成自己的任务后,通过countDown() 方法将计数器减一,当计数器的值为 0 时,表示所有的线程都完成各自的任务,这时等待的线程

2020-05-10 16:13:41 249

原创 [CAS] getAndIncrement() 和 incrementAndGet() 方法的区别

执行下段代码public static void main(String[] args) { AtomicInteger one =new AtomicInteger(5); int a =one.getAndIncrement(); System.out.println("a="+a); System.out.println("o...

2020-05-03 20:30:58 1767 1

原创 技术选型:为什么要使用Sentinel?

Hystrix已经停止更新后,大部分的技术选型会转向Sentinel,也就是 Spring Cloud Alibaba 刚刚开源的,但是为什么我们要使用它呢,我们从 Sentinel 和 Hystrix 的对比入手Hystrix 的关注点是在 隔离 和 熔断 为主的容错机制,超时或被熔断的调用会快速失败,并可以提供 fallback 机制Sentinel 主要是以流量为切入点,从流量控制,熔断...

2020-04-22 10:05:49 1514 2

原创 Sentinel 安装和流控的基本实现

安装控制台下载对应 sentinel 版本的控制台 jar 包地址:官方下载地址在下载的路径下执行 cmd 命令 ,启动该jar包java -jar sentinel-dashboard-1.7.1.jar看到启动成功后不要关闭命令窗口访问 dashboard 默认端口为 8080 ,http://localhost:8080 这样就可以看到我们对应的 dashboa...

2020-04-20 21:01:12 465

原创 配置 Sentinel 规则持久化

配置sentinel规则持久化的详细步骤

2020-04-19 09:50:27 1196 2

原创 spring-boot-maven-plugin:<unknown> 插件找不到的解决办法

在pom文件中引入该插件的时候一直报错,我最终解决的办法是给定了一个版本,代码如下就解决了,我尝试了其他的版本不可以,就只有这个成功解决了 <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> &lt...

2020-04-07 11:46:25 16729 4

原创 疫情之下的互联网

2020年是不平凡的一年,当我们都准备好回家过年的那天,新冠肺炎疫情也开始了,这不是我们期盼的,也不是我们想看到的,明明该是阖家团圆共度佳节的日子,却变成了在家隔离,不能外出的闭塞日子。但在疫情期间助力最大的就是互联网了。疫情信息我们最先知道疫情是通过互联网它的传播方式有哪些症状如何做好防护全国的疫情进展所有我们想要知道的信息都会通过各种方式送到我们面前与2003年的非典相比,在2...

2020-04-05 15:01:28 315

原创 轻松理解并使用 Iterator

本身是一个接口,作用就是遍历容器内的所有元素Iterator iterator = list.iterator();实现该接口后,相当于把一个 collection 容器的所有对象,做成一个线性列表,而 iterator 是一个指针,开始时位于容器内的第一个元素之前。 具体方法hasNext()判断 iterator 内是否有下一个元素,如果存在返回 true ,否则返回 false ...

2020-04-01 11:30:45 157

原创 Java中Validator的使用

很多时候都需要校验穿的参数是否符合规则,但是这种校验的代码会重复很多,所以引入 validator 来校验参数,这样可以省去很多冗余的代码1.pom文件引入 <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</art...

2020-03-24 15:05:02 8727 1

原创 nginx的安全配置

隐藏nginx的版本在 nginx.conf 配置文件下添加此代码http { server_tokens off; }ip安全白名单:location /{ allow 192.168.23.21 deny all ;}黑名单location /{ deny 192.168.23.21 allow all ;}文件安全 location /lo...

2020-03-08 20:35:32 315

原创 Apache Shiro 简介

Apache Shiro 是 Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。Shiro 的 API 也是非常简单易懂;Authentication:身份认证 / 登录,验证用户是不是拥有相应的身份;Authoriza...

2020-02-29 11:49:40 467

转载 MySQL高级-批量插入数据脚本

0.准备1.创建tb_dept_bigdata(部门表)。create table tb_dept_bigdata(id int unsigned primary key auto_increment,deptno mediumint unsigned not null default 0,dname varchar(20) not null default ‘’,loc varcha...

2020-02-15 19:55:50 289 1

原创 mysql高级-explain的使用

使用:explain + select 语句输出格式下面逐一解释各个含义idid相同,执行顺序由上向下如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大优先级越高,越先执行。select_typeSimple 简单的 select 查询,查询中不包含子查询或 UNIONPrimary 查询...

2020-02-09 20:11:27 176 3

原创 MyBatis 缓存机制

一级缓存(本地缓存)sqlsession级别的缓存,一级缓存是一直开启的,sqlsession几倍的一个与数据库同一次会话期间查询到的数据会放到本地缓存中失效的情况1.不同的sqlsession2.同一个sqlsession,参数不同(当前缓存中没有这个数据)3.sqlsession相同,两次查询期间执行了增删改操作(这次增删改可能对数据有影响)4.sqlsession相同,手动清空了...

2020-02-02 14:58:48 187 5

原创 Mybatis的动态sql详解

if标签符合条件就拼接,否则不拼接<if test="name != null and name != ''"> and NAME = #{name}</if>where标签通常和if联合使用当标签中第一个符合条件的块的第一个单词是and或者or时,会被自动剔除<select id="getStudentListWhere" parameterTyp...

2020-01-20 08:12:22 219 1

nacos-1.1.4

spring cloud Alibaba 微服务中的注册中心 Nacos ,继Eureka停更进维后的替代者,集 注册中心,服务配置,服务总线于一身。

2020-04-25

System.Windows.Forms.dll

用于.net,引用窗体控件等操作,确实可用,祝大家编码愉快!

2018-12-12

System.Data.SQLite.dll

用于.net结构的,引用就好,确实可以使用,祝大家编码愉快

2018-12-12

VB编辑界面IDE支持鼠标中键功能

VB中没有自带的滚轮插件,所以需要下载安装滚轮插件才可以用鼠标滚轮

2017-11-29

空空如也

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

TA关注的人

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