自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(733)
  • 问答 (2)
  • 收藏
  • 关注

原创 Lomok之高级注解用法

想让另一个类B也能用这个方法,那就可以在B类中加上一个A类型的字段,并在这个字段上加上@Delegate注解,这样,B类就可以直接调用sayHello()方法,就像它是自己的方法一样。注解可以用在集合类型的字段上,它会生成两个方法,一个是添加单个元素的方法,一个是添加整个集合的方法。这样写最大的好处就是可以避免类的层次过深或者耦合过紧,提高代码的可读性和可维护性,各种继承来继承去是真的看得头疼。允许创建一个新的对象,该对象是当前对象的副本,但某些字段的值已被更改。比如,有一个类叫做A,它有一个方法叫做。

2024-03-30 19:33:57 952 1

原创 Java序列化之Jackson详解

Jackson是一个用于处理JSON数据的开源Java库。是一种轻量级的数据交换格式,易于阅读和编写,同时也易于计算机解析和生成。在Java领域,Jackson已经成为处理JSON数据的事实标准库。它提供了丰富的功能,包括将Java对象转换为JSON字符串(序列化)以及将JSON字符串转换为Java对象(反序列化Jackson:提供了通用的数据绑定功能(将Java对象与JSON数据相互转换):提供了核心的低级JSON处理API(例如JsonParser和JsonGenerator)

2024-03-24 18:28:02 836

原创 Java IO流之Netty实现聊天通信功能

点击了解 IO流之IO,NIO和AIO讲解Netty是一个相当优秀的通信框架,大多数的顶级开源框架中都有Netty的身影。应用过程中,它最核心的东西叫handler,我们可以简单理解它为消息处理器。收到的消息和出去的消息都会经过一系列的handler加工处理。收到的消息我们叫它入站消息,发出去的消息我们叫它出站消息,因此handler又分为出站handler和入站handler。收到的消息只会被入站handler处理,发出去的消息只会被出站handler处理。

2024-03-15 13:54:59 843 2

原创 JDK8之LocalDateTime讲解

是Java 8中日期时间API提供的一个类,在日期和时间的表示上提供了更加丰富和灵活的支持。类相比于早期的Date和Calendar丰富的日期时间类型支持类封装了LocalDate和LocalTime两个类,支持更加细化的日期时间操作,例如获取某一天的开始和结束时间、获取某个时间段内的所有日期等。线程安全性类是不可变对象,线程安全性较高,可以在多线程环境下安全使用。时区支持类在处理时区相关的操作时有着很好的支持,例如可以将一个对象转换成对象,以支持更加复杂的时区计算。类的实现原理是基于Java的时间。

2024-02-22 14:42:41 939

原创 数据库之隔离级别,脏读幻读,事务特性

脏读:指一个事务读取了一个未提交事务的数据,即当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。说明:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同,一个事务读取到了另一个事务提交后(update)的数据。是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。

2024-02-06 16:23:19 724

原创 Spring事件之注解@EventListener讲解

当我们观察方法的时候,会发现这个方法它主要是在对这个缓存在搞事情。这个缓存里面放的就是在项目启动过程中已经触发过的框架自带的listener对象:调用的时候,如果能从缓存中拿到对应的listener,则直接返回。而我们Demo中的自定义listener是第一次触发,所以肯定是没有的。因此关键逻辑就在方法里面:这个方法里面的逻辑较多,只说一下这个关键的 for 循环:这个 for 循环在干啥事呢?就是循环当前所有的listener,过滤出能处理当前这个事件的listener。

2024-02-03 14:29:16 1295

原创 日志之Loki详细讲解

下、创建的端口号是3100,就需要填写为http://loki:3100,这里为什么不写IP地址而写成服务的名字,是因为在k8s集群里面有个dns服务器会自动解析这个地址。另外也可以用上面提到的其他日志收集工具来收取,这篇文章在结尾处会附上其他工具的配置方式。改为1,是因为这个设置不正确造成的。收集起来的日志信息对于业务来说是至关重要的,因此需要在容器重启的时候日志能够保留下来。如果是裸机部署的情况下,需要对上面的配置文件做一下稍微的改动,更改。从上面的图中我们可以看到,它在解析日志的时候是以。

2024-01-30 22:08:01 1264

原创 数据库之TiDB基础讲解

TiDB是PingCAP公司研发的一款开源分布式关系型数据库,从 2015年 9 月开源,至今已经有9 年时间,可以说已经非常成熟,它是一款同时支持OLTP(在线事务处理)和OLAP(在线分析处理)的融合型分布式数据库产品,具备水平扩缩容,金融级高可用、实时、云原生的分布式数据库,兼容MySQL 5.7协议和MySQL生态等重要特性,它适合高可用、强一致要求较高、数据规模较大等各种应用场景。金融级高可用在线水平扩容或者缩容,并且存算分离云原生的分布式数据库,支持部署在公有云,私有云,混合云中。

2024-01-30 21:16:51 1394

原创 Easy-Es操作Elasticsearch

Easy-Es(简称EE)是一款基于(简称ES)官方提供的打造的ORM开发框架,在的基础上,只做增强不做改变,为简化开发、提高效率而生。EE和(简称MP)的用法非常相似,如果你之前使用过MP的话,应该能很快上手EE。EE的理念是:把简单、易用、方便留给用户,把复杂留给框架。全自动索引托管:开发者无需关心索引的创建、更新及数据迁移等繁琐步骤,框架能自动完成。屏蔽语言差异:开发者只需要会MySQL的语法即可使用ES。代码量极少:与直接使用官方提供的相比,相同的查询平均可以节省3-5倍的代码量。

2024-01-30 09:33:50 1311

原创 规则引擎之LiteFlow讲解

在日常的开发过程中,经常会遇到一些串行或者并行的业务流程问题,而业务之间不必存在相关性。在这样的场景下,使用策略和模板模式的结合可以很好的解决这个问题,但是使用编码的方式会使得文件太多,在业务的部分环节可以这样操作,在项目角度就无法一眼洞穿其中的环节和逻辑。liteflow是一个轻巧而且强大的规则引擎,能够实现开箱即用,可以在短时间内就可以完成复杂的规则编排,下图是liteflow的整体架构。liteflow支持较多的规则文件格式,比如。

2024-01-29 17:51:41 1244

原创 批量数据之DataX数据同步

DataX是阿里云DataWorks数据集成 的开源版本,主要就是用于实现数据间的离线同步。DataX致力于实现包括关系型数据库(MySQL、Oracle 等)、HDFS、Hive、ODPS、HBase、FTP 等 各种异构数据源(即不同的数据库) 间稳定高效的数据同步功能。为了解决异构数据源同步问题,DataX将复杂的网状同步链路变成了星型数据链路 ,DataX作为中间传输载体负责连接各种数据源;当需要接入一个新的数据源时,只需要将此数据源对接到DataX,便能跟已有的数据源作为无缝数据同步。

2024-01-26 22:01:37 626

原创 xxl-job之API的方式接入

xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、支持分布式等优点,让它广泛应用在我们的项目中,解决了不少定时任务的调度问题。我们都知道,在使用过程中需要先到xxl-job的任务调度中心页面上,配置执行器executor和具体的任务job,这一过程如果项目中的定时任务数量不多还好说,如果任务多了的话还是挺费工夫的。

2024-01-26 21:07:23 1502

原创 不同版本Nacos原理之临时/永久实例,注册服务,心跳保活,服务发现,责任机制

1.x:是通过Http协议来进行服务注册的2.x:由于客户端与服务端的通信改成了gRPC长连接,所以改成通过gRPC长连接来注册2.x比1.x多个Redo操作,当注册的服务实例是临时实例是,出现网络异常,连接重新建立之后,客户端需要将服务注册、服务订阅之类的操作进行重做这里你可能会有个疑问既然2.x有Redo机制保证客户端与服务端通信正常之后重新注册,那么1.x有类似的这种Redo机制么?当然也会有,接下往下看心跳机制仅仅针对临时实例而言1.x。

2024-01-19 14:43:49 1212 1

原创 Apollo之原理和使用讲解

由于Apollo概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用。Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

2024-01-14 17:41:22 972

原创 Compileflow工作流引擎使用讲解

是一个非常轻量、高性能、可集成、可扩展的流程引擎。引擎是淘宝工作流TBBPM引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成java代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。能让开发人员通过流程编辑器设计自己的业务流程,将复杂的业务逻辑可视化,为业务设计人员与开发工程师架起了一座桥梁。

2024-01-14 16:07:13 1111

原创 TCP之三次握手四次挥手与UDP区别

客户端向服务器发送建立连接请求一开始,客户端和服务端都处于CLOSE状态。先是服务端主动监听某个端口,处于LISTEN状态第一次握手:主机 A 发送位码为syn=1,随机产生的数据包到服务器,主机 B 由SYN=1知道, A 要求建立联机;该报文不包含应用层数据,之后客户端处于SYN-SENT状态。第二次握手:主 机 B 收 到 请 求 后 要 确 认 联 机 信 息 , 向 A 发 送ack number=( 主 机 A 的seq+1),SYN=1,ACK=1,随机产生的包,把TCP首部的。

2024-01-13 18:27:53 1076

原创 Java实现在线编辑预览office文档

PageOffice是一款在线的office编辑软件,帮助Web应用系统或Web网站实现用户在线编辑文档。可以完美实现在线公文流转,领导批阅,盖章。可以给文件添加水印,在线安全预览防止用户下载和复制文件等我们对以上找到的优秀的解决方案,进行改进和总结,并封装成一个组件:preview组件为什么是组件?因为它跟框架无关,可以在任何框架中使用,且使用起来跟原生的div标签一样方便。并编写使用文档: preview组件文档, 文档支持交互体验。目前docx,pdf,xlsx预览基本可以了,都是最好的方案。

2024-01-13 17:42:17 1510

原创 Linux系统启动时汇编指令

学习 Linux 系统启动流程,必须熟悉几个汇编指令,总结给大家。这里不是最全的,只列出一些最常用的汇编指令。

2024-01-04 11:28:59 953

原创 IP地址定位解析

这个是在之前的一篇文章看到的,是一个 Gthub 的开源项目,即 Ip2region 开源项目地址:https://github.com/lionsoul2014/ip2region这个开源库目前已经更新到了 V2 的版本,现在的它是一个强大的离线IP地址定位库和IP定位数据管理框架,其达到了微秒级别的查询效率,还提供了众多主流编程语言的 xdb 数据生成和查询客户端实现,可以说是非常得好用。

2023-12-24 12:18:46 1025

原创 Spring,SpringMVC,SpringBoot中注解讲解

如果我们将此注解标注类,那么类中的所有方法都将获得支持跨域的能力。在Spring内置的条件控制注解不满足应用需求的时候,可以使用此注解定义自定义的控制条件,以达到自定义的要求。此注解可以让我们控制更细粒度的基于表达式的配置条件限制。在处理请求方法的参数列表中使用,它可以将请求主体中的参数绑定到一个对象中,请求主体参数是通过。注解一样,被此注解标注的类,会自动被Spring所管理。注解是一个快捷的配置注解,在被它标注的类中,可以定义一个或多个。所标注的类,在该类中,定义一个用于处理具体异常的方法,并使用。

2023-11-14 21:39:27 312 1

原创 Redis之Lua脚本讲解

当涉及Lua编程时,以下是对前述12个关键概念的详细说明,附带Lua代码示例以帮助更深入了解这门编程语言@Inherited/*** key*//*** Key的前缀*//*** 一定时间内最多访问次数*//*** 给定的时间范围 单位(秒)*///设置value的序列化方式为JSOn // redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

2023-10-26 11:09:53 1157

原创 MySQL中大量数据优化方案

表分区可以在区间内查询对应的数据,降低查询范围 并且索引分区也可以进一步提高命中率,提升查询效率分区是指将一个表的数据按照条件分布到不同的文件上面,未分区前都是存放在一个文件上面的,但是它还是指向的同一张表,只是把数据分散到了不同文件而已。分表后,显而易见,单表数据量降低,树的高度变低,查询经历的磁盘io变少,则可以提高效率分库分表。

2023-10-24 09:23:46 483

转载 JDK19特性之虚拟线程

在读《深入理解JVM虚拟机》这本书前两章的时候整理了JDK从1.0到最新版本发展史,其中记录了JDK这么多年来演进过程中的一些趣闻及引人注目的一些特性,在调研JDK19新增特性的时候了解到了虚拟线程这个概念,于是对虚拟线程进行学习整理内容如下。虚拟线程(Virtual Threads)就犹如名字一样,并非传统意义上的JAVA线程。传统意义上的JAVA线程(以下称为平台线程)跟操作系统的内核线程是一一映射的关系(如下图所示)。而对于平台线程的创建和销毁所带来的开销是非常大的,所以JAVA采用线程池。

2023-10-10 09:49:48 146

原创 SpringBoot之实现Web消息实时消息推送

长轮询是对上边短轮询的一种改进版本,在尽可能减少对服务器资源浪费的同时,保证消息的相对实时性。长轮询在中间件中应用的很广泛,比如Nacos和apollo配置中心,消息队列中都有用到长轮询。这次使用apollo配置中心实现长轮询的方式,应用了一个类,它是在后经过Spring封装提供的一种异步请求机制,直意就是延迟结果。可以允许容器线程快速释放占用的资源,不阻塞请求线程,以此接受更多的请求提升系统的吞吐量,然后启动异步工作线程处理真正的业务逻辑,处理完成调用提交响应结果。

2023-10-10 09:19:43 498 1

原创 SpringBoot集成WebSocket讲解

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工()通信——允许服务器主动发送信息给客户端,建立客户端和服务器之间的通信渠道。浏览器和服务器仅需一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

2023-10-09 18:54:24 1425 1

原创 SpringBoot之使用Redis和注解实现接口幂等性

*** 在需要保证 接口幂等性 的Controller的方法上使用此注解/*** 在需要保证 接口幂等性 的Controller的方法上使用此注解/*** 在需要保证 接口幂等性 的Controller的方法上使用此注解/*** 在需要保证 接口幂等性 的Controller的方法上使用此注解Retention;/*** 在需要保证 接口幂等性 的Controller的方法上使用此注解/**

2023-10-09 14:08:27 225

原创 Java之实现添加文字水印、图片水印功能

通过上面的步骤,我们已经获取到了原始图片信息,下面需要创建一个画笔进行水印的添加。水印包含文字水印、图片水印。将鼠标移动到想要添加水印的位置,左下角可以看到鼠标点击位置对应的坐标值,拿到这个坐标值写入程序即可。经过上面的操作后,我们的图片添加文字就已经处理完成了。设置不当,就看不到水印效果。将图片保存到本地,然后选中图片点击右键,编辑,选择。我们想要看得到效果,需要进行处理,保存图片到本地。首先,我们要知道图片上的坐标的表示法。水印图片位置:F:\image\s.png。(磅),数字越大,字就越大。

2023-10-09 11:56:08 178

原创 SkyWalking使用讲解

skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。skywalking支持dubboSpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功能较完善。

2023-09-20 15:47:24 1058

原创 Python基础之装饰器

装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的功能或功能装饰器函数是一种Python语言中的特殊函数,它可以用来修改其他函数的行为。装饰器函数通常接受一个函数作为参数,并返回一个新的函数,这个新函数通常会在原函数的基础上添加一些额外的功能作用:为函数增加新功能,减少重复性操作,使代码简洁。

2023-09-18 23:15:05 209

原创 Stream之实现原理分析

执行的时候,会回溯peek操作,然后peek会回溯更上一步的skip操作,skip回溯到上一步的peek操作,顶层没有操作了,开始自上向下开始执行,执行到skip的时候,因为执行到skip,这个操作的意思就是跳过,下面的都不要执行了,也就是就相当于循环里面的continue,结束本次循环。当第四次forEach执行的时候,然后会回溯peek 操作,然后peek会回溯更上一步的limit操作,到limit的时候,发现limit(3)这个job已经完成,这里就相当于循环里面的break操作,跳出来终止循环。

2023-09-18 09:52:59 316

原创 Nacos深入原理从源码层面讲解

Nacos客户端通过Open API的形式发送服务注册请求Nacos服务端收到请求后,做以下三件事:构建一个Service对象保存到集合中使用定时任务对当前服务下的所有实例建立心跳检测机制基于数据一致性协议服务数据进行同步。

2023-09-17 22:01:10 233

原创 jdk8之Optional类判空处理

Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用,通常会用null!=obj这样的方式存在的判断,从而令人头疼导致空指针异常,同Optional的存在可以让代码更加简单,可读性跟高,代码写起来更高效return student为null;return Optional.ofNullable(student).orElse(student为null);测试展示类Student代码@Data。

2023-09-17 18:11:58 349

原创 SpringSecurity中注解讲解

test:是一个注册在Spring容器中的Bean,对应的类是 cn.test.PermissionService;是类中定义的方法;当Spring EL 表达式返回TRUE,则权限校验通过;

2023-09-08 11:46:32 537 1

原创 Spring之RestClient、WebClient和HTTP Interface

文章目录1 RestClient1.1 介绍1.2 准备项目1.2.1 pom.xml1.2.2 创建全局 RestClient1.2.3 Get接收数据 retrieve1.2.4 结果转换 Bean1.2.5 Post发布数据1.2.6 Delete删除数据1.2.7 处理错误1.2.8 Exchange 方法1 RestClient1.1 介绍Spring 框架一直提供了两种不同的客户端来执行 http 请求:RestTemplate:它在 Spring 3 中被引入,提供同步的阻塞式通信。

2023-09-06 15:26:02 729

原创 SpringCloudAlibaba之Sentinel介绍

Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。上面两句话来自Sentinel官网的自我介绍,从这短短的两句话就可以看出Sentinel的定位和拥有的强大功能。Sentinel支持通过注解来定义资源,并配置函数来进行限流之后的处理,如果是使用,则不需要添加依赖可以直接使用注解。

2023-09-05 09:15:11 1698

原创 权限框架之jcasbin讲解

作为一名后台开发人员,权限这个名词应该算是特别熟悉的了。就算是java里的类也有publicprivate等权限之分。之前项目里一直使用shiro作为权限管理的框架。说实话,shiro的确挺强大的,但是它也有很多不好的地方。shiro默认的登录地址还是login.jsp,前后端分离模式使用shiro还要重写好多类;手机端存储用户信息、保持登录状态等等,对shiro来说也是一个难题。在分布式项目里,比如电商项目,其实不太需要明确的权限划分,说白了,认为没必要做太麻烦的权限管理,一切从简。何况shiro。

2023-09-04 11:08:04 479

原创 调试工具之Swagger 2和3 配置使用详解

Swagger目前是比较主流的RESTful风格的API文档工具,做过开发的人应该都用过它它提供了一套工具和规范,让开发人员能够更轻松地创建和维护可读性强、易于使用和交互的API文档(官方口吻)。desc: Swagger 官方网站。

2023-09-04 10:06:35 840

原创 SpringBoot内嵌Tomcat连接池分析

在版本中内置Tomcat版本是9.0.65SpringBoot内置TomcatTomcat的连接等待队列长度,默认是100Tomcat的最大连接数,默认是8192Tomcat的最小工作线程数,默认是10Tomcat的最大线程数,默认是200Tomcat的连接超时时间,默认是20s相关配置及默认值如下server:tomcat:# 当所有可能的请求处理线程都在使用中时,传入连接请求的最大队列长度# 服务器在任何给定时间接受和处理的最大连接数。

2023-08-22 10:10:48 1591

原创 SpringCloud之微服务API网关Gateway介绍

如果没有网关,难道不行吗?功能上是可以的,我们直接调用提供的接口就可以了。那为什么还需要网关?因为网关的作用不仅仅是转发请求而已。我们可以试想一下,如果需要做一个请求认证功能,我们可以接入到API服务中。但是倘若后续又有服务需要接入,我们又需要重复接入。这样我们不仅代码要重复编写,而且后期也不利于维护。由于接入网关后,网关将转发请求。所以在这一层做请求认证,天然合适。这样这需要编写一次代码,在这一层过滤完毕,再转发给下面的 API。

2023-08-04 17:31:58 2322

原创 数据库之Sharding分库分表操作详解

Sharding和,最早是由当当网开源,捐给了Apache,成为了Apache顶级项目,后来又升级成了是一款分布式SQL事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。需要实现接口System . out . println("自定义的id" + id);return id;} // 返回 自定义 算法类型表示 @Override public String getType() {} }

2023-07-22 22:59:01 1329 1

空空如也

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

TA关注的人

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