DeepSeek 微调实践:DeepSeek-R1 大模型基于 MS-Swift 框架部署 / 推理 / 微调实践大全

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】

GPT多模态大模型与AI Agent智能体书籍本章配套视频课程【陈敬雷】

文章目录

  • GPT多模态大模型与AI Agent智能体系列十五
    • DeepSeek 微调实践:DeepSeek-R1 大模型基于 MS-Swift 框架部署 / 推理 / 微调实践大全
    • 一、引言
    • 二、MS - Swift框架简介
    • 三、DeepSeek - R1模型简介
    • 四、DeepSeek - R1部署实践
      • 4.1 环境准备
      • 4.2 安装swift
      • 4.3 vllm加速
      • 4.4 模型下载
      • 4.5 模型部署
    • 五、DeepSeek - R1推理实践
    • 六、DeepSeek - R1微调实践
      • 6.1 数据集准备
      • 6.2 模型微调训练
      • 6.3 推理训练后权重文件
      • 6.4 LoRA合并&推理训练后的权重文件
    • 七、性能优化与评估
      • 7.1 deepseek硬件优化
      • 7.2 推理性能优化
      • 7.3 微调性能优化
      • 7.4 性能评估
      • 更多技术内容
  • 总结

GPT多模态大模型与AI Agent智能体系列十五

DeepSeek 微调实践:DeepSeek-R1 大模型基于 MS-Swift 框架部署 / 推理 / 微调实践大全

一、引言

随着大语言模型(LLM)在自然语言处理(NLP)领域的广泛应用,如何高效部署、推理和微调这些模型成为了一个重要的研究方向。DeepSeek - R1作为一款在推理能力方面表现突出的大型语言模型,凭借其独特的架构设计与先进的训练技术,在各类推理任务中脱颖而出。而MS - Swift框架则为大模型的高效部署提供了全面且强大的支持,两者结合,为开发者和研究人员提供了极具潜力的技术方案。本文将深入且细致地阐述基于MS - Swift框架的DeepSeek - R1模型在部署、推理和微调方面的实践操作,帮助大家快速掌握并熟练运用这一技术组合,从而在自然语言处理相关项目中充分发挥其优势。

二、MS - Swift框架简介

MS - Swift是一款专为大模型部署而精心打造的高效框架,具备出色的兼容性与丰富的功能特性。在模型类型支持上,无论是专注于文本处理的纯文本模型,还是融合文本、图像、音频等多种信息模态的多模态模型,亦或是擅长文本序列分类任务的序列分类模型,MS - Swift均能为其提供适配的部署环境。另外在功能层面,MS - Swift框架提供了基于Gradio的Web UI。Gradio作为开源的界面构建工具,能够以直观、便捷的方式搭建起用户与模型交互的可视化界面,即便非专业开发人员也能轻松上手,通过简单操作与模型进行对话、输入指令等。

三、DeepSeek - R1模型简介

DeepSeek - R1是一款专为提升推理能力而设计的大型语言模型。它在自然语言处理领域,尤其是复杂推理任务中表现出色,这得益于其独特的训练方式和优化策略。DeepSeek - R1采用了强化学习技术,通过与环境的交互不断优化模型的推理能力,使其能够在面对复杂的逻辑推理和多步骤问题时,生成准确且连贯的答案。此外,为了进一步提升模型的实用性和效率,DeepSeek - R1还结合了蒸馏技术,将大型模型的知识和能力迁移到更小的模型中,从而在保持推理性能的同时,显著降低了资源消耗。

DeepSeek - R1提供了多种蒸馏版本,以满足不同用户的需求。具体信息如下:
[此处插入各蒸馏版本相关参数、性能特点等图片描述]

DeepSeek - R1 - Distill - Qwen - 7B是一款在资源受限环境下具有突出优势的蒸馏模型。它既不像一些小型模型那样对硬件资源要求极低但推理性能有限,也不像大型模型那样对硬件资源需求较高但能在复杂场景中展现卓越的推理能力。它以适中的参数规模,在保持较为出色的推理性能的同时,能很好地适应普通个人电脑、小型服务器等资源受限的设备,为这些设备提供了高效推理的解决方案,是平衡资源与性能的最佳选择,能够满足大多数对推理效率有一定要求且受限于硬件资源的应用场景。而其他DeepSeek - R1 - Distill - Qwen - 14B和DeepSeek - R1 - Distill - Qwen - 32B等更大参数的蒸馏模型,在推理能力上表现更出色,更适合对性能要求较高的复杂场景。

