自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HelloWorld搬运工

HelloWorld搬运工

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

原创 SpringBoot 最常用的50个注解

SpringBoot提供了很多注解,可以帮助我们快速构建应用程序。

2023-12-16 15:39:35 898

原创 Redis分布式锁存在哪些问题,该如何解决?

在使用reids做分布式锁时,并没有想象中的那么简单,高并发场景下容易出现死锁,锁被其他线程误删,锁续期,锁丢失等问题,在实际开发中应该考虑到这些问题并根据相应的解决办法来解决这些问题,从而保证系统的安全性。本文中可能会存在一些遗漏或错误,后续会继续跟进。

2023-12-16 15:33:42 839

原创 线上问题排查,这些命令你一定用得到!

问题:打包备份/opt/web/suyun_web目录,排除掉目录中的logs和目录,打包好的文件存放在/opt/backup目录下。问题:找出服务器上,某个正在运行的tomcat产生的大量异常日志,找出该文件,并释放空间。说明:netstat是追查网络连接问题常用工具,和grep/awk结合更是神器,当然如果在阿里云上,还有更方便的方法。说明:这个命令线上应用较为频繁,在项目需要打包迁移时,常常需要排除掉日志目录,exclude是需要掌握的参数。线上问题排查,以下场景,你遇到过吗?n [仅限于阿里云]

2022-11-26 14:21:05 304 1

原创 SpringBoot四大核心组件

先透露一下,四大组件分别是:starter, autoconfigure, CLI 以及actuator。下面我们就来详细介绍一些他们有什么用。本章主要介绍了Spring Boot的四大组件的作用,其中主要是starter和autoconfigure,另外的CLI和actuator用的并不多,所以没有仔细介绍。

2022-11-06 08:37:53 892

原创 SpringBoot 那些天生自带 Buff 的工具类

SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查。Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数。断言是一个逻辑判断,用于检查不应该发生的情况。获取被代理对象的 class。获取当前对象的代理对象。

2022-11-06 08:36:29 384

原创 为什么禁止MyBatis批量插入几千条数据使用foreach?

的方式来插入,可以提升性能的方式。近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。所以,如果非要使用 foreach 的方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 的个数,最好能达到上面曲线的最底部的值,使速度最快。乍看上去这个foreach没有问题,但是经过项目实践发现,当表的列数较多(20+),以及一次性插入的行数较多(5000+)时,整个插入的耗时十分漫长,达到了14分钟,这是不能忍的。

2022-11-06 08:34:04 1455

原创 一个非常实用的分布式 JVM 监控工具

该项目为了方便开发者更快监控多个远程主机jvm,如果你的项目是Spring boot那么很方便集成,jar包引入即可,不是Spring boot也不用气馁,你可以快速自行初始化一个Spirng boot程序引入jar包即可。

2022-11-06 08:28:19 593

原创 秒杀系统的思考

上图中描述了用户请求到服务器经历了三层的负载均衡,下边分别简单介绍一下这三种负载均衡。① OSPF(开放式最短链路优先)是一个内部网关协议(Interior Gateway Protocol,简称 IGP)OSPF 通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,OSPF 会自动计算路由接口上的 Cost 值,但也可以通过手工指定该接口的 Cost 值,手工指定的优先于自动计算的值。OSPF 计算的 Cost,同样是和接口带宽成反比,带宽越高,Cost 值越小。

2022-11-06 08:26:24 324

原创 常用开源监控系统分析推荐

在互联网信息爆炸式快速发展的今天,各类复杂多样的平台系统相继涌出。如何选择最佳的监控产品以更好地维护这些平台和系统是每个 IT 人员都需面临的难题。本文将从开源监控产品的起源和发展,详细解析各个时代热门监控产品的优势和劣势,并结合各个监控产品的使用场景,帮你选择出最适合自己的开源监控产品。因篇幅和时间原因,下面介绍的资料和理解可能和实际情况有所偏差,欢迎大家留言或者加入微信群批评指正。作者:Ethan Chen 云智慧解决方案架构师,拥有丰富的运维理论及实战经验。

2022-10-23 09:04:52 1876

原创 快速定位 SpringBoot 接口超时问题的神器

