
Java学习
文章平均质量分 55
雨欲语
说再见就是一点一点死去
展开
-
基于注解方式的枚举值通用校验方法
之前有篇博文介绍了《SpringBoot利用ConstraintValidator实现自定义注解校验》,本文主要也是实现ConstraintValidator接口,利用java的反射实现一个通用的枚举值校验。原创 2024-04-19 10:16:14 · 443 阅读 · 0 评论 -
原型模式(创建型)
原型模式是一种创建型设计模式,它允许在运行时通过克隆现有对象来创建新对象,而不是通过常规的构造函数创建。在原型模式中,一个原型对象可以克隆自身来创建新的对象,这个过程可以通过深度克隆或浅克隆来实现。简单说原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。原创 2023-11-10 15:59:30 · 474 阅读 · 0 评论 -
读取jsonArray文件并转换为java对象工具类
【代码】读取jsonArray文件并转换为java对象工具类。原创 2023-09-15 15:57:16 · 530 阅读 · 0 评论 -
SpringBoot自定义消息总线
在现代的分布式系统中,消息传递已成为一个非常流行的模式。它使得系统内的不同部分可以松耦合地通信,从而实现更高效、更可靠的应用程序。本博客将介绍SpringBoot如何提供简单易用的消息传递机制,并展示如何自定义消息总线以满足特定需求。原创 2023-09-01 11:51:11 · 1317 阅读 · 0 评论 -
SpringBoot基于AOP注解方式实现Redis缓存
Spring中的AOP(Aspect Oriented Programming)是基于代理的AOP实现,通过使用基于代理的技术,可以在不修改原有代码的情况下,对原有代码进行增强和改进。Spring AOP实现了面向切面编程的功能,将横切关注点(Cross-cutting concern)从业务逻辑中抽离出来,通过将切面应用到目标对象的方法上实现功能增强。原创 2023-08-24 10:02:48 · 664 阅读 · 1 评论 -
SpringBoot利用ConstraintValidator实现自定义注解校验
/ 默认错误消息String message() default "name不能为空";// 分组Class原创 2023-08-23 10:44:49 · 3142 阅读 · 0 评论 -
Google Guava Cache的使用
Google Guava Cache是Google Guava库中的一个缓存框架,用于缓存计算结果、数据或资源,提高程序访问效率和响应速度。Guava Cache具有以下特点:①可配置性:Guava Cache支持多种缓存参数的配置,例如缓存大小、过期时间、访问策略等,可以根据应用场景进行灵活配置。②基于引用计数的回收策略:Guava Cache使用基于引用计数的回收策略,当缓存对象的引用计数为0时自动回收,避免了内存泄漏。原创 2023-08-22 17:48:02 · 1447 阅读 · 0 评论 -
OpenAI注册以及Java代码调用
OpenAI可以使用google账号登录,也可以使用微软账号登录,这里建议使用微软账号登录,微软账号不需要vpn即可实现注册,用国内的邮箱和电话号码即可。在红色对话框即可进行对话,需要注意的是,因为受返回会话字数限制,超过一定数量就不会继续,可以在对话框输入continue继续进行。注意这个有效时间是20分钟,如果没有接收到短信会将购买费用返回,我使用阿根廷、印度的都能成功,可以根据实际情况选择。使用第一步注册的微软账号登录,接着会让提供电话号码,使用第二步购买的号码,等待验证码输入即可。原创 2023-03-30 14:43:25 · 10574 阅读 · 36 评论 -
Jmeter简单使用
这里的十个分别表示:名称、协议(http或httpsd)、域名(我这里进行本地测试)、端口号(根据自己的实际情况填写)、请求方法、请求路径、编码、参数、请求体、文件上传。Jmeter是由Apache下的一个纯Java开源项目,可用于做接口测试,也可用于做性能测试,本文主要简单介绍一下安装及使用。Jmeter默认的GUI界面是英文,如果需要改成中文可在一下路径设置:options->Choose Language。其中1,2,3分别表示 线程数量、线程启动时间、运行次数。原创 2023-03-30 13:01:31 · 364 阅读 · 0 评论 -
SpringCloudGateway--基于redis实现令牌桶算法
就是跟生活中漏桶一样,一个水桶,下面有个洞往外漏水,会控制水流速度,不论水桶中有多少睡,漏水的速率保持一致。主要是当某时间段有大量请求,但是已经达到漏桶上限的情况。计数器算法是指从第一个请求开始,每多一个请求就加1,假设设置每秒限流100,当在一秒钟前500ms已经达到100,后面的500ms中的所有请求都会被拒绝。就是在桶中放入令牌,请求获取到令牌后才能继续执行,如果桶中没有令牌,请求要么继续等待,要么直接拒绝。算法工厂由代码提供,令牌桶由redis提供,底层逻辑是lua脚本提供,已经封装好的。原创 2023-03-06 14:40:14 · 1715 阅读 · 0 评论 -
SpringCloudGateway--过滤器(内置filter)
目录一、概览二、内置过滤器1、StripPrefix2、AddRequestHeader3、AddResponseHeader4、DedupeResponseHeader5、AddRequestParameter6、CircuitBreaker7、FallbackHeaders8、RequestRateLimiter9、RedirectTo10、RemoveRequestHeader11、RemoveResponseHeader12、RemoveRequestParameter13、RewritePath原创 2022-12-06 13:31:39 · 7990 阅读 · 0 评论 -
SpringCloudGateway--谓词(断言)
SpringCloudGateway中三个重要词汇:路由(Route):配置网关中的一个完整路由,包括命名,地址,谓词集合(规则),过滤器集合。谓词、断言(Predicate):这是一个 Java 8 函数谓词。输入类型是一个 Spring 框架的 ServerWebExchange。这允许开发人员匹配来自 HTTP 请求的任何内容,例如头部或参数。简单说就是看发送的请求url中是否符合谓词中的规则,符合就通过,不符合就进行拦截。原创 2022-11-26 19:03:26 · 1942 阅读 · 0 评论 -
Java开发琐碎语法(长期更新)
1、List赋初值可使用:Arrays.asList(0.1, 0.25, 0.5, 0.75, 0.9);3、BigDecimal的加减乘除:add、subtract、multiply、divide。④a.compareTo(b) > -1 a大于等于b。⑤a.compareTo(b) < 1 a小于等于b。①a.compareTo(b) == -1 a小于b。②a.compareTo(b) == 0 a等于b。③a.compareTo(b) == 1 a大于b。原创 2022-11-21 20:51:20 · 465 阅读 · 0 评论 -
Java编程注意事项若干(长期更新)
6、进行判null操作的时候,可使用:Optional.ofNullable(str).isPresent();1、new HashMap时一般需要指定大小,如果不清楚,建议设置为16:new HashMap(16);4、进行字符串比对的时候,已知不为null的放前面:"test".equals(str);9、使用idea进行开发时,自己代码可使用format,Ctrl+Alt+L;5、进行判null操作的时候,将null放后面:str!本篇博客仅仅记录开发过程中一些习惯。原创 2022-11-21 20:26:11 · 494 阅读 · 0 评论 -
static方法中注入springBean对象
spring启动的时候,在进行元数据管理的时候,会自动忽略掉static成员,包括其中的属性和方法。如果我们在static中需要调用spring管理的对象,此时可以使用以下三种方式进行注入。三、实现SmartInitializingSingleton。一、使用@PostConstruct注解。原创 2022-11-02 17:43:56 · 4185 阅读 · 0 评论 -
nacos通过服务名获取服务的ip和端口
在微服务某些场景中,我们需要在服务中调用别的服务,比如Java服务调用另外的Java服务时,可以通过引用jar包进行,但如果调用Python等其它服务,此时无法引用jar包,只能通过访问服务暴露的地址调用。可以看到源码中有获取默认的nacos配置的地方,如果我们本身是在一个微服务中进行调用,本身已经在配置文件中配置了nacos地址,此时会直接获取到默认的这些配置, 就不需要再有config的配置了。原创 2022-11-01 14:01:02 · 8860 阅读 · 2 评论 -
BigDecimal使用注解形式进行格式化处理
【代码】BigDecimal使用注解形式进行格式化处理。原创 2022-10-24 17:28:52 · 2019 阅读 · 0 评论 -
Java中日期类型转换、日期类型取值
三、hutool中DateUtil的使用。一、Date转LocalDate。二、LocalDate转Date。原创 2022-09-23 16:07:55 · 792 阅读 · 0 评论 -
SpringBoot、MyBatis、PostgreSQL储存JSON、对象等自定义TypeHandler
由于MyBatis没有提供直接处理JSON的方法,因此需要自己实现处理JSON的类,并继承BaseTypeHandler来处理储存JSON字段。原创 2022-09-20 17:14:06 · 2682 阅读 · 1 评论 -
微服务的几种负载均衡算法
目录一、负载均衡二、负载均衡算法1、静态负载均衡2、动态负载均衡三、Dubbo负载均衡的四种算法1、基于权重随机算法RandomLoadBalance一、负载均衡负载均衡简单的说就是对流量进行重新分配,避免单一机器直接被较为集中的流量击穿,或者避免部分机器由于没有合理分配流量导致空闲。负载均衡分位硬件负载均衡和软件负载均衡,这里主要对软件负载均衡进行一个记录。软件方面的产品比较流行的有LVS、Nginx、HaProxy等。二、负载均衡算法负载均衡算法分位静态负原创 2022-06-07 16:11:55 · 3810 阅读 · 0 评论 -
Java8中List、Map的使用(长期更新)
Java8新特性中,List、Map有许多很好用的功能,本文主要针对此进行讲解。原创 2022-06-06 16:48:00 · 1660 阅读 · 0 评论 -
SpringBoot中使用AOP实现耗时统计
Spring中一个重要的点就是面向切面编程,即AOP,可以实现程序中功能的解耦,让一些类共享相同的行为动作。Spring中AOP的实现主要通过JDK的动态代理和CGLIB实现。一、AOP中相关术语1、切面(Aspect):是指横切多个对象的关注点的一个模块化,切面通过常规类(基本模式方法)或者通过使用了注解@Aspect的常规类来实现。2、连接点(Joint point):就是spring中允许使用通知的地方,基本上每个方法前后抛异常时都可以是连接点3、通知(Advi原创 2022-05-02 18:05:12 · 3503 阅读 · 0 评论 -
Java8对List、Map进行操作报错
java.util.NoSuchElementException: No value present at java.util.Optional.get(Optional.java:135)该报错信息是在对LIst、Map进行统计等操作取值的时候出现的,代码:BigDecimal s = xxList.stream() .map(it -> { XxxDto xxxDto= new XxxDto(); ...原创 2022-01-25 15:20:42 · 1376 阅读 · 0 评论 -
Java上传文件到ucloud对象存储上
使用uclpud对象存储存储文件,比如excel、pdf、png等,这里讲述一下完整的一套使用流程。 首先原创 2022-01-12 13:27:51 · 1257 阅读 · 3 评论 -
DateFormat的parse()后日期不对
在使用字符串时间格式化为Date的操作时,使用DateFormat,代码如下:public void TimeFormat() { DateFormat df = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); try { Date date = df.parse("2021-12-20 12:00:00"); System.out.println(date);...原创 2021-12-21 13:38:06 · 2713 阅读 · 1 评论 -
SpringBoot不同环境动态加载不同配置文件
在平常开发完成后,需要针对不同的环境进行不同的配置文件的选择,之前是建立多个配置文件,然后指定某一个配置文件使用,在进行部署的时候可以使用jar启动命令传参数的办法指定环境,但这样还不够通用,这里讲述一个根据环境变量自动加载不同配置文件的办法。active后面根据不同环境手动指定,现在是使用获取变量的方法${env}新建完成后需要重启电脑。...原创 2021-09-06 19:46:26 · 2222 阅读 · 0 评论 -
垃圾收集器——GC
gc原创 2021-06-02 00:20:28 · 1056 阅读 · 4 评论 -
装饰者模式(结构型)
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。装饰者模式符合开闭原则,即对修改关闭,对扩展开放。原创 2020-12-26 17:44:17 · 930 阅读 · 0 评论 -
使用Redis实现MQ
整个过程,实际上就是利用Redis的功能,生产消息使用lpush入队,取消息就是rpop出队;生产消息publish发布消息到指定的频道,subscribe来订阅具体的消息。MQ实现的功能简单说就是将生产出来的消息来消费,具体的消费模式有点对点消费,发布\订阅模式的消费,Redis中也实现了点对点,发布\订阅这种方式,具体代码展示。常见的消息中间间有很多,比如ActiveMQ,RabbitMQ,Kafka等,这篇博客主要写一下用Redis实现MQ的功能。...原创 2020-11-07 15:57:33 · 2130 阅读 · 0 评论 -
ActiveMQ中的数据类型
在讲ActiveMQ中的数据类型之前,我们先了解一下JMS。 JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。 JMS本身只定义了一系列的接口规范,是一种与厂商无关的 API,用来访问...原创 2019-09-11 00:47:52 · 2177 阅读 · 0 评论 -
策略模式(行为型)
策略模式是一种行为型的设计模式,指的是一个类的行为或者算法可以在运行时更改,也就相当于将一个类的行为或者算法封装起来,使其可以独立于客户而变化。 例如加减乘除算法,我们只需要给计算器输入具体运算方法,计算器可以使用策略模式进行运算;再比如这么多的共享单车,如果有一个统一的容器,就可以不再单独下载App了,可以使用策略模式进行选择;再比如这么多的支付方式,我们只需要...原创 2019-09-10 10:35:55 · 1659 阅读 · 0 评论 -
ActiveMQ消费者和生成者——点对点模式、发布/订阅模式
ActiveMQ中一般有两种消息队列,一是点对点模式(p2p),二是发布/订阅模式(pub/sub)。 在进行demo测试之前,我们先建立一个maven工程,引入相应的包:<dependency> <groupId>org.apache.activemq</groupId> <artifactId&g...原创 2019-09-08 21:06:44 · 1549 阅读 · 0 评论 -
ActiveMQ介绍及快速搭建(Windows端和linux端)
ActiveMQ在实际的应用场景比如有 异步处理: 比如用户注册,注册的时候需要给发送邮件和发送短信,这个时候可以使用消息队列来进行处理,如图: 应用解耦: 比如用户下单购买,用户下单后,订单系统需要通知库存系统,传统的做法是订单系统调用库存系统的接口。这个时候,加入库存系统无法访问,则订单减库存将失败,从...原创 2019-09-06 00:07:02 · 938 阅读 · 0 评论 -
适配器模式—类适配器、对象适配器、接口适配器(结构型)
Adapter英文翻译是转换器、适配器、接头,从名字们就应该能很好的理解。就好比是一个转换头一样,比如去国外,很多时候我们中国带过去的电器插头就需要转换器,再比如内存卡跟电脑交互,很多时候就需要一张读卡器,此时读卡器充当的就是转换器、适配器的功能。 适配器模式将一个类的接口适配成用户所期待的,一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,于是需...原创 2019-08-30 10:44:27 · 1733 阅读 · 1 评论 -
工厂模式——简单工厂模式、工厂方法模式、抽象工厂模式(创建型)
在工厂模式中,分为三种,第一种就是简单工厂模式、第二种是工厂方法模式,第三种是抽象工厂模式。所谓工厂模式,就是指有一个专门的容器之类的地方,为用户创建对象,用户不用再手动去创建对象。容器根据用户传的参数或者调用的子类来自动为其创建对象。这种设计模式在Spring中大量的使用到了。 简单工厂模式: 先介绍一下简单工厂模式,简单工厂模式中,工厂会根据...原创 2019-08-26 19:38:44 · 1253 阅读 · 1 评论 -
单例模式——Java代码实现,C#实际使用展现(创建型)
在设计模式中,单例模式可以说是最简单的一种了,主要作用是让一个类自己进行对象的创建,而且保证了只有一个对象被创建,适用于那种全局的对象。就相当于创建对象的时候不用再进行new操作了,当然,排除使用一些框架帮我们创建对象时也不使用new。 下面直接说一下几种单例模式。 懒汉式线程不安全单例: 所谓懒汉,就是指当调用的时候才去进行对...原创 2019-08-20 14:23:03 · 793 阅读 · 0 评论 -
同步、异步、阻塞、非阻塞
之前参加某公司的校招的时候,当时简历里面写了我的博客地址,然后技术面试官还真去看了,然后问了我一些博客里面的问题。因为写博客是为了方便自己以后忘记及时查看和分享给大家自己的学习方法,然后有些写了之后,没有及时巩固,有些遗忘。 记得当时面试官问到我博客中的NIO,链接地址:https://blog.youkuaiyun.com/qq_41061437/article/details...原创 2019-06-20 23:39:46 · 756 阅读 · 0 评论 -
JDBC的学习(五)——事务、模拟转账(事务回滚)
一、事务的概念事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。事务的特性:①原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。②一致性:指事务执行前后数据的完整性必须保持一致③隔离性:指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离④持久性:指一个事务一旦被提交,它对数据库中数...原创 2018-09-13 15:25:49 · 1131 阅读 · 0 评论 -
JDBC的学习(四)——批处理、二进制存储
批处理可以将多个SQL语句一次性发送给数据库,可以减少连接数据库的开销。JDBC实现批处理有两种方式:Statement和PreparedStatement一、使用Statement对象进行批处理操作步骤:①使用createStatement()方法创建Statement对象②使用setAutoCommit()将auto-commit设置为false。(这是JDBC的自动提交,...原创 2018-09-12 20:07:21 · 703 阅读 · 0 评论 -
JDBC的学习(三)——通用工具类的封装
建立一个JDBC的配置文件,再封装一个工具类,工具类读取配置文件。首先是配置文件:jdbc.username=rootjdbc.password=1234jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc\:mysql\://localhost\:3306/moviedb然后是工具类:import java.io.InputS...原创 2018-09-12 19:09:51 · 713 阅读 · 0 评论