自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot+flowable快速实现工作流

总览 使用flowable自带的flowable-ui制作流程图 使用springboot开发流程使用的接口完成流程的业务功能 一、flowable-ui部署运行flowable-6.6.0 运行 官方demo参考文档:https://flowable.com/open-source/docs/bpmn/ch14-Applications/1、从官网下载flowable-6.6.0 :https://github.com/flowable/flowable-engi.

2022-02-11 17:37:07 464

原创 MySQL 的“回表”

小伙伴们在面试的时候,有一个特别常见的问题,那就是数据库的回表。什么是回表?为什么需要回表?今天就来和大家聊一聊这个话题。1. 索引结构要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,B+Tree 嘛!B+Tree 是什么?那你得先明白什么是 B-Tree,来看如下一张图:前面是 B-Tree,后面是 B+Tree,两者的区别在于: B-Tree 中,所有节点都会带有指向具体记录的指针;B+Tree 中只有叶子结点会带有指

2022-02-09 17:52:00 869

原创 ZooKeeper源码分析系列一开篇基础知识剖析

一、ZooKeeper总体介绍1.1、什么是zookeeperZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务+存储系统,同时是一款世界级的优秀开源产品,在大数据生态系统中 Hadoop、Storm、HBase、Spark、Flink、Kafka 随处都是 ZooKeeper的应用场景。特别是在粗粒度分布式锁、分布式选主、主备高可用切换等不需要高 TPS 的场景下有不可替代的作用。1.2、ZooKeeper 应用场景很多分布式协调服务都可以用 ZooKee...

2022-01-28 15:33:14 1255

原创 高并发架构初步详解

什么是统一异常处理高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案。在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家。服务器架构业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。一个可以支持高

2022-01-28 15:28:57 2481 1

原创 教你如何使用Gateway搭建网关服务及实现动态路由

就是像图中原理一样,哈哈哈~~~~~~~~网关作为微服务中非常重要的一部分,是必须要掌握的;本文记录一下我是如何使用Gateway搭建网关服务及实现动态路由的,帮助大家学习如何快速搭建一个网关服务,了解路由相关配置,鉴权的流程及业务处理,有兴趣的一定看到最后,非常适合没接触过网关服务的同学当作入门教程。搭建服务框架 SpringBoot 2.1 <parent><groupId>org.springframework.boot</groupI...

2022-01-28 15:25:13 4975

原创 JVM调优的几种场景

最近很多小伙伴跟我说,自己学了不少JVM的调优知识,但是在实际工作中却不知道何时对JVM进行调优。今天,我就为大家介绍几种JVM调优的场景。在阅读本文时,假定大家已经了解了运行时的数据区域和常用的垃圾回收算法,也了解了Hotspot支持的垃圾回收器。cpu占用过高cpu占用过高要分情况讨论,是不是业务上在搞活动,突然有大批的流量进来,而且活动结束后cpu占用率就下降了,如果是这种情况其实可以不用太关心,因为请求越多,需要处理的线程数越多,这是正常的现象。话说回来,如果你的服务器配置本...

2022-01-28 15:19:51 158

原创 【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问

Spring Cloud架构体系中,Eureka是一个至关重要的组件,它扮演着微服务注册中心的角色,所有的服务注册与服务发现,都是依赖Eureka的。不少初学Spring Cloud的朋友在落地公司生产环境部署时,经常会问: Eureka Server到底要部署几台机器? 我们的系统那么多服务,到底会对Eureka Server产生多大的访问压力? Eureka Server能不能抗住一个大型系统的访问压力? 如果你也有这些疑问,别着急!咱们这就一起去看看,

2022-01-28 14:56:34 82

原创 springcloud运行流程

CAP理论是分布式架构中重要理论一致性(Consistency) (所有节点在同一时间具有相同的数据)可用性(Availability) (保证每个请求不管成功或者失败都有响应)分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)1. 在保证C和P的情况下为了保证数据一致性,data1需要将数据复制给data2,即data1和data2需要进行通信。但是由于网络是不可靠的,我们系统有保证了分区容忍性,也就是说这个系统...

