2025年10月14日

Serverless

摘要: Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以 阅读全文

posted @ 2025-10-14 23:59 chuchengzhi 阅读(16) 评论(0) 推荐(0)

OCI

摘要: 【译者的话】本文介绍了OCI运行时和镜像规范,以及在过去的一段时间里大家对该规范的一些误解。OCI规范制订工作尚未落幕,未来也将对容器产生更加深远的影响。 【3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站】本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续 阅读全文

posted @ 2025-10-14 23:58 chuchengzhi 阅读(23) 评论(0) 推荐(0)

云原生技术概览

摘要: 书籍:https://jimmysong.io/kubernetes-handbook/ 从云计算到微服务再到云原生计算 下面将从云计算的发展历程引入云原生计算 云计算介绍 云计算演进历程 云计算就是一种配置资源的方式,根据资源配置方式的不同我们可以把云计算从宏观上分为以下三种类型: IaaS:这是 阅读全文

posted @ 2025-10-14 23:58 chuchengzhi 阅读(12) 评论(0) 推荐(0)

OAM角色定义

摘要: https://github.com/oam-dev/spec/blob/master/introduction.md 关注点分离 开放应用程序模型提出了开发人员负责的部分与平台工程师负责的部分之间明确的关注点分离。 Open Application Model proposed a clear s 阅读全文

posted @ 2025-10-14 23:57 chuchengzhi 阅读(7) 评论(0) 推荐(0)

从Kubernetes到CloudNative——云原生应用之路

摘要: 书籍:https://jimmysong.io/kubernetes-handbook/ 容器--Cloud Native的基石 容器最初是通过开发者工具而流行,可以使用它来做隔离的开发测试环境和持续集成环境,这些都是因为容器轻量级,易于配置和使用带来的优势,docker和docker-compos 阅读全文

posted @ 2025-10-14 23:57 chuchengzhi 阅读(20) 评论(0) 推荐(0)

云原生理念

摘要: 书籍:https://jimmysong.io/kubernetes-handbook/ 云原生理念 云原生在设计的时候就是为了在云上更高效而设计的,一切以云为初心。 云原生是一种行为方式和设计理念,究其本质,凡是能够提高云上资源利用率和应用交付效率的行为或方式都是云原生的。云计算的发展史就是一部云 阅读全文

posted @ 2025-10-14 23:56 chuchengzhi 阅读(12) 评论(0) 推荐(0)

关于阅读源码

摘要: 帮助文档是javadoc自动生成的,里面的内容都是源代码的注释有的东西,源代码是英文,文档有中文,可以文档和源码辅助一起看,更加清晰,看懂英语,也知道自己在哪个位置父类子类都有啥 有效读源码 5、解决方案。对于一些特定的问题,业界都是有一套成熟的解决方案的,一定要学到,这些是实打实在工作中会用到的。 阅读全文

posted @ 2025-10-14 23:56 chuchengzhi 阅读(8) 评论(0) 推荐(0)

SpringMVC自定义返回状态码

摘要: 使用 ResponseEntity 类 标识整个 HTTP 响应(状态码、头部信息、响应体) 异常类或 Controller 方法上标识 @ResponseStatus 注解 或者 使用 @ControllerAdvice ( @RestControllerAdvice)和 @ ExceptionH 阅读全文

posted @ 2025-10-14 23:55 chuchengzhi 阅读(7) 评论(0) 推荐(0)

Springboot跨域解决

摘要: 什么是同源策略: web的安全有同源的一份力量,同源会阻止一个域(协议+主机+端口号)的js脚本和另一个域的内容交互。 什么是跨域请求: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS 当一个请求的里面的协议和域名和端口有一个和当前页面的 阅读全文

posted @ 2025-10-14 23:55 chuchengzhi 阅读(24) 评论(0) 推荐(0)

SpringBean实例化之前做点事情

