前言 Spring Boot Admin 是一个优秀的 Spring Boot 应用监控,可以查看应用的各项性能指标,修改日志级别(生产环境利器,不用动不动就上 Arthas),dump 线程等功能。如果是微服务可以使用 Eureka 来做服务的注册与发现,单体应用的话直接往 Spring Boot Admin 的 Server 端注册就行。 这里…
单一职责原则 定义 单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。一个类或者模块只负责完成一个职责(或者功能)。 如何理解单一职责原则(SRP)? 一个类只负责完成一个职责或者功能。不要设计大而全的类,要设计粒度小、功能单一的 类。单一职责原则是为了实现代码高内聚、低耦合,提高代码的复用性、可…
实战代理模式,模拟Mybatis 在使用mybatis操作数据库时,我们只需要定义一个接口,然后在xml里编写对应的sql,就能查询数据。其原理是Mybatis通过@mypperscan指定扫描的mapper接口路径,对mapper接口进行动态代理,生成的代理类通过解析xml得到对应sql,最终开发人员只需要调用接口就能执行sql了。 今天我们来实…
Proxy Design Pattern 作用 对原有功能进行增强,注意这里的增强是增加额外的功能,和原有功能无关。 使用场景 业务系统中增加非功能性需求,比如:监控、统计、鉴权、限流、事务、幂等、日志等。 还可以实现接口缓存,通过请求参数决定使用缓存还是实时查询。 实现方式 静态代理 代理接口 代理类和被代理类实现同样的接口,通过组合的形式,进行…
优点 网速快 相比百度云,上传下载速度快,上传网速一般在10M到50M左右,下载50-100M,看个人网络 BUT:阿里云盘网速也快 功耗 每月耗电:30(天)*18(每天运行时间8点-24点)*5(瓦)/1000=2.4(度) 电费:2.4*0.7(电费单价)=1.68(元) 很不错,比其他NAS产品好多了 无风扇 发热量不大,散热不成问题 噪音…
Double Brace Initialization should not be used 前言 最近在修改sonar问题时,发现有人使用双花括号初始化集合,提示可能发生内存泄漏。这种初始化方式倒是见过,只知道是使用了匿名内部类,但没有意识到这个问题。 实测 A 提供两种Map的初始化方法,为了观察是否被回收,重写了finalize方法。 pub…
HashMap源码解读:扩容 引言 HashMap的扩容是个很重要的操作,jdk1.7往前这里会发生死链问题,都是值得研究的。我最开始以为HashMap线程不安全的原因是因为扩容,没有注意到jdk版本的影响,就去看1.8的扩容为啥会发生死链,但因此也发现了这个方法里的巧妙设计。 分析 以下这段代码是jdk1.8HashMap扩容时,遍历原HashM…
责任链模式 定义 在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。 在 GoF 的定义中,一旦某个处理器能处理这个请求,就不会继续将请求传递给后续的处理器了。当然…
前言 我们写的代码性能如何?用StopWatch来监控方法得出方法执行时间就是准确的? 使用JMH就可以回答第一个问题。JMH是方法级别的性能测试工具,并且是openjdk官方开发的(值得信赖),它有很多针对性能测试的功能,例如预热,该功能就可以解决StopWatch测试不准确的问题。 StopWatch测试不准确的原因如下: Java8引入的la…
思路 刚开始我以为这题的考点是如何快速读取文件(因为这是公司多线程学习分享后布置的作业),我就用多线程来解题。后来出题人跟我说:200m测试数据时我的程序OOM了,我才醒悟这题的考点不是快速读取文件,而是大文件排序。 这题挺有意思的,解题运用了多路归并,有个巧妙的地方估计只有实操才知道——复用流。 题目 查找第K小/大数据 每个法官都有不同的办案能…