自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-04-21 18:08:59 998

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

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

2024-04-21 11:52:37 621

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

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

2024-04-15 21:45:51 736 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 1004

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

本文介绍docker常见的命令

2024-02-15 12:18:01 1026

原创 云原生容器化-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 1474

原创 云原生容器化-3 Dockerfile

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

2024-02-11 22:54:26 1516

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

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

2023-12-03 13:06:25 1204

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

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

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

原创 SpringBoot系列-2 自动装配

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

2023-11-12 16:22:03 205

原创 SpringBoot系列-1启动流程

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

2023-11-05 16:23:59 176

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

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

2023-10-29 11:34:17 96

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

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

2023-10-22 18:37:49 680

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

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

2023-10-06 20:44:19 753

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

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

2023-10-03 17:32:14 459

原创 SpringMVC系列-3 拦截器

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

2023-06-24 21:34:40 648

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

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

2023-06-22 16:43:05 574

原创 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 1894

原创 Spring系列-1 启动流程

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

2023-06-11 15:56:02 1925

原创 Spring系列-10 事务机制

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

2023-06-04 19:11:37 710

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

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

2023-03-05 22:07:36 490

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

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

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

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

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

2023-02-19 19:28:13 706

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

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

2023-02-12 21:26:10 350

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

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

2023-01-25 16:32:41 680

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

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

2022-12-25 13:54:59 2475

原创 Spring系列-7 国际化

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

2022-12-18 19:03:52 828

原创 Spring系列-5 事件机制

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

2022-12-11 15:51:50 750

原创 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 609 1

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

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

2022-10-03 21:04:26 717

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

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

2022-09-25 18:20:01 2196

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

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

2022-09-18 23:09:53 576

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

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

2022-09-11 23:34:05 536

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

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

2022-09-10 22:40:37 720

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

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

2022-08-28 00:16:44 188

原创 云原生容器化-2 Docker网络原理

Docker作为容器化解决方案,特点之一是沙箱机制,以互不感知、互不影响的方式运行在宿主机上。通过网路命名空间实现网络层次上的隔离,使得每个容器拥有自己的网络协议栈、路由表、IP和端口等。通过网桥和veth-pair等虚拟网络设备以及iptables和路由规则的组合使用,为容器通讯提供了一个解决方案。本文将以Docker网络的实现原理为主体内容进行介绍,会涉及veth-pair、网桥、Iptables和路由等网络知识...

2022-07-31 19:18:50 560

原创 云原生容器化-1 Linux虚拟网络介绍2—netfilter/iptables框架

iptables知识点介绍

2022-07-25 23:25:32 477

原创 云原生容器化-1 Linux虚拟网络介绍

本文介绍Linux中的虚拟网络设备,包括bridge,veth-pair,tun/tap,IP隧道,iptables/netfilter和路由表等。文章中包含较多Demo, 建议初学者依次实践,加深对概念的理解。

2022-07-24 01:22:09 1010 2

原创 服务器环境搭建-4 Gitee触发Jenkins自动部署Pod

[1]编写Dockerfile实现通过SpringbootDemo生成容器;[2]在K8S环境上部署负载;[3]在Jenkins中添加构建镜像和部署过程;

2022-07-17 11:07:29 378

原创 服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard

本文基于公有云主要介绍K8S的安装过程,涉及Master、Node节点的环境搭建,calico网络插件的使用;然后介绍Kuboard的安装以及K8S的简单操作命令。

2022-07-15 00:01:11 2189

空空如也

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

TA关注的人

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