摘要: SpringBean 实例化 需求,实现一个视频解码器,可以实现各种视频格式的解码 第一种方法:先去实现各个解码器,然后 if.else 判断使用哪种解码器 使用 BeanPostProcessor 优化 第二种方法:使用 BeanPostProcessor 构造解码器索引,再从索引中拿到匹配的 测 阅读全文

posted @ 2025-10-14 23:54 chuchengzhi 阅读(5) 评论(0) 推荐(0)

Spring应用上下文的获取和保存Bean

摘要: Spring 容器是 IOC 容器,但是,反过来却不成立 不常用的容器实现 -- BeanFactory:最简单的容器,提供基本的 DI 功能 高级实现,继承 BeanFactory 派生的应用上下文 -- ApplicationContext:解析配置文件,创建、装配、管理、销毁 Bean 获取 阅读全文

posted @ 2025-10-14 23:54 chuchengzhi 阅读(6) 评论(0) 推荐(0)

Redis的数据类型选择

摘要: String 几乎所有的数据都可以使用 String 来存储。 浪费存储空间,key 也是需要存储空间的 管理、维护成为噩梦,Redis 中存在着大量的 KV 对象 key 冲突的几率变高(不同的业务系统共用一个 Redis 服务) 常用的数据类型及其适用场景 string:应用最为广泛的数据类型, 阅读全文

posted @ 2025-10-14 23:53 chuchengzhi 阅读(7) 评论(0) 推荐(0)

pipeline解决Redis频繁命令往返导致的性能瓶颈

摘要: 客户端和服务端交互模型 Redis 的 pipeline 交互模型 Redis pipeline 与原生批量mset等等命令对比 原生批量命令是原子性,pipeline 是非原子性的 原生批量命令一次只能执行一种命令,pipeline 支持批量执行不同命令 原生批命令是服务端实现,而 pipelin 阅读全文

posted @ 2025-10-14 23:53 chuchengzhi 阅读(7) 评论(0) 推荐(0)

自定义通用异常处理

摘要: 生产级别的通用异常处理 所有的异常都抛出,统一在表现层处理,其余直接抛出就好。 spring定义的错误响应方式如图所示。 使用Java提供的异常类抛出的时候只可以传递string,所以需要自定义一个异常类,继承RuntimeException,抛出的时候同时包含信息和状态码 新建通用异常处理类 相当 阅读全文

posted @ 2025-10-14 23:53 chuchengzhi 阅读(8) 评论(0) 推荐(0)

消灭重复代码的最佳实践

摘要: 代码重复本身不可怕,可怕的是漏改或改错。消灭重复代码,降低改动可能引入的风险。 学习笔记:https://time.geekbang.org/column/article/228964 工厂模式 + 模板方法 消除 if else 和重复代码 假设要开发一个购物车下单的功能,针对不同用户进行不同处理 阅读全文

posted @ 2025-10-14 23:52 chuchengzhi 阅读(7) 评论(0) 推荐(0)

项目编译打包部署最佳实践

摘要: 运行的环境使用 JVM 参数方式,而不是写死在配置文件里面的: 打包jar 的Maven 编译插件 需要指定对应的 finalName,就是生成的 jar 的名字: 打包的时候避免使用测试用例 阅读全文

posted @ 2025-10-14 23:52 chuchengzhi 阅读(5) 评论(0) 推荐(0)

日志放在拦截器还是过滤器

摘要: Filter 过滤器是 Web 应用程序组件,可以在请求到达 Servlet 之前对其进行访问,也可以在响应信息返回到客户端之前对其进行拦截。 Filter 的接口方法: init:Serverlet 容器创建过滤器实例的时候调用 doFilter:拦截到达的请求,检查和处理Header的body的 阅读全文

posted @ 2025-10-14 23:52 chuchengzhi 阅读(9) 评论(0) 推荐(0)

分布式锁最佳实践

摘要: 在单体的应用开发场景中涉及并发同步的时候,大家往往采用 Synchronized(同步)或者同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。 超卖问题复现 现象 存在如下的几 阅读全文

posted @ 2025-10-14 23:51 chuchengzhi 阅读(11) 评论(0) 推荐(0)

