JVM 高质量面试题
📌 文章目录
- 一、JVM 内存结构与运行时模型
- 1. JVM 内存结构分区及作用
- 2. 栈帧结构及方法调用链维护
- 3. 逃逸分析及其对对象分配策略的影响
- 4. TLAB 的作用及提升对象创建效率的机制
- 二、垃圾回收器与 GC 调优
- 1. CMS 与 G1 垃圾收集器的设计区别及适用场景
- 2. Full GC 频繁问题的排查流程及调优思路
- 3. 控制 GC 日志输出的参数及常用日志字段
- 4. GC Root 的概念及内存泄漏定位
- 5. GC 的并发阶段及 G1 GC 的并发标记机制
- 三、JVM 类加载与双亲委派模型
- 1. 双亲委派模型及其设计初衷
- 2. 自定义类加载器的实现及应用场景
- 3. Spring Boot 中的类加载器双加载问题及解决方案
- 4. 类加载过程及字节码增强技术的拦截点
- 四、即时编译(JIT)与代码优化机制
- 1. 什么是即时编译(JIT)?与解释执行有何区别?
- 2. JIT 编译器有哪几种?C1 与 C2 编译器分别适用于什么场景?
- 3. 什么是方法内联?为什么它能提高性能?它的副作用有哪些?
- 4. 什么是分层编译?它在生产环境下有哪些优势?
- 五、JVM 参数调优与容器部署实践
- 1. 在容器(如 Docker)中运行 Java 服务时有哪些 JVM 参数需要特别注意?
- 2. 有哪些常用的 JVM 性能调优参数?请说明它们的作用。
- 3. 你如何设置 Java 服务的资源限制(CPU/内存)以避免容器 OOM 或过度 GC?
- 六、JVM 故障诊断与生产排查
- 1. 线上服务发生 Full GC 停顿,你如何快速定位问题?
- 2. 如何利用 jstack 分析 Java 死锁或线程阻塞问题?
- 3. 你遇到过 `java.lang.OutOfMemoryError: Metaspace` 吗?原因与解决方案?
- 4. 如何判断某服务是否频繁 GC?如何量化其影响?
- Bonus:开放式问题与思维题
- 1. 如果你需要设计一套 JVM 运行时监控平台,你会从哪些维度进行采集与分析?
- 2. 你如何在无重启情况下动态调整 JVM 行为?实际应用中你用过吗?
一、JVM 内存结构与运行时模型
1. JVM 内存结构分区及作用
JVM 运行时内存结构主要包含以下部分:
- 程序计数器:线程私有,记录当前线程执行的字节码指令地址,确保线程切换后能继续执行。
- 虚拟机栈:线程私有,通过栈帧保存方法调用的局部变量、操作数栈、动态链接等信息。
- 本地方法栈:与虚拟机栈类似,专用于支持 native 方法的调用。
- 堆(Heap):线程共享,是对象实例的主要分配区域,分为新生代(Eden+Survivor)和老年代。
- 方法区(MetaSpace):从 JDK8 开始,HotSpot 将永久代(PermGen)替换为元空间(MetaSpace),用于存储类元信息、常量池等。
堆与元空间的区别:堆用于存储对象实例,而元空间用于存储类元数据,如类结构、方法、常量池等。堆位于 JVM 内部,元空间则使用本地内存。
2. 栈帧结构及方法调用链维护
每个方法调用都会创建一个栈帧,包含以下结构:
- 局部变量表(Local Variable Table)
- 操作数栈(Operand Stack)
- 动态链接(Dynamic Linking)
- 方法返回地址
- 额外信息(如异常处理表)
调用链维护机制:每次方法调用时,JVM 将栈帧压入虚拟机栈(LIFO 结构);方法返回时,栈帧出栈并返回执行结果,从而形成调用链。
3. 逃逸分析及其对对象分配策略的影响
逃逸分析(Escape Analysis)是 JIT 编译阶段的优化技术,用于判断对象是否会逃离当前方法或线程作用域。
影响:
- 栈上分配:若对象不会逃逸,可在栈上分配,生命周期与方法同步,避免堆分配和 GC。
- 同步省略:不逃逸的对象无需加锁,省去 synchronized 带来的性能损耗。
- 标量替换:将对象拆解为多个标量变量进行优化。
4. TLAB 的作用及提升对象创建效率的机制
TLAB(Thread-Local Allocation Buffer)是 JVM 为每个线程预留的一块内存区域,用于在 Eden 区中进行快速对象分配。
作用:
- 减少多线程环境下对 Eden 区的竞争。
- 对象分配只需指针移动(bump-the-pointer)。
- 小对象可以在用户态完成分配,提升效率。
二、垃圾回收器与 GC 调优
1. CMS 与 G1 垃圾收集器的设计区别及适用场景
CMS(Concurrent Mark-Sweep):关注低延迟,基于“标记-清除”算法,老年代并发回收但容易产生碎片。
G1(Garbage First):采用区域化堆设计,按 Region 管理,可预测停顿时间,适用于大堆和高并发场景。
选择 G1 的场景:
- 服务端应用
- 大堆(>4GB)
- STW 敏感业务(如支付、游戏)
2. Full GC 频繁问题的排查流程及调优思路
常见原因:
- 老年代空间不足
- 元空间溢出
- GC Root 增加导致存活对象增多
- 内存泄漏
排查流程:
- 开启 GC 日志:
-Xlog:gc*
- 分析 YGC 与 FGC 频率
- 使用
jmap -heap
查看堆结构 - 使用
jmap -histo
或 MAT 工具查找泄漏 - 检查对象引用链及缓存清理策略
调优手段:
- 增加老年代大小
- 调整
-XX:MetaspaceSize
和-XX:MaxMetaspaceSize
- 优化代码中的引用和缓存逻辑
- 切换为 G1 或 ZGC,减少 FGC 触发
3. 控制 GC 日志输出的参数及常用日志字段
JDK 8:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/gc.log
JDK 9+:
-Xlog:gc*,safepoint,gc+heap=debug:file=gc.log
常用字段:
- GC 类型(YGC/FGC)
- 回收前后堆大小
- STW 时间
- Promotion Failure 次数
- CMS Concurrent Mode Failure
4. GC Root 的概念及内存泄漏定位
GC Root是垃圾回收算法的起点,所有可达对象都可从 GC Root 追溯。
常见 GC Root:
- 虚拟机栈中的引用
- 静态变量
- JNI 引用
- 线程、类加载器本身
内存泄漏排查:
- 使用 MAT 工具分析 dump 文件
- 查找 GC Root 路径最长的对象链
- 查看引用链是否可达(如 ThreadLocal、Listener 注册未释放)
5. GC 的并发阶段及 G1 GC 的并发标记机制
并发阶段:垃圾收集器与用户线程同时运行的阶段,减少 STW 停顿。
G1 并发标记阶段:
- 初始标记(STW,标记 GC Root)
- 并发标记(多线程遍历存活对象图)
- 最终标记(STW,处理新创建对象)
- 筛选回收(根据回收性筛选 Region)
三、JVM 类加载与双亲委派模型
1. 双亲委派模型及其设计初衷
双亲委派:类加载器在加载类前先委托其父加载器加载,若父加载失败再尝试自己加载。
设计初衷:
- 避免重复加载
- 保证核心类(如
java.lang.*
)不会被恶意篡改
破坏场景:
- Web 容器类隔离(Tomcat、OSGi)
- 自定义类加载器(热部署、插件系统)
- SPI 机制下的接口与实现分离加载
2. 自定义类加载器的实现及应用场景
实现:继承 ClassLoader
并重写 findClass
方法:
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {byte[] bytes = loadClassData(name); // 从文件、网络加载return defineClass(name, bytes, 0, bytes.length);
}
应用场景:
- 热部署
- 沙箱隔离
- 脚本执行
- 加密 class 文件动态解密加载
3. Spring Boot 中的类加载器双加载问题及解决方案
问题:同一个类在不同类加载器下加载,导致类型不兼容(ClassCastException
)。
场景:反射、SPI、自定义 ClassLoader 混用。
解决方案:
- 使用统一类加载器(如
Thread.currentThread().getContextClassLoader()
) - 禁止多次加载(自定义类加载器中检查父加载器是否已加载)
- 引导类路径中配置通用依赖
4. 类加载过程及字节码增强技术的拦截点
类加载过程:
- 加载(Loading)
- 验证(Verification)
- 准备(Preparation)
- 解析(Resolution)
- 初始化(Initialization)
拦截点:
- 加载阶段:可以替换类定义字节码(ASM/ByteBuddy)
- 初始化前:使用代理 ClassLoader、Instrumentation API 进行字节码增强
四、即时编译(JIT)与代码优化机制
1. 什么是即时编译(JIT)?与解释执行有何区别?
- 解释执行:JVM 逐行将字节码解释为机器码并执行,启动速度快但执行效率较低。
- JIT 编译(Just-In-Time):将热点代码编译为本地机器码,以提升执行性能。
区别:
特性 | 解释执行 | JIT 编译 |
---|---|---|
启动速度 | 快 | 慢(需编译) |
运行效率 | 低 | 高(本地指令) |
编译时机 | 不编译 | 运行时编译热点代码 |
优化能力 | 无 | 可进行高级优化 |
2. JIT 编译器有哪几种?C1 与 C2 编译器分别适用于什么场景?
HotSpot 提供两个 JIT 编译器:
- C1 编译器(Client Compiler):启动速度快,进行轻量级优化,适用于客户端应用或对启动时间敏感的场景。
- C2 编译器(Server Compiler):进行重度优化,适用于服务器端或长时间运行的系统。
此外,可以启用分层编译(Tiered Compilation),结合 C1 的快速启动和 C2 的高性能执行。
3. 什么是方法内联?为什么它能提高性能?它的副作用有哪些?
- 方法内联:将被调用方法的字节码插入到调用者中,消除方法调用的开销。
优点:
- 减少栈帧创建和跳转开销
- 提高缓存命中率
- 增强其他编译器优化(如常量传播)
副作用:
- 方法体变大,影响编译和 GC 的效率
- 增加代码膨胀(Code Bloat)
4. 什么是分层编译?它在生产环境下有哪些优势?
- 分层编译(Tiered Compilation):结合解释器、C1 和 C2 编译器,根据代码的热点程度使用不同的优化级别。
分层机制:
- 解释执行
- C1 编译(带 profiling)
- C2 编译(高级优化)
优势:
- 启动快(先解释执行)
- 后期快(热点方法转为本地代码)
- 可收集性能 profile 数据指导优化
启动方式:
-XX:+TieredCompilation
五、JVM 参数调优与容器部署实践
1. 在容器(如 Docker)中运行 Java 服务时有哪些 JVM 参数需要特别注意?
在容器中,JVM 默认无法感知 CPU 和内存限制(JDK 10+ 默认支持)。
常见参数:
-XX:+UseContainerSupport # JDK10+ 自动开启
-XX:MaxRAMPercentage=75.0 # 堆最大为容器内存的比例
-XX:InitialRAMPercentage=50.0 # 堆初始为容器内存比例
-XX:MaxRAM=512m # 强制限制堆大小
此外,GC 配置不可过度依赖默认值,建议结合 -Xlog:gc*
进行调整。
2. 有哪些常用的 JVM 性能调优参数?请说明它们的作用。
参数 | 作用说明 |
---|---|
-Xms / -Xmx | 设置初始堆 / 最大堆大小 |
-XX:NewRatio | 新生代与老年代内存比例 |
-XX:SurvivorRatio | Eden 与 Survivor 的比例 |
-XX:+UseG1GC | 启用 G1 垃圾收集器 |
-XX:MaxGCPauseMillis | G1 期望的最大停顿时间 |
-XX:+PrintGCDetails | 打印 GC 详情 |
-XX:+HeapDumpOnOutOfMemoryError | OOM 时生成堆转储文件 |
3. 你如何设置 Java 服务的资源限制(CPU/内存)以避免容器 OOM 或过度 GC?
设置策略:
- 根据服务 QPS 和堆使用量评估需求
- JVM 参数中设置
-Xmx
不超过容器 memory limit - 限制 Metaspace:
-XX:MaxMetaspaceSize=128m
- 利用
ulimit
控制线程数,避免线程爆炸 - 若为 Spring Boot 应用,控制线程池并发量、关闭不必要的缓存
六、JVM 故障诊断与生产排查
1. 线上服务发生 Full GC 停顿,你如何快速定位问题?
排查流程:
- 查看监控(如 Prometheus / SkyWalking)是否 GC 时间突增
- 登录服务器用
jstat -gcutil
实时查看 GC 情况 - 用
jmap -heap pid
查看堆分配与回收情况 - 用
jmap -histo:live
查找存活对象占比 - 若 OOM,使用
jmap -dump:format=b,file=heap.bin
导出堆 - 使用 MAT/VisualVM 打开分析对象引用链
可能原因:
- 内存泄漏
- 对象缓存未释放
- GC 配置不合理
2. 如何利用 jstack 分析 Java 死锁或线程阻塞问题?
步骤:
jstack -l <pid> > dump.txt
分析重点:
- 查找
Found one Java-level deadlock
报告段 - 检查
BLOCKED
状态的线程和持有锁 - 查看线程名称与栈顶方法是否有共享资源竞争
解决思路:
- 明确加锁顺序
- 减少嵌套锁
- 使用
ReentrantLock.tryLock()
避免死锁
3. 你遇到过 java.lang.OutOfMemoryError: Metaspace
吗?原因与解决方案?
原因:
- 动态生成类过多(如反复加载脚本、热更新、反射)
- SpringBoot 自动重加载
- 频繁使用
Proxy.newProxyInstance()
解决:
- 增加
-XX:MaxMetaspaceSize
- 使用
-XX:+UseGCOverheadLimit
限制回收失败重试 - 减少反射/动态代理使用
- 使用
jmap -permstat
或 arthas 查看类加载统计
4. 如何判断某服务是否频繁 GC?如何量化其影响?
- 使用
jstat -gc pid 1s 10
查看 GC 频率 - 关注
YGC
,FGC
,S0C
,S1C
等字段 - 结合 GC 日志,分析 STW 停顿时间
- 结合 APM 工具监控请求延迟(是否与 GC 高峰同步)
- 若触发 Full GC > 1/min,可认为频繁
Bonus:开放式问题与思维题
1. 如果你需要设计一套 JVM 运行时监控平台,你会从哪些维度进行采集与分析?
监控维度:
- 堆内存使用(新生代、老年代、元空间)
- GC 频率与 STW 时间
- 线程数、线程状态变化
- 类加载数、动态代理类统计
- 方法耗时(借助 agent/instrumentation)
- IO 与网络延迟(协同监控)
工具选择:
- JMX / Micrometer + Prometheus
- Arthas / JFR / BTrace
- 自定义 Java Agent + Grafana 可视化
2. 你如何在无重启情况下动态调整 JVM 行为?实际应用中你用过吗?
方式:
- 使用
jcmd
、jmap
、jinfo
进行调参 - Arthas 动态查看和修改变量
- Java Agent 注入 / Attach 机制
- 热加载类字节码(ByteBuddy)
实际应用:
- 修复配置缓存逻辑 bug(Arthas 修改变量)
- 为旧项目添加运行期监控(Agent 植入)
- 动态启用日志级别(SLF4J 动态切换)
结尾建议:
以上问题构成一套完整的 JVM 高阶面试题集,不仅可用于面试备战,也可用于团队内部技术提升或线上培训。建议针对每个模块:
- 结合实际项目经历进行“情景化”复述
- 演示工具使用能力(如 jstack 分析、GC 日志解析)
- 拓展思考 JVM 与性能、微服务、容器的结合场景
相关文章:
JVM 高质量面试题
📌 文章目录 一、JVM 内存结构与运行时模型1. JVM 内存结构分区及作用2. 栈帧结构及方法调用链维护3. 逃逸分析及其对对象分配策略的影响4. TLAB 的作用及提升对象创建效率的机制 二、垃圾回收器与 GC 调优1. CMS 与 G1 垃圾收集器的设计区别及适用场景2. Full GC 频…...

