自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

寒潭清

诚信、开放学习、乐于助人。

  • 博客(120)
  • 资源 (2)
  • 收藏
  • 关注

原创 【数据自动脱敏】SpringBoot 实现数据加密脱敏(注解 + 反射 + AOP)

切入式编程: 将项目中关于用户信息实体类的字段用注解给标记,新增用户信息实体类(这里我们用UserBO来表示,给UserBO里面的name,phone字段添加@EncryptField),返回用户信息实体类(这里我们用UserDO来表示,给UserDO里面的name,phone字段添加@DecryptField);傻瓜式编程不是说傻,而是相当于切入式编程,傻瓜式编程需要对用户信息相关的所有接口进行加密,解密脱敏的逻辑处理,这里改动的地方就比较多,风险高,重复操作相同的逻辑,工作量大,后期不好维护;

2024-06-25 23:51:52 934

转载 【责任链】一条龙服务处理流程

*** 抽象类处理器*/@Component/*** 当前处理器持有下一个处理器的引用*/@Getter@Setter/*** 处理器配置*/@Setter@Getter/*** 处理器执行方法* @return*//*** 链路传递* @return*///下一个链路没有处理器了,直接返回//执行下一个处理器在AbstractCheckHandler抽象类处理器中,使用protected声明子类可见的属性和方法。

2024-06-23 23:18:50 29 1

转载 【AOP】切面 AOP 优雅的实现权限校验

AOP(Aspect Oriented Programming),面向切面思想,是Spring的三大核心思想之一(两外两个:IOC-控制反转、DI-依赖注入)。那么AOP为何那么重要呢?在我们的程序中,经常存在一些系统性的需求,比如权限校验、日志记录、统计等,这些代码会散落穿插在各个业务逻辑中,非常冗余且不利于维护。例如下面这个示意图:有多少业务操作,就要写多少重复的校验和日志记录代码,这显然是无法接受的。

2023-10-10 22:41:21 203

原创 (3)线程方法

返回代码段正在被哪个线程调用myThread.run() :立即执行run()方法,不启动新的线程myThread.start():执行run()方法时机不确定,启动新线程。

2023-08-30 21:46:28 235

原创 (2)创建线程的2种方式

创建的线程类已经有一个父类了,就不能在继承Thread类,因为java不支持多继承。线程的执行先后跟代码执行顺序无关。就只能实现Runnable接口。

2023-08-29 23:23:48 150

转载 (2)线程池的7种创建方式

scheduleAtFixedRate 是以上⼀次任务的开始时间,作为下次定时任务的参考时间的(参考时间+延迟任务=任务执⾏)。scheduleWithFixedDelay 是以上⼀次任务的结束时间,作为下次定时任务的参考时间的。优点:线程池会根据任务数量创建线程池,并且在一定时间内可以重复使用这些线程,产生相应的线程池。缺点:适用于短时间有大量任务的场景,它的缺点是可能会占用很多的资源。b.⾃定义线程池名称或优先级。a.延迟执⾏(⼀次)

2023-08-26 19:04:05 308

原创 (1)进程与线程区别

一个基本的事实前提:一个CPU在一个瞬间只能处理一个任务。

2023-08-26 18:07:22 2062

原创 【接口不对外暴露-过滤器】业务开发,接口不能对外暴露的3种实现方案

将对外暴露的接口和对内暴露的接口分别放到两个微服务上,一个服务里所有的接口均对外暴露,另一个服务的接口只能内网服务间调用。需要额外编写一个只对内部暴露接口的微服务,将所有只能对内暴露的业务接口聚合到这个微服务里,通过这个聚合的微服务,分别去各个业务侧获取资源。该方案,[缺点]:新增一个微服务做请求转发,增加了系统的复杂性,增大了调用耗时以及后期的维护成本。

2023-08-20 23:11:50 316

原创 【Tomcat---1】IDEA控制台tomcat日志输出乱码解决

