腾讯云 AI 代码助手:产品研发过程的思考和方法论
一、文章摘要
本文将详细阐述 腾讯云 AI 代码助手的历史发展形态与产品整体架构,并从技术、研发方法论的角度分别阐述了产品的研发过程。
全文阅读约 5~8 分钟。
二、产品布局
AI 代码助手产品经历了三个时代的发展
第一代诸如 Eclipse、Jetbrains、Visual Studio Code 等自带的代码补全功能,背后是基于代码语法、语义分析技术,提供的也是基于语词级别的代码补全,补全粒度小。
第二代 AI 代码助手产品是在 2010 年后,比较典型的产品是欧美的 kite 和 Tabnine,背后使用的是基于 LSTM、GPT2 的代码模型,提供的是基于表达式、行内、单行、多行的补全,补全粒度进一步扩充到了行级别。
第三代 AI 代码助手产品是当前流行的大模型时代,典型产品包括微软 GitHub Copilot,以及亚马逊 CodeWhisperer 等,背后都是采用自家训练的代码大模型,并结合代码分析技术,为用户提供多维度、多模式的代码补全,包括单行、多行、注释生成代码、基于 Chat 对话的能力等,为软件开发提供了全新的代码交互体验。
腾讯在 2017 年就聚焦在代码智能赛道上进行探索,当时还是用 LSTM 训练代码模型,但泛化效果不好,比如模型学习 pytorch 的代码,仅仅在 pytorch 相关代码的推荐上表现可以,但其他场景的代码推荐表现很一般。同时我们也加入一些 AST 代码特征,性能上有一些提升;在 GNN 上加入代码的控制流、数据流,训练和推理速度都比较慢,基本不能满足实际的工业场景。
直到 2021年7月 GitHub Copilot 推出多行代码补全、注释生成完整的函数等功能,已经证明大模型在代码智能赛道落地的技术可行性。随后开始在腾讯组建代码智能化团队,布局代码智能赛道。
三、产品整体架构
腾讯云 AI 代码助手的产品整体架构如下:
产品架构
我们提供了两种产品形态和场景,一种是在 IDE 中的场景,包括主屏写代码模式和侧屏 Chat 对话模式,同时在产品设计思想上我们采用主侧屏协同的方式打造极致的用户体验,其产品形态如下图所示:
一种是在腾讯内部源代码托管平台中进行代码评审时的场景,其自动生成 CR 的产品形态如图所示:
四、产品研发体系和技术、方法
腾讯在内部建立了一套双环驱动的 AI 大模型产品研发体系,如下图所示。从用户需求或用户反馈出发,我们先进入模型迭代的小环,首先是数据工程,包含数据采集、数据清洗、数据分析、数据构造、人工标注 5 个步骤,然后进入模型训练,模型评测,部署到测试环境;同时产品迭代也可在模型迭代的同时同步进行,当模型部署到测试环境时,需要和产品功能进行适配,然后测试验证,上线 AB,对 AB 环境下的实验结论进行分析,经评估后进行正式发布上线和运营推广,整个产品迭代的大环结束。在模型迭代的过程中,主要依靠线上的 AB 实验和试点用户反馈来确认迭代效果,因线上 AB 实验和用户反馈到结论才是真实效果的体现。为快速、高效的进行 AB 实验,我们建立了整个 AB 实验流程和流量规范管理制度,能同时驱动多个实验模型在 AB 环境下进行实验,从而高效、规范的管理整个模型到应用的迭代过程。在腾讯内部,AI 代码助手不论是针对用户反馈的 Bad Case 的模型迭代研发到正式上线发布,或者基于需求的产品功能迭代开发到正式上线发布均控制在双周时间内完成一个迭代开发周期。
双环驱动的大模型产品研发体系
数据工程流程
1、代码大模型
借助混元全链路自研的技术优势,腾讯云AI代码助手与混元携手共同推动代码大模型达到业界标准。在预训练阶段我们考虑了训练策略、更高质量的代码数据、以及能增强代码能力的代码特征数据;在精调阶段我们构建了基于Bad Case 快速精调迭代上线 AB 的系统化流程。
(1)预训练
在高质量代码数据方面,我们提出了一套高质量代码数据研制方法。对采集的开源代码数据,包括The Stack、GitHub 等进行安全扫描,包括敏信息、缺陷、漏洞等检测,代码规范检测,全复杂度分析,License 分析,代码去重分析(通过自研的支持 type3 级别的代码克隆检测算法,过滤相似的代码文件),代码格式化(将每种语言的代码进行标准的格式化后,模型将会学习标准的代码,所以最终推荐的代码在格式上也是标准的),代码质量评估,经过以上流程研制出高质量的代码数据。因此模型学习的是高质量代码,最终推荐的代码质量也会更高(安全、格式问题相对较少)。其研制流程如下图所示:
高质量代码数据研制流程
在 FIM 代码数据方面,由于主流大模型都是 GPT 式、Decoder-only 的大模型,它是一种自回归的生成式模型,根据上文预测下文。但这显然无法完全满足代码场景需求,因为很多编码场景是上文和下文预测中间部分的代码。比如类的“}”场景,或者在类中的函数中间插入另一个函数。FIM 方法将文本随机分成三部分(Prefix, Middle, Suffix),然后将 Prefix 和 Suffix 顺序打乱重新拼接,来预测 Middle。Prefix、Middle分割点随机选取,Middle、Suffix 分割点采用空格来分割。我们也正在探索与落地基于 AST 结构进行分割的 FIM 技术。
在代码数据配比方面,我们通过实验得出通用语料在 10% 的时候对代码能力的影响较小,当通用语料配比增大到 15% 后代码能力有明显下降。在训练的过程中我们同时会考虑代码特征,代码结构等,包括在学习代码文件前先学习文件中引用符号的定义等相关依赖代码,包括函数定义、变量定义、类型定义等;考虑代码文件相似的代码作为先验知识;在一个窗口中基于完整代码仓的学习,这样自注意力机制能更好的学习到代码之间的依赖关系。
(2)精调
为了让大模型具有特定格式、贴合真实业务场景的输出,我们主要采用了 SFT 来激发大模型的代码能力。SFT 就像做练习题,目的是让大模型快速的适应特定的考试场景,而预训练则是让大模型阅读大量课本知识。因此,构建特定的练习题,尤其是高质量的题目是 SFT 的关键。在代码领域,我们构建各种代码任务的高质量练习题的流程,如下图所示,图中 Seed 数据来源包括:开源高质量代码中基于代码静态分析构造的各种代码任务数据对,经过质量评估和人工标注筛选获取小部分作为高质量的种子数据,另外也基于线上 Bad/Good Case 数据进行清洗,包括脱敏、去重等操作,Bad Case 数据还需要进行数据矫正,获取正样本数据,可以通过分析提交代码仓获得或者基于 SOTA 大模型蒸馏的方式获得,但都需要人工标注确认,最后通过 Evol、Oss 的方式进行数据扩充。
SFT 数据研制流程
2、Trigger策略
Trigger 决定代码补全的触发时机。为什么要加触发时机的判断呢?因为需要考虑代码补全的上下文场景,什么时候该触发,什么时候不该触发,做到该触发的时候一定要触发,不该触发的时候就不能触发,否则随意触发推荐会干扰用户的编程思路。整个触发流程如下图所示,首先采用简单的规则判断,针对不确定的情况采用基于模型的触发决策。
启发式规则包括:代码文件 <=5 个字符不触发; 特殊字符触发,如空格,回车,括号等;空注释且没有下文不触发,如 # 等。
基于模型的触发时机当前复用了业界通用的逻辑回归模型。其特征如下图所示,当前采用了业界的权重值,最后通过一个 sigmoid 函数计算一个 0-1 之间的值。我们也正在根据内部数据训练AI代码助手的触发时机模型。
触发时机特征
3、 Prompt 策略
“Prompt engineering” 是一种构建文本的过程,这种文本可以被生成型 AI 模型解读和理解;Prompt 需具体明确、简洁避免冗余信息、适应不同的场景、可以结合注释和关键词描述等。但在代码任务中,其中的“文本”是指”代码上下文”,或者与代码上下文相关的文本描述等。有很多关于 Prompt 的研究工作,包括华盛顿大学的生成知识提示,北大李戈老师团队针对代码生成任务Prompt的结构化思维链, 及Google/ Deepmind 团队提出的 COC 。
如何构建语义清晰、且能最大化激发代码任务的 Prompt ,我们结合大模型 in -context learning 能力以及代码本身的特征提出代码任务的 Prompt 建模方法。
代码任务的 Prompt 包含代码上下文和代码知识 2 大部分,其中代码上下文根据不同的代码任务有一些差异,针对代码补全、代码生成任务,代码上下文是当前光标位置处上下文的代码;针对 CR 生成任务,代码上下文是 Diff 片段的上下文代码;针对测试函数生成任务,代码上下文是原始的测试函数。
代码知识是辅助激发大模型代码能力的相关知识,需要清晰的语义表达和相似的实例来激发大模型的在线学习能力。代码知识由代码上下文的位置描述、Import Files 中的符号定义、相似代码(代码块或函数)、代码上下文精准的符号定义、API 序列、领域专有知识 6 大组分构成,如下图所示:
代码使用的Prompt
代码上下文的位置描述是补全中光标位置处、CR 生成任务中的 Diff 片段、单测生成任务中原始的测试函数等所在的函数、类、文件描述,以及相对的文件路径。
Import Files 中的符号定义是代码上下文的代码文件 Import 的符号定义,它是代码特有的属性,反映的是直接依赖关系。因为引用符号需要配套符号定义,没有符号定义不能清晰、明确的表达符号的含义。这些符号可能在代码上下文中引用,也可能在推理的代码中引用,包括函数、类、变量、结构体等。其中 Import 的符号包含仓内定义的符号,也包含三方依赖仓定义的符号。
相似代码包含相似的代码块和相似函数 2 种。相似代码块是在代码仓中与代码上下文相似的代码片段,相似函数是在代码仓中与代码上下文相似的代码函数,通过代码仓分析获取具有继承关系的不同派生类中相同函数签名的函数。该相似块、相似函数可以作为代码示例来激发大模型的 One-Shot/Few-Shot 能力,也包括相似的代码调用方式,调用风格的参考等。
代码上下文精准的符号定义是代码上下文中引用符号的所有符号的精准定义。它是代码特有的属性,反映的是间接依赖关系,如链式调用 'A.b.getXXX()' 中每个符号的定义。
API序列是增加基础组件(如 tRPC 等)的 API 序列调用知识,增强内部组件业务逻辑代码能力。我们专门抽取组件的 API 调用训练了一个 API 调用序列知识模型。
领域专有知识是与领域相关的代码知识集合。可以是领域相关函数功能实现、领域代码的需求描述、功能规格、测试代码描述等,采用向量数据库存储,基于 RAG 的方式实现,实现推荐效果提升。
下面以代码补全任务为例,给出了基于代码分析的 Prompt 自动生成过程:
代码补全 Prompt 生成方法
在代码上下文精准的符号定义分析过程中的难点是针对链式调用场景中的 invoker 的分析,如下图是我们链式调用中精准的 invoker 分析流程:
链式调用精准 invoker 分析
4、Stop 策略
代码大模型推荐的代码是基于文本、按 token 来推荐的,因没有考虑代码的语法结构,则可能造成推荐的代码结构不完整,用户可读性差,如下图所示:
推荐代码结构不完整示例
基于以上问题,我们提出了静态 Stop 策略:根据代码补全场景,结合 AST 分析,并设置相应的停止词让大模型提前按结构终止推理。其对应的代码补全场景和 Stop 词如下图所示:
代码补全细分场景及其 Stop Words
静态 Stop 策略有效,但不能解决用户在类内敲击回车键补全或跟手补全时采用静态 Stop 策略 '\n' 截断的情况,如下图中所示的问题,所以需要动态 Stop 策略来解决以上问题。
静态Stop截断推荐代码示例
5、Show策略
Show 策略是模型推荐异常时不展示的兜底策略,包括 3 类:
模型推荐为空时不 Sho
模型推荐特殊字符时不 Show,如:\n,\t,空格,// to do,重复括号等
模型重复推荐不 Show
重复推荐的检测包含 4 类:
行内重复
如下图所示的是字面量和数组元素重复。行内重复往往会引发超量生成,当产生行内重复时,重复一定发生在最后一行。检测规则是检测生成的内容是否超量生成(是否包含 eos)并判断最后一行的长度是否超过阈值( 256 个 token )。
行类重复示例
单行重复
单行重复发生在用户敲下回车键推荐单行代码的场景,如下图所示为注释重复和变量赋值语句重复。检测规则是基于 AST 分析判定为注释、变量定义、函数调用场景,计算上下的一行和推荐的当前行的相似度值,超过阈值为重复。
单行重复示例
多行重复
多行重复多发生在 python 语言的补全,用户敲下回车键推荐多行代码的场景,如下图所示。检测规则是分别计算对应的上文行或对应的下文行和推荐行的相似度值,若都超过阈值为重复。
多行重复示例
前后缀重复
前后缀重复发生在修改函数签名时,推荐的代码和下文代码的前缀有重叠,则判定为前后缀重复,如下图所示:
前后缀重复示例
五、总结与展望
本文系统化的给出了腾讯在代码智能赛道打造 AI 代码助手产品的思考和技术方法,从产品、技术和研发方法论的角度分别阐述了产品对腾讯内部服务的研发过程,包括产品层面打造主侧屏协同交互的编码和 Chat 对话相结合的沉浸式 AI 体验,技术上代码补全、代码生成、CR 生成、基于 Chat 对话的代码能力等模型训练和精调,Trigger、Prompt、Stop、Show等产品核心策略和算法,以及构建了一套双环驱动的 AI 大模型产品研发体系,目的是在智能化时代高效、快速的迭代我们的产品,给用户提供极致的开发体验。
如感兴趣,可复制下方链接免费体验产品
https://copilot.tencent.com/
相关文章:
腾讯云 AI 代码助手:产品研发过程的思考和方法论
一、文章摘要 本文将详细阐述 腾讯云 AI 代码助手的历史发展形态与产品整体架构,并从技术、研发方法论的角度分别阐述了产品的研发过程。 全文阅读约 5~8 分钟。 二、产品布局 AI 代码助手产品经历了三个时代的发展 第一代诸如 Eclipse、Jetbrains、V…...
淘宝商品评论爬虫:Java实现指南
在当今的互联网时代,数据的价值日益凸显,尤其是用户生成的内容,如商品评论,对于理解消费者行为和市场趋势具有重要意义。淘宝作为中国最大的电商平台之一,拥有海量的商品评论数据。本文将介绍如何使用Java编写一个简单…...
银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路
环境说明 master:192.168.100.100 node: 192.168.100.101 kubeadm 1.31.2 (自编译二进制文件,证书有效期100年) 银河麒麟v10 sp2 x86架构 内核版本:5.4.x 编译安装 cgroup v2启用 docker版本:27.x …...
【Linux】详解shell代码实现(上)
🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 学校开始搞蓝桥的校选…...
Ruby 模块(Module)
Ruby 模块(Module) 概述 Ruby 是一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在 Ruby 中,模块(Module)是一个重要的概念,它用于封装一组相关的方法和常量。模块提…...
成都睿明智科技有限公司怎么样可靠不?
在这个日新月异的数字时代,电商行业如同一股不可阻挡的洪流,席卷着每一个消费者的生活。而抖音,作为短视频与电商完美融合的典范,更是为无数商家开辟了一片全新的蓝海。在这片充满机遇与挑战的海洋中,成都睿明智科技有…...
内网安全隧道搭建-ngrok-frp-nps-sapp
1.ngrok 建立内网主机与公网跳板机的连接: 内网主机为客户机: 下载客户端执行 2.frp (1)以下为内网穿透端口转发 frp服务端配置: bindPort 为frp运行端口 服务端运行 ./frps -c frps.ini frp客户端配置…...
k8s 对外服务之 Ingress
LB ingress //Ingress 简介 service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载均衡器,…...
前端速通(JavaScript)
1 初识JavaScript 1 JavaScript是什么 JavaScript 是一种高层的、轻量级的、解释型的编程语言,最初由 Netscape 公司于 1995 年开发。它的特点包括: 动态性:JavaScript是动态类型语言,允许开发者灵活地操作数据。跨平台…...
Unity图形学之着色器之间传递参数
1.初始化 struct: UNITY_INITIALIZE_OUTPUT(type,name) Type: struct 名字 Name :变量的名字 struct Input{float2 uv_MainTex;float3 myColor;};half _Glossiness;half _Metallic;fixed4 _Color;void MyVertx(inout appdata_base v,out I…...
JavaScript中的this指向问题
JavaScript中的this指向问题 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中,几乎都有this这个关键字(Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面向对象的编程语言中,比…...
Qt之QWidget相关
Qt概述 Qt 是一个跨平台的 C 开发框架。 跨平台支持:可以用于开发 Windows、macOS、Linux、Android、iOS 等多种操作系统下的应用程序。这意味着开发者使用 Qt 编写的代码,在经过适当的编译和配置后,能够在不同平台上运行,减少了…...
Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析
1. 产品定位 Ease Monitor 有如下的产品定位: 关注于整体应用的SLA。 主要从为用户服务的 API 来监控整个系统。 关联指标聚合。 把有关联的系统及其指示聚合展示。主要是三层系统数据:基础层、平台中间件层和应用层。 快速故障定位。 对于现有的系统…...
苹果MacOS 调用自编译opencv的Dylib显示一个图片程序的步骤
前言 为了测试自编译的opencv库是否能在苹果MacOS系统下使用,需要写一个简单的测试程序。这个测试程序写起来不难,麻烦的是一些配置。网上的办法很多,里面因为版本的问题有一些坑。特此写了一个建立步骤,供大家参考。 1、新建一个…...
网页中调用系统的EXE文件,如打开QQ
遇到一个实际的问题,需要在网页中打开本地的某个工业软件。 通过点击exe文件就可以调用到程序。 比如双击qq的exe就可以启动qq的程序。 那么问题就变成了如何加载exe程序呢? 可以通过Java的 Process process Runtime.getRuntime().exec(command);通过…...
在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)
在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager) 步骤 1: 更新系统包步骤 2: 安装 nvm步骤 3: 安装 Node.js 和 npm步骤 4: 设置默认 Node.js 版本(可选)总结 在 Ubuntu 系统上安装 npm 环境以及 nvm(No…...
Linux环境开启MongoDB的安全认证
文章目录 1. MongoDB安全认证简介1.1 访问控制1.2 角色1.3 权限 2. MongoDB中的常见角色3. MongoDB Shell3.1 下载MongoDB Shell3.2 通过MongoDB Shell连接MongoDB 4. 创建管理员用户5. 为具体的数据库创建用户6. 开启权限认证7. 重启MongoDB服务8. 连接MongoDB9. MongoDB数据库…...
实现了两种不同的图像处理和物体检测方法
这段代码实现了两种不同的图像处理和物体检测方法:一种是基于Canny边缘检测与轮廓分析的方法,另一种是使用TensorFlow加载预训练SSD(Single Shot Multibox Detector)模型进行物体检测。 1. Canny边缘检测与轮廓分析: …...
经典工具 | 使用SIFT预测错义突变的有害性
SIFT 用计算机替代人预测复杂事件的影响,是我们这个时代最令人兴奋的科学进展之一。SIFT就是这样一个应用于基因组学研究的经典工具。 SIFT可预测多种生物体的基因组变异,主要是错义突变的影响与效应,最大的特点是物种丰富,是一个…...
如何给 Apache 新站点目录配置 SELinux ?
在 web 服务器管理领域,确保服务器环境的安全性至关重要。SELinux (Security-Enhanced Linux) 是保护 Linux 服务器最有效的工具之一,它是一种强制访问控制 (MAC mandatory access control) 安全机制。当使用最流行的 web 服务器 Apache 提供 web 内容时…...
RTSP播放器EasyPlayer.js播放器分辨率高的视频在设置container的宽高较小时,会出现锯齿状的画面效果
流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。随着技术的不断进步和市场的持续发展,流媒体播放器将在内容创新、用户体验优化以及跨平台互通等方面取得新的突破。对于从业者而言,把握这些趋势并积极应对挑战将是实现成功的关键…...
云讷科技Kerloud无人飞车专利发布
云讷科技Kerloud无人飞车获得了“一种室内外两用的四旋翼无人飞车”的实用新型专利证书,作为科教社区第一款四旋翼飞车,这项技术结合了无人机和无人车的优势,提供了一种能够在多种环境下使用的多功能飞行器。 这项设计的优势如下ÿ…...
快速识别模型:simple_ocr,部署教程
快速识别图片中的英文、标点符号、数学符号、Emoji, 模型会输出图片中文字行的坐标位置、最低得分、识别结果。当前服务用到的模型:检测模型、数字识别、英文符号识别。 一、部署流程 1.更新基础环境 apt update2.安装miniconda wget https://repo.anaconda.com/…...
Qt交叉编译x86和arm心得
最近一直在Linux上开发qt程序,主要工作是在x86的Ubuntu上开发编译调试程序,确定没有问题后交叉编译到arm的linux系统上运行 1.环境 Qt的交叉编译环境厂家已经提供了,嵌入式的同事帮我安装调试的,具体就是装了厂家给的gcc编译套件…...
用CAXA CAD电子图板导入图框、标题栏并导出pdf的方法
1.导入图框: 点击调入图框->出现读入图框文件 一个一个点击,选择合适的图框 然后点击导入 2.导入标题栏: 调入标题栏->出现读入标题栏文件 一个一个点击,选择合适的标题栏,然后点击导入 3.导出pdf&#x…...
在 Ubuntu/Debian 上安装 Go
使用官方二进制文件安装(推荐) Go 提供了官方的二进制安装包,适用于大多数 Linux 发行版,包括 Ubuntu 和 Debian。步骤如下: 更新包索引: bash sudo apt update 安装依赖(如果尚未安装&#…...
设计模式之策略模式-工作实战总结与实现
文章目录 应用场景存在问题解决方案继续延伸 应用场景 假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码: public class Question {public static void main(String[] args…...
自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
实验十三 生态安全评价
1 背景及目的 生态安全是生态系统完整性和健康性的整体反映,完整健康的生态系统具有调节气候净化污染、涵养水源、保持水土、防风固沙、减轻灾害、保护生物多样性等功能。维护生态安全对于人类生产、生活、健康及可持续发展至关重要。随着城市化进程的不断推进&…...
【MySQL实战45讲笔记】基础篇——redo log 和 binlog
系列文章 基础篇——MySQL 的基础架构 目录 系列文章1. 重要的日志模块:redo log 和 binlog1.1 redo log1.2 binlog1.3 执行器和 InnoDB 引擎内部如何执行更新语句 1. 重要的日志模块:redo log 和 binlog 前面系统的了解了一个查询语句的执行流程&…...
Java 基于SpringBoot+vue框架的老年医疗保健网站
大家好,我是Java徐师兄,今天为大家带来的是Java Java 基于SpringBootvue框架的老年医疗保健网站。该系统采用 Java 语言开发,SpringBoot 框架,MySql 作为数据库,系统功能完善 ,实用性强 ,可供大…...
Java集合分页
一、前言 在Java开发中,若单次展示的数据量太大,会造成程序响应缓慢,就需要用到分页功能,每一页展示一定量的数据,分多次展示 ... 那么在List集合中,如何实现分页功能呢? 本文将以3种方式&…...
python语言基础-5 进阶语法-5.5 上下文管理协议(with语句)
声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。 5.5 上下文管理协议(with语句)(参考链接࿱…...
周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程
1、打开pycharm 没有pycharm的,在站内搜索安装教程即可。 2、点击“文件”“新建项目” 3、创建项目,Python版本中选择Python39。如果没有该版本,选择下面的Python 3.9下载并安装。 4、打开软件包,搜索“deep-forest”软件包&am…...
技术美术百人计划 | 《2.1 色彩空间介绍》笔记
总览 一、色彩发送器 色彩认知: 光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼。 但人眼接收到光线后,人眼的细胞产生了一系列化学反应。 由此把产生的信号传入大脑,最终大脑对颜色产生了认…...
设计模式:6、装饰模式(包装器)
目录 0、定义 1、装饰模式包含的四种角色 2、装饰模式的UML类图 3、示例代码 0、定义 动态地给对象添加一些额外的职责。就功能来说装饰模式相比生成子类更为灵活。 1、装饰模式包含的四种角色 抽象组件(Component):抽象组件是一个抽象…...
vue-office:word(.docx)、pdf、excel(.xlsx,.xls)格式文件预览
vue-office:word(.docx)、excel(.xlsx,.xls)格式文件预览 组件安装 // docx文档预览组件 npm install vue-office/docx vue-demi0.14.6// excel文档预览组件 npm install vue-office/excel vue-demi0.14.…...
简单工厂模式
简单工厂模式详解 定义 简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,用于创建对象的实例。通过一个工厂类来决定实例化哪一个具体类,降低客户端与具体类之间的耦合。 对于长switch或者长if、else,且…...
得物彩虹桥架构演进之路-负载均衡篇
文 / 新一 一、前言 一年一更的彩虹桥系列又来了,在前面两期我们分享了在稳定性和性能2个层面的一些演进&优化思路。近期我们针对彩虹桥 Proxy 负载均衡层面的架构做了一次升级,目前新架构已经部署完成,生产环境正在逐步升级中…...
【大数据学习 | Spark-Core】spark-shell开发
spark的代码分为两种 本地代码在driver端直接解析执行没有后续 集群代码,会在driver端进行解析,然后让多个机器进行集群形式的执行计算 spark-shell --master spark://nn1:7077 --executor-cores 2 --executor-memory 2G sc.textFile("/home/ha…...
macos 使用 nvm 管理 node 并自定义安装目录
系统环境:MacOS Version 参考文章: Github 地址:https://github.com/nvm-sh/nvm 安装的方式是很简单的,直接执行下面的命令即可: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bas…...
MongoDB分片集群搭建
什么是分片 分片是一种跨多台机器分布数据的方法。MongoDB 使用分片来支持超大数据集和高吞吐量操作的部署。什么情况下使用分片 存储容量受单机限制,即磁盘资源遭遇瓶颈。读写能力受单机限制,可能是CPU、内存或者网卡等资源遭遇瓶颈,导致读…...
MySQL数据库基础
1.数据库的操作 1.1 显示当前数据库 show databses; 1.2 创建数据库 create database [if not exist] db_name; 创建名为db_test1的数据库 create database db_test1; 说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集;utf8,校验规则是 utf8_general_c…...
前端性能优化
前端性能优化是提升用户体验的重要环节,优化的目标是减少页面加载时间、提高交互响应速度、降低资源消耗。以下从 加载性能优化、渲染性能优化 和 交互性能优化 三个维度详细说明: 一、加载性能优化 目标是减少页面首次加载时间,提升页面的加…...
深度学习中的正则化技术
在深度学习中,正则化是一种防止模型过拟合的重要手段。过拟合是指模型在训练数据上表现良好,但在未见数据上表现不佳的现象。正则化通过引入额外的约束或信息来限制模型的复杂性,从而提高模型的泛化能力。本文将介绍几种常见的正则化技术&…...
工商银行湖仓智一体创新应用实践
数智技术已经成为企业数字化转型的核心动力 国家《“十四五”数字经济发展规划》指出数字经济是未来的主要经济形态,数据因其倍增效应和乘数效应,可以带来全要素效率的提升,已经成为数字经济的核心要素资源,是企业数字化转型的新要素、新动能。为了高质量推进企业数字化转…...
测试实项中的偶必现难测bug之模糊匹配逻辑
问题: 现在有一个场景,如果只是通过功能测试会比较难测,例如刚开始我们做会员的时候,只有白银会员,在用户分群的场景下,需要用条件逻辑匹配,当时开发用了like的匹配方式没有问题。1年后加了白银试用会员,导致在统计会员分群的时候明明条件选的是白银会员,但是统计的数…...
金融科技白皮书:2022-2023年度回顾与前瞻
在金融科技领域,2022至2023年见证了一系列创新技术的应用和发展。本白皮书将回顾过去一年的主要成就,并展望未来一年的发展趋势。 2022年亮点回顾 **低代码平台:**低代码平台通过高度抽象化和自动化的可视化过程,简化了应用程序开…...
40分钟学 Go 语言高并发:sync包详解(下)
sync包详解(下) 学习目标 知识点掌握程度应用场景WaitGroup使用熟练使用和理解原理并发任务的同步等待Once实现原理理解底层实现和使用场景单例模式、一次性初始化Pool性能优化掌握对象池的使用和调优高并发下的内存优化Cond应用场景了解条件变量的使用…...
android 使用MediaPlayer实现音乐播放--权限请求
在Android应用中,获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新,从Android 6.0(API级别23)开始,应用需要动态请求权限,而到了android 13以上需要的权限又做了进一步…...