自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis系列-3 Redis缓存问题

数据库(如Mysql)的持久化特点带来了较低的性能,高并发的场景下,连接池很快被耗尽而出现宕机或DOS,无法继续对外提供服务。相对于数据库的硬盘IO,缓存中间件基于内存进行读写,从而具备较大的吞吐量和高并发抵抗能力。在服务器与数据库之间添加一层缓存,一方面可以缓解数据库压力,适应高并发场景;另一方面可以提高服务器的响应速度(内存读写速度远高于磁盘IO),具体流程如下所示:引入缓存后,服务器会先从缓存服务器查询,若数据不存在,才会从数据库查询,并将数据库查询结果写入缓存服务器。

2024-05-12 22:30:00 852

原创 前端系列-4 promise与async/await与fetch/axios使用方式

本文介绍promise使用方式,以及以Promise为基础的async/await用法和fetch/axios使用方式,主要以案例的方式进行。javascript是单线程执行的,异步编程的本质是事件机制和函数回调。当执行阻塞任务或者进行IO操作时,编程时很容易嵌套多层回调,严重影响可读性和维护性,陷入地狱回调

2024-05-12 15:09:28 674

原创 Redis系列-2 Redis持久化机制

服务器重启后会丢失内存中的全部数据,内存数据库如果没有持久化机制,难以保证数据的可靠性,如Memcached。Redis提供了RDB(基于全量)和AOF(基于增量)两种持久化机制,一方面可以保证数据的可靠性,当服务器意外宕机重启后,Redis从持久化文件中读取数据,可以快速恢复到宕机前的状态;另外,基于持久化文件可以实现数据备份、数据扩展和搭建Redis集群。

2024-05-03 20:55:21 736

原创 Redis系列-1 Redis介绍

基于C语言开发的、基于内存的、跨平台的非关系型数据库(Nosql)。Redis基于键值对存储结果,键只能为字符串,值的类型有:字符串String、散列Hash、列表List、集合Set、有序集合Sorted Set。因其基于内存而脱离了常规数据库的IO操作,从而具备高性能的读写(10W/s的读和8W/s写)。核心处理使用单线程进行,避免了并发问题,以及减少了线程切换带来的性能开销。redis作为内存数据库,可用于存放缓存数据。在高并发场景中存放热点数据,可以提高数据访问速度,也可以缓解数据库压力;

2024-05-01 16:48:26 795

原创 前端系列-3 前端打包工具和插件介绍(npm+babel+webpack)

JS不断发展,浏览器的适配速度没有跟上,引入了一个问题:用高级(ES6+)的JS语法开发的代码,无法在支持低版本(ES5)JS语法的浏览器上运行。babel作为转译工具,可以实现将ES6转译为ES5,为该问题提供了一个解决方案。label常被集成到webpack中进行打包;随着vue3的出现, vite+esbuild的占有率相比webpack+babel更高。

2024-04-27 17:28:37 1174

原创 前端系列-2 模块化CommonJs+AMD+CMD+ES6

js中, 一个文件就是一个模块,模块化可以提高代码利用率而减少重复代码,将相同的逻辑维护在一个模块中,分而治之,提高代码的可维护性;另外,模块化的出现可以在工程中引入第三方模块,极大提高开发效率。在模块化出现前,只能通过\标签在html中导入,并根据依赖控制导入顺序。CommonJS出现后,模块化技术不断发展,目前主流的js模块化规范有CommonJS, AMD/CMD以及ES6等模块系统,按照模块化的发展可排序为: CommonJS -> AMD/CMD -> ES6.Co

2024-04-21 18:08:59 1109

原创 多线程系列-2 线程中断机制

理解线程中断的本质,可以从"如果没有线程中断机制,会有什么后果"的角度考虑: 因可能引发数据不同步以及资源无法回收问题,通过stop暴力停止线程的方法已被废弃;线程被CPU调度后会独立发展和自治, 无法解决如线程长期阻塞后无法恢复等问题。因此,中断机制是为了引入从线程外部进行干预的能力。"没有任何语言方面的需求要求一个被中断的程序应该终止。中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应对中断 "

2024-04-21 11:52:37 627

原创 IO系列-2 Protobuf使用说明

protobuf序列化后得到的是二进制数据,相对于纯文本的json和xml等体积更小,传输速度更快; 序列化和反序列化速度也相对较快;protobuf有配套的工具,可以根据proto文件与指定的语言类型自动生成代码;除此之外,protobuf还具有向前和向后的版本兼容性;因此,protobuf可用于系统间高效的数据传输。

