自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 Arthas线上排查问题流程

连接curl -O https://arthas.aliyun.com/arthas-boot.jar【wget https://arthas.aliyun.com/arthas-boot.jar】.../jdk/bin/java -jar arthas-boot.jar 22336【最好在这个目录启动,port可选】2、trace 查找时间运行过长 或者某个方法运行的情况。说明上次的连接还在挂着,没有exit或者stop。最后重启arthas-boot.jar 选择程序。,需要先进入,再stop;

2024-03-29 13:13:02 445

原创 mysql innodb一些知识点

在MySQL事务中,只要开始了一次事务,就会自动加上一个共享锁(Shared Lock)。如果在事务中需要更新某个数据对象,那么MySQL会将该数据对象的共享锁升级为排他锁(Exclusive Lock),这可以确保在其他事务中对该数据对象的访问被阻塞,直到当前事务提交或回滚。mvcc中,可以有多个事物版本,而事物又伴随着锁(innodb),和读已提交不一样,可重复读一个事物内的多查询是在一个视图内完成,redo log:重做日志,崩溃恢复,持久性 ,引擎层实现,,数据备份,Server层实现,

2023-07-29 14:52:03 333

原创 Java你们的限流是怎么做的

在Java中,限流(Rate Limiting)是一种控制服务访问速率的技术,以防止服务过载或被滥用。令牌桶算法是一种基于令牌(token)的限流方法,令牌以固定的速率生成,并存储在桶中。当有请求到达时,先从桶中获取令牌,如果获取到令牌,则允许访问;漏桶算法是一种基于固定速率的限流方法,请求以任意速率到达,然后放入漏桶。漏桶以固定速率处理请求,当请求速率超过漏桶的处理速率时,多余的请求将被丢弃。在指定的时间窗口内,限制访问次数。当访问次数达到阈值时,拒绝后续访问。根据实际需求,你可以选择合适的限流算法。

2023-07-20 20:59:15 487

原创 redis集群故障的发现与转移

Sentinel 系统通过向集群发送心跳包来检测节点状态,并在检测到故障时与其他 Sentinel 节点协同工作,以确定新的主节点并执行故障转移。b. 集群会选举一个新的主节点来接管故障主节点的槽(slot)。3. 故障转移:当一个主节点发生故障时,集群会执行故障转移以维护系统的高可用性。c. 新的主节点开始复制故障主节点的数据,以便在故障转移完成后提供完整的数据服务。d. 集群中的其他节点更新它们的配置,以将故障主节点的槽重新映射到新的主节点。a. 集群中的其他节点会检测到主节点已下线。

2023-07-13 21:27:33 702

原创 redis集群模式是如何保证高可用和动态扩容的?

集群中的其他节点会选举出一个新的主节点,并将原主节点的数据重新分配给其他节点。节点监控:Redis集群会定期监控各个节点的状态,并及时发现故障节点或网络异常情况。一旦发现异常,集群会立即采取相应的措施,例如触发故障转移操作或重启节点,以保证整个集群的稳定运行。节点复制:每个节点都可以配置多个从节点,从节点通过复制主节点的数据来实现数据冗余和备份。当主节点不可用时,从节点可以接替成为主节点,保证数据的持久可用性。数据分片:Redis集群将数据分片存储在多个节点上,每个节点负责管理其中一部分数据。

2023-07-03 21:14:13 836

原创 mysq在RR级别怎么解决不可重复读和幻读

