啊?
项目构建<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.6.13</spring-boot.version> <spring-cloud.version>2021.0.5</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version> <aliyun-spring-boot.version> ...
RabbitMQ工作模式与实现方式
Work queues
不需要设置交换机,只需指定唯一的消息队列即可进行消息传递
可以有多个消费者,多个消费者通过轮询从队列中取消息
消息被接受后,队列将消息移除
消费在可以在没有处理完消息的情况下继续获取消息
通过设置 spring.rabbitmq.listener.simple.prefetch: 1 来设置每次处理完消息后才能获取下一条
consumer@Componentpublic class SpringRabbitListener {// workqueue @RabbitListener(queues = "simple.queue") public void listenSimpleQueue01(String msg) throws InterruptedException { System.out.println("消费者01 接收到simple.queue的消息为:" + msg + "," + LocalTime.now()); T ...
Spring全局异常处理
Spring 异常处理三种方式
@ExceptionHandler
实现HandlerExceptionResolver接口
@ControllerAdvice+@ExceptionHandler
Spring异常处理使用@ControllerAdvice+@ExceptionHandler全局处理异常
@ControllerAdvice 是一个Spring注解,它本质上是一个特殊类型的@Component。意味着当你使用
@ControllerAdvice 注解标记一个类时,Spring会将该类注册为一个Spring Bean,并将其纳入Spring应用程序
上下文中,使它能够被自动扫描和发现。
同时@ControllerAdvice 是基于Spring AOP(面向切面编程)的一种实现,默认情况下会对所有Controller进行拦
截,当你使用@ControllerAdvice注解标记一个类时,Spring将这个类视为一个AOP切面。这个切面的目的是捕获
Controller中抛出的异常,并在一个统一的地方进行处理。在@ControllerAdvice类中,你可以定义 ...
InvalidDefinitionException
报错com.fasterxml.jackson.databind.exc.InvalidDefinitionException
解决为报错类添加无参构造方法
原因源代码时要获取 Json 中的返回信息,也就是需要反序列化
反序列化过程中,它的父类如果没有实现序列化接口,那么将需要提供无参构造函数
而RespBean并没有实现Serializable接口
参考java序列化与反序列化全讲解
com.fasterxml.jackson.databind.exc.InvalidDefinitionException
基于Validation组件自定义注解
@Validation是一套帮助我们继续对传输的参数进行数据校验的注解,通过配置Validation可以轻松优雅的完成对数据的约束检验。
依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId></dependency>
使用方式在请求方法的参数前面添加@Valid/@Validated注解,表示对该对象模型进行校验
@ResponseBody@RequestMapping("/doLogin")public RespBean doLogin(@Valid LoginVo loginVo,HttpServletResponse response,HttpServletRequest request) { return userService.doLogin(loginVo,request, ...
算法图解
判断题(1)递归程序往往简洁易懂,但占用较大空间。递归层数过大会造成系统堆栈溢出。
T
F
(2)图是表示多对多关系的数据结构。
T
F
(3)Depth First Search on a graph uses Stack structure for its implementation.
T
F
(4)只有当局部最优跟全局最优解一致的时候,贪心法才能给出正确的解。
T
F
(5)令S为活动选择问题(Activity Selection Problem)中所有活动的集合。则一定存在S的某个最大相容活动子集是包含了最早结束的活动a
T
F
(6)哈夫曼编码是一种最优的前缀码。对一个给定的字符集及其字符频率,其哈夫曼编码不一定是唯一的,但是每个字
符的哈夫曼码的长度一定是唯一的。
T
F
单选题若某线性表最常用的操作是在表尾进行插入和删除,则利用哪种存储方式最合适?
数组
下列对顺序存储的有序表(长度为 n)实现给定操作的算法中, ...
设计模式---单例模式
设计模式
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式分为三大类(23种):
创建模型模式:工厂方法模式、抽象工厂模式、**单例模式**、建造者模式、原型模式
结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
单例模式
单例模式(singleton):某个类只能生成一个实例,该类提供了一个全局访问点(一个公共方法)供外部获取该实例。
优点:
只有一个实例,节约内存资源,提高系统性能。
某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交 ...
Centos7 磁盘扩容,vgdisplay 显示为空
本文适用情况:
配置虚拟机时,分区是自行配置,没有使用默认分区
使用 vgdisplay 命令,什么也没有显示
Centos7 64x,根目录分区为 xfs 格式
扩容磁盘空间
查看当前分区信息
可见根目录挂载在 sda3
lsblk
安装分区工具yum install cloud-utils-growpart gdisk -y
卷扩容
3 就是根目录所在分区
growpart /dev/sda 3
此时,分区大小已经变为调整后的大小
文件系统扩容xfs_growfs /
扩容成功
df -h
参考文档
🖋 解决centos7 根目录扩容vgdisplay数据卷为空不能扩容问题
🖍Linux操作系统之centos7根目录扩容(根目录在sda3 vgdisplay为空)
✏VMware虚拟机扩展磁盘容量
🖌对VMware已经创建的虚拟机进行磁盘扩容过程以及会遇到的问题
MD5&MD5加盐
MD5👀 MD5 是一种常见的加密方式,常用于加密存储密码。全称为:Message-Digest Algoorithm 5,信息摘要算法
它具有以下特性:⛏
压缩性:任意长度的数据,算出的 MD5 值都是固定的
容易计算:从原数据计算出 MD5 值很容易
抗修改性:改变原数据后,所得到的 MD5 值都有很大的差别
强抗碰撞:想找到两个不同的数据,使它们具有相同的 MD5 值是非常困难的。
综上:每个数据都对应一个唯一的 MD5 值
例如:123456 的 MD5 值为:e10adc3949ba59abbe56e057f20f883e
MD5值 e10adc3949ba59abbe56e057f20f883e 对应的原数据为 123456
也就是说,如果知道了 MD5 值,就可以反向推出加密前的数据(应为MD5是唯一的)
详情请看:彩虹表
所以我们就无法单独使用 MD5 来进行数据的加密存储。
MD5 的实现方式有很多种,JDK自带的 MessageDigest 和 Spring 封装好的 DigestUtils
MessageDigestDigestUtilsimport o ...
Docker Registry
Docker Registry 本地私有仓库配置查询本机IPifconfig
生成自签名证书要确保DockerRegistry本地镜像仓库的安全信,还需要一个安全认证证书,来保证其他Docker机器不能随意访问该机器上的本地镜像仓库。(如果已购买证书,就不需要生成了)
mkdir /usr/local/docker/registrymkdir /usr/local/docker/registry/certscd /usr/local/docker/registry/certs/
openssl req -x509 -days 3560 -subj '/CN=192.168.196.101:5000/' -nodes -newkey rsa:2048 -keyout domain.key -out domain.crt
-x509:是一个自签发证书的格式
-days 3650:证书的有效时间
192.168.196.101:5000:仓库的地址和端口
rsa:2048:证书算法长度
domain.key和domain.crt:生成的证书文件
生成用户名 ...