四、DeepSeek - R1部署实践

4.1 环境准备

在部署DeepSeek - R1模型之前,需要准备合适的硬件和软件环境:
操作系统选用Ubuntu 22.04,其稳定性和丰富的软件资源,为AI开发提供了良好的基础。Python版本选择3.10,它在性能和兼容性上表现出色,广泛应用于各类AI项目。同时,安装PyTorch 2.1.2,作为深度学习的核心框架,PyTorch为模型的运行提供了高效的计算库和灵活的编程接口。此外,还需安装Cuda 11.8,它能充分发挥NVIDIA GPU的并行计算能力,加速模型的训练与推理过程。

4.2 安装swift

# pip install git+https://github.com/modelscope/ms - swift.git
git clone https://github.com/modelscope/ms - swift.git
cd ms - swift
pip install -e.

下载完成如下:[此处插入下载完成后的相关截图描述]

4.3 vllm加速

vLLM是一个高性能、灵活且易于部署的大语言模型推理框架,适用于需要高效处理大模型的场景。它通过优化的内存管理和高效的调度算法,显著提升了推理效率

# 临时指定清华源安装(推荐)
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple
# 临时指定阿里源安装(备用)pip install vllm -i https://mirrors.aliyun.com/pypi/simple

安装完成如下:[此处插入安装完成后的相关截图描述]

4.4 模型下载

DeepSeek - R1的蒸馏版本可以通过modelscope或者Hugging Face下载。以下以DeepSeek - R1 - Distill - Qwen - 7B为例:
使用modelscope中的snapshot_download函数下载模型(提前安装modelscope :pip install modelscope)。第一个参数为模型名称,参数cache_dir用于指定模型的下载路径。在/root/autodl - tmp路径下新建download.ipynb文件,并在其中输入以下内容:

from modelscope import snapshot_download
model_dir = snapshot_download('deepseek - ai/DeepSeek - R1 - Distill - Qwen - 7B', cache_dir='/root/autodl - tmp', revision='master')

运行代码执行下载,如下:[此处插入模型下载过程及完成后的截图描述]

4.5 模型部署

使用MS - Swift框架,可以通过以下命令启动模型服务:

CUDA_VISIBLE_DEVICES=0 swift deploy \--model /root/autodl - tmp/deepseek - ai/DeepSeek - R1 - Distill - Qwen - 7B \--infer_backend vllm

模型部署启动成功如下:[此处插入模型部署成功后的相关截图描述]

服务启动后,可以通过HTTP API访问模型。

我们可以使用cli命令脚本调用模型服务,在终端中输入以下命令:

curl http://localhost:8000/v1/chat/completions \
-H "Content - Type: application/json" \
-d '{
"model": "DeepSeek - R1 - Distill - Qwen - 7B",
"messages": [{"role": "user", "content": "用最精炼的语言介绍一下AI大模型"}],
"temperature": 0
}'

模型API返回如下:

{"model":"DeepSeek - R1 - Distill - Qwen - 7B","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n好的,我现在要介绍AI大模型。首先,我需要明确什么是AI大模型。AI大模型通常指的是像GPT、BERT这样的大型预训练模型,它们通过大量数据训练,能够处理复杂的自然语言任务。\n\n接下来,我应该解释这些模型的特点,比如它们的规模大、参数多,能够处理多种语言和任务。然后,说明它们的应用领域,比如文本生成、信息检索、对话系统等。\n\n最后,要提到这些模型对社会的积极影响,比如推动创新、提高效率,同时也要注意潜在的挑战,如隐私和伦理问题。\n\n现在,把这些点组织成一个连贯的介绍,语言要简洁明了,适合快速理解。\n</think>\n\nAI大模型是指经过大规模预训练的高级人工智能模型,具备处理复杂语言任务的能力,广泛应用于文本生成、信息检索和对话系统等领域,推动创新和效率提升,同时需注意隐私和伦理挑战。","tool_calls":null},"finish_reason":"stop","logprobs":null}],"usage":{"prompt_tokens":14,"completion_tokens":194,"total_tokens":208},"id":"61a7a02a832d4dd5ba6dd185a9fa417d","object":"chat.completion","created":1741687627}

