程序员 jet_qi
白龙马服务平台员工,擅长并发开发(juc,netty),分布式(springboot+MQ,rpc,ES,dubbo),擅长商品域,财务域业务知识,是设计模式实战的狂热者。
博客主要分享内容:职场经验分享、自学教程、面试真题解析、面试经验分享、技术专题深度解析等。
关于我的文章:那些你很容易就能看得懂的文章,是不会让你显得与众不同的,我会保证所写的每一句话,每一行代码都经过了认真的推敲、仔细的斟酌,希望大家能有所收获。
吃不了学习的苦,就得吃生活的苦,别在最应该努力的年纪躺平
展开
-
SpringBoot第1讲:SpringBoot 知识体系详解+原理+应用+面试(P6精通)
面试时常常被面试官问到这个问题,Spring Boot包含实际业务开发中的方方面面。本篇文章作为SpringBoot第1讲,开篇会站在知识体系的视角,介绍基于SpringBoot总体知识点,包括入门、开发过程、项目实战、源码解析等。原创 2023-08-10 09:00:00 · 353 阅读 · 0 评论 -
Spring第一讲:谈谈你对Spring的理解?从该问题着手深入解析Spring/Spring5新特性
谈谈你对Spring的理解? 深入解析spring框架摘要:面试时常常被面试官问到这个问题,题目太大了,我会从Spring架构/bean初始化流程/bean生命周期/设计模式这几个方面来回应面试官。spring框架中的核心技术:控制反转/依赖注入/面向切面编程/spring的声明式事务/以及spring生态相关产品的简介,我会在这篇文章中详细说明。1、什么是Spring? (在servle..................原创 2020-12-27 13:17:03 · 1486 阅读 · 0 评论 -
SpringBoot第52讲:SpringBoot定时任务 - 分布式xxl-job及在项目中的使用
xxl-job在很多中小公司有着应用,虽然其代码和设计等质量并不太高,License不够开放,有着个人主义色彩,但是其具体开箱使用的便捷性和功能相对完善性,这是中小团队采用的主要原因;XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。本文是SpringBoot第52讲,介绍XXL-JOB以及与SpringBoot的集成及在项目中的使用。原创 2024-01-25 15:02:38 · 379 阅读 · 0 评论 -
SpringBoot第56讲:SpringBoot集成文件 - 集成EasyExcel之Excel导入导出
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。它能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。它是基于POI来封装实现的,主要解决其易用性,封装性和性能问题。本文是SpringBoot第56讲,主要介绍通过SpringBoot集成Excel实现Excel的导入,导出和填充模板等功能。原创 2023-11-30 18:49:06 · 1217 阅读 · 0 评论 -
Spring第二讲:Spring基础 - Spring和Spring框架组成
Spring是什么?它是怎么诞生的?有哪些主要的组件和核心功能呢? 本文是Spring第二讲,通过这几个问题帮助你构筑Spring和Spring Framework的整体认知。原创 2023-09-05 10:21:03 · 182 阅读 · 0 评论 -
SpringBoot第8讲:SpringBoot添加Logback日志
本文是SpringBoot第8讲,对SpringBoot添加Logback日志。SpringBoot开发中如何选用日志框架呢? 出于性能等原因,Logback 目前是springboot应用日志的标配; 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式。原创 2023-07-27 09:00:00 · 288 阅读 · 0 评论 -
SpringBoot第9讲:SpringBoot配置热部署devtools工具
热部署和热加载是在应用正在运行的时候,自动更新(重新加载或者替换class等)应用的一种能力。(spring-boot-devtools提供的方案也是要重启的,只是无需手动重启能实现自动加载而已。严格意义上,我们需要区分下热部署和热加载热部署在服务器运行时重新部署项目它是直接重新加载整个应用,这种方式会释放内存,比热加载更加干净彻底,但同时也更费时间。热加载在在运行时重新加载class,从而升级应用。热加载的实现原理主要依赖JVM第二讲:类加载机制,在实现方式可以概括为。原创 2023-07-19 22:33:06 · 231 阅读 · 1 评论 -
SpringBoot第10讲:开发中的常用注解
本文是SpringBoot第10讲,主要介绍一些SpringBoot中常用的注解。原创 2023-06-30 22:09:48 · 265 阅读 · 0 评论 -
SpringBoot第11讲:SpringBoot 如何统一接口封装
本文是SpringBoot第11讲,在以SpringBoot开发Restful接口时统一返回,方便前端进行开发和封装,以及出现问题时给出响应编码和信息。原创 2023-06-17 22:58:24 · 1983 阅读 · 0 评论 -
SpringBoot第12讲:SpringBoot接口如何对参数进行校验
后端对前端传过来的参数也是需要进行校验的,如果在controller中直接校验需要用大量的if else做判断} }针对这个普遍的问题,Java开发者在Java API规范 (JSR303) 定义了Bean校验的标准,但没有提供实现。hibernate validation 是对这个规范的实现,并增加了校验注解如@Email、@Length等。Spring Validation是对hibernate validation的二次封装,用于支持 spring mvc 参数自动校验。原创 2023-06-18 12:44:03 · 1391 阅读 · 0 评论 -
SpringBoot第13讲:SpringBoot接口如何参数校验国际化
软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。国际化又称为 i18n:internationalization在Resources下添加如下:填写名称和资源语言类型添加中英文对应的message。原创 2023-07-03 21:32:33 · 638 阅读 · 0 评论 -
SpringBoot第14讲:SpringBoot 如何统一异常处理
本文是SpringBoot第14讲,SpringBoot接口如何对异常进行统一封装,并统一返回呢?以上文的参数校验为例,**如何优雅的将参数校验的错误信息统一处理并封装返回呢**原创 2023-06-24 21:39:23 · 1946 阅读 · 0 评论 -
SpringBoot第15讲:SpringBoot如何提供多个版本接口
本文是SpringBoot第15讲,在以SpringBoot开发Restful接口时,由于模块,系统等业务的变化,需要对同一接口提供不同版本的参数实现(老的接口还有模块或者系统在用,不能直接改,所以需要不同版本)。如何更加优雅的实现多版本接口呢?原创 2023-07-04 10:46:03 · 995 阅读 · 1 评论 -
SpringBoot第16讲:如何生成接口文档之Swagger技术栈
OpenAPI 规范(OAS)定义了一个标准的、语言无关的 RESTful API 接口规范,它可以同时允许开发人员和操作系统查看并理解某个服务的功能,而无需访问源代码,文档或网络流量检查(既方便人类学习和阅读,也方便机器阅读)。正确定义 OAS 后,开发者可以使用最少的实现逻辑来理解远程服务并与之交互。此外,文档生成工具可以使用 OpenAPI 规范来生成 API 文档,代码生成工具可以生成各种编程语言下的服务端和客户端代码,测试代码和其他用例。原创 2023-08-04 09:00:00 · 123 阅读 · 0 评论 -
SpringBoot第18讲:SpringBoot 如何访问外部接口
本文是SpringBoot第18讲,在SpringBoot接口开发中,存在着本模块的代码需要访问外面模块接口或外部url链接的需求, 比如调用外部的地图API或者天气API。那么有哪些方式可以调用外部接口呢?原创 2023-06-24 22:04:03 · 864 阅读 · 0 评论 -
SpringBoot第19讲:SpringBoot 如何保证接口幂等
幂等原先是数学中的一个概念,表示进行1次变换和进行N次变换产生的效果相同。以相同的请求调用这个接口一次和调用这个接口多次,对系统产生的影响是相同的。如果一个接口满足这个特性,那么我们就说这个接口是一个幂等接口。接口幂等和防止重复提交是一回事吗?严格来说,并不是。幂等: 更多的是在重复请求已经发生,或是无法避免的情况下,采取一定的技术手段让这些重复请求不给系统带来副作用。防止重复: 提交更多的是不让用户发起多次一样的请求。原创 2023-07-04 21:54:10 · 2109 阅读 · 1 评论 -
SpringBoot第20讲:SpringBoot如何对接口进行签名
以阿里云相关产品为例一般开放平台采用这一套典型的是AppKey&AppSecret,或者ClientId & ClientSecret等比如oauth2协议的client cridential模式grant_type参数等于client_credentials表示client credentials方式,client_id是客户端id,client_secret是客户端密钥。返回token后,通过token访问其它接口。比如oauth2协议的授权码模式(authorization code) 和密码模式原创 2023-07-06 22:10:34 · 463 阅读 · 0 评论 -
SpringBoot第21讲:SpringBoot如何实现接口限流之单实例
本文是SpringBoot第21讲,在以SpringBoot开发Restful接口时,当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。在接口层如何做限流呢? 本文主要回顾限流的知识点,并实践单实例限流的一种思路原创 2023-07-01 18:19:59 · 347 阅读 · 0 评论 -
SpringBoot第22讲:SpringBoot如何实现接口限流之分布式
自定义限流 key 有三种方式,当自定义限流的 key 生效时,限流的 key 就变成了(默认的 key + 自定义的 key)。下面依次给出示例} }当 @RateLimitKey 和 keys 参数都没法满足时,比如入参的值是一个加密的值,需要解密后根据相关明文内容限流。可以通过在同一类里自定义获取 key 的函数,这个函数要求和被限流的方法入参一致,返回值为 String 类型。返回值不能为空,为空时,会回退到默认的 key 获取策略。原创 2023-07-07 16:24:06 · 1982 阅读 · 0 评论 -
SpringBoot第23讲:SpringBoot集成MySQL - 基于JPA的封装
在实际开发中,最为常见的是基于数据库的CRUD封装等,比如SpringBoot集成MySQL数据库,常用的方式有JPA和MyBatis; 本文是SpringBoot第23讲,主要介绍基于JPA方式的基础封装思路原创 2023-08-05 09:00:00 · 301 阅读 · 0 评论 -
SpringBoot第24讲:SpringBoot集成MySQL - MyBatis XML方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。Mybatis的功能架构分为三层:更多介绍可以参考:MyBatis3 官方网站JDBC,ORM知识点可以参考SpringBoot第6讲:SpringBoot入门 - 添加内存数据库H2ORM框架可以根据对象关系模型直接获取,查询关联对象或者关联集合对象,简单而言原创 2023-07-28 14:27:46 · 843 阅读 · 0 评论 -
SpringBoot第25讲:SpringBoot集成MySQL - MyBatis 注解方式
本文是SpringBoot第25讲,上文主要介绍了Spring集成MyBatis访问MySQL,采用的是XML配置方式;我们知道除了XML配置方式,MyBatis还支持注解方式。本文主要介绍SpringBoot+MyBatis注解方式。原创 2023-07-31 14:27:36 · 463 阅读 · 0 评论 -
SpringBoot第25讲:SpringBoot对TypeHandler的使用
我们可以通过自定义TypeHandler的形式来在设置参数或者取出结果集的时候自定义参数封装策略。原创 2023-07-11 15:35:52 · 759 阅读 · 0 评论 -
SpringBoot第26讲:SpringBoot集成MySQL - MyBatis PageHelper分页
前文中,我们展示了Spring Boot与MyBatis的集成,但是没有展示分页实现。本文是SpringBoot第26讲,专门介绍分页相关知识体系和基于MyBatis的物理分页PageHelper原创 2023-07-11 16:54:46 · 392 阅读 · 0 评论 -
SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源
本文是Springboot第27讲,主要讲解哪些场景会使用多个数据源以及哪些场景会需要多个数据源的动态切换呢?本文主要介绍上述场景及SpringBoot+MyBatis实现多个数据源的方案和示例原创 2023-06-17 18:18:13 · 3392 阅读 · 1 评论 -
SpringBoot第28讲:SpringBoot - 自定义starter
如何将自己的模块封装成starter,并给其它springBoot项目使用呢?本文主要介绍在Springboot封装一个自定义的Starter的一个Demo,从创建一个模块->封装starter->使用。原创 2023-06-17 22:13:12 · 1005 阅读 · 0 评论 -
SpringBoot第28讲:SpringBoot集成MySQL - MyBatis-Plus方式
本文是SpringBoot第28讲,MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus在国内也有很多的用户,本文主要介绍MyBatis-Plus和SpringBoot的集成。原创 2023-08-01 14:13:52 · 923 阅读 · 1 评论 -
SpringBoot第29讲:SpringBoot集成MySQL - MyBatis-Plus代码自动生成
本文是SpringBoot第29讲,主要介绍 MyBatis-Plus代码自动生成,以及产生此类代码生成工具的背景和此类工具的基本实现原理。模板引擎可以在代码生成过程中减少大量机械重复工作,大大提高开发效率,良好的设计使得代码重用,后期维护都降低成本。功能是否强大,使用是否简单,整合性、扩展性与灵活性,性能。原创 2023-08-02 11:57:25 · 246 阅读 · 0 评论 -
SpringBoot第30讲:SpringBoot集成MySQL - MyBatis-Plus基于字段隔离的多租户
本文是SpringBoot第30讲,主要介绍 MyBatis-Plus的基于字段隔离的多租户实现,以及MyBatis-Plus的基于字段的隔离方式实践和原理,多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务原创 2023-08-03 11:46:23 · 470 阅读 · 0 评论 -
SpringBoot第31讲:SpringBoot集成ShardingJDBC - Sharding-JDBC简介和基于MyBatis的单库分表
本文是SpringBoot第31讲,主要介绍分表分库,以及SpringBoot集成基于ShardingJDBC+MyBatis的单库分表实践。原创 2023-08-06 09:00:00 · 187 阅读 · 0 评论 -
SpringBoot第32讲:SpringBoot集成ShardingJDBC - 基于JPA的单库分表
上文介绍SpringBoot集成基于ShardingJDBC的读写分离实践,本文是SpringBoot第32讲,在此基础上介绍SpringBoot集成基于ShardingJDBC + JPA 的单库分表实践。原创 2023-08-07 09:00:00 · 282 阅读 · 0 评论 -
SpringBoot第33讲:SpringBoot集成ShardingJDBC - 基于JPA的读写分离
本文是SpringBoot第33讲,主要介绍分表分库,以及SpringBoot集成基于 ShardingJDBC 的读写分离实践。原创 2023-08-08 09:00:00 · 176 阅读 · 0 评论 -
SpringBoot第34讲:SpringBoot集成ShardingJDBC - 基于JPA的DB隔离多租户方案
本文是SpringBoot第34讲,主要介绍ShardingJDBC的分片算法和分片策略,并在此基础上通过SpringBoot集成ShardingJDBC的几种策略(标准分片策略,行表达式分片策略和hint分片策略)向你展示DB隔离的多租户方案原创 2023-08-09 09:00:00 · 291 阅读 · 0 评论 -
SpringBoot第35讲:SpringBoot集成连接池 - 默认连接池HikariCP
本文是SpringBoot第35讲,主要介绍数据库连接池,以及SpringBoot集成默认的HikariCP的实践。什么是连接池,它要解决什么样的问题呢?数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接,来避免因为没有释放数据库连接 而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。原创 2023-08-13 09:00:00 · 373 阅读 · 0 评论 -
SpringBoot第36讲:SpringBoot集成连接池 - 集成数据库Druid连接池
上文介绍默认数据库连接池HikariCP,本文是SpringBoot第36讲,主要介绍SpringBoot集成阿里开源的Druid连接池的实践;客观的来说,阿里Druid只能说是中文开源中 功能全且广泛的以连接池为基础的监控组件,但是(仅从连接池的角度)在生态,维护性,开源规范性,综合性能等方面和HikariCP比还是有很大差距。原创 2023-08-14 09:00:00 · 163 阅读 · 0 评论 -
SpringBoot第37讲:SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移
Liquibase是一个用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。本文是SpringBoot第37讲,主要介绍SpringBoot与Liquibase的集成原创 2023-08-16 09:00:00 · 181 阅读 · 0 评论 -
SpringBoot第40讲:SpringBoot整合Caffeine cache(最优秀的本地缓存)
本文是SpringBoot第40讲,SpringBoot整合Caffine cache。按照Caffeine Github官网文档的描述,Caffeine是基于Java8的高性能缓存库。并且在Spring5(SpringBoot2.x)官方放弃了Guava,而使用了性能更优秀的Caffeine作为默认的缓存方案。原创 2023-08-23 09:00:00 · 468 阅读 · 0 评论 -
SpringBoot第41讲:SpringBoot集成Redis - 基于RedisTemplate+Jedis的数据操作
Redis是最常用的KV数据库,Spring 通过模板方式(RedisTemplate)提供了对Redis的数据查询和操作功能。本文是SpringBoot第41讲,主要介绍基于RedisTemplate + Jedis方式对Redis进行查询和操作的案例。Jedis是Redis的Java客户端,在 SpringBoot 1.x 版本中也是默认的客户端。在 SpringBoot 2.x 版本中默认客户端是Luttuce。原创 2023-08-18 09:00:00 · 197 阅读 · 0 评论 -
SpringBoot第42讲:SpringBoot集成Redis - 基于RedisTemplate+Lettuce数据操作
在SpringBoot 2.x版本中Redis默认客户端是Lettuce,本文是SpringBoot第42讲,主要介绍SpringBoot 和默认的 Lettuce 是一个可伸缩线程安全的 Redis 客户端。多个线程可以共享同一个 RedisConnection。它利用优秀 netty NIO 框架来高效地管理多个连接。Github官网支持 同步、异步、响应式 的方式支持 Redis Sentinel支持 Redis Cluster支持 SSL 和 Unix Domain Socket 连接支持原创 2023-08-19 09:00:00 · 224 阅读 · 0 评论 -
SpringBoot第43讲:SpringBoot集成Redis - 基于RedisTemplate+Lettuce数据类封装
前两篇文章介绍了SpringBoot基于RedisTemplate的数据操作,那么如何对这些操作进行封装呢?本文是SpringBoot第43讲,主要介绍基于 RedisTemplate 的封装。原创 2023-08-20 09:00:00 · 200 阅读 · 0 评论