一、修改IDEA的文件编码配置为UTF-8二、修改IDEA的vmoptions文件,添加-Dfile.encoding=UTF-8到Tomcat目录/conf文件夹修改logging.properties重启idea即可。采用统一的编码

2023-07-30 21:24:38 663

原创 (13)【MyBatis的启动流程与Spring boot配置】

一、Mybatis的启动流程加载Mapper配置的映射文件或者注解相关sql内容创建会话工厂,MyBatis通过读写配置文件中的数据源信息来构造会话工厂创建会话,Mybatis通过会话工厂创建会话对象,会话对象是个接口,包含对数据库的增删改查方法创建执行器,会话本身不能直接操作数据库,通过数据库执行器来帮它执行操作封装Sql对象,执行器将代处理sql信息分到对象MappedStatement中,包括sql语句、输入输出、输出结果映射操作数据库

2023-06-29 22:48:47 517

原创 (1)HTTP与RPC区别

http是一种协议 ,rpc是一种方法。

2023-06-08 23:02:43 599

原创 【MySQL】MySQL 字段为 NULL 的5大坑

建立一张表。

2023-05-30 23:12:17 1164

转载 【BeanUtils.copyProperties】BeanUtils.copyProperties必须避开的坑

日常开发中,经常涉及到DO、DTO、VO对象属性拷贝赋值,很容易想到org.springframework.beans.BeanUtils的copyProperties。它会自动通过反射机制获取源对象和目标对象的属性,并将对应的属性值进行复制。可以减少手动编写属性复制代码的工作量,提高代码的可读性和维护性。

2023-05-29 22:36:41 545

原创 【MyBatis】PageHelper实现分页

2.配置拦截器插件在MyBatis的xml中配置拦截器插件3.使用DbStudents 实体类DbStudentsMapper 接口DbStudentsMapper.xml注意:sql 中就不要写 limit 了,pageHelp 会自己处理,sql 就按正常查询写法就好DbStudentsService 业务层接口DbStudentsServiceImpl 业务实现层最后 DbStudentsController 控制层直接调用

2023-05-25 23:08:30 589

原创 【事务坑】Spring中配置Transaction与不配置有何区别

Spring中配置Transaction与不配置有何区别配置@Transactional的目的就是手动开启事务,保证method中一系列sql操作包含在同一事务中,从保证数据的完整性(回滚或提交)与读写安全(隔离级别);如果method不配置 @Transactional ,则每执行一个 SQL操作,如果成功,默认开启的事务就会 立即 向数据库自动commit,而不能rollback;

2023-05-23 23:26:45 519

转载 【一】事务的基本了解

事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

2023-05-23 23:06:33 237

原创 【事务失效】十种常见场景

大多数Spring Boot项目只需要在方法上标记@Transactional注解,即可一键开启方法的事务性配置。但是,事务如果没有被正确出,很有可能会导致事务的失效,避免因为事务处理不当导致业务逻辑产生大量偶发性BUG。

2023-05-22 23:50:37 1965

原创 【Java 事务】保证每个循环体都是单独事务

比如有这么一个定时任务,需要定时处理一些超时未付款的订单。然后你查询所有符合条件的记录(假设有10条记录),接着for循环遍历每一个订单,每个循环体都要执行大量的业务,比如商品库存回退,订单状态修改,业务流水添加,消息推送等。

2023-05-22 23:24:32 424

原创 PO、VO、DAO、BO、DTO、POJO区分

但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构。到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。通常用于业务层之间的数据传递,PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自己的数据对象,这样就可以降低各层之间的耦合,便于以后系统的维护和扩展。可以看成是与数据库中的表相映射的java对象。DAO 数据访问对象。

2023-05-18 23:25:08 473

原创 【Java Optional】处理NPE(NullPointerException)空值情况

有以下代码。

2023-05-16 23:51:35 114

原创 (三)流的终止操作

计数:count平均值:averagingInt、averagingLong、averagingDouble最值:maxBy、minBy求和:summingInt、summingLong、summingDouble统计以上所有:summarizingInt、summarizingLong、summarizingDouble。Collectors类提供的reducing方法,相比于stream本身的reduce方法,增加了对自定义归约的支持。

