![](https://img-blog.csdnimg.cn/direct/3dccda57e12343a097627c93741498ce.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入浅出Java原理及实战
文章平均质量分 93
主要以Java基础以及java深度使用和案例实战进行分析和总结实现。
洛神灬殇
前优酷资深工程师,一个具有高洞察力的理性自律小i人 — INTJ,
著作《深入浅出Java虚拟机—JVM原理与实战》,
10年以上开发经验,参与设计过多个大型互联网项目,定期分享技术干货和项目经验,
希望大家可以多多支持我,点赞关注一下
展开
-
【Java技术专题】「原理专题」让我们一起探索一下Netty(Java)底层的“零拷贝Zero-Copy”技术(上)
Netty中的零拷贝与我们传统理解的零拷贝不太一样。传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝。传统意义的零拷贝在发送数据的时候,传统的实现方式是:这种方式需要四次数据拷贝和四次上下文切换:明显上面的第二步和第三步是没有必要的,通过java的FileChannel.transferTo方法,可以避免上面两次多余的拷贝(当然这需要底层操作系统支持)。上面的两次操作都不需要CPU参与,所以就达到了零拷贝。Netty中也用到了FileChannel.tr原创 2022-12-04 22:39:27 · 842 阅读 · 0 评论 -
【Java难点攻克】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序实战
BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射,其中数据库中有一种索引就叫做位图索引。在具有性能优化的数据结构中,大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美。但是数据量大了,内存就不够了。此外,可以使用类似外排序来解决问题的,由于要走IO所以时间上又不行。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以节省。上面说了BitMap原创 2022-12-04 21:08:54 · 1794 阅读 · 0 评论 -
【Java盲点攻克】「直接内存IO流处理系列」深入分析和研究MappedByteBuffer的实现原理和开发指南
在Java编程语言中,操作文件IO的时候,通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,比起bio的模型处理方式,它大大的加大了支持解析读取文件的数量和空间。MappedByteBuffer使用虚拟内存,因此分配(map)的内存大小不受JVM的-Xmx参数限制,但是也是有大小限制的。原创 2022-12-02 11:50:36 · 5193 阅读 · 1 评论 -
【深入浅出Java并发编程指南】「原理分析篇」从底层分析LockSupport原理机制体系
LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数,而仅仅两个简单的接口,就为上层提供了强大的同步原语,先来解析下两个函数是做什么的。原创 2022-11-15 20:49:49 · 117 阅读 · 1 评论 -
Java编程基本功大揭秘 | 详解深入分析Java的并发编程多线程技术,掌握实战技巧【1】
有些线程由于其重要性,即使在遇到异常后也会选择继续执行,不受中断影响,在大多数情况下,线程会将中断视为一个请求其终止的信号,并据此作出相应处理。这种机制的一个实际应用是,我们可以通过替换处理器,使用日志API将未捕获的异常报告自动发送到日志文件中,从而实现自动化的异常跟踪与记录。检查当前正在执行命令的线程是否被中断,需要注意的是,这一操作是通过调用一个静态方法来实现的。:掌握编程基本功可以提高你的编程效率。当你熟悉基本的语法和常用的编程技巧时,你能够更快地编写代码,减少错误和调试的时间,提高开发效率。原创 2024-06-28 22:40:27 · 733 阅读 · 0 评论 -
Java编程基本功大揭秘 | 详解深入分析Java线程池源码和底层原理,掌握实战技巧【1】
Java中的是线程池的核心实现,提供灵活的配置和管理方法。要深入理解其工作原理和使用,可从关键方法入手,逐步探索其实现逻辑。Executor:这是Java中执行已提交任务的对象的接口,提供了一种将任务与任务执行机制(通常是线程)解耦的方式。:这是一个扩展了Executor接口的接口,它提供了更全面的生命周期管理(例如关闭、终止)和任务提交机制(例如executesubmit等)。通常用于控制和管理线程,它内部封装了一组线程,使得线程的使用更加简便和安全。:实际上,Java标准库中没有名为的接口。原创 2024-06-28 22:37:22 · 803 阅读 · 0 评论 -
探索互联网寻址机制 | 揭秘互联网技术的核心,解析网络寻址
Internet与局域网(LAN)在规模和特性上存在显著区别,Internet不仅跨越国界,更是一个由全球范围内数以亿计(预计将达到数十亿级别)的设备与机器交织而成的庞大互联网络。随着这些接入设备的数量呈指数级增长,一个亟待解决的核心问题日益凸显:如何在如此错综复杂的网络海洋中精准地识别和定位某一特定的设备或机器。网络地址,作为网络通信的基石,其重要性不言而喻。它就像是我们在网络世界中的身份证,是识别与定位每一个网络参与者的关键标识。原创 2024-06-15 19:00:00 · 911 阅读 · 0 评论 -
深入剖析JVM的OOM | 内存溢出如何影响JVM运行及应对策略
开发者在处理OutOfMemoryError(OOM)时,需要进行一系列的分析和优化步骤。首先,深入分析错误日志是关键,这有助于确定导致OOM的具体原因。可能的原因包括内存泄漏、不合理的内存分配策略,以及JVM配置不当等。为了应对这些问题,开发者应该采取一系列措施。通过调整堆内存大小、选择合适的垃圾收集器等手段,可以更好地适应应用程序的内存需求,减少OOM的发生。利用缓存技术可以有效减少内存使用,避免创建过多的大型对象也可以降低OOM的风险。原创 2024-03-05 01:30:00 · 983 阅读 · 0 评论 -
揭秘Java性能调优的层次 | 综合多方向提升应用程序性能与系统高可用的关键(架构层次规划)
在信息技术飞速发展的时代,Java作为一种成熟、稳定且广泛应用的编程语言,已成为构建企业级应用的首选。然而,随着业务需求的日益复杂和数据处理量的不断增大,Java应用程序和系统性能调优变得愈发重要。性能调优不仅仅是一个技术挑战,更是确保系统高可用性和用户体验的关键。要实现这一目标,开发人员需要深入理解Java性能调优的多个层次,并综合运用各种手段和技术,从代码到架构,从虚拟机到操作系统,全面提升应用程序和系统的性能。优化工作涉及多个层面,每个层面都有其独特的优化手段和影响。原创 2024-03-02 22:57:19 · 1131 阅读 · 0 评论 -
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
YAML利用这些原语,并添加了一个简单的类型系统和别叠机制,以形成一种用于序列化任何数据结构的完整语言。虽然大多数编程语言都可以使用YAML来进行数据序列化,但YAML擅长于那些从基本意义上讲是围绕这三个基本原语构建的语言。这些语言包括新一波的敏捷语言,如:Java、Perl、Python、PHP、Ruby和Javascript等。原创 2024-02-04 21:34:27 · 1365 阅读 · 1 评论 -
【深入浅出Java性能调优】「底层技术原理体系」详细分析探索Java服务器性能监控Metrics框架的实现原理分析(Dropwizard度量基础案例指南)
在应用在线上运行时,经常需要处理大量的数据。在业务代码中,我们通常会非常关注某些方法的调用次数和响应时间等信息。这种场景通常需要使用metrics统计来实现。为了实现这样的功能,我们可以使用现有的度量工具库,而不必自己编写度量插件。其中,一个常用的度量工具库是Dropwizard Metrics。Metrics的核心是MetricRegistry类,它是应用程序的所有指标的容器。首先,我们需要定义并创建一个核心注册组件服务,用于管理和注册Metric度量组件。原创 2024-02-03 16:40:48 · 1633 阅读 · 1 评论 -
【揭秘SAML协议 — Java安全认证框架的核心基石】 从初识到精通,带你领略Saml协议的奥秘,告别SSO的迷茫与困惑
SAML(Security Assertion Markup Language)是由OASIS制定的基于XML的开放标准。它用于在身份提供者(IdP)和服务提供者(SP)之间交换身份验证和授权数据,从而支持跨域单点登录,提高身份认证和授权管理的安全性和效率。原创 2024-02-02 19:54:57 · 1586 阅读 · 0 评论 -
作者推荐 | 企业级缓存技术解析,你必须知道的“9“大技术问题与常见误区
若要持续优化站点或应用程序,最迅速且最显著的方式无疑是采用缓存技术。我们通常会将常用或需耗费大量资源与时间生成的数据进行缓存,以确保后续使用的流畅性。尽管缓存的优点颇多,但在实际应用中,其效果往往不尽如人意。假设缓存能将性能提升至100%,但实际效果往往只有80%、70%或更低,甚至可能导致性能严重下降。尤其在分布式缓存的使用中,这种现象尤为明显。相信众多读者已经注意到,本文尚有两个问题尚未剖析。原创 2024-01-31 17:57:55 · 1062 阅读 · 1 评论 -
【Mybatis技术专题】「夯实基本功系列」带你一同学习如何查询功能实现流式检索机制
Cursor是可关闭的,实际上当关闭Cursor时,也一并将数据库连接关闭了;Cursor是可遍历的。除此之外,Cursor还提供了三个方法:isOpen():用于在取数据之前判断Cursor对象是否是打开状态。只有当打开时Cursor才能取数据;isConsumed():用于判断查询结果是否全部取完;getCurrentIndex():返回已经获取了多少条数据。因为Cursor实现了迭代器接口,因此在实际使用当中,从Cursor取数据非常简单:但构建 Cursor 的过程不简单我们举个实际例子。下面是原创 2024-01-29 16:31:42 · 988 阅读 · 2 评论 -
【Netty技术专题】「原理分析系列」Netty强大特性之ByteBuf零拷贝技术原理分析
当然,这次的kernel buffer和第一步的buffer是不同的buffer。Netty中的 Zero-copy 与上面我们所提到到 OS 层面上的 Zero-copy 不太一样, Netty的 Zero-copy 完全是在用户态(Java 层面)的,它的 Zero-copy 的更多的是偏向于 优化数据操作 这样的概念.在进行读操作的时候,kernel buffer起到了预读cache的作用,当写请求的data size比kernel buffer的size小的时候,这能够显著的提升性能。原创 2024-01-28 14:24:50 · 963 阅读 · 0 评论 -
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
本文主要针对于综合层面上进行分析JVM优化方案总结和列举调优参数计划。调优之逃逸分析(栈上分配)调优之线程局部缓存(TLAB)调优之G1回收器线程本地分配缓存,这是一个线程独享的内存分配区域。原创 2024-01-24 13:53:51 · 1094 阅读 · 0 评论 -
【Java深层系列】「技术盲区」让我们一起完全吃透针对于时间和日期相关的API指南
java中的日期处理一直是个问题,没有很好的方式去处理,所以才有第三方框架的位置比如joda。文章主要对java日期处理的详解,用1.8可以不用joda。原创 2024-01-21 12:28:32 · 866 阅读 · 1 评论 -
【优化技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路
kryo,是一个快速序列化/反序列化工具,效率比java高出一个级别,序列化出来的结果,是其自定义的、独有的一种格式,体积更小,一般只用来进行序列化和反序列化,而不用于在多个系统、甚至多种语言间进行数据交换(目前 kryo 也只有 java 实现),目前已经有多家大公司使用,相对比较稳定。Java自带的序列化工具在序列化过程中需要不仅需要将对象的完整的class name记录下来,还需要把该类的定义也都记录下,包括所有其他引用的类,这会是一笔很大的开销,尤其是仅仅序列化单个对象的时候。原创 2024-01-21 12:23:20 · 1238 阅读 · 1 评论 -
【Alibaba工具型技术系列】「EasyExcel技术专题」实战研究一下 EasyExcel 如何从指定文件位置进行读取数据
快速读写:EasyExcel 支持 Excel 2003 和 Excel 2007 格式,并提供高效的读写性能。它使用了 NIO(新输入/输出)技术,使得读写操作更加快速。简单易用:EasyExcel 的 API 设计简洁明了,易于使用。开发者只需编写少量代码,即可完成 Excel 文件的读写操作。它还支持链式编程,使代码更加简洁。支持自定义:EasyExcel 提供了丰富的自定义选项,允许开发者根据需要调整 Excel 文件的格式、样式等。它还支持自定义公式、条件格式等功能,满足各种业务需求。原创 2024-01-20 14:41:09 · 1658 阅读 · 1 评论 -
【Alibaba工具型技术系列】「EasyExcel技术专题」摒除OOM!让你的Excel操作变得更加优雅和安全
EasyExcel是一个基于Java实现的、以节省内存为主要目标的的读写Excel文件的开源项目。经过官方统计,在尽可能节约内存的情况下支持读写百M的Excel文件的读写操作能力!源码库(github地址):https://github.com/alibaba/easyexcel官方文档:https://alibaba-easyexcel.github.io/index.htmlEasyExcel 入口类,用于构建开始各种操作,属于典型的门面+工厂模式// 被读取的文件绝对路径。原创 2024-01-19 10:58:09 · 475 阅读 · 1 评论 -
【Alibaba工具型技术系列】「EasyExcel技术专题」实战技术针对于项目中常用的Excel操作指南
Ø EasyExcel入口类,用于构建开始各种操作Ø ExcelReaderBuilder ExcelWriterBuilder 构建出一个 ReadWorkbook WriteWorkbook,可以理解成一个excel对象,一个excel只要构建一个Ø ExcelReaderSheetBuilder ExcelWriterSheetBuilder 构建出一个 ReadSheet WriteSheet对象,可以理解成excel里面的一页,每一页都要构建一个。原创 2024-01-18 19:22:52 · 1198 阅读 · 1 评论 -
【深入剖析Java】「重塑技术功底」攻破Java技术盲点之剖析注解技术的实现原理和开发指南
Annotation(注解)是在JDK 5.0及更高版本中引入的强大工具。它不仅可用于创建文档,还能跟踪代码中的依赖关系,甚至在编译时执行基本检查。从某些角度来看,annotation与修饰符的使用方式相似,可以应用于包、类、构造方法、方法、成员变量、参数和本地变量的声明中。这些信息被存储在Annotation的“name=value”结构中,使得代码更加清晰、易于维护,并提高了可读性。@Mapping。原创 2024-01-15 20:42:37 · 1063 阅读 · 1 评论 -
【深度挖掘Java底层源码】「底层技术原理体系」带你零基础认识和分析学习相关的异步任务提交机制FutureTask的底层原理
FutureTask是Java中的一个类,它实现了Future接口和Runnable接口,并且被用作线程执行的任务。FutureTask可以在多线程环境下异步执行一个任务并获取其结果。线程池管理:AbstractExecutorService提供了默认的线程池管理逻辑。我们可以通过继承AbstractExecutorService并实现其中的抽象方法来定制自己的线程池。任务执行:通过调用submit()或invokeAll()等方法,可以将任务提交给AbstractExecutorService来执行。原创 2023-08-16 17:56:57 · 110 阅读 · 0 评论 -
论文翻译 | 【深入挖掘Java技术】「底层原理专题」深入分析一下并发编程之父Doug Lea的纽约州立大学的ForkJoin框架的本质和原理
Doug Lea在州立大学奥斯威戈分校(Doug Lea)本文深入探讨了一个Java框架的设计、实现及其性能。该框架遵循并行编程的理念,通过递归方式将问题分解为多个子任务,并利用工作窃取技术进行并行处理。所有子任务完成后,其结果被整合以形成完整的并行程序。在总体设计上,该框架借鉴了Cilk工作窃取框架的核心理念。其核心技术主要聚焦于高效的任务队列构建和管理,以及工作线程的管理。经过实际性能测试,我们发现大多数程序的并行加速效果显著,但仍有优化空间,未来可能需要进一步研究改进方案。原创 2024-01-13 13:24:06 · 1003 阅读 · 0 评论 -
【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(下)
总体希望大家可以把HashMap的技术进行分析和原理逐步吃透,尽可能深入其中,探索奥秘!原创 2024-01-12 14:50:12 · 911 阅读 · 2 评论 -
【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)
HashMap是基于Map接口构建的数据结构,它以键值对的形式存储元素,允许键和值都为null。由于键的唯一性,HashMap中只能有一个键为null。HashMap的特点是元素的无序性和不重复性。注意,HashMap并不是线程安全的。在多线程环境下,如果不进行适当的同步处理,可能会导致数据不一致或其他并发问题。因此,对于需要高并发访问的场景,建议使用线程安全的替代方案,如ConcurrentHashMap。加载因子是一个权衡参数。高的加载因子可以减少空间浪费,但可能会增加查询成本和rehash操作的次数。原创 2024-01-12 10:57:06 · 960 阅读 · 0 评论 -
精彩推荐 |【Java技术专题】「重塑技术功底」攻破Java技术盲点之剖析动态代理的实现原理和开发指南(中)
经历了上一篇文章内容:《精彩推荐 |【Java技术专题】「重塑技术功底」攻破Java技术盲点之剖析动态代理的实现原理和开发指南(上)》,相信您对于Java原生的动态代理技术应该有了一定的认识和了解了,那么我们先来回顾一下对应的技术要点,看看您是否真正的认识了对应的技术原理了?动态代理是一种技术,它可以在运行时动态地创建代理对象,拦截对目标对象的调用并执行一些额外的逻辑。动态代理主要分为两种实现方式:JDK的动态代理和CGLIB的动态代理。原创 2024-01-09 21:34:48 · 1148 阅读 · 0 评论 -
精彩推荐 |【Java技术专题】「重塑技术功底」攻破Java技术盲点之剖析动态代理的实现原理和开发指南(上)
在Java编程中,动态代理的应用非常广泛。它被广泛应用于Spring AOP框架、Hibernate数据查询、测试框架的后端mock、RPC以及Java注解对象获取等领域。首先,实现一个InvocationHandler,方法调用会被转发到该类的invoke()方法。然后在需要使用TargetObject 的时候,通过JDK动态代理获取TargetObject的代理对象。/*** 动态代理-拦截器//目标类 public MyInterceptor(Object target) {} /**原创 2024-01-07 16:38:07 · 1073 阅读 · 2 评论 -
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
sun.misc.Unsafe提供了可以随意查看及修改JVM中运行时的数据结构,尽管这些功能在JAVA开发本身是不适用的。Unsafe是一个用于研究学习HotSpot虚拟机非常棒的工具,因为它不需要调用C++代码,或者需要创建即时分析的工具。然而,使用Unsafe类进行直接内存分配是一种非常底层和不安全的操作,绕过了Java内存管理系统,需要谨慎处理,并且仅在特定的情况下才应使用。原创 2024-01-06 16:33:04 · 1313 阅读 · 2 评论 -
【Java技术专题】「入门到精通系列」深入探索Java技术中常用到的六种加密技术和代码
重点记住现代密码学的柯克霍夫原则:数据安全取决于密钥而不是算法的保密。即使密码系统的细节已经公开,只要密钥保密,系统依然可以保持安全。本文介绍了6种常用的加密技术和相应的代码实现。从现代加密算法的复杂性来看,Base64等编码方式并不足以被称为真正的加密算法,然而对于那些不太熟悉计算机的人来说,Base64已经足够满足一般需求。加密本质Base64算法基于64个基本字符,加密后的string中只包含这64个字符。使用场景:Base64编码常用于处理URL或任何你不希望普通人直接理解的数据。原创 2024-01-01 11:46:52 · 1258 阅读 · 1 评论 -
【深入浅出JVM原理及调优】「搭建理论知识框架」全方位带你深度剖析Java线程转储分析的开发指南
学习JVM需要一定的编程经验和计算机基础知识,适用于从事Java开发、系统架构设计、性能优化、研究学习等领域的专业人士和技术爱好者。在深入研究线程转储分析和问题模式之前,了解基本原理是至关重要的。为了让你更好地理解,找到下面的图表,显示一个HotSpot VM线程转储及其常见的线程池的可视化分解发现:您可以从HotSpot VM线程转储文件中找到一些信息。根据您的问题模式,其中的一些将比其他的更重要,现在,根据我们的示例Hotspot线程转储,在下面找到每个线程转储部分的详细说明。原创 2023-12-31 14:21:17 · 996 阅读 · 1 评论 -
【深入浅出Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Gauge和Histogram篇)
以上介绍的计数器、量规和直方图是监控数据中常用且基础的数据类型。它们提供了一些基本的功能和计算,让我们能够更好地理解和监控应用程序的关键指标和数据。在使用 Java 监控库时,我们可以依据具体需求使用这些数据类型,并利用其提供的方法和功能来收集、记录和分析监控数据。这些数据类型的使用有助于帮助我们了解应用程序的状态、性能和行为,进而进行优化和改进。原创 2023-12-29 09:41:52 · 1166 阅读 · 1 评论 -
【Java技术专题】「核心技术提升」深入解析最流行的Java模拟框架Mockito入门指南(Java单元测试)
还在使用 Mockito 1.x?看看 Mockito 2 有哪些新功能!Mockito 3 没有引入任何破坏性的 API 变动,但现在需要 Java 8 而不是 Mockito 2 的 Java 6。Mockito 4 删除了过时的 API。Mockito 5 将默认 mockmaker 改为 mockito-inline,现在需要 Java 11。一次只支持一个主要版本,而且不会向旧版本回传更改内容。原创 2023-12-29 09:41:27 · 984 阅读 · 1 评论 -
【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(场景化测试篇)
创建一个名为 TestJunit 的 Java 测试类,并在其中添加测试方法 testPrintMessage() 和 testSalutationMessage()。现在运行 Test Runner 类,即不会运行在 Test Case 类中定义的 testPrintMessage() 测试用例。现在运行 Test Runner,它将运行由提供的 Test Case 类中所定义的测试用例。现在运行 TestRunner,它将运行由提供的 Test Case 类中所定义的测试用例。原创 2023-12-26 15:39:46 · 1072 阅读 · 1 评论 -
【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(实战开发篇)
【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(场景化测试篇)原创 2023-12-26 13:48:45 · 894 阅读 · 1 评论 -
【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(核心API篇)
测试套件是将多个测试类组合在一起的一种方式,可以一次性运行多个测试类;测试运行器是用于运行测试的程序,可以选择要运行的测试类或测试套件;测试分类是JUnit 5中的新特性,可以根据不同的标签对测试进行分类和过滤。通过这种方式,我们可以轻松地对测试进行分类,并在运行测试时只运行特定的分类。tearDown() 方法:在测试方法运行后执行,用于清理测试环境和资源,以确保下一个测试可以在干净的环境中运行。它运行了很多的测试案例。JUnit测试框架的四个重要特性:测试工具、测试套件、测试运行器和测试分类。原创 2023-12-25 14:05:24 · 940 阅读 · 0 评论 -
【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(夯实功底篇)
本教程将教你用 Java 编程语言做单元测试时,如何使用 JUnit。本教程是为初学者准备的,来帮助他们了解 JUnit 工具的基本功能。阅读完本教程后,你会发现自己在使用 JUnit 测试框架专业知识方面处在一个中等水平,之后你可以把自己提升到一个更高的水平。如果您已经熟悉Java编程和软件测试过程,那么使用JUnit来处理所有Java项目的开发将会非常顺利。单元测试用例是代码的一部分,可以确保方法按照预期工作。为了快速达到预期结果,需要使用测试框架,JUnit是Java编程语言中最理想的单元测试框架。原创 2023-12-25 14:00:28 · 1071 阅读 · 0 评论 -
【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(9-页面缓存)
考虑这样一种场景,我们有一个页面包含了动态数据,我们对它进行了缓存,如果使用SimpleCachingHeadersPageCachingFilter的话,返回头信息中会包括过期信息,这也就意味着在客户端本地缓存的页面过期之前它不会再向服务端请求对应的页面,而如果此时服务端更新了这个页面的缓存,或者是移除了这个缓存,之前在本地缓存过该页面的客户端只能等到其本地的信息正常超时后才能得到服务端更新的页面。这样当缓存中存在对应的页面时,所有的请求获取到的页面的头信息都会是一样的。这个时候有两种方法。原创 2023-12-23 09:46:12 · 972 阅读 · 0 评论 -
【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(8-Spring整合ehcache)
-diskStore path:用来配置磁盘缓存使用的物理路径name: 缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里)eternal="false" 元素是否永恒,如果是就永不过期(必须设置)maxElementsOnDisk=磁盘缓存中最多可以存放的元素数量,0表示无穷大maxElementsInMemory="1000" 内存缓存中最多可以存放的元素数量(必须设置)原创 2023-12-22 10:05:36 · 481 阅读 · 0 评论 -
【Ehcache技术专题】「入门到精通」带你一起从零基础进行分析和开发Ehcache框架的实战指南(7-可阻塞-并发编程)
获取了对应的锁之后,记得在不再需要该锁后释放该锁。我们可以看到在该put()方法内部调用了一个doAndReleaseWriteLock()方法,从该方法名以及其接收的参数我们可以看出,doAndReleaseWriteLock()方法的作用就是执行接收的参数PutAction的put()方法,然后释放对应key的Write锁,而且PutAction的构造是接收一个Element参数的,这样在PutAction中的put()方法中我们就可以使用该Element对象了。记得需要在合适的时候释放所获取的锁。原创 2023-12-22 10:04:24 · 947 阅读 · 0 评论