React底层原理详解
React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解
在面试中介绍React底层原理时,需遵循逻辑清晰、层次分明、重点突出的原则,结合技术深度与实际应用场景。以下是结构化回答模板:
1. 总述React的核心机制
“React的底层设计围绕高效渲染和状态管理展开,主要通过虚拟DOM、Fiber架构、合成事件和Hooks机制实现。这些技术共同解决了传统DOM操作性能低下、组件化开发复杂性问题,同时支持现代应用的并发需求。”
2. 分点展开核心原理
(1)虚拟DOM与Diff算法
- 核心逻辑:
- JSX编译为虚拟DOM(轻量JavaScript对象),通过
React.createElement
构建树结构。 - Diff算法对比新旧虚拟DOM,计算最小变更集(如节点类型变化、属性更新)。
- 通过
key
优化列表对比效率,避免不必要的节点重建。
- JSX编译为虚拟DOM(轻量JavaScript对象),通过
- 应用价值:
- 减少直接DOM操作,提升渲染性能(例:在复杂表单中减少重渲染次数)。
- 跨平台能力的基础(如React Native渲染原生组件)。
(2)Fiber架构与并发模式
- 核心逻辑:
- 将渲染任务拆分为多个Fiber节点(链表结构),支持任务中断与恢复。
- 优先级调度:高优先级任务(如用户输入)抢占低优先级任务(如数据加载)。
- 双缓存技术:内存中构建新Fiber树,完成后替换当前树,确保渲染连续性。
- 应用价值:
- 实现并发渲染(React 18+的
useTransition
),提升复杂应用的流畅性。 - 避免长任务阻塞主线程,优化首屏加载时间(例:大列表分片渲染)。
- 实现并发渲染(React 18+的
(3)合成事件系统
- 核心逻辑:
- 事件委托到根节点(如
document
),统一管理所有事件监听。 - 合成事件对象池复用,减少内存开销(需注意
e.persist()
的使用场景)。 - 兼容多浏览器事件模型,提供一致API。
- 事件委托到根节点(如
- 应用价值:
- 优化事件处理性能(例:避免为每个列表项单独绑定事件)。
- 简化跨平台事件逻辑(如React Native与Web事件统一)。
(4)状态管理与Hooks
- 核心逻辑:
setState
批量更新:合并多次状态变更,减少渲染次数。- Hooks通过链表结构管理状态(如
useState
的顺序依赖)。 - 依赖收集(
useEffect
):仅当依赖变化时触发副作用。
- 应用价值:
- 避免过度渲染(例:用
React.memo
+useCallback
优化子组件)。 - 复杂状态逻辑解耦(例:自定义Hooks封装数据请求)。
- 避免过度渲染(例:用
3. 结合项目经验举例
“在之前开发的仪表盘项目中,我通过以下方式应用这些原理:
- 虚拟DOM优化:对动态图表组件使用
shouldComponentUpdate
跳过无效渲染。 - Fiber架构优势:使用
Suspense
+lazy
实现代码分片加载,缩短首屏时间。 - Hooks实践:封装
useDataFetching
Hook统一处理异步请求状态,减少重复代码。”
4. 总结设计思想
“React的设计核心是声明式编程与函数式思想,通过抽象底层细节(如DOM操作),让开发者专注于UI逻辑。同时,其架构(如Fiber)不断演进,平衡性能与开发体验,这是React能持续引领生态的关键原因。”
5. 面试加分技巧
- 对比其他框架:
“相比Vue的响应式数据绑定,React强调不可变数据和显式状态管理,更适合大型应用的可预测性需求。” - 延伸技术趋势:
“React Server Components进一步将逻辑向服务端迁移,未来可能结合边缘计算优化性能。” - 主动引导问题:
“您是否想了解我如何处理某个具体场景下的性能问题?(如长列表渲染)”
回答原则
- 逻辑链条清晰:从问题(如DOM性能)→ 解决方案(虚拟DOM)→ 实际价值(性能提升)。
- 技术术语准确:明确区分“Fiber架构”与“并发模式”等概念。
- 控制详略节奏:对重点原理(如Diff算法)深入细节,其他点到为止。
“
React底层原理详解
”。首先,我需要仔细阅读所有我搜索到的资料,找出与React底层原理相关的内容。证据中有很多是关于React Native的,但用户的问题是关于React本身的,所以需要区分开。不过有些证据可能两者都有涉及,比如提到React和React Native的底层原理相同,都是使用虚拟DOM驱动渲染,只是目标不同。和提到了虚拟DOM和diff算法,这些都是React的核心机制。详细说明了虚拟DOM如何提升性能,而则具体描述了JSX如何转换为JavaScript对象,进而通过React.createElement生成虚拟DOM结构。这里需要结合起来说明React的JSX编译过程和虚拟DOM的作用。
然后,提到Fiber架构,尤其是React 18的并发模式。Fiber是React的核心架构,它将渲染任务拆分成小单元,支持中断和恢复,以提高性能和响应能力。需要解释Fiber的工作原理,比如任务分片、优先级调度等,并结合中的说明,指出并发模式带来的优势。
合成事件方面,和提到React的事件系统是合成事件,它统一处理事件,解决浏览器兼容性问题,并且事件委托到root节点,减少内存消耗。还提到原生事件先于React事件执行,以及合成事件的好处,如优先级分类。
状态管理方面,和涉及useState的底层实现和setState的批量更新策略。提到React不会立即更新DOM,而是批量处理state变化,通过diff算法优化性能。这可能涉及到Fiber架构中的状态更新机制,以及如何调度这些更新。
另外,和提到React的渲染流程分为render阶段和commit阶段,Fiber的双缓存技术,这些需要详细说明。同时,指出React和React Native底层原理相同,虚拟DOM驱动不同平台的渲染,这里可以简要对比两者的异同。
还需要注意证据中的时间信息,比如是React 18的内容,而讨论的是React 18的Fiber架构,这可能涉及较新的特性,如并发渲染。但用户提供的当前日期是2025年,所以需要以最新的资料为主,但证据中大部分可能还是基于旧版本的内容,需要综合处理。
总结一下,React的底层原理主要包括:
- 虚拟DOM和diff算法:通过JSX生成虚拟DOM树,diff算法比较变化,减少直接操作真实DOM的次数。
- Fiber架构:实现任务分片和并发渲染,提高性能。
- 合成事件系统:统一事件处理,优化性能。
- 状态更新和批量处理:异步更新state,合并多次更新。
- 组件生命周期和Hooks:如useState、useEffect的底层机制。
需要将这些点结合证据中的具体描述,引用对应的证据编号。例如,虚拟DOM部分引用;Fiber架构引用8、12、22;合成事件引用9、17;状态管理引用15、18等。
最后,确保回答结构清晰,分点详细说明,每个部分都正确引用我搜索到的资料的编号。
React的底层原理涉及多个核心机制,结合虚拟DOM、Fiber架构、事件系统等关键技术实现高效渲染与状态管理。以下是详细解析:
1. 虚拟DOM与Diff算法
React通过JSX语法将组件转换为虚拟DOM树(JavaScript对象),而非直接操作真实DOM。这一过程由React.createElement()
完成,描述元素的标签、属性和子节点。例如:
// JSX转换为虚拟DOM结构
React.createElement("div", { className: "app" }, React.createElement("h1", null, "Hello React")
);
虚拟DOM的优势:
- 性能优化:通过Diff算法对比新旧虚拟DOM树的差异,仅更新变化部分,减少真实DOM操作次数。
- 跨平台能力:虚拟DOM抽象了渲染逻辑,使React可驱动不同平台(如Web、Native)的UI渲染。
2. Fiber架构与并发模式
React 16引入Fiber架构,核心目标是实现任务的可中断与优先级调度,支持并发渲染。
- 任务分片:将渲染任务拆分为多个“Fiber节点”,每个节点包含组件类型、状态、副作用等信息。
- 优先级调度:通过
expirationTime
标记任务优先级,高优先级任务(如用户交互)可中断低优先级任务(如数据加载)。 - 双缓存技术:在内存中构建新的Fiber树,完成后替换当前树,避免渲染过程中的页面闪烁。
并发模式(React 18+):
- 允许渲染过程被中断并恢复,提升应用响应速度,如实现流畅的过渡动画。
3. 合成事件系统
React通过 合成事件(SyntheticEvent) 统一处理事件,解决浏览器兼容性问题。
- 事件委托:所有事件绑定到根节点(如
document
),而非每个子元素,减少内存消耗。 - 事件池机制:合成事件对象会被复用,事件回调执行完毕后属性会被清空,需通过
e.persist()
保留引用。 - 执行顺序:原生事件(如
addEventListener
)先于React合成事件执行。
4. 状态管理与更新机制
React通过批量更新优化状态变更的性能:
- 异步更新:
setState
或Hooks的状态更新会被合并,避免频繁触发渲染。 - Diff策略:在Fiber的
render阶段
计算虚拟DOM差异,commit阶段
一次性提交变更到真实DOM。
Hooks底层原理:
- 链表结构:Hooks(如
useState
)通过链表顺序记录状态,确保在多次渲染中正确获取值。 - 依赖收集:
useEffect
通过依赖数组跟踪变化,仅在依赖更新时执行副作用。
5. 组件通信与生命周期
- 组件间通信:支持父子组件Props传递、Context跨层级通信、全局状态管理(如Redux)。
- 生命周期阶段:
- 挂载阶段:
constructor
→render
→componentDidMount
。 - 更新阶段:
shouldComponentUpdate
(性能优化关键) →render
→componentDidUpdate
。 - 卸载阶段:
componentWillUnmount
清理资源。
- 挂载阶段:
6. React与React Native的关系
- 共同原理:均基于虚拟DOM驱动UI更新,但渲染目标不同——React渲染HTML DOM,React Native调用原生组件。
- 通信机制:React Native通过Bridge与原生平台通信,JavaScriptCore解析JS代码,JSON传递UI变更。
总结
React通过虚拟DOM、Fiber架构、合成事件等机制,在保证开发效率的同时优化性能。其底层设计(如并发模式)使应用更响应迅速,而状态管理与组件通信机制则提供了灵活的架构扩展能力。理解这些原理有助于解决复杂场景的性能问题,并深入掌握React生态技术栈。
细节
好的,我需要回答用户关于“React底层原理图解”的问题,并且根据我搜索到的资料生成详细且完整的回答。首先,我需要整理所有我搜索到的资料,找出与React底层原理相关的内容,尤其是涉及虚拟DOM、Diff算法、Fiber架构的部分。
用户我搜索到的资料共有18条,其中大部分讨论了React的虚拟DOM、Diff算法和Fiber架构。例如,都详细介绍了Fiber架构和Diff算法。则重点讲解了虚拟DOM和Diff算法的实现。还有一些资料如涉及React的核心机制和源码解析。
接下来,我需要将这些信息整合成一个结构清晰的回答。根据用户的要求,回答需要包含图解说明,但由于当前是文本形式,需要用文字描述结构,并分点详细解释各个部分。同时,每个引用需要标注对应的资料编号。
首先,React的底层原理可以分为几个核心部分:虚拟DOM、Diff算法、Fiber架构、调度机制和渲染流程。每个部分都需要详细展开,结合资料中的信息进行说明。
-
虚拟DOM:这是React高效渲染的基础。资料中提到虚拟DOM是真实DOM的轻量级副本,通过JavaScript对象表示,能够减少直接操作DOM的开销。都强调了虚拟DOM的作用和生成过程。
-
Diff算法:React通过Diff算法比较新旧虚拟DOM树的差异,仅更新变化的部分。详细描述了Diff算法的策略,如分层比较、组件类型判断和key值优化。需要说明Diff算法的三大策略,以及如何将时间复杂度优化到O(n)。
-
Fiber架构:这是React实现异步渲染和任务调度的核心。解释了Fiber的数据结构、任务拆分、优先级调度和双缓冲技术。需要描述Fiber节点如何构成链表结构,支持可中断和恢复的任务处理。
-
调度机制:Fiber架构下的调度器如何管理任务优先级,利用requestIdleCallback或自定义调度器分配时间片。提到调度器如何确保高优先级任务优先执行,避免阻塞主线程。
-
渲染流程:分为协调阶段和提交阶段。协调阶段生成Fiber树并标记副作用,提交阶段更新DOM。详细描述了这一过程,包括构建WorkInProgress树和提交更新。
在组织内容时,需要确保每个部分都有足够的细节,并引用对应的资料。例如,在解释Fiber架构时,引用来说明其解决的问题和实现方式;在讨论Diff算法时,引用来支持分层比较和key的作用。
同时,需要注意用户要求回答尽量详实,信息量大,因此每个子部分可能需要进一步细分。例如,在Fiber架构下,可以分点讲解Fiber节点的结构、任务拆分、双缓冲技术等。
最后,总结部分需要综合所有内容,强调React如何通过这些机制提升性能,并引用我搜索到的资料中的结论,如提到的未来发展和优化方向。
需要确保回答中的每个要点都有对应的资料引用,例如在提到虚拟DOM时引用,在Diff算法部分引用等。同时,语言需要连贯,避免冗余,按照用户我搜索到的资料准确概括,不添加未提及的信息。
React 底层原理图解(文字结构化解析)
一、核心架构分层(基于 Fiber 的异步渲染体系)
React 底层架构可分为 虚拟 DOM 层、协调器(Reconciler)层 和 渲染器(Renderer)层,其协作流程如下:
JSX → 虚拟 DOM → Fiber 树 → Diff 算法 → 副作用标记 → DOM 更新
二、虚拟 DOM 与内存计算模型
- 虚拟 DOM 的本质
- 虚拟 DOM 是 JavaScript 对象(
{ type, props, children }
),与真实 DOM 解耦,用于描述界面状态。 - 优势:
- 虚拟 DOM 是 JavaScript 对象(
- 批量更新:合并多次状态变更,减少 DOM 操作次数。
- 跨平台:通过抽象层适配不同渲染目标(Web/RN/Canvas)。
- 生成过程
- JSX 通过 Babel 转换为
React.createElement()
调用,生成虚拟 DOM 树。 - 示例代码:
// JSX <div className="container"><span>Hello</span></div> // 转换为 React.createElement('div', { className: 'container' }, React.createElement('span', null, 'Hello') );
- JSX 通过 Babel 转换为
三、协调器(Reconciler)与 Fiber 架构
-
Fiber 节点结构
每个组件对应一个 Fiber 节点,包含链表指针和状态信息:{tag: FunctionComponent, // 组件类型stateNode: ComponentInstance, // 组件实例return: parentFiber, // 父节点child: firstChildFiber, // 子节点sibling: nextSiblingFiber, // 兄弟节点alternate: currentFiber, // 指向当前树的对应节点(双缓冲)effectTag: Placement/Update/Deletion, // 副作用标记memoizedState: hooks链表 // Hooks 状态存储 }
-
Fiber 树的构建与双缓冲机制
- Current Tree:当前渲染的 Fiber 树。
- WorkInProgress Tree:构建中的新树,完成后替换 Current Tree。
- 优势:避免部分更新导致的中间状态可见,实现原子性提交。
-
任务调度与时间切片
- 可中断性:将渲染任务拆分为多个 Fiber 单元,通过
requestIdleCallback
或自定义调度器分配执行时间。 - 优先级策略:
- 可中断性:将渲染任务拆分为多个 Fiber 单元,通过
- 同步任务(用户输入):立即执行。
- 高优先级(动画):下一帧执行。
- 低优先级(数据请求):空闲时执行。
四、Diff 算法与高效更新策略
-
Diff 算法的三大优化策略
- 层级比较(Tree Diff) :仅比较同层级节点,跨层级移动直接重建。
- 组件类型判断:不同类型组件直接替换(如
<div>
→<span>
)。 - Key 值优化:通过唯一 Key 标识节点,减少无意义比对。
-
Diff 过程详解
- 单节点 Diff:通过
mapRemainingChildren
跟踪旧节点,寻找可复用的 Fiber。 - 多节点 Diff:
- 单节点 Diff:通过
-
遍历新子节点,匹配旧子节点索引。
-
记录移动/删除操作,生成副作用链表。
五、渲染流程分阶段解析
-
协调阶段(Render Phase)
- 深度优先遍历:从根 Fiber 开始,递归处理子节点,生成副作用列表。
- 生命周期触发:执行
getDerivedStateFromProps
、shouldComponentUpdate
等。
-
提交阶段(Commit Phase)
- DOM 操作批处理:根据副作用列表一次性更新真实 DOM。
- 生命周期钩子:触发
componentDidMount
、componentDidUpdate
。
六、性能优化关键设计
-
并发模式(Concurrent Mode)
- 通过
createRoot
启用,允许中断低优先级任务,优先处理用户交互。 - Suspense:延迟加载组件,优化首屏渲染。
- 通过
-
Hooks 与状态管理
- Fiber.memoizedState:链表结构存储 Hook 状态,确保顺序稳定性。
- 批量更新:事件循环内合并多次
setState
,减少渲染次数。
七、架构演进对比(Stack Reconciler vs Fiber)
特性 | Stack Reconciler | Fiber Reconciler |
---|---|---|
任务执行方式 | 递归(不可中断) | 循环链表(可中断/恢复) |
优先级支持 | 无 | 多优先级任务调度 |
内存占用 | 较低(无额外数据结构) | 较高(维护双缓冲 Fiber 树) |
适用场景 | 简单应用 | 复杂交互与动画场景 |
八、源码级流程图解
1. 初始化:ReactDOM.render(<App />, root)├─ 创建 FiberRoot(当前树根)├─ 调度首次渲染(scheduleUpdateOnFiber)2. 协调阶段├─ beginWork():处理组件渲染,生成子 Fiber├─ completeWork():创建 DOM 节点,收集副作用└─ 循环直至所有节点处理完成(可中断)3. 提交阶段├─ commitBeforeMutationEffects:生命周期预处理├─ commitMutationEffects:DOM 增删改└─ commitLayoutEffects:生命周期后处理
九、设计哲学与未来方向
- 增量渲染:将大型任务拆解为微小单元,避免阻塞主线程。
- 服务端组件:分离服务端/客户端逻辑,减少客户端负载(React Server Components)。
- 编译优化:通过编译器(如 React Forget)自动优化 Hook 依赖与渲染逻辑。
通过虚拟 DOM 抽象、Fiber 架构的任务调度和 Diff 算法的精准比对,React 实现了高效渲染与流畅交互。其底层设计体现了 时间切片、优先级调度 和 副作用批处理 三大核心思想,为复杂应用提供了坚实的基础架构支持。
相关文章:
React底层原理详解
React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时,需遵循逻辑清晰、层次分明、重点突出的原则,结合技术深度与实际应用场景。以下是结构化回答模板:…...
[含文档+PPT+源码等]精品基于Python实现的vue3+Django计算机课程资源平台
基于Python实现的Vue3Django计算机课程资源平台的背景,可以从以下几个方面进行阐述: 一、教育行业发展背景 1. 教育资源数字化趋势 随着信息技术的快速发展,教育资源的数字化已成为不可逆转的趋势。计算机课程资源作为教育领域的重要组成部…...
通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句
问题描述 在使用 LangChain 和 Llama 模型生成 SQL 查询时,遇到了 sqlite3.OperationalError 错误。错误信息如下: OperationalError: (sqlite3.OperationalError) near "sql SELECT Name FROM MediaType LIMIT 5; ": syntax error [SQL: …...
Mercury、LLaDA 扩散大语言模型
LLaDA 参考: https://github.com/ML-GSAI/LLaDA https://ml-gsai.github.io/LLaDA-demo/ 在线demo: https://huggingface.co/spaces/multimodalart/LLaDA Mercury 在线demo: https://chat.inceptionlabs.ai/ 速度很快生成...
常用的AI文本大语言模型汇总
AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…...
Starrocks入门(二)
1、背景:考虑到Starrocks入门这篇文章,安装的是3.0.1版本的SR,参考:Starrocks入门-CSDN博客 但是官网的文档,没有对应3.0.x版本的资料,却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料,不要用较…...
记录一次跨库连表的坑
一、背景 1. 业务背景 一个微服务项目,本次业务主要涉及两个板块,分别是 文章管理 和 系统管理。具有开发环境、测试环境、生产环境三个环境。其中,开发环境和测试环境用的是同一个服务器(nacos和MySQL都是用的同一个服务器中的…...
各种传参形式
一、QueryString 前端请求:http://localhost:8080/test/user/find?id26&namezhangsan 后端接收: 1.参数接收: RequestMapping("/find") public void find(String id,String name){... }2.对象接收: RequestMa…...
基于DeepSeek 的图生文最新算法 VLM-R1
目录 一、算法介绍 二 算法部署 三 模型下载 四 算法测试 五 可视化脚本 一、算法介绍 VLM-R1:稳定且可通用的 R1 风格大型视觉语言模型 自从 Deepseek-R1 推出以来,出现了许多专注于复制和改进它的作品。在这个项目中,我们提出了 VLM-R1,一种稳定且可通用的 R1 风格…...
⭐算法OJ⭐字符串与数组【动态规划 DP】(C++实现)最长公共子序列 LCS + 最短公共超序列 SCS
动态规划(Dynamic Programming, DP)在字符串数组相关的算法题中应用广泛,尤其是在解决子序列、子串、编辑距离、匹配等问题时。动态规划的核心思想是将问题分解为子问题,并通过存储子问题的解来避免重复计算,从而提高效…...
Ubuntu 下查看进程 PID 和终止进程方法
查看进程 PID 使用 ps 命令: ps aux | grep <process_name>例如,查看名为 python 的进程: ps aux | grep python使用 pgrep 命令: pgrep <process_name>例如,查看名为 python 的进程: pgrep python使用 top 命令: top…...
【无标题】Ubuntu22.04编译视觉十四讲slambook2 ch4时fmt库的报错
Ubuntu22.04编译视觉十四讲slambook2 ch4时fmt库的报错 cmake ..顺利,make后出现如下报错: in function std::make_unsigned<int>::type fmt::v8::detail::to_unsigned<int>(int): trajectoryError.cpp:(.text._ZN3fmt2v86detail11to_unsi…...
LangPrompt提示词
LangPrompt提示词 https://github.com/langgptai/LangGPT 学习LangGPT的仓库,帮我创建 一个专门生成LangGPT格式prompt的助手 根据LangGPT的格式规范设计的专业提示词生成助手框架。以下是分步骤的解决方案: 助手角色定义模板 # Role: LangGPT提示词架…...
Redis---缓存穿透,雪崩,击穿
文章目录 缓存穿透什么是缓存穿透?缓存穿透情况的处理流程是怎样的?缓存穿透的解决办法缓存无效 key布隆过滤器 缓存雪崩什么是缓存雪崩?缓存雪崩的解决办法 缓存击穿什么是缓存击穿?缓存击穿的解决办法 区别对比 在如今的开发中&…...
MySQL中的共享锁和排他锁
MySQL 中的锁可以从多个维度进行分类,其中从模式上可以分为共享锁(Shared Lock,S Lock)和 排他锁(Exclusive Lock,X Lock)。 共享锁(Shared Lock,S Lock) 共…...
Ubuntu 创建新用户及设置权限
1、新建用户 sudo adduser username 其中username是你要创建的用户的用户名,然后设置密码和相关信息就可以了 2、给新用户sudo权限 新创建的用户没有root权限,我们执行以下命令给用户sudo权限 sudo usermod -a -G adm username sudo usermod -a -G s…...
新建菜单项的创建之CmpGetValueListFromCache函数分析
第一部分: PCELL_DATA CmpGetValueListFromCache( IN PHHIVE Hive, IN PCACHED_CHILD_LIST ChildList, OUT BOOLEAN *IndexCached, OUT PHCELL_INDEX ValueListToRelease ) 0: kd> dv KeyControlBlock 0xe1…...
《论软件测试中缺陷管理及其应用》审题技巧 - 系统架构设计师
论软件测试中缺陷管理及其应用写作框架 一、考点概述 本论题“论软件测试中缺陷管理及其应用”主要考查的是软件测试领域中的缺陷管理相关知识与实践应用。论题涵盖了以下几个核心内容: 首先,需要理解软件缺陷的基本概念,即软件中存在的破坏正常运行能力的问题、错误或隐…...
530 Login fail. A secure connection is requiered(such as ssl)-java发送QQ邮箱(简单配置)
由于cs的csdN许多文章关于这方面的都是vip文章,而本文是免费的,希望广大网友觉得有帮助的可以多点赞和关注! QQ邮箱授权码到这里去开启 授权码是16位的字母,填入下面的mail.setting里面的pass里面 # 邮件服务器的SMTP地址 host…...
迷你世界脚本生物接口:Creature
生物接口:Creature 彼得兔 更新时间: 2024-05-22 17:51:22 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getAttr(...) 生物属性获取 2 setAttr(...) 生物属性设置 3 isAdult(...) 判断该生物是否成年 4 setOxygenNeed(…...
Python请求微店商品详情数据API接口
微店提供了开放平台供开发者接入获取相关数据,以下为你介绍使用Python请求微店商品详情数据API接口的一般步骤: 2. 确定API接口地址与请求参数 在 Python 中,使用 requests 库可以很方便地发送 HTTP 请求并获取响应数据。假设你需要请求 Al…...
【每日八股】MySQL篇(三):索引(上)
目录 MySQL 为什么使用 B 树来做索引,它的优势是什么?特性和定义B 树和 B 树的对比拓展:既然 B 树相较于 B 树优势如此之大,为什么 nosql 的 MongoDB 底层仍采用 B 树而不是 B 树? 使用 B 树做索引的优势补充ÿ…...
python实战项目59:使用python获取腾讯招聘数据并保存到mysql数据库中
python实战项目59:使用python获取腾讯招聘数据并保存到mysql数据库中 一、爬虫流程分析1、分析数据接口,发送请求二、创建数据库链接三、完整代码一、爬虫流程分析 1、分析数据接口,发送请求 目标网址为 https://careers.tencent.com/search.html?keyword=python&que…...
VMware Ubuntu 共享目录
在VMware中挂载Ubuntu共享目录需要以下步骤,分为设置共享文件夹和在Ubuntu中挂载两部分: 一、VMware 设置共享文件夹 关闭Ubuntu虚拟机 在配置前,建议先关闭虚拟机(若已运行需关闭,部分VMware版本支持热添加࿰…...
详细介绍一下springboot自定义注解的使用方法
在Spring Boot中,自定义注解通常结合AOP(面向切面编程)实现特定功能,如日志记录、权限校验等。以下是详细的使用步骤和示例: 1. 添加依赖 确保项目中包含Spring AOP依赖(Spring Boot Starter AOPÿ…...
‘nvcc‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
‘nvcc’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。默认情况一般都会提示这个,这是因为你还没有安装cuda驱动程序。 一、查看本机支持的cuda版本 nvidia-smi可以看到我们这里显示的CUDA版本是11.6,在我们安装的CUDA驱动的时候,版本不能超过11.6。 二、下载CU…...
计算机毕业设计SpringBoot+Vue.js教学辅助平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
大语言模型学习
大语言模型发展历程 当前国内外主流LLM模型 一、国外主流LLM LLaMA2 Meta推出的开源模型,参数规模涵盖70亿至700亿,支持代码生成和多领域任务适配57。衍生版本包括Code Llama(代码生成优化)和Llama Chat(对…...
几道考研数学题求解
函数性质问题 【题目】 已知函数 f ( x , y ) x 3 y 3 − ( x y ) 2 3 f(x, y) x^3 y^3 - (xy)^2 3 f(x,y)x3y3−(xy)23。设 T T T 为曲面 z f ( x , y ) z f(x, y) zf(x,y) 在点 ( 1 , 1 , 1 ) (1,1,1) (1,1,1) 处的切平面, D D D 为 T T T 与坐标…...
家用可燃气体探测器——家庭燃气安全的坚实防线
随着社会的发展和变迁,天然气为我们的生活带来了诸多便利,无论是烹饪美食,还是温暖取暖,都离不开它的支持。然而,燃气安全隐患如影随形,一旦发生泄漏,可能引发爆炸、火灾等严重事故,…...
c# 收发邮件
话不多说,请看代码:(后面附上项目整体代码,可详细查看。)。 算了,vip文章要评审,还是在这里给朋友们注释一下代码内容吧,方便大家参考使用。 收邮件: 核心代码&#x…...
springboot设置多环境配置文件
实际开发过程中会涉及多个环境,比如dev(开发环境),test(测试环境),prod(线上环境),不同环境下,端口号、数据库地址、redis地址等等会不尽相同,为了避免每次上线到不同环境都要修改配置文件可以在项目中配置…...
智能文档解析与语义分割:LlamaIndex 节点解析器模块全解
节点解析器模块 - LlamaIndex 文件内容的节点解析器 有几种基于文件的节点解析器,它们会根据解析的内容类型(JSON、Markdown 等)创建节点。 最简单的流程是将 FlatFileReader 与 SimpleFileNodeParser 结合使用,自动为每种内容类型选择最佳节点解析器。然后,可以将基于…...
Qt的坐标
一、介绍 控件的坐标是相对于父控件的,如果没有父控件,坐标就相当于桌面。 这是 Qt 坐标系: 二、坐标使用 坐标通过控件对象的 move 函数实现,move(int, int) 一个参数是 x,一个是 y,单位是像素。 代码…...
redis序列化设置
redis序列化设置 redis序列化设置序列化对象里有org.joda.time.DateTime1)、报错内容如下2)、解决方案:分别自定义时间的序列化和反序列化,以对象形式关联到redisTemplate redis序列化设置 redis序列化设置,通过自定义…...
Linux:进程概念
目录 1 冯诺依曼体系 2 操作系统(Operator System) 3 如何理解管理 3.1计算机管理硬件 3.2 管理逻辑图 3.3 怎样管理 4 什么是进程? 5 查看进程 5.1 ps ajx显示所有进程信息 5.2 /proc(内存文件系统) 5.2.1 ls /proc/PID 5.2.2 ls /proc/PID -al 5…...
web3.0简介
Web3.0(或简称 Web3)是近年来广泛讨论的一个新型互联网概念,其核心思想在于利用区块链及相关分布式技术,打造一个更加开放、去中心化、透明且以用户为主导的网络生态系统。这意味着在 Web3.0 时代,用户不再只是信息的消…...
前端控制器模式
前端控制器模式 引言 在软件设计模式中,前端控制器模式(Front Controller Pattern)是一种行为型设计模式。它提供了一种集中处理请求的机制,将请求分发到相应的处理者,从而简化了请求的处理流程。本文将详细介绍前端…...
【保姆级视频教程(二)】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!
【2025全站首发】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测! 文章目录 1. 数据集准备1.1 标签格式转换1.2 数据集划分1.3 yaml配置文件创建 2. 训练验证 1. 数据集准备 示例数据集下载链接:P…...
SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析
引言:接口测试的必要性 在微服务架构盛行的今天,SpringBoot项目的接口质量直接影响着系统稳定性。本文将分享如何通过自动化工具链实现接口的功能验证与性能压测,使用OpenAPI规范打通测试全流程,让您的接口质量保障体系更加完备。…...
Spring学习笔记02——bean的概念和常见注解标注
什么是bean? Bean 就是 被 Spring 管理的对象,就像工厂流水线上生产的“标准产品”。这些对象不是你自己 new 出来的,而是由 Spring 容器(一个超级工厂)帮你创建、组装、管理。 由 Component、Service、Controller 等注解标记的…...
JAVA最新版本详细安装教程(附安装包)
目录 文章自述 一、JAVA下载 二、JAVA安装 1.首先在D盘创建【java/jdk-23】文件夹 2.把下载的压缩包移动到【jdk-23】文件夹内,右键点击【解压到当前文件夹】 3.如图解压会有【jdk-23.0.1】文件 4.右键桌面此电脑,点击【属性】 5.下滑滚动条&…...
Redis学习笔记系列(一)——Redis简介及安装
1. Redis介绍 Redis是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行…...
【0005】Python变量详解
如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 任何一个语言编写的程序或者项目,都需要数据的支持,没有数据的项目不能称之为一个…...
实验:k8s+keepalived+nginx+iptables
1、创建两个nginx的pod,app都是nginx nginx1 nginx2 2、创建两个的pod的service 3、配置两台keepalived的调度器和nginx七层反向代理,VIP设置192.168.254.110 keepalived调度器master keepalived调度器backup 两台调度器都配置nginx七层反向代理&#…...
经典算法 统计数字问题(常数时间解决)
统计数字问题 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页…...
ViewPager2跟ViewPager的区别
1都是用来实现页面切换的,ViewPager2是ViewPager的增强版和升级版,ViewPager2是基于RecyclerView实现,可以支持横向和竖向页面切换,只需在布局文件添加一个android:orientation"vertical"即可,ViewPager只支…...
Github 仓库 git clone 速度过慢解决方案
很多时候想从 GitHub 上 clone 一个仓库,都会遇到速度慢的问题,而且经常连接失败,这里给出有效解决方案。 一、背景 应该是很多小伙伴碰到过的问题:想从 GitHub 上面 clone 项目,很多情况下会慢的离谱,等…...
数据结构 1-3 栈
一、原理 栈是只允许在一端进行插入或删除操作的线性表 所谓的栈,其实就是一个特殊的线性表(顺序表、链表),但是它在操作上有一些特殊的要求和限制: 栈的元素必须“后进先出”栈的操作只能在这个线性表的表尾进行。…...
MCP与RAG:增强大型语言模型的两种路径
引言 近年来,大型语言模型(LLM)在自然语言处理任务中展现了令人印象深刻的能力。然而,这些模型的局限性,如知识过时、生成幻觉(hallucination)等问题,促使研究人员开发了多种增强技…...