2022-01-28 12:11:24 1950

原创 rabbitMQ消失丢失处理

生产者弄丢了数据1.可以选择用rabbitmq提供的事务功能,在生产者发送数据之前开启rabbitmq事务(channel.txSelect),然后发送消息,如果消息没有成功被rabbitmq接收到,那么生产者会收到异常报错,此时就可以回滚事务(channel.txRollback),然后重试发送消息;如果收到了消息,那么可以提交事务(channel.txCommit)。但是问题是,开始rabbitmq事务机制,基本上吞吐量会下来,因为太耗性能。2.(推荐)可以开启confirm模式,在生产者那里设

2022-01-28 11:58:16 1984

原创 如何保证KafKa消息不丢失

1.消息要持久化或者是添加消息确认机制理解:1.服务端:保证Brock所有副本同步unclean.leader.election.enable = false我们要设置broker中的一个配置项,去保证副本之间的数据同步,同时我们在producer将消息投递到服务器的时候,我们需要将消息进行持久化,也就是说我们要去同步到硬盘,注意同步到硬盘过程中,会有同步刷盘和异步刷盘,选择同步刷盘消息一定不会丢失,就算丢失了我们也可以即使补偿,但是选择异步刷盘的话,这个时候消息就有一定的丢失的概率,网上有

2022-05-12 12:05:01 599

原创 HashMap的工作原理

HashMap主要是用来处理键值对数据,随着JDK版本的更新,JDK1.8对HashMap的底层也做了一些优化,HashMap是基于哈希表对Map接口的实现类,它的特点是访问数据速度快,并且不是顺序来遍历的,HashMap提供所有的可选的映射操作但是不能保证映射顺序不变并且允许插入空值和空键,HashMap本身并不是线程安全的,当存在多线程同时写入的时候可能会导致数据不一致的情况1.HashMap中的关键属性第一个属性loadFactor它是负载因子,默认值是0.75,表示在扩容前HashMap

2022-05-12 12:04:28 2155

原创 Spring Boot自动装配原理

SpringBoot自动装配主要是基于注解编程和约定优于配置的思想来进行设计的,这种装配就是由Spring自动的把其他组建中的Bean装载到IOC容器中,不需要开发人员再去配置文件中添加大量的配置文件,我们只需要在SpringBoot的启动类上添加一个@SpringBootApplication的一个注解,这样的话就可以开启自动装配,这种自动装配的思想在Spring3.x以后就开始支持了,我们只要在类上添加一个加做@Enable的一个注解就可以了,只是没有像SpringBoot这样全面的去设计,因此Spri

2022-05-12 12:03:41 235

原创 redis缓存雪崩和缓存穿透

1.缓存雪崩就是存储在缓存里面的大量数据,在同一个时刻全部过期,原本缓存组件能够抗住大部分流量,全部请求到了数据库,从来导致数据压力增大,造成数据库服务器的奔溃的一种现象,导致缓存雪崩的原因,我认为有几个方面,第一个是中间宕机,当然可以对缓存中间件做高可用集群来避免,其次就是缓存中里面的大部分key都设置了相同的过期时间,导致同一时刻这些key都过期了,所以对这样的情况下,失效时间里面区增加1-5分钟的随机值,从来区避免同时失效的一个问题2.缓存穿透表示的是短时间内,有大量的不存在的key,请求

2022-05-12 12:02:35 180

原创 innodb和myisam区别

innodb特点1.支持事务处理、ACID事务特性;2.实现了SQL标准的四种隔离级别;3.支持行级锁和外键约束;4.可以利用事务日志进行数据恢复myisam特点1.高性能读取;2.因为它保存了表的行数,当使用COUNT统计时不会扫描全表;...

