自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

谢文峰的博客

全栈JavaWeb

  • 博客(214)
  • 收藏
  • 关注

原创 GitHub 开源项目 eval-tx 分布式事务解决方案

eval-tx基于 redis 的分布式事务框架2PC 两阶段提交,60s 超时机制,原理简单易懂附简单 Demo如果还没碰到过分布式事务问题,也可通过本文进行了解和学习。项目地址: https://github.com/huajiexiewenfeng/eval-tx特点侵入性低自动装配@Enable注解激活,开箱即用基于 Spring 事务进行二次封装,学习成本低原理&设计原图地址:https://www.processon.com/view/5f1

2020-07-31 12:30:40 555

原创 JVM 常见面试题汇总(Java8)

JVM 常见面试题汇总(Java8)文章目录JVM 常见面试题汇总(Java8)前言1.JVM 有哪些内存区域?(JVM 的内存布局是什么?)2.Java 的内存模型是什么?(JMM 是什么?)3.JVM 垃圾回收时如何确定垃圾?什么是 GC Roots?4.能够找到 Reference Chain 的对象,就一定会存活么?5.强引用、软引用、弱引用、虚引用是什么?6.你说你做过 JVM 参数调优和参数配置,请问如何查看 JVM 系统默认值7.你平时工作中用过的 JVM 常用基本配置参数有哪些?8.请你谈

2020-07-10 16:54:44 1873 1

原创 夯实Spring系列|总览介绍

文章目录系列文章1.文章说明2.整理目的3.Spring 核心特性4.数据存储(Data Access)5.Web 技术6.技术整合7.测试(Testing)8.Java 版本依赖于支持9.面试题9.1 Spring Framework 有哪些核心模块?系列文章夯实Spring系列|总览介绍夯实Spring系列|夯实Spring系列|第一章:IoC到底什么是?1.文章说明本系列文...

2020-04-17 09:38:49 653 1

原创 github开源项目 eval-echarts 对echarts3.x前后端封装

文章目录1.项目简介2.特点3.项目背景4.开源地址5.环境6.代码7.项目截图1.项目简介对echarts前端js对象option进行封装,前端只需要传接口url和div的id后台提供对应的java数据结构,每种图形对应自己的抽象模板类,整个数据对象拼接的过程都已经封装好极大的方便了开发人员,只需关注业务代码和sql语句的实现即可2.特点1.使用多种设计模式保证代码的扩展性和解...

2019-05-30 20:05:01 2003 1

原创 SOFAJRaft 注册中心-心跳检测实现

在上篇文章基于 SOFAJRaft 实现注册中心_不懂的浪漫的博客-CSDN博客学习之后,我们了解了如何基于 JRaft 来实现一个注册中心,了解了 JRaft 的编程模式。按照官网的步骤和示例,一步一步完善代码即可。本文主要是完善注册中心的心跳功能。ps:对之前的文章中的一些代码缺陷也进行了修正。

2023-10-12 17:54:48 213

原创 基于 SOFAJRaft 实现注册中心

通过本文的学习可以帮助大家了解 SOFAJRaft 的使用方式和集成步骤;参考本文的实现步骤,可以来完成自己工作中相关产品的一致性协议 raft 集成,从而实现应用的高可用。学习本文的前提需要了解 Raft 一致性协议对 SOFAJRaft 框架有一定的了解可以参考:SOFAJRaft 日志复制共识算法本文主要讨论的内容如下注册中心的实现如何集成 Raft 协议来实现注册中心高可用。

2023-10-11 18:04:35 344

原创 SOFAJRaft 日志复制共识算法

Raft 分组中的一个节点,连接封装底层的所有服务,用户看到的主要服务接口,特别是 apply(task) 用于向 raft group 组成的复制状态机集群提交新任务应用到业务状态机。StateMachine: 用户核心逻辑的实现,核心是 onApply(Iterator) 方法,应用通过 Node#apply(task) 提交的日志到业务状态机。FSMCaller: (Finite State Machine),封装对业务 StateMachine 的状态转换的调用以及日志的写入等,一个有限状态机的实

