- 博客(115)
- 资源 (5)
- 收藏
- 关注
原创 java使用Jasypt对数据库密码等重要信息进行加解密
常规情况下,Java配置文件中一般都是明文显示数据库密码等重要信息;如果安全要求比较高,需要对密码等重要信息进行加密处理,这篇文章能解决你的问题
2023-08-10 18:38:23
759
原创 SpringBoot针对富文本和非富文本添加xss过滤
一、SpringBoot针对富文本和非富文本添加xss过滤(如果富文本字段是唯一,这里的唯一是不跟非富文本字段同名,实际写一个HttpServletRequestWrapper就行)1.xss过滤器package com.doctortech.tmc.filter;import com.doctortech.tmc.support.xss.XssHttpServletRequestWrapper;import com.doctortech.tmc.support.xss.XssRichTextHt
2021-08-27 12:06:34
4299
原创 前端Vue使用国密sm2、sm4与后端使用工具类
一、后端(SpringBoot)1.后端导入国密支持<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.68</version></dependency>2.国密工具类(sm1算法不公开,这里涉及、sm2是非对称加密、sm3是信息摘要,类似MD5加密、
2021-08-26 17:32:43
10083
3
原创 备份mysql数据库脚本
#!/bin/bash# 设置mysql的登录用户名和密码mysql_user=""mysql_password=""mysql_host="127.0.0.1"mysql_port="3306"# mysql_charset="utf8mb4"# 备份文件存放地址backup_location=/home/nfsfile/mysqlbackup/backup# 是否删除过期数据expire_backup_delete="ON"expire_days=30backup_time
2021-07-29 11:14:23
229
原创 Linux/Windows如何使用pm2部署nuxt项目
一、Window使用pm2部署nuxt项目1.安装pm2(安装前需要安装npm和node)npm i pm2 -g2.安装自启动包npm install pm2-windows-startup -gpm2-startup install3.查看是否安装成功(出现版本信息则安装成功)pm2 -v4.将nuxt项目打包后的文件(主要有以下4个文件)放到部署目录下.nuxtnuxt.config.js,package.json,static5.打开cmd跳转到部署目录安装依赖n
2021-07-29 11:13:30
752
1
原创 Spring事务如何实现部分回滚
一、需求:使用Excel批量导入数据,其中关联多张数据库表,需求是实现出现异常时关联的数据回滚,最后告诉用户成功导入的数量以及失败的原因二、思路:一开始想,这不是很简单的问题,一个事务就可以解决,开始spring的注解事务即可三、实现过程中遇到的问题:spring事务每次在出现异常的时候会将全部数据都回滚,包括正常的数据,与需求相违背四、最终解决方法(这里主要讲Spring事务如何实现部分回滚,其他Excel相关等不赘述)1.事务在同一个service则使用手动开启事务解决@Servicepub
2020-12-03 17:13:24
6262
2
原创 String使用==去判断字符串是否相等存在的问题
一、先看一段代码,你觉得输出是什么?String str1 = "";String str2 = new String("");System.out.println(str1 == "");System.out.println(str2 == "");二、上面的代码输出是true、false,为什么呢?1、str1是从字符串常量池获取空字符串"",如果没有则在常量池中创建空字符串对象,然后再给str1赋值,此时str1属于局部变量,存放在栈中。str2同样在字符串常量池中获取空字符串,然后再根
2020-09-27 12:01:43
1505
原创 如何避免Java接收base64字符串的坑?
一、问题发现1.可能因为base64字符太长,导致后端处理时出错,表现为前端请求报400错误;2.前端传数据到后端时可能base64字符串中的特殊字符被替换,例如+被替换成空格,表现为上传的图片不完整二、问题解决1.问题1解决方法:1.1.在配置文件中设置server.max-http-header-size(最大http请求头大小),其默认值为8KB,通常图片的base64会超过默认值,但是也不是越大越好(我设置2MB,然后前端再限制一下图片的大小或者压缩图片),大了反而有大问题,详情请看ser
2020-09-16 13:57:11
5821
2
原创 Java将base64字符串转成MultipartFile类型
一、写一个base64转multipartfile工具类BASE64DecodedMultipartFile,注意实现MultipartFile接口package com.doctor.cloud.mobile.web.utils;/** * @Author: zxb * @Date: 2020/9/15 14:11 * @Version: 1.0 * @Description: base64转multipartfile工具类 **/import org.springframework.
2020-09-16 13:45:48
5554
3
原创 icepdf包突然不起作用
一、问题:上周用icepdf将pdf转成图片,功能已经实现,测试也没问题,结果周一打开项目发现跟icepdf相关的类都报错了,重新导入icepdf包、update maven都没成功二、经过多次尝试,我使用了icepdf的最老版本,终于成功解决,不知道是什么原因突然失效。<dependency> <groupId>org.icepdf.os</groupId> <artifactId>icepdf-core</artifactId&g
2020-09-14 10:21:49
759
原创 Spring将InputStream转成MultipartFile
一、最近项目用google的puppeteer对网页进行截图,截图之后需要将图片保存到阿里云OSS上,由于puppeteer截图后只能拿到图片的Inputstream对象,直接上传文件流到阿里云OSS一直走不通(官方有提供API,不知道为什么走不通),无奈之下只能将InputStream转成MultipartFile,项目上传文件一直都是使用MultipartFile的,可以确定MultipartFile是可以上传到阿里云OSS,果然如此,下面记录一下如何将InputStream转成MultipartFil
2020-09-09 16:40:25
8808
7
原创 Java利用url生成二维码
一、二维码生成工具类,输入为扫描二维码跳转的url,输出是转化后的二维码图片1.导入依赖包:<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version></dependency>2.代码实现:/** * @author zx *
2020-09-09 16:21:02
5399
1
原创 Mybatis-plus自动生成主键id存在的坑
一、问题发现:今天写项目的时候由于需求变化,增加了实体表,创建实体后进行增删改查操作,结果插入数据的时候自动生成的id巨大,大概有这么大125413703487479810,id长度超出数据库表定义的长度,导致数据插不进去,手动插入数据又很正常,排查半天一直找不到问题所在。二、问题解决过程:一开始总根据报错信息说id超出定义的长度去找解决方法,结果都是叫我去修改数据库。后面仔细想了一下,为什么那么多表都没事,单单这个新增的表有问题呢?于是把思路转到Mybatis-plus自动生成主键的方向上,最终证明是正
2020-09-04 17:50:46
5232
原创 日常刷题之剑指offer:11.旋转数组的最小数字
一、问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。二、解题思路:1.利用二分查找的思想,每次将旋转数组分成两半,其中一半是有序的,一半是旋转数组,然后再对旋转数组依次类推,最后可以得到最小值。关键是如何确定那一半是旋转数组,因为数组是非递减排序的,所以有序的一半的第一个
2020-08-31 18:04:27
171
原创 日常刷题之剑指offer:10.4.变态跳台阶
一、问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。二、解题思路:1.青蛙可以跳上n级,根据上一题跳台阶的分析,本题跳上n级台阶就是跳上前n-1个台阶的和加1,为什么要加1,因为青蛙可以跳上n级台阶啊,所以最后需要加1。初始条件还是一样的,只不过这里的dp[i]存的是跳上i级台阶跳法的和。2.代码实现public class Solution { public int JumpFloorII(int target) {
2020-08-31 15:39:32
157
原创 日常刷题之剑指offer:10.3.跳台阶
一、问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。二、解题思路:1.青蛙每次跳有两种选择,要么跳1级台阶,要么跳2级台阶,那一个n级的台阶的总共跳法就是n-1级台阶的跳法加上n-2台阶的跳法,即f(n) = f(n-1) + f(n-2),(n> 2)动态规划最主要的是找出初始条件,此处的初始条件就是n=1时只有1种跳法,n=2时只有两种跳法2.代码实现public class Solution { pu
2020-08-31 15:16:07
154
原创 日常刷题之剑指offer:10.2.矩形覆盖
一、问题描述:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:二、解题思路1.此题同样是考斐波那契数列,有一点点不同2.同样可以使用递归和动态规划实现:下面只给出动态规划的代码实现public class Solution { public int RectCover(int target) { if(target <= 2) return ta
2020-08-31 15:06:26
148
原创 日常刷题之剑指offer:10.1.斐波那契数列
一、问题描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)n<=39。二、解题思路:1.斐波那契数列规律:f(0) = 0,f(1) = 1,f(n) = f(n-1) + f(n-2),(n>1);2.递归(自顶向下计算):递归很容易就可以算出,重要的是找到递归的出口,此处递归出口非常明显,就是当n == 0 || n == 1的时候2.1.代码实现public class Solution { public
2020-08-31 12:27:19
183
1
原创 日程刷题之剑指offer:9.用两个栈实现队列
一、题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。二、解题思路:1.栈的特性是先进先出,队列的特性是先进先出。那么我们就可以将两个栈分为进栈和出栈,进栈用于实现队列Push操作,出栈用于实现队列Pop操作。为什么呢?数据执行Push操作时将数据放到进栈,那么进栈的输出结果就是队列的逆序,如果我们再Pop操作的时候将进栈的数据再放到出栈,又倒了一次顺序,这时出栈的输出结构将与队列一致,每次出栈输出数据后需要将数据重新一致进栈,这样后序Push操作才能保证顺序
2020-08-31 11:25:31
206
原创 Java使用Puppeteer将网页指定区域转成pdf
友情提示:本文章只提供方法思路,不要复制粘贴后说跑不通一、需要先安装NodeJs,网上教程很多二、安装puppeteer依赖,如果npm下载不成功就使用cnpm命令(cnpm需要先安装)npm install puppeteer --save三、在安装puppeteer依赖的目录下创建puppeteer.jsconst puppeteer = require('puppeteer');const options = process.argv;var address, types;(asyn
2020-08-28 11:34:21
1078
原创 日常刷题之剑指offer:8.二叉树的下一个结点
一、问题描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。二、解题思路:1.给定的结点有两种情况:第一是给定结点有右子树,则该结点的下一个结点是右子树的最左结点;第二种是给定结点没有右子树,则该结点的下一个节点是向上找第一个左连接包含该结点祖先的结点(第二种是不是有点蒙,画一下图推演一下就知道了)1.1.当给定结点是7时,按照中序遍历他的下一个结点是2,结点2刚好是左孩子包含7的祖先结点4(或者结点7)的第一个左
2020-08-26 18:28:18
145
原创 日常刷题之剑指offer:7.重建二叉树
一、问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二、解题思路:1.知识储备前提1.1.树的四种遍历方式(所谓的前序、中序、后序指的是根节点的访问顺序)1.1.1.前序遍历:先访问根节点,在前序遍历左子树,最后前序遍历右子树1.1.2.中序遍历:先中序遍历左子树,再访问根节点,最后中序遍历右子树1.
2020-08-26 17:28:53
152
原创 日常刷题之剑指offer:6.从头到尾打印链表
一、问题描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。二、解题思路:1.递归解法,先输出当前链表的后续链表next,再输出当前节点public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list = new ArrayList<>(); if(listNode != null) { list.ad
2020-08-25 17:25:18
159
原创 日常刷题之剑指offer:5.替换空格
一、问题描述:将一个字符串中的空格替换成 “%20”。二、解题思路:1.直接使用String的replace(" “,”%20"),感觉直接调API没锻炼到解题能力public String replaceSpace(StringBuffer str) { return str.toString().replace(" ","%20");}2.不调用API的解法:先遍历字符串,发现空格就在字符串后面添加两个空格,这样遍历完就可以得到替换后的字符串长度。然后从旧字符串长度和新字符串长度往前遍历,
2020-08-25 17:17:47
140
原创 日常刷题之剑指offer:4.二维数组中的查找
一、问题描述:给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。二、解题思路:1.注意题干:每一行从左到右是递增的,每一列从上到下是递增的,所以从右上角开始比较,target小于array[i][j]则j–,target大于array[i][j]则i++public boolean Find(int target, int [][] array) { int i = 0; int j = array[0].length - 1;
2020-08-25 11:58:20
156
原创 日常刷题之剑指offer:3.数组中重复的数字
一、题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。二、解题思路1.暴力法:直接排序,然后看相邻两个数是否相同,相同则为重复(此题暴力无法AC)2.时间复杂度和空间复杂度均为O(n),用一个map来将数组的值作为key存储,一次for循环即可,每次先判断map.contains
2020-08-25 11:36:48
196
原创 如何对Map集合进行自定义排序
一、LinkedHashMap是有序的,但是只有两种顺序:插入顺序和最近最少访问顺序(默认插入顺序),TreeMap是有序的,默认升序顺序,HashMap是无序的二、如果你想自定义Map的排序的话,你需要借助Comparator的帮助1.所有的Map集合都是用的方式Map<String,Integer> map = new HashMap<>();map.put("key1",1);map.put("key2",2);map.put("key3",3);//Linked
2020-08-21 10:18:31
3046
2
原创 使用maven打包项目执行clean时报错clean报错Failed to clean project
一、在电脑搜索框搜索资源管理器二、打开资源管理器,切换到cpu,在关联的句柄输入“target”,找到报错的进程,右键结束进程
2020-08-20 11:19:44
1165
原创 分享功能生成小程序二维码
一、创建工具类HttpRequestUtil/***生成小程序二维码工具类*/public class HttpRequestUtil { /* 访问小程序获取数据的doGet方法 * @param url 要访问的地址 * @param param 访问的参数 * @return */ public static String doGet(String url, Map<String, String> param) { // 创
2020-08-14 16:19:33
746
原创 Java使用阿里云oss上传的图片不能在线预览,访问图片地址直接下载问题(Amazon和腾讯云存储都是同样的处理)
解决方法:在图片上传的时候加入以下代码即可:// meta设置请求头,解决访问图片地址直接下载ObjectMetadata meta = new ObjectMetadata();meta.setContentType(getcontentType(filepath.substring(filepath.lastIndexOf("."))));ossClient.putObject(new PutObjectRequest(bucketName, filepath, fileupload,meta)
2020-08-14 10:40:21
4579
1
转载 Mybatis查询一段时间内的数据出现数据缺失问题
问题:时间范围的查询会存在以下问题:1、如果单纯采用年月日的形式会出现缺少最后一点的数据,比如要查询2015-09-16到2015-09-17,那么2015-09-17 01:00:00的数据不会被查询出来。无论是使用between and还是<=/>=的形式去实现都会有这样的问题。解决方法:1、如果是以年月日的形式,那么可以采用动态拼接字符串的形式,最后得到2015-09-16 00:00:00到2015-09-17 23:59:59,如果要更精确可以往毫秒级别加。2、采用加1天的形式
2020-08-14 10:36:43
1584
原创 直接获取url中?后面的参数
一、写一个获取函数getUrlKey: function (name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ""])[1].replace(/\+/g, '%20')) || null },二、调用console.log("获取uuid:" + this.getUrlKey('uui
2020-08-11 16:05:07
692
原创 Linux安装cnpm成功却无法使用
一、原因:可能是软连接出现问题,导致cnpm不能使用二、解决方法:1.先删除已经装好的cnpmsudo npm uninstall cnpm -g2.重新安装cnpm(注意:安装成功后请记住cnpm的安装路径,待会要用到)npm install -g cnpm --registry=https://registry.npm.taobao.org安装路径类似下面的路径3.建立软连接sudo ln -s /opt/node/node-v10.15.1-linux-x64/bin/cnpm
2020-08-10 16:17:39
1681
原创 Linux下安装NodeJs
一、先安装wget命令yum install -y wget二、下载node安装包wget https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-x64.tar.xz三、在/opt目录下创建node目录(我安装软件基本都是安装opt下面,你可以自己选择安装路径)mkdir node四、解压安装包到指定目录tar -xvf node-v10.15.1-linux-x64.tar.xz -C /opt/node五、将node命令设置为
2020-08-10 11:26:49
262
原创 Java使用EasyExcel将数据导出Excel表
一、添加EasyExcel依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.1.2-beat1</version> </dependency>二、准备一个Excel模板类,例如创建ExcelModalJobBean.class@Datapub
2020-08-07 10:43:28
855
原创 puppeteer部署到服务器
一、先安装NodeJs二、安装puppeteer依赖yum update nss -yyum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64
2020-08-06 15:59:13
1415
原创 Java使用puppeteer实现将网页转成pdf功能
一、需要先安装NodeJs,网上教程很多二、安装puppeteer依赖,如果npm下载不成功就使用cnpm命令(cnpm需要先安装)npm install puppeteer --save三、在安装puppeteer依赖的目录下创建puppeteer.jsconst puppeteer = require('puppeteer');const options = process.argv;var address, types;(async() => {if(options.leng
2020-08-06 11:38:15
2614
2
原创 springboot项目打包jar后部署到服务器以及远程调试服务器项目
一、pom.xml中打包的配置如下(booking表示打包后文件的名字,0.0.1-SNAPSHOT表示打包文件的版本,jar表示打包文件为jar包) <groupId>com</groupId> <artifactId>booking</artifactId> <version>0.0.1-SNAPSHOT</version...
2019-12-29 23:05:52
1012
原创 springboot项目部署到服务器后无法发送邮件的问题
一、问题:本地环境项目可以发送邮件,部署到服务器后无法发送邮件二、原因:我使用的是阿里云服务器,由于阿里云因为安全考虑不开发邮件默认发送端口25,所以导致本地可以发送邮件,服务器上不能发送邮件三、解决方法:使用端口465以及ssl加密方式发送邮件,我的项目是springboot,所以直接在配置文件中加入下面的配置# Use port 465 instead of the default po...
2019-12-29 22:39:11
2091
转载 vue打包到springboot项目下出现,vue页面刷新页面404错误/Whitelabel Error Page、无法直接通过路径访问Whitelabel Error Page
vue打包到springboot项目下出现,vue页面刷新页面404错误/Whitelabel Error Page、无法直接通过路径访问Whitelabel Error Page问题描述将vue项目整合进后端项目,部署服务器后,正常使用没有问题,但是只要刷新当前页面就总是返回404错误,Whitelabel Error Page,This application has no explici...
2019-12-28 21:46:01
7898
免费的全能终端工具MobaXterm
2020-09-21
DataTables (1).zip
2019-07-10
大学物理简明教程课后习题答案第三版修订版 赵近芳、王登龙
2019-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人