个人简介

Echo Blog


江湖无名 安心练剑
  • Facade 设计最佳实践
    Facade facade 应该怎么设计? 最近暴露给外部使用,由于是历史遗留项目,问题很严重。 facade 引入了很多引用。 纯净性 最好的 facade 应该只有 POJO 和 Interface,不包含任何的三方 jar. 内部系统 如果公司内部有比较成熟的架构,可以统一使用公共的 jar。 保证不能有任何的 jar 冲突,不能有任何的冗余 jar。 版本 ...
    2019-01-30 07:01:09 | Design
  • 单元测试最佳实践
    问题 什么是单元测试?为什么需要? 如何建立好的代码测试? 概览 单元测试 参数化测试 性能测试 断言 MocK 测试覆盖率 MQ 测试, redis 测试,数据库测试, dubbo 测试。 A/B Test SOAP UI Code Review CI 单元测试 概念 开源框架 参数化测试 断言 Mock 测试覆盖率 如何建立好的测试 代码...
    2019-01-23 05:44:33 | Test
  • java 多线程测试工具-GroboUtils
    GroboUtils GroboUtils 旨在扩展Java的测试可能性。 它包含许多子项目,它们通过Java实验测试的不同方面。 GroboUtils中包含的流行工具包括多线程测试,分层单元测试和代码覆盖工具。 此工具集在MIT许可下发布。 快速开始 Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的。 JVM都...
    2019-01-23 05:44:33 | Test
  • Mybatis 拦截器 mybatis interceptor
    分页插件 比如分页插件:pagehelper 可以大幅度提升我们的开发效率。 需求 数据库中敏感字段的对称加密,或者诸如密码之类的非对称加密。 其实都可以不是在一次次的代码查询和更新中手动实现,可以通过自定义注解来实现。 设计思路 利用注解标明需要加密解密的entity类对象以及其中的数据 mybatis拦截Executor.class对象中...
    2019-01-23 00:49:44 | Mybatis
  • JUC-06-LockSupport
    LockSupport 在Java多线程中,当需要阻塞或者唤醒一个线程时,都会使用LockSupport工具类来完成相应的工作。 LockSupport定义了一组公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport也因此成为了构建同步组件的基础工具。 方法 LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread...
    2019-01-20 06:10:12 | Concurrency
  • JUC-05-Unsafe
    Unsafe类详解 Unsafe类就和它的名字一样,是一个比较危险的类,它主要用于执行低级别、不安全的方法。 尽管这个类和所有的方法都是公开的(public),但是这个类的使用仍然受限,你无法在自己的java程序中直接使用该类,因为只有授信的代码才能获得该类的实例。 方法分类 Unsafe API的大部分方法都是native实现,它由105个方法组成,主要包括以下几类: (1)In...
    2019-01-20 06:10:12 | Concurrency
  • JUC-04-Striped64
    数据 striping 在计算机数据存储中,数据条带化是分割逻辑顺序数据(例如文件)的技术,以便连续的段存储在不同的物理存储设备上。 当处理设备比单个存储设备提供数据更快地请求数据时,条带化非常有用。 通过在可以同时访问的多个设备上分布段,增加了总数据吞吐量。 它也是平衡磁盘阵列中I/O负载的有用方法。 条带化用于独立磁盘冗余阵列(RAID)存储中的磁盘驱动器,网络接口控制器,集群文...
    2019-01-20 06:10:12 | Concurrency
  • JUC-03-LongAdder
    LongAdder LongAdder中会维护一个或多个变量,这些变量共同组成一个long型的“和”。当多个线程同时更新(特指“add”)值时,为了减少竞争,可能会动态地增加这组变量的数量。“sum”方法(等效于longValue方法)返回这组变量的“和”值。 当我们的场景是为了统计技术,而不是为了更细粒度的同步控制时,并且是在多线程更新的场景时,LongAdder类比AtomicLon...
    2019-01-20 06:10:12 | Concurrency