- 博客(20)
- 收藏
- 关注
原创 java cpu飙升的分析和处理
内存泄漏是指程序在动态分配内存后,由于某种原因(如逻辑错误、编程疏忽等),未能及时释放这些内存,导致这些内存无法被重新利用。随着时间的推移,泄漏的内存会越来越多,最终可能导致内存资源耗尽。
2024-12-20 11:38:10
2137
原创 Spring的事件发布-订阅机制
通过事件发布-订阅机制,可以很容易地在系统中添加新的事件源或监听器,而不需要修改现有的代码。这意味着事件源不需要知道哪些监听器会处理它发布的事件,同样,监听器也不需要知道哪个事件源会发布它感兴趣的事件。综上所述,Spring的事件发布-订阅机制在实际开发中带来了许多好处,包括解耦与模块化、灵活性、异步处理、简化组件间的通信、支持多种事件类型以及易于测试与调试等。这些场景展示了Spring事件发布-订阅机制在实际开发中的应用,通过定义事件、发布事件和监听事件,实现了组件间的松耦合通信和异步处理。
2024-12-17 11:22:54
562
原创 spring事务失效场景解析
在Spring框架中,事务管理主要依赖于注解。然而,在某些情况下,事务可能会失效,导致数据库操作未能按照预期进行回滚或提交。
2024-12-09 14:11:57
721
原创 设计模式案例
观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。以下是一个简单的观察者模式示例,包括一个主题(Subject)接口、一个观察者(Observer)接口以及它们的实现类。的状态发生变化时,它会通知所有注册的观察者,并且观察者会相应地更新自己。最后,我们实现一个具体的观察者类。现在,我们实现一个具体的主题类。方法用于添加观察者,一个。
2024-12-08 10:13:56
136
原创 mysql探究
当在MySQL(或任何关系型数据库管理系统,RDBMS)中执行UPDATE语句时,如果目标数据行当前被其他事务锁定,那么UPDATE操作将不得不等待,直到锁被释放。对于UPDATE操作,通常使用的是行锁(在InnoDB存储引擎中),因为它允许并发地访问表中的不同行,同时确保对同一行的修改是串行的。在高并发环境下,多个事务可能同时尝试访问或修改相同的数据行,导致锁等待队列变长,事务的执行时间增加。例如,如果两个事务都尝试更新同一行,并且没有适当的锁机制,那么最终的数据状态将是不可预测的。
2024-12-03 22:58:05
1193
原创 多线程的探究
在Java的并发编程中,如果你希望在线程池中运行的线程能够访问主线程中的变量,有几种常见的方法可以实现这一点。不过需要注意的是,由于多线程访问共享资源可能会导致数据不一致的问题,因此你需要谨慎处理变量的同步和线程安全。例如,多个线程同时对同一个变量进行读写操作,由于操作的顺序不确定,可能会导致数据不一致的情况发生。活锁类似于死锁,不同之处在于线程不是被阻塞,而是一直重试某个操作,但由于其他线程的操作也在变化,导致该线程一直无法进展。的,并且在对象创建后就不能再改变,因此它是线程安全的。
2024-11-12 16:19:33
948
原创 mqtt的学习
发布者(生产者)的QoS指定发布者发送消息时,会在PUBLISH报文中指定QoS级别。这个QoS级别是发布者希望消息传递达到的最低保证。MQTT代理的处理MQTT代理会接收到发布者发送的消息及其QoS级别。代理会根据订阅者(消费者)在订阅时指定的QoS级别和发布者发送的QoS级别来决定实际传递消息时使用的QoS级别。通常,传递的QoS级别是两者中较低的一个,以确保所有参与者都能按照其能力处理消息。订阅者(消费者)的QoS指定订阅者在订阅主题时,可以指定其希望接收到的消息的QoS级别。
2024-08-29 21:57:02
890
原创 【无标题】
综上所述,虽然Elasticsearch的聚合查询默认不支持text类型的字段,但通过启用fielddata、使用multi-fields或重建索引等方法,可以使text类型的字段支持聚合操作。如果需要频繁地对某个字段进行聚合查询,并且该字段的值不需要进行分词处理,那么将其设置为keyword类型或作为text类型的子字段可能是更好的选择。text类型字段主要用于全文搜索,它们在索引时会被分词处理,因此不保留原始文本值的精确形式,这使得它们不适合用于需要精确值比较的聚合操作。
2024-08-02 11:30:28
435
原创 项目中死锁的预防和处理
通过将大事务拆分成多个简单的小事务,可以简化每个事务的复杂性,减少循环等待条件的发生。然而,这也意味着如果事务长时间不提交或回滚,它可能会持有大量的锁,从而阻塞其他事务对相同数据的访问,甚至可能导致死锁的发生。这是因为数据库事务需要保证数据的一致性和完整性,直到事务被明确提交或回滚之前,所有由该事务所做的更改(包括对数据的锁定)都被视为临时的、未确定的。:根据业务需求和数据库的特性,选择合适的锁级别(如行锁、表锁)和锁策略(如乐观锁、悲观锁),以减少锁的竞争和死锁的风险。
2024-08-02 11:24:42
1669
原创 消息队列的学习和认知
需要注意的是,虽然Kafka在吞吐量方面表现出色,但在某些场景下(如需要高度可靠性的消息传递时),RabbitMQ可能更为合适。因此,在选择消息中间件时,需要根据具体的应用场景和需求进行综合考虑。Kafka相比RabbitMQ吞吐量更大的原因,主要可以归结为Kafka在架构设计、消息处理机制以及系统优化上的独特优势。
2024-07-19 11:42:00
278
原创 自己关于netty的一些学习笔记
连接建立:当客户端的SocketChannel通过open()和connect()方法成功连接到服务端时,服务端的ServerSocketChannel会接收到新的连接请求,并通过accept()方法创建一个新的SocketChannel来专门处理这个连接。服务端的工作主要是接收数据、处理(如果需要),然后可能向客户端响应数据。总之,缓冲区位于客户端和服务器的SocketChannel之间,是数据传输的必要组件,它使得数据在实际网络传输前后有一个暂存和处理的空间,保证了数据的可靠传递和高效处理。
2024-06-24 09:24:25
577
原创 Elasticsearch学习
需要注意的是,上述查询过程是一个简化的描述,实际的查询过程可能因Elasticsearch的版本、配置和查询类型等因素而有所不同。Elasticsearch提供了多种查询性能优化策略,包括索引设计优化、查询DSL优化、性能调优参数调整、缓存和预热、硬件和网络优化以及集群规模和负载均衡等。协调节点接收查询请求后,根据请求的索引和文档ID(如果有的话)确定需要查询哪些分片。协调节点将查询请求广播到涉及索引的每个分片的某个副本(可能是主分片或副分片)上。协调节点合并所有分片返回的结果,形成一个全局的优先队列。
2024-06-03 20:40:32
296
原创 自定义线程池导致的问题
首先去查看了下Spring默认线程池的配置类,该类是一个自动配置类,该线程池Bean属于条件装配,在我们未配置线程池Bean类型的时候才会装配该默认线程池,同时该默认线程池Bean名称配置为applicationTaskExecutor还有一个别名叫做TaskExecutor,而这别名恰巧就是我们的自定义线程名。之前在搭建一个项目的基础框架的时候,有一个同事和我说我们的自定义线程池未生效,默认使用的是Spring默认线程池,于是看了下线程名称确实是用的是Spring默认线程池。
2024-05-21 21:20:07
413
原创 内存泄漏和内存溢出的解决思路
7、利用jmap -dump:live,format=b,file=heap.hprof[pid],下载dump文件在本地进行分析,使用像mat这样的工具进行打开。3、定位到具体的代码—MAT的thread overview,线程简介图,这个里面有方法的调用链信息和堆栈信息4。2、jstat -gc pid [interval]命令査看了java进程的GC状态,查看gc是否频繁。5、使用轻量级的在线分析,用jmap查看存活的对象情况(jmap-histo:ive [pid])。
2024-05-20 13:31:56
276
原创 一次线上redis 内存溢出
查看线上服务器日志,发现报错OOM command not allowedwhen used memory>‘maxmemory’,通过 redis 客户端命令info memory发现used memory>=maxmemory,线上redis 内存用的 8g,云redis,查看配置文件内存溢出策略,发现设置的是禁止写入,找到对应 key的业务,发现问题,这里是一个定时任务,会以每天的日期和一个固定字符串做 key 拉取其他部门的数据然后存redis,而实际用户命中的 redis 数据也只是。
2024-05-17 13:42:35
264
原创 java程序员面对hr的问题的回答
同时,我也计划进一步学习和掌握与Java相关的技术和工具,如Spring Boot、JPA、Hibernate等,以提升自己的技术栈和竞争力。同时,我也希望能够积累更多的项目经验和管理经验,提升自己的团队协作和领导能力。其次,我是一个善于沟通和协作的人。在Java程序员面试中,谈论自己的核心竞争力是一个重要的环节,它有助于向面试官展示你的独特价值和为什么你是这个职位的理想人选。在谈论自己的性格时,要确保你所描述的特点与你的实际行为和工作经验相符,并且这些特点对于Java程序员这个职位是有益的。
2024-05-11 15:38:52
702
1
原创 java 分布式事务
通过采用本地消息表和消息队列相结合的方式,我们可以实现分布式事务可靠消息最终一致性的解决方案。这种方案通过将分布式事务拆分为本地事务和消息传递两部分,并利用消息队列的可靠传递机制来确保消息的可靠传递和最终处理的一致性。同时,通过重试机制和补偿操作来应对可能出现的异常情况,从而提高了系统的可靠性和容错能力。
2024-05-03 08:39:38
199
1
原创 我的面试题
因为用户定义的方法可能包含不可预知的同步代码,这可能导致锁被意外地持有更长时间,增加了死锁的风险。使用并发工具类:Java并发库提供了许多高级并发工具类,如java.util.concurrent包中的Semaphore、CountDownLatch、CyclicBarrier等,它们可以帮助管理并发访问,减少死锁的可能性。减少锁的粒度:尽量使用细粒度的锁,只锁定需要同步的最小代码块或数据。这减少了线程之间的冲突,并提高了系统的并发性。使用无锁数据结构:
2024-04-29 10:28:42
973
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人