部署推理资源消耗情况如下(28G左右):[此处插入资源消耗相关截图描述]

五、DeepSeek - R1推理实践

推理是DeepSeek - R1的核心应用场景之一。以下是一个基于MS - Swift框架的推理代码示例:

CUDA_VISIBLE_DEVICES=0 swift infer \--model /root/autodl - tmp/deepseek - ai/DeepSeek - R1 - Distill - Qwen - 7B \--stream true \--infer_backend vllm \--max_new_tokens 2048

脚本执行成功,推理效果如下:[此处插入推理结果相关截图描述]

六、DeepSeek - R1微调实践

微调是提升DeepSeek - R1模型性能的重要手段。以下是一个基于MS - Swift框架的微调步骤:

6.1 数据集准备

为对DeepSeek - R1 - Distill - Qwen - 7B模型开展微调,找了一份有趣的数据集(https://github.com/KMnO4 - zx/huanhuan - chat),内容如下:[此处插入数据集内容相关截图描述]

6.2 模型微调训练

以下是一个基于MS - Swift框架的lora微调代码示例:

CUDA_VISIBLE_DEVICES=0 \
swift sft \--model '/root/autodl - tmp/deepseek - ai/DeepSeek - R1 - Distill - Qwen - 7B' \--train_type lora \--dataset '/root/autodl - tmp/datasets/huanhuan.json' \--num_train_epochs 1 \--per_device_train_batch_size 1 \--learning_rate 1e - 4 \--lora_rank 8 \--lora_alpha 32 \--gradient_accumulation_steps 16 \--eval_steps 100 \--save_steps 100 \--save_total_limit 2 \
--logging_steps 5 

参数说明:

  • –model:指定预训练模型的名称或路径
  • –train_type lora :指定训练类型为LoRA(Low - Rank Adaptation),一种高效的微调方法
  • –dataset :指定训练数据集的名称或路径
  • –num_train_epochs:指定训练的总轮数(epoch),这里设置为1轮
  • –per_device_train_batch_size:指定每个设备(GPU)的训练批次大小,这里设置为1
  • –learning_rate:设置学习率,这里为1e - 4
  • –lora_rank:设置LoRA的秩(rank),用于控制LoRA层的参数数量,这里设置为8
  • –lora_alpha:设置LoRA的缩放因子alpha,用于控制LoRA层的缩放比例,这里设置为32
  • –gradient_accumulation_steps:设置梯度累积步数,用于在小批次情况下模拟大批次训练,这里设置为16步
  • –eval_steps:每隔多少步进行一次评估,这里设置为每100步评估一次
  • –save_steps:每隔多少步保存一次模型,这里设置为每100步保存一次
  • –save_total_limit:保存的模型总数限制,这里最多保存2个模型
  • –logging_steps:每隔多少步记录一次日志,这里设置为每5步记录一次
  • –model_author swift:指定模型作者,这里为“swift”
  • –model_name swift - robot:指定保存的模型名称,这里为“swift - robot”

微调训练结果如下:[此处插入微调训练过程中的指标、日志等相关截图描述]

微调后生成的新的checkpoint权重文件如下:
/root/autodl - tmp/output/DeepSeek - R1 - Distill - Qwen - 7B/v0 - 20250312 - 093007/checkpoint - 230

在微调过程中,建议使用结构化的提示数据,并通过拒绝采样生成更多训练样本。

6.3 推理训练后权重文件

直接加载微调后的权重文件,快速验证微调效果是否生效。

CUDA_VISIBLE_DEVICES=0 \
swift infer \--adapters /root/autodl - tmp/output/DeepSeek - R1 - Distill - Qwen - 7B/v0 - 20250312 - 093007/checkpoint - 230 \--stream true \--temperature 0 \
--max_new_tokens 2048

微调效果:[此处插入微调后推理结果相关截图描述]

微调训练后的权重文件实际上既包含了主模型的通用知识,也包含了微调后的特定知识,可以通过上面的方式快速查看微调效果。

6.4 LoRA合并&推理训练后的权重文件

不仅加载微调后的权重文件,还通过LoRA合并进一步优化推理结果。

# merge - lora and use vLLM for inference acceleration
CUDA_VISIBLE_DEVICES=0 \
swift infer \--adapters /root/autodl - tmp/output/DeepSeek - R1 - Distill - Qwen - 7B/v0 - 20250312 - 093007/checkpoint - 230 \--stream true \--merge_lora true \--infer_backend vllm \--max_model_len 8192 \--temperature 0 \
--max_new_tokens 2048

即可得到新的模型权重文件:
/root/autodl - tmp/output/DeepSeek - R1 - Distill - Qwen - 7B/v0 - 20250312 - 093007/checkpoint - 230 - merged

七、性能优化与评估

7.1 deepseek硬件优化

对于非常小的馏模型(如1.5B),只需要GTX 1650、RTX 3060
对于较小的蒸馏模型(如7B),单卡V100或A100即可满足需求。
对于较大的模型(如14B),推荐使用多卡并行。

7.2 推理性能优化

使用MS - Swift框架的vllm模式可以显著提升推理速度。
在推理时,可以通过调整max_new_tokens和temperature参数来优化生成结果。

7.3 微调性能优化

在微调时,建议增加epoch次数或扩充数据集。
如果显存不足,可以减小batch_size或增大gradient_accumulation_steps。

7.4 性能评估

使用标准的推理基准测试(如AIME 2024)评估模型性能。
比较不同蒸馏版本的性能,选择最适合的模型。

更多技术内容

更多技术内容可参见
《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】书籍。
更多的技术交流和探讨也欢迎加我个人微信chenjinglei66。

总结

此文章有对应的配套新书教材和视频:

【配套新书教材】
《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】
新书特色:《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)是一本2025年清华大学出版社出版的图书,作者是陈敬雷,本书深入探讨了GPT多模态大模型与AI Agent智能体的技术原理及其在企业中的应用落地。
全书共8章,从大模型技术原理切入,逐步深入大模型训练及微调,还介绍了众多国内外主流大模型。LangChain技术、RAG检索增强生成、多模态大模型等均有深入讲解。对AI Agent智能体,从定义、原理到主流框架也都进行了深入讲解。在企业应用落地方面,本书提供了丰富的案例分析,如基于大模型的对话式推荐系统、多模态搜索、NL2SQL数据即席查询、智能客服对话机器人、多模态数字人,以及多模态具身智能等。这些案例不仅展示了大模型技术的实际应用,也为读者提供了宝贵的实践经验。
本书适合对大模型、多模态技术及AI Agent感兴趣的读者阅读,也特别适合作为高等院校本科生和研究生的教材或参考书。书中内容丰富、系统,既有理论知识的深入讲解,也有大量的实践案例和代码示例,能够帮助学生在掌握理论知识的同时,培养实际操作能力和解决问题的能力。通过阅读本书,读者将能够更好地理解大模型技术的前沿发展,并将其应用于实际工作中,推动人工智能技术的进步和创新。

