- 博客(47)
- 资源 (2)
- 收藏
- 关注
原创 Spring三级缓存
三级缓存主要是为了解决循环依赖与AOP代理对象之间的矛盾点,之所以二级缓存不够是因为无法保证对象单例性的同时,处理对象生成时序的问题。
2025-02-21 11:31:51
237
原创 Influxdb学习 - TSM存储
但是,内存索引并不会加载整个 Index 部分的数据,而是只加载每个 Block 的最大时间和最小时间。时序数据的时间值以及指标值在一个 Block 内部是按照列式存储的:所有的时间值存储在一起,所有的指标值存储在一起。使用列式存储可以极大提高系统的压缩效率。每隔一段时间,内存中的时序数据就会执行 flush 操作将数据写入到文件(称为 TSM 文件),主要包含以下四个结构。InfluxDB 之所以在时序数据场景下表现出色,主要得益于其专为时序数据优化的架构设计和多层次的性能优化策略。
2025-02-13 14:49:08
436
原创 字节AI辅助编程工具MarsCode,开启高效编程之旅
无论是特定的代码格式要求,还是独特的语法习惯,MarsCode 都能完美适应。阿里的通义灵码凭借阿里强大的技术实力,在代码补全方面表现出色,能够快速理解程序员的意图,提供准确的代码建议。微软的 codeCopliot 也以其广泛的应用和强大的功能受到众多开发者的青睐。通过先进的算法和不断学习的模型,MarsCode 能够精准地预测程序员的下一步操作,提供最合适的代码片段。与通义灵码和 codeCopliot 相比,MarsCode 在处理复杂项目和特定领域的编程任务时,表现出更高的准确性和针对性。
2024-08-29 15:32:09
671
3
原创 Gateway网关开启流量监控
最近由于生产用户数上増,需要对项目的网络连接池进行优化,故而需要知道gateway的一些连接池情况和负载情况,需要进行监控和统计,本文通过metrics进行统计。
2024-07-09 11:14:09
717
1
原创 记一次CPU占用过高问题排查和优化
List的contains方法查询复杂度为O(n),Set的查询复杂度最好的情况下为O(1),最坏的时间复杂度可能接近 O(n)如果我们需要判断一个元素是否在列表中,数据量大且调用频繁的时候尽量还是使用Set结构,查询的效率会比List快。
2024-06-13 16:38:17
724
原创 记一次netty客户端的开发
近日要开发一个tcp客户端程序去对接上游厂商的数据源,决定使用netty去处理,由于很久没有开发过netty了,顺便学习记录下。
2024-05-31 17:51:58
627
1
原创 记一次netty数据中转服务开发
近日需要开发一个服务去对接上游的TCP数据源,同时将数据转发给下游去处理,该服务只做前置的登录鉴权、心跳等操作。
2024-05-30 16:20:07
1126
1
原创 记一次pulsar数据丢失排查
生产者往pulsar写消息时会有递增的序列号字段,消费端在消费时,会出现序列号断层。当下无法确定是生产端、mq、消费端哪个地方丢失了数据,所以先从生产端进行排查。生产端的消息发送是通过sendAsync的异步方法该方法会返回一个对象目前是没有对该对象进行检查,所以补上对应的代码逻辑在运行一段时间后,该异常被触发,可以确定问题在生产者这里了。
2024-02-25 14:31:19
767
原创 Sentinel源码分析(五) - 熔断降级
@Author:zxw@Email:502513206@qq.com目录Sentinel源码分析(一) - 初识SentinelSentinel源码分析(二) - Entry构建Sentinel源码分析(三) - 调用链路Sentinel源码分析(四) - 限流规则1.前言在通过了流控插槽后,接下来则是断路器的插槽了。同样的,通过Sentinel的控制台看下断路器的配置有哪些Sentinel 提供以下几种熔断策略:慢调用比例 (SLOW_REQUEST_RATIO):选择以慢
2022-02-07 11:38:56
1577
4
原创 Sentinel源码分析(四) - 限流规则
@Author:zxw@Email:502513206@qq.com目录Sentinel源码分析(一) - 初识SentinelSentinel源码分析(二) - Entry构建Sentinel源码分析(三) - 调用链路1.前言通过上篇文章已经知道FlowSlot节点是用来处理我们流控的实现,以下为添加规则的示例代码private static void initFlowRules() { List<FlowRule> rules = new Array
2022-02-07 11:35:17
1393
原创 Sentinel源码分析(三) - 调用链路
@Author:zxw@Email:502513206@qq.com目录Sentinel源码分析(一) - 初识SentinelSentinel源码分析(二) - Entry构建1.前言之前已经分析过Entry的构造流程,我们知道Sentinel关于规则和流控的所有逻辑都在其内部的ProcessorSlotChain调用链路上,首先看看接口提供的方法有哪些。对于链表结构我们清楚,就是不断获取下一个节点,然后进行方法调用。这里该接口提供了两个方法分别为入口entry和出口exit。对于出口
2022-02-07 11:33:11
1526
原创 Sentinel源码分析(二) - Entry构建
@Author:zxw@Email:502513206@qq.com目录Sentinel源码分析(一) -初识Sentinel1.前言上篇文章已经讲了资源类CtEntry中的具体属性,那接下来通过一段代码看下Sentinel在初始化Entry的过程中做了哪些操作。public static void main(String[] args) { initFlowRules(); while (true) { Entry entry =
2022-02-07 11:31:12
583
原创 Sentinel源码分析(一) - 初识Sentinel
@Author:zxw@Email:502513206@qq.com1.前言再研究Sentinel源码之前,先对Sentinel的理念进行了解。对于网络请求调用可以想象以下两个问题当服务A请求服务B时,服务B响应不及时,导致服务A的线程全部hang死在请求服务B?当服务收到大量网络请求,应用无法支撑时如何解决?以上会导致服务的稳定性降低从而引发系统的崩溃,这对于线上业务来说是不可接受,那么一般的解决方案如下:请求超时:设置请求超时时间请求资源隔离:通过线程池和信号量断路器:当请求异
2022-02-07 11:29:34
1378
原创 Feign源码分析(五) - spring对Feign的扩展
@Author:zxw@Email:502513206@qq.com目录Feign源码分析(一) - 初探FeignFeign源码分析(二) - builder构建Feign源码分析(三) - Client调用Feign源码分析(四) - 自定义扩展点1.前言在上一篇文章中已经分析了Feign有哪些常见的扩展点供我们使用,其中比较关键的几个点有如下对Client的封装,整合ribbon和hytrixcontract解析接口注解2.扩展2.1 Client通过之前的分析了
2022-01-31 18:38:16
414
原创 Feign源码分析(四) - 自定义扩展点
@Author:zxw@Email:502513206@qq.com目录Feign源码分析(一) - 初探FeignFeign源码分析(二) - builder构建Feign源码分析(三) - Client调用1.模块对于Feign的整体流程已经分析完了,接下来就看看有哪些我们可以自定义的扩展点。首先回顾下Feign中有哪些配置模块。像之前FeignBuilder里还有Options,Retryer等,下面只列了我们主要使用的自定义配置。1.1 Client对于Client只有一
2022-01-30 22:47:45
994
原创 Feign源码分析(三) - Client调用
@Author:zxw@Email:502513206@qq.com目录Feign源码分析(一) - 初探FeignFeign源码分析(二) - builder构建1.前言通过前面的文章,已经分析清除了Feign代理类的生成流程。接下来就是看远程调用发起的流程Feign是如何实现的,代码还是跟之前一样,通过connect方法获取到代理对象后,直接调用Feign接口repo@RequestLine("GET /api/v5/repos/{owner}/{repo}/stargazers?
2022-01-30 20:30:19
1096
原创 Feign源码分析(二) - builder构建
@Author:zxw@Email:502513206@qq.com目录Feign源码分析(一) - 初探Feign1.前言通过上篇文章,我们得知了Feign类中主要的元数据,接下来就看下Feign是如何为我们生成代理类的。可以看到调用target方法时,传入了Class参数Gitee.Class,那么Feign是通过接口代理的方式来生成实现类的,interface Gitee { @RequestLine("GET /api/v5/repos/{owner}/{repo}
2022-01-30 20:28:29
2292
原创 Feign源码分析(一) - 初探Feign
@Author:zxw@Email:502513206@qq.com1.前言在springcloud的微服务体系中,有这么一个框架Feign能够提供我们调用远程服务就像调用本地服务一样,我们先抛开spring对Feign的封装,而是直接从Feign入手来看看Feign的内部组成与调用逻辑是怎么样的,那么就从如下我写的一个访问Gitee调用的代码入手看Feign。static Gitee connect() { final Decoder decoder = new Gson
2022-01-30 20:24:30
1153
原创 Netty源码分析(二) - 线程组
@Author:zxw@Email:502513206@qq.com目录Netty源码分析(一) - 线程声明周期1.示例代码在看源码前,首先看看测试用的代码,这边为了方便测试,没有使用NioEventLoop,不过底层都是使用的父类方法,并不影响。public static void main(String[] args) { EventLoopGroup group = new DefaultEventLoopGroup(2); TestRunner
2022-01-08 21:57:56
544
原创 Netty源码分析(一) - 线程生命周期
@Author:zxw@Email:502513206@qq.com1.java线程生命周期对于了解java线程的人应该知道java的线程一共有如下5个状态public enum State { // 线程创建时的状态,此时操作系统中还未创建线程 NEW, // 线程处于就就绪或者可运行状态 RUNNABLE, // 资源占用时,例如synchronized获取锁失败,进入阻塞状态 BLOCKED, // 调用wait()、
2022-01-06 11:18:52
756
原创 SonarQube整合maven
@author:zxw@email:502513206@qq.com@ Jishou UniversitysonarLint:https://www.sonarlint.org/#reference:https://www.oschina.net/p/sonar?hmsr=aladdin1e1前言有的时候我们想知道自己写的代码好不好,或者有些地方有什么质量缺陷,我们可以使用代码质量扫描插件sonarLint进行代码扫描,来帮助我们改进代码,减少代码缺陷以及提升质量,是不是KPI就杠杠的来了
2021-07-22 20:25:22
2657
1
原创 数据库复制原理 - 主从同步
@author:zxw@email:502513206@qq.com@ Jishou University参考:Designing Data-Intensive Applications 前言 复制主要是指通过互联网络在多台机器上保存相同的数据副本,为了实现以下效果使数据在地理位置上更接近用户,从而降低访问延迟当部分组件出现故障,系统依然可以继续工作,提高可用性多台机器同时提供读服务,提高吞吐量如
2021-07-17 21:30:43
1760
1
原创 centos部署harbor教程
@author:zxw@email:502513206@qq.com@ Jishou University1.前言最近在学习docker相关知识,我们平常pull的镜像都是来自官方仓库提供的镜像。但是我们也需要自己独立的镜像仓库,就像每个公司都有一个公共的maven仓库一样,最后了解到Harbor是个开源的企业级私人镜像仓库,所以决定部署一套玩玩,顺便记录一下踩坑2.搭建步骤首先在harbor的github仓库上下载安装包https://github.com/goharbor/harbor
2021-05-14 11:40:40
901
原创 Sentinel源码解析 - 限流算法种类简介
@author:zxw@email:502513206@qq.com@ Jishou University1.前言限流可以说是高并发中比较重要的一个问题了,面试的时候也经常有关此类的问题,刚好最近在学习限流算法时,苦于找不到好的实现,想起以前用过的sentinel框架里面就有限流的功能,所以顺道来学习下sentinel中限流的实现。2.源码解析我们先来看看Sentinel怎么配置限流策略,在FlowRule对象中,通过配置controlBehavior属性就可以指定限流策略了,默认使用默认的限
2021-01-16 10:21:38
743
2
原创 Seata整合nacos
author:zxwemail:502513206@qq.com@ Jishou University1.前言之前一直使用的是seata+eureka的方式来使用,最近自己在家的时候忽然想用nacos来试试,毕竟之前没怎么用过。使用后发现和eureka的用法还是差别蛮大的,折腾了一天才把项目跑起来,以此来记录下使用方法。2.使用在使用前当然得先下载相关的包,这边说下我使用的版本nacos:https://gitee.com/mirrors/Nacos?_from=gitee_search 我
2020-12-06 13:38:25
1447
1
原创 mysql学习记录 - explain命令
author:zxwemail:502513206@qq.com@ Jishou University1.前言最近买了mysql的一个课程,基本已经看完第一轮了,第一轮只是留个印象在脑海中还不算深入的理解,想想最近很久没写过博客了,刚好来记录下学习的理解以及加深印象。2.Content有关explain官方是这样解释的,explain提供mysql如何执行语句的信息,可以和select,delete,insert,replace,update命令一起使用。The EXPLAIN st..
2020-11-03 17:41:03
314
原创 SQL异常:exist: integer = character varying
最近在使用mybatis的时候遇到了这样的错误SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: operator does not exist: integer = character varying No operator matches the given name and argument type(s). You might need to add explicit type casts.一
2020-10-22 11:20:45
4614
原创 seata启动教程
author:zxwemail:502513206@qq.com@ Jishou University1.前言最近在学习seata框架的使用,但是花了很久时间才把项目搭起来,主要是第一次使用要踩挺多坑的。比如在我们的业务项目要在resource目录下添加file.config和registry.conf两个配置文件,作为第一次使用的萌新确实很难发现,官网上也没有详细的教程,还有一个最主要的错误就是Could not found property service.vgroup_mapping..
2020-10-20 14:30:18
5593
原创 spring-scheduled源码解析
@author:zxw@email:502513206@qq.com@ Jishou University1.前言最近在学习xxl-job的源码,其实对于xxl-job的使用方式并不太喜欢,所以看了源码后想自己扩展第三方包对xxl-job进行扩展,不过没有想到的比较好的实现方法,先是参考了eureka的扩展,不过感觉eureka的那套属于服务注册那类好像用在xxl-job的扩展上并不太合适,所以又想到了之前使用的spring提供的定时任务注解@Scheduled,于是顺便看看源码学习下spri.
2020-09-21 17:02:37
572
原创 xxl-job源码解析系列 - 执行器分析
@author:zxw@email:502513206@qq.com@ Jishou Universityxxl-job:https://www.xuxueli.com/xxl-job1.前言我们知道xxl-job中有两个概念,分别为执行器和调度器而这两个是解耦合,先让我们看看执行器相关的源码2.源码分析先简单说下项目中使用xxl-job的流程,引入xxl-core包,然后配置一个XxlJobConfiguration的配置类,注入相关xxl的信息。@Component@Slf4.
2020-09-21 11:38:17
690
原创 xxl-job源码解析系列 - 源码构建
@author:zxw@email:502513206@qq.com@ Jishou Universityxxl-job:https://www.xuxueli.com/xxl-job1.前言最近项目上使用到了xxl-job这个分布式任务调度的框架,所以也借此机会了解下该项目的使用原理。对于任何一个框架和开源项目都是建立在实际需求上而开发和使用。毕竟开发还是要创造价值为主,而不是什么炫酷就用什么。包括像alibaba最近比较火爆的开源项目nacos,sentinel等,其都是为了解决某些.
2020-09-11 09:50:12
241
原创 eureka源码系列 - 设计模式在eureka中的使用
eureka源码系列 - 设计模式@author:zxw@email:502513206@qq.com@ Jishou University1.前言看了eureka的源码后,在eureka中也运用了一些设计模式,就让我们学习下设计模式在项目中的实际运用2.Builder模式在eureka中,实例的信息保存在InstanceInfo对象中,而InstanceInfo和EurekaRegistration都是通过Builder模式构造出来的,实例代码如下InstanceInfo publi
2020-09-07 15:38:26
508
原创 jjwt源码解析
jjwt源码解析author:zxwemail:502513206@qq.com@ Jishou University1.前言最近在做一个jwt授权服务,其实也就是给请求的用户生成一个token,不过关于token的验证并不在我服务负责,而是由网关去统一处理。jwt之前也用过几次,不过不是很熟悉只知道是通过base64Url算法进行加密,这次刚好用到了所以来看看jjwt的实现。2.源码解析在java中导入jjwt的包就可以使用包中提供的Builder生成jwt的token,以下是基础的用
2020-09-02 11:06:44
599
原创 Nacos源码分析系列 - 服务续租
Nacos源码分析系列 - 服务检测author:zxwemail:502513206@qq.com@ Jishou University@Nacos:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html1.前言之前分析了nacos的服务注册流程,接下来看看nacos的心跳检测机制。2.面试题nacos默认每隔多久发送一次心跳检测?// 5000毫秒DEFAULT_HEART_BEAT_INTERVAL = Time
2020-08-27 15:08:13
419
原创 Nacos源码分析系列 - 服务注册
Nacos源码分析系列 - 服务注册Author:zxwSchool:吉首大学email:502513206@qq.com@Nacos:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html1.前言nacos官方有集成好的nacos-server包,copy下来只需要运行其中的startup.bat文件即可启动注册中心,但是这边我们从源码的角度入手注册中心,所以将源码包拷贝下来,通过手动启动的方式启动nacos注册中心。首先获取到
2020-08-26 17:35:55
445
原创 Quarkus框架 - 快速入门
Quarkus框架 - 快速入门@Author:zxw@email:502513206@qq.com@school:吉首大学1. 前言最近在观看云原生大会的时候,了解到一个迅速的崛起的框架就是Quarkus了,Quarkus是一款基于云原生的java框架。本篇意在教大家快速搭建环境,并启动应用,所以相关简介可自行百度。2. 使用2.1 条件使用Quarkus框架需要系统满足几个条件jdk8以上maven版本在3.6.2以上(之前我的maven是3.6.0的,一直报错更换版本后就好了)
2020-08-22 20:11:35
2473
1
原创 eureka源码系列 - 注册中心
eureka源码系列 - 注册中心@Author:zxw@email:502513206@qq.com@school:吉首大学1.前言之前分析过eureka client的相关源码,不过看了一番代码后,还是觉得从eureka server上入手会比较好,这样某些地方也能理的比较顺,兜兜转转一圈后,现在从eureka server的启动源码进行一个分析。2.源码解析按照惯例,从注解入手@EnableEurekaServer,其中注入了一个EurekaServerMarkerConfigurat
2020-08-22 15:35:16
250
基于Servlet的投票管理系统
2020-07-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人