- 博客(183)
- 收藏
- 关注
原创 java.util.Timer详解
摘要:java.util.Timer是JDK提供的定时任务工具类,采用单线程+任务队列机制实现。核心组件包括TaskQueue(基于堆结构的优先队列)和TimerThread(执行线程)。Timer启动时创建线程并进入主循环,当队列为空时阻塞,添加新任务时会唤醒线程。任务调度通过sched()方法实现,将TimerTask加入队列并设置执行时间,线程获取任务后根据时间判断立即执行或等待。这种设计实现了简单的定时任务调度功能,但存在单线程处理的性能局限。
2025-07-04 12:49:44
421
原创 尽量不要使用Arrays.asList()方法
再回到前面的java.util.AbstractList这个抽象类,在这里实现了iterator()方法,返回了一个内部类Itr的对象。看到这里,可能很多人就会怀疑是自己的代码的问题,毕竟java.util.ArrayList是支持removeAll()方法的,不可能报错。所以,调用removeAll()方法实际调用的是java.util.AbstractList的removeAll()方法。在Itr中的remove()方法,直接调用了java.util.AbstractList的remove()方法。
2025-06-30 21:29:29
689
原创 LeetCode09-回文数
因为题目给出的条件是x的值在int范围内,int类型的最大值为2_147_483_647(21亿,一共10位数)。因此,数组的长度由于是未知的,所以直接设置为最大值10,可以满足所有数字的要求。因为题目给的实例中,负数不可能对称(只有一个减号),因此负数可以直接返回false。给你一个整数x,如果x是一个回文整数,返回true;回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。1、可以使用字符串,将x转为字符串,然后对字符串进行遍历;回文数的最大特征是,中位数的两边是对称的。
2025-06-16 07:23:06
268
原创 给easyui的textbox绑定回车事件
一开始想着,直接使用js的on或者jquery的keydown方法直接绑定,但是事件不生效。上面的这个代码没看懂,但是像是easyui通过这种方式管理了组件的keydown事件。最后,直接把源代码里的inputEvents属性重新定义,保留原来的blur事件。项目有一个textbox输入框,需要绑定一个回车搜索事件。通过F12查看到输入框已经被绑定了两个keydown事件。经过一番尝试,终于成功绑定了keydown事件。气人的是,还是绑定失败了!
2025-05-18 22:33:01
432
原创 使用java -jar命令指定VM参数-D运行jar包报错问题
在学习Apache Dubbo的时候,需要接入Sentinel Dashboard,所以在启动的时候要指定dashborad的地址和显示的应用名。我一想,难道-D的位置不对?于是又把指定VM参数的命令放在-jar后面。我猛然想起,是不是好像要用=号指定VM参数啊,脑海中回忆起模糊的画面。主要还是没有在运行jar包的时候指定过VM参数,也算长个记性~无法访问jar文件http://loaclhost:8858。果不其然,jar包运行成功了!于是就有了:找不到或无法加载主类。于是,又有了新的报错!
2025-05-15 09:18:19
402
3
原创 依赖spring-boot-starter-parent导致的maven打包问题
只有继承了spring-boot-starter-parent的POM、并且添加了spring-boot-maven-plugin插件的项目在打包时会使用spring-boot-maven-plugin插件。继承了spring-boot-starter-parent的POM,并且添加了spring-boot-maven-plugin插件。我把继承spring-boot-starter-parent的POM的配置删除掉,万万想不到,就不报错了!好吧,是我自己的问题!
2025-05-15 08:51:42
381
原创 使用button时遇到的问题
表单是通过jquery的serialize()方法获取数据,并使用ajax异步提交,所以没有设置action属性(表单的提交路径)和method属性(表单提交方式)。下面就是子女加点对话框的页面代码,【帮助】按钮在一个<form id = "jiadian_form"></form>的表单中。这意味着,在你不知情的情况下点击此按钮,会导致表单数据提交,如果后端没有进行数据验证,那么数据就被偷偷修改了。在火狐浏览器中,button标签的type属性默认是submit,也就是表单提交按钮。
2025-05-14 08:45:50
284
1
原创 Spring框架详解(IOC容器-上)
BeanDefinition是一个接口,实际使用的是其派生类AbstractBeanDefinition。@Nullable// class@Nullable// scope@Nullable@Nullable// primary@Nullable@Nullable@Nullable@Nullable// 其他属性...// getter、setter方法...Spring IOC容器会根据这些BeanDefinition对象来创建Bean,然后保存起来。
2025-03-14 20:47:22
808
原创 Java线程池详解
java.util.concurrent.ThreadPoolExecutor是java.util.concurrent.ExecutorService的一个派生类,代表我们Java中的线程池。在这期间,当前线程会被挂起。当我们通过线程池的execute()方法执行Runable任务时,创建的线程池默认的初始线程数为0。创建一个空的缓存线程池,根据需要创建新线程,但在有可用线程时会重复使用以前构建的线程。当线程池中的线程数量小于corePoolSize,会创建新的线程来处理被添加的任务;
2025-03-01 10:12:35
978
原创 Spring AOP(教科书式的教程)
点切入代号(Pointcut Designators,PCD)是点切入表达式的一部分。Spring AOP支持在点切入表达式中使用以下代号: 经测试@target和@within的作用是一样的。点切入代号代号说明execution用于匹配方法执行连接点。within限制匹配有特定类型的连接点(可以指定多个类型)。this限制匹配Spring AOP代理对象是指定类型的实例的连接点。target限制匹配目标对象是指定类型的实例的连接点。args限制匹配参数是指定类型的实例的连接点。
2025-02-28 11:43:07
978
原创 Spring Shell——快速构建终端应用,自定义终端命令
使用@ShellComponent+@ShellMethod自定义命令。/***/@ShellMethod("初始化项目环境。")// todoreturn "初始化项目环境完成...";@ShellMethod("打招呼:")public String greet(@ShellOption(defaultValue = "沐雨橙风ιε") String name) {
2024-11-06 16:31:46
772
原创 解决上传图片后图片回显的缓存问题
今天在重构项目的时候,发现上传图片之后,因为后台返回的图片地址和原来的一样,回显的图片没有改变,而是显示浏览器缓存的旧图片。这是图片上传工具类的上传图片的代码,在图片路径后面拼接了当时间戳,这样浏览器就不会从缓存中获取图片了,而是获取最新的图片~从根本上解决这个问题就是在图片路径带上一个时刻变化的参数,比如当前时间的时间戳。
2024-08-23 18:24:09
374
原创 解决javascript跨页面传参的中文“乱码”问题
最后通过encodeURIComponent()和decodeURIComponent()方法解决了这个乱码问题~今天发现了项目的一个搜索的问题,在当前页面搜索商品,然后把输入的商品名传到另外一个页面显示查询结果。搜索的页面代码,直接把参数name通过get传参的方式带参跳转到商品列表页面。结果发现参数貌似乱码了~在商品列表解析地址栏参数。
2024-08-07 10:25:50
552
原创 根据类上的注解信息生成创建表的SQL语句
定义一个实体类,在字段上使用knife4j的接口文档注解@ApiModelProperty注解指定字段名。
2024-06-28 18:22:01
530
原创 easyui的topjui前端框架使用指南
博主今天也是第一次点开easyui的商业搜权页面,之前虽然一直在使用easyui前端框架(easyui是我最喜欢的前端ui框架),但是都是使用的免费版。然后就发现了easyui的开发公司居然基于easyui开发出了一个新的前端框架,于是我迫不及待地分享给了大家~
2024-06-27 19:11:20
1044
原创 Spring Boot整合Spring Session Redis
这篇文章介绍一下在springboot项目中整合Spring Session,将session会话信息保存到Redis中,防止重启应用导致会话丢失。
2024-06-24 23:56:03
572
原创 Apache Shiro使用自定义密码匹配器完成密码验证
我们在使用Apache Shiro的API登录时,会先创建一个令牌对象,而经常用的令牌对象是UsernamePasswordToken,通过用户输入的用户名、密码构建一个UsernamePasswordToken对象,然后调用Subject的login()方法登录。而Apache Shiro默认是通过其实现类SimpleCredentialsMatcher来进行输入的密码和数据库的密码的比较(简单的等值比较)。然后神奇的事发生了,当密码输入错误的时候,居然会登录失败,我们并没有写对比密码的代码。
2024-06-24 02:37:36
662
原创 怎么处理整合了Apache Shiro的应用RPC接口鉴权问题
在服务生产者项目pms中定义一个过滤器PermsFilter,名字见名知义,就是shiro的perms过滤器。重写shiro的perms过滤器(PermissionsAuthorizationFilter)的鉴权方法,先判断请求头是否为指定的值,如果是就跳过鉴权,直接返回true。这样就避免了其他应用访问本应用的接口导致的鉴权失败问题了~/*** 定义PermsFilter过滤器(覆盖shiro的perms过滤器)*/@Slf4j@Overrideif (perms!
2024-06-22 03:17:44
718
原创 jquey+mybatis-plus实现简单分页功能
这篇文章介绍一下怎么通过JQuery结合mybatis-plus的分页插件实现原生HTML页面的分页效果,没有使用任何前端框架,主要是对前端知识的应用。
2024-06-18 15:21:56
391
原创 windows上安装MongoDB,springboot整合MongoDB
springboot有整合了MongoDB的依赖,直接在项目的pom.xml中引入,版本和springboot版本一致。
2024-06-04 22:32:51
1850
2
原创 在windows操作系统上安装MariaDB
最近收到关于数据库在哪里看的评论,所以就一不做二不休,把安装数据库的步骤写一篇文章吧。这篇文章介绍如何在windows上完成MariaDB-10.6.5版本的安装,对应MySQL-8.x版本。
2024-06-03 19:45:59
2817
原创 阿里云ECS服务器怎么设置时区
在自己部署在阿里云服务器上的应用中,控制台打印的日志时间和本地不一致,于是决定修改阿里云服务器的时区为Asia/Shanghai。
2024-05-26 15:24:36
676
原创 子线程无法访问父线程中通过ThreadLocal设置的变量
学习过ThreadLocal的童鞋都知道,在子线程中,是无法访问父线程通过ThreadLocal设置的变量的。InheritableThreadLocal就是为了解决这个不可见问题而生的~
2024-05-26 11:59:38
395
原创 关于在子线程中获取不到HttpServletRequest对象的问题
这篇文章主要分享一下项目里遇到的获取request对象为null的问题,具体是在登录的时候触发的邮箱提醒,获取客户端ip地址,然后通过ip地址定位获取定位信息,从而提示账号在哪里登录。总结:遇到这类问题,就把获取request对象的代码放在主线程中,避免因为ThreadLocal的缺陷导致程序异常。
2024-05-26 03:18:52
750
原创 关于redis设置的密码不生效问题
今天申请了阿里云使用3个月的服务器,于是想在服务器上部署一下自己的项目,但是吸取了上次的教训,再也不敢随便开放redis的端口号了,就算要开放redis的端口,也要设置密码,保证不会被挖矿病毒通过redis入侵服务器,导致服务器资源都被浪费在搬砖。于是,就遇到了在Ubuntu操作系统中,尝试了好几次,设置的密码都不生效的问题。发这篇文章,就是为了帮战和我一样不知所措的童鞋,看完这篇文章,希望你能豁然开朗。
2024-05-22 21:56:25
2732
原创 在springboot项目中自定义404页面
很简单,在我们的springboot的静态资源目录下创建一个error包,然后在/error下面创建一个文件404.html。今天点击菜单的时候不小心点开了一个不存在的页面,然后看到浏览器给的一个默认的404页面。后端的程序员都觉得这页面太丑了,那么怎么能自定义404页面呢?为了偷懒,直接把那个默认页面复制下来了,然后再加一点简单的字~
2024-05-15 23:58:11
409
原创 怎么得到所有大写字母/小写字母组成的字符串
有时候,可能需要获取a~z、A~Z组成的26个字母的字符串,这篇文章介绍一种简单的方法。只需要几句简单到不能再简单的代码!你不会还在傻傻地一个个字母敲吧~
2024-05-14 22:41:28
387
原创 Uncaught InternalError: too much recursion
第一次触发onClose事件是点击确定按钮的时候,saveChange()方法的最后一句代码主动关闭对话框。但是经过我三分钟的思考,发现原来是因为onClose()事件被反复触发了,导致页面卡顿。今天在敲代码的时候偶然间发现项目因为一次操作导致浏览器变得非常卡,而且控制台还报错了。突如起来的报错和页面异常卡顿给我整不会了ovo,点开报错的地方,直接跳转到对应的代码。问题找到了,把绑定的onClose()事件删掉,问题完美解决~看到这个代码,我愣了一下,这怎么会报错呢?
2024-05-14 14:53:26
845
原创 清理缓存简单功能实现
在程序开发中,经常会用到缓存,最常用的后端缓存技术有Redis、MongoDB、Memcache等。而有时候我们希望能够手动清理缓存,点一下按钮就把当前Redis的缓存和前端缓存都清空。功能非常简单,创建一个控制器类CacheController,并提供一个post请求的接口/cache/clean供用户使用。
2024-05-11 16:28:04
985
原创 Java通过百度地图API获取定位-普通IP定位
上面的代码已经是进行了一定的优化,除此之外,可以把AK和SK配置到application.yml中,可以动态地修改。最后重命名一下这个类,改成类似LocationUtils这样的名字。t=N7T8百度地图开放平台 | 百度地图API SDK | 地图开发https://lbsyun.baidu.com/index.php?
2024-05-10 20:36:32
5085
原创 使用MyBatis-Plus构造的SQL语句错误导致查询的数据不正确的问题
为了解决这个问题,又去MyBatis-Plus源代码里看了一下有没有类似的方法可以给and条件里的多个条件加上一对括号。但是查询的时候的条件构造器是这样写的(不知道当时写代码的时候,自己是咋想的oVo)上面的代码导致了查询的数据和实际的数据不一致,因为上面的sql语句对应是这样的。最后发现:MP果然给我们提供了条件嵌套的两个方法。最后,经过了几次踩坑终于把SQL语句构造好了~
2024-04-28 20:38:42
648
原创 Java怎么获取今天最早的时间
今天在实现项目里的一个功能的时候,需要获取今天最早的时间,比如今天是2024-4-15,则今天的开始时间为2024-4-14日24点之后(2024-4-15零点)的那个时间点。很简单,通过LocalDateTime.now()获取当前时间,然后用这个时间分别减去当前时间的。
2024-04-15 22:53:38
651
原创 个人推荐Redis比较好的一种使用规范
随着对个人项目的不断开发、迭代和重构,博主在这个过程中总结出了一套使用redis的较好的规范。主要包含Redis的key命名规范和Redis代码规范。
2024-04-03 10:38:55
1030
转载 搭建nacos集群,并通过nginx实现负载均衡
nacos、eureka、consul、zookeeper等都是常用的微服务注册中心,这篇文章详细介绍一下在Ubuntu操作系统上搭建一个nacos的集群,以及通过nginx的反向代理功能实现nacos的负载均衡。首先,需要一台安装了Ubuntu系统的服务器或者虚拟机。
2024-03-10 21:59:22
6371
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人