多数据源热切换(请求级别)spring+druid+mybatis-plus

摘要: JDBC、DriverManager、DataSource、Druid、c3p0、Hikri、Mybatis、spring-jdbc、mysql-driver jdbc 是一种规范,定义接口api DriverManager:驱动管理器类,用于管理所有注册的驱动程序。 DataSource: jdb 阅读全文

posted @ 2025-10-14 23:51 chuchengzhi 阅读(13) 评论(0) 推荐(0)

抽象类和接口的选择

摘要: 抽象类、接口的含义和特性 抽象类是子类的通用特性,包含了属性和行为;接口是定义行为,并不关心谁去实现。 抽象类是对类本质的抽象,表达的是 is a 的关系;接口是对行为的抽象,表达的是 like a 的关系。 抽象类、接口的相同点 都可以被继承,但是不能被实例化。 抽象类、接口的不同点 使用时语法不 阅读全文

posted @ 2025-10-14 23:50 chuchengzhi 阅读(20) 评论(0) 推荐(0)

持久化配置最佳实践

摘要: RDB 持久化配置 手动触发RDB save:会阻塞当前 Redis 服务器,直到持久化完成,线上应该禁止使用 bgsave:该触发方式会 fork 一个子进程,由子进程负责持久化过程,因此阻塞只会发生在 fork 子进程的时候 定时触发RDB 根据我们的 save m n 配置规则自动触发 从节点 阅读全文

posted @ 2025-10-14 23:50 chuchengzhi 阅读(8) 评论(0) 推荐(0)

并发给ConcurrentHashMap赋值

摘要: 低性能 使用 ConcurrentHashMap 来统计,Key 的范围是 10。 使用最多 10 个并发,循环操作 1000 万次,每次操作累加随机的 Key。 如果 Key 不存在的话,首次设置值为 1。 private Map<String, Long> normaluse() throws 阅读全文

posted @ 2025-10-14 23:49 chuchengzhi 阅读(8) 评论(0) 推荐(0)

依赖冲突的发现和解决

摘要: 依赖冲突的发现 现象一:一个类的行为不按照预期,本来这个类应该是有这个方法的,但是引入一个新的依赖之后就开始报错找不到方法了,一般就是依赖冲突的时候 Maven 自己选择了一个不符合自己预期的依赖导致报错。 依赖冲突的解决 使用 Maven helper 找到对应类所在 jar 的依赖都由谁导入,之 阅读全文

posted @ 2025-10-14 23:49 chuchengzhi 阅读(7) 评论(0) 推荐(0)

javaLong类型在前端json数据损失精度

摘要: 方法一:重新生成pojo对象,将所有数据库类型为bigint都映射成String类 方法二:对于使用springboot,则增加配置代码: package com.gj.app.config; import com.fasterxml.jackson.databind.ObjectMapper; i 阅读全文

posted @ 2025-10-14 23:49 chuchengzhi 阅读(5) 评论(0) 推荐(0)

时间格式不能正常转换?

摘要: @DateTimeFormat 注解 前台到后台的时间格式转换,对于GET 请求参数可以正常工作。对于 POST 请求会报反序列化错误 POST 请求会使用 JSON 反序列化,不会使用 @DateTimeFormat 注解。 POST 表单(body)实现时间格式转换的方法 使用 @JsonFor 阅读全文

posted @ 2025-10-14 23:48 chuchengzhi 阅读(3) 评论(0) 推荐(0)

读取了Request输入流,请求数据就不见了

摘要: HttpServletRequest 和 HttpServletResponse 中存在方法互斥。 在过滤器、拦截器中对 HTTP 请求中的数据做校验、审计是非常常见的需求 Request 输入流数据一但被读取,Controller找不到了 Request 的 getlnputStream 和 ge 阅读全文

posted @ 2025-10-14 23:48 chuchengzhi 阅读(7) 评论(0) 推荐(0)

SpringBoot定时任务不定时执行了