AI助力,制作视频裁剪软件
1. 视频裁剪软件套路多 最近再做一些测试,经常需要录屏什么的,有时候录制的时长视频,需要裁剪,比如去掉开头一些帧或者结尾的一些帧,就想保留关键点。但是网上下的一些软件,打开一用都是要付费的。所以想着…...
SQL注入基础
普通sql注入:后台能提供有价值的错误信息,显示在页面 手动注入 1. 寻找sql注入点 get注入 ?idxx url后加测试是否存在注入漏洞,报错则存在 post注入 把参数封装…...
使用 A2A Python SDK 实现 CurrencyAgent
谷歌官方的a2a-python SDK最近频繁的更新,我们的教程也需要跟着更新,这篇文章,我们通过 a2a-python sdk的 0.2.3 版本,实现一个简单的CurrencyAgent。 https://a2aprotocol.ai/blog/a2a-sdk-currency-agent-tutorial-zh 目录 源码准备详细过程 创建项目创建虚拟环境添加依…...
qt浏览文件支持惯性
#include <QApplication> #include <QListWidget> #include <QScroller> #include <QScrollerProperties>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建列表控件并添加示例项QListWidget listWidget;for (int i 0; i <…...
Python类的力量:第六篇:设计模式——Python面向对象编程的“架构蓝图”
文章目录 前言:从“代码堆砌”到“模式复用”的思维跃迁 一、创建型模式:对象创建的“智能工厂”1. 单例模式(Singleton):全局唯一的“资源管家”2. 工厂模式(Factory):对象创建的“…...