2023-04-25 23:17:35 548

原创 二、流 中间操作

其实map方法就相当于Collaction的add方法,如果add的是个集合得话就会变成二维数组,而flatMap 的话就相当于Collaction的addAll方法,参数如果是集合得话,只是将2个集合合并,而不是变成二维数组。通过流中元素的 hashCode() 和 equals() 去除重复元素。可以将一个流的元素按照一定的映射规则映射到另一个流中。跳过n元素,配合limit(n)可实现分页。sorted,中间操作。sorted排序参考模板。

2023-04-24 23:11:02 409

原创 一、Java 8 Stream 简介和创建使用

Stream 是Java 8 中处理集合的关键抽象概念,可以将元素集合看出一种流,对流进行操作,,Stram API提供了一种高效且易于使用的处理数据方式。

2023-04-24 23:10:09 166

原创 学习基金(2)避坑-如何选择基金

6.天天基金网里,晨星投资风格箱方法:我们可以查询同一只基金在不同时期的投资风格。2.夏普比率用来说明未来获得一定的回报,这只基金需要承担多少风险。3.最大回撤率反映的是买入基金后可能面临的最大亏损。留意基金经理管理的所有基金的收益情况。4.我们在选择基金的时候,5.机构投资者的间接背书。

2023-04-05 22:09:38 394

原创 学习基金(1)基本概念

11.累计净值正好和单位净值相对,累计净值是单位净值加上基金成立之后累计派息的金额,也就是说累计净值考虑了基金分红。14.要拿多少钱进行投资,理财账户资金= (闲置资金总额-生活备用金)×(100 -年龄+可承担风险系数)%10.单位净值就是基金公司每天公布的基金净值,单位净值没有考虑分红的情况。8.夏普比率用来说明未来获得一定的回报,这只基金需要承担多少风险。9.基金的手续费:总费率=申购费率+赎回费率+管理费率+托管费率。5.货币供应量指标M2。15.基金收益如何计算。13.沪深300指数。

2023-04-05 22:08:40 667

转载 (2)链表

2. 回文链表 if(fast!=null) slow=slow.nextwhile(right!=null)

2022-07-09 22:19:31 62

原创 (5)spring IOC 总结

一、环境的搭建二、基础知识三、spring框架安装四、示例1(1)新建IHello接口(2)新建HelloSpring类(3)创建applicationContext.xml(4)创建测试类,运行五、较成熟示例2:(1)创建接口类(2)创建接口实现类:简单的登录验证实际中应该从数据库取数据(3)创建service类(3)创建service实现类(4)配置applicationContext.xml(5)创建测试类,运行五、注解示例3:使用注解@Repository使用注解@Ser

2022-07-09 10:26:36 152

转载 (1)链表 - 总结

(1)环形链表 - 判断是否有环-快慢指针,注意判断相等处用slow==fast,而不是用slow.val == fast.val(2)环形链表 - 判断是否有环-有返回环的起点-没有返回NULL-快慢指针,注意为没有环时, if(fast = =null || fast.next = = null) return null; (3)相交链表 - 判断俩链表是否有交点-有返回交点-没有返回NULL-快慢指针,注意为不为null时,用elseif(p1==null) p1=headB;el

2022-07-06 22:55:02 73

原创 (1)基础:排序

对数组中元素,两两比较,两两交换。最大的依次放到后面2.选择排序从未排序的数组找到最小(大)元素,作为首元素,接着找第二个,一个个依次往前面排序。3.快速排序快速排序使用分治法从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。4.归并排序采用分治法,...

2022-07-04 21:31:10 82

原创 找出第k小的数对距离(排序+二分搜索)

数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 k,则right

2022-06-23 23:34:48 238

原创 七、DOM、事件简单学习

