研发效率破局之道阅读总结(3)工程优化
研发效率破局之道阅读总结(3)工程优化
Author: Once Day Date: 2025年4月22日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文章可参考专栏: 程序的艺术_Once-Day的博客-CSDN博客
注: 本文内容摘抄于原文,文中"我"代表原作者【葛俊】大佬视角。
参考文章:
- 研发效率破局之道
文章目录
- 研发效率破局之道阅读总结(3)工程优化
- 1. 软件研发环境
- 2. 如何做好代码审查
- 3. 如何处理技术债
- 4. 测试如何应对新的开发模式
- 5. 各种部署的定义
1. 软件研发环境
按照开发流程,软件研发需要以下几种环境:
- 开发机器;
- IDE;
- 开发过程中使用的各种工具、数据和配置;
- 本地环境、联调环境;
- 测试环境、类生产环境
Facebook 从不吝啬在开发机器上的投资。每个开发人员除了有一台笔记本外,还在远程数 据中心有一台开发机器。数据中心的机器用于后端以及网站的开发,为方便描述,我称之为 后端开发机。而笔记本有两个用处:一是用来做移动端 App 的开发;二是作为终端,连接 到后端开发机做后端和网站开发。
两台机器的配置都非常强劲。后端开发机一开始是实体机器,后来为了便于管理和提高资源利用率,逐步转为了虚拟机,但不变的是配置依然强大。在 2015 年的时候,绝大部分机器 配置都能达到 16 核 CPU 、144G 内存。笔记本有两种选择,一种是苹果 MacBook Pro, 另一种是联想 ThinkPad,都是当时市场上顶配或者顶配下一级的配置。
配置高效的研发环境主要包括以下几条原则:
- 舍得投入资源,用资源换取开发人员时间。
- 对环境的获取进行服务化、自助化。
- 注重环境的一体化、一致性,也就是要把团队的最佳实践固化下来。
2. 如何做好代码审查
做好代码审查的一个前提条件就是,要找到适合自己团队的方法。
按照定义,人工检查才是代码审查。机器进行的检查一般叫作代码检查或者代码自动检查。
代码审查的作用很多,主要表现在 5 个方面。
- 尽早发现 Bug 和设计中存在的问题。我们都知道,问题发现得越晚,修复的代价越大。代码审查把问题的发现尽量提前,自然会提高效能。
- 提高个人工程能力。不言而喻,别人对你的代码提建议,自然能提高你的工程能力。事实上,仅仅因为知道自己的代码会被同事审查,你就会注意提高代码质量。
- 团队知识共享。一段代码入库之后,就从个人的代码变成了团队的代码。代码审查可以帮助其他开发者了解这些代码的设计思想、实现方式等。
- 针对某个特定方面提高质量。一些比较专业的领域,比如安全、性能、UI 等,可以邀请专家进行专项审查。另外,一些核心代码或者高风险代码,也可以通过团队集体审查的方式来保证质量。
- 统一编码风格。
按照审查方式,代码审查可以分为工具辅助的线下异步审查和面对面审查两类。
- 工具辅助的线下异步审查,就是代码作者通过工具将代码发送给审查者,审查者再通过工具把反馈传递给作者。可以控制审查时间,减少对自己工作的干扰,会留下文档,方便以后参考。
- 面对面审查,就是审查者和代码作者在一块儿阅读代码,进行实时讨论。这种方式的好处是快,可以高效地审查不方便用文字讨论的代码。比如,架构问题的讨论就很适合用这种方式。
事实上,有调查显示,代码审查更容易发现架构问题而不是 Bug。所以我的建议是,尽量使用代码设计时审查。具体的方法是,可以使用与门禁代码检查相同的工具,只不过这个时候发出去的 PR 目的是为了讨论,而不是为了入库。讨论结束后删除这个 PR 即可。
代码审查需要时间,这听起来好像是废话,但很多团队在引入代码审查时,都没有为它预留 时间。结果是大家没有时间做审查,效果自然也就不好。而效果不好又导致代码审查得不到 管理者重视,开发人员更不可能将代码审查放到自己的工作计划中。于是,形成恶性循环, 代码审查要么被逐渐废弃,要么流于形式。
管理者要明确代码审查是开发工作的重要组成部分,并记入工作量和绩效考评。这是成功引入代码审查的前提,再怎么强调都不为过。
成功推进代码审查的关键操作:
- 代码提交的原子性,是指一个提交包含一个不可分割的特性、修复或者优化,同时这个提交要尽可能小。
- 提高提交说明的质量,,好的格式应该包含:标题,详细描述,测试情况,与其他工具和系统相关的信息。
代码审查是两个开发者之间的技术交流,双方都要谨记互相尊重的原则。
从审查者的角度来看,在提出建议的时候,一定要考虑代码作者的感受。最重要的一点是, 不要用一些主观标准来评判别人的代码。
在打回提交的时候,一定要礼貌地描述原因。审查要尽量及时,如果不能及时审查要告知作者。
代码审查常常出现问题的一个地方是,在审查过程中因为意见不同而产生争执甚至争吵,所以一定记住代码审查的目的是讨论,而不是评判。讨论的心态,有助于放下不必要的自尊心,从而顺利地进行技术交流,提高审查效率。另外,讨论的心态也能促进大家提早发出审查,从而尽早发现结构设计方面的问题。
审查者切记不要说教,说教容易让人反感,不是讨论的好方法。审查者提意见即可,不一定要提供解决方法。我曾经见过一个团队要求提出问题必须给出对应的答案,结果是大家都不愿提问题了。
想办法增加讨论的有趣性。
3. 如何处理技术债
第一方面,要利用技术债的好处,必要时要大胆“举债前行”。也就是说,在机会出现时, 使用最快的方式完成业务服务用户,抢占市场先机,“不要在意那些细节”。
第二个方面,要控制技术债,在适当的时候偿还适当部分的技术债。
控制技术债主要有以下 4 步:
- 让公司管理层意识到偿还技术债的重要性,从而愿意投入资源;
- 采用低成本的方式去预防;
- 识别技术债并找到可能的解决方案;
- 持续重构,解决高优先级技术债。
4. 测试如何应对新的开发模式
测试可以保证产品质量,重要性不言而喻。但,要做好测试也比较困难,需要克服很多挑 战。尤其是,持续交付、敏捷开发等开发模式为传统软件测试方式带来了更大的时间压力。
我们先来看看下面这种熟悉的测试方式都有什么问题:
测试人员接到项目后参与需求评审, 然后根据需求文档写用例、准备脚本,等开发提测之后正式开始测试、提 Bug、回归,测 试通过后就结束了,项目交给运维上线,之后投入下一个项目继续重复这样的流程。
这样的流程看似没什么错,但有两大问题:
- 测试人员非常被动。当需求质量、开发质量较差的时候,测试人员只能被动接受。
- 但同时,测试又被认为是质量的责任人。如果因为需求质量、开发提测质量差而导致上线 延期,大家通常会首先怪罪测试团队。
这些问题,在新的开发模式下愈发严重。因为这些新的开发模式有一个共同点,就是要缩短 产品的交付周期,对自动化的要求越来越高,能够专门留给传统竖井流程中测试环节的时间 越来越短,自然更难保证质量。
测试左移和右移,就是把测试的范围从传统测试的节点中释放出来,向左和右扩展。
- 向左扩展,就是让测试介入代码提测之前的部分。比如,扩展到开发阶段,在架构设计时就考虑产品的可测试性,并尽量进行开发自测等。另外,测试可以更进一步扩展到需求评审阶段,让测试人员不只是了解需求,更要评估需求的质量,比如分析需求的合理性以及完整性等。
- 测试右移,是让测试介入代码提测之后的部分。比如,测试人员在产品上线过程中,利用线上的真实环境测试。另外产品上线之后,测试人员仍然介入,通过线上监控和预警,及时发现问题并跟进解决,将影响范围降到最低。这样一来,测试人员不但有更多的时间进行测试,还能发现在非生产环境中难以发现的问题。
要做好测试左移,有 3 个基本原则:
- 调整团队对测试的态度。一个有效的办法是,按照功能的维度管理团队,让整个功能团队对产品负责。也就是说,如果产品质量出现问题, 不只是测试团队“背锅”,而是会影响整个功能团队的绩效。
- 把测试添加到开发和产品需求步骤中。常用的办法是,让测试人员参与到开发阶段的方案设计中,了解开发的实现方式。因为很多开发人员可能只熟悉他负责的那一部分,而测试人员往往对全局更加了解,所以测试人员要评估改动范围以及是否有遗漏的模块 和系统。
- 频繁测试,快速测试。在测试左移之前,我们需要等待提测,比较被动,不能频繁测试。但测试左移到开发阶段之后,我们就有了很大的自由度去频繁运行测试,从而更好地发挥测试的作用,尽早发现更多的问题。
测试左移,本质上是尽早发现问题、预防问题。基本原则包括:从人的角度出发,让产 品、开发、运维人员统一认识,重视测试;从流程上,让测试融入产品设计和开发步骤中; 快速测试、频繁测试。
其实,软件开发行业早就达成了共识,问题发现得越晚,修复代价越大。
5. 各种部署的定义
蓝绿部署(Blue-green Deployment)、红黑部署(Red-black Deployment)和灰度发布(Gray Release ,或 Dark Launch)的定义和流程:
(1)蓝绿部署,是采用两个分开的集群对软件版本进行升级的一种方式。它的部署模型中包括一 个蓝色集群 A 和一个绿色集群 B,在没有新版本上线的情况下,两个集群上运行的版本是 一致的,同时对外提供服务。
- 首先,从负载均衡器列表中删除集群 A,让集群 B 单独提供服务。
- 然后,在集群 A 上部署新版本。
- 接下来,集群 A 升级完毕后,把负载均衡列表全部指向 A,并删除集群 B,由 A 单独提供服务。
- 在集群 B 上部署完新版本后,再把它添加回负载均衡列表中。
(2)红黑部署,与蓝绿部署类似,红黑部署也是通过两个集群完成软件版本的升级。当前提供服务的所有机器都运行在红色集群 A 中,当需要发布新版本的时候:
- 先在云上申请一个黑色集群 B,在 B 上部署新版本的服务;
- 等到 B 升级完成后,我们一次性地把负载均衡全部指向 B;
- 把 A 集群从负载均衡列表中删除,并释放集群 A 中所有机器。
(3)灰度发布,也被叫作金丝雀发布。与蓝绿部署、红黑部署不同的是,灰度发布属于增量发布方法。也就是说,服务升级的过程中,新旧版本会同时为用户提供服务。
灰度发布的具体流程是这样的:在集群的一小部分机器上部署新版本,给一部分用户使用, 以测试新版本的功能和性能;确认没有问题之后,再对整个集群进行升级。简单地说,灰度 发布就是把部署好的服务分批次、逐步暴露给越来越多的用户,直到最终完全上线。
相关文章:
研发效率破局之道阅读总结(3)工程优化
研发效率破局之道阅读总结(3)工程优化 Author: Once Day Date: 2025年4月22日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…...
树莓派超全系列教程文档--(40)树莓派config.txt旧版GPIO控制、超频及条件过滤器
树莓派config.txt旧版GPIO控制、超频及条件过滤器 传统GPIO控制enable_jtag_gpio 传统超频选项超频never_over_voltagedisable_auto_turbo 遗留条件过滤器The [HDMI:*] 过滤器 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 传统GPIO控制 &…...
网络基础概念(下)
网络基础概念(上)https://blog.csdn.net/Small_entreprene/article/details/147261091?sharetypeblogdetail&sharerId147261091&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link 网络传输的基本流程 局域网网络传输流…...
DES、3DES、SM4 加密算法简介
1. DES(Data Encryption Standard) 设计时间:1975 年(IBM 开发,1977 年被 NIST 采纳为美国联邦标准)。 密钥长度:64 位(实际有效 56 位 8 位校验)。 分组长度…...
如何在 Ansys Icepak AEDT 中设置多个流程以加快仿真速度?
您将学习如何进行正确的设置,以通过增加进程数量来加快仿真速度。 Ansys Icepak AEDT 需要与 Icepak Classic 不同的设置。 要设置要在 Ansys Icepak AEDT 中使用的进程数,您需要按照以下步骤作: 首先,转到“工具 - >选项 - …...
【MCP Node.js SDK 全栈进阶指南】初级篇(2):MCP基础服务器开发
引言 在上一篇文章中,我们详细介绍了MCP开发环境的搭建。本文作为MCP TypeScript-SDK系列的第二篇,将深入探讨MCP基础服务器开发的核心内容,包括服务器创建与生命周期管理、McpServer与Server的区别与选择、各种配置选项的详解,以及基本启动与调试技巧。通过本文学习,你将…...
客户端 AI 与服务器端 AI 的深度比较及实践建议?
1. 性能与延迟 客户端AI(In-Browser AI): // 使用TensorFlow.js在浏览器中进行图像分类 const model await tf.loadLayersModel(local-model/model.json);// 实时摄像头处理 const video document.getElementById(webcam); const…...
【(保姆级教程)Ubuntu24.10下部署Dify】
目录 一、下载Ubuntu二、安装Ubuntu三、在 Ubuntu 上安装 Docker Engine1、设置Docker的apt仓库2、安装 Docker 包 四、在 Ubuntu 上安装 Docker Desktop1、先决条件2、下载最新 DEB 包3、安装软件包4、启动 Docker Desktop5、检查版本 五、克隆 Dify 代码仓库六、启动 Dify1、…...
计算机组成原理---总线系统的详细概述
1.数据传输的两个方式 串行传输和并行传输:串行传输和并行传输 串行:适合的就是传输的距离比较远,这个对应的成本也是比较低的; 并行:传输的效率很高,因为分成了不同的线路,这个适合的就是短距离…...
C++静态与动态联编区别解析
在 C++ 中,静态联编(Static Binding)和动态联编(Dynamic Binding)是两种不同的函数调用绑定机制,核心区别在于确定函数调用的时机和多态性的支持。以下是详细解释: 1. 静态联编(Static Binding) 定义:在编译阶段确定函数调用与具体实现的关系。特点: 由编译器直接确…...
Linux 一些常用的命令记录
常见命令如下 查询内容 find / -name 例如:查找 libstdc.so* find / -name "libstdc.so*" 查询运行环境:/lib64/libstdc.so.6 内容是可以修改为其他的 strings /lib64/libstdc.so.6 | grep CXXABI创建软连接(创建超链接&…...
面试题-链表(1)
1.移除链表元素: 203. 移除链表元素 - 力扣(LeetCode) 删除一个链表中的相同元素。 我这里用的方法只需要将链表遍历一次,就可以删除所有节点。 前后指针法: public ListNode removeElements(ListNode head, int val) { //先判…...
【云馨AI-大模型】Dify 1.2.0:极速集成 SearXNG,畅享智能联网搜索新境界,一键脚本轻松部署SearXNG
SearXNG部署目录创建一键脚本SearXNG访问 Dify SearXNG插件安装SearXNG 插件安装进行授权工作流中进行验证工作流测试 SearXNG部署 目录创建 mkdir -p /data/yunxinai && cd /data/yunxinai 一键脚本 git clone https://gitcode.com/yunxinai/rag-sh.git 一键执行脚…...
Python 设计模式:访问者模式
1. 什么是访问者模式? 访问者模式是一种行为设计模式,它允许你在不改变对象结构的前提下,定义新的操作。通过将操作封装在访问者对象中,访问者模式使得你可以在不修改元素类的情况下,向元素类添加新的功能。 访问者模…...
dify工作流之text-2-e-sql,大模型写sql并执行
市面上有太多的text-to-sql工具,但是我这次突发灵感,为什么不做一个可以执行sql得text2sql呢。 dify的安装我不再赘述,我采用的是win10本地docker部署的方式。 mysql的安装也不再介绍,如有需要还请移步其他博主。 1.dify创建工…...
Neo4j 可观测性最佳实践
Neo4j 介绍 Neo4j 是一款领先的图数据库管理系统,采用图数据模型来表示和存储数据。它以节点、关系和属性的形式组织数据,节点代表实体,关系表示节点间的连接,属性则为节点和关系附加信息。Neo4j 使用 Cypher 查询语言࿰…...
【随手记】jupyter notebook绘制交互式图像
在 Jupyter Notebook 中 魔法命令特点%matplotlib notebook图形是交互式的,可缩放、旋转(适合 3D 图)%matplotlib inline图像静态显示,简单快速,适用于大多数2D图绘制 在 %matplotlib notebook 的 3D 图中,…...
[大模型]AI Agent入门01——AI Agent概念梳理
什么是 Agent(智能体) 定义 Agent 是并能够感知环境,同时可以自主采取行动以实现特定目标的实体。 Agent(代理)是计算机科学中的一个概念,指一种置于某种环境中,能够感知环境中的信息并自…...
【锂电池剩余寿命预测】BiLSTM双向长短期记忆神经网络锂电池剩余寿命预测(Matlab源码)
目录 效果一览程序获取程序内容代码分享研究内容BiLSTM双向长短期记忆神经网络锂电池剩余寿命预测摘要关键词1. 引言1.1 研究背景1.2 研究现状与问题1.3 研究目的与意义2. 文献综述2.1 锂电池剩余寿命预测理论基础2.2 传统预测方法概述2.3 基于深度学习的预测方法进展3. BiLSTM…...
基于机器学习的房租影响因素分析系统
基于机器学习的房租影响因素分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】数据可视化及预测分析的完整流程文档 【技术栈】 ①:系统环境:Python 3.8, Django 4.2 ②:开发环境&#…...
【c++深入系列】:万字string详解(附有sso优化版本的string模拟实现源码)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 当你想放弃时,想想为什么当初坚持走到了这里 ★★★ 本文前置知识: 类和对象(上) 类和对…...
黑马点评redis改 part 4
Redis消息队列实现异步秒杀 一些额外话语:过来人提醒下,不要用stream,可以跳过不看,用专业的消息队列中间件,同时准备好消息队列的八股,否则简陋的stream很容易被问死。 异步持久化还存在消息丢失、消息重复…...
【Python Web开发】01-Socket网络编程01
文章目录 1.套接字(Socket)1.1 概念1.2 类型1.3 使用步骤 Python 的网络编程主要用于让不同的计算机或者程序之间进行数据交换和通信,就好像人与人之间打电话、发消息一样。 下面从几个关键方面通俗易懂地介绍一下: 1.套接字(Socket) 在 Python 网络编…...
『不废话』之Python管理工具uv快速入门
在『不废话』之大模型推理超参数解释『不废话』之动手学MCP 中提到了uv,很多朋友都说没用过,咨询有什么优势? 通常Python新手都会使用conda、miniconda来管理Python环境,稍微高阶水平的会使用pyenv、poetry、virtualenv等工具来管…...
2025年中国高端家电品牌市场分析:海尔Haier、美的Midea、格力GREE三大本土品牌合计占据70%市场份额
一、市场现状:需求升级与结构性增长并存 2024年,中国高端家电市场在复杂的经济环境中展现出“逆势增长”的韧性。尽管全球经济增速放缓,国内家电零售额同比微降0.4%至6957亿元,但高端家电却成为拉动市场的重要引擎。这一现象的背…...
【漫话机器学习系列】217.监督式深度学习的核心法则(Supervised Deep Learning Rule Of Thumb)
监督式深度学习的核心法则:你需要多少数据? 原图作者:Chris Albon 在进行深度学习项目时,我们常常面临一个核心问题:我到底需要多少训练数据?这是许多初学者甚至资深工程师都会困惑的问题。图中给出了一个非…...
OpenCV --- 图像预处理(六)
OpenCV — 图像预处理(六) 文章目录 OpenCV --- 图像预处理(六)十四,图像边缘检测14.1 高斯滤波14.2 计算图像的梯度与方向14.3 非极大值抑制14.4 双阈值筛选14.5 API和使用 十五,绘制图像轮廓15.1 什么是轮…...
WebRTC服务器Coturn服务器的管理平台功能
1、概述 开源的webrtc服务器提供管理平台功能,用户可以通过web页面进行访问配置coturn服务器,主要包括管理平台功能和telnet的管理功能,coturn相当于telnet服务器,可能通过配置来开启这两个功能,方便查看coturn服务器…...
华为网路设备学习-19 路由策略
一、 二、 注意: 当该节点匹配模式为permit下时,参考if else 当该节点匹配模式为deny下时: 1、该节点中的apply子语句不会执行。 2、如果满足所有判断(if-match)条件时,拒绝该节点并跳出(即不…...
理解RAG第六部分:有效的检索优化
在RAG系统中,识别相关上下文的检索器组件的性能与语言模型在生成有效响应方面的性能同样重要,甚至更为重要。因此,一些改进RAG系统的努力将重点放在优化检索过程上。 从检索方面提高RAG系统性能的一些常见方法。通过实施高级检索技术&#x…...
DOCA介绍
本文分为两个部分: DOCA及BlueField介绍如何运行DOCA应用,这里以DNS_Filter为例子做大致介绍。 DOCA及BlueField介绍: 现代企业数据中心是软件定义的、完全可编程的基础设施,旨在服务于跨云、核心和边缘环境的高度分布式应用工作…...
Hadoop----高可用搭建
目录标题 **什么是高可用?****⭐搭建的步骤**一.jdk**安装配置**- **要点**: 二.zookeeper**集群配置**- **要点** 三.Hadoop高可用的搭建- **要点**①环境变量的配置②配置文件的修改 ③内容分发④集群任务的初次启动 什么是高可用? 通过冗余设计 自动…...
2023蓝帽杯初赛内存取证-1
获取关于内存镜像文件的基本信息: vol.py -f memdump.mem imageinfo 得知Image local date and time : 2023-06-21 01:02:27 0800 Image local date and time是本地时区(中国——东八区) 答案:2023-06-21 01:02:27...
算法之回溯法
回溯法 回溯法定义与概念核心思想回溯法的一般框架伪代码表示C语言实现框架 回溯法的优化技巧剪枝策略实现剪枝的C语言示例记忆化搜索 案例分析N皇后问题子集和问题全排列问题寻路问题 回溯法的可视化理解决策树状态空间树回溯过程 回溯法与其他算法的比较回溯法与动态规划的区…...
Linux 内核中 cgroup(控制组) 作用是什么?
cgroup(Control Groups) 是 Linux 内核提供的一种机制,用于对 进程(或线程)组 进行资源限制、优先级分配、统计监控和任务控制。通过将进程分组管理,可以实现对 CPU、内存、磁盘 I/O、网络等系统资源的精细…...
Relay IR的核心数据结构
在 Apache TVM 的 Relay IR 中,基础节点(Var、Const、Call、Function 和 Expr)是构建计算图的核心数据结构。以下是对它们的详细解析,包括定义、作用、内部组成及相互关系: 1. Expr(表达式基类)…...
【MCP Node.js SDK 全栈进阶指南】初级篇(4):MCP工具开发基础
在MCP(模型上下文协议)的生态系统中,工具(Tools)是一种强大的扩展机制,允许AI模型执行各种操作并获取结果。本文将深入探讨MCP TypeScript-SDK中的工具开发基础,包括工具定义与参数验证、Zod模式详解与高级用法、异步工具处理与错误管理以及工具调用与结果格式化。通过学…...
3Blue1Brown/videos - 数学视频生成代码库
本文翻译整理自:https://github.com/3b1b/videos 文章目录 一、关于本项目相关链接资源关键功能特性 二、注意事项三、工作流1、核心原理2、Sublime 专用配置 四、快捷键功能说明 一、关于本项目 本项目包含用于生成 3Blue1Brown 数学解说视频的代码。 相关链接资源…...
vue3 + element-plus中el-drawer抽屉滚动条回到顶部
el-drawer抽屉滚动条回到顶部 <script setup lang"ts" name"PerformanceLogQuery"> import { ref, nextTick } from "vue"; ...... // 详情 import { performanceLogQueryByIdService } from "/api/performanceLog"; const onD…...
【inlining failed in call to always_inline ‘_mm_aesenclast_si128’】
gcc编译错误:inlining failed in call to always_inline ‘_mm_aesenclast_si128’: target specific option mismatch 消除方法: 假如是GCC,则CFLAGS添加如下编译选项:-maes 假如是cmake,参加如下脚本: …...
DB-GPT支持mcp协议配置说明
简介 在 DB-GPT 中使用 MCP(Model Context Protocol)协议,主要通过配置 MCP 服务器和智能体协作实现外部工具集成与数据交互。 开启mcp服务,这里以网页抓取为例 npx -y supergateway --stdio "uvx mcp-server-fetch" …...
前端之勇闯DOM关
一、DOM简介 1.1什么是DOM 文档对象类型(Document Object Model,简称DOM),是W3C组织推荐的处理课扩展标记语言(HTML或者XML)的标准编程接口 W3C已经定义了一系列的DOM接口,通过这些DOM接口可…...
实现鼠标拖拽图片效果
我们需要一个图片 可以是你的女朋友 可以是男朋友 ,我就拿窝的偶像 一个大佬——>甘为例吧! 哈哈哈哈哈 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&q…...
nodejs模块暴露数据的方式,和引入(导入方式)方式
在 Node.js 中,模块之间通过 模块导出(exports) 和 模块导入(require 或 ESModule 的 import) 来进行数据和功能的共享。下面我详细总结一下两种主要的模块系统: 一、CommonJS 模块(Node.js 默认…...
AXOP33552: 400MHz 高速双通道运算放大器
AXOP33552是一款通用型高速双通道运算放大器,产品的工作电压为2V至5.5V,具有400MHz的带宽,f0.1dB的带宽为 120MHz,单通道静态电流为10mA。产品特别对噪声和THD做了优化,其噪声为5nV/√Hz 1MHz,2次谐波为-85…...
Spring Boot日志配置
目录 logback 使用logback 获取日志对象 日志级别 控制日志输出级别 日志输出格式控制 配置方式 日志转存 示例 日志是应用程序不可或缺的一部分,记录着程序运行的信息。主要作用有: 记录日常运营的重要信息记录应用报错信息记录过程数据等…...
不可变数据:基于持久化数据结构的状态管理
不可变数据:基于持久化数据结构的状态管理 一、 什么是不可变数据? 不可变数据是指一旦创建就无法更改的数据。在计算机科学中,不可变数据结构是指其内容或状态不能被修改的数据结构。在不可变数据中,所有修改操作都会生成新的数据副本&#…...
PyTorch卷积层填充(Padding)与步幅(Stride)详解及代码示例
本文通过具体代码示例讲解PyTorch中卷积操作的填充(Padding)和步幅(Stride)对输出形状的影响,帮助读者掌握卷积层的参数配置技巧。 一、填充与步幅基础 填充(Padding):在输入数据边缘…...
C++手撕STL-其叁
Deque 今天我们进入新的容器:deque,一般叫做双端队列。 比起传统的先入先出的队列queue,deque的出场率显然要低得多,事实上deque比起queue来说最大的特点就是多了一个push_front()和pop_front(),其他并没有太多不同。…...
AI大模型-window系统CPU版安装anaconda以及paddle详细步骤-亲测有效
window系统CPU版安装anaconda以及paddle详细步骤-亲测有效 一 安装anaconda 下载地址:anaconda下载 下载成功后,选择非C盘安装,按提示安装即可修改镜像文件 安装成功后,运行anaconda软件,若提示更新则点击更新,更新完后,修改镜像文件 找到用户目录下的.condarc文件,覆…...