自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 问答 (1)
  • 收藏
  • 关注

原创 什么叫日志门面

日志门面,是门面模式的一个典型的应用。门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。就像Log4j、Logback日志框架一样,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。为了解决这个问题,就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,都不需要有任何感知。

2024-08-18 18:47:21 824 1

原创 打印日志会不会影响性能?怎么办?

刚开始做开发的时候就有一个疑问, 我们开发一般为了调试方便都会给自己的业务代码加上一些日志, 那么问题来了, 打印这么多日志不会影响性能吗?这个肯定是必然的, 毕竟需要计算机分出一些性能来打印日志的, 但一般要求不苛刻的场景可以忽略这个问题前面说了一般情况下日志影响的性能是可以忽略的, 既然有一般那肯定就有不一般的情况, 今天来了解一下如何减少日志对性能的影响。

2024-08-11 17:01:33 402

原创 CAS5.3自定义登录校验规则

前一篇文章中已经用到了这个抽象类, 这次要要做的还是改造它, 我们可以在之前的基础上来改造/*** 自定义登录拦截器*/@Setter@Override//查询用户信息//仅判断用户是否输入了自己的手机号,需要自行修改} else {throw new RuntimeException("验证码错误");} else {throw new RuntimeException("用户名或密码错误");} else {

2024-08-04 20:51:14 356

原创 CAS5.3使用自定义获取更多的用户信息

玩过cas的小伙伴都知道CAS-Server本身是支持CAS和OAuth2.0两种协议的, 之前写过一篇使用OAuth2.0协议获取用户信息的文章,今天来介绍一下CAS协议怎么获取更多的用户信息。

2024-07-28 23:09:44 229

原创 CAS5.3为OAuth2.0添加自定义用户信息