2024-04-15 21:45:51 752 1

原创 Python使用方式介绍

目前主流开发使用python3. 二者语法上略有区别:输入输出、数据处理、异常和默认编码等,如:python3中字符串为Unicode字符串,使用UTF-8编码,而python2默认使用ASCII编码。python2和python3对应的包管理工具分别是pip和pip3. 另外,Python3引入了一些高级解释器特性,如协程、类型提示、异步编程等。软件升级过程中,设计时不考虑向下相容(减少累赘),因此python3不完全兼容python2. 可通过Python3自带的工具`2to3`对python文件进行

2024-04-15 06:53:35 1012

原创 云原生容器化-5 Docker常见操作命令

本文介绍docker常见的命令

2024-02-15 12:18:01 1034

原创 云原生容器化-4 Docker仓库

Docker Registry v2 API是Docker引擎与Docker Registry进行交互时的接口规范。Docker引擎进行镜像的下拉、删除、推送和修改时需要调用Docker Registry提供的接口。Docker对容器和镜像进行了分层设计,API也以分层为基础。Docker镜像数据包括:数据(blob)和元数据(manifest)两个部分,前者是实际的二进制数据,后者是镜像的描述数据,V2 API为这两部分分别提供了接口。本文介绍推送和下拉镜像相关的API,其他API请参考:。

2024-02-13 12:23:37 1487

原创 云原生容器化-3 Dockerfile

用户可以使用两种方式构建Docker镜像: 手动方式和Dockerfile自动方式。**[1] 手动方式**运行基础镜像为容器后,根据业务需要进行定制化操作,然后手动通过docker commit命令将容器保存为镜像。**[2] Dockerfile**将依赖的基础镜像和定制化操作写在脚本中,由Docker引擎读取并执行脚本中的指令,然后生成镜像,这个脚本叫做Dockerfile.推荐使用第二种,理由如下: Dockerfile通过脚本的方式定义依赖和构建步骤,从而确保了每次构建的一致性和可维护性

2024-02-11 22:54:26 1522

原创 Linux系列-1 Linux启动流程——init与systemd进程

init进程因串行化地启动程序,存在效率问题,且需要自定义脚本; systemd通过并行启动以及通过引入service配置文件,规避了上面两个问题。ini使用service命令,systemd使用systemctl工具来管理,并且在操作上做了兼容处理(将service指令重定向到systemctl)

2023-12-03 13:06:25 1324

原创 SpringMVC系列-7 @CrossOrigin注解与跨域问题

理解同源策略是理解跨域的前提。同源策略定义如下: 在同一来源的页面和脚本之间进行数据交互时,浏览器会默认允许操作,而不会造成跨站脚本攻击;不同源之间进行限制。不同源之间形成跨域,包括:协议、域名、端口。http和https,localhost和127.0.0.1也会形成跨域(即使经过域名解析后相同)。由于浏览器引擎实现了同源策略,即对跨域访问进行了限制,因此存在跨域问题。

2023-11-25 22:20:06 1760 1

原创 SpringBoot系列-2 自动装配

Spring提供了IOC机制,基于此我们可以通过XML或者注解配置,将三方件注册到IOC中。问题是每个三方件都需要经过手动导入依赖、配置属性、注册IOC,比较繁琐。基于"约定优于配置"原则的自动装配机制为该问题提供了一个解决方案。

2023-11-12 16:22:03 218

原创 SpringBoot系列-1启动流程

本文作为SpringBoot系列的开篇,介绍SpringBoot的启动流程,包括Spring容器和Tomcat启动过程。SpringBoot作为流行的微服务框架,其是基于约定和自动装配机制对Spring的封装和增强。

2023-11-05 16:23:59 194

原创 SpringMVC系列-6 异常处理器

本文作为的第六篇,介绍SpringMVC的异常处理器。内容包括异常处理器的使用方式、实现原理和内置异常处理器的装配过程。

2023-10-29 11:34:17 106

原创 SpringMVC系列-5 消息转换器

SpringMVC系列的第五篇介绍消息转换器,本文讨论的消息转换指代调用Controller接口后,对结果进行转换处理的过程。内容包括介绍自定义消息转换器、SpringMVC常见的消息转换器、Spring消息转换器工作原理等三部分。

2023-10-22 18:37:49 794

原创 SpringMVC系列-4 参数解析器

