自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术交流

杨赛星

  • 博客(258)
  • 资源 (9)
  • 收藏
  • 关注

原创 一次压测遇到的问题和排查过程记录

其次,推测是获取令牌失败导致的超时,但在此场景下,项目中会返回“当前并发数量过高,请稍后重试”的提示语。目前网关超时统一设置6s,当获取令牌超时后,项目构造的响应体提示语“当前并发数量过高,请稍后重试”只在日志中正常打印,但网关已经返回了Gateway Time-out。首先排除存储过程导致的超时,因为该压测接口的测试数据是统一mock的,网络稳定的情况下,不会出现超时的情况。首先,从压测参数来看,并发数并不高,持续时间也不高,排除并发过高导致服务承载不住的可能。断言的设置会影响最终异常率。

2023-03-31 20:35:26 552 1

原创 链路追踪——【Brave】第一遍小结

微服务链路追踪系列博客,后续可能会涉及到Brave、Zipkin、Sleuth内容的梳理。

2023-02-26 20:18:01 668 1

原创 2022年度总结

常见用法 & 源码学习。

2023-01-31 19:29:31 354

原创 Nacos源码系列之@RefreshScope

文章目录一、背景二、如何实现1、初识RefreshScope(1)ScopedProxyMode(2)@Scope("refresh")2、RefreshScope3、RefreshScope 刷新三、小结一、背景我们在使用Nacos做配置自动刷新时,会使用@RefreshScope注解。如:@RefreshScope@Configurationpublic class AsyncExceptionHandler implements AsyncConfigurer {}@Configur

2022-06-04 17:01:10 2956 1

原创 RocketMQTemplate基本使用

文章目录1、环境准备2、生产者普通消息同步消息异步消息3、消费者(1)基础示例(2)顺序消费(2)消费模式a.集群模式b.广播模式(3)重复消费4、accessKey和secretKey1、环境准备pom引入依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter&l

2022-05-22 20:32:08 10774 3

原创 Mac搭建单机版RocketMQ-4.9.3

文章目录一、背景二、RocketMQ1、准备工作2、方式一:项目源码启动(1)启动nameServer(2)启动broker(3)Producer发布消息(4)Consumer消费消息(5)Dashboard查看3、方式二:命令启动一、背景版本说明:JDK:1.8RocketMQ: 4.9.3Dashboard:二、RocketMQ1、准备工作下载地址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.3/rocketmq-al

2022-05-15 19:33:52 963

原创 Nacos源码系列之Java实现grpc(四)

文章目录1、实践(1) IDEA安装插件(2) 新建.proto文件(3) pom引入依赖(4) 生成代码(5) 创建服务端(6) 创建客户端2、源码(1) protobuf(2) 重要类和接口Java实现grpc1、实践(1) IDEA安装插件Protobuf Support(2) 新建.proto文件我这里命名为test.proto。指定生成代码的包路径、接口服务等。定义了一个UserService服务,包含一个方法getUser()。以及请求类UserRequest、响应类UserR

2022-04-16 16:35:59 1154

原创 Nacos源码系列之UDP(三)