有一个诡异的100ms左右的耗时问题,在接口中打印了请求处理时间后,和调用方的响应时间还有差了100ms左右。的调用栈,那么这么长的路径,该trace哪个类呢(这里跳过spring mvc中的过滤器的trace过程,实际排查的时候也trace了一遍,但这诡异的时间消耗不是由这里过滤器产生的)?从名字上看,应该是tomcat加载jar包时的耗时,那么是加载了31个jar包的耗时,还是加载了jar包内的某些资源31次耗时呢?由于启动方式的不同,tomcat使用了不同的类去处理静态资源,所以没问题。

2022-10-23 08:59:54 301

原创 300万数据导入导出优化方案,从80s优化到8s

这次工作中遇到的问题也给我留下了深刻印象,同时也是我职业生涯添彩的一笔。最起码简历上可以写上你处理过上百万条数据的导入导出。最后说一下公司之前怎么做的,公司之前做法是限制了用户的下载数量每次最多只能有四个人同时下载,并且控制每个用户最大的导出数据最多只能是20w,与此同时他们也是使用的JDBC分批导入,但是并没有手动控制事务。控制同时下载人数我可以理解,但是控制下载数据最多为20w就显得有点鸡肋了。这也是我后期要解决的问题。

2022-10-23 08:58:21 1957

原创 isEmpty 和 isBlank 的用法区别

也许你两个都不知道,也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外,并不知道还有isAnyEmpty//isAnyBlank/的存在, come on ,让我们一起来探索这个工具类。

2022-10-23 08:56:56 148

原创 Spring Boot + Netty + WebSocket 实现消息推送

System.out.println(NettyServer.class + " 启动正在监听: " + cf.channel().localAddress());System.out.println(NettyServer.class + " 启动正在监听: " + cf.channel().localAddress());// 关闭服务器通道。// 关闭服务器通道。

2022-10-23 08:55:28 413

原创 分页 + 模糊查询 有坑!

不知道你有没有使用过Mysql的like语句,进行模糊查询?不知道你有没有将查询结果,进行分页处理?模糊查询,加上分页处理,会有意想不到的坑,不信我们继续往下看。我之前提供过一个品牌查询接口,给前端品牌选择控件使用的。当时为了性能考虑,怕前端控件因为一次性加载太多的品牌,而导致页面卡死。因此,对品牌查询接口做了分页处理。刚开始品牌表的数据比较少,没有出现什么问题。后来,产品加需求了,在品牌下拉选择控件中,让用户可以输入自定义品牌。

2022-10-23 08:32:31 703

原创 40 个 SpringBoot 常用注解:让生产力爆表!

本次课程总结了Spring Boot中常见的各类型注解的使用方式,让大家能够统一的对Spring Boot常用注解有一个全面的了解。

2022-10-23 08:25:56 365

原创 对外 API 接口,请把握这3 条原则,16 个小点

3、客户端拿到这个随机数后将其与appsecret拼接生appsecretStr,然后调用生成签名方法,传入appsecretStr,appkey,nonce,url(备注:可转大写,转小写,追加特殊字符,然后加密)进行非可逆加密(MD5/SHA1等),生成签名A。1、设计一个认证系统,专用于创建第三方接入应用的账号信息,用于生成appid,appkey和appsecret,然后发appkey和appsecret给第三方接入应用,用于做认证。5、单个接口针对IP限流(令牌桶限流,漏桶限流,计数器限流)

2022-10-23 08:23:30 1269 1

原创 SQL优化 20 连击

复合索引也称为联合索引,当我们创建一个联合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。如果字段的大小有变化,应用就会受到影响,因为它必须修改字段宽度。默认新增SQL有事务控制,导致每条都需要事务开启和事务提交,而批量处理是一次事务开启和提交,效率提升明显,达到一定量级,效果显著,平时看不出来。列经常被修改,而且每次被修改的数据的长度不同,这会引起“行迁移”现象,而这造成多余的I/O,是数据库设计中要尽力避免的,这种情况下用。

2022-10-23 08:03:28 342

原创 牢记16个有用的 SpringBoot 扩展接口

我们从这些的扩展点当中,大致可以窥视到整个bean的生命周期。在业务开发或者写中间件业务的时候,可以合理利用spring提供给我们的扩展点,在spring启动的各个阶段内做一些事情。以达到自定义初始化的目的。此篇总结,如果有错误或者疏漏的地方,恳请指正。

2022-10-23 07:43:05 1369

原创 在Redis分布式锁上,栽的8个跟头

在分布式系统中,由于 redis 分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。但不是说用了 redis 分布式锁,就可以高枕无忧了,如果没有用好或者用对,也会引来一些意想不到的问题。