2022-05-12 11:58:11 109

原创 spring的生命周期

Spring对bean进行实例化,默认bean是单例; Spring对bean进行依赖注入; 如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法; 如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来; 如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的

2022-05-12 11:57:09 96

原创 RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总

MQ框架非常之多,比较流行的有RabbitMq、ActiveMq、ZeroMq、kafka。这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求。下面我列出这些MQ之间的对比数据和资料。第一部分:RabbitMQ,ActiveMq,ZeroMq比较1、 TPS比较 一ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。这个结论来自于以下这篇文章。http://blog.x-aeon.com/2013/04/10/a-quick-message-queue-benc..

2022-05-12 11:55:25 281

原创 WebSocket + SpringBoot + VUE实现后端实时向前端推送消息

一、目的众所周知,正常来说在前后端通信中,后端往往处于一个被动的状态,对前端的请求作出对应的响应。但有的时候我们会遇到需要后端前前端推送数据的需求,比如消息、邮件等的推送。这个时候,实现的一种方式是使用webSocket,在前后端之间建立唯一的通信连接。二、小知识1.WebSocket连接用的是ws,而不是http2.WebSocket在连接期间是一直保留的三、核心代码1.后端依赖 <dependency> <groupId>...

2022-05-12 11:47:05 3412

原创 大文件上传:秒传、断点续传、分片上传

前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有比较好的上传体验呢,答案有的,就是下边要介绍的几种上传方式详细教程秒传1、什么是秒传通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文

2022-02-23 10:04:41 805

原创 对标 Kafka,消息中间件新秀 Pulsar 了解一下

这两年pulsar发展比较快,有好多大公司引入了pulsar,相关的资料和课程也多了,今天一起来了解一下pulsar这款中间件。下图是几款消息中间件的历史:2012年pulsar在Yahoo内部开发,2016年开源并捐献给Apache,2018成为Apache顶级项目。1架构pulsar的架构图如下:总结一下,pulsar有下面的几个特性。1.1 计算存储分离pulsar采用计算和存储相分离的架构,Broker集群负责把producer发出的消息发送给consumer,同

2022-02-09 17:31:31 1929

原创 mybatis的解析和运行原理

mybatis的解析和运行原理1.读取配置文件缓存到configuration对象,用以创建sqlsessionfactory2.sqlsession的执行过程构建sqlsessionfactory过程sqlsessionfactory是mybatis的核心类之一,核心接口sqlsession第一步:通过org.apache.ibatis.builder.xml.XMLConfigBuilder解析配置的XML文件,读取内容存入org.apache.ibatis.session.Co

2022-02-09 17:21:29 312

原创 十大管理要点及思路

整体管理1.制定项目章程 2.制定项目管理计划 3.指导和管理项目执行 4.监督和控制项目工作5.整体变更管理 6.项目收尾成本管理1.制定成本管理计划 2.成本估算 3.成本预算 4.成本控制质量管理1.质量规划 2.质量保证 3.质量控制进度管理1.制定进度管理计划 2.活动定义 3.活动排序 4.活动资源估算 5.历史资源估算6.制定进度计划 7.进度控制沟通管理1.制定沟通管理计划 2.管理沟通 3.控制沟通范围管理1.范围管理

2022-02-09 17:21:03 1804

原创 MySQL 跨库分页/ 分表分页/ 跨库分页

当业务数据达到一定量级(比如:mysql单表记录量>1千万)后,通常会考虑“分库分表”将数据分散到不同的库或表中,这样可以大大提高读/写性能。但是问题来了,对于 select * from tablelimit offset , pagesize这种分页方式,原来一条语句就可以简单搞定的事情会变得很复杂,本文将与大家一起探讨分库分表后"分页"面临的新问题。| 分表对分页的影响比如有一张表,里面有8条记录(为简单起见,假设该表上只有1个自增ID),数学上可以抽象成1个(有序)数列(注:为方便..

2022-01-28 15:39:50 1440

原创 HashMap 夺命二十一问

1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transientNode<K,V>\[\]table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry接口)实现,HashMap 通过 put & get 方法存储和获取。存储对象时,将 K/V 键值传给...

