自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hebe

勤学如春起之苗,不见其长,日有所增。

  • 博客(163)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring事件发布/监听机制

ApplicationContext提供事件处理通过ApplicationEvent类和ApplicationListener接口。如果一个bean在容器中实现ApplicationListener接口,每次一个ApplicationEvent被发布到ApplicationContext中,这类bean就会收到这些通知。从本质上讲,这是标准的观察者设计模式。观察者模式观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。观察者模式主.

2020-12-04 16:30:08 1324

原创 Spring Statemachine 业务应用

1 前言 什么是Spring Statemachine有限状态机,简称状态机(FSM),是一种对有限个状态,以及这些状态之间的流转和动作等行为的数据建模。使用 FSM 模型,可以有助于这些状态的顺序、导致这种状态变化的事件进行管理,主要用于将状态和时间的控制权从不同业务的 services 方法中的 if else 逻辑中抽离出来,进行统一的管理和配置。对于有复杂的状态流,扩展性要求比较高的场景都可以使用该模型。面是状态机模型中的4个要素,即现态、条件、动作、次态。现态:是指当前所处的...

2020-12-01 21:23:26 1302

原创 Java提供了哪些IO方式?

首先,需要理解一些基本概念:区分同步和异步: 简单来说,同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,当其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系。区分阻塞和非阻塞: 在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务,只有当条件就绪才能继续,比如 ServerSocket 新连接建立完毕,或数据读取、写入操作完成;而非阻塞则是不管 IO操作是否结束,直接...

2020-11-30 19:01:41 1077

原创 一些网络知识的概念

1、DNS分布式数据库,提供主机和 IP 地址之间相互转换的服务。2、长连接和短连接:当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问的 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。 长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 Connection : close ;在 HTTP/1.1

2020-11-30 18:51:45 209

原创 RocketMQ 事务消息的封装

RocketMQ事务消息用来解决本地事务和消息提交的原子性问题。而投递到MQ服务器后,消费者是否能一定消费成功是无法保证的。通过冯嘉发布的《RocketMQ 4.3正式发布,支持分布式事务》一文可以看到RocketMQ采用了2PC的方案来提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。这张图说明了事务消息的大致方案,分为两个逻辑:正常事务消息的发送及提交、事务消息的补偿流程事务消息发送及提交:发送消息(half消息) 服务端响应消息写入结果 根据发送结果执行本地事务

2020-11-26 17:57:01 3235

原创 RocketMQ 三种发消息的方式

本文主要 使用 RocketMQ-Spring 封装提供的RocketMQTemplate,实现三种(同步、异步、oneway)发送消息的方式。1、引入pom.xml 依赖 <!-- 实现对 RocketMQ 的自动化配置 --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactI..

2020-11-17 17:56:18 5482 1

原创 响应时间优化

一、性能优化原则:1、首先,性能优化一定不能盲目,一定是问题导向的。脱离了问题,盲目的提早优化会增加系统的复杂度,浪费开发人员的时间。也因为某些优化可能对业务上有折中的考虑,所以也会损伤业务。2、其实,性能优化也遵循「二八原则」,即可以用 20%的精力去解决 80%的性能问题。所以我们再优化过程中一定要主抓主要矛盾,优化主要的性能瓶颈点。3、再次,性能优化也要有数据支撑。在优化过程中,你要时刻了解你的优化让响应时间减少了多少...

2020-09-21 21:06:17 2871

原创 关于 MDD(度量驱动开发)的一些思考

监控是系统反馈的重要环节。1、没有测量,就没有改进和提升。2、你测什么,就得到什么。MDD 度量驱动开发核心思路:在系统、应用和业务三个层次,通过三级监控,构建三个反馈环,在监控测量基础上持续改进系统和架构。方法论:收集->测量->调整->重复。...

2020-08-06 12:09:59 718

原创 Mysql 事务与 MVCC

待定

2020-08-06 11:59:49 135

原创 Mysql 高可用

Mysql 高可用怎么保证?基础就是主备切换逻辑。摘要:(三句话概括)

2020-08-06 11:53:19 2181

