- 博客(262)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 基于注解方式的枚举值通用校验方法
之前有篇博文介绍了《SpringBoot利用ConstraintValidator实现自定义注解校验》,本文主要也是实现ConstraintValidator接口,利用java的反射实现一个通用的枚举值校验。
2024-04-19 10:16:14 202
原创 数据库相关汇总
MySQL性能优化可分为4个大部分:1、硬件和操作系统层面的优化2、架构设计层面的优化3、MySQL程序配置优化4、SQL优化1、硬件及操作系统层面优化从硬件层面来说,影响 Mysql 性能的因素有,CPU、可用内存大小、磁盘读写 速度、网络带宽从操作系层面来说,应用文件句柄数、操作系统网络的配置都会影响到 Mysql 性能。这部分的优化一般由 DBA 或者运维工程师去完成。在硬件基础资源的优化中,我们重点应该关注服务本身承载的体量,然后提出合 理的指标要求,避免出现资源浪费。
2024-04-11 09:12:52 473
原创 Redis相关知识汇总
如果是先删除缓存,再更新数据库,理想情况是应用下次访问 Redis 的时候,发 现 Redis 里面的数据是空的,就从数据库加载保存到 Redis 里面,那么数据是 一致的。这种模式在主从的基础上新增了哨兵节点,但主库节点宕机后,哨兵会发现主库节点宕 机,然后在从库中选择⼀个库作为进的主库,另外哨兵也可以做集群,从⽽可以保证但某⼀个哨兵 节点宕机后,还有其他哨兵节点可以继续⼯作,这种模式可以⽐较好的保证Redis集群的⾼可⽤,但 是仍然不能很好的解决Redis的容量上限问题。所以就会出现数据一致性问题。
2024-04-09 17:13:07 812
原创 状态模式(行为型)
状态模式(State Pattern)是一种行为型设计模式,它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类,但实际上,由于状态模式的引入,行为的变更被封装在了一系列独立的类中,这使得代码更加清晰、易于管理和扩展。状态模式由以下几个角色组成:上下文(Context):定义客户端所感兴趣的接口,并保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。抽象状态(State):可以是一个接口或抽象类,用于定义声明状态更新的操作方法。
2024-04-09 15:18:25 654
原创 ubuntu离线安装k8s
如果报错:sysctl: cannot stat /proc/sys/net/netfilter/nf_conntrack_max: No such file or directory,可能是 conntrack没有加载,执行:lsmod | grep conntrack。docker-ce-linux安装包是阿里云官方提供的开源镜像免费下载服务,每天下载量过亿,阿里巴巴开源镜像站为包含docker-ce-linux安装包的几百个操作系统镜像和依赖包镜像进行免费CDN加速,更新频率高、稳定安全。
2024-02-04 10:28:14 1351 1
原创 k8s从私有库harbor中拉取镜像
Docker镜像是构建应用程序的基础。然而,许多组织和开发团队希望保留他们的Docker镜像在私有仓库中,并从中拉取镜像,而不是从公共Docker Hub中下载。这样做的原因有很多,包括: 因此,从私有仓库中拉取镜像已经成为了许多企业和开发团队的最佳实践。在本篇博客中,我们将探讨如何在Kubernetes集群中成功地从私有仓库中拉取镜像,以便更好地管理和部署应用程序。
2024-01-31 10:05:24 1551
原创 外观模式(结构型)
外观模式(Facade Pattern)是一种结构型设计模式,它为系统中的一组复杂子系统提供一个简单的接口,从而隐藏了这些子系统的复杂性,并且使得代码更加易于使用和理解。外观模式的核心思想是将复杂的系统拆分成多个子系统,每个子系统负责一个特定的任务。然后,外观类作为这些子系统的总管,将它们组织起来,提供一个简单的接口供客户端使用。这样一来,客户端就不需要了解系统内部的复杂性和细节,只需要通过外观类提供的简单接口来访问系统即可。这种方式可以有效地降低系统的耦合度,使得系统更加易于维护和扩展。
2024-01-16 16:52:20 1142
原创 模板方法模式(行为型)
模板方法模式的核心思想是:定义一个抽象类,把一些抽象行为留给子类去实现,而把一些公共行为放在抽象类中实现。在模板方法模式中,抽象类中定义了一个算法框架,由具体子类来实现其中的具体步骤。模板方法模式是一种行为型设计模式,它定义了一个操作中的算法框架,将一些步骤延迟到子类中实现。- 抽象类(Abstract Class):定义了一个算法框架,其中包含了一些抽象的操作,由子类去实现。- 具体类(Concrete Class):实现了抽象类中定义的抽象方法,完成算法中的具体步骤。
2023-12-12 16:34:40 593
原创 建造者模式(创建型)
当我们开发一个软件应用时,我们通常需要创建各种对象。有些对象是简单的,可以直接实例化,但有些对象则比较复杂,需要多个步骤才能创建完成。这时候,建造者模式就派上用场了。 建造者模式是一种创建型设计模式,它允许我们逐步构造一个复杂的对象,而且可以控制整个构造过程。 建造者模式中有四个重要的角色: 整个建造者模式的类图: 首先建立Product类: 创建抽象的Builder类: 创建具体
2023-11-14 15:27:19 411
原创 桥接模式(结构型)
抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。实现(Implementor):定义实现接口,提供基本操作的接口。具体实现(Concrete Implementor):实现实现接口的具体类。优点与缺点:优点:实现抽象和实现的分离桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
2023-11-13 14:17:24 256
原创 原型模式(创建型)
原型模式是一种创建型设计模式,它允许在运行时通过克隆现有对象来创建新对象,而不是通过常规的构造函数创建。在原型模式中,一个原型对象可以克隆自身来创建新的对象,这个过程可以通过深度克隆或浅克隆来实现。简单说原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
2023-11-10 15:59:30 408
原创 SpringCloudGateway--Sentinel限流、熔断降级
SpringCloudGateway是一个基于SpringBoot2.x的API网关,它可以帮助实现路由、过滤、容错等功能,同时也是微服务架构中不可或缺的一部分。在这篇博客中,将会了解到如何使用Sentinel实现SpringCloudGateway的限流、服务降级与熔断。Sentinel是一个轻量级的流量控制框架,它可以帮助我们实现熔断、限流、降级等功能,同时也可以与SpringCloudGateway无缝集成。通过使用Sentinel,可以有效地保护微服务架构免受故障和异常的影响。
2023-11-09 16:58:25 1407
原创 SpringCloudGateway--过滤器(自定义filter)
当使用Spring Cloud Gateway构建API网关时,可以利用Spring Cloud Gateway提供的内置过滤器(filter)来实现对请求的处理和响应的处理。过滤器可以在请求被路由之前或之后被执行,它可以用于修改请求和响应内容、记录请求日志、校验请求参数、鉴权等等。如果内置的过滤器不能满足需求,可以自定义过滤器。
2023-11-02 17:11:17 2670
原创 SpringBoot自定义消息总线
在现代的分布式系统中,消息传递已成为一个非常流行的模式。它使得系统内的不同部分可以松耦合地通信,从而实现更高效、更可靠的应用程序。本博客将介绍SpringBoot如何提供简单易用的消息传递机制,并展示如何自定义消息总线以满足特定需求。
2023-09-01 11:51:11 958
原创 linux常用命令(长期更新)
20、tail命令:tail用来指定输出的文件只输出最后几行。3、进入目录:cd, 可在后面提供绝对路径,如:cd /etc/nginx,向上移动cd .. ,进入根目录:cd /4、复制命令:cp,cp file.txt new_file.txt。7、移动命令:mv,如:mv file.txt fileDir。10、更新指定文件的访问和修改时间、创建新的文件夹:touch。21、head命令:与tail相反,输出前几行。25、下载文件:sz,sz后面指定文件目录。14、创建、查看和连接文件:cat。
2023-08-30 09:34:25 102
原创 SpringBoot基于AOP注解方式实现Redis缓存
Spring中的AOP(Aspect Oriented Programming)是基于代理的AOP实现,通过使用基于代理的技术,可以在不修改原有代码的情况下,对原有代码进行增强和改进。Spring AOP实现了面向切面编程的功能,将横切关注点(Cross-cutting concern)从业务逻辑中抽离出来,通过将切面应用到目标对象的方法上实现功能增强。
2023-08-24 10:02:48 344 1
原创 SpringBoot利用ConstraintValidator实现自定义注解校验
/ 默认错误消息String message() default "name不能为空";// 分组Class
2023-08-23 10:44:49 966
原创 Google Guava Cache的使用
Google Guava Cache是Google Guava库中的一个缓存框架,用于缓存计算结果、数据或资源,提高程序访问效率和响应速度。Guava Cache具有以下特点:①可配置性:Guava Cache支持多种缓存参数的配置,例如缓存大小、过期时间、访问策略等,可以根据应用场景进行灵活配置。②基于引用计数的回收策略:Guava Cache使用基于引用计数的回收策略,当缓存对象的引用计数为0时自动回收,避免了内存泄漏。
2023-08-22 17:48:02 922
原创 OpenAI注册以及Java代码调用
OpenAI可以使用google账号登录,也可以使用微软账号登录,这里建议使用微软账号登录,微软账号不需要vpn即可实现注册,用国内的邮箱和电话号码即可。在红色对话框即可进行对话,需要注意的是,因为受返回会话字数限制,超过一定数量就不会继续,可以在对话框输入continue继续进行。注意这个有效时间是20分钟,如果没有接收到短信会将购买费用返回,我使用阿根廷、印度的都能成功,可以根据实际情况选择。使用第一步注册的微软账号登录,接着会让提供电话号码,使用第二步购买的号码,等待验证码输入即可。
2023-03-30 14:43:25 9217 35
原创 Jmeter简单使用
这里的十个分别表示:名称、协议(http或httpsd)、域名(我这里进行本地测试)、端口号(根据自己的实际情况填写)、请求方法、请求路径、编码、参数、请求体、文件上传。Jmeter是由Apache下的一个纯Java开源项目,可用于做接口测试,也可用于做性能测试,本文主要简单介绍一下安装及使用。Jmeter默认的GUI界面是英文,如果需要改成中文可在一下路径设置:options->Choose Language。其中1,2,3分别表示 线程数量、线程启动时间、运行次数。
2023-03-30 13:01:31 290
原创 SpringCloudGateway--基于redis实现令牌桶算法
就是跟生活中漏桶一样,一个水桶,下面有个洞往外漏水,会控制水流速度,不论水桶中有多少睡,漏水的速率保持一致。主要是当某时间段有大量请求,但是已经达到漏桶上限的情况。计数器算法是指从第一个请求开始,每多一个请求就加1,假设设置每秒限流100,当在一秒钟前500ms已经达到100,后面的500ms中的所有请求都会被拒绝。就是在桶中放入令牌,请求获取到令牌后才能继续执行,如果桶中没有令牌,请求要么继续等待,要么直接拒绝。算法工厂由代码提供,令牌桶由redis提供,底层逻辑是lua脚本提供,已经封装好的。
2023-03-06 14:40:14 1359
原创 SpringCloudGateway--过滤器(内置filter)
目录一、概览二、内置过滤器1、StripPrefix2、AddRequestHeader3、AddResponseHeader4、DedupeResponseHeader5、AddRequestParameter6、CircuitBreaker7、FallbackHeaders8、RequestRateLimiter9、RedirectTo10、RemoveRequestHeader11、RemoveResponseHeader12、RemoveRequestParameter13、RewritePath
2022-12-06 13:31:39 6763
原创 SpringCloudGateway--谓词(断言)
SpringCloudGateway中三个重要词汇:路由(Route):配置网关中的一个完整路由,包括命名,地址,谓词集合(规则),过滤器集合。谓词、断言(Predicate):这是一个 Java 8 函数谓词。输入类型是一个 Spring 框架的 ServerWebExchange。这允许开发人员匹配来自 HTTP 请求的任何内容,例如头部或参数。简单说就是看发送的请求url中是否符合谓词中的规则,符合就通过,不符合就进行拦截。
2022-11-26 19:03:26 1576
原创 K8S常用命令(长期更新)
12、进入pod容器:kubectl exec -it podName -n nsName /bin/sh 、kubectl exec -it podName -n nsName /bin/bash。5、查看pod的详细信息,以yaml或者json格式展示:kubectl get pods -o yaml、kubectl get pods -o json。2、查看指定pod的日志信息:kubectl logs -f --tail(最后多少行) 500 podName(pod名)
2022-11-23 01:00:27 7306
原创 SpringCloudGateway--自动路由映射与手动路由映射
新建子项目service_one,service_two。可以看见由gateway进行了自动转发,并且是轮询进行。
2022-11-22 22:07:10 1787
原创 Nacos Windows安装
下载下来的文件解压,进入bin目录,打开dos界面,输入:startup.cmd -m standalone进行启动。我这里是建了一个standalone.cmd文件,将命令写入,之后直接双击启动即可。默认账户密码:nacos/nacos。
2022-11-22 18:02:36 304
原创 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 407
原创 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 434
原创 static方法中注入springBean对象
spring启动的时候,在进行元数据管理的时候,会自动忽略掉static成员,包括其中的属性和方法。如果我们在static中需要调用spring管理的对象,此时可以使用以下三种方式进行注入。三、实现SmartInitializingSingleton。一、使用@PostConstruct注解。
2022-11-02 17:43:56 3205
原创 nacos通过服务名获取服务的ip和端口
在微服务某些场景中,我们需要在服务中调用别的服务,比如Java服务调用另外的Java服务时,可以通过引用jar包进行,但如果调用Python等其它服务,此时无法引用jar包,只能通过访问服务暴露的地址调用。可以看到源码中有获取默认的nacos配置的地方,如果我们本身是在一个微服务中进行调用,本身已经在配置文件中配置了nacos地址,此时会直接获取到默认的这些配置, 就不需要再有config的配置了。
2022-11-01 14:01:02 7073 2
原创 Java中日期类型转换、日期类型取值
三、hutool中DateUtil的使用。一、Date转LocalDate。二、LocalDate转Date。
2022-09-23 16:07:55 693
原创 SpringBoot、MyBatis、PostgreSQL储存JSON、对象等自定义TypeHandler
由于MyBatis没有提供直接处理JSON的方法,因此需要自己实现处理JSON的类,并继承BaseTypeHandler来处理储存JSON字段。
2022-09-20 17:14:06 2201
原创 微服务的几种负载均衡算法
目录一、负载均衡二、负载均衡算法1、静态负载均衡2、动态负载均衡三、Dubbo负载均衡的四种算法1、基于权重随机算法RandomLoadBalance一、负载均衡负载均衡简单的说就是对流量进行重新分配,避免单一机器直接被较为集中的流量击穿,或者避免部分机器由于没有合理分配流量导致空闲。负载均衡分位硬件负载均衡和软件负载均衡,这里主要对软件负载均衡进行一个记录。软件方面的产品比较流行的有LVS、Nginx、HaProxy等。二、负载均衡算法负载均衡算法分位静态负
2022-06-07 16:11:55 3099
原创 SpringBoot中使用AOP实现耗时统计
Spring中一个重要的点就是面向切面编程,即AOP,可以实现程序中功能的解耦,让一些类共享相同的行为动作。Spring中AOP的实现主要通过JDK的动态代理和CGLIB实现。一、AOP中相关术语1、切面(Aspect):是指横切多个对象的关注点的一个模块化,切面通过常规类(基本模式方法)或者通过使用了注解@Aspect的常规类来实现。2、连接点(Joint point):就是spring中允许使用通知的地方,基本上每个方法前后抛异常时都可以是连接点3、通知(Advi
2022-05-02 18:05:12 3133
原创 Grafana实现SQL查询参数查询
Grafana实现参数查询如下:①进入Dashboard设置面板:② 添加Variables:③设置参数: Type类型选择Query表示使用SQL查询结果,Multi-value表示多选,Include All option表示设置一个all,即全部。 在panel中输入查询语句,使用$user,user即刚才创建变量时的名字即可使用该变量:...
2022-02-22 15:02:36 5572
ComboBoxAndDataGridView.rar
2019-12-23
WinfromSortTest.rar
2019-12-12
UpdateQuartzTriggerTime.rar
2019-09-21
QuartzTest.rar
2019-09-19
hutool导出excel从指定列开始
2021-11-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人