- 博客(12)
- 收藏
- 关注
原创 Java缓存-引用计数策略
本文介绍了缓存的基本概念及其实现方法。缓存通过高速设备存储热点数据,解决CPU与内存、内存与硬盘间的速度不匹配问题。为控制成本,缓存空间有限,需采用策略管理数据,如引用计数策略根据数据被访问次数决定其缓存优先级。实现上,缓存包含数据存储区、引用计数表、线程访问控制等组件,使用HashMap提高操作效率,并通过锁机制保证线程安全。文中详细阐述了缓存的结构组成、初始化方法以及数据获取流程,重点处理了多线程并发访问时的同步问题。
2025-07-30 22:01:05
698
原创 动态代理和静态代理
文章摘要:动态代理和静态代理的核心区别在于实现方式和灵活性。静态代理需手动为每个方法编写代理逻辑,而动态代理通过运行时自动生成代理类,实现统一拦截和增强(如日志、权限等)。动态代理的优势在于提供类似AOP的能力,避免重复编码。动态代理之所以在运行时生成,是为了保持灵活性;如需编译时生成可使用APT等技术。两种代理方式各有适用场景,静态代理适合性能敏感场景,动态代理则更灵活可扩展。理解这些差异有助于选择合适的技术方案。
2025-07-30 21:59:33
132
原创 如何从0设计一个页缓存?
摘要:页缓存通过内存与磁盘的协同工作提升数据读写性能。内存中以页对象形式存储数据,磁盘使用文件持久化存储。页缓存管理页对象,提供创建、获取、置换等功能,并配合日志机制保证数据一致性。日志顺序写入解决随机写性能问题,通过校验和截断确保恢复可靠性。页索引结构优化数据项存储查询效率,实现O(LogN)复杂度查找。该设计在性能与可靠性间取得平衡,通过页缓存+日志+索引的组合方案显著提升系统整体效率。(149字)
2025-07-30 21:48:02
418
原创 普通线程与虚拟线程
虚拟线程占用内存小,且可以创建的数量远远大于普通线程,高并发阻塞状态下,由于虚拟线程处于用户态,可以快速切换,而普通线程需要切换到内核态,使CPU在另一个线程上运行,有上下文切换,开销大。在JDK中,普通线程是对操作系统线程的一次包装,而操作系统的线程数量往往是有一定限制的(受限于系统资源)。而虚拟线程是在用户态创建的,通常一个操作系统线程可以对应多个虚拟线程,当虚拟线程陷入阻塞时,可以在不切换上下文的情况下,在操作系统线程对应的多个虚拟线程中切换。1、虚拟线程相比于普通线程的优势是什么?
2025-07-19 10:42:52
176
原创 StringBuilder比字符串拼接更快
对于需要拼接字符串的场景,如果需要拼接的字符串过多,或者拼接操作在一个循环里,我们最好使用StringBuilder来构建和拼接字符串,这样效率会大大提升。对比可以知道,前者使用了字符串拼接,后者使用了StringBuilder。使用StringBuilder要比普通的字符串拼接快很多。
2024-12-02 20:14:48
993
原创 Java AES入门
AES可以对文本文件进行加密解密,便于信息传递时,文本文件的完整性,准确性能够得到保障。在原文和密文中起桥梁作用的一个字符串。一方面,可以通过秘钥加密纯文本,另一方面,可以通过秘钥解密密文。因此,为了保证数据的加密和解密的完成,秘钥至关重要,。
2024-07-11 13:35:06
958
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