[实战]用户系统-2-完善登录和校验以及VIP
这里写目录标题 完善登录和校验新建lib-auth创建配置引入配置和JWT完善登录基本登录单点登录多点登录校验和拦截编写守卫编写装饰器使用完善VIP修改mysql模型编写vip守卫代码进度完善登录和校验 之前我们模拟过用户的登录,本节将实现token的生成,校验,redis做黑名单。我们需…...
负载均衡笔记
并发数—同时服务的调用方的数量 吞吐量—单位时间内,能接受和返回的数据请求量 TPS。 Transaction事务 QPS。Query 请求/查询 优化点: 减少并发数—防止并非过高 低级—限流—可用的用户少了?! 多开几个口—分流 DNS 解析域…...

印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行
作者:Pranav Saxena, Nishant Raghuvanshi and Neena Goveas单位:比尔拉理工学院(戈瓦校区)论文标题:UAV-VLN: End-to-End Vision Language guided Navigation for UAVs论文链接:https://arxiv.org/pdf/250…...

mysql都有哪些锁?
MySQL中的锁机制是确保数据库并发操作正确性和一致性的重要组成部分,根据锁的粒度、用途和特性,可以分为多种类型。以下是MySQL中常见的锁及其详细说明: 一、按锁的粒度划分 行级锁(Row-level Locks) 描述:…...
解锁未来AI:使用DACA模式和Agentic技术提高开发效率
学习Agentic AI:Dapr Agentic Cloud Ascent (DACA)设计模式的应用与演进 背景介绍 近年来,Agentic AI(代理型人工智能)的概念在学术界和产业界掀起了一阵热潮。Agentic AI指的是能够自主感知、决策和行动的智能体系统,它们不仅改变了我们与技术互动的方式,也为行业发展…...