2022-01-28 15:21:14 119

原创 深入Java线程池:从设计思想到源码解读

初识线程池我们知道,线程的创建和销毁都需要映射到操作系统,因此其代价是比较高昂的。出于避免频繁创建、销毁线程以及方便线程管理的需要,线程池应运而生。线程池优势 降低资源消耗:线程池通常会维护一些线程(数量为 corePoolSize),这些线程被重复使用来执行不同的任务,任务完成后不会销毁。在待处理任务量很大的时候,通过对线程资源的复用,避免了线程的频繁创建与销毁,从而降低了系统资源消耗。 提高响应速度:由于线程池维护了一批 alive 状态的线程,当任务到达时,不需要再创建...

2022-01-28 15:16:56 85

原创 SQL查找是否“存在“,优化解决方案

根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的count# 目前多数人的写法多次REVIEW代码时,发现如下现象:业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下 ##### SQL写法:SELECT count(*) FROM

2022-01-28 15:07:24 485

原创 mysql 之索引失效的10种场景

不知道你在实际工作中,有没有遇到过下面的这两种情况: 明明在某个字段上加了索引,但实际上并没有生效。 索引有时候生效了,有时候没有生效。 今天就跟大家一起聊聊,mysql数据库索引失效的10种场景,给曾经踩过坑,或者即将要踩坑的朋友们一个参考。1. 准备工作所谓空口无凭,如果我直接把索引失效的这些场景丢出来,可能没有任何说服力。所以,我决定建表和造数据,给大家一步步演示效果,尽量做到有理有据。我相信,如果大家耐心的看完这篇文章,一定会有很多收获的。1.1 创建us

2022-01-28 15:04:11 706

原创 教你怎么快速了解Spring Cloud底层原理,看完就懂的

概述毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。

2022-01-28 14:55:12 195

原创 快速提升性能的SQL语句之mysql

本文会提到 52 条 SQL 语句性能优化策略。1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引。2、应尽量避免在WHERE子句中对字段进行NULL值判断,创建表时 NULL 是默认值,但大多数时候应该使用 NOT NULL,或者使用一个特殊的值,如 0,-1 作为默认值。3、应尽量避免在WHERE子句中使用 != 或 <> 操作符。MySQL 只有对以下操作符才使用索引:<,<=,=,&g...

2022-01-28 14:52:05 90

原创 详解TCP 三次握手和四次挥手

任 TCP 虐我千百遍,我仍待 TCP 如初恋。过去不会没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧!1、TCP 基本认识2、TCP 连接建立3、TCP 连接断开4、Socket 编程TCP 基本认识瞧瞧 TCP 头格式我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。TCP 头格式序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次...

2022-01-28 14:50:19 3563 4

原创 数据库事物ACID特性

原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事物在执行过程中发生错误,会被回滚事务开始前的状态,就像事务从来没有执行过一样一致性:指一个事务可以改变封装状态。事务必须始终保持系统处于一致状态隔离性:它是两个事务之间的隔离程度持久性:在事务完成以后,该事务对数据库所做的更改便持久保存在数据库之中,并不会被回滚隔离级别脏读、读/写提交、可重复读、序列化脏读:事务一可以读取事务二未提交的事务,这样的场景被称为脏读。读/写提交:就是说

2022-01-28 12:15:22 298

原创 接口和抽象类的区别

1.抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰2.抽象方法必须为public3.抽象类不能用来创建对象4.如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类...

2022-01-28 12:13:03 45

原创 jdk1.8的特性