2022-09-18 20:39:55 991

原创 系统架构性能问题诊断及优化思路

对于业务系统性能问题,我们经常想到的就是要扩展数据库的硬件性能,比如扩展CPU和内存,扩展集群,但是实际上可以看到很多应用的性能问题并不是硬件性能导致的,而是由于软件代码性能引起的。第二个点也是我们经常谈的比较多的点,就是我们的业务系统在进行架构设计的时候,特别是面对非功能性需求,我们都会谈到系统本身的数据库,中间件都采用了集群技术,能够做到弹性水平扩展。比如在我们最近的项目实施中,结合APM和服务链监控,我们可以快速的发现究竟是哪个服务调用出现了性能问题,或者快速的定位出哪个SQL语句有验证的性能问题。

2022-09-18 20:36:36 277

原创 一个注解搞定接口返回数据脱敏

下午惬意时光,突然产品小姐姐走到我面前,打断我短暂的摸鱼time,企图与我进行深入交流,还好我早有防备没有闪,打开瑞star的点单页面,暗示没有一杯coffee解决不了的需求,需求是某些接口返回的信息,涉及到敏感数据的必须进行脱敏操作,我思考一反,表示某问题,马上安排。

2022-09-18 17:39:13 626

原创 Redis 官方可视化工具

RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用 CLI 和连接的 Redis 进行交互(RedisInsight 内置对 Redis 模块支持)。官方传送门:https://docs.redis.com/latest/ri/RedisInsight 提供的功能:唯一支持 Redis Cluster 的 GUI 工具;可以基于 Browser 的界面来进行搜索键、查看和编辑数据;

2022-09-18 17:34:59 454

原创 6条shell小技巧

画外音:有些Linux命令,例如rm的-f参数可以强制忽略错误,此时脚本便无法捕捉到errexit,这样的参数在脚本里是不推荐使用的。在默认情况下,遇到不存在的变量,会忽略并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。需要注意的是,从bash3.2开始,通配符和正则表达式都不能用引号包裹了(所以,上面的例子,加了引号就是字面比较)。在默认情况下,遇到执行出错,会跳过并继续执行,而这往往不符合预期,加入该选项,可以避免恶果扩大,终止脚本的执行。同时,封装还能提高代码的可读性。

2022-09-18 17:19:45 423

原创 SpringBoot 监控统计:SQL监控、慢SQL记录、Spring监控、去广告

配置 Druid web 监控 filter(WebStatFilter):这个过滤器的作用就是统计 web 应用请求中所有的数据库信息,比如 发出的 sql 语句,sql 执行的时间、请求次数、请求的 url 地址、以及seesion 监控、数据库表的访问次数 等等。(2)数据源页面 是当前DataSource配置的基本信息,上述配置的Filter可以在里面找到,如果没有配置Filter(一些信息会无法统计,例如“SQL监控”,会无法获取JDBC相关的SQL执行信息)

2022-09-18 17:17:55 424

原创 Spring Boot 实现各种参数校验及实现原理

业务需求总是比框架提供的这些简单校验要复杂的多,我们可以自定义校验来满足我们的需求。自定义。

2022-09-18 17:15:50 320

原创 Kafka 集群架构原理 10 点介绍

但是,其无法做到真正的负载均衡,因为实际系统中的每个生产者产生的消息量及每个Broker的消息存储量都是不一样的,如果有些生产者产生的消息远多于其他生产者的话,那么会导致不同的Broker接收到的消息总数差异巨大,同时,生产者也无法实时感知到Broker的新增和删除。客户端将请求发送给Acceptor,broker里有3个processor的线程(默认是3),Acceptor不会对客户端的请求做任何的处理,而是封装成socketChannel,然后发送给3个processor线程,形成一个队列。

2022-09-18 17:14:06 106

原创 Spring Batch 批处理框架,真心强

它的意思就和图示的一样,由于我们一次batch的任务可能会有很多的数据读写操作,因此一条一条的处理并向数据库提交的话效率不会很高,因此spring batch提供了chunk这个概念,我们可以设定一个chunk size,spring batch 将一条一条处理数据,但不提交到数据库,只有当处理的数据数量达到chunk size设定的值得时候,才一起去commit.写的单位是可以配置的,我们可以一次写一条数据,也可以一次写一个chunk的数据,关于chunk下文会有专门的介绍。

2022-09-07 21:26:56 230