摘要: 两个注解 @EnableScheduling:使得@Scheduled生效 @Scheduled:标注在方法上 @Scheduled 注解 fixedDelay任务结束与开始之间的间隔 fixedRate两次任务的开始的间隔,不管任务是不是执行结束 initialDelay:配合性的,可以和上面两个 阅读全文

posted @ 2025-10-14 23:47 chuchengzhi 阅读(4) 评论(0) 推荐(0)

异步任务的坑

摘要: Spring Boot 中编写异步任务 两个注解: @EnableAsync:开启当前项目的异步功能 @Async:当前方法标记为异步方法 注意一个规则:有没有返回值。 没有返回值的例子: 返回值实现了 Future 接口: 下 异步任务的线程池配置 默认情况下,异步任务的线程池是怎么配置的,是否满 阅读全文

posted @ 2025-10-14 23:47 chuchengzhi 阅读(7) 评论(0) 推荐(0)

Spring踩坑一

摘要: 《Spring编程常见错误50例》读书笔记 源码构建依赖下载可能遇到的问题: https://blog.csdn.net/xiangxiaotian666/article/details/127399904 Spring Core 工厂 BeanFactory 内部有 Map Scan 负责扫描需要 阅读全文

posted @ 2025-10-14 23:46 chuchengzhi 阅读(8) 评论(0) 推荐(0)

Spring踩坑二