2023-10-11 17:59:59 557

原创 Spring @Scheduled单线程单实例的坑

在项目中经常会用@Scheduled来实现一些定时任务的场景,有必要了解一些它使用时的问题和内部实现机制。本文是偶然间发现的一个问题,刷新了我的认知,分享给大家。Spring @Scheduled 多线程配置。

2023-08-03 13:59:38 691

原创 实际项目集成分布式一致性协议 Raft

只要理解了共识算法,其实集成 raft 很简单,由于共识算法优秀文章已经很多了,本章就不做过多赘述了;这里我们重点是讨论如何在我们的实际工程中集成 raft 协议,来实现分布式一致性;前面我们只会简单的介绍分布式共识算法以及学习 Nacos 如何来集成分布式算法,重点在第4小节;看完本章,大家可以根据自己项目的实际情况来决定是否需要集成 raft 协议来实现分布式一致性。

2023-04-19 11:07:32 631 1

原创 Spring事务7种传播机制(代码示例)

Spring事务7种传播机制(代码示例)文章目录Spring事务7种传播机制(代码示例)前言1.项目环境2.相关资料2.1 Spring 源码2.2 官网地址3.示例代码3.1 无事务示例3.1.1 正常示例3.1.2 异常示例3.2 REQUIRED(默认)3.2.1 代码示例3.2.2 结果分析3.3 REQUIRES_NEW3.3.1 代码示例3.3.2 结果分析3.4 SUPPORTS3.4.1 代码示例3.4.2 结果分析3.5 MANDATORY3.5.1 代码示例3.5.2 结果分析3.6

2021-12-30 15:08:04 1110

原创 Spring 缓存 AOP 实现

Spring 缓存 AOP 实现文章目录Spring 缓存 AOP 实现前言1.项目环境2.Spring @Cacheable 示例3.实现猜想4.实现源码核心API5.Spring AOP API 示例6.源码分析6.1 @EnableCaching6.2 ProxyCachingConfiguration6.2.1 Advisor 实现6.2.2 Pointcut 实现6.2.3 Interceptor 实现6.2.4 CacheOperationSource 实现6.2.5 小结6.3 AutoPr

2021-07-19 16:36:49 686 1

原创 什么是 MongoDB 复制集

什么是 MongoDB 复制集文章目录什么是 MongoDB 复制集1.什么是复制集2.复制集的作用3.典型复制集结构4.数据如何复制的?5.故障恢复6.影响选举的因素7.常见选项8.复制集注意事项9.参考1.什么是复制集Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高

2021-03-10 18:27:30 407

原创 MongoDB Aggregation 聚合框架

MongoDB Aggregation 聚合框架文章目录MongoDB Aggregation 聚合框架前言1.MongoDB 聚合框架是什么2.管道(Pipeline)和步骤(Stage)3.聚合运算的基本格式4.步骤5.步骤中的运算符5.1 $match5.2 $project5.3 $group6.MQL & SQL 对比6.1 例16.2 例27.特殊步骤7.1 $unwind7.2 $bucket7.3 $facet8.MongoDB Compass(推荐工具)8.1 基本使用8.2 导

2021-03-09 10:42:13 1264

原创 MongoDB 基本操作

MongoDB 基本操作文章目录MongoDB 基本操作1.insert 插入2.remove 删除3.update 更新3.1 update 操作3.2 注意点4.find 查找4.1 关于 find4.2 find 示例4.3 查询条件对照表4.4 查询逻辑对照表4.5 查询逻辑运算符4.6 find 子文档搜索4.7 find 数组搜索4.8 find 数组中的多个字段4.9 控制 find 返回的字段5.drop 删除集合6.dropDatabase 删除数据库7.参考1.insert 插入操

2021-02-23 09:47:22 189