HarmonyOS NEXT 使用 relationalStore 实现数据库操作
大家好,我是V哥。在 HarmonyOS NEXT 开发中,如何操作数据库,V 哥在测试中总结了以下学习代码,分享给你,如何想要系统学习鸿蒙开发,可以了解一下 V 哥最近刚刚上架出版的 《HarmonyOS 鸿蒙开发之路 卷2 从入…...

R语言学习--Day04--数据分析技巧
在清洗完数据,在对数据分析前,我们要懂得先梳理一下我们的逻辑,即数据是什么形式的,要进行哪种分析,有可能呈现什么特点,进而再想怎么处理数据去画图可以最大程度地凸显我们要的特点。 一般来讲࿰…...

SRS流媒体服务器之RTC播放环境搭建
环境概述 srs版本 commit 44f0c36b61bc7c3a1d51cb60be0ec184c840f09d Author: winlin <winlinvip.126.com> Date: Wed Aug 2 10:34:41 2023 0800Release v4.0-r5, 4.0 release5, v4.0.271, 145574 lines. rtc.conf # WebRTC streaming config for SRS. # see full.…...

Android 性能优化入门(三)—— ANR 问题分析
需要清楚 ANR 的概念、类型、如何产生以及如何定位分析。 1、概述 1.1 ANR 的概念 ANR(Application Not Responding)应用程序无响应。如果你应用程序在主线程被阻塞太长时间,就会出现 ANR,通常出现 ANR,系统会弹出一…...
用HTML5实现实时ASCII艺术摄像头
用HTML5实现实时ASCII艺术摄像头 项目简介 这是一个将摄像头画面实时转换为ASCII字符艺术的Web应用,基于HTML5和原生JavaScript实现。通过本项目可以学习到: 浏览器摄像头API的使用Canvas图像处理技术实时视频流处理复杂DOM操作性能优化技巧 功能亮点…...

