Java
文章平均质量分 72
姚舜禹_12140
但求诗酒趁年华,不负荆棘不负梦
展开
-
Java判断字符串是不是数字
通过Java判断一个字符串,是不是数字。这里包括正数、负数、浮点数、科学计数法。原创 2023-12-12 19:50:47 · 200 阅读 · 0 评论 -
自定义注解格式化处理BigDecimal
在开发过程中,如果有实体类的属性中存在BigDecimal的属性,并且需要对其进行校验,例如:限制BigDecimal的小数点位数是两位。但目前没有注解可以完成这个操作,因此我们可以使用下面的工具类和注解进行处理原创 2023-11-05 20:49:51 · 718 阅读 · 0 评论 -
Java实现驼峰命名的字符串转化
在开发场景中,我们会遇到一些涉及字符串的转化。例如:数据库字段的名称叫TYPE_NAME,但是有时候我们需要将其转化为typeName。或者将typeName的驼峰命名方式转化为TYPE_NAME,这时候就需要进行转化。因此,在这里提供了个工具类。接下来将进行演示。原创 2023-11-03 20:29:07 · 2460 阅读 · 0 评论 -
Java通过工具类判断前端给定的实体类属性中是否为空
在Java开发过程中,当前端页面传递参数时,如果我们使用实体类进行接收,而一些属性的值是必须有值的,那么就需要对这些属性进行校验,但是如果逐一校验、进行空判断,那么就会有大量的冗余代码。因此我们可以通过封装一个工具类,利用反射进行处理。假设传递的实体类中name和age属性均不能为空。原创 2023-10-29 16:57:38 · 726 阅读 · 0 评论 -
java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性
在开发过程中,有时候需要将后端数据返回前端,此时有些数据为空属性不需要返回,或者有些属性不需要返回,因此就需要处理。字符串、基本数据类型的设置,使用JsonInclude.Include.NON_NULL。对象、数组之类的设置,使用JsonInclude.Include.NON_EMPTY。原创 2023-10-28 17:18:42 · 6976 阅读 · 2 评论 -
如何在电脑上配置多个JDK环境
在项目开发过程中,可能会使用到多个JDK。那么如何让一台电脑上的配置JDK版本,并实现版本之间的切换,这就是今天要达到的目的。原创 2023-09-24 20:53:50 · 2647 阅读 · 0 评论 -
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 · 888 阅读 · 0 评论 -
CentOS7下配置SNMP服务
如果需要更改snmp的一些配置,则可以进入/etc/snmp下,修改snmpd.conf文件。具体的一些配置要根据实际需要来指定。本文中CentOS的IP地址是192.168.1.114。二、配置snmpd.conf。五、通过freesnmp测试。一、安装SNMP软件包。原创 2023-02-22 16:21:51 · 2539 阅读 · 0 评论 -
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 · 1805 阅读 · 1 评论 -
三色标记法介绍
这里有一个需要注意的点,重新标记阶段会STW,以此保证标记结果的正确性(主要是漏标)。到现在你可能理解了,垃圾收集器中所描述的:并发清理阶段产生的垃圾会被当做浮动垃圾,只能留待下一次GC被清理。那么实际上是怎么回事呢?其实就很简单了,只要在并发清理阶段产生的对象,直接就认为是黑色对象,全部都不是垃圾。如果一个对象最终成了垃圾,那它就是浮动垃圾,如果没成垃圾,那么标记为黑色也没有什么问题。因为到了清理阶段,标记工作已经完成,没有办法再找到合适的方式去处理这个问题,不然一次GC可能永远也结束不了。转载 2022-08-21 19:27:29 · 2751 阅读 · 1 评论 -
Java中的深拷贝与浅拷贝
进行深拷贝时,基本数据类型变量和引用类型变量指向的对象都会被复制,即针对引用类型的成员变量真正的复制一份,重新开辟空间保存,这样两个引用类型属性互不影响。对于浅拷贝而言,在复制对象时仅仅复制对象本身,包括基本属性和引用类型,拷贝出来的对象和原对象中属性所引用的对象是同一个。对于深拷贝而言,复制之后的对象和原对象之间互不影响。......原创 2022-08-18 10:15:57 · 2130 阅读 · 0 评论 -
Java实现最大堆
Java实现最大堆。原创 2022-08-15 12:45:52 · 614 阅读 · 0 评论 -
二叉搜索树的构建以及遍历
二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。二叉查找树(Binary Search Tree),又称为二叉搜索树,二叉排序树。2、二叉搜索树的前序遍历。3、二叉搜索树的中序遍历。4、二叉搜索树的后序遍历。5、二叉搜索树的层序遍历。1、二叉搜索树的构建。...原创 2022-08-15 09:44:30 · 1068 阅读 · 0 评论 -
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 · 428 阅读 · 0 评论 -
ThreadLocal详细分析
threadLocal操作的是每个线程自己的ThreadLocalMap,因此不会有线程的竞争。key是当前的threadlocal对象,value是当前线程放在这个threadlocal里面的值。ThreadLocalMap是基于开放定址法(线性探测再散列)实现的hash表,这里没有采用HashMap的数组加链表的实现方式是因为这里的场景决定了hash表中不会有太多的值,通过采用独特的斐波那契散列求hash值,可以极大的降低hash冲突概率,访问数据速度也比HashMap快。......原创 2022-08-03 18:13:56 · 608 阅读 · 0 评论 -
interrupt()、interrupted()和isInterrupted()你真的懂了吗
前面提到interrupted()方法连续两次调用的返回结果不一样,因为第二次调用的时候线程的中断状态已经被清除,会返回一个false。也就是说,当前线程main并没有被中断过,即Thread.interrupted()方法其实相当于main.interrupted(),而Thread.interrupted()方法检测的是mt线程有没有被中断。上面都是针对当前线程进行操作,其运行结果也符合我们的预期true-true-false,因为interrupted()方法是有检测中断并清除中断状态的作用。....原创 2022-07-31 11:03:18 · 2634 阅读 · 2 评论 -
TreeSet解析
TreeSet实际上是TreeMap实现的,所以底层结构也是红黑树。TreeSet不需要重写hashCode()和euqals()方法,因为它去重是依靠比较器来去重,因为结构是红黑树,所以每次插入都会遍历比较来寻找节点插入位置,如果发现某个节点的值是一样的那就会直接覆盖。当我们构造TreeSet时;若使用不带参数的构造函数,则TreeSet的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。TreeSet是非线程安全的。...原创 2022-07-28 09:40:00 · 3277 阅读 · 0 评论 -
详解LinkedList
linkedList本质上是一个双向链表,通过一个Node内部类实现的这种链表结构。LinkedList能存储null值。LinkedList在删除和增加等操作上性能好,而ArrayList在查询的性能上好。从源码中看,它不存在容量不足的情况。LinkedList不光能够向前迭代,还能像后迭代,并且在迭代的过程中,可以修改值、添加值、还能移除值。LinkedList不光能当链表,还能当队列使用,这个就是因为实现了Deque接口。...原创 2022-07-24 09:02:01 · 1789 阅读 · 0 评论 -
详解Vector
Vector是实现了List接口的子类,其底层是一个对象数组,维护了一个elementData数组,是线程安全的,Vector类的方法带有synchronized关键字,在开发中考虑线程安全中使用Vector。Vector的底层实现也是数组,在不指定初始容量的情况下,默认初始数组大小为10,其扩容机制为当指定了增量的时候,新扩容的容量=旧数组长度+容量;如果没有指定增量,新扩容容量=旧数组长度*2。Vector是线程安全的,因为它对很多方法都加锁了。......原创 2022-07-22 21:24:54 · 4065 阅读 · 0 评论 -
深入理解ArrayList
Java集合框架拥有两大接口Collection和Map,其中,Collection下面有三个List、Set和Queue。Arraylist就实现了List接口,其实就是一个数组列表,不过作为Java的集合框架,它只能存储对象引用类型,也就是说当我们需要装载的数据是诸如int、float等基本数据类型的时候,必须把它们转换成对应的包装类。httpshttpshttps。...原创 2022-07-18 21:52:28 · 1661 阅读 · 0 评论 -
try-catch-finally的深入理解
关于try-catch-finally的执行顺序说明:首先看一个例子: 在try、catch、finally中,当执行到return时会先去执行finally中的操作,然后才会返回再执行return。上述代码的输出结果为:1。我们可以进行简单的分析,这段代码的字节码文件如下: 我们以图解的方式进行分析,其执行过程如下:(1)执行int x = 1 (2)执行try中的return x 此时并不是真的返回x的值,而是将x的值存到局部变量表中作为临时存储变量进行存原创 2022-06-12 10:06:03 · 924 阅读 · 0 评论 -
深入理解JMM模型
1、为什么会有JMM这种抽象概念由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,线程与主内存中的变量操作必须通过工作内存间接完成,主要过程是将变量 从主内存拷贝的每个线程各自的工作内存空间,然后对变量进行操作,操作完成后再将变量 写回主内存,如果存在两个线程同时对一个主内存中的实例对象的变量进行操作就有可能诱 发线程安全问题。 JMM模型可以很清晰的描述多线程带来问题,并且与程序和硬件有很好的契合解释。...原创 2022-04-23 15:49:31 · 243 阅读 · 0 评论 -
二叉树的五种遍历方式
目录1、前序遍历(1)递归实现前序遍历(2)非递归实现前序遍历2、中序遍历(1)递归实现中序遍历(2)非递归实现中序遍历3、后序遍历(1)递归实现后序遍历(2)非递归实现后序遍历4、层序遍历二叉树是一种重要的数据结构,其遍历方式分为:深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即就是层次遍历。如下图:class TreeNode{ int val; TreeNode left; TreeNode ..原创 2022-03-29 16:19:59 · 14495 阅读 · 2 评论 -
ssm遇到的一个错误
在做SSM项目的时候,遇到下面的错误。经过一步步排查,找到了问题的源头:在jsp页面有一个用户的birthday属性,在实体类中的类型是Date类型,在进行表单提交的时候,报了400错误最后,在网上查找资料找到了解决方案:在实体类User的birthday属性前面加入注解:如果指定的输入格式是:1997-01-01,则格式如下:@DateTimeFormat(pattern = "yyyy-MM-dd")如果指定的输入格式是:1997-01-01 12:12:12,则格式如下:.原创 2020-08-21 14:52:57 · 97 阅读 · 0 评论