自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 JeecgBoot低代码平台

JeecgBoot 是一款基于代码生成器的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!JeecgBoot 引领新的低代码开发模式 (OnlineCoding-> 代码生成器 -> 手工 MERGE), 帮助解决 Java 项目 70% 的重复工作,让开发更多关注业务。既能快速提高效率,节省研发成本,同时又不失灵活性!

2024-12-19 16:32:56 170

原创 Redis缓存穿透和雪崩(面试高频)

redis缓存的key过期瞬间,如果有海量并发请求,比如56秒失效,56.1秒恢复key,这0.1秒内有海量并发请求,会像子弹一样,在 一点瞬间击穿,海量并发就去访问数据库了,会让数据库瞬间压力过大(关晓彤和鹿晗官宣恋爱,微博服务器宕机,就是海量并发都在查这条消息,是典型的缓存击穿)比如客户查询一个根本不存在的东西,首先从Redis中查不到,然后会去数据库中查询,数据库中也查询不到,那么就不会将数据放入到缓存中,后面如果还有类似源源不断的请求,最后都会压到数据库来处理,从而给数据库造成巨大的压力。

2024-12-01 10:39:44 256

原创 CPU 100%问题排查步骤

一台机器,CPU100%,如何找到相关服务,如何定位问题代码,今天简单分享下思路。简要步骤如下:找到最耗CPU的进程;找到最耗CPU的线程;查看堆栈,定位线程在干嘛,定位对应代码;

2024-11-30 17:19:21 383

转载 Redisson锁的基本原理详解

当有线程释放了锁之后,其它加锁失败的线程就会来继续加锁,加锁之前会先判断一下set集合的头部的线程跟当前要加锁的线程是不是同一个,如果是的话,那就加锁成功,如果不是的话,那么就加锁失败,这样就实现了加锁的顺序性。指定和不指定超时时间的主要区别是,加锁成功之后的逻辑不一样,不指定超时时间时,会开启watchdog后台线程,不断的续约加锁时间,而指定超时时间,就不会去开启watchdog定时任务,这样就不会续约,加锁key到了过期时间就会自动删除,也就达到了释放锁的目的。答案肯定是有的,接着往下看。

2024-11-29 17:45:56 617

原创 ThreadLocal 内存泄露的原因

如果 ThreadLocal 实例在代码中没有显式的强引用,并且没有手动调用 remove() 方法,ThreadLocal 可能会被 GC 回收,而 ThreadLocalMap 中的 Entry 会变成一个 key 为 null 的条目,导致 value 不能被回收,从而引发内存泄漏。通过在 finally 块中调用 remove 方法,可以确保无论代码执行过程中是否出现异常,都能及时清理线程局部变量,避免内存泄漏。

2024-10-27 11:42:41 338

原创 Java线程池原理详解

在Java中可以通过来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolExecutor类中的方法讲起,然后再讲述它的实现原理,接着给出了它的使用示例,最后讨论了一下如何合理配置线程池的大小。以下是本文的目录大纲:一.Java中的ThreadPoolExecutor类二.深入剖析线程池实现原理三.使用示例四.如何合理配置线程池的大小若有不正之处请多多谅解,并欢迎批评指正。

2024-10-27 11:07:33 970

转载 Redis cluster集群原理

它是去中心化的,如图所示,该集群有三个 Redis 节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样。如果请求的 key 在当前节点找到就直接执行命令,否则时候就需要 ASK 错误响应了,槽部分迁移未完成的情况下,如果需要访问的 key 所在 Slot 正在从从 实例 1 迁移到 实例 2,实例 1 会返回客户端一条 ASK 报错信息:客户端请求的 key 所在的哈希槽正在迁移到实例 2 上,你先给实例 2 发送一个 ASKING 命令,接着发发送操作命令。

2024-10-17 17:49:51 108

转载 Kubernetes架构最全详解