Slf4j@Autowired@Overridetry {//获取id, id其实就是用户名= null) {//根据用户名获取用户详细信息= null) {//将用户信息放入model中log.error("OAuth获取用户信息错误!", e);throw new RuntimeException("OAuth获取用户信息错误!");

2024-07-21 23:06:22 217

原创 Redis如何高效安全的遍历所有key

在工作中有时可能会用到遍历redis的情况, 如果redis中没有多少数据还行,但是redis'中的数据长度过长的话还是会对性能有一定的影响, 我们使用redis主要的一个原因就是因为redis快, 所以尽量是不要牺牲Redis的性能, 今天找到两种可以高效遍历redis中所有key的方法。

2024-07-14 23:03:40 348

原创 BigDecimal(double)和BigDecimal(String)有什么区别?BigDecimal如何精确计数?

除了scale这个字段,在BigDecimal中还提供了scale()方法,用来返回这个BigDecimal的标度。scale到底表示的是什么?当标度为正数时,它表示小数点后的位数。例如,在数字123.45中,他的无标度值为12345,标度是2。当标度为零时,BigDecimal表示一个整数。当标度为负数时,它表示小数点向左移动的位数,相当于将数字乘以 10 的绝对值的次方。

2024-07-07 22:07:52 854

原创 常见架构的设计原则以及架构设计要素

1.分离关注点(Separation of Concerns):系统中的不同模块应该专注于自己的职责,并与其他模块进行解耦,避免模块之间的耦合度过高,增加系统的可维护性和可扩展性。2.单一职责原则(Single Responsibility Principle):每个模块或者组件应该只负责一个职责或者任务,这样可以减少模块之间的相互影响,提高代码的可读性和可维护性。

2024-06-30 22:53:42 274

原创 字符串根据给定关键词进行高亮显示

一般使用搜索引擎的时候我们会发现,搜索出来的内容都对我们搜索的关键词进行了高亮显示, 这样我们能很直观的看出是不是我们想要的结果, 最近我也遇到了类似的功能, 因为关于舆情的系统使用到了ES, 一开始心想ES本身就有支持的API实现起来不难, 但我这里的需求还不太一样: 关键词是一开始就给定了并不是通过用户输入的, 而且给定的关键词个数也比较多,也因此使用ES原生的API我觉得不太合适。

2024-06-23 19:14:21 206

原创 理解DDD设计

DDD的理解领域驱动设计(Domain-Driven Design,DDD)是一种软件开发方法论,强调将业务领域作为软件设计的核心,以便更好地满足业务需求。DDD认为,软件开发的核心是理解业务,而不是实现技术。在DDD中,软件开发人员应该与业务人员密切合作,了解业务需求,理解业务模型。通过抽象出业务领域模型、领域服务和领域事件等概念,将业务模型映射到软件系统中,以实现更好的业务价值。

2024-06-16 18:09:54 596

原创 使用Puppeteer生成echarts图片

Puppeteer 是一个用于控制 Headless Chrome 或 Chromium 浏览器的 Node.js 库。它提供了一个高层次的 API,能够让你以编程方式操作浏览器,从而实现自动化任务,比如生成页面截图和 PDF、抓取网页内容、自动化表单提交、UI 测试等。简单来讲我们部署一个虚拟浏览器, 通过后台渲染然后把图片输出。

2024-06-10 09:11:44 722

原创 将字符串 “()“ “&“ “|“ 条件组成的复杂表达式转换为ES查询语句

此工具的复杂之处在于我们并不确定操作系统的人员会输入怎样的表达式,格式并不是固定的因此可能会书写出较为复杂的逻辑. 也有可能只嵌套一层就结束了,所以我们的代码一定要考虑的通用此处我简单说一下它的原理, 主要是用到了一个java中栈的概念: 这个工具通过解析输入的逻辑查询字符串,使用栈来管理运算符和操作数,构建出对应的查询树,然后将其转换为Elasticsearch的多字段(如标题、摘要、正文)的搜索查询,实现复杂的逻辑查询条件的自动解析和执行。以下代码全部都加了注释, 应该是不难理解的。

2024-06-02 21:54:20 484

原创 MySQL为什么会选错索引

有的时候,我们加了索引,也不一定最终查询语句就能用上索引,因为Innodb要不要使用索引,该使用哪个索引是优化器决定的,它是根据成本(代价)预估来选择的,他会倾向于选择一个成本最低的方式进行查询。

2024-05-26 21:32:41 961

原创 IDEA如何对多线程进行debug

开发中使用到多线程的时候不少,但是debug起来还是比较困难的,因为默认每次只会进入一个线程,这样有些问题是发现不了的,其实IDEA也是支持进入每个线程来debug的。

2024-05-19 17:42:27 562

原创 COUNT(1)\COUNT(*)\COUNT(列名)到底谁更快

今天来研究一个比较有趣的话题,关于我们平常使用mysql查询数量的到底那种方式查询效率更高的问题。

2024-05-05 17:53:48 949

原创 优化ES搜索性能

最近做的舆情系统用到了ES,比数据库的效率要高得多,不过我也一直在顾虑经过长时间的运行之后数据编的特别多,到时ES也变得吃力,最近也有一些了解优化ES主要从两方面考虑使用更好的硬件肯定是能快速解决问题的,但是这需要钱,我们说了不算,所以主要还是从配置上来下功夫虽然更多的分片可以提高写入吞吐量,因为可以并行写入多个分片。但是,查询大量分片可能会降低查询性能,因为每个分片都需要单独处理查询。而且分片数量过多可能会增加集群的管理开销和降低查询效率,尤其是在内存和文件句柄方面。

2024-04-28 22:08:30 545 5

原创 线程同步的方式

线程同步指的就是让多个线程之间按照顺序访问同一个共享资源,避免因为并发冲突导致的问题。

2024-04-21 20:56:35 237

原创 ES增强框架easy-es

Easy-Es只要用过mybatis-plus的,就可以很轻松的上手easy-es,他们的操作几乎一模一样,而且官网的介绍也都是对比mybatis-plus来介绍的。

2024-04-14 20:06:03 1149 1

原创 使用Postman进行websocket接口测试

因为最近要搞关于基于AI的文本接口测试.需要用到websocket协议,于是看了一下发现postman也可以测而且很方便。

2024-03-31 22:16:14 937

原创 Spring AOP失效的场景

Spring AOP其实是通过动态代理实现的,那么今天要聊的这个问题就是设想什么情况不能使用动态代理,这个问题其实跟Spring事务失效的场景差不多。例如以下方法都是因为在对象内部直接调用其他方法,就会用原始对象直接调用了,不会调用到代理对象,所以代理会失效。首先就是类内部的调用,比如一些私有方法调用,内部类调用,以及同一个类中方法的自调用等。使AOP失效的场景一共有五个。3、final方法调用。

2024-03-24 19:27:02 333 1

原创 Diffblue生成单元测试

Diffblue Cover 是一个强化学习 AI 平台,可自动编写全面的、类似人类的 Java 单元测试,从而节省开发人员时间、提高测试覆盖率并降低回归风险。Cover 以 IntelliJ IDE 插件(Cover)、CLI 应用程序(Cover)和 CI 集成的形式提供,以提供完全自主的操作 (Cover用于测试管理和分析的三个附加组件(Cover、Cover和 Cover)完善了 Diffblue Cover 平台。

2024-03-15 15:15:10 1178 1

原创 Swagger修改Api文档中的数据类型

swagger不陌生,API接口利器,本次要解决的问题是:我们知道前端在接收Long类型的属性时会出现精度问题,一般我们会在序列化的时候将Long类型的数字转换成String但是swagger的API文档中的类型还是Long,我们要解决的就是这个问题。

2024-03-10 17:31:54 1016

原创 为什么相同一段代码JDK版本不同执行结果不同?

最近发现一个挺有意思的事情,在jdk1.8和jdk11中分别运行如下代码,获得的结果是不一样的,接下来我们来探究一下他俩的运行结果为什么不一样?想要搞清楚这个问题,首先我们要了解一下这个方法,

2024-03-03 16:54:16 995

原创 CAS5.3使用JPA实现动态注册服务

cas同时支持cas协议和OAuth2协议,官方默认是通过扫描json文件的形式注册客户端服务,但是此种方式需要重启服务才能生效,此次我们将使用JPA来完美实现动态注册服务,如果不知道cas如何部署,可以擦看之前的文章。

2024-02-25 21:34:08 665

原创 MySql8.0的新特性

MySql8.0相较于MySql5.7有了很多改变,引入了许多新特性和改进,以下列举一些MySQl8.0新增的特性。MySQL 8.0 引入了数据字典,用于存储数据库对象的元数据,取代了之前的。支持窗口函数,允许在查询结果集上执行聚合和分析函数,如。这提高了性能和管理的灵活性。

2024-01-28 20:02:01 541

原创 mysql进行时间分表

当我们的数据多到一定量级的时候数据库会显得吃力,此时我们再进行查询可能需要的时间就比较久了,所以这就需要进行一些针对性的优化,就比如说根据时间进行分区分表设计。

2024-01-21 22:16:54 1027

原创 SpringBoot懒加载

懒加载也并不是这一个注解就能囊括的,这是中技术思路.个人认为懒加载这项技术在开发阶段,尤其是单体项目还是非常有必要的,至于生产,则要按需配置了,并不是所有的Bean都要使用时初始化才好。

2024-01-14 19:56:17 1149

原创 Postman实现压力测试

从事软件开发对于压力测试并不陌生,常见的一些压测软件有等,这些都是一些比较专业的测试软件,对于我的工作来说一般情况下用不到这么专业的测试,有时候需要对一些接口进行压力测试又不想再安装新软件,那么可以使用Postman来实现对接口的压力测试下面我来操作一下。

2024-01-07 21:48:31 2135 4

原创 OSGI热插拔服务

OSGi是一种Java模块化技术,它提供了一种动态的、可扩展的Java运行时环境。OSGi的核心组件是Bundle,它是一种可动态加载和卸载的模块。Bundle可以包含类、资源、配置文件等,并且可以与其他Bundle进行交互。OSGi框架提供了一种服务注册与发现机制,使得Bundle可以在运行时动态地发布和查找服务。通过这种方式,应用程序可以在不停止和重新启动的情况下添加或删除功能。

2024-01-01 23:32:24 490

原创 KPM算法快速检索文本

说到检索文本java的String.indexOf,方法其实已经性能很不错了,contains方法其实也是调用了indexOf方法,所以一般情况下使用contains方法也是完全够用的,简单了解了一下indexOf的原理。

2023-12-24 20:23:20 505

原创 tomcat如何进行安全加固

Tomcat是一个用于构建和运行Java Servlet的开源Web服务器。为了增强Tomcat的安全性,可以采取一些措施进行加固。以下是一些常见的Tomcat安全加固方法

2023-12-17 19:35:57 1177

原创 JWT的原理

在谈及jwt原理前,我们其实对jwt并不陌生,对于有经验的码农,大都听过或者实践过,对于一些初学者,凡是谈及安全方面的问题,总是觉得很复杂,感觉不是自己能搞得懂得,但其实无非也是加密解密的过程,不要想的太复杂,我们先说一说JWT在生产上的应用。

2023-12-10 22:18:50 243

原创 MapperStruct的高级用法

MapperStruct是一个非常好用的Bean映射工具,虽然还需要去维护一个接口来进行映射,但是其bean对象的映射却是非常的高效,另外它还提供了提供了许多自定义的配置,方便我们在各种场景下灵活使用!

2023-12-03 21:08:10 1195

原创 java根据时间区间计算区间中都包含那几个月

在一些需要统计类的需求中可能会计算同比/环比数据,往往我们拿到的并不是每个月的准确时间,需要自行计算,一点一点计算还是挺麻烦的,因此搞一个工具类出来。

2023-11-26 18:36:01 322

原创 导致MySQL索引失效的场景(随时补充)

平时开发种很少注意索引的使用,但在数据量大的时候还是很有必要的,然而索引失效的场景有很多,有时也很难发现问题所在,以下总结一些MySQL索引失效的场景,后续随时补充!13.

2023-11-19 17:26:31 146

原创 Jython可以运行在java中的python

Jython是一种Python语言在Java平台上的实现。它旨在让Python程序员能够在Java平台上编写Python程序,同时还可以利用Java类库中的所有功能。

2023-11-10 15:47:44 619

原创 Spring集成高性能队列Disruptor

Data/*** 定义加入队列的时间毫秒值*//*** 携带的其他信息*/实现EventHandler接口,重写onEvent方法@Slf4j@Overridelog.debug("消费者开始消费数据:[{}]", disruptorEvent);//模拟复杂环境下系统延迟@Slf4j//获取队列@Override//这里一定要写成这种set的形式(也就是说不要改变这个event的内存指向地址),不然消费者会拿不到值});if (!flag) {

2023-11-03 16:19:51 350 1

原创 spring-boot-autoconfigure.jar/META-INF/spring.factories介绍

是Spring Boot自动配置的核心文件,它包含了各种自动配置类的注册信息。这个文件是Spring Boot根据应用程序的依赖关系和配置文件中的条件注解,自动加载和配置所需的Bean的依据。在文件中,每个自动配置类都对应一行,并且每行的格式都是相同的。其中,第一部分是自动配置类的全限定名,第二部分是自动配置类所关联的依赖。这表示类被自动配置了,而它的实现类是由Spring Boot根据应用程序的依赖关系和配置文件中的条件注解自动生成的。

2023-10-29 23:28:35 786 1

原创 SpringBoot使用@Value获取不到yaml中配置的值

在最近的开发中遇到一个问题,使用@Value获取yml文件中配置的属性时始终获取不到值,一开始我以为是没有注入的问题,或者没有写setter方法的问题,后来我发现这些都都写了然后开始百度发现获取不到属性值有这么几个原因。

2023-10-23 10:35:08 3989

原创 cas-server5.3自定义密码校验规则

前面几篇文章都是关于cas的,今天继续,cas有自己的一个加密配置.如果只是简单使用MD5或者SM3等加密算法进行加密的话,可以不需要再进行自定义操作,但是我们一般还会给用户密码加盐,这样的话原本的配置就不满足了,所以需要再自定义一个密码校验规则。

2023-10-13 14:38:06 468

空空如也

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

TA关注的人

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