- 博客(54)
- 收藏
- 关注
原创 Spring状态机(讲解+实战)
本文介绍了使用Spring StateMachine实现订单状态机的实战案例。通过定义订单状态枚举(待支付、待发货等)和事件枚举(支付、发货等),配置状态流转规则,实现了订单状态的有序变更。核心处理类OrderStateMachineHandler负责管理状态机实例和状态转换,确保线程安全并持久化状态到数据库。项目采用三层架构,包含配置类、实体类、服务层和控制器,提供了创建订单和状态变更的REST接口。该方案解耦了业务逻辑与状态流转,适用于电商等需要严格状态管理的场景。
2025-07-18 11:26:58
852
原创 Java中枚举类的用法
Java枚举类是一种实例数量固定的特殊类,包含枚举值、属性和方法。通过@Getter和@RequiredArgsConstructor简化代码后,示例展示了枚举值定义和静态Map初始化过程。其中,静态代码块将枚举值存入以name为键的Map,并提供getByName方法通过name获取对应枚举值。这种实现方式不仅代码简洁,还支持多种匹配方式,只需创建不同的Map即可。
2025-07-06 11:25:47
224
原创 配置文件注入属性值
本文介绍了Spring框架中配置属性值的三种方法:首先通过配置文件定义属性值,其次使用@Value注解进行依赖注入,最后通过测试验证配置的正确性。这三种方式构成了Spring应用配置管理的基本流程,确保属性值能够正确加载和使用。
2025-06-30 11:38:15
229
原创 Java的线程池简单使用
本文展示了如何通过线程池优化多线程任务执行效率。首先创建了一个配置类MyThreadPoolConfiguration,定义了一个包含10个核心线程的ThreadPoolExecutor。然后通过测试类比较了单线程和线程池执行30个耗时任务(每个任务休眠1秒)的性能差异。测试结果显示:单线程执行耗时约30秒,而线程池仅需3秒,提速约10倍(与核心线程数相关)。这证明了线程池在多任务处理中的高效性,通过复用线程资源显著减少了任务执行时间。
2025-06-22 11:48:37
258
原创 IO多路复用
select 和 poll 是传统的 I/O 多路复用机制,但它们存在一些缺点。select 的主要问题是文件描述符数量有限,且每次调用都需要遍历所有描述符,效率较低。poll 解决了文件描述符数量限制的问题,但仍需遍历所有描述符,性能依然不高。epoll 则进一步优化了这些问题,它通过事件驱动的方式,只关注活跃的文件描述符,避免了不必要的遍历,显著提高了性能。此外,epoll 还支持边缘触发和水平触发两种模式,提供了更灵活的事件处理机制。因此,epoll 在处理大量并发连接时表现更为出色。
2025-05-22 19:14:57
177
原创 腾讯一面+二面总结
博主总结了腾讯一面中Java面C++岗的面试经验,主要涉及项目、操作系统、计算机网络和算法等方面。在项目中,博主强调了数据库表设计的重要性,并分享了如何处理订单支付一致性、短信发送幂等性以及限流设计等问题的解决方案。操作系统部分讨论了进程、线程、协程、死锁条件、虚拟内存与物理内存映射等内容。计算机网络方面,博主提到了视频面试中使用的协议、HTTPS四次握手过程及其安全性问题。算法部分则包括括号匹配、最长递增子序列和版本号比较等题目。整体面试内容较为全面,涵盖了技术面试的多个核心领域。
2025-05-20 14:12:29
412
原创 分布式锁原理
锁是确保线程互斥访问共享资源的机制,Redis通过setnx实现加锁,解锁时需确保当前线程持有锁,并通过Lua脚本保证原子性。为避免线程挂起导致锁无法释放,锁需设置过期时间。为防止业务未完成锁超时释放,引入看门狗机制定时续期。锁的重入性允许同一线程多次获取锁,synchronized和ReentrantLock通过计数器实现。分布式锁通过Redis的hsetnx实现,使用线程ID和UUID作为字段,重入次数为值。阻塞线程通过自旋或订阅发布机制获取锁。主从节点不同步可能导致锁信息丢失,红锁机制要求半数以上节点
2025-05-10 18:46:45
428
原创 70. 爬楼梯:动态规划
2.dp[0,1,2,3,5,8,13]---->dp[i]表示爬上第i阶的方法数。3.观察dp:dp[i]=dp[i-1]+dp[i-2];1.观察每个较少的台阶的方法。
2025-04-11 13:50:20
240
原创 数组中的第K个最大元素:堆排序
4.如果发现某个非叶子节点的左右子树的值大于它,就交换,并且将这个非叶子节点作为新的根节点,继续进行最大堆化(递归)2.index是根节点,index*2+1是左子树,index*2+2是右子树。3.遍历所有是非叶子节点,从最后开始也就是n/2-1,进行最大堆化。6.找到第k大的元素,删除k-1次根节点,再调整,就是堆顶元素。5.以上就完成了最大堆排序。1.将数组视为完全二叉树。
2025-04-09 16:34:51
518
原创 739. 每日温度
4.不是更高温,index+=res[index]也就是index的更高温。5.循环3与4,如果res[index]=0说明找不到更高温,置0。2.从后往前遍历,定义一个index为可能是离这一天的更高温下标。3.如果确实是更高闻,res[i]=index-i。1.res的最后一个数肯定是0。
2025-04-09 13:27:40
227
原创 79.单词搜索
1.要找到单词是否连续的出现在图中,所以用index来遍历word,x,y来遍历图。3.检查本结点是否满足要求:满足没有被搜过,且与word的对应字符相等。2.检查图中满足要求的第一位,从第一个字符开始遍历。
2025-04-02 16:01:16
334
原创 39. 组合总和
1.因为不能返回的组合不能重复,因此,应该用index数组下标来便利,防止重复。2.对于某个数来说有两种选法:不选,选(可以多选)
2025-04-02 10:59:15
301
原创 JVM相关面试题
年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到老年代区间。老年代主要保存生命周期长的对象,一般是一些老的对象常量池是 *.class 文件中的,当该类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址多次执行。
2025-04-01 22:16:59
545
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1