Java程序初始化顺序
Java语言中当实例化对象时,对象所在的类的所有成员变量首先要进行实例化, 只有当所有类成员实例化后,才会调用对象所在类的构造函数创建对象.
Java程序的初始化一般遵循3个原则(优先级依次递减):
1). 静态对象(变量)优先于非静态对象(变量)初始化.
2). 分类优先于子类进行初始化.
3). 按照成员变量的定义顺序进行初始化.即使变量定义散布于方法定义之中, 他们依然在任何方法(包括构造函数)被调用之前先初始化.
业务开发中经常会遇到列项聚合的问题,所以常用的一些思路整理出来.
系统中可能存在不同的业务流程聚合出来的(K,V)结构数据, 然后需要汇总, 可以采用Java8进行流式处理
1 | /** |
RestTemplate是Spring提供的用于访问Rest服务的客户端,同时RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
通过实例展示RestTemplate的使用
1 | @Test |
示例参数:
业务开发中为了保证衔接模块的偶尔不确定性,需要做一些重试保障机制. 为了让我们的重试代码更优雅简单, 这里介绍两个方案:
Guava-Retry
和Spring-Retry
Guava Retrying 是一个灵活方便的重试组件,包含了多种的重试策略,而且扩展起来非常容易.
1 | <dependency> |
示例展示目标接口在返回true时进行逻辑重试, 重试次数为3
次, 重试时间间隔为每间隔2s执行一次重试
.
Apache Zeppelin 是一个让交互式数据分析变得可行的基于网页的notebook。Zeppelin提供了数据可视化的框架. 官网地址: http://zeppelin.apache.org/
1 | [root@icloud-store local]# wget http://mirror.bit.edu.cn/apache/zeppelin/zeppelin-0.7.3/zeppelin-0.7.3-bin-all.tgz |
线下的测试难以模拟真实流量, 尤其难以模拟正常流量混杂着各色异常流量;所以复制线上流量进行测试,能够覆盖很多无法预见的异常流量.
流量复制工具有很多, 例如Gor、tcpreplay、tcpcopy等; 这些工具贴合真实场景,能模拟真实流量, 并支持流量的放大或缩小,更容易测试出程序的瓶颈和潜在问题.
goreplay: https://github.com/buger/goreplay
tcpreplay: https://github.com/appneta/tcpreplay
nginx模块: ngx_http_mirror_module(在Nginx 1.13.4中开始引入)
Ehcache是一个用Java实现的使用简单、高速、线程安全的缓存管理类库, 其提供了用内存、磁盘文件寸纯、以及分布式存储等多种灵活的管理方案. Ehcache从Hibernate发展而来, 快速、简单、低消耗、依赖性小、扩展性强.
Ehcache特点
快速、简单;
多种缓存策略: LRU、LFU和FIFO;
缓存数据有两级:内存和磁盘,因此无需担心容量问题;
缓存数据会在虚拟机重启的过程中写入磁盘;
可以通过 RMI、可插入 API 等方式进行分布式缓存;
具有缓存和缓存管理器的侦听接口: 缓存管理器监听器、缓存事件监听器;
支持多缓存管理器实例,以及一个实例的多个缓存区域;
提供 Hibernate 的缓存实现: Hibernate默认二级缓存是不启动的, 启动二级缓存需要采用 Ehcache来实现;