- 博客(60)
- 资源 (2)
- 收藏
- 关注
原创 SpringBoot之HandlerInterceptor拦截器的使用 ——(一)
HandlerInterceptor简介拦截器我想大家都并不陌生,最常用的登录拦截、或是权限校验、或是防重复提交、或是根据业务像12306去校验购票时间,总之可以去做很多的事情。1、定义实现类定义一个Interceptor 非常简单方式也有几种,我这里简单列举两种 1、类要实现Spring 的HandlerInterceptor 接口 2、类继承实现了HandlerInterc...
2018-08-15 14:06:37
223798
42
原创 Sentinel——Spring Boot 应用接入 Sentinel 后内存开销增长计算方式
接入 Sentinel 对 Spring Boot 应用的内存消耗影响主要取决于 **规则数量、资源数量、监控粒度、并发量** 等因素。
2025-02-07 10:56:47
1616
原创 Java日志脱敏(二)——fastjson Filter + 注解 + 工具类实现
**日志脱敏** 是常见的安全需求,最近公司也需要将这一块内容进行推进。看了一圈网上的案例,很少有既轻量又好用的轮子可以让我直接使用。我一直是反对过度设计的,而同样我认为轮子就应该是可以让人拿去直接用的。所以我准备分享两篇博客分别实现两种日志脱敏方案。
2024-10-31 14:51:52
1454
原创 Java日志脱敏——基于logback MessageConverter实现
**日志脱敏** 是常见的安全需求,最近公司也需要将这一块内容进行推进。看了一圈网上的案例,很少有既轻量又好用的轮子可以让我直接使用。我一直是反对过度设计的,而同样我认为轮子就应该是可以让人拿去直接用的。所以我准备分享两篇博客分别实现两种日志脱敏方案。
2024-10-31 12:39:14
2068
原创 分布式事务解决方案理论简介
DTP模型主要关注于如何在分布式环境中确保事务的一致性和完整性,通过两段提交协议来协调参与事务的各个节点,以确保事务要么完全提交,要么完全不提交,从而避免了部分提交可能导致的数据不一致问题。2、事务消息的提交和业务代码的结束不能一体,要能感知真正事务提交,事务嵌套事务内发送消息就有可能导致消息成功但业务没成功的坑爹场景。Seata是对2PC的一种优化后的实现,避免了本地数据库的锁占用,以及等待事务提交的性能浪费问题。主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。
2024-08-08 14:13:34
815
原创 零拷贝的发展历程
零拷贝是指计算机执行 IO 操作时,CPU 不需要将数据从一个存储区域复制到另一个存储区域,从而可以减少上下文切换以及 CPU的拷贝时间。它是一种I/O 操作优化技术。
2024-08-08 14:03:19
634
原创 Spring通过注解优雅实现工厂模式
工厂模式作为开发者,应该都是耳熟能详的,在课本上、在网络上都会有无数的案例,是一个简单、确十分好用的设计模式。但是实现它的方法有很多,早年见过最多的就是用 if 判断类型,然后返回不同的实现类。后来见过在数据库写上类型和实现类的对应关系,然后通过 **getBean** 动态获取。但是它们都不是优雅的实现。
2024-08-05 11:38:32
1486
原创 测试左移,浅谈如何编写可反复执行的单元测试用例
当下大多数公司、开发者对于测试工作依然是严重依赖测试团队,从而导致开发团队对单元测试编写更多是用于功能初次开发场景下,去针对性测试一次接口,看一看代码能否跑通,甚至不写单元测试直接转测。 如何打造一个可持续运转的测试方案,如何将测试左移,开发团队去主动保障质量,是一个值得大家去努力,去尝试的领域
2024-08-02 10:41:37
1291
转载 (转)Redis的持久化详解
Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢失。Redis的数据也支持写到硬盘中,这个过程就叫做持久化。
2024-01-09 22:46:54
192
原创 Springframework之ResponseBodyAdvice——响应拦截处理
ResponseBodyAdvice接口,其实是对加了(也就是+)注解的处理器将要返回的值进行增强处理。可以用于规范化前后端调用的响应格式,也可以用作统一签名等操作。ResponseBodyAdvice其实也就是采用了AOP的思想,对返回值进行一次修改。......
2022-08-09 17:38:58
2198
原创 ZooKeepe分布式锁——Curator分布式锁源码详解
官方文档上这么解释ZooKeeper,它是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper主要有如下两个核心的概念:文件系统数据结构 + 监听通知机制。
2022-05-10 14:20:47
1260
原创 解决maven多模块工程集成jacoco、Sonar后单元测试覆盖率异常问题
最近再做单元测试覆盖率统计问题,最终决定方案是 jacoco+sonar进行数据集成。但在实现过程中发现由于我们项目是一个maven的多模块工程,数据从jacoco.exec同步至sonar 后无法读取其它模块的覆盖率。如上图,使我们的模块划分。单元测试执行完后会在xxxx-user-web 的 target文件夹中生成jacoco.exec,数据同步至sonar后,我发现sonar中的单元测试覆盖率是错误的,完全没有读取到xxxx-user-core 和 xxxx-user-api 这两个模块下代码
2022-03-21 15:39:20
8105
3
原创 Sonar扫描忽略包路径或类文件
目录背景介绍Sonar忽略包路径或类文件背景介绍 项目组经历了初期近三年的 桃园结义 式的工作模式,在21年迎来了第一次大扩招,恰巧又赶上了老员工的第一波离职潮。JAVA团队21年入职新员工人数超过了在职的老员工人数,并且可以预见22年团队将继续扩大。 在以上背景下,交付质量明显下滑部分迭代 BUG数直线上升 ,且 交付速度下滑 。我迎来了职业生涯的又一次巨大的挑战。版本迭代需求/缺陷数量图(黄色折线图为B
2022-03-09 19:03:07
8082
1
原创 MySQL实战——看完便知到底什么是幻读
A事务查询一个范围集合,在当前事务进行中;B事务在范围内插入了一条数据,并提交事务;A事务再次查询无法查询到B事务提交的数据,**但是可以通过DELETE、UPDATE去对该行数据进行删除或修改,如果是修改,在UPDATE成功后,再次查询会多查询出一条数据,内容为被A事务修改后的内容**。
2022-02-16 17:36:30
914
原创 《DevOps实践指南》——阅读笔记(长文告警)
DevOps实践指南《DevOps实践指南》简介Part 1——DevOps介绍简史第1章 敏捷、持续交付和三步法第2章 第一步:流动原则第3章 第二步:反馈原则第4章 第三步:持续学习与实验原则Part 2——从何处开始第5章 选择合适的价值流作为切入点第6章 理解、可视化和运用价值流《DevOps实践指南》简介本书共分为6个部分:第一部分概述DevOps的历史和三个基本原则,即“三步工作法”;第二部分介绍开启DevOps转型的过程;第三到五部分深入探讨“三步工作法”的各个要素;第六部分关
2022-02-12 16:21:27
1680
原创 Redis从精通到入门——bitmap实现源码详解
bitmap 在Redis 中又叫 bitops ,它就是通过一个bit位来表示某个元素对应的值或者状态。 bitmap 的实现在Redis中其实并没有去新增加一个数据类型,它的底层实现其实就是一个 String也就是一个char buf[]。而大家要知道1Byte = 8bit,所以这个数组中每一个下标对应8个元素的状态。 bitmap 其中的key也就是元素,key只能为>=0的整数则可以当成基于bit位的 偏移量 Redis中 我们可以叫它 offset,所以它们就像数组的下标一样不
2022-02-08 13:49:05
1928
原创 Redis从精通到入门——数据类型Zset实现源码详解
Zset简介,Zset常用操作,应用场景,Zset实现,源码阅读,Zset—ziplist实现,图解Zset—ziplist,Zset—字典(dict) + 跳表(zskiplist)实现,源码阅读,图解zskiplist
2022-02-06 13:51:18
2143
原创 Redis从精通到入门——数据类型Set实现源码详解
Set简介,Set常用操作,应用场景,Set实现,Set—intset实现,源码阅读,图解intset,Set—dict实现Redis 的 Set 大多数情况下是 String 类型的无序集合`当Set 中所有元素均为整数且元素个数不超过设定阈值时,为int类型的有序集合`。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
2022-02-04 11:04:26
2080
原创 Redis从精通到入门——数据类型Hash实现源码详解
Redis数据类型之Hash详解Hash简介Hash的常用操作应用场景Hash实现Hash—ziplist实现图解Hash—ziplist实现Hash—字典dict实现源码阅读图解dict渐进式rehash
2022-02-04 00:07:52
1662
1
原创 Redis从精通到入门——数据类型List实现源码详解
Redis数据类型之List详解List简介List的常用操作应用场景List实现ziplist源码阅读图解Ziplistzlentry数据结构quickList源码阅读图解quickListList简介Redis中List列表中的每个字符串成为元素,一个列表最多可以存储2^32 - 1个元素。 在Redis中,可以对列表两端插入(LPUSH)和弹出(LPOP),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,可以充当
2022-01-30 14:30:47
4374
4
原创 硬派健身——健身先健脑
俗话说得好,健身先健脑认识自己的身体红白肌人体功能系统人体三大供能系统的相互关系什么叫做胖减肥为什么会失败?快走 or 慢跑?胖猴子才能活下来节食减肥为何失败致胖环境体重设定点(set-point)理论只有30分钟以上的有氧运动才减肥?人类是有氧耐力最强的哺乳动物之一HIITEPOC硬核小知识认识自己的身体红白肌人身上的肌肉分为两种每个人都有 爆发型 肌肉 和 耐力型 肌肉。也叫 白肌 和 红肌。爆发肌顾名思义,管短期爆发。耐力肌管长期发力。爆发肌纤维粗一些,耐力肌纤维更细更平滑。而且耐力肌更贴近骨
2022-01-28 12:21:55
2823
3
原创 Redis从精通到入门——数据类型String实现源码详解
Redis从精通到入门——数据类型String实现源码详解Redis数据类型之String详解String的实现sds源码阅读sds设计优势redisObject对象redisObject源码阅读String的对象编码int类型(REDIS_ENCODING_INT)embstr类型(REDIS_ENCODING_EMBSTR)raw类型(REDIS_ENCODING_RAW)
2022-01-17 16:17:32
1638
原创 中国DevOps社区峰会 2021·深圳——我的收获与工作要点
本文是基于 中国DevOps社区峰会 2021·深圳 + 《DevOps实践指南》 + 本人在工作中所遇到的问题进行总结DevOps是什么DevOps维基百科定义 DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。由于博主本身不是做运维相关的工作,所以博主不会过多关注运维工具,以下介.
2021-12-20 20:24:43
1578
2
原创 学习笔记——ThreadPoolExecutor线程池
线程线程池线程池创建new ThreadPoolExecutorExecutors.newFixedThreadPool线程池状态核心方法监控方法Worker线程数设置ForkJoinPool
2021-12-17 23:35:28
1199
原创 学习笔记——HashMap、ConcurrentHashMap
目录HashMapConcurrentHashMapHashMap数组+链表+红黑树JDK>=1.8链表长度大于8转红黑树前提是当前map大小 不小于64,否则会优先扩容// Map转红黑树方法源码 会判断如果 tab.length < MIN_TREEIFY_CAPACITY 也就是64 则优先选择扩容final void treeifyBin(Node<K,V>[] tab, int hash) { int n, index; Node<K,V&
2021-12-16 20:33:18
1649
原创 学习笔记AQS——AbstractQueuedSynchronizer
AbstractQueuedSynchronizer简介特性AQS使用场景ReentrantLockBlockingQueueSemaphoreCountDownLatchCyclicBarrierExchanger
2021-12-06 15:01:00
690
原创 学习笔记 JVM
类加载,JVM内存模型,对象创建,内存分配,对象在内存中存储的布局,指针压缩对象内存回收,垃圾收集,垃圾收集算法,基础垃圾收集器,CMS收集器,G1收集器`JDK1.9默认`,ZGC收集器`JDK11 出现 目前尚在实验阶段`,读、写屏障,跨代引用
2021-12-01 11:32:14
394
原创 学习笔记MySQL
前言学习笔记仅是自己在学习后,留下的认为需要留意的标记,方便我回忆,并无什么实际理论的讲解。索引B+树对原B+Tree结构修改有序双向循环链表索引左闭合区间叶子节点头节点指针聚簇/非聚簇索引叶子节点区别Page页默认16KB(页分裂、页合并)页数据加载至内存(二分查找)组合索引Explain中通过key_len长度判断组合索引一共使用到几个字段范围查询"<"、">"导致组合索引无法使用全的问题代码先行,索引后上索引合并事务ACID
2021-11-29 21:08:21
650
原创 MySQL实战——表、索引创建与优化
目录前言MySQL表、索引 优化实战优化前 - 表、索引结构表优化思路非聚簇索引优化思路组合索引优化思路认识key_len范围查询对组合索引的影响优化后 - 表、索引结构前言就目前中国市场,作为每一个开发人员都需要去会的技能 MySQL ,大家工作中都会需要 建表 、建索引,有的同学可能要说了:“这玩意谁不会建呢?太简单了!”。若是如此那真是太好了,我带团队也有几年了前前后后经历了一些人,超过85%的人建表、建索引 真的只是停留在会创建。创建出来的表、索引 在我看来也是问题一大堆。所以,咱们今天就来好
2021-11-16 15:31:43
949
原创 Dubbo Filter 过滤器 —— 自定义异常过滤器(ExceptionFilter)
背景介绍许多项目中大家都会有一些自定义异常然后利用 ExceptionHandler 去做统一处理。在我们的项目中同样用到,详见:SpringMVC之全局异常处理 ——统一返回格式这种操作方式在常规项目使用中是没有任何问题的,但是当调用Dubbo接口时,服务方(provider) 抛出自定义异常,消费者拿到的却是一个 RuntimeException 并非我们自定义的异常类型。并且还会打印Error级别的日志:Got unchecked and undeclared exception whic
2021-08-26 14:20:31
3193
7
原创 MySQL实战——执行优化、运维优化、架构优化
目录前言执行优化为什么使用数据索引能提高效率认识影响结果集理解执行状态数据库异常分析流程执行优化总结前言本篇文章针对用户群为已经使用过 mysql 环境,并有一定开发经验的工程师。针对高并发,海量数据的互联网环境。本文语言为口语,非学术标准用语。以实战和解决具体问题为主要目标,非应试,非常规教育。非技术挑战,非高端架构师培训,请高手自动忽略。友情提醒,在校生学习本教程可能对成绩提高有害无益。文章部分内容来自 厦门游家公司(4399.com) 某位大佬写的内部培训分享手册。如有侵权 立即
2021-08-05 20:58:20
1005
1
原创 MySQL实战—— Limit与Order by 对查询效率的巨大影响
前言查询同样的数据,在使用Order by、limit后可能对查询结果 与耗时产生百倍的影响。优化SQL不光是优化那些1秒以上的慢查询,更重要的是那些超高频率的0.1秒的查询SQL。在这里我模拟创建了一张表 limit_table并初始化100W行的数据。-- 表创建CREATE TABLE `limit_table` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `index_fie_id_a` int(8) NOT NULL, `fie_id
2021-06-13 11:20:54
8921
10
原创 MySql 实战—— Innodb 索引、数据结构(纠正许多博客中错误的细节)
MySql实战——索引最近准备给组内测试的同事们分享下MySQL的小知识,然后网上看看排在靠前的博客。发现许多博主画的图,写的东西都不严谨,甚至有许多错误的点。 例如: B+Tree 节点中关键字与指针; B+Tree底层叶子节点数据结构; 联合索引数据结构; 聚簇索引数据检索方式; InnoDB中每页能存储的数据量 ;前言MySQL 是由 MySQL AB 公司(目前已经被 SUN 公
2021-06-11 17:22:07
1108
11
原创 JAVA通过反射给实体类成员变量赋值——Field
反射简介Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。(摘抄自百度百科)简版咱们先弄个实体类用作测试@Datapublic class DemoModel { private Integer age; private String name;
2020-08-19 15:52:06
21525
4
原创 Java虚拟机(JVM)详解——看完直接入门(内存结构、GC算法)
全文目录Java发展史Java虚拟机(JVM)JVM内存结构字节码执行引擎运行时数据区线程私有区域程序计数器虚拟机栈栈帧局部变量表操作栈动态链接方法返回地址本地方法栈线程公有区域方法区(元空间)堆Young area 年轻代Old area 老年代GC垃圾判断算法引用计数法(基本不用)可达性分析法(普遍使用)垃圾回收算法标记-清除算法Java发展史上图是Sun公司在被Oracle(甲骨文)收购前的几个重大时间节点。 其
2020-05-13 12:40:16
1501
原创 JAVA锁详解——(CAS、PCC、AQS、CLH、Synchronized、Lock、公平/非公平锁、锁粗化/消除、分段锁)
常用名词简介CAS(Compare And Swap): 乐观锁。线程在读取数据时不进行加锁,在准备写回数据时,判断原油数据的版本号或其他条件未被修改则写入成功,否则写入失败,重新查询后再次进行修改。AQS(AbstractQueuedSynchronizer): 抽象队列同步器。AQS就是基于CLH队列,用volatile修饰共享变量state,线程通过CAS去改变状态符,成功则获取锁成功,...
2020-05-06 16:47:24
1307
原创 如何组织可持续的团队内部分享
内部分享能给我们带来什么?学习新知识,完善自我体系(让团队之间相互分享学习,促进团队的快速成长)提高业务经验,突破技术瓶颈(培养团队的学习气氛和分享习惯)提升沟通能力、表达能力、自信(给予每个人锻炼自己的机会)梳理业务逻辑、推进代码质量与性能(增加团队之间的交流互动、取长补短)内部分享常见的坑当然一般团队内部分享无法持久的主要原因是肾虚,需要多喝点枸杞茶。不好意思串台了,咱们重...
2020-04-23 16:13:23
4665
3
原创 高级JAVA面试题详解(五)——Dubbo(分层、协议、负载均衡策略、服务注册与发现)
闲来夸一夸DubboDubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。提供对多种 NIO 框架抽象封装,包括多种线程模型、序列化、同步转异步和请求-响应模式的信息交换方式。集群容错,包括多协议支持、软负载均衡、失败容错、地址路由、动态配置等集群支持。Dubbo框架分了哪些层?分别做什么?服务接口...
2020-04-22 14:59:12
399
原创 高级JAVA面试题详解(四)——数据库MySQL(MySQL优劣、存储引擎、事务、索引、锁、删除重复数据)
MySQL详解 上篇主要写一些除分库分表、主从之外的其它问题MySQL和MongoDB的区别MySQLMongoDB数据库模型非关系型关系型存储方式JSON的文档的格式存储虚拟内存+持久化不同引擎有不同的存储方式数据处理方式基于内存,将热数据存放在物理内存中,从而达到高速读写不同引擎有自己的特点数据库模型非关系型关系型...
2020-04-07 17:41:25
673
2
原创 高级JAVA面试题详解(三)——Redis(redis cluster、虚拟槽、一致性hash算法、master选举、淘汰策略、String数据结构)
Redis详解 下篇希望这一篇能搞定剩下的东西,如果搞不定,那咱们还有下下篇这就和咱们开发拿到的需求一样,这就是最后一版需求了,一天后我这有个进化版、又一天后我这有个究极版、再过一天究极进化版如期而至。整个一数码宝贝的进化流程,吐槽下自己最近比较忙 没提前准备好今天要写的东西。主要还是农药S19赛季来了上分去了,对不住各位老板。面试官:Redis的集群模式有哪些啊小韭菜?1、主从模式(m...
2020-04-01 17:54:33
913
内部分享简章 无水印版本.pptx
2020-04-24
《重构_改善既有代码设计》观后感PPT
2018-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