- 博客(5)
- 收藏
- 关注
原创 ArrayList 和 LinkedList区别
内存使用方式不同:由于 ArrayList 是基于动态数组实现的,它的内存空间是预先分配好的,因此随着元素的增加,可能会导致内存空间的浪费;而 LinkedList 是基于双向链表实现的,它的内存空间是动态分配的,因此插入或删除元素时只需要改变节点的指针,不会浪费额外的内存空间。增加/删除元素的效率不同:由于 ArrayList 内部是基于数组实现的,当需要在列表中插入或删除元素时,需要进行数据的移动操作,因此效率较低;综上所述,当需要进行大量随机访问元素或遍历列表时,使用 ArrayList 更为合适;
2023-05-08 16:37:55
348
原创 volatile 和 synchronized
当一个变量被声明为 `volatile` 后,任何对该变量的修改都会立即刷新到主内存中,并且任何对该变量的读取操作都会从主内存中获取最新的值。1. 保证可见性:当一个变量被声明为 `volatile` 后,任何对该变量的修改都会立即刷新到主内存中,并且任何对该变量的读取操作都会从主内存中获取最新的值。综上所述,`volatile` 和 `synchronized` 都可以用于解决缓存一致性问题,但是它们的作用和实现机制有所不同,需要根据具体的应用场景选择使用。
2023-05-08 11:10:42
132
1
原创 Mybatis中的$和#
在SQL语句执行时,Mybatis会将$占位符替换为对应的参数值,并将SQL语句发送到数据库执行。使用$占位符可以在某些情况下提高SQL语句的性能,因为在预编译时不需要处理参数占位符。#用于预编译,表示参数占位符,例如:#{username}。在SQL语句执行时,Mybatis会将占位符替换为对应的参数值,并将SQL语句发送到数据库执行。使用#占位符可以有效地防止SQL注入攻击,因为Mybatis会将参数值转义后再替换占位符。使用哪种占位符取决于具体的需求,如果需要防止SQL注入攻击,则应该使用#占位符;
2023-05-08 10:46:44
2753
1
原创 rocketMq被多实例重复消费问题
要防止 RocketMQ 被多实例重复消费,您可以使用 RocketMQ 提供的消息消费者集群特性,来确保每条消息只被一个消费者实例消费一次。在 RocketMQ 中,一个消费者集群由多个消费者实例组成,每个消费者实例在启动时会指定一个唯一的消费者组名(Consumer Group Name),消费者组名相同的消费者实例会共同消费订阅的消息主题(Topic)。3. 当有新的消息到达时,RocketMQ 会将消息均衡地分配到消费者集群中的所有消费者实例中,确保每条消息只被一个消费者实例消费一次。
2023-05-08 10:29:20
3316
1
原创 Java中实现线程的几种方式
2. 实现Runnable接口:创建一个类实现Runnable接口并重写它的run()方法。然后创建一个Thread实例,将该Runnable对象作为参数传递给Thread构造函数,调用start()方法启动线程。1. 继承Thread类:创建一个类,继承Thread类并重写它的run()方法。然后创建一个实例对象,调用start()方法启动线程。这些都是实现线程的常见方式,根据具体的场景和需求选择不同的方式。// 线程执行的代码。// 线程执行的代码。// 线程执行的代码。// 线程执行的代码。
2023-05-08 10:07:30
644
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人