finalize 方法重写对 GC 的影响分析

关于 Object 的 finalize 方法,在日常开发中可能有超过 99% 的人都没有关注过,因为业务开发很少有重写 finalize 方法的场景;开发者对于 finalize 的认知大多在是“面试八股文”中,而且也不乏见到将 finalize、finally 以及 final 放在一块比较的 case,面试官可能是出于对初学者 java 基本语言知识的考量,但是这真的有意义吗?

阅读更多
记:SOFA Meepup 合肥站-SOFA 微服务体系技术生态于实践

记:SOFA Meepup 合肥站-SOFA 微服务体系技术生态于实践

SOFA Meepup 合肥站从 5 月份开始筹划,至 7.24 在合肥成功举办,历时 2 个多月的时间,从到场人数来看,并没有受到大雨的影响,合肥开发者同学对于技术的热衷没有我们预想的那么佛系,尤其是在微服务领域。在线观看人数也大于预测,这对于所有参与组织活动的同学及给予大力支持的社区来说,都是极大的鼓励和反馈。

点点滴滴,希望以文字的形式记录下来,记录这次活动之旅。

阅读更多

SpringAop 代理模式及 AopContext 问题小记

AOP 称为面向切面编程,其底层原理就是动态代理;JAVA 中比较常见的动态代理有两种,分别是 JDK 动态代理和 CGLIB 动态代理,这点从 Spring Aop 的 AopProxy 的实现就可以得出验证。

1
2
3
AopProxy
--- JdkDynamicAopProxy
--- CglibAopProxy

Spring 作为 Java 应用领域最牛 X 的基础框架产品,在对于一些版本变更导致的兼容性问题的处理上一直被诟病,对于这两种代理方式的选择上,Spring 不同版本存在一定的差异,这也是本文产生的一个原因。

阅读更多

你知道 Junit 是怎么跑的吗?

Junit 是由 Kent Beck 和 Erich Gamma 于 1995 年底着手编写的框架,自此以后,Junit 框架日益普及,现在已经成为单元测试 Java 应用程序的事实上的标准。

在软件开发领域中,从来没有这样的事情:少数几行代码对大量代码起着如此重要的作用 — Martin Fowler

阅读更多

测试 Test Double

TestDouble 简单理解就是测试替身,在多数情况下,我们的系统能够正常运行,不仅仅依托系统本身,还需要依赖一些外部服务,比如其他系统提供的 http、rpc 服务,系统自身以来的像 redis 缓存服务或者 mysql 这类数据库服务。在微服务场景下,业务按照业务领域将一个系统拆分为多个系统,系统之间的交互不仅仅是简单的 A->B,可能是 A ->B -> C ->D,对于编写单元测试的开发者来说,当我需要编写系统A 的测试用例时,不可能去构建完整的调用链路,那么在测试工程中,通常会以 “测试替身” 来解决外部依赖所带来的测试复杂性问题。

阅读更多

聊一聊 maven 生命周期和 maven 插件编写

原文:https://juejin.cn/post/6919490393893502984

最近接到一个业务同学的诉求:用户会在他们大数据平台新建很多模型表,但是再编写业务代码时,需要手动的去创建和模型表对应的 DO 类,那对于有少量表的情况还可以接受,但是对于十几张甚至几十张表的情况,就会很头疼。

我们知道 mybatis 实际上是有提供类似插件工具(mybatis-generator)的,社区也有非常多类似的代码生成工具,但是受限于一些情况,没有办法采用它们,那最简单的就是自己写个插件来完成这种工作量大且重复性高的事情。

阅读更多

启动一个没有 main 函数的 java 程序

原文:https://juejin.cn/post/6918637397857009677

作为一名 JAVA 开发者,不知道大家有没有去想过,JAVA 程序为什么一定要从 main 函数执行开始,其实关于这个话题,我大概从网上搜了下,其实不乏有 main 方法是我们学习Java语言学习的第一个方法,也是每个 java 使用者最熟悉的方法, 每个 Java 应用程序都必须有且仅有一个 main 方法 这种说法。那么真的是这样吗?今天就来聊聊这个事情。

阅读更多

JAVA 进程被 kill 排查

可能会导致 JAVA 进程被 kill 的原因

  • Java 应用程序的问题:发生 OOM 导致进程 Crash
  • JVM 自身故障:JVM 或J DK 自身的 Bug 导致进程 Crash
  • 被操作系统 OOM-Killer
阅读更多