本文作为SpringMVC系列的第四篇,介绍参数解析器。本文讨论的参数解析表示从HTTP消息中解析出JAVA对象或流对象并传参给Controller接口的过程。本文内容包括介绍参数解析器工作原理、常见的参数解析器、自定义参数解析器等三部分。其中,原理部分会结合源码进行说明。

2023-10-06 20:44:19 786

原创 前端系列-1 HTML+JS+CSS基础

笔者是后端开发😶前端涉猎不深,因此文章重在和实用,对原理和性能不会过多深究。

2023-10-03 17:32:14 499

原创 SpringMVC系列-3 拦截器

}HandlerInterceptor中的声明的preHandle/postHandle/afterCompletion为default类型的接口,可以随意选择是否实现。preHandle接口若返回false, 会跳过Controller方法的执行,流程可参考SpringMVC系列-2 HTTP请求调用链。

2023-06-24 21:34:40 664

原创 SpringMVC系列-2 HTTP请求调用链

本文作为第二篇,介绍HTTP请求的调用链:从请求进入Tomcat到数据流返回客户端的完整过程。为了尽可能把流程表达清楚,进行了很多减支处理,只关注主线逻辑。本文也作为SpringMVC系列后续文章的基础,在调用链梳理清楚的基础上,后文对重要逻辑分别进行展开介绍,如拦截器、异常处理器、转换器、消息转换器、异步请求、文件上传等。在这些文章完成后,会出一个专题,包括:结果集框架、错误码框架、鉴权逻辑、分页查询、事件框架等,基于此会对Spring系列和SpringMVC系列文章有更深层次的理解。

2023-06-22 16:43:05 593

原创 SpringMVC系列-1 使用方式和启动流程

当Tomcat被部署到服务器或者通过本地IDEA将项目war包通过local tomcat部署到Tomcat上后,可以通过startup.sh或者startup.bat触发Bootstrap的main方法,从而开启Tomcat容器组件的初始化和启动过程。从宏观上看,启动过程中对应着Listener-> Filter -> Servlet组件的触发流程。本文涉及的组件包括Listener和Servlet:Tomcat在构造Context实例后会触发ServletContextEvent事件

2023-06-18 23:56:02 2210

原创 Spring系列-1 启动流程