原创 Elasticsearch 基础操作(含批量操作)

Elasticsearch 基础操作文章目录Elasticsearch 基础操作1.文档的基本 CRUD1.1 Create1.2 Get1.3 Index1.4 Update1.5 Delete2.批量操作2.1 批量操作 bulk2.2 批量读取 mget2.3 批量查询 msearch3.常见错误返回4.参考1.文档的基本 CRUD操作示例IndexPUT my_index/_doc/1{“user”:“mike”,“comment”:“hello,world”}Cr

2021-02-08 16:53:38 225

原创 Spring @Scheduled 多线程配置

Spring @Scheduled 多线程配置环境SpringBoot 2.0.2.RELEASEJDK8两种方式实现1.@Scheduled+@Async测试代码:@SpringBootApplication@EnableScheduling@EnableAsyncpublic class ScheduleBootstrap { public static void main(String[] args) { SpringApplication.run(Schedul

2020-12-16 15:17:21 2752

原创 Java 8 函数式设计,更优雅的使用 Lambda

Java 8 函数式设计,更优雅的使用 Lambda文章目录Java 8 函数式设计,更优雅的使用 Lambda项目环境1.前言2.什么是函数式接口 @FunctionalInterface3.函数式接口类型4.举例说明4.1 Supplier4.1.1 Supplier 接口定义4.1.2 Supplier 接口源码4.1.3 示例4.1.4 设计4.1.6 Spring 5.0+4.2 Consumer4.2.1 Consumer 接口定义4.2.2 Consumer 接口源码4.2.3 Spring

2020-11-09 20:54:00 401

原创 夯实Spring系列|第二十四章:Spring Environment 抽象

夯实Spring系列|第二十四章:Spring Environment 抽象文章目录夯实Spring系列|第二十四章:Spring Environment 抽象前言1.项目环境2.理解 Spring Environment 抽象3.Spring Environment 接口使用场景4.Environment 占位符处理5.理解条件配置 Spring Profiles6.Spring 4 重构 @Profile7.依赖注入 Environment8.依赖查找 Environment8.1 示例8.2 源码分

2020-10-24 21:30:17 331 1

原创 夯实Spring系列|第二十一章:Spring 泛型处理(Generic Resolution)

夯实Spring系列|第二十一章:Spring 泛型处理(Generic Resolution)文章目录夯实Spring系列|第二十一章:Spring 泛型处理(Generic Resolution)本章说明1.项目环境2.Java 泛型基础2.1 举例说明2.2 代码示例3.Java 5 类型接口4.Spring 泛型类型辅助类5.Spring 泛型集合类型辅助类6.Spring 方法参数封装 - MethodParameter7.Spring 4.2 泛型优化实现 - ResolvableType8.

2020-09-29 23:41:42 642

原创 夯实Spring系列|第二十三章:Spring 注解(Annotations)

夯实Spring系列|第二十三章:Spring 注解(Annotations)文章目录夯实Spring系列|第二十三章:Spring 注解(Annotations)前言1.项目环境2.Spring 注解驱动编程发展历程3.Spring 核心注解场景分类4.Spring 注解编程模型4.1 Spring 元注解(Meta-Annotations)4.2 Spring 模式注解(Stereotype Annotations)4.2.1 @ComponentScan 如何进行扫描?4.2.2 派生性示例4.3

2020-09-25 00:11:31 254

原创 Git 简版教程(一文搞懂,建议收藏)

Git 简版教程(一文搞懂,建议收藏)文章目录Git 简版教程(一文搞懂,建议收藏)前言1.Git 简介2.Git 下载安装3.Git 初体验4.Git log 和版本切换5.工作区 暂存区 提交区6.分支管理 branch7.分支合并 merge8.冲突解决9.Git config & 配置别名9.1 配置基本操作9.2 配置别名10.打标签 tag11.忽略文件12.本地仓库&远程仓库13.操作远程和本地仓库13.1 创建远程仓库13.2 设置 SSH Keys13.3 push 推送

2020-09-21 23:28:05 349

原创 API 网关服务-Zuul 基础篇

API 网关服务-Zuul 基础篇文章目录API 网关服务-Zuul 基础篇前言项目环境1.什么是 Zuul?2.为什么需要 Zuul?3.应用场景3.1 动态路由3.2 请求监控3.3 认证鉴权3.4 压力测试3.5 灰度发布4.Zuul 路由5.Zuul & Eureka 使用6.Zuul 过滤器(Filter Types)7.请求生命周期(Zuul Request Lifecycle)8.自定义过滤器9.Zuul 容错与回退10.Zuul Debug11.Zuul 控制路由实例选择12.参考

2020-09-13 22:12:52 368 1

原创 服务容错保护-Hystrix 基础篇

服务容错保护-Hystrix 基础篇文章目录服务容错保护-Hystrix 基础篇前言项目环境1.什么是 Hystrix?2.什么是服务雪崩?3.如何解决服务雪崩?4.Hystrix 设计原则5.Hystrix 的工作机制6.Hystrix 使用6.1 在 RestTemplate 和 Ribbon 上使用熔断器6.2 Feign 中使用熔断器6.3 Zuul 中使用熔断器7.Hystrix 配置8.Hystrix 监控9.Hystrix 使用小经验10.参考前言本章主要介绍 Hystrix 的相关概念

2020-08-24 14:48:59 520

原创 声明式服务调用-Feign 源码分析

声明式服务调用-Feign 源码分析文章目录声明式服务调用-Feign 源码分析前言项目环境1.Feign 主要组件3.Feign 执行过程4.Feign & Hystrix 集成4.1 FeignClient 配置类 FeignClientsConfiguration4.2 自动装配 FeignAutoConfiguration5.Feign & Ribbon 集成6.@FeignClient 工作原理6.1 @FeignClient 处理过程6.2 代理类如何处理?7.Spring M

2020-08-24 11:38:38 255

原创 声明式服务调用-Feign 基础篇

声明式服务调用-Feign 基础篇文章目录声明式服务调用-Feign 基础篇前言项目环境1.什么是 Feign?2.原生 Feign API3.Spring Cloud OpenFeign4.Feign 整合 Hystrix5.Feign 的配置5.1 Feign 的配置-代码方式5.2 Feign 的配置-配置文件方式6.Feign 的使用技巧6.1 继承特性6.2 拦截器6.3 请求对象类型参数传递6.4 日志配置6.5 异常解码器7.参考前言本篇主要是介绍什么是 Feign, Feign 的基本

2020-08-24 11:05:24 470

原创 Hystrix DashBoard 监控配置方式以及 Hystrix.stream 404 问题

Hystrix DashBoard 监控配置方式以及 Hystrix.stream 404 问题文章目录Hystrix DashBoard 监控配置方式以及 Hystrix.stream 404 问题配置 Hystrix DashBoard解决方案配置 Hystrix DashBoardSpring Cloud 版本:Spring Cloud Finchley三个依赖:spring-cloud-starter-netflix-hystrixspring-boot-starter-actuato

2020-08-21 17:12:36 1979 3

原创 客户端负载均衡-Ribbon 源码分析

客户端负载均衡-Ribbon 源码分析文章目录客户端负载均衡-Ribbon 源码分析前言项目环境1.Ribbon 主要组件2.组件作用和联系3.静态配置 ServerList 示例4.@LoadBalanced 原理分析5.Serverlist 如何获取&更新5.1 获取 Serverlist5.2 更新 Serverlist5.1 ServerListFiter5.2 ServerListUpdater5.3 IPing6.负载均衡策略7.自定义负载均衡策略8.负载均衡算法的使用场景8.1 定制

2020-08-18 19:36:10 460

原创 客户端负载均衡-Ribbon 基础篇

客户端负载均衡-Ribbon 基础篇文章目录客户端负载均衡-Ribbon 基础篇前言项目环境1.负载均衡简介1.1 集中式负载均衡1.2 客户端负载均衡2.什么是 Ribbon?3.RestTemplate 简介4.原生 Ribbon 示例5.RestTemplate & Ribbon 示例6.参考前言本章主要介绍 Ribbon 、RestTemplate 的一些相关的基本概念和用法,以及 RestTemplate 和 Ribbon 如何结合使用,对 Ribbon 有一个基本的印象,下一章我

2020-08-17 19:32:15 779

原创 注册中心-Eureka 源码分析

注册中心-Eureka 源码分析文章目录注册中心-Eureka 源码分析前言项目环境1.Eureka 基本概念1.1 Register - 服务注册1.2 Renew - 服务续约1.3 Fetch Registries - 获取服务注册列表信息1.4 Cancel - 服务下线1.5 Eviction - 服务剔除2.Eureka 高可用架构分析3.Eureka 注册表4.Eureka 核心操作4.1 注册 register4.2 续约 renew4.3 下线 cancel4.4 剔除 evict5.E

2020-08-16 17:36:48 637

原创 注册中心-Eureka 基础篇

注册中心-Eureka 基础篇文章目录注册中心-Eureka 基础篇前言项目环境1.什么是注册中心?1.1 服务注册1.2 服务发现1.3 整体流程图2.什么是 Eureka?3.部署 Eureka Server 服务端依赖引导类application.yaml 配置文件4.部署 Eureka Client 客户端依赖引导类application.yaml 配置文件启动效果5.集群部署6.总结前言注册中心的内容分为上下两章进行发布上篇,基础部分,介绍注册中心的基本概念和含义,以及 Eureka 的

2020-08-16 09:27:40 2771

原创 Spring @Bean 的处理流程是怎样的?

Spring @Bean 的处理流程是怎样的?文章目录Spring @Bean 的处理流程是怎样的?项目环境1.@Bean 用法2.框架提前注册处理类3.解析类封装 @Bean 方法元信息4.将元信息转化为 BeanDefinition5.总结6.参考项目环境jdk 1.8spring 5.2.2.RELEASEgithub 地址:https://github.com/huajiexiewenfeng/thinking-in-spring本章模块:questions1.@Bean 用

2020-08-09 18:10:00 757

原创 Spring 如何处理循环依赖?

Spring 如何处理循环依赖?文章目录Spring 如何处理循环依赖?项目环境1.什么是循环依赖?2.Spring 如何来处理循环依赖?2.1 allowCircularReferences 参数分析2.2 doCreateBean 方法分析2.3 依赖注入阶段3.总结4.两个问题补充5.参考项目环境jdk 1.8spring 5.2.2.RELEASEgithub 地址:https://github.com/huajiexiewenfeng/thinking-in-spring本章模块:

2020-08-08 23:41:41 944

原创 JDK Proxy 和 CGLib 有什么区别?

JDK Proxy 和 CGLib 有什么区别?文章目录JDK Proxy 和 CGLib 有什么区别?前言1.主要区别2.JDK Proxy 动态代理3.CGLib 的实现4.Lombok5.总结6.参考前言JDK 动态代理的实现方式是反射。反射机制 是指程序在运行期间可以访问、检测和修改其本身状态或行为的一种能力,使用反射我们可以调用任意一个类对象,以及类对象中包含的属性及方法。CGLib 实现动态代理是基于 ASM(一个 Java 字节码操作框架)而非反射实现的。动态代理是一种行为方式

2020-07-24 10:00:33 4019

原创 Leetcode 旋转数组的最小数字

Leetcode 旋转数组的最小数字文章目录Leetcode 旋转数组的最小数字题目题解第一种暴力解法,时间复杂度 O(n)第二种二分查找,时间复杂度 O(logn)题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力

2020-07-22 16:20:23 360

原创 TCP 为什么需要三次握手?TCP 和 UDP 有什么区别?

TCP 为什么需要三次握手?TCP 和 UDP 有什么区别?文章目录TCP 为什么需要三次握手?TCP 和 UDP 有什么区别?前言1.什么是TCP?1.1 面向连接1.2 可靠性1.3 面向字节流1.4 定义2.三次握手流程3.为什么 TCP 需要三次握手?3.1 原因一:防止重复连接3.2 原因二:同步初始化序列化4.什么是 UDP?5.TCP VS UDP6.TCP 和 UDP 的使用场景7.总结8.参考前言之前的文章 《TCP/IP远程通信协议》,有介绍过 TCP 的相关的分层模型,当然也有著

2020-07-22 08:30:00 971

原创 数据结构与算法|第十六章:二叉树基础

数据结构与算法|第十六章:二叉树基础文章目录数据结构与算法|第十六章:二叉树基础项目环境1.树(Tree)2.二叉树(Binary Tree)2.1 二叉树定义2.2 链式存储法2.3 顺序存储法3.二叉树的遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历4.小结5.参考项目环境jdk 1.8github 地址:https://github.com/huajiexiewenfeng/data-structure-algorithm本章模块:tree1.树(Tree)树是由节点和

2020-07-21 16:31:12 209

原创 夯实Spring系列|第二十二章:Spring 事件(Events)

夯实Spring系列|第二十二章:Spring 事件(Events)文章目录夯实Spring系列|第二十二章:Spring 事件(Events)前言1.项目环境2.Java 事件/监听编程模型3.面向接口的事件/监听器设计模式4.面向注解的事件/监听器设计模式5.Spring 标准事件-ApplicationEvent6.基于接口的 Spring 事件监听器7.基于注解的 Spring 事件监听器8.注册 Spring ApplicationListener9.Spring 事件发布器10.Spring

2020-07-20 15:12:51 485

原创 真题训练1-算法思维训练

算法思维训练例题文章目录算法思维训练例题前言例题1:斐波那契数列例题2:判断一个数组中是否存在某个数参考前言第十四章 《通用解题的方法论》 我们讨论了解题的方法论,宏观上可以分为以下 4 个步骤:复杂度分析,估算问题中的复杂度的上限和下限。定位问题,根据问题类型,确定采用何种算法思维。数据操作分析,根据增、删、查和数据顺序关系选择合适的数据结构,利用空间换时间的思想。编码实现。本章,我们用一些算法的面试题进行练习,来训练算法思维。例题1:斐波那契数列斐波那契数列是:0,1,1,2,3

2020-07-18 14:51:10 723

原创 数据结构与算法|第十五章:散列表 - 上

数据结构与算法|第十四章:散列表 - 上文章目录数据结构与算法|第十四章:散列表 - 上1.什么是散列表?1.1 散列思想1.2 小结2.散列函数3.散列冲突3.1 开放寻址法3.2 链表法4.Word文档中单词拼写检查功能是如何实现的?5.总结6.参考1.什么是散列表?散列表的英文叫 Hash Table,我们平时也叫它 哈希表 或者 Hash表。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。在 Java 中

2020-07-17 16:37:53 285 1

原创 Spring AOP 拦截器调用的实现

Spring AOP 拦截器调用的实现文章目录Spring AOP 拦截器调用的实现前言相关文章项目环境1.设计原理2.JdkDynamicAopProxy 的 invoke 拦截3.CglibAopProxy 的 intercept 拦截4.目标对象方法的调用5.AOP拦截器链的调用6.配置通知器7.Advice通知的实现8.参考前言本篇是这个系列的正式内容最后一篇,主要是对拦截器相关设计原理介绍和具体实现源码的分析,也会和前面的内容串联起来进行回顾,加深印象。相关文章Spring AOP

2020-07-16 21:36:30 1287 1

空空如也

空空如也

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

TA关注的人

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