Kubernetes简化了容器化应用程序的部署、管理、和操作流程,比如:通过自动化的方式,可以减少人为操作错误...等场景。比如:通过持续监控容器的健康状态,自动重启崩溃的容器,重新调度失败的容器实例...等场景,确保应用程序的高可用性。容器编排是K8S的核心功能,主要管理:多个容器的部署、扩展、和操作,以及自动处理容器的创建、删除、和重新分配。比如:(增加、或减少容器数量)、和垂直扩展(调整容器的资源分配,比如:CPU、和内存)等,自动伸缩。

2024-09-25 16:41:59 248

原创 Dubbo服务发现流程

注册中心对本身可做对等集群,可动态增减节点,并且任意一台宕掉后,将自动切换到另一台。去中心化,双方不直接依懒注册中心,即使注册中心全部宕机短时间内也不会影响服务的调用。服务提供者无状态,任意一台宕掉后,不影响使用。

2024-09-14 16:48:48 375

转载 详解的TCP三次握手和四次挥手

TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急)

2024-08-24 10:18:34 119

转载 限流常用算法&实现

在当前窗口结束的位置有100个请求,时间超过了50S后,又来100个请求,此时由于窗口向前滑动了一小格,所以此时窗口内的请求是100,如果此时有请求进来,则大于100,那么他会把请求都会拒绝,直到窗口滑出50S的时间节点。例如在40S~60S期间来了200个请求,导致20S内大量请求通过限流检查,给一个系统突然的峰值,而这个时间范围越小,峰值越高,就会导致系统的崩溃。缺点:存在窗口切换时的突增问题,即在时间窗口的临界点附近,如果请求数突然增加,可能会导致短时间内大量请求通过限流检查,从而对系统造成压力。

2024-08-23 11:13:28 93

转载 HashMap&ConcurrentHashMap 原理分析

Java集合篇:HashMap 与 ConcurrentHashMap 原理总结(1)HashMap 是基于 Map 接口的非同步实现,线程不安全,是为了快速存取而设计的;它采用 key-value 键值对的形式存放元素(并封装成 Node 对象),允许使用 null 键和 null 值,但只允许存在一个键为 null,并且存放在 Node[0] 的位置,不过允许存在多个 value 为 null 的情况。

2024-08-17 15:37:16 147 2

转载 TCP三次握手、四次挥手过程及原理

一文彻底搞懂 TCP三次握手、四次挥手过程及原理TCP 协议简述TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接。TCP包首部网络中传输的数据包由两部分组成:一部分是

2021-08-06 11:14:04 581

转载 Java内存区域(运行时数据区域)和内存模型(JMM)

Java内存区域(运行时数据区域)和内存模型(JMM)Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分。而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之间的抽象关系,即 JMM 定义了 JVM 在计算机内存(RAM)中的工作方式,如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java运行时数据区域众所周知,Java 虚拟机有自动内存管理机制,如果出现内存泄漏和溢出方面的问

2021-07-21 16:43:37 200

转载 Netty原理分析

1. Netty基本概念Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。如:Dubbo、 RocketMQ、Hadoop的Avro

2021-06-02 10:58:33 141

转载 Redis五种数据结构

Redis五种数据结构Redis五种数据结构如下:对redis来说,所有的key(键)都是字符串。1.String 字符串类型是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。使用:get 、 set 、 del 、 incr、 decr 等127.0.0.1:6379> set hello world...

2021-05-27 15:20:44 290

转载 Kettle中文乱码问题

最近使用kettle从测试环境迁移数据到生产环境 ,遇到中文乱码问题。找了很久资料,最终才解决。解决方法:在 起始数据库 跟 目标数据库 的选项里 都配置编码 (characterEncoding=utf8):然后运行就ok了如果不行,就清理一下kettle 数据库连接的缓存然后再重新运行! 我到这里就完全ok了如果还不行,可以试着在kettle的启动文件添加字符集,即在 Spoon.bat 文件中添加 “-Dfile.encoding=UTF-8”:...

2021-05-27 15:19:26 569

转载 如何保证API接口的安全性