【配套视频】

GPT多模态大模型与AI Agent智能体书籍本章配套视频 - 第1章 大模型技术原理【陈敬雷】
视频特色: 前沿技术深度解析,把握行业脉搏
揭秘 DeepSeek、Sora、GPT-4 等多模态大模型的技术底层逻辑,详解 Transformer 架构如何突破传统神经网络局限,实现长距离依赖捕捉与跨模态信息融合。
对比编码预训练(BERT)、解码预训练(GPT 系列)及编解码架构(BART、T5)的技术差异,掌握大模型从 “理解” 到 “生成” 的核心逻辑。
实战驱动,掌握大模型开发全流程
提示学习与指令微调:通过 Zero-shot、Few-shot 等案例,演示如何用提示词激活大模型潜能,结合 LoRA 轻量化微调技术,实现广告生成、文本摘要等场景落地(附 ChatGLM3-6B 微调实战代码)。
人类反馈强化学习(RLHF):拆解 PPO 算法原理,通过智谱 AI 等案例,掌握如何用人类偏好优化模型输出,提升对话系统的安全性与实用性。
智能涌现与 AGI 前瞻,抢占技术高地
解析大模型 “智能涌现” 现象(如上下文学习、思维链推理),理解为何参数规模突破阈值后,模型能实现从 “量变” 到 “质变” 的能力跃升。
前瞻通用人工智能(AGI)发展趋势,探讨多模态模型(如 Sora)如何推动 AI 从 “单一任务” 向 “类人智能” 进化,提前布局未来技术赛道。