文章目录一、UDP1、java实现udp2、 nacos-naming3、nacos-client一、UDP1、java实现udppublic class Send { public static void main(String[] args) { byte[] data="hello world".getBytes(); try { DatagramPacket datagramPacket=new DatagramPacket(

2022-04-08 22:05:22 1275 3

原创 Nacos源码系列之服务发现(二)

核心服务管理类,管理服务、实例信息。包含nacos的服务注册表。主要内容分为以下几类:1、init@PostConstructpublic void init() {//service reporter的定时任务执行器GlobalExecutor.scheduleServiceReporter(new ServiceReporter(), 60000, TimeUnit.MILLISECONDS);//服务更新管理的定时任务执行器GlobalExecutor.submitServiceUpd

2022-04-03 23:16:21 1791

原创 Nacos源码系列之服务注册(一)

目录一、前言二、源码概览三、Naming Service1、create a naming service2、register instance(1)grpc-NamingGrpcClientProxyRpcClientcurrentConnection.request()a.common包下b.core包下(2)http-NamingHttpClientProxy一、前言二、源码概览address模块: 主要查询nacos集群中节点个数以及IP的列表.api模块: 主要给客户端调用的ap

2022-03-26 20:29:48 1316

原创 浅析Fork/Join

文章目录一、算法1、二分法2、分治法二、实践举个例子实现原理1)类关系2)主要方法compute()fork()join()三、总结一、算法1、二分法假设我们遇到一个规模很大的问题,很难一下子解决。那么要怎么处理呢?思路一:能不能把这个大规模的问题变为每次减少一点呢?比如从n到n-1。思路二:既然可以每次减少一点,那能不能每次减少几倍?效果会不会更好?这里我们介绍思路二中的一个比较有名的算法——二分查找(也叫折半查找)。具体实现思路:在规模较大的问题n中,查找目标值a,每次折半,然后看

2022-03-05 14:23:15 561

原创 函数式编程——Java Stream API

文章目录前言1、lambda2、函数式接口3、函数式编程Java 8步骤:1、创建流2、中间操作3、终止操作操作:filter(筛选)map(映射)reduce/fold(折叠/化约)小结:Java 9+实践分享前言1、lambdalambda表达式又称闭包或匿名函数,可用于简化代码、增强代码可读性、并行操作集合等。基本语法:(parameters) -> expressionor(parameters) ->{ statements; }需注意的点:lambda表达式内,

2022-02-25 15:00:55 668

原创 响应式编程之Spring Webflux

一 、响应式编程响应式系统具有某些特性,使其成为低延迟、高吞吐量工作负载的理想选择。适用场景:异步非阻塞。比如:一个日志监控系统,我们的前端页面将不再需要通过“命令式”的轮询的方式不断向服务器请求数据然后进行更新,而是在建立好通道之后,数据流从系统源源不断流向页面,从而展现实时的指标变化曲线;一个社交平台,朋友的动态、点赞和留言不是手动刷出来的,而是当后台数据变化的时候自动体现到界面上的。响应式编程(reactive programming)是一种基于数据流(data stream)和变化传递(

2022-02-19 22:24:15 4495

原创 xxl-job核心流程源码解析

1、执行器(1)创建-后台在后台admin页面,操作新增执行器。注意:选择“自动注册”(这里介绍自动注册方式)AppName对应项目application中配置的xxl.job.executor.appname属性,即XxlJobSpringExecutor的appname。会调用/jobgroup/save方法,进行基本校验后,将执行器信息保存到表xxl_job_group中。源码具体位置在xxl-job-admin的JobGroupController中。(2)初始化-自动注册将

2022-02-12 20:14:45 892

原创 MacOS Monterey安装Redis6.2.6及BloomFilter问题汇总

背景我的系统是从10.12+直接升级到Monterey,所以个别常用命令无法使用。如果没问题,跳过就好。Redis6.2.6安装下载安装包并解压,执行make命令报错。xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun查阅资料得知,Redis6.0

2021-12-19 18:21:32 1337

原创 JOOQ-The easiest way to write SQL in Java

1、简介一个ORM框架,官方地址:http://jooq.org特点:方便、好用有强类型校验所以对于数据的输入,是天然安全的,极大的减少了SQL注入的风险。2、基本使用基本环境:MysqlSpringBoot(1)引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-

2021-12-12 16:27:56 1146

原创 属性映射工具——MapStruct

一、简介一个属性映射工具。项目中各种实体之间会有很多转换,比如 vo、entity、dto、domain等。转换时需要写大量的get、set方法,冗长也工作量很大。再加上转换时可能还会有一定的业务逻辑处理,这会导致映射过程十分繁琐。本篇博客介绍的工具MapStruct,就可以很好地解决这一问题。二、实践实际应用场景主要分为以下几种情况:1、属性名相同无需处理,自动映射,类似BeanUtils。2、属性名不同需手动指定。3、属性值需额外的逻辑处理使用表达式引入逻辑处理。代码示例引入j

2021-11-20 14:36:54 837

原创 Jmeter基本使用

一、相关软件Jmeter:apache-jmeter-5.4.1监控插件ServerAgent:ServerAgent-2.2.3二、操作1、ServerAgent在服务器机器上操作,赋权限,启动。chmod 777 startAgent.sh./startAgent.sh注意:默认端口是4444,重启有可能会变,监听的时候要填对端口。2、Jmeter下载地址:http://jmeter.apache.org/download_jmeter.cgi使用命令 sh jmeter 启

2021-11-13 22:04:09 2435

原创 PHP笔记整理——基础语法

背景初步了解php语言的语法之后,将一些常用的写法和规则记录下来。php与java语法类似的部分,这里就不做过多说明。简介服务器脚本语言;跨平台;快捷高效。基本语法php文件使用以下标签,文件扩展名为“.php”<?php// 此处是 PHP 代码?>1、变量$变量以$开头,大小写敏感。 $totalPage = 0; $title = "abc";global在函数内访问全局变量$bool_test = false;function method

2021-11-07 22:05:04 155

原创 Redis基本数据类型应用场景及实现

本篇介绍的几种数据结构,虽然没有String使用的那么广泛,但他们有各自适用的场景。数据结构1、Hash用于存储对象。场景举例购物车,常用操作包括:1)往用户的购物车中添加商品2)增加某人购物车某件商品的数量3)删除购物车中指定商品4)获取购物车中商品总数5)获取购物车中所有商品对应命令如下:1)hset car-user1 product1 1hset key filed value其中key:car-user1,用来存储user1的购物车信息。2)hincrby ca

