一、什么是泛型
Java泛型(generics)是JDK 5.0 引入的一个新特性,可以在编译时进行类型安全检查。泛型本质是将类型参数化,在输入不同类型的情况下复用代码,可以消除一部分强制类型转换。最常见的使用场景就是容器类,如集合类(java.util.Collection
)、java.util.Optional
等。
Java泛型(generics)是JDK 5.0 引入的一个新特性,可以在编译时进行类型安全检查。泛型本质是将类型参数化,在输入不同类型的情况下复用代码,可以消除一部分强制类型转换。最常见的使用场景就是容器类,如集合类(java.util.Collection
)、java.util.Optional
等。
随着服务越来越多,以及项目越来越复杂,在上线发布高峰时段镜像上传、容器创建时间很长。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章节,如有不当之处,希望大家可以帮忙指出。
最近突然发现用Spring和MyBatis搭建的一个项目,Service报错了,数据仍然可以写入数据库,项目使用的是@Transactional
注解声明式事务。配置方式如下:
iTerm2是在Mac下非常好用的一个终端工具,powerline是终端下的一款状态栏工具。