工作 - 术
文章平均质量分 90
zhibo_lv
一个渣渣猿
展开
-
分布式事务解决方案理论简介
DTP模型主要关注于如何在分布式环境中确保事务的一致性和完整性,通过两段提交协议来协调参与事务的各个节点,以确保事务要么完全提交,要么完全不提交,从而避免了部分提交可能导致的数据不一致问题。2、事务消息的提交和业务代码的结束不能一体,要能感知真正事务提交,事务嵌套事务内发送消息就有可能导致消息成功但业务没成功的坑爹场景。Seata是对2PC的一种优化后的实现,避免了本地数据库的锁占用,以及等待事务提交的性能浪费问题。主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。原创 2024-08-08 14:13:34 · 521 阅读 · 0 评论 -
零拷贝的发展历程
零拷贝是指计算机执行 IO 操作时,CPU 不需要将数据从一个存储区域复制到另一个存储区域,从而可以减少上下文切换以及 CPU的拷贝时间。它是一种I/O 操作优化技术。原创 2024-08-08 14:03:19 · 483 阅读 · 0 评论 -
测试左移,浅谈如何编写可反复执行的单元测试用例
当下大多数公司、开发者对于测试工作依然是严重依赖测试团队,从而导致开发团队对单元测试编写更多是用于功能初次开发场景下,去针对性测试一次接口,看一看代码能否跑通,甚至不写单元测试直接转测。 如何打造一个可持续运转的测试方案,如何将测试左移,开发团队去主动保障质量,是一个值得大家去努力,去尝试的领域原创 2024-08-02 10:41:37 · 730 阅读 · 0 评论 -
(转)Redis的持久化详解
Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢失。Redis的数据也支持写到硬盘中,这个过程就叫做持久化。转载 2024-01-09 22:46:54 · 99 阅读 · 0 评论 -
Springframework之ResponseBodyAdvice——响应拦截处理
ResponseBodyAdvice接口,其实是对加了(也就是+)注解的处理器将要返回的值进行增强处理。可以用于规范化前后端调用的响应格式,也可以用作统一签名等操作。ResponseBodyAdvice其实也就是采用了AOP的思想,对返回值进行一次修改。......原创 2022-08-09 17:38:58 · 1903 阅读 · 1 评论 -
ZooKeepe分布式锁——Curator分布式锁源码详解
官方文档上这么解释ZooKeeper,它是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper主要有如下两个核心的概念:文件系统数据结构 + 监听通知机制。原创 2022-05-10 14:20:47 · 1061 阅读 · 0 评论 -
解决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 · 7012 阅读 · 3 评论 -
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 · 4174 阅读 · 4 评论 -
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 · 1490 阅读 · 0 评论 -
中国DevOps社区峰会 2021·深圳——我的收获与工作要点
本文是基于 中国DevOps社区峰会 2021·深圳 + 《DevOps实践指南》 + 本人在工作中所遇到的问题进行总结DevOps是什么DevOps维基百科定义 DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。由于博主本身不是做运维相关的工作,所以博主不会过多关注运维工具,以下介.原创 2021-12-20 20:24:43 · 1452 阅读 · 2 评论 -
学习笔记——ThreadPoolExecutor线程池
线程线程池线程池创建new ThreadPoolExecutorExecutors.newFixedThreadPool线程池状态核心方法监控方法Worker线程数设置ForkJoinPool原创 2021-12-17 23:35:28 · 1090 阅读 · 0 评论 -
Dubbo Filter 过滤器 —— 自定义异常过滤器(ExceptionFilter)
背景介绍许多项目中大家都会有一些自定义异常然后利用 ExceptionHandler 去做统一处理。在我们的项目中同样用到,详见:SpringMVC之全局异常处理 ——统一返回格式这种操作方式在常规项目使用中是没有任何问题的,但是当调用Dubbo接口时,服务方(provider) 抛出自定义异常,消费者拿到的却是一个 RuntimeException 并非我们自定义的异常类型。并且还会打印Error级别的日志:Got unchecked and undeclared exception whic原创 2021-08-26 14:20:31 · 2655 阅读 · 7 评论 -
JAVA通过反射给实体类成员变量赋值——Field
反射简介Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。(摘抄自百度百科)简版咱们先弄个实体类用作测试@Datapublic class DemoModel { private Integer age; private String name;原创 2020-08-19 15:52:06 · 19212 阅读 · 4 评论 -
Java虚拟机(JVM)详解——看完直接入门(内存结构、GC算法)
全文目录Java发展史Java虚拟机(JVM)JVM内存结构字节码执行引擎运行时数据区线程私有区域程序计数器虚拟机栈栈帧局部变量表操作栈动态链接方法返回地址本地方法栈线程公有区域方法区(元空间)堆Young area 年轻代Old area 老年代GC垃圾判断算法引用计数法(基本不用)可达性分析法(普遍使用)垃圾回收算法标记-清除算法Java发展史上图是Sun公司在被Oracle(甲骨文)收购前的几个重大时间节点。 其原创 2020-05-13 12:40:16 · 1400 阅读 · 0 评论 -
JAVA锁详解——(CAS、PCC、AQS、CLH、Synchronized、Lock、公平/非公平锁、锁粗化/消除、分段锁)
常用名词简介CAS(Compare And Swap): 乐观锁。线程在读取数据时不进行加锁,在准备写回数据时,判断原油数据的版本号或其他条件未被修改则写入成功,否则写入失败,重新查询后再次进行修改。AQS(AbstractQueuedSynchronizer): 抽象队列同步器。AQS就是基于CLH队列,用volatile修饰共享变量state,线程通过CAS去改变状态符,成功则获取锁成功,...原创 2020-05-06 16:47:24 · 1144 阅读 · 0 评论 -
如何组织可持续的团队内部分享
内部分享能给我们带来什么?学习新知识,完善自我体系(让团队之间相互分享学习,促进团队的快速成长)提高业务经验,突破技术瓶颈(培养团队的学习气氛和分享习惯)提升沟通能力、表达能力、自信(给予每个人锻炼自己的机会)梳理业务逻辑、推进代码质量与性能(增加团队之间的交流互动、取长补短)内部分享常见的坑当然一般团队内部分享无法持久的主要原因是肾虚,需要多喝点枸杞茶。不好意思串台了,咱们重...原创 2020-04-23 16:13:23 · 3597 阅读 · 3 评论 -
logback实现分布式系统日志链路追踪
日志链路追踪的必要性雷迪森俺的杰特们,日志查询不管在测试环境或是生产环境,都是作为一个开发人员经常要去找、要去看的东西。某个业务出现BUG,那么如何迅速的定位我们所要找的日志及相关的其它日志?事关测试及开发人员定位问题的效率,往往大家都是根据自己打印的日志的关键字去查询日志,但是在并发量大、或业务流程长的场景中往往你无法通过一次、两次的日志查询看清整个业务线的日志。甚至只能通过去看实时日志 然后...原创 2020-03-25 16:23:40 · 2349 阅读 · 0 评论 -
Java8中list转map方法总结
原文地址:https://blog.csdn.net/zlj1217/article/details/81611834 ...转载 2020-03-19 13:50:11 · 767 阅读 · 1 评论 -
Spring MethodInterceptor—— 轻松实现aop功能的三种方式
为下一篇日志链路追踪做铺垫先了解下AOP,这一块我就不用从新写了 基本可以看看这一篇原文链接:https://blog.csdn.net/u013905744/article/details/91364736 如果对于spring MethodInterceptor或spring aop概念不清楚,参考:s...转载 2020-03-16 10:29:52 · 1831 阅读 · 0 评论 -
Dubbo Filter 过滤器(拦截器)的使用——dubbo.rpc.Filter
com.alibaba.dubbo.rpc.Filter简介咱们先说说 “Filter”,顾名思义 过滤器,在我们平时的工作中也是一员猛将。在之前的文章中我也介绍了在Spring中类似的HandlerInterceptor的使用方法。com.alibaba.dubbo.rpc.Filter它换了个马甲,干的依然是守门(过滤器)的活儿,不过是跑去阿里上班了,在dubbo干起了守门保安,做事低调...原创 2020-03-11 15:52:37 · 32097 阅读 · 8 评论 -
当当Elastic-Job —— 利用zk轻松开启分布式定时任务
Elastic-JobElastic-Job有什么用Elastic-job解决以下问题,我们开发定时任务一般都是使用quartz或者spring-task,无论是使用quartz还是spring-task,我们都会至少遇到两个痛点:不敢轻易跟着应用服务多节点部署,可能会重复多次执行而引发系统逻辑的错误。quartz的集群仅仅只是用来HA,节点数量的增加并不能给我们的每次执行效率带来提升,...原创 2019-12-02 15:40:57 · 2602 阅读 · 0 评论 -
SpringBoot之@Async——轻松开启异步任务
目录异步任务创建新的线程@Async简介简单使用@Async无返回值的异步任务有返回值的多线程异步任务异步任务在很多业务中我们需要考虑到异步执行某些任务,特别时耗时较长的http接口的调用,例如:短信发送:在我们调用第三方提供的短信发送接口后一般会实时收到一个响应结果,但是这个结果并不代表短信成功发送,只是表示了第三方接口校验了基本的数据没有问题后告知已收到你的短信发送请求。至于真正的短...原创 2019-04-18 20:28:18 · 1064 阅读 · 1 评论 -
SpringBoot之HandlerInterceptor拦截器的使用 ——(一)
HandlerInterceptor简介拦截器我想大家都并不陌生,最常用的登录拦截、或是权限校验、或是防重复提交、或是根据业务像12306去校验购票时间,总之可以去做很多的事情。1、定义实现类定义一个Interceptor 非常简单方式也有几种,我这里简单列举两种 1、类要实现Spring 的HandlerInterceptor 接口 2、类继承实现了HandlerInterc...原创 2018-08-15 14:06:37 · 218780 阅读 · 42 评论 -
SpringBoot之HandlerInterceptor拦截器的使用 ——(二)自定义注解
在上一篇博客已经介绍了HandlerInterceptor的基本用法这里就不重复了详见:SpringBoot之HandlerInterceptor拦截器的使用 ——(一)功能简介拦截所有添加了我们自定义的注解的方法,并将userId和userMobile放入HttpServletRequest,之后通过对应的注解取值。包格式首先我们来先定义三个注解 根据需求...原创 2018-08-16 11:46:48 · 50892 阅读 · 19 评论 -
SpringBoot之HandlerInterceptor拦截器的使用 ——(三)@RequestBody获取请求参数解决java.io.IOException: Stream closed
现在开发的项目是基于SpringBoot的maven项目,拦截器的使用很多时候是必不可少的,当有需要需要你对body中的值进行校验,例如加密验签、防重复提交、内容校验等等。 当你开开心心的在拦截器中通过request.getInputStream();获取到body中的信息后,你会发现你在controller中使用了@RequestBody注解获取参数报如下错误I/O error whi...原创 2018-08-20 18:22:57 · 47169 阅读 · 59 评论 -
SpringBoot之HandlerInterceptor拦截器的使用 ——(四)防重复提交
看本篇博客前应当先看完前面三篇,这一篇是基于前面三篇的知识点的整合。所以很多重复的代码这里就不写出了 后台通过拦截器实现防重复提交,避免因为网络原因导致多次请求同时进入业务系统,导致数据错乱,也可以防止对外暴露给第三方的接口在业务尚未处理完的情况下重复调用。首先引入fastjson<dependency&am原创 2018-08-21 12:00:24 · 13645 阅读 · 5 评论 -
SpringMVC之全局异常处理 ——统一返回格式(自定义异常)
SpringMVC之全局异常处理老规矩开篇咱们先介绍一下背景因当前APP越来越流行,或是提供的第三方接口等等都需要你来统一返回格式。这个时候问题就来了 ,很多时候系统的异常以及为了代码的可读性我们必然会抽出很多的间接层(例如数据格式校验、数据有效性校验等),一层层的return是否让你烦不胜烦?其实只需要抛出异常就像断言那样即可阻止程序继续执行后续业务代码。Dennis Debruler ...原创 2018-10-18 14:39:54 · 3452 阅读 · 0 评论 -
浅谈 Swagger —— 优化现有开发流程
浅谈Swagger文章目录浅谈Swagger背景故事认识Swagger好的文档让项目减少联调时间如何用Swagge引入maven依赖创建Swagger2配置类接口文档编写新建UserVo接收前端传递的对象新建UserController 提供http接口常用注解介绍背景故事随着互联网技术的发展,越来越多的公司选择了前后端分离,开始了敏捷转型。而前后端的技术都有了各自的突破,已然进入新的时代。...原创 2018-11-15 14:43:56 · 1902 阅读 · 0 评论 -
秒懂,Java 注解 (Annotation)你可以这样学——必读
谢谢博主:frank909的分享原文出处:https://blog.csdn.net/briblue/article/details/73824058文章开头先引入一处图片。 这处图片引自老罗的博客。为了避免不必要的麻烦,首先声明我个人比较尊敬老罗的。至于为什么放这张图,自然是为本篇博文服务,接下来我自会说明。好了,可以开始今天的博文了。 Annotation 中文译过来就是注解、标...转载 2018-12-26 17:07:21 · 379 阅读 · 0 评论 -
SpringMVC | 设计模式实战 ——工厂模式(善用接口与抽象类)
背景故事接口、抽象类、多态这些JAVA基础中的基础,在多少初级中级攻城狮的眼中如同鸡肋,去掉接口其它两项工作两年没真正去使用过的人不在少数。随着敏捷模式在国内大肆推广,底层技术人员疲于应付不断变动需求,总在高呼红烧产品,清蒸设计。同时为自己那杂乱无章满是补丁的代码找了一个冠冕堂皇的理由——需求一直在变哪有时间去优化!推荐一本书 Martin Fowler的《重构:改善既有代码的设计》,我感...原创 2018-12-11 16:41:59 · 2112 阅读 · 3 评论 -
SpringMVC Get请求如何获取Date类型的参数—— @DateTimeFormat
Get请求如何获取Date类型的参数背景介绍今天Code Review的时候发现一个小问题,发现部分接口(Get)接收前端传递的时间类型用的是String类型的然后再到代码中转换成Date类型.我提出我的疑惑:“嘿、boy 这地方为啥要用String 接收开始时间和结束时间?”boyA:“不用String 直接用Date会报错啊!难道你们不用String?”boyB一脸懵逼加略带嘲讽回到...原创 2019-03-14 14:56:20 · 9801 阅读 · 2 评论 -
SpringBoot通过JedisCluster连接Redis集群(分布式项目)
分布式项目 SpringBoot + Redis使用本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ct...原创 2018-08-09 11:22:40 · 12393 阅读 · 1 评论