2021-10-31 22:33:39 441

原创 零拷贝技术

1、基本概念内核态和用户态Linux OS 体系架构分为内核态和用户态,也叫用户空间和内核。内核态:控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态:上层应用程序的活动空间,依托于内核提供的资源。二者关系:用户态(上层应用程序)通过系统调用内核态中的资源。DMADirect Memory Access 直接存储器访问,不依赖CPU大量中断负载。对比流程-图源网络。不使用DMA技术时:使用DMA后:使用了DMA技术后,CPU的工作量大大减轻,此时io操作已有所提升,

2021-10-24 15:31:38 316

原创 分布式事务系列(一)XA

1、简介什么是分布式事务?两个不同的服务器上,对两个不同的库的写操作,要求执行的原子性(要么都执行,要么都不执行)。XA协议X/Open组织定义的资源管理器(Resource Manager)和事务管理器(Transaction Manager)的接口标准。采用两阶段提交2PC方式来管理分布式事务。资源管理器(RM):管理系统资源,还具有管理事务提交或回滚的能力。数据库就是一种资源管理器。事务管理器(TM):分布式事务的核心管理者,与RM进行通信,协调并完成事务的处理。2PC存在问题

2021-10-14 10:37:24 238

原创 分布式锁Redisson

1、背景分布式锁需要达到的目标有:互斥 ( 不同应用之间、线程与线程之间互斥。)性能 (锁的粒度和范围都要尽量小,减少不必要的竞争。)锁的特性 (可重入锁;超时设置;锁判断等)2、实战引入依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId>

2021-10-02 10:41:10 304 1

原创 Mybatis-代码走查问题整理

实践篇1、#{}和${}的区别${}直接替换变量 (有sql注入风险),使用场景:当表名、字段名作为变量传入时。#{}(PreparedStatement) 预处理编译,先替换为? 然后赋值 添加单引号。2、使用注解和xml文件sql的方式区别?注解:简单明了,无需额外文件。但长sql格式不友好,且无法额外做if等逻辑处理。sql:能弥补注解sql的缺点,但对于不同场景下共用sql的情况,要处理好参数是否必须传入的问题。3、使用map接收结果集时,有时会遇到属性的类型与预想的不一

2021-09-27 14:40:03 351

原创 JVM窥探——G1收集器

在这篇博客《JVM(2)——GC算法和收集器》中,简单介绍了GC的算法和收集器。今天主要介绍其中的一种收集器G1。一、目标尽最大可能减少STW时间;GC停顿可控;不产生内存碎片和浮动垃圾。二、特点1、化整为零,引入region。RegionJava堆划分成多个独立区域Region,新生代和老年代也不再是物理隔离的,他们都是一部分Region集合。新增的Humongous区,专门用来存放临时的大对象。如下图:RSetRemembered Set,每个Region初始化时都会有一个RSet

2021-09-18 17:41:04 101

原创 Redis的事务和Watch机制

1、背景Redis version: 3.2.92、事务Redis的事务,可以理解成是一系列命令的打包操作。与传统事务相比,Redis的事务不支持回滚,若遇到错误,不影响其他命令的执行。符合Redis追求快速、高效的目标。当然,与此同时,也就无法做到严格的要么全部执行,要么全不执行。(1)常用命令multi exec discard 等multi:开启事务exec:提交事务discard:取消事务Tips:因“语法错误”导致的error,redis 事务不回滚,不影响其他命令执行

2021-09-15 10:36:47 356

原创 【Review】Mybatis-以PageHelper为例分析拦截器