如何保证API接口的安全性怎样防伪装攻击防伪装攻击:即防止接口被其他人调用,此阶段可以理解为比如已经登录了,然后在请求其他接口的时候,通过Token授权机制来判断当前请求是否有效Token是客户端访问服务端的凭证。Token授权机制用户用密码登录或者验证码登录成功后,服务器返回token(通常UUID)给客户端,并将Token-UserId以键值对的形式存放在缓存服务器中。 客户端将token保存在本地,发起后续的相关请求时,将token发回给服务器; 服务器检查t..

2021-05-24 17:25:24 8091

原创 Spring IOC AOP简述

1.AOPAOP(面向切面)是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程(OOP)。AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向对象的软件系统中,从而实现了横切关注点的模块化。AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。使用AOP的好处降低模块的耦合度 使系统容易扩展 提高代码复用性AOP的

2021-05-16 20:10:43 115

转载 RPC原理简述

RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty。目前流行的开源 RP

2021-03-18 21:17:13 1946 1

原创 RPC模型原理

1. 基本的RPC模型主要介绍RPC是什么,基本的RPC代码,RPC与REST的区别,gRPC的使用1.1 基本概念RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务 本地过程调用:如果需要将本地student对象的age+1,可以实现一个addAge()方法,将student对象传入,对年龄进行更新之后返回即可,本地方法调用的函数体通过函数指针来指定。 远程过程调用:上述操作的过程中,如果addAge()这个方法在服务端,执行函数

2020-11-26 15:16:38 830 1

转载 spring cloud Feign实现文件传输/上传

今天在实现后台上传功能时,在feign传输文件时一直出问题,故此记录下实现过程,需特别注意标红代码地方。此功能实现后台代码分为服务端、客户端:  前台页面调用客户端接口,客户端再调用服务端接口1.服务端FileController接口:@RequestMapping(value = "/uploadImageSingle", method = RequestMethod.POST) public BaseDataResp uploadImage(@RequestParam(valu

2020-11-06 11:14:19 834

原创 outLook VBA 根据标题关键字分组密送

Option ExplicitPrivate Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) Dim oItem As MailItem Dim oRecipient As Recipient Set oItem = Item Dim strSubject As String Dim strBody As String strSubject = Item.Su...

2020-08-19 16:37:55 477

转载 Nacos集群模式部署

近几年微服务很火,SpringCloud提供了为服务领域的一整套解决方案。其中SpringCloud Alibaba是我们SpringCloud的一个子项目,是提供微服务开发的一站式解决方案。包含微服务开发的必要组件,基于SpringCloud 符合SpringCloud标准,是阿里的微服务的解决方案。文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md回到顶部Nacos的安装与启动Na..

2020-07-18 11:16:47 2131

转载 kettle读取数据库字段出现乱码解决方法总结

最近使用kettle从测试环境迁移数据到生产环境 ,遇到中文乱码问题。找了很久资料,最终才解决。解决方法:在 起始数据库 跟 目标数据库的选项里 都配置编码 (characterEncoding=utf8):然后运行就ok了如果不行,就清理一下kettle 数据库连接的缓存然后再重新运行! 我到这里就完全ok了如果还不行,可以试着在kettle的启动文件添加字符集,即在Spoon.bat 文件中添加 "-Dfile.encoding=UTF-8":...

2020-07-09 13:37:50 1580

转载 java8 复合类型对象的List集合的排序,求和,取最大值,按照条件过滤

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30...

2020-02-12 11:46:41 1303

原创 关于@Valid对数组里的实体字段校验不生效的问题解决

@Valid对于单个实体Bean是可以起校验作用的,但对于List<Bean>的校验是不生效的。针对这种情况可以将List<Bean>定义在另一实体中。举个例子:@Datepublic class ListBean{ @Valid private List<Bean> beans;}在接收数据的方法如下:@ResponseBo...

2019-10-24 11:17:23 3734

空空如也

空空如也

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

TA关注的人

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