![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
文章平均质量分 87
卡卡东~
人脑像计算机也不够
展开
-
【@ConfigurationProperties注解的用处】
ConfigurationProperties 是 Spring 框架中的一个注解,用于将配置文件中的属性映射到 Java 对象的字段上。它的主要用途是简化配置文件与 Java 对象之间的映射过程,使得配置更加方便、可读,并提供类型安全的属性访问。原创 2023-12-05 17:47:24 · 2048 阅读 · 0 评论 -
【poi导出excel模板——通过建造者模式+策略模式+函数式接口实现】
Spring Boot 中的属性解析机制是通过 ConfigurationProperties 注解来实现的,首先我们现看一下poi如何导出excel,这里举个例子代码中,可以看到创建工作簿、设置表头行、设置数据等操作都集中在一起,耦合性较高。如果后面再增加设置样式、设置不同类型单元格的样式,会全部集中到对workbook的操作上,而workbook又在开始时就创建了。如果将workbook的创建于数据填充进行解耦。并且将创建工作簿、设置表头行、设置数据等操作作为一个公有方法抽取出来原创 2023-11-10 17:53:43 · 1157 阅读 · 0 评论 -
比postman更好用的接口管理软件——Apifox
最近使用了一个好用的中文版接口管理软件,Apifox,以下介绍一下它的使用方式及好处。原创 2023-10-13 17:58:22 · 899 阅读 · 2 评论 -
通过stream流实现分页、模糊搜索、按列过滤功能
在有一些数据通过数据库查询出来后,需要经过一定的逻辑处理才进行前端展示,这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。按列过滤和模糊搜索类似,但是传入的是一个map,k为这个字段名,v为模糊搜索内容。对其中的字段进行排序,分别有string、数值类以及默认排序,排序方式desc或者asc等,如果要加时间类或者其他类型,需要手动实现comparter接口构造比较方式了。①:将完成数据处理的list重新构成一个新的list,当然,里面的数据引用是一样的,但是新list可以对其增删改了。原创 2023-09-14 18:27:01 · 1453 阅读 · 0 评论 -
通过nginx将https协议反向代理到http协议请求上
目前一个系统仅支持https协议访问,因后端服务基于ssl协议,前端在请求是也需要支持ssl协议的https请求来访问。目前的代理服务器是nginx,现在想要==通过http访问系统==,需通过nginx的**反向代理**或者**重定向方式**将https请求代理为http请求。可实现的做法有如下几种:>1、使后端开放两种端口,一个端口支持https协议访问,一个端口支持http协议访问,之后前端请求通过nginx代理,同时nginx也开放两个端口(比如80端口作为http访问,443端口作为https访原创 2023-09-05 17:58:26 · 17248 阅读 · 9 评论 -
使用docker搭建nacos
4、nacos从2.2版本后加入了鉴权功能,如果使用默认配置nacos.core.auth.enabled=false,可以不用登录,也没有登录页面,但是进入会提示:当前集群没有开启鉴权,请参考文档开启鉴权~,右上角也没有登录用户。如过配置了nacos.core.auth.enabled=true,则需要按照如下配置增加nacos.core.auth.plugin.nacos.token.secret.key=MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MWNoZW4KIA==原创 2023-07-27 18:05:10 · 575 阅读 · 0 评论 -
【分布式锁介绍与使用-(redisson,zk)】—(RLock,InterProcessMutex)
分布式锁是一种用于在分布式系统中实现协调和同步的机制。在分布式系统中,多个节点(服务器或进程)可能同时访问共享资源,而为了避免资源竞争和数据不一致性问题,需要使用分布式锁来确保在任意时刻只有一个节点可以访问该资源。当节点完成数据同步操作后,需要释放分布式锁,让其他节点有机会获取锁进行数据同步。通过调用Redisson提供的unlock()方法来释放锁。当一个节点需要进行数据同步操作时,它会在ZooKeeper上创建一个临时顺序节点(EPHEMERAL_SEQUENTIAL)。==每个节点创建的节点都有一个原创 2023-07-24 18:17:58 · 262 阅读 · 0 评论 -
好用的shell工具——finalShell3.9.5
好用的shell工具——finalShell3.9.5软件下载安装激活专业版功能在这里记录一下这款shell工具,主要是一换环境就需要重新安装,记在csdn上方便以后自己查看软件下载安装因为finalshell下载后需要激活,目前的激活程序只能到3.9.5版本,这里给一个3.9.5版本的地址吧,官网地址是最新的3.9.5下载地址原创 2023-07-21 14:11:48 · 7295 阅读 · 9 评论 -
集合处理常用Stream流
Stream API是Java 8引入的一项重要特性,它提供了一种新的处理集合数据的方式。Stream可以看作是一种高级的迭代器,它允许以声明式的方式对集合进行各种操作,如过滤、映射、排序、归约等。它可以简化集合处理的代码,并且在处理大数据集时具有性能优势。filter(Predicate predicate)map(Function mapper)flatMap(Function mapper)distinct()sorted()limit(long原创 2023-07-06 17:17:25 · 1563 阅读 · 1 评论 -
在windows11环境下安装CUDA11.6+Anaconda3+pyToach1.13搭建炼丹炉
在windows11环境下安装CUDA11.6+Anaconda3+pyToach1.13搭建炼丹炉目前2023.03出来的pyToach2.0是用不到了,因为最低版本支持CUDA11.7。我的显卡是1650,驱动达不到CUDA11.7的要求,因此安装不了11.7。原创 2023-06-26 11:28:07 · 3698 阅读 · 3 评论 -
分布式事务解决方案---Seata
分布式事务的解决方案通常有以下几种:以上是常见的几种分布式事务解决方案,每种解决方案都有其优缺点和适用场景,具体选择哪种解决方案需要根据具体业务场景进行评估。下面主要介绍一下常用的消息对了和Seata方式当使用消息队列作为分布式事务解决方案时,可以将一个分布式事务拆分成多个子操作,每个子操作都是一个独立的消息,然后将这些消息放入消息队列中。消息队列的事务性特性可以保证消息的可靠性,即只有当消息被成功消费后,才会从消息队列中移除,从而保证消息的不丢失和不重复消费。针对这些子操作,可以将它们分别转化为消息,然原创 2023-03-14 20:00:00 · 1399 阅读 · 1 评论 -
使用Lang3实现深拷贝(SerializationUtils.clone())
什么情况下需要对一个对象进行克隆?深拷贝和浅拷贝的区别实现深拷贝深克隆,浅克隆原创 2023-03-06 15:48:55 · 1408 阅读 · 0 评论 -
MySQL常用函数整理
MySQL常用函数整理,在通过sql处理一些业务场景中,除了使用关联查询、子查询等一些常用sql方法外,还可以使用sql函数去处理聚合函数(Aggregate Functions):对一组数据进行聚合计算,如 SUM、AVG、MAX、MIN 等。数学函数(Mathematical Functions):执行数学计算,如 ABS、CEILING、FLOOR、LOG、POWER、ROUND、SQRT 等。字符串函数(String Functions):对字符串进行操作,如 CONCAT、LENGTH、原创 2023-03-06 15:24:27 · 669 阅读 · 0 评论 -
通过反射将map类型转为实体对象
通过反射将map类型转为实体对象//获取已声明的字段 Field[] declaredFields = Student.class.getDeclaredFields(); for (Field field : declaredFields) { //获取修饰符,用数字表示 int modifiers = field.getModifiers(); //判断是否原创 2023-02-10 18:23:10 · 810 阅读 · 0 评论 -
通过递归构造树
使用 Stream 流的 filter() 方法来筛选根节点和子节点,并使用 peek() 方法将节点添加到相应的列表中。在 addChildren() 方法中,我们使用 Stream 流的 filter() 方法筛选出每个父节点的子节点,并将它们添加到父节点的 children 列表中。然后,再递归地调用 addChildren() 方法,以添加每个子节点的子节点,直到所有节点被处理完毕。递归出口:可以想到,当子节点下再找不到下一级的子节点了,那么这个root节点下的递归构造就完成了,便可回溯。原创 2023-02-06 18:10:27 · 1259 阅读 · 0 评论 -
【spring boot应用在项目启动后执行代码】
有时候我们需要在项目启动阶段执行一些代码,比如为了`记录log、启动时检查、启动完成后调用一段业务方法等`。诸如上述业务要求我们可能会经常碰到。Spring Boot 提供了至少 5 种方式用于在应用启动阶段执行代码。如下:CommandLineRunnerApplicationRunnerApplicationListener@PostConstructInitializingBeanApplicationListener(2)原创 2022-09-26 20:00:00 · 1993 阅读 · 4 评论 -
【java组件扩展,自定义扩展点】
SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。在遇到的有些情况下,我们在引入项目中一些公有模块后,想要对其进行功能扩展。让其功能适用于每个想要依赖的其他模块。通常,我们在公有模块中会提供一些扩展接口Spring的扩展点都有哪些BeanFactory和ApplicationContext区别及详解原创 2022-09-19 12:07:46 · 1026 阅读 · 1 评论 -
AspectJ AOP的使用(@Before、@PointCut、@Around等)
最近在看一个项目中使用到AOP的功能,现在将自己过去所学的知识梳理一下。AspectJ AOP的使用(@Before、@PointCut、@Around等)原创 2022-08-01 22:15:00 · 4833 阅读 · 1 评论 -
Optional()的使用(java8新特性)
Optional经常使用在判空if(xx==null)中,可以方便的减少代码,提高代码的可阅读性和规范性。下面是对其的使用:在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行一些防御式的检查,所以在代码中常常可见if(obj != null) 这样的判断。幸好在JDK1.8中,java为我们提供了一个Optional类,Optional类能让我们省掉繁琐的非空的判断。下面先说一下Optional中为我们提供的方法...转载 2022-06-20 18:00:00 · 442 阅读 · 2 评论 -
docker命令(常用、简洁)
docker命令(常用、简洁)docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginxdocker run 这个命令是最常用的最基础的了,如下解释:eg:docker run --name myNginx -p 80:80 -d nginxdocker logs 查看容器日志命令,加-f为持续docker ps 查看容器状态,加-a看所有docker exec -it mn bash 进入容器内部,平常不这样用...原创 2022-05-31 22:45:00 · 388 阅读 · 5 评论 -
查es大于10000条数据-滚动查询(scroll)
查es大于10000条数据-滚动查询(scroll),总所周知,es一般查询只支持最多查询出前1w条数据,很难受。想要一次性查询出你想要的数据,一些大数据的场景下,我们需要用到ElasicSearch的两种查询方式:==深度分页==或者==滚动查询==,我们今天使用的是滚动查询方式,因为需要一批次加载全部使用的数据。原创 2022-05-19 21:30:00 · 10084 阅读 · 9 评论 -
json转换反序列化,一个属性对应多个key
json转换反序列化,一个属性对应多个key,有一列的属性是json字段。但是这个json字段的key中有两种不同的格式。举个例子:json的内容如下:通过构造器new一个>clone一个已存在的实例原创 2022-05-14 19:15:20 · 3192 阅读 · 1 评论 -
Vue学习笔记三
1、Vue绑定样式class样式写法:class=“xxx” xxx可以是字符串、对象、数组。字符串写法适用于:类名不确定,要动态获取。对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。style样式:style="{fontSize: xxx}“其中xxx是动态值。:style=”[a,b]"其中a、b是样式对象。<style> .basic{ width: 4原创 2021-10-28 19:20:04 · 559 阅读 · 2 评论 -
Vue学习笔记二
1、vue的数据代理 通过vm对象来代理data对象中属性的操作(读/写) Vue中数据代理的好处:更加方便的操作data中的数据基本原理: 通过Object.defineProperty()把data对象中所有属性添加到vm上。 为每一个添加到vm上的属性,都指定一个getter/setter。 在getter/setter内部去操作(读/写)data中对应的属性<!DOCTYPE html><html> <head> <meta原创 2021-10-27 19:20:06 · 614 阅读 · 0 评论 -
vue学习笔记一
1、每一个模块一个vue组件,每一个vue都有html+css+js2、不需要直接使用Document操作,不需要一步一步操作。3、使用虚拟DOM和优秀的diff算法,对dom进行复用4、vue.js原创 2021-10-25 20:42:27 · 142 阅读 · 0 评论 -
算法大合集
算法大合集原创 2021-10-24 21:59:59 · 95 阅读 · 2 评论