1. jdk1.8的特性答:1.default关键字,主要意义是定义一个默认方法,也就是说这个接口的实现类实现了这个接口之后,不用管这个default修饰的方法,也可以直接调用2.Lambda表达式,使用了函数式编程,允许把函数本身作为参数传入另一个函数,还允许返回一个函数3.函数式接口,jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错4.方法与构造函数引用,jdk1.8提供了另外一种调用方式双冒号::...

2022-01-28 12:10:01 590

原创 jvm详解

1.JVM JDK 和 JRE 最详细通俗的解答Java 虚拟机(JVM)是运行 Java 字节码的虚拟机jvm内存区域划分:本地方法栈,java虚拟机栈,程序计数器,堆,元空间方法区,直接内存(本地方法区)程序计数器(线程私有):每条线程都有一个独立的程序计数器,这类内存也称为“线程私有”的内存java 虚拟机栈:也是线程私有的。 每个方法在执行的时候也会创建一个栈帧,存储了局部变量,操作数,动态链接,方法返回地址。本地方法栈(线程私有)和虚拟机栈类似,主要为虚

2022-01-28 12:09:49 1069

原创 Activiti工作流引擎框架

activiti是一个工作流引擎框架,核心是ProcessEngine;通过ProcessEngine调RepositoryService、RuntimeService、TaskService、HistoryService、IdentityService执行相应的操作比如定义流程,执行流程,执行任务,查询流程历史,查询activiti表的用户管理等;RepositoryService:流程定义和部署对象RuntimeService:执行管理,包括流程实例和执行对象(正在执行)TaskSe..

2022-01-28 12:08:55 287

原创 mysql联合索引命中规则

mysql联合索引命中规则

2022-01-28 12:07:58 638

原创 win10 家庭版远程连接出现身份验证错误要求函数不受支持

1. 打开“本地组策略管理器”按下 windows + R,调出运行窗口,输入 gpedit.msc ,回车即可 打开“本地组策略管理器”。如果没有报错,打不开“本地组策略管理器”,则新建文本,后缀改成.cmd,内容如下,保存后,使用管理员权限运行该文件。@echo offpushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~

2022-01-28 12:05:16 461

原创 系统集成项目管理工程师必考公式

系统集成项目管理工程师必考公式1.净现值计算公式:P=F/(1+I)^nf为原值、i为贴现率,n为年数,例如1000/(1+10%)^22.投资回收期计算公式:(累计净值现金流量出现正值的年数-1)+出现正值年份的上年累计净现金流量的绝对值/出现正值年份净现金流量,例如(2-1)+1010/12103.三点估算计算公式:(计算平均值)(最乐观+最可能*4+最悲观)/6,例如(8+10*4+16)/6(计算标准差)(最悲观-最乐观)/6,例如(16-8)/6

2022-01-28 12:02:30 6438

原创 mysql 慢查询日志分析

1.查找mysql my.ini文件 C:\ProgramData\MySQL\MySQL Server 5.72.查看mysql 慢查询日志位置 show variables like '%slow_query_log%';3.查看mysql 慢查询时间 show variables like 'long_query_time';4.修改mysql 修改慢查询时间 找到my.ini文件 修改long_query_time设置值,重启服务mysql...

2022-01-28 11:59:13 1501

原创 Spring MVC 执行流程

Spring MVC 相关接口解释:(1)DispatcherServlet前端控制器,所有的请求都有经过它来统一分发,请求会被分发给对应的 Handler。(2)HandlerMapping(处理器映射器)解析请求链接,然后根据请求链接找到执行这个请求的类(HandlerMapping 所说的 handler)。(3)HandlerAdapter(处理器适配器)调用具体的方法对用户发来的请求来进行处理。(4)ControllerController 将处理用户请求...

2022-01-28 11:57:33 44

原创 Struts 2执行流程

1、客户端向Servlet容器(例如Tomcat)发送请求2、这个请求经过一系列的过滤器(Filter)3、接着FilterDispatcher(现已过时)被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要

2022-01-28 11:56:55 631

空空如也

空空如也

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

TA关注的人

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