- 博客(149)
- 收藏
- 关注
原创 Java 中如何终止一个正在运行的线程
Java 线程中断的三种实现方式:volatile 标志位:通过设置标志位,使线程正常退出,能够确保线程根据业务逻辑安全停止。Thread.stop() 方法:已废弃,不推荐使用,因为会导致线程安全问题和资源泄漏。Thread.interrupt() 方法:推荐使用,通过设置中断标志来提示线程停止,能够优雅的停止线程。
2025-03-31 10:23:56
953
原创 JVM 触发类加载的条件有哪些?
Java 虚拟机(JVM)中,类的加载并不是随意发生的,而是由特定的触发条件决定的。什么时候加载?什么时候初始化?
2025-01-10 10:23:48
1149
原创 CompeletableFuture常用方法的使用介绍
CompletableFuture是 Java 8 引入用于支持异步编程和非阻塞操作的类。主要新增的功能有:runAsync(): 异步执行,无返回值supplyAsync(): 异步执行,有返回值thenAccept(): 当task正常完成后,回调调用exceptionally(): 当task出现异常是,回调调用anyOf(): 当所有的task中,只要有一个task完成,则主线程继续往下走,可以使用.anyOf()方法allOf(): 所有的task均完成后,则主线程
2024-10-31 16:36:21
741
原创 maven-compiler-plugin的使用和配置
当我们一个模块的代码具有多个不同jdk版本的时候,如果我们想统一编译,这时我们可以使用maven-compiler-plugin插件。我们可以将这些jdk的版本号,还有类型都定义在一个toolchains.xml文件里面。而在pom.xml文件中只需要引用toolchains.xml中定义的别名就可以了。
2024-09-07 11:54:41
837
原创 zookeeper开启SASL权限认证
ZooKeeper 不使用任何形式的身份验证并允许匿名连接。但是,它支持 Java 身份验证与授权服务(JAAS),可用于使用简单身份验证和安全层(SASL)设置身份验证
2024-07-25 15:39:35
4726
3
原创 SpringMVC处理器映射器HandlerMapping详解
昨天在进行spring的安全升级时,遇到一个奇葩问题:原始版本为4.1.9,升级至5.3.34,由于是几年前的项目,请求路径还是带有.action的老式写法(如login.action),而有的不带(如:index),升级完后,就发现了问题,login.action能访问到,请求index时,日志爆了 no mapping for GET。我们来看看是怎么回事。
2024-06-28 11:50:04
1339
原创 函数式接口不会用?看这篇文章就够了
如果在Java的接口中,有且只有一个抽象方法,那么这种接口就是函数式接口。函数式接口是使用Lambda表达式的前提条件。
2024-06-07 17:28:34
1408
原创 正则表达式的常见语法
在Java中使用正则表达式进行字符串匹配可以说是一个很重要的技能,尤其对于需要进行文本处理或者字符替换的程序来说,更是必不可少的技术手段
2024-04-23 20:22:02
568
原创 Shell脚本开发(五)——流程控制
1、if else2、for3、while4、无限循环5、until6、case ... esac7、跳出循环break 命令continue
2024-03-29 21:36:54
1082
原创 内存飙高问题如何排查?
内存飙高如果发生在java进程上,一般情况是因为创建了大量对象导致,持续飙高说明垃圾回收跟不上对象创建的速度,或者内存泄漏导致对象无法被回收!排查中涉及到如下命令:jstat -gc pid 1000 查看gc情况,时间等信息,每隔一秒打印一次jmap -histo pid | head -20 查看堆内存占用空间最大的钱20个对象类型jmap -dump:live,format=b,file=/home/chenjian/myheapdump.hprof pid 导出堆内存快照。
2024-02-29 20:00:19
2858
1
原创 zookeeper动态扩缩容(无需重启)
zookeeper动态扩/缩容的reconfig命令旨在不需要重启zookeeper中任何一个节点的情况下,对整个zookeeper集群进行动态扩/缩容。
2024-02-20 15:47:40
2004
原创 通过手写简易版RPC理解RPC原理
所谓的RPC其实是为了不同主机的两个进程间通信而产生的,通常不同的主机之间的进程通信,程序编写需要考虑到网络通信的功能,这样程序的编写将会变得复杂。RPC就来解决这一问题的,一台主机上的进程对另外一台主机的进程发起请求时,内核会将请求转交给RPC client,RPC client经过报文的封装转交给目标主机的RPC server,RPC server就将报文进行解析,还原成正常的请求,转交给目标主机上的目标进程。在我们看来在就像是在同一台主机上的两个进程通信一样,完全没有意识到是在不同的主机上。
2024-01-31 16:51:53
885
1
原创 yum命令详解和使用
Yum(全称为 Yellow dog Updater, Modified),是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
2023-12-05 15:42:55
4771
原创 java RMI 技术介绍和实践
RMI 基本思想是远程方法调用,即客户端调用某个方法,其本质是将这个方法的调用请求,发送给服务器,由服务器代为执行,且,服务器将执行结果回送客户端。对于客户端而言,RMI 只要求客户端针对方法本身,产生一种错觉:方法是在本地被调用的;对于服务器而言,RMI 相当于要处理一个来自客户端的“请求”;这个请求针对某个方法。
2023-11-08 11:16:38
1974
原创 23种设计模式(10)——门面模式
其实,在日常编码工作中,我们都在有意无意地大量使用门面模式。但凡只要高层模块需要调度多个子系统(2个以上类对象),我们都会自觉地创建一个新类封装这些子系统,提供精简的接口,让高层模块可以更加容易地间接调用这些子系统的功能。
2023-10-27 11:07:34
398
原创 服务器执行命令或脚本的两种方式
Java的Runtime类和ProcessBuilder类都允许Java程序启动一个新的进程并执行特定的命令,通过标准输入输出流进行数据交换。Runtime类适用于简单的命令执行,ProcessBuilder类则更加灵活,适用于复杂的命令和参数传递。
2023-10-27 10:19:31
493
原创 TransactionSynchronizationManager的使用场景以及原理分析
TransactionSynchronizationManager.registerSynchronization()的原理就是通过threadLocal获取到当前线程所持有的的dataResource,注册一个乃至多个事务同步方法,在事务提交前后分别执行对应的事务同步方法。
2023-09-25 17:17:53
6545
1
原创 redis集群的维护(redis-cli --cluster 命令用法)
1、 --cluster create 创建集群2、--cluster check检查集群3、--cluster info 查看集群4、--cluster fix 修复集群5、--cluster rehard 迁移槽位6、 --cluster rebalance 平衡集群7、 --clusteradd-node 集群扩容8、--cluster del-node 集群缩容9、 --cluster call 在集群中执行命令10、--cluste
2023-09-12 10:51:33
9520
原创 面试官:前面我们聊了主从和哨兵,那今天来聊一聊集群吧
秃顶面试官:简单介绍下什么是Redis Cluster呢?秃顶面试官:那集群的缺点有哪些呢?秃顶面试官:说说如何搭建集群呢?秃顶面试官:集群内部是如何通信的呢?秃顶面试官:线上如何对集群进行扩容和缩容呢?秃顶面试官:不错不错,再来说下集群的故障转移吧秃顶面试官:说的非常详细,来集群的完整性如何保证呢?秃顶面试官:那集群中的数据倾斜有了解吗?
2023-08-10 20:41:37
508
原创 Jedis哨兵模式如何实现主从的读写分离
redis的主从和哨兵模式,在官方的功能模式下,从实例只有数据备份和作为主实例的备机作用,并不具备我们想象中的主实例负责写,从实例负责读的职责分工。Jedis哨兵模式如何实现主从的读写分离?
2023-07-13 14:49:40
614
原创 一文搞懂redis的用户权限管理(ACL)功能
Redis在6.0之前基本没有用户权限的概念,只有一个连接认证密码,一旦通过了认证就可以随意操作任意的redis数据,无法对用户权限进行精确控制,很容易因为用户权限过大引发误操作。如果想禁用某些不安全的命令,比如flushdb,flushall,只能通过rename-command的方式来避免。redis6.0发布了权限管理功能ACL(access control list 访问控制列表),可以对不同的用户设置不同的权限,限制用户可使用的命令,可访问的key等。
2023-06-26 17:52:16
10943
1
原创 CopyOnWriteArrayList原理分析
CopyOnWriteArrayList 类的所有可变操作(add,set 等等)都是通过创建底层数组的新副本来实现的。当 List 需要被修改的时候,我并不修改原有内容,而是对原有数据进行一次复制,将修改的内容写入副本。写完之后,再将修改完的副本替换原来的数据,这样就可以保证写操作不会影响读操作了。
2023-06-14 15:04:23
519
原创 rm 命令的使用以及指定不删除某些文件
rm是我们在Linux下删除文件经常用到的命令,但是有时候我们目录下有很多个文件想要删除,偏偏却要保留其中1个或几个文件,那怎么办呢?
2023-06-14 10:06:54
3485
原创 泛型的介绍以及原理
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
2023-05-30 14:13:16
1975
原创 git rebase问题:First, rewinding head to replay your work on top of it
First, rewinding head to replay your work on top of it..
2023-05-17 10:07:27
3634
原创 Git 如何修改历史的 Commit message
Git 如何修改历史的 Commit message1、修改最近一条Commit message2、修改过去若干条 Commit message
2023-04-25 14:11:31
5669
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人