上一篇:《GPT多模态大模型与AI Agent智能体》系列一》大模型技术原理 - 大模型技术的起源、思想
下一篇:DeepSeek大模型技术系列五》DeepSeek大模型基础设施全解析:支撑万亿参数模型的幕后英雄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90957.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础知识pip配置pip.conf文件

pip.conf一、 INI格式二、 级别三、 文件位置四、 加载顺序五、 常用一、 INI格式 配置文件可以更改pip命令行选项的默认值&#xff0c;这个文件是使用INI格式编写的。 INI格式 主要包含三个内容&#xff1a;1.节section 2.键值对 3.注释 [section1] key1 value1 \\注释 key2…

深入理解 Java JVM

文章目录&#x1f4d5;1. JVM简介&#x1f4d5;2. JVM运行流程&#x1f4d5;3. JVM运行时数据区&#x1f4d5;4. JVM类加载✏️4.1 类加载过程✏️4.2 双亲委派模型✏️4.3 破坏双亲委派模型&#x1f4d5;5. JVM垃圾回收机制&#xff08;GC机制&#xff09;✏️5.1 判断死亡对象…

Linux内核高效之道:Slab分配器与task_struct缓存管理

前言 在Linux内核中&#xff0c;进程创建与销毁是最频繁的操作之一。想象一下&#xff1a;当系统每秒需要处理成百上千次fork()和exit()调用时&#xff0c;如何保证task_struct&#xff08;进程描述符&#xff09;的分配与释放既快速又不产生内存碎片&#xff1f;这就是Slab分配…

双esp8266-01之间UDP透传传输,自定义协议

使用AT模式的透传&#xff0c;串口打印的数据包含pd1,4,数据打印的数据不是直接将数据打印出来&#xff0c;包含了pd1,4,特殊字符&#xff0c;针对想要直接开机直接透传&#xff0c;打印数据且按照自主协议帧头的功能进行开发。1.server程序&#xff1a;/*************SERVER**…

BGP 路由优选属性(7)【MED】官方考试综合实验题【bgp】【acl】【ip-prefix】【route-policy】【icmp 环路】精讲

目录 一、MED 属性介绍 二、实验 2.1 实验目的 2.2 拓扑图 2.2 实验说明 2.3 配置脚本 2.4 验证配置 2.5 问题分析 2.7 题目需求解析 2.8 场景 1&#xff1a;只允许在 AS12 上操作 2.9 场景 2&#xff1a;只允许在 AS34 上操作 正文 一、MED 属性介绍 MED 全称 mu…

html-初级标签

一.浏览器能识别的标签 1.1 head标签里的编码和title <head><meta charset"UTF-8"><title>Title</title> </head>1.2 标题 <body><h1>Welcome to my website</h1><h2>Welcome to my website</h2><…

【八股消消乐】Kafka集群 full GC 解决方案

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…

《Java Web程序设计》实验报告二 学习使用HTML标签、表格、表单

目 录 一、实验目的 二、实验环境 三、实验步骤和内容 1、小组成员分工&#xff08;共计4人&#xff09; 2、实验方案 3、实验结果与分析 4、项目任务评价 四、遇到的问题和解决方法 五、实验总结 一、实验目的 1、HTML基础知识、基本概念 2、使用HTML标签、表格进行…

jenkins使用Jenkinsfile部署springboot+docker项目

文章目录前言一、前期准备二、编辑构建文件二、Jenkins构建总结前言 前面使用Jenkinsfile部署了前端vue项目&#xff0c;接着学习Jenkinsfile部署springboot项目。 一、前期准备 已经安装好centos,并且安装了jenkins和docker。本地新建springboot并上传到gitee上。 二、编辑…

使用ESM3蛋白质语言模型进行快速大规模结构预测

