面向单元测试的代码重构

2022-08-06
阅读 9 分钟
2k
单元测试是我们常用的验证代码正确性的工具,但是如果只用来验证正确性的话,那就是真是 “大炮打蚊子”--大材小用,它还可以帮助我们评判代码的抽象程度与设计水平。本文还会提出一个以“可测试性”为目标,不断迭代重构代码的思路,利用这个思路,面对任何复杂的代码,都能逐步推导出重构思路。
封面图

@Transactional 四种不生效的 case 分析

2022-07-17
阅读 6 分钟
1.9k
在我们工作中,经常会用到 @Transactional 声明事务,不正确的使用姿势会导致注解失效,下面就来分析四种最常见的@Transactional事务不生效的 Case:
封面图

死锁问题排查过程-间隙锁的复现以及解决

2022-07-10
阅读 2 分钟
2.2k
我们在开启多线程对数据库进行操作的时候,先批量对数据进行删除,然后再新增,本来想着是考虑到不走更新,性能会提升,但是执行的时候发现报错,执行的sql等待超时,阻塞了进程,dbcp连接池被打满,数据库表访问不可用。针对这个问题,我们进行了深入的挖掘,逐渐解开了问题的真相。
封面图

Junit4升级至Junit5

2021-09-14
阅读 2 分钟
4.3k
junit5的特性和优点可以参考升级到junit5。其中我最看中的点是,Junit4错过了好多Java8的好多特性。Junit5可以很好得利用java8的特性,代码的表达更加清晰和简洁。
封面图

lombok @Builder踩坑系列 - 构造方法和默认值问题

2021-05-16
阅读 4 分钟
9.6k
@Data和@Builder一起用:我们发现没有了默认的构造方法。如果手动添加无参数构造方法或者用@NoArgsConstructor注解都会报错!
封面图

分布式锁注意点及其实现

2021-04-16
阅读 5 分钟
7.3k
分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。

JAVA面试系列 - MySQL InnoDB 索引介绍

2020-03-15
阅读 6 分钟
2.2k
InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上。而我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,所以当我们想...

JAVA面试系列 - Mysql InnoDB 锁机制介绍

2020-03-14
阅读 5 分钟
3.6k
在mysql中,锁机制看起来很复杂,一堆名词:排他锁、共享锁、表锁、间隙锁、意向锁等等,搞的初学者云里雾里。同时锁的相关知识又跟事务隔离级别、索引等概念有千丝万缕的关系,是面试中的常规问题。

Java 8 stream 实战

2019-12-29
阅读 6 分钟
2.1k
平时工作用python的机会比较多,习惯了python函数式编程的简洁和优雅。切换到java后,对于数据处理的『冗长代码』还是有点不习惯的。有幸的是,Java8版本后,引入了Lambda表达式和流的新特性,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读。幸福感爆棚,有没有!

I/O网络模型

2019-12-22
阅读 4 分钟
2.7k
本文从I/O网络模型出发,介绍目前主流的几种网络模型,然后对同步阻塞I/O、同步非阻塞I/O、I/O多路复用的机制和流程做了详细的阐述,最后通过一个生活中的例子加深对这3中网络模型机制的理解。

Spring Boot 多数据源 Redis 配置

2019-12-22
阅读 8 分钟
8.9k
以上配置主要参考 spring 官方配置 RedisAutoConfiguration, LettuceConnectionConfiguration。简单来说:RedisAutoConfiguration注册了2个bean,RedisTemplate和StringRedisTemplate,这两个bean又依赖RedisConnectionFactory的注入,在RedisAutoConfiguration可以看到,RedisConnectionFactory有两个实现,LettuceConn...

redis基础

2019-12-15
阅读 1 分钟
1.8k
Remote Dictionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI 、C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

springboot资源初始化的几种方式

2019-08-25
阅读 4 分钟
14.3k
在实际项目中,我们需要在springboot服务启动后做一些初始化工作,例如线程池初始化、文件资源加载、常驻后台任务启动(比如kafka consumer)等。本文介绍3类初始化资源的方法:

【spring boot 系列】spring security 实践 + 源码分析

2018-06-05
阅读 8 分钟
17.6k
Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和 AOP(面向切面编程)功能,为应用系统提供声明式的安全访问...

【spring boot 系列】spring data jpa 全面解析(实践 + 源码分析)

2018-05-27
阅读 13 分钟
39.8k
JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。值得注意的是,JPA 是在充分吸收了现有 Hibe...

【深入浅出spring】Spring MVC 流程解析 -- InvocableHandlerMethod

2018-04-08
阅读 14 分钟
12k
承接【深入浅出spring】Spring MVC 流程解析 -- HandlerAdapter中RequestMappingHandlerAdapter一节,具体分析此adapter调用handler处理并获取ModelAndView的过程

互联网后端知识点整理

2018-04-05
阅读 3 分钟
4.3k
前言 一些问题的整理,平时实际工作中可能会忽视的一些原理性问题,后续会选取一些有意思的点进行详述。 JAVA多线程、并发相关 多个线程同时读写,读线程的数量远远⼤于写线程,你认为应该如何解决 并发的问题?你会选择加什么样的锁? JAVA的AQS是否了解,它是⼲嘛的? 除了synchronized关键字之外,你是怎么来保障线程...

HTTPS原理解锁

2018-03-28
阅读 6 分钟
3.9k
前言 我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B: 如果我们要实现这个聊天软件,本文只考虑安全性问题,要实现: A发给B的hello消息包,即使被中间人拦截到了,也无法得知消息的内容 如何做到真正的安全? 这个问题,很多人马上就想到了各种加密算法,什么对称加密、非对称...