1、背景大家都知道,Mybatis提供了接口绑定,实现了DAO与xml文件的绑定,无需编写实现类,更方便使用。但如果我们需要对某些语句进行额外的统一处理,且是在运行时动态修改,怎么办?比如分页,不希望每次都在sql中手动填充分页参数,能不能动态传递分页参数来实现?2、PageHelper以PageHelper为例,来看下他是如果使用拦截器对sql进行处理的。//其中,type:上面提到的四种拦截对象的类型。method:拦截哪些方法,因为是分页查询,所以只需要query即可。args:对应方法

2021-09-04 23:16:59 865

原创 【Review】Spring源码分析之bean加载

1、背景IOC容器,是Spring的两大特性之一。作为容器,他可以方便地管理bean,以及bean与bean之间的依赖关系。本篇文章,主要从源码角度介绍在ioc容器中,bean的加载流程。2、源码(1)容器的重要接口/类(2) Bean Definition入口:XmlBeanFactory 构造函数中调用 XmlBeanDefinitionReader的loadBeanDefinitions(resource)大致分为三个步骤:验证xml文件的正确性;加载xml,转为Document对

2021-08-30 14:43:56 89

原创 【Review】深入理解ThreadLocal(内存泄漏+线性探测)

1、简介线程内共享,线程间隔离。线程本地变量与lock相比:ThreadLocal:空间换时间Lock等:时间换空间2、实现原理1)ThreadLocalMap Entry[] table 环形数组2) Entry弱引用弱引用:GC时会被回收。key:ThreadLocal<?> value:Objectkey定位采用hash,碰撞后采用线性探测法,未再使用链表。private static int nextIndex(int i, int len) {retu

2021-08-21 18:04:53 659

原创 力扣刷题——二分查找实现pow幂函数

1、先来个例题:取值范围:-100.0 < x < 100.0-231 <= n <= 231-1举个例子:输入:x=2 n=10输出:1024输入:x=2 n=-2输出:0.25 (因为1/4=0.25)给出方法public double myPow(double x, int n) {}2、分析思路一:蛮力法根据幂函数定义直接求解,即2的10次方=2 * 2 *… * 2(10个2相乘)代码实现:略优点:思路清晰,简单直接易懂。

2021-03-05 14:56:23 235 2

原创 Spring两种拦截器类型介绍

1.分类HandlerInterceptor:拦截请求地址,比后者先执行。类似过滤器。MethodInterceptor:拦截指定类型的方法,通过动态代理模式实现。2.HandlerInterceptor1)拦截器实现一个HandlerInterceptor拦截器可以直接实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter类。2)拦截器链提供了添加拦截器方法,以及遍历执行拦截器接口几个方法的实现。public class Hand

2020-11-13 14:42:45 1421

原创 Servlet过滤器源码分析