原创 45 个 git 合代码的经典操作场景

如果你需要删除推了的提交(pushed commits),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。这只能在没有推送之前有用. 如果你已经推了, 唯一安全能做的是, 那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);或者, 如果你推的这个分支是rebase-safe的 (例如:其它开发者不会从这个分支拉), 只需要使用。

2022-09-07 21:22:18 199

原创 全网显示 IP 归属地,可以考虑这个开源库

最近微博等平台都上线属地功能。下面,我就来讲讲,中是如何获取属地的,主要分为以下几步通过 HttpServletRequest 对象,获取用户的地址通过 IP 地址,获取对应的省份、城市首先需要写一个获取的工具类,因为每一次用户的请求,都会携带上请求的地址放到请求头中。这里有三个名词,分别是扩展头部,主要是为了让服务器获取访问用户的真实地址。每个地址,每个值通过逗号+空格分开,最左边是最原始客户端的地址,中间如果有多层代理,每⼀层代理会将连接它的客户端追加在右边。

2022-09-07 21:19:40 244

原创 Springboot 优雅停止服务的几种方法

以上这几种方法实现的话比较简单,但是真实工作中还需要考虑的点还很多,比如需要保护暴露的点不被别人利用,一般要加一些防火墙,或者只在内网使用,保证程序安全。在真实的工作中的时候第三种比较常用,程序中一般使用内存队列或线程池的时候最好要优雅的关机,将内存队列没有处理的保存起来或线程池中没处理完的程序处理完。但是因为停机的时候比较快,所以停服务的时候最好不要处理大量的数据操作,这样会影响程序停止。

2022-09-07 21:17:45 4779

原创 Binlog 的三个业务应用场景

随着业务的发展,系统开始拆分,总有一些表是各个业务都关注的表,但是对相关的字段的运用场景不同,所以这样一份元数据怎样更好的为各个系统服务就成了问题。很多系统依赖同一块重要数据,当这些数据发生变化的时候,需要调用其他相关系统的通知接口同步数据变化,或者mq消息告知变化并等待其主动同步。这样,我们就通过原始的订单数据异构到三个系统中,提供了丰富的数据访问功能。上面介绍了mysql中应用binlog的场景,而我们的业务可以伪装成master的slave节点,感知数据的变化,这就给了我们很多的业务运用空间。

2022-09-07 21:15:48 373

原创 Spring Cloud Gateway 整合 sentinel 实现流控熔断

在微服务架构中,网关层可以屏蔽外部服务直接对内部服务进行调用,对内部服务起到隔离保护的作用,网关限流,顾名思义,就是通过网关层对服务进行限流,从而达到保护后端服务的作用。商品服务不仅仅被网关层调用,还被内部订单服务调用,这时候如果仅仅在网关层限流,一旦大量的请求订单服务,比如大促秒杀,商品服务不做限流还是会被瞬间击垮。中,与正常的热点参数规则相隔离。因此需要根据公司业务场景对自己负责的服务也要进行限流兜底,最常见的方案:网关层集群限流+内部服务的单机限流兜底,这样才能保证不被流量冲垮。

2022-09-07 21:13:10 189

原创 深入Quartz,更优雅地管理你的定时任务

目录初识QuartzQuartz基础使用基于时间间隔的定时任务基于Cron表达式的定时任务Quartz解读JobTriggerSchedulerQuartz进阶使用多触发器的定时任务Job中注入BeanQuartz的持久化,需要的伙伴儿自取。

2022-09-07 21:08:01 170

原创 Nacos 配置中心用法举例

我们这篇文章介绍下 Nacos 作为配置中心的基本用法,首先我们先了解下为什么需要使用配置中心。

2022-08-31 20:58:04 311

原创 RabbitMQ消息重复消费场景及解决方案

这里介绍一下RabbitMQ重复消费的场景,以及如何解决消息重复消费的问题。注:本文只做粗略逻辑实现借鉴,实际业务场景需根据实际情况再做细化处理。

2022-08-31 20:53:53 1594

原创 加密后的数据如何进行模糊查询?

我们都知道加密后长度会增长,增长的这部分长度存储就是我们要花费的额外成本,典型的使用成本来换取速度,密文增长的幅度随着算法不同而不同以DES举例,13800138000加密前占11个字节,加密后的串HE9T75xNx6c5yLmS5l4r6Q==占24个字节,增长是2.18倍,所以一个优秀的算法是多么的重要,能为公司节省不少成本,但是话又说回来算法工程师的工资也不低,所以我也不知道是节省成本还是增加成本,哈哈哈…那我们为什么要对数据加密呢,直接不加密不是更好么!...