摘要: Spring Web http 请求处理流程 总览 @RestController public class HelloWorldController { @RequestMapping(path = "hi", method = RequestMethod.GET) public String h 阅读全文

posted @ 2025-10-14 23:46 chuchengzhi 阅读(28) 评论(0) 推荐(0)

群发红包系统

摘要: 业务流程 发红包 输入金额以及人数 创建红包订单(订单ID,金额,份数) 调用支付系统 红包订单支付之后红包就发出去了 钱先拆好(行锁分散,加大并发) 抢红包 抢红包业务群,检测当前是否有剩余钱 没有剩余直接返回,有剩余就将请求转发到Redis里面的list(先来先服务),同时将请求发到mq启动一个 阅读全文

posted @ 2025-10-14 23:40 chuchengzhi 阅读(12) 评论(0) 推荐(0)

持续集成和容器管理

摘要: DockerMaven插件 微服务部署有两种方法: 手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器。 通过Maven插件自动部署。 自动部署 是企业实际开发中经常使用的方法。 Maven插件自动部署步骤: 修改宿主机的docker配置,让 阅读全文

posted @ 2025-10-14 23:38 chuchengzhi 阅读(12) 评论(0) 推荐(0)

SpringDataElasticsearch聚合实现过滤搜索

摘要: 过滤功能分析 整个过滤部分有3块: 顶部的导航,已经选择的过滤条件展示: 商品分类面包屑 其它已选择过滤参数 过滤条件展示,又包含3部分 商品分类展示 品牌展示 其它规格参数 展开或收起的过滤条件的按钮 顶部导航要展示的内容跟用户选择的过滤条件有关。这部分需要依赖第二部分:过滤条件的展示和选择。展开 阅读全文

posted @ 2025-10-14 23:12 chuchengzhi 阅读(15) 评论(0) 推荐(0)

组合模式Composite

摘要: 树状结构,有些包含子节点,有些只有自己 文件夹和文件的关系 快递包装和快递内容物的关系 实现 确保应用的核心模型能够以树状结构表示。 尝试将其分解为简单元素和容器。 记住, 容器必须能够同时包含简单元素和其他容器。 声明组件接口及其一系列方法, 这些方法对简单和复杂元素都有意义。 创建一个叶节点类表 阅读全文

posted @ 2025-10-14 23:11 chuchengzhi 阅读(6) 评论(0) 推荐(0)

状态模式State

摘要: 根据状态决定动作 不同状态下的同一动作有不同的实现,就是一个简单的多态。简单面向接口编程 应用:TCP 不同的状态下open close ack的方法的实现是不一样的,扩展方法是不方便的,方法不扩展可以使用状态模式 线程状态案例 线程是上下文 线程状态是State Running,Blocking等 阅读全文

posted @ 2025-10-14 23:11 chuchengzhi 阅读(9) 评论(0) 推荐(0)

装饰者模式Decorator

摘要: 简单版 防止类爆炸 类继承是会造成耦合度很高 用聚合代替继承,和代理不一样的是主动权在谁手里,聚合是主动的,自己知道的,代理是被动,自己甚至不知道 Component:抽象被装饰组件,定义都有哪些功能。 ConcreteComponent:抽象被装饰组件实现类 Decorator:抽象****装饰器 阅读全文

posted @ 2025-10-14 23:10 chuchengzhi 阅读(5) 评论(0) 推荐(0)

中介者、调停者Intermediary模式

摘要: 调节互相直接的关系 该模式让你将对象间的所有关系抽取成为一个单独的类, 以使对于特定组件的修改工作独立于其他组件。 抽象中介者接口声明了一个能让组件将各种事件通知给中介者的方法。中介者可对这些事件做出响应并将执行工作传递给其他组件。 具体中介者类可解开各组件之间相互交叉的连接关系并将其转移到中介者中 阅读全文

posted @ 2025-10-14 23:10 chuchengzhi 阅读(6) 评论(0) 推荐(0)

责任链模式ChainofResponsibility

摘要: 简单实现--实现链式调用以及调用链中断 interface Filter { boolean doFilter(Msg m); } class HTMLFilter implements Filter { @Override public boolean doFilter(Msg m) { Stri 阅读全文

posted @ 2025-10-14 23:09 chuchengzhi 阅读(7) 评论(0) 推荐(0)

原型、克隆Prototype模式

摘要: 复制已有对象, 而又无需使代码依赖它们所属的类。 下面不是规范的克隆,这是复制 浅克隆(新属性指向原对象),深克隆 java自带,需要实现标记接口,重写clone方法。一个对象属性多指定起来麻烦会使用,不会比new有多的好处, JDK 中的原型克隆 注意字符串不需要,因为intern得到是常量池里面 阅读全文

posted @ 2025-10-14 23:09 chuchengzhi 阅读(5) 评论(0) 推荐(0)

享元模式FlyWeight

摘要: 共享元对象,放到一个池子里面 池化思想,提前几个,重复利用, String使用的就是享元(常量池) s3.intern() 内部指向常量池的引用,****intern就能拿到常量池的引用 public class TestString { public static void main(String 阅读全文

posted @ 2025-10-14 23:09 chuchengzhi 阅读(3) 评论(0) 推荐(0)

适配器_转换器模式adapter

摘要: Target(目标接口):所需要转换的所期待的接口 Adaptee(源角色):需要适配的接口 Adapter(适配器):将原接口适配成目标接口,继承原接口,实现目标接口 一些流处理器是对其它类型的流源的适配。这就是适配器模式的应用 FutureTask接收Runnabel转换为Callable 使用 阅读全文

posted @ 2025-10-14 23:08 chuchengzhi 阅读(6) 评论(0) 推荐(0)

设计模式、设计原则、重构与编码规范(设计模式之美笔记)

摘要: 设计模式要干的事情就是对复杂解耦。利用更好的代码结构将一大坨代码拆分成职责更单一的小类,让其满足高内聚低耦合等特性。 创建型模式是将创建和使用代码解耦,结构型模式是将不同的功能代码解耦,行为型模式是将不同的行为代码解耦。 而解耦的主要目的是应对代码的复杂性。设计模式就是为了解决复杂代码问题而产生的。 阅读全文

posted @ 2025-10-14 23:08 chuchengzhi 阅读(7) 评论(0) 推荐(0)

桥接Bridge

摘要: 分离抽象与具体实现,让他们可以独自发展 用聚合代替继承的方式连接抽象和具体 https://refactoringguru.cn/design-patterns/bridge 应用1 Gift -> WarmGift ColdGift WildGift GiftImpl -> Flower Ring 阅读全文

posted @ 2025-10-14 23:07 chuchengzhi 阅读(7) 评论(0) 推荐(0)

模板方法TemplateMethod

摘要: 就是钩子函数 模板已经写好了 重写方法,系统自动调用,都是模板方法 使用的时候面向接口编程,这就是模板方法 在我们开发业务逻辑的时候,可能会遇到流程复杂的逻辑,而这个复杂逻辑本身是可以拆解成多个小的行为,这些小的行为本身可能根据业务场景的不同而有所变化。 这里我们以转账流程为例,如下图所示,整个转账 阅读全文

posted @ 2025-10-14 23:06 chuchengzhi 阅读(5) 评论(0) 推荐(0)

命令模式

摘要: 解耦:通过命令对象解耦,而不是直接操作想要操作的对象。 这样的好处就是在修改被操作的对象的方法的时候,只需修改中间的调用者这一个地方,而不是把之前的所有的调用者都修改一遍 增加命令的时候只需增加命令类即可,命令类就是对编辑器操作的包装,基础功能早就在上面写好了。命令类就是起到了解耦,增加命令(组合命 阅读全文

posted @ 2025-10-14 23:06 chuchengzhi 阅读(8) 评论(0) 推荐(0)

观察者模式Observer

摘要: 观察者接口:Observer接口、Listener接口、Hook、Callback 具体观察者:实现Observer接口 事件类 :不仅仅包含时间,事件,还包含事件源。这样观察者拿到事件知道是谁发的才可以做有区别的处理 事件源对象:被观察者Object, 事件源对象,新建事件对象。事件源自己会维护很 阅读全文

posted @ 2025-10-14 23:05 chuchengzhi 阅读(3) 评论(0) 推荐(0)

构建器模式Builder

摘要: 分步骤创建复杂对象(有众多复杂参数,基本让人看不懂的构造函数)。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 构造者模式最核心的思想就是将创建复杂对象的过程与复杂对象本身进行拆分。通俗来讲,构造者模式是将复杂对象的创建过程分解成了多个简单步骤,在创建复杂对象的时候,只需要了解复杂对象的 阅读全文

posted @ 2025-10-14 23:05 chuchengzhi 阅读(6) 评论(0) 推荐(0)

工厂方法+抽象工厂设计模式

摘要: 基本的多态的使用 简单工厂 随便一个东西,简单create方法就是简单工厂 单例可以看做是简单的工厂 可扩展性不好。每次添加都要新的方法 工厂方法模式 Factory 接口:工厂方法模式的核心接口之一。使用方会依赖 Factory 接口创建 Product 对象实例。 Factory 实现类( Fa 阅读全文

posted @ 2025-10-14 23:02 chuchengzhi 阅读(9) 评论(0) 推荐(0)

迭代器模式Iterator

摘要: 定义迭代器的接口,以及对应的hasNext以及next方法 注意定义的时候使用泛型,不然接口方法的返回值只能是Object,实际使用的时候还需要强制转换 在被迭代的接口里面定义获取迭代器的方法 注意使用泛型 在需要被迭代的对象里面实现一个具体迭代器,专属于这个对象的迭代器以及对应的迭代方法,每一个对 阅读全文

posted @ 2025-10-14 23:02 chuchengzhi 阅读(4) 评论(0) 推荐(0)

访问者Visitor

摘要: 在结构不变的情况下动态改变内部元素的动作 适合用在接口结构基本固定不变的 实现案例 package com.deltaqin.designPattern.d04_visitor; // 根据不同的访问者访问的不同商品,给不同的价格 // 计算的规则定义在访问者上面,不同访问者对从商品获得的相同的信息 阅读全文

posted @ 2025-10-14 23:02 chuchengzhi 阅读(9) 评论(0) 推荐(0)

代理模式Proxy

摘要: 问题提出:benchMark 性能测试,不修改原来代码,记录代码的运行时间: 继承实现:类爆炸 手动组合:自己使用代理类包装,代理类里面调用被代理对象,附加上自己的事情。 实现同一个接口可以实现代理的嵌套,当需要实现多个代理功能的时候 限制就****是要实现同一个接口 全能代理:不同接口,解耦,动态 阅读全文

posted @ 2025-10-14 23:01 chuchengzhi 阅读(6) 评论(0) 推荐(0)

单例模式完全版

摘要: 应用 资源管理器 属性管理器 多例是为了存储数据的,单例是为了共享可以减少资源消耗 饿汉式--JVM保证线程安全(简单推荐) 因为JVM可以保证每个类只加载一次,所以设置为static就可以保证对象只会被new一次,static是在加载链接初始化中的初始化就会赋值的,只执行一次。 多线程都没关系 但 阅读全文

posted @ 2025-10-14 23:01 chuchengzhi 阅读(4) 评论(0) 推荐(0)

备忘录模式memento

摘要: 序列化反序列 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。 除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中 阅读全文

posted @ 2025-10-14 23:00 chuchengzhi 阅读(7) 评论(0) 推荐(0)

策略设计模式Strategy

摘要: Comparable 是被比较对象和比较策略没有解耦 Comparator 是被比较对象和比较策略解耦了,在真正要比较的时候才会定义比较策略。这就是策略模式****(实现比较策略和被比较对象的解耦) 相比于策略模式,非策略模式不符合开闭原则,比如Comparable想要修改比较方法,必须修改实现类的 阅读全文

posted @ 2025-10-14 23:00 chuchengzhi 阅读(6) 评论(0) 推荐(0)

OAuth2.0思维导图总结以及认证平台流程图

摘要: 思维导图 https://www.processon.com/view/link/60ef1b9307912906d901ab44 Oauth2 能力平台授权登录流程 https://www.processon.com/view/link/60ef1bf27d9c0806dcefa2f7 阅读全文

posted @ 2025-10-14 22:57 chuchengzhi 阅读(8) 评论(0) 推荐(0)

必先利其器,常用工具分享

摘要: Chrome 插件 效率 Workspaces 网页有用但是要关闭浏览器了,想下次打开恢复现场,这个插件很合适。 借助工作空间的概念,可以不同窗口放置不同类型的内容。 GitHub加速 Octotree - GitHub code tree github 目录 JSON-handle json 格式 阅读全文

posted @ 2025-10-14 22:51 chuchengzhi 阅读(22) 评论(0) 推荐(0)

接口幂等方案

摘要: 对于一个接口而言,无论调用了多少次,最终得到的结果都是一样的。 幂等性的实现与判断需要消耗一定的资源,因此不应该给每个接口都增加幂等性判断,要根据实际的业务情况和操作类型来进行区分。 在进行查询操作和删除操作时就无须进行幂等性判断。查询操作查一次和查多次的结果都是一致的,因此我们无须进行幂等性判断。 阅读全文

posted @ 2025-10-14 22:49 chuchengzhi 阅读(11) 评论(0) 推荐(0)

IDE热加载与热部署

摘要: 热加载则是在运行时通过重新加载class改变类信息,直接改变程序行为。 主要依赖java的类加载机制,在实现方式可以概括为在容器启动的时候起一条后台线程,定时的检测类文件的时间戳变化,如果类的时间戳变掉了,则将类重新载入。对比反射机制,反射是在运行时获取类信息,通过动态的调用来改变程序行为; 热部署 阅读全文

posted @ 2025-10-14 22:48 chuchengzhi 阅读(42) 评论(0) 推荐(0)

ApacheMapStruct常用总结

摘要: Apache MapStruct 常用总结 只是简单使用还是比较简单的,但是有一些细节还是要注意的,不然会不知不觉出错 MapStruct 是一个用于生成类型安全的 bean Mapper类。也就是不同类型对象之间的转换器,一般的assembler以及convertor,不用手动写实现避免错误。 h 阅读全文

posted @ 2025-10-14 22:47 chuchengzhi 阅读(17) 评论(0) 推荐(0)

雪花算法

摘要: 原文连接: https://blog.csdn.net/lq18050010830/article/details/89845790 SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式 阅读全文

posted @ 2025-10-14 22:46 chuchengzhi 阅读(20) 评论(0) 推荐(0)

UML总结

摘要: 统一建模语言,一整套图表组成的标准化建模语言。方便开发人员之间的交流 类图 面向对象方法的核心建模工具,用来表示类、接口以及它们之间的静态结构和关系。 面向对象设计中对象之间的关系。(低耦合) 泛化|纵向(继承) Generalization:继承之后自己增加一些功能,就是泛化 代码实现 接口之间的 阅读全文

posted @ 2025-10-14 22:44 chuchengzhi 阅读(17) 评论(0) 推荐(0)

用例图+用例描述表

摘要: 描述 用户、需求、系统功能单元 之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。 帮助开发团队以一种可视化的方式理解系统的功能需求。 参与者,Actor,一般一个小人 用例,Use Case , 外部用户可见的系统功能,对系统的功能进行描述,椭圆表示 子系统, (模块)展示系统的一部分功 阅读全文

posted @ 2025-10-14 22:43 chuchengzhi 阅读(14) 评论(0) 推荐(0)

序列图

摘要: 展示对象之间的交互顺序 纵向是时间轴,时间沿竖线向下延伸。 横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。生命线代表一个类的特定实体。 生命线:每一个类元角色延伸出来的竖线 同步消息:发送人在它继续之 阅读全文

posted @ 2025-10-14 22:43 chuchengzhi 阅读(9) 评论(0) 推荐(0)

JSON字符串转换为Map

摘要: 利用阿里巴巴封装的FastJSON来转换json字符串 package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.util. 阅读全文

posted @ 2025-10-14 22:42 chuchengzhi 阅读(6) 评论(0) 推荐(0)

fastjson

摘要: alibaba出品 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>x.x.x</version> </dependency> String text = JSON.toJS 阅读全文

posted @ 2025-10-14 22:41 chuchengzhi 阅读(7) 评论(0) 推荐(0)

git思维导图总结

摘要: 导图有笔记 https://www.processon.com/view/link/60ab180a5653bb690f73a0fa 新建仓库 新建的时候最好有文件 合并分支 merge dev和master分支都有修改的话,使用git log只能看到自己的分支的log git merge dev 阅读全文

posted @ 2025-10-14 22:38 chuchengzhi 阅读(4) 评论(0) 推荐(0)

HEAD以及分离头指针

摘要: HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。 HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的 阅读全文

posted @ 2025-10-14 22:36 chuchengzhi 阅读(6) 评论(0) 推荐(0)

git快捷命令配置

摘要: vim ~/.gitconfig 1 [user] 2 name = deltaqin 3 email = delta_qin@163.com 4 [core] 5 autocrlf = input 6 [alias] 7 co = checkout 8 br = branch 9 ci = com 阅读全文

posted @ 2025-10-14 22:35 chuchengzhi 阅读(8) 评论(0) 推荐(0)

指定哈希与相对引用

摘要: 指定hash 通过指定提交记录哈希值的方式在 Git 中移动不太方便。 用 git log 来查查看提交记录的哈希值。哈希值在真实的 Git 世界中也会更长(基于 SHA-1,共 40 位)。可以仅输入fed2 而不是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8 阅读全文

posted @ 2025-10-14 22:34 chuchengzhi 阅读(11) 评论(0) 推荐(0)

远程仓库操作

摘要: git clone 远程仓库: git clone 远程使用虚线表示 本地仓库多了一个名为 o/master 的分支, 这种类型的分支就叫远程分支。远程分支反映了远程仓库(在你上次和它通信时)的状态。 远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。Git 这么做是出于不能直接在这 阅读全文

posted @ 2025-10-14 22:34 chuchengzhi 阅读(11) 评论(0) 推荐(0)

导航

杭州技术博主,专注分享云计算领域实战经验、技术教程与行业洞察, 打造聚焦云计算技术的垂直博客,助力开发者快速掌握云服务核心能力。

褚成志 云计算 技术博客