1.概述Servlet过滤器是服务端和客户端请求与响应的中间层组件,可以进行过滤请求,处理完毕后再转给下一个资源。在实际场景中,可能需要多个过滤器。即采用了过滤器链的方式来组织,如图所示。2. 源码相关先看几个主要的源码类Filterpublic interface Filter { public void init(FilterConfig filterConfig) throws ServletException; public void doFilter(Servle

2020-11-10 10:30:25 352

原创 代理模式回顾

之前的两篇文章,介绍了代理模式,引出动态代理。然后分别介绍了常用的JDK动态代理和CGLIB动态代理。本篇再次回顾下关键点。1.代理模式先上类图控制对象访问代理类和被代理类都实现了同一接口,代理类持有被代理类的引用。静态代理十分简单易懂,但随着被代理对象的增加,代理类也会随之增加。但每个代理类所做的工作又十分类似。为了解决这一问题,引出了动态代理。动态代理如上所述,抽象出了公共的代理类。在运行时,动态生成具体的代理类。JDK动态代理,引入Proxy类来生成代理类。真正的代理类为$P

2020-11-04 10:47:29 75

原创 CGLIB动态代理原理分析

原理采用字节码技术,动态生成代理类,并在代理类中做回调处理完成方法增强。假设业务类User,我们现在要对其进行处理。CGLIB动态代理会生成User的代理类UserProxy,其中UserProxy继承自User。既然是继承,那么必然User的方法他也有,除非用final修饰。因此,我们可以在UserProxy中对User的方法做处理,实现代理的作用。实例现在通过代码看下:业务类Use...

2020-02-19 17:39:52 360

原创 Java反射——Proxy和动态代理

概述上篇文章《Java反射——Class和ClassLoader 》,我们简单介绍了反射的基本概念及相关类。这里介绍下,反射的一个主要应用——动态代理。动态代理JDKCGLIBAPI小结...

2020-02-04 11:30:58 616

原创 Java反射——Class和ClassLoader

这里写自定义目录标题概述特点场景API概述特点场景API反射相关的类主要在java.lang 和 java.lang.reflect包下。其中,java.lang下主要有以下两个。1、Class类是对象的抽象,Class就是所有类的抽象。也可以说,Class表示类的类类型。public final class Class<T> implements java.io....

2020-01-26 13:56:09 649

原创 【机器学习】常用算法系列之——分类算法KNN

背景监督学习中数据是有标签的,比较入门。而在监督学习中,有分类和回归两个任务。其中分类又是比较简单的,那我们从分类入手,介绍第一个基础分类算法——KNN。简介KNN,全称K-NearestNeighbor,也叫K近邻。是监督学习中的一种基础的常用分类算法。所谓K近邻,即选取k个最近的邻居,来代表每个样本。说起来比较抽象,我们从图上来看一下。已分类数据:图中有两个类别:红色的三角形和...

2019-02-04 10:30:57 1054

原创 从“三门问题”引出的条件概率、全概率和贝叶斯推导

条件概率现有事件A、事件B,如果事件B已发生,此时事件A发生的概率是多少?即P(A|B)=?用集合表示的话,更加直观。1)计算P(A)或者P(B)时,是以Ω为样本空间的。2)而计算P(A|B)时,意味着P(B)已发生。即样本空间已经从Ω变成了B。当事件B已发生时,事件A如果要发生,就只能是在A∩B的部分,即P(AB)。因此,P(A|B)=P(AB)/P(B)小试牛刀:一...

2019-02-03 10:38:48 15720

原创 “学习金字塔”理论

“学习金字塔”是一种阐述不同学习方式对学习效率影响的理论。首先,学习方式或方法可以分为两大类:主动学习和被动学习。 在塔尖,第一种学习方式——“听讲”,也就是老师在上面说,学生在下面听,这种我们最熟悉最常用的方式,学习效果却是最低的,两周以后学习的内容只能留下5%。 第二种,通过“阅读”方式学到的内容,可以保留10%。 第三种,用“声音、图片”的方式学习,可以达到20%。 第四种,是“...

2018-08-17 18:37:44 4388

原创 “芝诺悖论”

“芝诺悖论”是由古希腊哲学家芝诺提出的一系列悖论的统称。与其他学者不同,芝诺更善于从反面看待事物,而非直接证明。后人也称其为辩证法的创始人。 芝诺提出的悖论,都是与现实差异较大但又没办法解释清楚。有人说他是在诡辩,但也无法说出原理。很多悖论都隐含着很多物理学、微积分的思想,值得思考。在这些悖论中,其中“阿基利斯与乌龟赛跑”就是一个十分典型的例子。1.阿基利斯和乌龟赛跑,假设...

2018-08-17 14:50:22 2440 1

commons-pool-1.5.5.jar

项目中使用jedispool需要引用的jar包,有需要的就拿去吧

2016-03-19

jedis-2.1.0

Redis客户端操作需要的jar包,十分好用

2016-03-18

apache-cxf-2.5.0

WebService的cxf框架,解压后可直接使用,十分方便。jar包齐全,放心。

2016-03-18

redis安装文件

redis的安装文件,使用tar命令可直接解压编译,十分方便。

2016-03-01

redis-desktop-manager(redis图形化管理工具)

redis的图形化管理工具,官网下载很慢,直接从这里拿吧

2016-03-01

mysql-connector-java-5.1.18.zip

myEclipse连接mysql的驱动,解压后可直接使用

2015-06-07

sqljdbc4.jar

myEclipse连接sqlserver的jar包驱动

2015-06-07

报表类控件

报表类控件,报表是企业管理的基本措施和途径,是企业的基本业务要求,也是实施 BI 战略的基础。报表可以帮助企业访问、格式化数据,并把数据信息以可靠和安全的方式呈现给使用者。深入洞察企业运营状况,是企业发展的强大驱动力。

2013-10-08

FeedDemonInstall

一款很好,很方便的Rss阅读器,可订阅报纸、博客等。

2013-03-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除