2022-08-31 20:52:45 334

原创 Spring 最常用的 7 大类注解

此注解使用在Spring的组件类上。此注解也可以使用在被@Configuration注解的类上,表示其中所有被@Bean注解的方法都会延迟初始化。当此注解用在Class上时,就创造了一个基础url,其所有的方法上的@RequestMapping都是在此url之上的。当在构造方法上使用此注解的时候,需要注意的一点就是一个类中只允许有一个构造方法使用此注解。此注解用在请求handler方法的参数上,用于将web请求中的属性(request attributes,是服务器放入的属性值)绑定到方法参数上。...

2022-08-31 20:50:42 113

原创 零侵入性:一个注解,优雅的实现循环重试功能

在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。本篇主要简单介绍了Springboot中的Retryable的使用,主要的适用场景和注意事项,当需要重试的时候还是很有用的。...

2022-08-31 20:38:15 55

原创 聊聊重试框架用Guava-Retry

spring-retry 和 guava-retry 工具都是线程安全的重试,能够支持并发业务场景的重试逻辑正确性。两者都很好的将正常方法和重试方法进行了解耦,可以设置超时时间,重试次数,间隔时间,监听结果,都是不错的框架但是明显感觉得到,guava-retry在使用上更便捷,更灵活,能根据方法返回值来判断是否重试,而Spring-retry只能根据抛出的异常来进行重试。...

2022-08-31 20:36:57 544

原创 被查询的列,要放到索引里

能够命中name索引,索引叶子节点存储了主键id,但sex字段必须回表查询才能获取到,不符合索引覆盖,需要再次通过id值扫码聚集索引获取sex字段,效率会降低。不管是SQL-Server官网,还是MySQL官网,都表达了:只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。能够命中name索引,索引叶子节点存储了主键id,通过name的索引树即可获取id和name,无需回表,符合索引覆盖,效率较高。(2)name为KEY,普通索引,叶子节点存储PK值,即id;...

2022-08-29 21:54:39 255 1

微服务那些事儿

微服务那些事儿 近儿年,微服务的兴起对从事资讯科技的各级别、各功能、各种技术的人员来说是 重大挑战,也是 个突破的机会。

2018-02-26

Docker开发指南201704

Docker 容器轻量和可移植的特性尤其适用于动态和分布式的环境,它的兴起给软件开发流程带来了一场革命。

2018-02-13

强化学习在阿里的技术演进与业务创新

强化学习在阿里的技术演进与业务创新 强化学习在阿里的技术演进与业务创新

2018-02-07

Git权威指南带书签完整版

Git权威指南带书签完整版 Git权威指南带书签完整版 Git权威指南带书签完整版

2018-01-30

一键断开redis服务端的的所有客户端链接

切换redis后客户端长连接仍旧与旧的服务端保持连接,使用此程序可以从旧的redis服务端断开所有客户端链接。

2018-01-24

阿里巴巴9年双11

阿里巴巴9年双11,互联网超级工程。AI智能搜索。阿里的双 11 是一次全球商业、科技、数据、智能的大协同,是一个 商业社会的大协同,更是一个技术的大协同,是名副其实的世界互联网技 术的超级工程。

2018-01-23

阿里巴巴2016双11背后的技术

2016 天猫双 11 全球狂欢节活动圆满落幕,来自全球的消费者一共创造了 1207 亿 的成交额,在这个过程中整体系统平稳运行,用户购物、支付体验流畅,物流包裹也井 然有序地送到消费者手中,这背后是阿里领先的交易、支付、物流系统,以及强大的计 算平台、海量数据和智能算法的共同支撑。在双 11 零点开始的半个小时里,超过 6 千 万的用户使用手机来同时参与了这次活动,在零点的流量高峰,创造了每秒交易峰值 17.5 万笔,每秒支付峰值 12 万笔的新纪录,而 2009 年的第一次双 11,交易峰值仅为 400 笔每秒,支付峰值仅为 200 笔每秒,八年增长数百倍。

2018-01-19

Java系统获取最近修改代码的class文件

根据class的编译时间,获取指定时间段内修改的java文件class

2017-06-16

Java数据结构概述图表

2017-02-16

空空如也

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

TA关注的人

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