原创 谈谈你知道的设计模式?Spring 等框架中使用了哪些设计模式?

之前总结过关于单例设计模式的几种写法,参见:手把手教你写单例模式的几种写法本文旨在从面试的角度,尝试去回答标题提出的问题。

2020-08-06 11:42:36 139

原创 Mysql 索引(一):存储结构

待写

2020-07-06 20:03:50 211

原创 nginx 配置以及各模块使用介绍

一、Nginx的配置文件的整体结构nginx 是通过配置文件来做到各个功能的实现的。nginx 整体 结构如下:worker_processes 1;events { worker_connections 1024;}http { include tengine.mime.types; default_type application/octet-stream; server { listen .

2020-06-10 16:21:01 405

原创 Redis集群

1 Redis 高可用在 Web 服务器中,高可用 是指服务器可以 正常访问 的时间,衡量的标准是在 多长时间 内可以提供正常服务(99.9%、99.99%、99.999% 等等)。在 Redis 层面,高可用 的含义要宽泛一些,除了保证提供 正常服务(如 主从分离、快速容灾技术 等),还需要考虑 数据容量扩展、数据安全 等等。在 Redis 中,实现 高可用 的技术主要包括 持久化、...

2019-12-30 22:01:42 172

原创 关于去掉测试职位的一些思考

软件开发是否需要专职测试?对于这个问题在若干年前就一直很有争议。网络上比较有代表性的文章有左耳朵耗子的《我们需要专职的QA吗?》、Sriram Krishnan的《关于测试和测试人员》,后续有邹欣对此的回复《测试QA的角色和分工》。这些年业界发展趋势来看,很多公司都不需要专职测试了,只需要开发兼任测试工作就可以了。比如,Facebook号称自己没有专职测试工程师,Google和Amazon虽然...

2019-12-04 22:30:28 658

原创 Resilience4j——轻量级容错库

1. resilience4j是什么?Resilience4j是一个轻量级的容错库,受Netflix Hystrix的启发,但专为Java 8和函数式编程而设计。轻量级,因为库只使用Vavr,它没有任何其他外部库依赖项。相比之下,Netflix Hystrix对Archaius具有编译依赖性,Archaius具有更多的外部库依赖性,例如Guava和Apache Commons Configur...

2019-12-03 11:02:11 751

原创 使用 redis 做限流的几种方式

限流算法在分布式领域是一个经常被提起的话题,当系统的处理能力有限时,如何阻止计划外的请求继续对系统施压,这是一个需要重视的问题。除了控制流量,限流还有一个应用目的是用于控制用户行为,避免垃圾请求。滑动窗口问题:系统要限定用户的某个行为在指定的时间里只能允许发生 N 次,如何使用 Redis 的数据结构来实现这个限流的功能?# 指定用户 user_id 的某个行为 action_key...

2019-11-27 21:56:10 726

原创 Redis 原理(二):Redis高可用——主从同步

目录1 写在前面2 CAP原理3 主从同步3.1 最终一致3.2 增量同步3.3 快照同步3.4 增加从节点3.5 无盘复制4 Redis持久化4.1 快照原理4.2 AOF 原理1 写在前面当我们使用不到Redis集群(主从分布式结构,如codis, Cluster等)的时候,如果使用Redis,为了保证Redis的高可用,Redis是一定需要...

2019-10-10 21:12:54 846

原创 Tcp三次握手和四次挥手

TCP三次握手: 第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y...

2019-10-10 20:32:08 2130

原创 Redis 原理(一):线程IO模型

Redis 是个单线程程序!这点必须铭记。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些时间复杂度为 O(n) 级别的指令,一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。这里需要注意的是,redis对外的网络请求服务是单线程的,但是其内部其他模块还是多线程的操作。Redis 单线程为什么还能这么快?因为它所有的数据都在内存中,所有的运算都是内存级别的...

2019-10-10 16:01:25 377

原创 一起探索ThreadLock吧

ThreadLocal是用来解决什么问题的? 如何使用ThreadLocal? ThreadLocal的实现原理是什么? 可否举几个实际项目中使用ThreadLocal的案例?1. ThreadLocal是用来解决什么问题的?ThreadLocal是线程局部变量,和普通变量的不同在于:每个线程持有这个变量的一个副本,可以独立修改(set方法)和访问(get方法)这个变量,并且线程之间不...

2019-09-21 19:01:18 865

原创 SpringBoot 事务

1 什么是事务事务是一系列的动作,一旦其中有一个动作出现错误,必须全部回滚,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始的状态,避免出现由于数据不一致而导致的接下来一系列的错误。2 SpringBoot 事务机制事务处理机制都会提供API来开启事务、提交事务来完成数据操作,或者在发生错误的时候回滚数据,避免数据的不完整性、不一致性。spring Boot 使用事务...

2019-09-13 19:16:10 315

原创 SpringBoot Bean

目录1 什么是Bean2 Bean的创建方式2.1 注解方式2.2 @Bean定义3 Bean的使用3.1 @Autowired 和@Resource3.2Setter方法3.3构造方法1 什么是BeanSpring Bean 是被实例化的、组装的及被Spring 容器管理的Java 对象。Spring 容器会自动完成@bean对象的实例化。建应...

2019-08-30 15:57:28 249

原创 JVM 内存模型

目录1 JVM 内存模型2 OOM3 堆内部的结构4 Java 常见的垃圾收集器4.1 垃圾收集的算法有哪些? 如何判断一个对象是否可以回收?4.2 垃圾收集器工作的基本流程1 JVM 内存模型 程序计数器(PC,Program Counter Register):在JVM规范中,每个线程都有它...

2019-08-27 22:04:15 197

原创 来谈谈 Java 反射机制,动态代理是基于什么原理?

目录1 一些概念2 动态代理解决了什么问题,在你的业务系统中的应用场景是什么?1 一些概念首先我们来看一些概念性的描述:注解(Annotation):也叫元数据。一种代码级别的说明。它是JDK 1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。反射:赋予程序在运行时自省(...

2019-08-23 21:36:59 276

原创 collection java集合框架&hashmap源码解析

前言1 接口和抽象类2 集合框架类图2.1 List:比较 ArrrayList、LinkedList2.2 Set:比较 TreeSet 、HashSet、LinkedHashSet2.3 Map:比较 Hashtable、HashMap、TreeMap3 HashMap 源码分析3.1 HashMap 内部结构3.2 来解释一下Node<k,v...

2019-08-22 23:09:52 195

原创 线程、多线程和线程池

1 创建多线程1.1 继承Thread 类1.2 实现Runnable 接口2Executor框架2.1 线程池的优点2.2Executors 提供四种线程池2.3 自定义线程池ThreadPoolExecutor2.4 线程池大小在文章线程安全和锁的分类中有讲过线程相关的基础概念,本文不再赘述。 ...

2019-08-21 22:51:04 200

原创 Exception和Error的比较&自定义全局异常处理

目录1理解 Throwable、Exception、Error 的设计和分类2 异常处理机制2.1 异常抛出 throws2.2 异常捕获 catch3 自定义全局异常处理(springBoot)本文主要想解释两个问题:1、对比Exception 和 Error2、运行时异常和一般的异常有什么区别?3、如何处理运行时异常?回答1:Exception 和 E...

2019-08-19 22:27:57 609

原创 抽丝剥茧 volatile 关键字

在之前的手把手教你写单例的文章中,我们了解到,DCL单例代码中,需要使用volatile 关键字来保证变量对所有线程可见,且禁止指令重排优化。关键字volatiale 可以说是Java 虚拟机提供的最轻量级的同步机制。说到同步机制,可能第一想到的是,在处理多线程数据竞争问题的时候,会使用synchronized来进行同步,很少去使用volatile。那什么场景下可以使用volatil...

2019-08-14 23:10:22 134

原创 浅谈 线程安全 和 java锁的分类及实现

目录1 线程安全1.1线程生命周期1.2解决共享资源竞争2 锁2.1 锁的分类2.2 悲观锁VS乐观锁2.2.1 概念介绍2.2.2版本号机制 modCount2.2.3CAS 算法2.3 可重入锁VS非可重入锁2.4 使用场景总结3 锁的实现原理3.1synchronized 底层实现原理3.2Monitor (监视器锁)3...

2019-08-12 17:03:56 215

原创 手把手教你写单例模式的几种写法

目录0 什么是单例模式1 饿汉法2 懒汉法3 双重校验锁3.1 volatile关键字的作用及原理4 枚举法 (Effective Java推荐)5 总结本文旨在学习总结不同的单例模式写法,并做优缺点分析。0 什么是单例模式在《Design Patterns:Elements of Resuable Object-Oriented Software》中的定义...

2019-08-08 22:24:14 211

转载 java编译过程和执行过程分析

目录一个.java文件的"沉浮"之路1:引言:2:分享初衷:3:分享内容大纲4:建议5:.java文件的沉浮之路5-1:编写一个.java文件5-2:通过javac和java指令执行5-3:揭秘第一部分.java文件如何变为.class文件5-4:揭秘第二部分.class文件如何被java指令开始解析执行的。编译流程1> 词法分析:词法分析的输...

2019-08-08 21:11:33 1135

原创 【常用工具】从Mysql 拉取数据脚本

背景:工作中经常需要从A库的a表拉取一些数据到B库的b表做测试解决思路:先将数据从A库导入文件,如data.txt,再将文件Load到B库1、编写从A库查询数据的脚步 a.sh#!/bin/shmysql -h 10.80.120.40 -P 3306 -u user_name -pUIRkw3d****** <<EOFuse alarm;select * al...

2019-08-08 20:06:45 869

原创 Mac环境下使用charles进行https抓包分析

1、安装charles2、在mac上安装证书 charles-> Proxy-> Proxy Settings找到Help菜单栏中的SSL Proxying,选择Install Charles Root Certificate,按照提示完成证书的安装工作刚安装之后的证书,是不被系统信任的,将其改成系统信任方式:右键选中Charles证书文件,点击“显示简介”,...

2019-04-08 15:52:38 915

原创 Python traceback 异常和栈轨迹

python中用于处理异常栈的模块是traceback模块,它提供了print_exc( )、format_exc( )等输出异常栈等常用的工具函数。def func(a, b): return a / bif __name__ == '__main__': import sys import traceback try: func(1, 0) except Exceptio...

2019-04-08 15:37:37 690

转载 git Merge 和git rebase的区别

转载地址:https://www.cnblogs.com/pinefantasy/articles/6287147.htmlgit合并代码方式主要有两种方式,分别为:1、merge处理,这是大家比较能理解的方式。2、rebase处理,中文此处翻译为衍合过程。git rebase操作讲解例子:cd /usr/local/testmkdir hellogitcd hellogi...

2019-03-26 12:01:34 325

原创 Spring Boot 定时任务之@Schedule

@Componentpublic class SetUpmPermissions { @Resource private RedisTemplate redisTemplate; /** * 每 5分钟执行一次 */ @Scheduled(cron = "0 0/5 * * * ?") public void setPermiss...

2019-02-25 17:56:25 504

原创 RestTemplate 添加请求头headers和请求体body

//headers &amp; cookieHttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);headers.add("basecret", config.getBasecret());headers.add("baid", config.getBaid(...

2019-02-25 17:36:41 43901 8

原创 @NotNull 和 @NotEmpty 和@NotBlank 区别

@NotNull 和 @NotEmpty  和@NotBlank 区别如果在使用注解 @Validator的时候,出现如下错误: javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer那一定是在基本类型上使用注解出现的错误,需要注意的是:@NotN...

2019-02-25 16:58:07 14409 3

原创 final、finally、finalize 有什么不同?

1. final在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)。final修饰的class表示类不可以继承扩展;修饰的方法表示方法不可以被重写(override);修饰的变量表示变量是不可以修改的。问: 在java中,String被设计成final类,那为什么平时使用时,String的值可以被改变呢?  字符串常量池是java堆内存中一个特殊的存储区域,当...

2019-01-09 14:51:28 140

空空如也

空空如也

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

TA关注的人

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