自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

WuTong_Li

温故而知新

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

原创 JAVA异步编程

文章目录前言异步的使用场景:异步的好处:在JAVA中异步的实现方式一:实现异步工厂需要依赖的工具类线程池配置异步任务管理器关闭线程池实现异步调用工厂异步工厂测试用例二:使用JDK1.8中 CompletableFutureCompletableFuture 简介CompletableFuture 实现异步CompletableFuture 测试用例前言今天来简单总结一下JAVA中的异步执行,那么有异步肯定就有同步,他们有什么区别呢?我们为什么要进行异步操作呢?同步:在所有操作执行完毕后返回给客户端,

2021-08-14 11:04:58 983 1

原创 【工具类】数字转中文大写金额(附完整踩坑之路)

前言项目中有需求是将用户订单生成pdf合同的,然后就涉及到了合同金额需要大写金额的问题。本想着这种转换的工具类一搜一大把,就直接从网上copy了一个下来,使用过程中发现网上的绝大部分转换类都是有问题的。。。注意!是绝大部分由于我们生成pdf合同是走线上盖章生效的,因为这个大写金额的问题导致了一部分用户合同金额对不上的问题。一起严重的生产事故由此诞生了。。。。。。防坑指南首先大部分大的工具类在转换整数或小数为 .00 时,最终的中文金额不带 ”整“ 其次在转换 0.12 这种元为0 但是有角分

2021-08-08 19:26:35 551

原创 行业二级联动查询工具类(含行业类型资源)

