0%

一、什么是泛型

Java泛型(generics)是JDK 5.0 引入的一个新特性,可以在编译时进行类型安全检查。泛型本质是将类型参数化,在输入不同类型的情况下复用代码,可以消除一部分强制类型转换。最常见的使用场景就是容器类,如集合类(java.util.Collection)、java.util.Optional等。

阅读全文 »

一、ZGC 介绍

ZGC(Z Garbage Collector)是一种可扩展的低延迟垃圾收集器,旨在满足以下目标:

  • 亚毫秒最大停顿时间[1](Sub-millisecond max pause times);
  • 停顿时间不会随着堆的大小,或者活跃对象的大小而增加(Pause times do not increase with the heap, live-set or root-set size);
  • 支持8MB到16TB的堆(Handle heaps ranging from a 8MB to 16TB in size)。
阅读全文 »

一、背景

随着服务越来越多,以及项目越来越复杂,在上线发布高峰时段镜像上传、容器创建时间很长。Jar包越来越大,编译打包、上传下载镜像会占用大量带宽,造成拥堵。因此改善这种情况,一方面可以通过合理的依赖配置减小jar包体积,另一方面还可以从镜像入手。

阅读全文 »

设计模式是什么?

“它是一套理论,由软件界的先辈们(The Gang of Four:包括Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)总结出的一套可以反复使用的经验,它可以提高代码的可重用性,增强系统的可维护性,以及解决一系列的复杂问题。”——摘自《设计模式之禅》

阅读全文 »

很多同学一定都经历过为了找一个好用的网页截图软件而各种搜索的情况,那一定不知道强大的Chrome自身就可以直接截取网页图片。下面就是详细步骤:

阅读全文 »

公司项目上需要生成一张入学通知图片给用户,目前采用的是通过后端Java使用Graphics2D库将动态数据填充到背景图上再写回浏览器的方式。由于设计图采用了几种比较特殊的字体,字体文件考虑到部署可迁移,没有采用安装到系统或者jre的方式,而是放在项目包下,最开始跟页面文件一起放在WEB-INF目录下,在Controller中使用request.getSession().getServletContext().getRealPath("WEB-INF/ttf/iYuanTi.ttf")来获取字体文件的真实路径,通过Font.createFont(fontFormat, fontStream)加载字体,但是这样做会造成服务器硬盘爆满,具体原因另做分析。

由于上面方法的问题,考虑将字体文件放在resource文件夹下(打包以后在classes下),在应用初始化的时候进行加载,只需加载一次,本地调试没问题,打包,上测试机,访问,没出来,看日志,加载字体的时候抛出了java.awt.FontFormatException: bad table, tag=1196445523异常,查文件、部署包都没问题,发现字体文件的大小不太对,对比文件Hash,确实部署包和源文件不是同一个文件了。

阅读全文 »

之前我所接触到的iReport制作报表的方式是,将查询数据的SQL卸载报表jrxml文件里,在Java项目里将数据库连接,以及报表需要的一些参数一起传给报表,再由jasperreports将报表导出为所需要的格式。这种方式一般用来导出一些格式相对单一的报表,如表格、单个或多个图形等。

阅读全文 »

公司项目采用Docker技术进行了分布式部署,每个服务有多个实例进行负载均衡,出现问题查日志变得异常痛苦,这时发现了比较常用的一种解决方案——ELK(ElasticSearch + Logstash + Kibana)。

这里是Logstash配置文件中的配置项说明,翻译自官方文档——logstash-settings-file章节,如有不当之处,希望大家可以帮忙指出。

阅读全文 »