- 博客(224)
- 资源 (1)
- 收藏
- 关注
原创 SpringBoot报错:Factory method ‘dataSource‘ threw exception; nested exception is java.lang.NullPointerE
关于类似的报错,之前搜了很多种解决办法,都没解决。后来才发现其实这个原因很简单,是因为在mapper文件中没有定义sql语句的入参,导致数据源配置失败,从而导致后续的Controller等出现问题。没想到开发这么久了,还会犯这种错误,仅以此博客,做个记录。
2024-03-17 15:06:30 2595
原创 SpringBoot+Redis实现接口防刷功能
在实际开发中,当前端请求后台时,如果后端处理比较慢,但是用户是不知情的,此时后端仍在处理,但是前端用户以为没点到,那么再次点击又发起请求,就会导致在短时间内有很多请求给到后台,可能会出现后台崩溃或者数据重复添加的问题。那么如何解决这个问题呢?为了避免短时间内对一个接口访问,我们可以通过AOP+自定义注解+Redis的方式,在接口上加一个自定义注解,然后通过AOP的前置通知,在Redis中存入一个有效期的值,当访问接口时这个值还未过期,则返回提示信息给前端,以此来避免短时间内对接口的方法。
2024-01-07 13:23:39 913
原创 SpringBoot整合EasyExcel
EasyExcel是阿里巴巴开源poi插件之一,是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。尽管Java解析、生成Excel不止EasyExcel,还有一些其他的框架,例如:Apache poi、jxl,但这些都存在一个严重的问题就是非常的耗内存。而EasyExcel是在尽可能节约内存的情况下支持读写百M的Excel,能在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。因此,本文将通过一个书籍列表的导入,作为案例,来揭开EasyExcel的使用过程。
2023-11-18 12:43:09 1377
原创 自定义注解格式化处理BigDecimal
在开发过程中,如果有实体类的属性中存在BigDecimal的属性,并且需要对其进行校验,例如:限制BigDecimal的小数点位数是两位。但目前没有注解可以完成这个操作,因此我们可以使用下面的工具类和注解进行处理
2023-11-05 20:49:51 771
原创 Java实现驼峰命名的字符串转化
在开发场景中,我们会遇到一些涉及字符串的转化。例如:数据库字段的名称叫TYPE_NAME,但是有时候我们需要将其转化为typeName。或者将typeName的驼峰命名方式转化为TYPE_NAME,这时候就需要进行转化。因此,在这里提供了个工具类。接下来将进行演示。
2023-11-03 20:29:07 2641
原创 Java通过工具类判断前端给定的实体类属性中是否为空
在Java开发过程中,当前端页面传递参数时,如果我们使用实体类进行接收,而一些属性的值是必须有值的,那么就需要对这些属性进行校验,但是如果逐一校验、进行空判断,那么就会有大量的冗余代码。因此我们可以通过封装一个工具类,利用反射进行处理。假设传递的实体类中name和age属性均不能为空。
2023-10-29 16:57:38 742
原创 java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性
在开发过程中,有时候需要将后端数据返回前端,此时有些数据为空属性不需要返回,或者有些属性不需要返回,因此就需要处理。字符串、基本数据类型的设置,使用JsonInclude.Include.NON_NULL。对象、数组之类的设置,使用JsonInclude.Include.NON_EMPTY。
2023-10-28 17:18:42 7300 2
原创 Mybatis应用场景之动态传参、两字段查询、用户存在性的判断
这种方式值只适合一条记录的封装,但是不适合多条记录。有时候在业务场景中,我们需要进行唯一性判断,例如:用户登录的时候,我们要判断这个用户在用户表中是否存在,所以就不需要写select * from t_user where id =?举个例子:在学生表中查找名字为Tom的用户的数据记录有几条,或者年龄等于23的用户有几个,这时候就需要动态传参。在使用MyBatis查询数据库时,有时候对于数据表,仅需要查询两列数据,一列做map的key,一列作为map的value,然后将查询出的结果以map的形式返回。
2023-10-22 17:20:24 920
原创 Git的介绍和命令汇总
在Git中,有四个工作区域:工作区域(Working Directory)、暂存区(Stage/Index)、本地仓库(Repository)、远程仓库(Remote Directory)。每个区域的作用如下:当前项目的目录,其中包含了正在编辑的文件和子目录。在Git中,工作区并不属于Git版本控制系统的一部分,因此Git不会主动跟踪工作区中的文件变化。也称为索引(Index),是Git版本控制系统中用于暂存文件更改的区域。当使用git add命令。
2023-10-22 09:46:21 144
原创 Git回退版本的方式
命令作用git log查看历史提交记录回退到当前版本(取消暂存区的内容)回退到上个版本回退到上上个版本git reset --hard id (commit hash值)回退到指定版本。
2023-09-26 20:28:31 13378 1
原创 Java获取给定月份的前N个月份和前N个季度
在项目开发过程中,遇到这样一个需求,即:给定某一月份,得到该月份前面的几个月份以及前面的几个季度。例如:给定2023-09,获取该月份前面的前3个月,即2023-08、2023-07、2023-06,以及该月份的前3个季度,即2023-06、2023-03、2022-12。
2023-09-25 22:25:27 932
原创 解决Vue设置图片的动态src不生效的问题
在vue项目中,想要动态设置img的src时,此时发现图片会加载失败。在Vue代码中是这样写的:在Vue的data中是这样写的:我的图片在根目录下的static里面:但是在页面上这个图片却无法加载出来。
2023-09-25 21:10:29 2114
原创 如何在电脑上配置多个JDK环境
在项目开发过程中,可能会使用到多个JDK。那么如何让一台电脑上的配置JDK版本,并实现版本之间的切换,这就是今天要达到的目的。
2023-09-24 20:53:50 2789
原创 Spring Boot 启动报错解决:No active profile set, falling back to default profiles: default
在SpringBoot启动时,控制台打印出来的信息有这么一条:No active profile set, falling back to default profiles: default。这句话的意思是:没有指定项目的配置文件,使用了默认配置文件。也就是application.properties或者application.yml。加入spring.profiles.active=local即可。
2023-08-27 14:55:32 6692
原创 SpringBoot项目在启动后自动关闭
在创建SpringBoot项目的时候,Web的依赖没有导入,默认以普通java项目运行导致的终止。在pom.xml文件中引入web的jar包,然后刷新maven即可。
2023-08-27 14:41:22 5648
原创 记录一次华三交换机配置IP地址和SNMP服务的过程
vlan 1ip address IP地址 子网掩码我通过网线将笔记本电脑连接到华三交换机,笔记本电脑的IP地址为192.168.1.120,所以将配置之后的华三交换机ping我的笔记本电脑,结果显示ping通了。
2023-05-14 10:32:54 13232 1
原创 CentOS7下配置SNMP服务
如果需要更改snmp的一些配置,则可以进入/etc/snmp下,修改snmpd.conf文件。具体的一些配置要根据实际需要来指定。本文中CentOS的IP地址是192.168.1.114。二、配置snmpd.conf。五、通过freesnmp测试。一、安装SNMP软件包。
2023-02-22 16:21:51 2590
原创 Java通过SNMP4J管理设备
只要和其他电脑在同一个局域网,并且其他电脑开启了SNMP服务,那么就可以通过更改IP地址,实现对与之相连的局域网内的所有主机的信息的获取。而通过更改不同的OID,就可以实现对主机的其他信息的获取。管理站即运行代码的电脑的IP地址是:192.168.1.101,而被管理站的IP地址是192.168.1.111.因此在被管理站的SNMP服务中配置了管理站的IP地址。如果是在IDEA的lib目录下引入jar包,则先将下载的jar包放入lib目录下,然后选中jar包,右键选择Add as Library即可。
2023-02-22 15:34:38 1856 1
原创 Echarts实现动态折线图的定时刷新
在做项目的过程中,遇到一个需求:要从后台读取数据,并对echarts进行实时更新。后台只需要将数据以JSON方式返回即可。(1)首先是前端页面的修改。(2)后台代码的实现。
2023-01-08 19:00:21 8293 8
转载 三色标记法介绍
这里有一个需要注意的点,重新标记阶段会STW,以此保证标记结果的正确性(主要是漏标)。到现在你可能理解了,垃圾收集器中所描述的:并发清理阶段产生的垃圾会被当做浮动垃圾,只能留待下一次GC被清理。那么实际上是怎么回事呢?其实就很简单了,只要在并发清理阶段产生的对象,直接就认为是黑色对象,全部都不是垃圾。如果一个对象最终成了垃圾,那它就是浮动垃圾,如果没成垃圾,那么标记为黑色也没有什么问题。因为到了清理阶段,标记工作已经完成,没有办法再找到合适的方式去处理这个问题,不然一次GC可能永远也结束不了。
2022-08-21 19:27:29 2795 1
原创 Java中的深拷贝与浅拷贝
进行深拷贝时,基本数据类型变量和引用类型变量指向的对象都会被复制,即针对引用类型的成员变量真正的复制一份,重新开辟空间保存,这样两个引用类型属性互不影响。对于浅拷贝而言,在复制对象时仅仅复制对象本身,包括基本属性和引用类型,拷贝出来的对象和原对象中属性所引用的对象是同一个。对于深拷贝而言,复制之后的对象和原对象之间互不影响。......
2022-08-18 10:15:57 2182
原创 二叉搜索树的构建以及遍历
二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。二叉查找树(Binary Search Tree),又称为二叉搜索树,二叉排序树。2、二叉搜索树的前序遍历。3、二叉搜索树的中序遍历。4、二叉搜索树的后序遍历。5、二叉搜索树的层序遍历。1、二叉搜索树的构建。...
2022-08-15 09:44:30 1090
原创 Java实现排序算法
排序法最好情形平均时间最差情形稳定度空间复杂度冒泡排序O(n)O(n^2)O(n^2)稳定O(1)快速排序O(nlogn)O(nlogn)O(n^2)不稳定O(nlogn)直接插入排序O(n)O(n^2)O(n^2)稳定O(1)希尔排序O(n)O(nlogn)O(nlogn)不稳定O(1)直接选择排序O(n^2)O(n^2)O(n^2)不稳定O(1)堆排序O(nlogn)O(nlogn)O(nlogn)不稳定O(nlogn)...
2022-08-15 07:37:40 438
原创 ThreadLocal详细分析
threadLocal操作的是每个线程自己的ThreadLocalMap,因此不会有线程的竞争。key是当前的threadlocal对象,value是当前线程放在这个threadlocal里面的值。ThreadLocalMap是基于开放定址法(线性探测再散列)实现的hash表,这里没有采用HashMap的数组加链表的实现方式是因为这里的场景决定了hash表中不会有太多的值,通过采用独特的斐波那契散列求hash值,可以极大的降低hash冲突概率,访问数据速度也比HashMap快。......
2022-08-03 18:13:56 618
原创 interrupt()、interrupted()和isInterrupted()你真的懂了吗
前面提到interrupted()方法连续两次调用的返回结果不一样,因为第二次调用的时候线程的中断状态已经被清除,会返回一个false。也就是说,当前线程main并没有被中断过,即Thread.interrupted()方法其实相当于main.interrupted(),而Thread.interrupted()方法检测的是mt线程有没有被中断。上面都是针对当前线程进行操作,其运行结果也符合我们的预期true-true-false,因为interrupted()方法是有检测中断并清除中断状态的作用。....
2022-07-31 11:03:18 2677 2
原创 剑指offer 48:最长不重复子串
首先,left和right同时指向窗口头部,右窗口不断右移动,用Set维护一个不重复的滑动窗口,当遇到重复元素,即刻移动左窗口,去重,同时记录此时窗空口的长度。用一个双端队列当成滑动窗口,当遇到队列中已经存在的数,就从队头开始删(直到删除这个存在的数),否则就从队尾添加元素。请注意,你的答案必须是子串的长度,"pwke"是一个子序列,不是子串。请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。因为无重复字符的最长子串是"wke",所以其长度为3。...
2022-07-28 10:39:30 136
原创 TreeSet解析
TreeSet实际上是TreeMap实现的,所以底层结构也是红黑树。TreeSet不需要重写hashCode()和euqals()方法,因为它去重是依靠比较器来去重,因为结构是红黑树,所以每次插入都会遍历比较来寻找节点插入位置,如果发现某个节点的值是一样的那就会直接覆盖。当我们构造TreeSet时;若使用不带参数的构造函数,则TreeSet的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。TreeSet是非线程安全的。...
2022-07-28 09:40:00 3312
原创 HashSet和LinkedHashSet
HashSet是Set接口的子类,其内部采用了HashMap作为数据存储,HashSet其实就是在操作HashMap的key。HashSet是无序存储的,不能保证元素的顺序;HashSet并没有进行同步处理,因此是线程不安全的;HashSet可以存储null元素,但只能存储一个。(1)基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75的HashMap。httpshttps。......
2022-07-27 21:45:01 1948
原创 Leetcode 1184:公交站间的距离
环形公交路线上有n个站,按次序从0到n-1进行编号。我们已知每一对相邻公交站之间的距离,distance[i]表示编号为i的车站和编号为(i+1)%n的车站之间的距离。用len统计由起始公交站到终点公交站之间的距离。假设len为顺时针的走法,那么sum-len的值即为逆时针的走法。公交站0和1之间的距离是1或9,最小值是1。公交站0和2之间的距离是3或7,最小值是3。环线上的公交车都可以按顺时针和逆时针的方向行驶。用sum统计总的距离长度。...
2022-07-24 21:00:13 241
原创 详解LinkedList
linkedList本质上是一个双向链表,通过一个Node内部类实现的这种链表结构。LinkedList能存储null值。LinkedList在删除和增加等操作上性能好,而ArrayList在查询的性能上好。从源码中看,它不存在容量不足的情况。LinkedList不光能够向前迭代,还能像后迭代,并且在迭代的过程中,可以修改值、添加值、还能移除值。LinkedList不光能当链表,还能当队列使用,这个就是因为实现了Deque接口。...
2022-07-24 09:02:01 1820
原创 详解Vector
Vector是实现了List接口的子类,其底层是一个对象数组,维护了一个elementData数组,是线程安全的,Vector类的方法带有synchronized关键字,在开发中考虑线程安全中使用Vector。Vector的底层实现也是数组,在不指定初始容量的情况下,默认初始数组大小为10,其扩容机制为当指定了增量的时候,新扩容的容量=旧数组长度+容量;如果没有指定增量,新扩容容量=旧数组长度*2。Vector是线程安全的,因为它对很多方法都加锁了。......
2022-07-22 21:24:54 4104
原创 深入理解ArrayList
Java集合框架拥有两大接口Collection和Map,其中,Collection下面有三个List、Set和Queue。Arraylist就实现了List接口,其实就是一个数组列表,不过作为Java的集合框架,它只能存储对象引用类型,也就是说当我们需要装载的数据是诸如int、float等基本数据类型的时候,必须把它们转换成对应的包装类。httpshttpshttps。...
2022-07-18 21:52:28 1703
原创 剑指offer 46:把数字翻译成字符串
题目描述:示例 1:解法:动态规划思路: 这道题类似跳台阶的问题,但是有额外的限制条件。假设给定数字 122 一共有三种翻译的可能:第一种bcc 122; 第二种 bw 1 22 ;第三种 mc 12 2。 可以观察出当从左向右遍历时,存在选择选一格字符或者选两个字符的情况 类似跳一格或者跳两格。 但是题目给出了限制条件: 如果不满足上诉条件 则不存在跳两格 只能跳一格的形式到达目标。所以当num[i-1,i] 拼接成的十位数>=10且...
2022-07-14 21:01:27 103
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人