- 博客(34)
- 收藏
- 关注
原创 复制算法的工作流程与优缺点分析
内存划分为 “使用区(From)” 和 “空闲区(To)”,仅使用 From 区;GC 时标记 From 区存活对象,复制到 To 区(连续存储);清空 From 区,互换 From/To 角色,完成回收。
2026-02-09 14:46:51
459
原创 类加载子系统的作用是什么?如何工作的?
读取.class 字节码文件,将类元数据加载到方法区,为执行引擎提供可执行的类信息;创建堆中的 Class 对象,作为访问类元数据的入口,支撑反射、实例化等操作;通过验证、双亲委派模型保证类加载的合法性和安全性。
2026-02-09 14:43:36
573
原创 JVM 运行时数据区的 7 大组成部分
数据存储层:堆(对象实例)、方法区(类元信息)、运行时常量池(常量)、直接内存(NIO 数据)—— 为程序执行提供所有全局数据;执行引擎层:程序计数器(指令导航)、Java 虚拟机栈(Java 方法执行)、本地方法栈(Native 方法执行)—— 为程序执行提供独立的线程执行空间,操作数据存储层的资源;资源管理层:GC(垃圾回收)—— 对数据存储层的无用资源进行回收,保证 JVM 内存的可持续使用。区域名称归属类型核心作用关键特征异常类型程序计数器线程私有记录当前字节码指令行号。
2026-02-09 14:36:48
815
原创 本地方法栈有什么作用?
Native 方法是用native关键字修饰的 Java 方法,这类方法只有声明、没有 Java 实现,其实际逻辑由 C/C++ 等本地语言编写,编译为与操作系统 / 硬件架构绑定的机器码(如 Windows 的.dll、Linux 的.so)。典型场景:Java 核心类库中与底层交互的方法(如、IO / 网络操作、线程的start0()方法),都是通过 Native 方法调用操作系统内核提供的原生接口实现的。
2026-02-09 14:31:18
671
原创 Tomcat为什么要自定义加载器?
Tomcat 设计了一套层级化的自定义类加载器(核心是隔离性:实现不同 Web 应用之间、应用与容器之间的类隔离,避免类冲突;灵活性:打破双亲委派模型的限制,按需控制类加载优先级,适配 Web 应用的依赖需求;可维护性:支持应用热部署,无需重启容器即可更新应用,提升运维效率。
2026-02-09 14:28:28
662
原创 G1垃圾收集器是如何工作的?
G1 通过Region 化整堆管理将堆划分为大小相等的内存块,基于垃圾优先策略按垃圾比例排序 Region,通过三类分层 GC 流程Young GC 高频短停顿回收新生代Mixed GC(核心)通过 “并发标记 + 可控筛选回收” 同时回收新生代 + 部分老年代,保证停顿时间可预测Full GC 仅作为异常兜底;全程采用复制算法实现无内存碎片回收,结合SATB 机制优化跨代引用,彻底解决了经典 GC 的缺陷,是 JDK8 + 生产环境大内存、低延迟场景的首选收集器。
2026-02-05 16:50:52
687
原创 堆以及堆中各个区域的作用是什么?
堆:所有对象实例 / 数组的统一存储区,GC 主战场,负责对象全生命周期管理;Eden 区:新对象出生地,默认分配首选区,承担海量临时对象存储;Survivor 区(S0/S1):存活对象筛选器,通过年龄计数器筛选长命对象,是新生代和老年代的缓冲带;老年代:长命对象 / 大对象的持久存储区,支撑程序长期运行,GC 频率低但耗时久。
2026-02-05 16:17:16
607
原创 什么是双亲委派以及双亲委派的两大作用是什么?
双亲委派模型(Parents Delegation Model)是 JVM 类加载子系统中类加载器加载类的核心规则,简单来说:当一个类加载器收到类加载请求时,它不会自己先尝试加载,而是优先委托给父类加载器去加载;只有当父类加载器无法加载(找不到对应的.class 文件)时,子类加载器才会自己尝试加载该类。子类加载器收到请求先委托父类加载,父类加载失败才自己加载,遵循「自底向上委托,自顶向下加载」;保障核心类安全,防止等核心类被恶意篡改;保障类的唯一性。
2026-02-05 15:46:47
790
原创 字节码的作用是什么?为什么需要字节码?
Java 虚拟机规范》对字节码的格式、指令集、存储结构做了严格的统一规定(如固定的操作码长度、统一的大端序存储、标准化的类元数据结构),这让字节码成为了Java 程序与 JVM 之间的标准化通信协议任何符合规范的字节码,无论由 Java、Scala、Kotlin 等基于 JVM 的语言编译生成,都能被任意平台的 JVM 执行;任何符合规范的 JVM(如 HotSpot、OpenJ9、GraalVM),都能识别和执行标准字节码,实现了「字节码与 JVM 实现的解耦」。Java 源代码:是中文原稿。
2026-02-05 15:35:24
863
原创 JVM为什么能跨平台、原理是什么
用一个工厂生产程序员是产品设计师,只需要按照统一的产品图纸(Java 源代码)设计产品;javac编译器是标准化加工厂,把产品图纸编译为统一的零件规格(字节码),该规格适用于所有生产线;不同平台的 JVM 是各个国家的本土化生产线,这些生产线都能识别统一的零件规格,然后根据本国的生产设备(硬件 / 操作系统),将零件组装为成品(本地机器码);Java 核心类库是标准化的配件库,提供统一的配件(API),底层配件的生产由本土化生产线完成;
2026-02-05 15:24:30
785
原创 Seata(分布式事务解决方案)
Seata 是微服务架构中分布式事务的一站式解决方案,核心基于「TC/TM/RM」三角色模型,支持四种事务模式。AT 模式是无侵入、高性能的首选模式,基于两阶段提交和undo_log自动补偿,可快速落地。一站式部署流程:先部署 Seata Server(TC)并配置数据库持久化,再在微服务中集成客户端(TM/RM),创建undo_log表,添加注解即可。生产环境需注意集群部署、数据持久化、事务分组规划,同时做好监控告警和问题排查,确保分布式事务的稳定性和一致性。
2026-02-04 17:13:28
518
原创 Gateway :微服务架构的核心网关
全局过滤器对所有路由生效,适合实现统一认证、日志记录等功能。// 自定义全局过滤器(Order 越小,执行优先级越高)@Bean@Order(-1)// 1. 获取请求头中的 Token// 2. 校验 Token(实际场景需解析 JWT)// 3. Token 无效,返回 401 未授权// 4. Token 有效,继续转发请求Gateway 是微服务架构的 “流量中枢”,核心价值是统一入口、路由转发、横切关注点处理。
2026-02-04 17:09:02
757
原创 Sentinel 的核心规则体系
规则类型核心目标适用场景关键特点流量控制限制资源的整体访问流量普通接口防刷、避免瞬时高流量针对「资源整体」,粗粒度控制熔断降级处理异常资源,避免雪崩耗时接口、第三方接口、报错率高的接口针对「异常资源」,有状态流转热点参数精细化控制资源的热点参数秒杀接口、商品查询接口(针对特定参数值)针对「资源参数」,细粒度控制系统规则保障应用整体稳定性应用负载过高、CPU / 内存使用率过高针对「整个应用」,全局控制授权规则控制资源的调用来源内部接口保护、白名单访问。
2026-02-04 17:02:17
863
原创 Sentinel-服务保护(限流、熔断降级)
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。SpringcloudAlibabasentinel以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。主流框架自动适配(Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux、Reactor);所有Web接口均为资源编程式:SphUAPI声明式:@SentinelResource流量控制(FlowRule)
2026-02-04 16:55:02
1030
原创 OpenFeign
1.熟练编写 OpenFeign远程调用客户端2.熟练配置 OpenFeign客户端属性连接超时读取超时3.掌握 拦截器 用法4.掌握 Fallback兜底返回机制及用法。
2026-02-01 00:25:53
1153
原创 Nacos-配置中心
1.引入 spring-cloud-starter-alibaba-nacos-discovery依赖,配置Nacos地址2.@EnableDiscoveryClient 开启服务发现功能扩展1.DiscoveryClient获取服务实例列表2.LoadBalancerClient 负载均衡选择一个实例(需要引入 spring-cloud-starter-loadbalancer)3.RestTemplate 可以发起远程调用。
2026-01-31 18:25:24
1046
原创 nacos-注册中心
这里在使用restTemplate对象时,可以在商品服务和订单服务中编写一个配置类,这样在远程调用时,就可以注入RestTemplate对象即可,不用new一个新对象。创建此方法时,返回类型Product爆红,是因为在订单服务里面没有关于商品的bean对象,此时我们就需要在项目根目录下创建一个model模块,将所有微服务的数据模型放在这里。但是这种实现有一个问题:每次订单远程调用商品服务都只请求一个服务,会导致一台服务器负载过高,在此基本上,提出负载均衡机制,将在下面详细介绍。
2026-01-31 00:30:16
1029
原创 nacos-注册中心-服务注册
Nacos:是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。2.此时该文件夹会变成蓝色,之后在这个目录下右键新建,就能看到 “Java Class” 选项。由于我的idea没有spring的选项,我是使用课程打包的代码。2.选中cloud-demo,右击新建一个模块services。1.打开项目,将idea和pom文件之外的文件删掉。3.添加实参,将端口号改为8001,点击应用,确定。
2026-01-30 15:48:18
1075
原创 反射(Reflection)
反射编程:你不知道要操作的类是什么(编译时未知),但能通过类的 “字节码对象(Class)”,在运行时动态获取类的属性、方法、构造器,甚至调用方法、修改私有属性。:比如封装一个 “对象属性拷贝工具”(类似 Spring 的 BeanUtils),通过反射遍历对象的属性,实现通用拷贝逻辑。(类名、属性、方法、构造器、注解等)—— 反射的本质就是通过 API 读取 / 操作这些元数据,进而操作类 / 对象。,它是类的 “元数据”(描述类的信息),反射所有操作都围绕这个 Class 对象展开。
2026-01-29 01:54:32
1236
原创 复盘苍穹外卖知识点第一期
的初始化逻辑(调用父类构造方法,初始化基础 JSON 解析能力;关闭「未知属性报错」,提升兼容性;创建,注册LocalDateLocalTime的序列化 / 反序列化规则;注册模块,激活日期格式化规则。的关键:把自定义转换器放到列表第一位,优先于 Spring 默认的 JSON 转换器生效,确保我们的日期规则不会被覆盖。
2026-01-28 20:17:13
647
原创 苍穹外卖-数据统计-Excel报表
Apache POI是一个处理MiscrosoftOffice各种文件格式的开源项目。简单来说就是,我们可以使用POI在Java程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI都是用于操作Excel文件。为什么要在Java程序中操作Excel文件呢?银行网银系统导出交易明细各种业务系统导出Excel报表批量导入业务数据。
2026-01-28 00:54:04
993
原创 苍穹外卖-数据统计-图形报表
Apache Echarts 是一款基于Javascript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。
2026-01-27 20:36:17
1099
原创 苍穹外卖-订单状态定时处理、来单提醒和客户催单
SpringTask是spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。定位:定时任务框架作用:定时自动执行某段Java代码为什么要在java程序中使用Spring Task?信用卡每月还款提醒银行贷款每月还款提醒火车票售票系统处理未支付订单入职纪念日为用户发送通知。
2026-01-26 22:39:05
1318
原创 苍穹外卖-用户下单、订单支付
微信支付产品:微信支付接入流程:微信小程序支付时序图:请求方式:POSTJSAPI下单:商户系统调用该接口在微信支付服务后台生成预支付交易单适用对象:直连商户请求URL:https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi请求方式:POST微信小程序调起支付:通过JSAPI下单接口获取到发起支付的必要参数prepay_id,然后使用微信支付提供的小程序方法调起小程序支付。
2026-01-22 20:27:13
949
原创 苍穹外卖-缓存商品、购物车
其次,在管理端对菜品数据进行修改、删除和起售停售时,需要清理缓存数据。因为管理端直接操作数据库,而用户端查询菜品数据时命中缓存就直接返回,这样会导致数据不一致。controller层改造缓存菜品代码:用户端查询菜品数据时,若Redis中已存在菜品数据则直接返回,若不存在则从数据库查询,并且缓存到Redis中。用户端小程序展示的菜品数据都是都过查询数据库获得,如果访问量比较大。的缓存功能,只需要简单地加一个注解,就能实现缓存功能。通过Redis来缓存菜品数据,减少数据库查询操作。前后端联调测试即可。
2026-01-22 00:24:17
1056
原创 苍穹外卖-微信登陆、商品浏览
目录HttpClient微信小程序开发介绍准备工作入门案例微信登陆导入小程序代码微信登陆流程说明注意事项需求分析和设计业务规则接口设计代码开发功能测试导入商品浏览功能代码需求分析和设计接口设计HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。核心API:发送请求步骤:在java程序中通过编码的方式发送请求。微信小程序开发介绍https://mp.weixin.
2026-01-21 00:37:41
1202
1
原创 苍穹外卖-Redis,店铺营业状态设置
Redis是一个基于内存的key-value结构数据库。基于内存存储,读写性能高适合存储热点数据(热点商品、咨询、新闻)企业应用广泛。
2026-01-17 15:16:44
1521
原创 苍穹外卖-菜品管理
在插入菜品数据时,加上useGeneratedKeys="true",useGeneratedKey获得刚刚插入数据的主键,主键返回到实体类中;keyProperty将返回的值赋给实体类中的id属性。VO进行页面展示、DTO进行前后端数据交互、POJO对应数据库表字段。统一实现了,在service的实现类中不再对公共属性进行赋值。在插入口味数据时,我们是如何获取dishId的?将VO转换成json数据返回给前端。技术点:枚举、注解、AOP、反射。问题:代码冗余,不便于后期维护。
2026-01-14 22:55:57
1471
原创 苍穹外卖-开发环境搭建
需求分析:需求规格说明书、产品原型设计:UI设计、数据库设计、接口设计编码:项目代码、单元测试测试:测试用例、测试报告上线运维:软件环境安装、配置定位:专门为餐饮企业定制的一款软件产品功能架构:体现项目中的业务功能模块使用swagger只需按照其规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。Knife4j是为java MVC框架集成的Swagger生成Api文档的增强解决方案。
2026-01-07 21:52:56
1282
原创 SQL基础语法
查询所有数据库查询当前数据库创建CREATE DATABASE[IF NOT EXISTS]数据库名[DEFAULT CAHRSET字符集][COLLATE排序规则];删除DROP DATABASE[IF EXISTS]数据库名;使用USE 数据库名;
2025-12-31 23:43:19
1119
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