不可重复读: 事务1读取一行,事务2然后修改或删除该行数据并且提交事务,事务1再次读取结果不一样;幻读:事务1按条件读取查询数据,事务2按照同样的条件新增一条或多条数据并且提交事务,事务1再次读取结果不一致版本链:对该条记录每次更新后,都会将旧值放到一条undo日志中,随着更新次数的增加,最新的版本加上之前的所有旧版本就会被属性连接成一个链表,这个链表就是版本链版本链的头节点就是当前记录最新的值每次使用update对记录进行改动时,都会记录一条undo日志,每条undo日志也都有一个属性(insert。

2023-06-11 15:12:48 822

原创 Using index Using where和 Using where Using index有何区别

查询的列被索引覆盖,并且where筛选条件是索引列之一但是不是索引的不是前导列,Extra中为Using where;查询的列被索引覆盖,数据都是先通过索引查询出来的索引覆盖数据,然后经过条件过滤得到最终数据;查询的列被索引覆盖,并且where筛选条件是索引的是前导列,Extra中为Using index。查询的列未被索引覆盖,where筛选条件非索引的前导列,Extra中为Using where。,数据都是先通过索引查询出来的索引覆盖数据,然后经过条件过滤得到最终数据;查询的列未被索引全覆盖,

2023-06-07 22:44:34 2457 1

原创 rocketMQ的架构原理和读写逻辑

2、Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。【当broker服务启动后,会向namesrv注册信息,比如broker中的 主题、消费偏移量、队列、ip、端口等,由broker的心跳发送到namesrv。ConsumeQueue:消息消费队列,引入的目的主要是提高消息消费的性能,ConsumeQueue(逻辑消费队列)作为消费消息的索引,保存了指定Topic下的队列消息在CommitLog中的起始物理偏移量offset,消息大小size和消息Tag的HashCode值。

2023-05-13 11:53:46 461

转载 优化高并发的常见十种解决办法

大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗 CPU,使得网站响应能力下降。对于大部分公司,会选择廉价有效的方法扩展整个系统的架构,来增加服务器的吞吐量和处理能力,以及承载能力。普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻底解决性能问题。当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,很有可能会死在那儿了。10.控制大文件的下载。

2023-04-30 22:07:47 2230

原创 ShardingJDBC的实核心流程和商户商家订单的分片实现

3、批量拆分:当进行批量操作时,比如IN操作,假设两个表根据user_id的奇偶数来分片,执行SQL为select * from user where user_id in (1,2,3,4).如果不进行拆分,就会让这个SQL再两个表中都执行,很显然筛选的数据就多了,性能就差了,虽然对于结果没有影响。由于从数据库中返回的结果集是逐条返回的,并不需要将所有的数据一次性加载至内存中,因此,在进行结果归并时,沿用数据库返回结果集的方式进行归并,能够极大减少内存的消耗,是归并方式的优先选择。

2023-04-30 22:02:58 620

原创 redis 分布式锁实现

3、锁可以续期,应该怎么续期?通过一个线程,比较锁key的对应的value(uuid)在一定时间内是发生变化(获取定时查看锁剩余时间,小于10s,重新设置时间,类似watch机制),执行三次即可;4、删除锁必须当前线程操作,threadlocal获取和存放的value值比较;5、删除锁之前的获取比较,和删除操作应该也是原子操作,建议使用lua脚本;2、可重入的问题:判断锁key的对应的value(uuid)是否相等;1、锁的获取和锁的过期时间设置需要原子操作;

2023-04-26 22:21:57 91

原创 synchronized原理:

抢占资源之前都先放到contentList,然后放到entryList,才有资格去获取锁,A线程执行monitorEnter,成功获取锁则对count+1,重入之后,继续累加,执行完任务之后【执行过程中,若调用await方法,则放进waitset集合内,需要被notify才行】,最后执行monitorExit进行释放锁。(1) 如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者。//处于wait状态的线程,会被加入到_WaitSet。

2023-04-22 17:28:09 455

原创 netty线程模型和扩容机制

Netty 是一个 基于 NIO 的异步、事件驱动的网络应用程序框架(客户端服务器框架),使用它可以快速简单地开发网络应用程序

2023-03-26 21:48:31 135

原创 dubbo的SPI机制和服务暴露,引用原理

dubbo总结

2023-03-26 21:42:00 467

转载 利用多线程实现报表的高效导出

报表的优化主要是涉及两个方面,一个是SQL和数据库层面的优化,另一个就是代码层面的优化了,本文主要讲述代码层面利用多线程处理的一点小总结。多线程实现的基础知识实现多线程的方式继承Thread类创建线程 实现Runnable接口创建线程 实现Callable接口创建线程 线程池的实现JDK自带的五种线程池的使用场景 newSingleThreadExecutor:一个单线程的线程池,可以用于需要保证顺序执行的场景,并且只有一个线程在执行。 newFixedThreadPoo

2021-07-05 23:29:06 404 1

转载 接口的幂等性,如何保证

最近跟朋友聊起这个话题,想深入了解下,于是学习总结,记录下来,此文章参考以下博客综合而来表示感谢:参考:分布式系统接口幂等性参考:高并发的核心技术-幂等的实现方案参考:什么是分布式系统中的幂等性1. 接口调用存在的问题 现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有可能在服务器处理完毕后返回结果的时候挂掉,这个时候用户端...

2021-06-08 23:39:38 668

转载 redis缓存和数据库双写一致性问题

今天陪大家来一起研究下redis缓存和数据库双写一致性问题我相信redis对于大多数程序猿并不陌生,大家在日常使用中肯定会遇到双写一直性问题,当然对于这个问题的解决方案大家肯定都各有见解,那么今天我就给大家总结一下常见解决方案先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的终极解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然..

2021-06-08 23:38:05 301

转载 SpringCloud常用面试题整理

什么是SpringBoot?1、用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件)2、创建独立的spring引用程序main方法运行3、嵌入Tomcat无需部署war包,直接打成jar包nohup java -jar – & 启动就好4、简化了maven的配置4、自动配置spring添加对应的starter自动化配置SpringBoot常用的starter:1、spring-boot-starter-web(嵌入Tomcat和web开发需

2021-05-26 21:25:56 192

原创 Mybaits 运行原理流程时序图

mybatis是目前应用常见的映射框架,用了工厂模式,代理模式,模板模式,装饰器模式等设计模式;基本例子 /** * 通过 SqlSession.getMapper(XXXMapper.class) 接口方式 * @throws IOException */ @Test public void testSelect() throws IOException { String resource = "mybatis-config.xml

2021-03-09 23:03:40 236

转载 Spring事务的7种传播行为

本文主要介绍下Spring事务中的传播行为。事务传播行为介绍Spring中的7个事务传播行为:事务行为 说明PROPAGATION_REQUIRED 支持当前事务,假设当前没有事务。就新建一个事务PROPAGATION_SUPPORTS 支持当前事务,假设当前没有事务,就以非事务方式运行PROPAGATION_MANDATORY 支持当前事务,假设当前没有事务,就抛出异常PROPAGATION_REQUIRES_NEW 新建事务,假设当前存在事务。把当前事务挂...

2021-03-04 22:24:18 422 1

原创 获取pom文件的内容:例如版本号

在application.yml或者application.properties上用@project.XXX@例如版本号 project: version: @project.version@或 project.version=@project.version@但是前提 还需要在当前的pom文件中添加如下配置:1、plugins下面的<plugin> <groupId>org.apache.maven.plugins</.

2020-09-23 15:09:24 4095 1

原创 常用的地址

pdf转换:https://www.ilovepdf.com/图片Upload:https://sm.ms/

2020-09-15 18:22:20 448

原创 解析url图片并 进行邮件的附件发送:示例

public class MailTest { public static void main(String[] args) throws Exception { String localImgUrl = "https://cdn-jdo-test.jidouauto.com/jdo/media_img/20200609/n5DkF51591692476.jpg"; // 构造URL URL url = new URL(localImgUrl);...

2020-09-15 16:56:18 813

转载 Eureka工作流程和原理

Eureka 工作原理上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。Eureka 核心概念回到上节的服务注册调用示意图,服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka

2020-09-07 23:10:37 743

转载 RabbitMQ如何保证消息发送成功

1. 本篇概要RabbitMQ针对这个问题,提供了以下几个机制来解决:生产者确认 持久化 手动Ack本篇博客我们先讲解下生产者确认机制,剩余的机制后续单独写博客进行讲解。2. 生产者确认要想保证消息不丢失,首先我们得保证生产者能成功的将消息发送到RabbitMQ服务器。但在之前的示例中,当生产者将消息发送出去之后,消息到底有没有正确地到达服务器呢?如果不进行特殊配置,默认情况下发送消息的操作是不会返回任何消息给生产者的,也就是默认情况下生产者是不知道消息有没有正确的到达服务器。

2020-08-30 23:57:21 5922 1

转载 数据库的btree和hash索引

关系型数据库中,索引大多采用B/B+树来作为存储结构,而全文搜索引擎的索引则主要采用hash的存储结构,这两种数据结构有什么区别?如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;从示意图中也能看到,如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范...

2020-08-29 11:25:19 629

转载 常用的设计模式

单例模式简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成多个对象。单例模式实现起来也很容易,直接看demo吧publicclassSingleton{privatestaticSingleton singleton;privateSingleto...

2020-08-27 22:16:55 109

原创 mq消息的使用机制,几种工作模式,和保证消息的不丢失策略

一:简单使用机制参考:https://www.cnblogs.com/fdzfd/p/9319481.html1:消息类型Map String(含json字符串类型)2:处理方法2.1 Map消息 如果发送的消息类型是map类型,可以通过SerializationUtils.deserialize方法将消息转换成map类型。2.2 字符串类型(含json格式) 通过String类的构造函数接收byte[]类型的消息数据,获得jsonStr后可以...

2020-08-26 23:52:32 1571

原创 Apollo配置中心动态的刷新和获取配置

1、某些简单的属性可以直接使用@Value注解的配置会自动刷新配置2、多个管理(或者说复杂的配置各种配置)加一个配置类即可@Component("systemConfig")@ConfigurationProperties(prefix = "cword")@RefreshScope@EnableApolloConfig("cword")public class SystemConfig { private Resource filePath; private Reso

2020-08-25 23:50:19 5864

原创 如何实现乐观锁

场景:很多情况下我们分布式微服务都需要用到分布式锁!但是第三方分布式锁插件不一定可靠。redisson 是常用的分布式加锁方式!但是难免有redis不可用的情况!这时候需要利用乐观锁。 方法:表字段 加一个版本号,或者别的字段也可以!加版本号,可以知道控制顺序而已!在update 的时候可以where后面加上version= oldVersion。数据库,在任何并发的情况下,update 成功就是 1 失败就是 0 .可以根据返回的 1 ,0 做相应的处理!使用 MySQL 5.7 做测试,数据库.

2020-08-25 23:34:50 3197 5

原创 我们重写一个对象的时候为什么要同时重写hashcode()和equals()方法

在创建的类不重写hashCode()和equals() 方法时,默认使用 java 提供的 java.lang.Object 下的 hashCode()和equals() 方法。> 注意:Object 的public boolean equals(Object obj)方法主要是对非空对象的引用地址的判断相同才返回true,而非对象本身的字符串内容或数值是否相同。简而言之,当且仅当 值A 和 值B 都是引用自同一个对象时,此方法才会返回true;所以,当我们重写一个对象,重写了equals()方

2020-08-24 21:01:40 410

转载 理解java线程的中断(interrupt)-总结的很到位啊

这个总结的可以:一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等。 所以你看到Thread.suspend, Thread.stop等方法都被Deprecated了那么不能直接把一个线程搞挂掉, 但有时候又有必要让一个线程死掉, 或者让它结束某种等待的状态 该怎么办呢?一个比较优雅而安全的做法是:使用等待/通知机制或者给那个线程一个中断信号, 让它自己决定该怎么办。等待/通过机制在另一篇博客中详细的介

2020-08-23 23:53:53 653

转载 dubbo的provider和consumer的配置

在dubbo的provider和consumer的配置文件中,如果都配置了timeout的超时时间,dubbo默认以consumer中配置的时间为准经验证是这样的,provider.xml的配置:<dubbo:service timeout="4000" retries="0" interface="com.dingding.tms.bms.service.BillingZfbCodOrderService" ref="billingZfbCodOrderService" registry

2020-08-23 23:11:28 3388

原创 新一代的注册中心NACOS服务的介绍

Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。 动态配置管理 动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序和服务的需要,这使配置更改更加高效和灵活。 动态DNS服务 Nacos支持加权路由,使您可以更轻松地在数据中心的生产环境中实施中间层负载平衡,

2020-08-23 22:26:00 230

转载 Spring容器启动时初始化一些信息:@postConstruct

@PostConstruct和@PreDestroyimport javax.annotation.PostConstruct;import javax.annotation.PreDestroy;@PostConstruct和@PreDestroy是java自己提供的注解,不是Spring提供的注解@PostConstruct@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次。被@PostConstruct修饰的方法会在构造函...

2020-08-23 20:50:49 354

原创 设计模式详解,来自知乎;

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。https://www.zhihu.com/question/308850392/answer/1324509357...

2020-08-23 20:26:43 444

转载 对微服务的认识和理解

微服务是一个近些年说的非常热的概念,尤其在互联网的大背景下,微服务的理论有机会被广泛实践。但是在实践过程中,大家对微服务的理解确大相径庭,到底要怎样做才能真正掌握微服务的架构理论呢?通过此文笔者想和大家分享一下对微服务架构的认识和理解。什么是微服务微服务的出现给我们的系统带来了很多好处,比如子系统与子系统之间的技术异构,单个系统的弹性扩容等。那怎样的服务才算是微服务呢?我们先看看它的定义:微服务是一种分布式系统解决方案,推动细粒度服务的使用,每个服务都可以独立运行, 且这些服务可以协同工作。微服务的

2020-08-22 17:56:00 1846

转载 分布式一致性和CAP Base理论

问题的提出在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景。1、火车站售票假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车 票,然后拿着车票去检票口,再坐上火车,开始一段美好的旅行----一切似乎都是那么和谐。想象一下,如果他选择的目的地是杭州,而某一趟开往杭州的火车 只剩下最后一张车票,可能在同一时刻,不同售票窗口的另一位乘客也购买了同一张车票。假如说售票系统没有进行一致性的保障,两人都购票成功了。而在检票口 检票的时候,其中一

2020-08-20 23:22:16 222

原创 Spring中Bean的作用域、是否线程安全

Spring 的 bean 作用域(scope)类型  1、singleton:单例,默认作用域。  2、prototype:原型,每次创建一个新对象。  3、request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。  4、session:会话,同一个会话共享一个实例,不同会话使用不用的实例。  5、global-session:全局会话,所有会话共享一个实例。Bean是否线程安全:最终回答:Spring中的Bean是否线程

2020-08-16 00:06:49 926 4

转载 AbstractQueuedSynchronizer的源码详解

一、概述  谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!  类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。  以下是本文的目录大纲: 概述 框架 源码详解 简单应用   若有不正之处,请谅解和批评指正,不胜感激。 

2020-07-09 11:53:25 194

空空如也

空空如也

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

TA关注的人

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