鸿蒙Flutter实战:22-混合开发详解-2-Har包模式引入
以 Har 包的方式加载到 HarmonyOS 工程 创建工作 创建一个根目录 mkdir ohos_flutter_module_demo这个目录用于存放 flutter 项目和鸿蒙项目。 创建 Flutter 模块 首先创建一个 Flutter 模块,我们选择与 ohos_app 项目同级目录 flutter create --templatemodu…...

游戏引擎学习第302天:使用精灵边界进行排序
在 game_render_group.cpp 中:正确计算 GetBoundFor() 里的 SpriteBound 值 我们正在进行游戏的排序问题调试。虽然这是一个二维游戏,但包含一些三维元素,因此排序变得比较复杂和棘手。混合二维和三维元素时,需要依赖一些比较主观…...

SpringBoot+MyBatis
切换数据库连接词 引入数据库连接词的依赖,配置数据库连接池的类型; 编写测试类: package org.example.threelayerdecouplingdomeapplication2;import org.example.threelayerdecouplingdomeapplication2.mapper.UserMapper; import org.ex…...

wireshark: Display Filter Reference
https://www.wireshark.org/docs/dfref/// 这个里面的扩展功能还是很强大,可以帮着问题分析。支持大量的自定义化的字段读取功能,支持很多的协议。 https://www.wireshark.org/docs/dfref///f/frame.html frame.time_delta Time delta from previous ca…...

