基础
文章平均质量分 80
墨、鱼
我总是一个人在练习
展开
-
SpringBoot中Jackson序列化处理自定义注解
上篇文章 Jackson序列化带有注解的字段的原理浅析 里已经简单介绍了Jackson如何序列化带有注解的字段。本文尝试自己定义一个注解,让Jackson序列化时对标注了该注解的字段进行脱敏。原创 2023-03-07 21:09:45 · 4743 阅读 · 8 评论 -
Jackson序列化带有注解的字段的原理浅析
序列化器指的是包含对某种类型的数据的序列化方式的类。如自带的有:对String类型序列化的StringSerializer,对Date类型序列化的DateSerializer,对Bean序列化的BeanSerializer。经过上面的分析,知道了Jackson如何序列化标注的字段。那能否自己定义一个注解,让Jackson通过自定义的序列化器来处理该注解标注的字段🤔️?且等下篇文章再来探究~原创 2023-02-05 16:27:33 · 1323 阅读 · 2 评论 -
Go语言 和 Java语言对比理解系列三:函数作为参数和返回值
对于将函数作为参数和返回值,Go和Java都有自己的语言特性实现,但是在理解上是有异曲同工的,这样对比下来更能加深印象~原创 2022-12-30 09:47:52 · 309 阅读 · 0 评论 -
Go语言 和 Java语言对比理解系列一:函数参数传递
Go里面struct和数组属于值类型;Java里的对象和数组属于引用类型。Go对struct和数组的函数传递、赋值操作,是复制一块新的内存,与原有的数据相互独立,互不影响。原创 2022-09-10 17:12:27 · 848 阅读 · 0 评论 -
深入理解负载均衡
文章目录负载均衡分类四层负载均衡真的是在四层吗数据链路层负载均衡网络层负载均衡IP隧道传输(IP Tunnel)网络地址转换(NAT)负载均衡到底是转发还是代理总结负载均衡分类工作学习中我们接触过形形色色的负载均衡产品,但他们从形式上说都可以分为两种:四层负载均衡和七层负载均衡。这里所说的四层、七层指的是经典的OSI七层网络模型的传输层和应用层。这里我们再来回顾一下OSI模型:四层负载均衡的优势是性能高,七层负载均衡的优势是功能强。然而四层/七层负载均衡这种我们已经习以为常的说法,真的就是字原创 2022-02-04 13:52:56 · 2151 阅读 · 0 评论 -
图解MESI(缓存一致性协议)
MESI(缓存一致性协议)原创 2021-12-30 12:17:10 · 5548 阅读 · 4 评论 -
为什么Volatile能保证双重检查锁的线程安全
文章目录1、双重检查锁的由来1.1、非线程安全的懒汉式单例1.2、线程安全的懒汉式单例2、问题的根源3、解决方案3.1、基于volatile的解决方案3.2、基于类初始化的解决方案4、总结单例模式分为懒汉式和饿汉式。懒汉式其实就是为了延迟初始化来降低初始化类和创建对象的开销。1、双重检查锁的由来1.1、非线程安全的懒汉式单例一种懒汉式的单例写法如下:public class UnsafeLazyInitialization { private static Instance inst原创 2021-11-08 20:42:22 · 651 阅读 · 1 评论 -
使用三个线程,按顺序打印X,Y,Z,连续打印10次
/** * 题目描述:使用三个线程,按顺序打印X,Y,Z,连续打印10次。 * @author xujian * 2021-06-25 13:38 **/public class PrintXYZ { //定义CountDownLatch,起到线程通知的作用 private static CountDownLatch cd1 = new CountDownLatch(1); private static CountDownLatch cd2 = new CountDownL原创 2021-06-25 15:54:26 · 288 阅读 · 0 评论 -
实现一个增强版的JDK动态代理V2.0
文章目录分析之前实现的不足1)前、后增强是通过写死执行增强的位置来实现2)没有实现环绕增强优化改进之前有个文章实现了一个简单的增强版JDK动态代理:实现一个增强版的JDK动态代理。但是当时只是实现了方法前增强和方法返回后增强的效果,至少还有如下两个不足:1)前、后增强是通过写死执行增强的位置来实现;2)没有实现环绕增强;分析之前实现的不足1)前、后增强是通过写死执行增强的位置来实现先来回顾一下之前实现的代码public Object proceed(JoinPointInfo joinP原创 2021-06-18 18:27:59 · 287 阅读 · 0 评论 -
探索Spring循环依赖的细节
文章目录背景回顾细节探索为什么一样什么情况下会不一样lagouBean.getItBean()问题之前在Spring学习笔记,挺全的!这个博客中提到了Spring对循环依赖的解决原理,这篇博客对一些细节做个补充。背景回顾@Servicepublic class LagouBean { @Autowired private ItBean itBean; public ServiceB getServiceB() { return serviceB; }}原创 2021-06-08 20:26:27 · 321 阅读 · 5 评论 -
实现一个增强版的JDK动态代理V1.0
文章目录背景现状目标方案定义拦截器定义拦截器链定义InvocationHandler定义增强的代理生成类测试总结背景看了Spring AOP JDK动态代理部分的源码,想尝试借鉴Spring的思想,实现一个“增强版”的JDK动态代理。本博文以及相关代码仅作为练习使用,欢迎指正和交流探讨。现状UserService userService = new UserServiceImpl();MyInvocationHandler myInvocationHandler = new MyInvoca原创 2021-05-27 18:17:06 · 390 阅读 · 1 评论 -
Mybatis学习笔记,挺全的!
文章目录第一部分:自定义持久层框架1.1 分析手动编写JDBC操作面临的问题1.2 针对性的给出问题的解决思路1.3 尝试编写自定义框架解决面临的问题第二部分:Mybatis相关概念2.1 简介2.2 历史2.3 优势第三部分:Mybatis基本应用3.1 入门3.2 常用开发方式3.2.1 传统开发方式3.2.2 代理开发方式第四部分:Mybatis配置文件深入4.1 核心配置文件4.1.1 层级关系4.1.2 常用配置4.2 映射配置文件4.2.1 动态sql之if标签4.2.2 动态sql之forea原创 2021-05-19 15:12:42 · 302 阅读 · 3 评论 -
这么强大的Mybatis插件机制原来就是这?
文章目录Mybatis插件机制介绍自定义一个Mybatis插件插件执行原理分析插件定义插件初始化插件如何生效总结Mybatis开发中经常会用到pagehelper分页插件,除此之外还有慢sql上报等各种各样的插件,那么Mybatis是如何来实现如此强大的插件机制呢?一起来看看吧。Mybatis插件机制介绍MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushSta原创 2021-05-18 15:33:51 · 496 阅读 · 8 评论 -
Swagger API Spec + Swagger Codegen + YAPI管理接口文档
文章目录1、项目接入Swagger2、项目引入maven插件3、编写Swagger API Spec(接口定义文档)4、代码生成生成方式生成的目录结构5、项目中加入Swagger配置文件背景:使用SpringCloud进行微服务开发,且后端服务调用大都使用Feign Client进行调用。1、项目接入Swagger<dependency> <groupId>io.springfox</groupId> <a原创 2021-04-25 11:18:36 · 1059 阅读 · 1 评论 -
Java Attach API使用笔记
文章目录需求和目的实现过程创建Attach程序创建Agent程序启动程序达到的效果总结手敲代码来体验IDEA+ASM+Java Attach API实现方法增强的一个示例过程记录。需求和目的/** * 模拟业务方法 * @author xujian * 2021-03-12 10:52 **/public class MyBizMain { public String foo() { return "------我是MyBizMain-----"; }原创 2021-03-15 14:21:14 · 931 阅读 · 5 评论 -
Gson序列化LinkedHashMap.Entry失败的探索
文章目录问题重现原因探究验证结论使用Gson序列化LinkedHashMap本身为什么没问题其他拓展总结问题重现示例代码如下:Map<String, Object> map = new LinkedHashMap<>(); map.put("name", "xujian"); map.put("age", 25); Gson gson = new Gson(); for (Map.Entry<String,原创 2021-02-05 15:44:45 · 590 阅读 · 5 评论 -
我的2020回忆录
掸去衣服上的尘土,昂首阔步迎接明天。(文章的字数有彩蛋哦~)原创 2021-01-02 12:47:35 · 581 阅读 · 1 评论 -
Bean Copy也就这么点事了!
总结Java中对象拷贝的那些事,来看看哦~原创 2020-12-27 12:14:54 · 2105 阅读 · 2 评论 -
设计模式-Command模式
文章目录介绍解决的问题使用场合示例普通实现命令模式实现命令模式和策略模式的区别相同点不同点总结命令模式是一种行为型模式。请求以命令的形式包裹在对象中,并传递给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。简单而言,就是调用者->命令->执行者,将调用者和执行者解耦。介绍命令模式主要定义了三种角色:Receiver:执行命令的对象;Command:命令;Invoker:命令的发起者;UML关系图:解决的问题在软件系统中,行原创 2020-12-01 17:29:59 · 1095 阅读 · 0 评论 -
AQS(AbstractQueuedSynchronizer)
AQS(AbstractQueuedSynchronizer) 目录 一、概述 二、AQS工作原理 acquire(int) tryAcquire(int) addWaiter(Node) acquireQueued...原创 2018-12-15 22:36:00 · 394 阅读 · 0 评论 -
事物传播属性在项目中的实践
文章目录场景分析测试&问题描述问题追踪解决方案总结Spring事物传播属性:1)Propagation.REQUIRED):支持当前事务,如果当前有事务, 那么加入事务, 如果当前没有事务则新建一个(默认情况)2)Propagation.NOT_SUPPORTED : 以非事务方式执行操作,如果当前存在事务就把当前事务挂起,执行完后恢复事务(忽略当前事务);3)Propagation.SUPPORTS :如果当前有事务则加入,如果没有则不用事务。4)Propagation.MANDAT原创 2020-08-12 13:41:04 · 283 阅读 · 0 评论 -
【自定义注解使用】增加service层方法访问日志
自定义注解的使用:AspectJ+Annotation原创 2019-09-03 16:07:26 · 1187 阅读 · 3 评论