logo头像

不忘初心 方得始终

后端

Java String intern方法

引言String类我们经常使用,但是它的intern()方法之前还真的不太了解,通过谷歌百度一番之后终于搞明白了。 intern()方法设计的初衷,就是重用String对象,以节省内存消耗。 …

JVM入门

引言JVM(Java Virtual Machine)Java 虚拟机是整个 Java 平台的基石,是 Java 系统实现硬件无关与操作系统无关的关键部分,是保障用户机器免于恶意代码损害的屏障。Java开发人员不需要了解JVM是如何工作的,但是,了解 JVM 有助于我们更好的开发java 程序。近些天一直在看周志明的《深入理解Java虚拟机》这本书,这本书写的堪称经典,对于JVM的学习非常有帮助。 …

Java生成PDF

引言在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同、证书等。方便用户查看,下载,打印。目前常用的解决方案是,把相关数据信息,生成对应的PDF文件返回给用户。之前有写过一篇博客关于JAVA实现HTML转PDF,不同场景下的业务不同,现在需要使用PDF生成证书,这篇博客主要介绍iText的使用。 本博客项目地址:https://github.com/mx-go/java_pdf_demo …

分布式下ID生成算法 SnowFlake

引言在做系统开发时,系统唯一ID是我们在设计一个系统的时候经常遇到的问题,也常常为这个问题纠结。生成ID的方法有很多,适应不同的场景、需求及性能要求。所以有些比较复杂的系统会有多个ID生成策略。在这里总结一下常用到的ID生成策略。…

系统中功能点的版本控制

引言​ 开发过程中我们会使用版本控制工具,如SVN、Git等。但是我们一样会遇到一种情形:在一套试题系统中,有新建题目、编辑题目、删除题目等功能,且题目可以被多个人修改,每人修改一次即是一个版本。现在的需求就是需要记录每一次修改的详细信息,每次版本之间的差异,甚至还可以版本回滚。 ​ 例如题目编号为20170919170800000061的题目被A创建,依次被B、C、D各修改了一次,此时需要比较B和A间的差异、C和B间的差异、D和C间的差异,到最后审核阶段如果B 的版本比较符合,则需要把试题版本内容回滚到B版本作为最后的版本。…

Spring-AOP两种配置方式

引言AOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。…

JAVA实现HTML转PDF

​ 最近公司里面有一个任务,在线题卡,就是把客户在线编辑的题卡样式保存下来,然后可以导出为PDF格式。于是上网找了一系列的资料,找到了以下两种方法: 使用wkhtmltox 使用iText+Flying Saucer 但是还是强烈推荐用第一种方法。…

JAVA定时调度 Timer和Executors

近期在公司做了一个关于定时执行任务的功能(没有使用框架定时),查了一下资料,有Thread、Timer和Executors三种方法,之前使用的是Timer,但是详细查了资料觉得Executors更优,所以在这里比较一下它们的区别。…