自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 什么是 CAS

CAS(Compare And Swap/Set)比较并交换,CAS 算法的过程是这样:它包含 3 个参数V,E,N。V 表示要更新的变量(内存值),E 表示预期值(旧的),N 表示新值。当且仅当 V 值等于 E 值时,才会将 V 的值设为 N,如果 V 值和 E 值不同,则说明已经有其他线程做了更新,则当 前线程什么都不做。最后,CAS 返回当前 V 的真实值。

2024-03-17 23:13:14 364

原创 JAVA 四中引用类型

弱引用需要用WeakReference类来实现,它比软引用的生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管JVM的内存空间是否足够,总会回收该对象占用的内存。软引用需要用SoftReference类来实现,对于只有软引用的对象来说,当系统内存足够时它不会被回收,当系统内存空间不足时它会被回收。:在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不会被垃圾回收机制回收的,即。

2024-03-13 19:36:30 371

原创 自定义注解实现excel导出

将数据导出为excel文件是项目中经常遇到的需求,用EasyExcel实现导出虽然很简单,但每次都要写一堆重复的代码,如设置response对象,新建ExcelWriter、WriteSheet,writer.finish()等,感觉很难受,于是就想定义一个注解快速实现导出功能。

2024-03-13 14:29:08 670

原创 easyexcel 导出报“Can not close IO”异常

总结:Can not close IO异常的原因有很多,如果碰到本地正常,生产报错的情况可以看看生产上是不是有网关之类的具有超时机制的东西。

2024-03-11 14:34:20 1022

原创 mybatis in中超过1000个值解决办法(超简单)

众所周知sql中条件in的值是不能超过1000个的,而mybatis可以使用动态sql拼接的方式绕开这个限制,下面介绍一个超简单的例子。

2024-03-11 14:21:56 859

原创 Java线程的创建方式

【代码】Java线程的创建方式。

2023-12-27 22:42:35 393

原创 java.lang.NullPointerException隐藏的陷阱

NullPointerException是Java开发中最常见的异常,它产生的原因很简单,即:当我们尝试访问一个null对象的方法或属性时就会抛出空指针异常,一个对象可能来自于用户输入的值,其它方法或接口的返回值、数据库查询的数据等等,这些不确定的对象中很可能就藏着一个null。

2023-12-27 17:46:40 463

原创 java.lang.StackOverflowError异常

java.lang.StackOverflowError Java栈溢出异常:原因:java方法栈的内存耗尽了就会抛出StackOverflowError,多半是程序里有无限递归调用导致的。

2023-12-14 09:45:25 440

原创 Java快速排序

​快速排序(Quicksort)是应用最为广泛的排序算法,与归并排序一样,快速排序也是分治思想的典型例子,它的基本思想是:在序列中任选一个切分元素a,利用a将序列分为两部分,使a左边的元素都不大于a,a右边的元素都不小于a,再采用递归的方式分别对左右两部分重复上述操作,当所有的子序列的长度都缩小为1时排序就完成了。​

2023-12-13 19:37:43 927 1

原创 Java归并排序

归并排序(Merge Sort)是应用分治思想的一个典型例子。把一个待排序序列拆分为两个子序列,分别对两个子序列排序,子序列排序时也采用相同的方法,直至拆分后的两个子序列都是有序的,即长度为1的序列天然有序,这时停止拆分,将两个有序的子序列归并为一个更大的有序序列,与之前拆分时的路径相反,不断的归并有序子序列,最终归并为一个序列。这种将两个有序序列归并为一个有序序列的操作称为二路归并。

2023-12-11 10:45:47 1071 1

原创 Java希尔排序

希尔排序(Shell Sort)是插入排序的一种改进版本,它的思想是把序列下标按一个增量进行分组,分别对每组使用直接插入排序算法排序,而后减小增量的值,再次进行分组和使用直接插入排序算法排序,沿用这个套路直至增量减小为1,这时整个序列被分为一组,算法变成了直接插入排序。时间复杂度O(n^1.5)。

2023-12-07 09:05:35 910

原创 Java插入排序

插入排序(Insertion Sort),插入排序的基本思想是从未排序的序列中取一个元素,插入已排序序列的合适位置,使其继续保持有序,重复这个动作直至未排序的序列为空。

2023-12-01 18:56:19 380 1

原创 Java选择排序

选择排序(Selection Sort)是一种最简单直观的排序算法。它逻辑上将需要排序的元素分为两个序列,未排序的序列和已排序的序列,最初所有元素都在未排序的序列中,已排序的序列为空,通过重复的遍历未排序的序列,每次从未排序的序列中选择一个最小的元素放至已排序序列的末尾,直至未排序的序列为空。

2023-12-01 18:54:42 384 1

原创 Java冒泡排序

冒泡排序(Bubble Sort),是一种比较简单的排序算法。它通过重复遍历要排序的元素,依次比较两个相邻的元素,如果顺序错误就它们的位置,有相邻元素需要交换。

2023-11-30 16:46:33 368

原创 Mysql和Oracle中char类型的区别

总结:oracle中char类型最好用于存储长度固定的值,避免处理字符串后面的空格;mysql中char类型也适合存储长度固定的值,但是它使用时会自动去除后面的空格,使用上有点像可变长度的varchar类型。oracle中的char类型:固定长度,当存储值长度不足时后面填充空格,取出时会带上空格;mysql中的char类型:固定长度,当存储值长度不足时后面填充空格,取出时会去除。