文章目录ESM3介绍ESM3在线使用本地使用api批量预测ESM相较于AlphaFold的优势ESM3介绍 ESM3是由EvolutionaryScale&#xff08;前Meta团队&#xff09;开发的一款蛋白质大语言模型&#xff0c;于2025年以《用语言模型模拟 5 亿年的进化》为题正式发表在Science上 文章链接: htt…

PostgreSQL 时间/日期管理详解

PostgreSQL 时间/日期管理详解 引言 PostgreSQL是一款功能强大的开源关系型数据库管理系统&#xff0c;在时间/日期管理方面具有独特的优势。本文将详细介绍PostgreSQL中时间/日期数据类型及其相关功能&#xff0c;帮助读者更好地理解和应用时间/日期管理。 时间/日期数据类型 …

Agent篇

Agent包含哪些模块&#xff0c;实现了什么功能Agent 就像一个多功能的接口&#xff0c;它能够接触并使用一套工具。根据用户的输入&#xff0c;Agent会规划出一条解决用户问题的路线&#xff0c;决定其中需要调用哪些工具&#xff0c;并调用这些工具。Agent 大语言模型规划记忆…

利用 MySQL 进行数据清洗

利用 MySQL 进行数据清洗是数据预处理的重要环节&#xff0c;以下是常见的数据清洗操作及对应 SQL 示例&#xff1a;1. 去除重复数据使用 ROW_NUMBER() 或 GROUP BY 识别并删除重复记录。-- 查找重复记录&#xff08;以 user_id 和 email 为例&#xff09; WITH Duplicates AS …

【MySQL笔记】事务的ACID特性与隔离级别

目录1. 什么是事务&#xff1f;2. 事务的ACID特性&#xff08;重要&#xff09;3. 事务控制语法4. 隔离级别与并发问题1. 什么是事务&#xff1f; 事务&#xff08;Transaction&#xff09;是由一组SQL语句组成的逻辑单元&#xff0c;这些操作要么全部成功&#xff0c;要么全部…

Mock 数据的生成与使用全景详解

Mock 数据的生成与使用全景详解 在后端开发过程中,真实数据往往受限于业务进度、隐私保护或接口未完成等因素,无法及时获取。这时,Mock数据(模拟数据)就成为开发、测试、联调不可或缺的利器。本文将从Mock数据的意义、常用场景、主流工具、实战案例到最佳实践,带你全面掌…

HTML 标题标签

需求&#xff1a;在网页显示六级标题标签。代码&#xff1a;//需求&#xff1a;在网页显示六级标题标签。 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body><h1>一级标题&l…

(限免!!!)全国青少年信息素养大赛-算法创意实践挑战赛小学组复赛(代码版)

选择题部分在 C 中&#xff0c;以下代表布尔类型的是&#xff08;  &#xff09;选项&#xff1a;A. double B. bool C. int D. char答案&#xff1a;B解析&#xff1a;C 中布尔类型的关键字为bool&#xff0c;用于存储逻辑值true或false。执行以下程序&#xff0c;输出的…

编译器优化——LLVM IR,零基础入门

编译器优化——LLVM IR&#xff0c;零基础入门 对于大多数C开发者而言&#xff0c;我们的代码从人类可读的文本到机器可执行的二进制文件&#xff0c;中间经历的过程如同一个黑箱。我们依赖编译器&#xff08;如GCC, Clang, MSVC&#xff09;来完成这项复杂的转换。然而&#x…

react中为啥使用剪头函数

在 React 中使用箭头函数&#xff08;>&#xff09;主要有以下几个原因&#xff1a;1. 自动绑定 this传统函数的问题&#xff1a;在类组件中&#xff0c;普通函数的this指向会根据调用方式变化&#xff0c;导致在事件处理函数中无法正确访问组件实例&#xff08;this为undef…

JavaSE-多态

多态的概念在完成某个行为时&#xff0c;不同的对象在完成时会呈现出不同的状态。比如&#xff1a;动物都会吃饭&#xff0c;而猫和狗都是动物&#xff0c;猫在完成吃饭行为时吃猫粮&#xff0c;狗在完成吃饭行为时吃狗粮&#xff0c;猫和狗都会叫&#xff0c;狗在完成这个行为…