Java基础 Day19
一、泛型(JDK5引入) 1、基本概念 在编译阶段约束操作的数据类型,并进行检查 好处:统一数据类型,将运行期的错误提升到了编译期 泛型的默认类型是 Object 2、泛型类 在创建类的时候写上泛型 在创建具体对象的时候…...

VMware+Windows 11 跳过安装阶段微软账号登录
OOBE 阶段 来到这里 断开网络适配器 VMware右下角,点击网络适配器,断开连接 同时按下 Shift 和 F10 ,打开命令提示符(cmd.exe) 输入 oobe\BypassNRO.cmd 并回车 接下来正常进行即可...

HarmonyOS开发-应用间跳转
1. HarmonyOS开发-应用间跳转 在鸿蒙中,我们再开发过程当中或多或少都会遇见想要从一个App的页面跳转至另一个App的页面,这个时候我们要怎么进行跳转呢,其实在HarmonyOS开发者文档中只需要用到Want对象和startAbility()方法进行跳转就可以了。 1.1. 实现 (1)我们要先准备两个…...
网工每日一练
2025/5/22.每日一练(单选题) 路由器在查找路由表时存在最长匹配原则,这里的长度指的是以下哪个参数? A. NextHopIP地址的大小 B. 路由协议的优先级 C. Cost D. 掩码的长度 路由器在查找路由表时遵循的最长匹配原则中,“…...
使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持?
🧑💻 PostgreSQL 用户 使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持? 🧑🔧 官方技术中心 Navicat Premium 17 和 Navicat for P…...

校园二手交易系统
该交易平台分为两部分,前台和后台。用户在前台进行商品选购以及交易;管理员登录后台可以对商品进行维护,主要功能包含: 后台系统的主要功能模块如下: 登录功能、注册功能、后台首页 系统设置: 菜单管理、…...

基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统
详细视频:【基于pycharm,python,flask,sklearn,orm,mysql,在线深度学习sql语句检测系统-哔哩哔哩】 https://b23.tv/JLQDwNn...
LangChain02-Agent与Memory模块
Agent与Memory模块深度解析 1. Agent模块原理 1.1 ReAct框架的实现机制 Agent是LangChain中最具智能化的组件,其核心思想基于 ReAct框架(Reasoning Acting),即通过 思维(Thought) 和 行动(Ac…...

upload-labs通关笔记-第17关文件上传之二次渲染gif格式
系列目录 upload-labs通关笔记-第1关 文件上传之前端绕过(3种渗透方法) upload-labs通关笔记-第2关 文件上传之MIME绕过-CSDN博客 upload-labs通关笔记-第3关 文件上传之黑名单绕过-CSDN博客 upload-labs通关笔记-第4关 文件上传之.htacess绕过-CSDN…...
计算机网络学习20250525
应用层协议原理 创建一个网络应用,编写应用程序,这些应用程序运行在不同的端系统上,通过网络彼此通信 不需要在网络核心设备(路由器,交换机)上写应用程序网络应用程序工作在网络层以下将应用程序限制在端系统上促进应用程序迅速研发和部署,将复杂问题放到网络边缘网络应…...