常用命令
- 截取指定的 Page
./pdfcpu trim -pages '2-4' in.pdf out.pdf
- 删除 Page
./pdfcpu pages remove -pages 1 in.pdf out.pdf
- 优化压缩PDF
./pdfcpu optimize in.pdf out.pdf
- 合并文件:
./pdfcpu merge out.pdf in1.pdf in2.pdf in3.pdf
使用 ORM 框架的时候,为了调试,常有打印 SQL 的需求,大部分打印出来的 SQL 带?
(PreparedStatement)。这里记录一下在使用 Druid 连接池的时候,使用 Druid 自带的功能 打印 可执行的SQL。
最近遇到一个使用 Apache HttpClient 过程中的问题,具体场景是
@Scheduled(cron = "..")
方式执行定时任务JSR 269(Pluggable Annotation Processing API)提供一套标准API来使用 Annotation Processor 在编译期间而不是运行期间处理Annotation ,相当于编译器的一个插件,是 JDK 6 的一个新特性。
这里说的 把Java类写入到.class文件 不是 Java对象序列化 ObjectOutputStream
,Java对象序列化写入的是类中的数据,并不是类本身。
这里说的是如果在运行过程中把类本身字节码写入到文件中,便于反编译查看类的结构信息。
如果类本身就是从文件中加载,直接读取类文件即可,或者根本就不用读取在写入新的文件,因为类文件本身就存在。但是如果一个类是运行中生成的,如果把这种动态生成的类写入到磁盘呢?
Prometheus 是 CNCF 的一员,内置了一些服务发现机制,但是只对 CNCF 的一些项目 、 国外大厂、云服务商 支持比较完善 ,包括 Kubernetes、Consul、DNS 等。
虽然针对 Prometheus 服务发现的各种 Pull Request 比较多,但是 任性的 Prometheus 并不打算接受,理由是 开发维护能力不足。但是官方提供了基于文件的服务发现,是一个通用的服务发现解决方案。
如果您需要使用当前不支持的服务发现系统(如:Eureka),Prometheus基于文件的服务发现机制可以最好地满足您的使用场景,您可以在JSON文件中定义被发现的目标。
JaCoCo是一个开源的覆盖率工具,可以作为Eclipse、IDEA插件使用,也可以通过Maven插件的方式使用,还可以使用其JavaAgent,实时生成Java程序的覆盖率报告等等。
很多第三方的工具提供了对JaCoCo的集成,如sonar、Jenkins等。
Redis 从 2.6.0 版本开始增加了 lua 脚本的支持,通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 CAS (check-and-set)命令的缺点, 并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。
从 3.2.0 开始支持对 Lua 脚本的 Debug,但是需要注意的是,Debug 的时候会阻塞其它所有指令,导致无法对外提供服务,所以千万不要在生产环境 Debug。除此之外 不建议 Lua 脚本写的太过复杂,如果一个脚本复杂到需要 Debug 才能搞清楚,就建议简化脚本的逻辑了。
最近 使用 fastjson 的时候发现一个问题,偶尔会报 类型转换异常 java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to XXX
,而报错的地方时使用 的 TypeReference
,泛型信息是传给 fastjson 的,并不是 XXX.class 也没有对返回值进行强转。
在网上搜了一些 fastjson 类型转换错误的文章,大部分是都是使用问题造成,最后发现了这篇文章《FastJson 泛型转换踩坑》,才基本确定是 fastjon 对泛型类反序列的一个Bug。
MySQL profile 可用来查询 SQL 执行状态,对定位一条语句的 I/O消耗 和CPU消耗 非常重要,SQL 语句执行所消耗的最大两部分资源就是 IO
和 CPU
。
在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和 对齐填充(Padding)。
而 对象头中则存有 锁状态标示等各种信息,JVM 的锁优化既是基于此。