网上找了好多的行业分类资源全都需要积分…心累!此处将我用到的行业分类资源分享出来,可以在我的资源中下载businessType.json,大家放心不需要积分的哟~!行业资源下载地址,冲!本文行业信息是以静态json文件的形式保存在程序目录的,在resources目录下,创建template文件夹将businessType.json文件放在template下即可。由于会涉及到访问静态资源,需要在实现了WebMvcConfigurer的config中添加静态资源映射/** * 配置WebMvcC

2021-08-08 16:53:24 390 2

原创 省市区三级联动查询(含地区表sql)

省市区三级联动查询(含地区表sql)Controller/** * <p> * 省市区三级联动 * </p> * * @author LiWT * @since 2021-07-18 */@RestController@RequestMapping("/region")public class RegionController { @Autowired private IRegionService regionService; /

2021-08-08 16:14:18 2526

原创 SpringBoot实现异步导入导出任务(实现思路 + 超详细流程)

前言:在系统用户量较大,且用户较为依赖导入导出报表,而数据量又比较大的情况下,这时再采用即时下载Excel的方式用户体验就不太理想了。所以退而求其次,需要找另外的实现模式在不影响用户使用的前提下,降低我们服务器压力,同时又能满足用户需求的解决方案。本文介绍一下我们实际项目中使用的:异步导入导出模式。主要分为几个步骤:一、 用户操作导出时保存操作至异步任务表中,记录用户信息及请求时参数,同步响应给用户 “操作成功,请去任务中心查看”。二、 用户操作导入时将导入文件暂时保存至服务器中,同时保存导入操

2021-07-03 10:28:13 14779 2

原创 SpringBoot整合Mybatis Plus(超详细)一篇就够了~~

简介:官网文档地址Mybatis-Plus特性:无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作预防Sql注入:内置 Sql 注入剥离器,有效预防Sql注入攻击通用CRUD操作:内置通

2021-06-29 21:16:15 2130

原创 自定义@MultiRequestBody注解实现Controller中方法接收多个JSON对象

前言:最近在熟悉公司的项目框架,看到了这个注解在这里总结一下。解决的问题:1、单个字符串等包装类型都要写一个对象才可以用@RequestBody接收;2、多个对象需要封装到一个对象里才可以用@RequestBody接收。主要优势:1、支持通过注解的value指定JSON的key来解析对象。2、支持通过注解无value,直接根据参数名来解析对象。3、支持基本类型的注入。4、支持GET和其他请求方式注入。5、支持通过注解无value且参数名不匹配JSON串key时,根据属性解析对象。6、支

2021-06-27 10:31:25 2903 1

原创 SpringBoot自定义注解防止表单重复提交

前言:本文介绍基于redis和toke机制,自定义@RepeatSubmit注解来实现防止接口重复调用情况。实现教程:自定义注解是基于spring aop实现的,所以需要先查看是否引入了aop的依赖,如果没有的话在pom文件中添加以下依赖,还有redis的依赖。<!-- 引入aop相关 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId&

2021-06-24 21:56:58 2848

原创 SpringBoot实现防XSS攻击 超详细教程

前言:最近在熟悉公司的项目框架,看到这一块内容时深入了解了一下,在这里总结一下。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。实现教程:教程中会涉及到几个工具类的依赖,所以需要提前引入一下,在pom文件中新加

2021-06-23 21:23:36 5992 6

原创 JAVA实现图片验证码 超详细教程

前言:不知道大家有没有发现,我们在进行登录或者注册时,经常会遇到需要发送手机验证码的场景,基本上都是1到3分钟才允许点击一次获取验证码的按钮,这样做是为了限制用户频繁点击 「发送手机验证码」 按钮,毕竟平台发一条手机短信也是需要成本的。但是这样只是限制了点击,并不能限制暴力请求的情况。这个时候图片验证码出现了,在你点击 「发送手机验证码」 按钮时需要正确输入图片中展示的验证码。在密码输入错误之后再次登录时,都会有这样的图片验证码,这样做是为了防止用户利用机器人自动注册、登录、灌水。实现:本文需要

2021-06-22 21:45:43 3114

原创 Svn回退版本

1. 仅修改了文件但没有进行commit这种情况使用revert命令可以进行撤销修改使用命令svn revert xxx为修改的文件名(单个文件恢复) svn revert xxx或使用svn revert -R xxx为目录的名称(对整个目录进行恢复)svn revert -R xxx2. 已经进行了commit操作这种情况使用merge命令进行版本的回退使用命令svn log来找出需要回滚的确切版本号svn log使用命令svn merge -r xx:yy来回退版本 x

2021-06-21 22:11:39 777

原创 Git拉取远程分支到本地

步骤:新建文件夹名称为项目名在文件夹中右键右键打开Git Bash Here,初始化该文件夹; git init与origin master建立连接(进入GitLab或GitHab中copy url,将copy的url替换xxxxxxx.git)git remote add origin xxxxxxx.git把远程分支拉到本地(master为远程仓库的分支名) git fetch origin master在本地创建分支master并切换到该分支 git che

2021-06-21 22:09:24 3255

原创 JAVA三年经验面试题总结

文章目录前言:面试题javajvm、gcjdk1.8的新特性java基础框架springspring bootmybatis/mybatis-plus/springDataJpamysqlsql优化索引事务redis应用场景多线程服务器相关算法TCP/HTTP/WebSocket业务前言:2021年6月3日至10日刚经历了大概一周时间的面试,陆续接到了6个offer才入职。依稀记得面试第一天,那天是周四,两个面试全部通过,第一个offer是一家主做b2b业务的公司,由于我刚好上一个项目的业务跟他们接

2021-06-21 22:03:47 5740

原创 JAVA算法:哈希查找

哈希查找(Hash Search)概念:哈希法:又称散列法、杂凑法或关键字地址计算法等,相应的表称为哈希表。哈希表的装填因子α: α = 哈希表中元素个数 / 哈希表的长度α可描述哈希表的装满程度。显然,α越小,发生冲突的可能性越小,而α越大,发生冲突的可能性也越大。基本思想:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系H,使得p=H(k),H称为哈希函数。除留余数法:假设哈希表长为m, p为小于等于m的最大素数, 则哈希函数为 H(k)=k%p,其中%为模p取余运算。处理冲

2021-05-12 17:05:12 1372

原创 JAVA算法:二分查找

二分查找(Binary Search)简介:二分查找也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。二分查找充分利用了元素间的次序关系,采用分冶策略,可在最坏的情况下用O(logn)完成搜索任务。原理:1. 如果待查序列为空,那么就返回-1,并退出算法;这表示查找不到目标元素。 2. 如果待查询序列不为空,则将它的中间元素与查找的目标元素进行匹配,看它们是否相等。 3. 如果相等,则返回该中间元素的索引,并退出算法;此时

2021-05-10 17:53:21 261

原创 JAVA 获取Enum枚举对象、枚举值、枚举列表

场景:在开发过程中,经常会遇到需要根据枚举的code获取对应name或根据name获取对应code的需求;抑或是需要根据code或name获取对应枚举对象。在开发过程中,前端需要获取下拉选择器中的数据项,通常存放数据库字典表中,本文采取返回枚举列表的方式提供。一、Enum根据code/name获取枚举对象、根据code获取name、根据name获取code。 @Getter @AllArgsConstructor public enum BorrowStatusEnum {

2021-05-06 16:31:36 28755 3

转载 JAVA基础之List、Map、Set详解

文章目录前言Collection接口方法Iterator接口方法List、Set、Map功能方法List的功能方法Set的功能方法Map的功能方法List与Set、Map区别及适用场景ArrayList与LinkedList的区别和适用场景ArrayList与Vector的区别和适用场景HashSet与Treeset的区别及适用场景HashMap与TreeMap、HashTable的区别及适用场景前言Java中的集合包括三大类,它们是Set(集)、List(列表)和Map(映射),它们都处于java.u

2021-04-30 11:36:43 755

原创 SpringBoot接收post请求中单个入参解决方案

场景:通常会遇到写接口时仅需要传入单个参数的情况,但是spring自带的参数解析器不支持解析这种传参,导致接收到的参数始终为null。解决方案:1、使用JSONObject与@RequestBody注解配合接收参数; @PostMapping("/getSingleParam") public void getSingleParam(@RequestBody JSONObject object){ System.out.println(object.getString("name"));

2021-04-29 17:24:17 22281 4

原创 JAVA算法:快速排序

快速排序(Quick Sort)简介:快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法。快速排序的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序为非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排

2021-04-29 14:44:43 187

原创 Mysql 报错this is incompatible with sql_mode=only_full_group_by

一、前言该问题出现于mysql5.7.5版本及以后Mysql文档中是这样描述的:HAVING条件或ORDER BY列表引用GROUP BY未在该子句中命名且在功能上不依赖于(由其唯一确定) GROUP BY列的非聚合列,拒绝查询ONLY_FULL_GROUP_BYReject queries for which the select list, HAVING condition, or ORDER BY list refer to nonaggregated columns that are n

2021-04-28 15:03:10 427

原创 Docker下修改Mysql配置文件

docker 中修改mysql配置文件1. 查出mysql容器iddocker ps 2. 进入容器docker exec -it [容器id/容器名] /bin/bash 3. 查看my.cnf文件是否存在cd /etc/mysql/ ls 列出目录:conf.d my.cnf my.cnf.fallback4. 编辑my.cnf文件vim my.cnf 报错:vim: command not foundvi my.cnf 报错:vi: comma

2021-04-16 17:34:06 1341

原创 JAVA算法:插入排序

插入排序(Insertion Sort)简介:插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。插入排序为非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序

2020-12-11 16:31:49 193

原创 JAVA算法:选择排序

选择排序(Selection sort)简介:选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位

2020-12-11 14:40:58 291

原创 JAVA算法:冒泡排序

JAVA排序之冒泡排序冒泡排序(Bubble Sort)简介:冒泡排序是一种简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列)故名“冒泡排序”。冒泡排序为非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。原理:1.比较相邻

2020-12-09 15:25:38 214

原创 JAVA基础:基本数据类型

JAVA基础之基本数据类型八大基本数据类型及其包装类所属类型数据类型包装类位数字节默认值取值范围整型byteByte81byte0-2^7 - 2^7-1整型shortShort162byte0-2^15 - 2^15-1整型intInteger324byte0-2^31 - 2^31-1整型longLong648byte0L-2^63 - 2^63-1浮点型floatFloat324byt

2020-11-29 20:18:04 198

原创 JAVA基础:a++与++a的区别

JAVA基础之 a++与++a的区别首先在java中a++和++a都属于自增运算符关于区别我们来看下边程序: public static void main(String[] args) { int a = 0; System.out.println("初始化a:"+a); int b = a++; System.out.println("a++运算:"+b); System.out.println("a++运

2020-11-27 22:08:29 3085

businessType.json

二级行业类型静态json

2021-08-08

sys_region.sql

中国地区表(含省市区三级)

2021-08-08

空空如也

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

TA关注的人

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