2023-11-26 16:19:02 436 1

原创 Java线程的生命周期

当sleep()状态超时、join()等待线程终止或者超时、或者 I/O 处理完毕时,线程重新转为。的线程执行sleep()或 join()方法,或者发出了 I/O 请求时,JVM 会把该线程置为。之间来回切换,当cpu分配的时间片用完或线程执行yield()方法主动放弃时间片,线程由。,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值,直接调用该线程的 stop()方法来结束该线程,该方法容易导致死锁。的线程执行wait()方法,JVM 会把该线程放入等待队列中。

2023-11-08 19:30:12 31 1

原创 Oracle判断字符串是否超长

我们在保存用户输入的数据时,例如用户填写的备注、说明等文本字段,如果没有限制输入的长度,可能会出现字符串长度太长导致保存失败的情况,这就需要我们先判断一下字符串的长度有没有超过字段的最大长度。由于oracle常用的字符集为ZHS16GBK,所以这里按GBK编码获取字节长度,可以用下面sql查询数据库使用的字符集。java中str.length()方法获取的字符串的字符数,字符串的字节长度才是它在数据库中占用的空间。VARCHAR2(100)表示字段可以的最大长度为100个字节。

2023-11-08 12:55:15 466 1

原创 Java校验日期格式

在后端接收用户提交的数据或者批量处理用户导入的数据时,为了保证数据格式的一致性、数据的合法性和有效性,通常要对输入的时间格式进行校验。

2023-10-27 15:19:44 596 1

原创 Oracle中null和空字符串

Oracle中null和空字符串('')的区别,结论:Oracle中null和空字符串('')没有区别。

2023-09-20 11:43:25 1385 1

原创 模糊查询like和not like

百分号(%):可以匹配任意长度(0至多个字符)的字符;下划线(_):可以匹配单个字符;

2023-08-17 12:42:10 398 1

原创 count(*)和count(1)和count(列名)

count(*) =count(1) = sum(1),返回的是结果集中所有行的数量,包括空行。count(列名),返回的是结果集中该列不为空的行数。count(列名)还能去重后再统计,count(distinct 列名)即相同的数据只统计一次。

2023-08-14 12:47:07 277

原创 Oracle物化视图

物化视图通过字面意思理解是物理化视图,将视图的数据物理化,即物化视图的数据存储在磁盘等非易失的存储设备上,因此物化视图不是虚表,而是根据基表定义实际存在的实表。

2023-08-01 11:17:52 154 1

原创 Thread.sleep()线程休眠的时间

如果Thread.sleep()休眠时间到了之后线程是立即执行的,那最后打印出来的结果会是1000,但实际情况总是大于1000的,其原因是Thread.sleep()方法的作用是使线程主动放弃cpu的执行权,并在休眠的这段时间内不参与cpu的竞争,在休眠结束后,线程并不能马上得到执行,而是进入就绪状态,参与cpu抢占,只有得到cpu的执行权才能继续执行,所以线程的休眠时间总是大于设置的时间的,并且当cpu越忙的时候这个误差越大。

2023-07-25 09:55:08 3245

原创 mybatis使用<set>动态拼接sql的坑

当所有更新字段都为空时,sql就变成了:update user_info set where id = #{id},这个问题本身很简单,但是在开发的时候很容易忽略。2、在标签里加id = id(也可以是别的不需要改的字段),这个方法的缺点是当所有更新字段都为空时也会返回更新成功一行,但实际上什么也没更新,可以根据需求选择合适的方法。1、在dao层捕获处理异常;

2023-07-10 17:39:35 228 1

原创 mybatis传入BigDecimal参数的坑

mybatis似乎把为0的BigDecimal类型当成null来处理

2023-06-29 17:07:27 588 1

原创 捕获Throwable异常

经过一番折腾,才发现抛出的不是异常,而是一个错误:NoSuchMethodError。之前一直以为用Exception就能捕获所有的异常(事实也确实如此), 还没发现Exception和Error有一个共同的父类Throwable,我们习惯性地捕获Exception异常,因为Error通常无法处理,一旦发生Error,要么程序的运行环境出错,要么代码有错误,编码阶段捕获Throwable异常可以快速地定位代码中的错误(也可以看日志,个人比较习惯debug),也可以做一些特殊处理。

2023-06-02 17:15:16 241

原创 Java 基本数据类型

Java是一种强类型语言。必须为每一个变量声明一种类型。在Java中,一共有8种基本类型,其中有4种整型:byte、short、int、long,2种浮点类型:float和double,1种字符类型:char,1种用于表示真值的boolean类型。

2023-05-30 15:29:11 38 1

原创 简单了解操作系统

简单讲,操作系统(Operating System, OS )是管理计算机硬件与软件资源的计算机程序。它就是一个复杂点的程序。计算机软件大致可以分为两类,系统软件和应用软件。系统软件负责管理计算机本身的运作,而应用软件则负责完成用户所需要的各种功能。操作系统就是最基本的系统软件,它负责管理计算机的所有资源并提供一个可以在其上编写应用程序的平台。

2023-05-26 17:38:50 142

空空如也

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

TA关注的人

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