BeanFactory提供了IOC相关的能力,称为IOC容器;SpringApplication作为BeanFactory的子类,在其基础上提供了事件机制、国际化、资源处理等功能,称为Spring上下文或者Spring容器。SpringApplication的核心实现在AbstractSpringApplication类中,Spring启动流程也是在该类的refresh()方法中完成。AbstractSpringApplication类在内部维持了一个BeanFactory对象(默认为DefaultLis

2023-06-11 15:56:02 2273

原创 Spring系列-10 事务机制

ORM框架是连接代码和数据库的桥梁,Spring作为基础框架提供了Spring Data JPA,也提供了适配其他ORM框架的能力,如集成Mybatis和Hibernate等。需要注意ORM框架提供的事务能力依赖于数据库事务,是对数据库事务的一层封装;如果底层数据库不支持事务(如Mysql的MyISAM引擎),在此之上的所有数据库或者DAO操作都无事务特性。Spring事务提供了两种使用方式:声明式 和编程式。

2023-06-04 19:11:37 724

原创 Spring系列-8 AOP使用与原理

按照软件重构的思想,当多个类中存在相同的代码时,需要提取公共部分来消除代码坏味道。Java的继承机制允许用户在纵向上通过提取公共方法或者公共部分(模版方法方式)至父类中以消除代码重复问题;日志、访问控制、性能监测等重复的非业务代码揉杂在业务代码之中无法横向抽取,AOP技术为其提供了一个解决方案。AOP技术将这些重复的非业务代码抽取出为一个模块,通过技术整合还原代码的逻辑和功能;即:在代码层面上消除了重复度,提高了可维护性,并在功能层面上得到还原。抽取重复代码作为一个模块是用户的问题,然而技术整合(对目标织入

2023-03-05 22:07:36 511

原创 Spring系列-9 Async注解使用与原理

本文作为[Spring系列]的第九篇,介绍@Async注解的使用、注意事项和实现原理,原理部分会结合Spring框架代码进行。@Async一般注解在方法上,用于实现方法的异步:方法调用者立即返回。

2023-02-26 17:42:17 2453 1

原创 Spring系列-2 Bean的生命周期

作为Spring系列的第二篇,本文结合容器的启动流程介绍**单例Bean的生命周期**,包括Bean对象的创建、属性设置、初始化、使用、销毁等阶段;在此过程中会介绍Spring用于操作Bean或者BeanDefinition的相关扩展接口。文章重心在于介绍整个Bean生命周期,不拘泥于每个阶段的细节。

2023-02-19 19:28:13 735

原创 Spring系列-4 循环依赖与三级缓存

本文承接Spring系列-3 Bean实例化与依赖注入,继续介绍依赖注入相关内容,内容包括循环依赖和三级缓存。

2023-02-12 21:26:10 356

原创 Spring系列-3 Bean实例化与依赖注入

Spring管理着Bean对象的生命周期,包括实例化、属性设置、初始化、销毁等;其中实例化和属性设置过程中存在着依赖注入。本文承接上文 [Spring系列-2 Bean的生命周期](https://blog.csdn.net/Sheng_Q?type=blog),重点介绍Bean生命周期中的实例化与依赖注入过程,介绍原理时会结合Spring源码进行。

2023-01-25 16:32:41 721

原创 Spring系列-6 占位符使用和原理

分离变化和不变是软件设计的一个原则,将不变的部分形成模版,将变化的部分抽出为配置文件;不同的环境使用不同的配置文件,方便维护且不需要重新编译代码;Spring框架引入占位符为其提供了一个解决方案。本文作为Spring系列文章的第六篇,内容包含占位符的使用和背后原理;其中,原理部分会伴随着Spring源码进行。

2022-12-25 13:54:59 2623

原创 Spring系列-7 国际化

为了提高软件的通用性(应对不同的语言环境)、扩大软件的业务受众范围,软件被要求具备处理国际化的能力。Java和Spring为此分别提供了不同层次的解决方案:Java在java.util包中提供了支持国际化能力的API与工具类,Spring基于此进行封装并提供了容器级别的接口。本文作为**Spring系列**文章的第四篇,内容包含JDK、Spring、Spring Boot国际化相关的API的使用和背后原理;其中,基于Spring框架介绍国际化的使用和原理是本文的重点内容,该部分会伴随着Spring源码进行

2022-12-18 19:03:52 952

原创 Spring系列-5 事件机制

本文介绍Spring的事件机制,包括使用方式、注意事项以及实现原理,重心在于介绍事件机制的实现原理。

2022-12-11 15:51:50 810

原创 Lombok使用说明

Lombok常用注解可以分为以下几种类型:【1】@Setter 和 @Setter 和 @Accessor【2】@ToString 和 @EqualsAndHashCode【3】@NoArgsConstructor 和 AllArgsConstructor 和 @RequiredArgsConstructor【4】@Data 和 @Value【5】@Builder 和 @Singular。

2022-10-30 16:33:03 613 1

原创 日志框架-2 Mybatis日志框架介绍

本文作为《日志框架》专题的第二篇, 介绍Mybatis关于日志的实现,会涉及源码介绍。Mybatis没有重复造轮子, 通过接入第三方日志组件实现日志功能, 且通过适配器使得日志实现随着接入的日志框架变化而变化;另外, 通过动态代理实现JDBC和Mybatis日志的合一, 方便用户使用Mybatis的日志。

2022-10-03 21:04:26 773

原创 事务-2 Spring与Mybatis事务实现原理

本文承接[事务-1 事务隔离级别和Spring事务传播机制是事务专题的第二篇;主题内容是Mybatis和Spring事务原理,结合源码和案例进行介绍。

2022-09-25 18:20:01 2292

原创 日志框架-1 jul与log4j与logback介绍

本文主题内容是介绍Java中常用的日志框架解决方案,包括log4j+jcl以及logback+slf4j, 并介绍通过桥接和适配技术实现日志框架的兼容。文中会对日志框架进行拆分,分别介绍facade层和impl层以及其组合关系。

2022-09-18 23:09:53 607

原创 事务-1 事务隔离级别和Spring事务传播机制

本文介绍事务的基础篇:包括事务的概念和性质、MySql的隔离级别、Spring事务传播机制等,本文偏向于实践操作。

2022-09-11 23:34:05 574

原创 ElasticSearch-1 概念介绍和案例解析

本文作为三方件专题的第一篇,介绍ES的基础内容,包括:ES的基本概念、Http接口以及Java相关API等;分布式相关的概念和ES性能调优等放在ES高级篇中介绍。

2022-09-10 22:40:37 728

原创 JAVASE-14 静态代理与动态代理

本文主题内容是代理:包括静态代理和动态代理,其中动态代理是重点,该部分包括JDK代理和CGLIB代理,以案例的方式进行介绍。

2022-08-28 00:16:44 199

空空如也

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

TA关注的人

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