1.DOM对象功能:控制html文档的内容代码:获取页面标签(元素)对象Element;通过元素id获取元素对象document.getElementById(“id值”)修改属性值 : 明确对象,查看api文档可设置属性修改标签体内容:innerHTML<!DOCTYPE html><html lang="en"><head> <meta charsset="UTF-8"> <title>DOM对象&lt

2022-01-17 17:42:52 348

原创 六、javascript的Global对象

Global对象全局对象,Global封装的方法可以直接调用,方法名();gbk 一个汉字2字节 一个字节8个二进制位utf-8 一个汉字3个字节<!DOCTYPE html><html lang="en"><head> <meta charsset="UTF-8"> <title>Array对象</title> <script> var str = "天天向上,好好

2022-01-16 23:04:06 612

原创 五、javascript的Date、Math、正则对象

Date对象<!DOCTYPE html><html lang="en"><head> <meta charsset="UTF-8"> <title>Date对象</title> <script> //1.创建方式 var date =new Date(); document.write(date); //Sun Jan 16 2022 21:44

2022-01-16 22:37:11 82

原创 四、javascript的Array对象

Array对象还有其他方法自行查看手册<!DOCTYPE html><html lang="en"><head> <meta charsset="UTF-8"> <title>Array对象</title> <script> //1.创建方式 var arr1 = new Array(1,2,3); //元素列表 var arr1 = new A

2022-01-16 21:41:50 345

原创 三.JavaScript简学及Function对象

1.客户端脚本语言运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎脚本语言:无需编译,直接被浏览器解析执行了javascript = ecmascript + javascript特有东西(Bom + Dom)2.语言语法1.引用方式:内部和外部2.注释: 单行 //注释内容 多行 /* 注释内容*/3.数据类型: 原始数据类型 1.number 数字 整数/小数/NaN (not a number 一个不是数字的

2022-01-09 21:38:57 234

原创 二.CSS页面美化和布局控制

1.概述cascading Style Sheets 层叠样式表层叠:多个样式可以作用在同一个html元素上,即时生效使用方法: 1. 内联样式 在标签内使用style属性指定css代码 <div style="color:red; ">hello css</div> 2. 内部样式 在head标签内,定义style标签,style标签的标签内容就是css代码 <style> div{ co

2022-01-09 17:46:54 378

原创 一、HTML基本入门

1.基本构成<!DOCTYPE html> <html> --html文档根标签<head> --头标签<meta charset="utf-8"><title>第一个页面</title> --标签标签</head><body>

2022-01-09 11:43:58 714

原创 Mybatis 转义字符与 函数

Mybatis转义字符也可以用另外一种,就是<![CDATA[ ]]>符号。 在mybatis中这种符号将不会解析,用于标签冲突<![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]> 函数1.ROWNUMOracle中的rownum一般是在实现分页查询时用到,要求返回表中的前n条记录或者是中间的几条记录参考:https://blog.csdn.net/mitedu/ar

2021-11-22 23:09:59 1250

原创 (12)<include>、<sql>、

<include>标签:引用复用sql语句段<sql id="sqlid"> res_type_id,res_type</sql><select id="selectbyId" resultType="com.property.PubResTypeVO"> select <include refid="sqlid"/> from pub_res_type</select>...

2021-11-22 22:16:14 371

原创 Start With... ... Connect By Prior语句

Start With… … Connect By Prior语句oracle的start with connect by prior是根据条件递归查询"树"作用:主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点start with 子句:遍历起始条件,如果要查父结点,这里可以用子结点的列,反之亦然。connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subi

2021-11-16 23:43:33 937

TTsVoice.zip

下载安装,使用using System.Speech.Synthesis;来调用,语音选择 voice.SelectVoice("语音库名称");就可以,其他操作看微软的官方说明https://docs.microsoft.com/zh-cn/dotnet/api/system.speech.synthesis.speechsynthesizer?redirectedfrom=MSDN&view=netframework-4.8

2020-04-20

microsoft-simplified-chinese-sapi5.msi

TTs语音合成资源 包

2020-04-20

空空如也

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

TA关注的人

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