当前位置: 首页 > news >正文

提升学习 Prompt 总结

NLP现有的四个阶段:

  1. 完全有监督机器学习
  2. 完全有监督深度学习
  3. 预训练:预训练 -> 微调  -> 预测
  4. 提示学习:预训练 -> 提示 -> 预测

阶段1,word的本质是特征,即特征的选取、衍生、侧重上的针对性工程。

阶段2,对数据集与结构的抽象化构建,如卷积或 Attention。

阶段3,无监督方法,如BERT构建 MLM/NSP,及变体(PLM,DAE)都是更好的训练预训练模型。

阶段4,提示学习是让下游任务来适应语言模型,而不是让语言模型适应下游任务。

  1. 语言模型越大 = 微调难度越大
  2. 相信语言模型具有独立解决NLP问题的能力

使用prompt的原因

        Prompt 本意在于下游任务使用模型的时候,尽可能与预训练模型pretrain阶段的任务保持一致。重定义下游任务,将下游任务均统一为预训练语言模型任务,避免预训练模型和下游任务之间存在的gap。之前使用BERT + finetune,有以下弊端:

    • finetune存在上下游任务不一致问题,破坏了BERT结构。
    • 下游任务通过标注数据驱动, finetune语义没有告知给模型。

        对这两点弊端做出改进主要就是pretrain阶段和下游任务阶段能尽可能一致,以发挥MLM能力,即prompt 思想:上下游任务一致。衍生出auto promptsoft prompt连续 prompt

finetune上下游阶段任务不一致的问题

finetune对BERT原来的结构破坏严重,pretrain阶段学习最主要的任务是MLM,prompt最开始的思路就是利用这个MLM,使下游任务变成MLM任务。

如任务情感分类,x = 我很累 y=负面。

第一步构造prompt,加入prompt,prompt = 我感觉很[MASK],得到给BERT的token为[CLS]我很累,感觉很[MASK][SEP]

第二步,构造MAKS token映射,即MASK预测的token映射到标签,比如负面可能的token有:难受,坏,烦,这样使上下游任务一致。

finetune语义没有告知模型

BERT是个语言模型,但finetune却让数据驱动参数变化,而不是先表明这个任务目的。而prompt就是在使用语言的通顺,pretrain阶段的语料也是通顺的语料,因此构建prompt,将句子X和prompt接起来是一个通顺的句子,使上下游一致。为让拼接语句通顺,结合场景设计prompt,如上面那个案例使用的prompt=感觉很[MASK],也可以promp=心情很[MASK]。

预训练模型越大,所需要的预训练预料就越大,参数越多。如果微调时没有足够的数据,就无法达到好的Fine-tuning效果。语言模型中的MLM预测结果能够较好地预测出指定的结果,其必定包含了很重要的上下文知识,即上下文特征。

预训练语言模型的知识相当丰富,没有必要为利用它而进行重构

构建Prompt Engineering

Cloze PromptPrefix Pompt对应Prompt在句中还是句末

通常根据预训练模型来选择:

  • 需要用自回归语言模型解决的生成任务,Prefix Pompt更好,其符合模型从左到右的特点。
  • 需要用自编码语言模型解决的掩码任务,Cloze Prompt更好,其和预训练任务形式匹配。

硬提示/离散提示(Hard Prompt/Discrete Prompt)

        硬提示即搜索空间是离散的,需要算法工程师在下游任务上具备丰富的经验以及了解原预训练模型的底层概念,一般硬提示的准确率会不及Fine-tuning的SOTA,不同的Prompt对模型的影响非常大,如提示的长度、词汇位置等,一点Prompt的微小差别,可能会造成效果的巨大差异。

因此需要如下要求:

  • 设计一个合适的提示模板,创造一个完形填空的题目
  • 设计一个合适的填空答案,创造一个完型填空的选项

第一步构造prompt第二步,构造MAKS token映射。都涉及人为因素,prompt的几个字都能导致模型效果的较大变化。为减少人工设计“构造prompt”,“MAKS token映射”,提出auto-prompt

具体有以下这么几种方式:

  1. Prompt Mining从大的语料库中进行挖掘(如挖掘输入与输出间高频词作为模板构建元素)
  2. Prompt Paraphrasing参考文本数据增强方法,可以做seed Prompt的同义词替换,跨语种翻译等
  3. Gradient-based Search从候选词中选择一些作为Prompt并参与训练,根据梯度下降对选择词重新排列组合
  4. Prompt Generation通过文本生成模型直接生成一个Prompt
  5. Prompt Scoring根据语言模型对所有候选Prompt打分,选择一个对高分的Prompt使用

上述Hard Prompt方法会输出可被人类理解的句子。

AUTOPROMPT

        使用提示学习的方式做文本分类、文本蕴涵判断任务。不对预训练语言模型做任何改动(结构或参数),使用基于梯度搜索得到的优质提示模板,就可以让预训练语言模型具有良好的文本分类能力。使用语言模型做关系抽取任务,并与关系数据库、有监督的关系抽取模型进行比较,发现BERT这样的预训练语言模型可以较好地完成实体关系抽取任务,证明预训练语言模型中存储了大量与实体关系有关的知识。

        为了去除人工设计带来的变数,auto-prompt针对自动“构造prompt”,自动选择“MASK token映射”。

        第一步,构造prompt,选择loss下降最大的prompt token,先给定mask映射词,也就是:[CLS] {sentence} [T] [T] [T] [MASK]. [SEP],先用假设的[T],获取[MASK]再用得到的[MASK]映射用数据驱动选择[T]

        第二步,构造MAKS token映射,使用上下文的MASK tokenoutput embedding作为x,与label训练一个logistic,logistic得分高的向量更能表示label.使用上下文MASK tokenoutput tokenembedding给打分函数,取得分top-k。

        注意large模型的mlm能力更强,而在做分类任务finetune中,large和base的能力差距则不明显。大多数情况,模型参数量越大MLM能力越强, prompt论文都是large起步。

基础提示模板

    改造后的关系抽取任务目标是预测“Dante was born in [T] [T] [T] [T] [Mask]”中[MASK]为遮蔽的部分,[T]是用来引导模型的触发词(trigger word)。触发词就是“提示”信息,这些触发词可以提升语言模型的分类能力。

AUTOPROMPT的模板由2个部分构成:

        掩码:直接追加到文本后面、让语言模型去预测。预测多个词语比较困难,因此将所有的类别表示为单个token;只预测客体(Dante was born in [Mask]),不预测主体(In [Mask] Dante was born)和关系。

        触发词(trigger word):“提示”信息,触发词可提升语言模型在下游任务中的能力。

类标签词

        使用ERNIE的词汇表,有18018个type。

优质类标签词集合的搜索:在情感极性二分类任务中,为两个类别各配置若干标签词(降低方预测方差)。对于一些任务,词汇表中存在很多相关性特别强的type,可设定为某些类的标签词,比如“乐”字之于“积极”类。可使用自动方法来为各个类别搜索类标签词:用情感二分类语料,为每一个类别训练一个逻辑回归模型,

hi是语言模型接收文本后 [MASK] 位置输的logits向量,逻辑回归模型的权重和偏置带有情感二分类任务的信息。注意,这里需要预训练语言模型进行的前向计算次数,与训练样本个数相等,不是很大。“估计”类别与词语的联合概率分布。比如说(积极类,乐)的概率估计方式为:

embedding(乐)为词向量,可从预训练模型处直接查到;

为每个类别选择联合概率最高的k个标签词,构成各类的标签词集合。保证各类标签词数量相等的目的,是配合类标签词概率到类别概率分布的换算。

类标签词到标签的映射

        当语言模型输出对[MASK]处token属于词汇表各个type的概率分布,就可以快速计算情感极性类别了。预训练语言模型中蕴含的知识或模式是既定的,不一定会按照预想的方式预测——需要给一些“提示”,引导模型去做下游任务(或是用提示信息“激活”某种模式)。

        LAMA把若干触发词添加到文本和[MASK]中间,作为提示信息(简单粗暴的做法)。开始的时候,触发词集合是J个[T]。实际处理文本时,会添加[MASK]标签。将分类数据分为若干batch,每处理一个batch,就会更新一次触发词集合。更新搜索触发词集合的操作,是一个beam search的过程:逐个地遍历当前样本的各个[T],从词汇表中找出k个候选触发词,从k个候选触发词中找出对模型提升作用最大的,用它替换当前位置的原有触发词。

        寻找k个候选触发词所用的指标计算方法:计算一个batch样本的平均loss,然后计算第k个触发词对应词向量的梯度(词向量每一个维度上的参数,对应一个梯度); 遍历词汇表,计算每一个type的词向量,与(a)所得梯度向量的点积,就是指标取值。该指标的含义是,将原有触发词替换成当前type,可以给预测效果(似然概率)带来的提升幅度。

        从k个候选触发词中选择最终词语的过程:遍历k个词语,将第j个触发词替换为当前词语,并执行前项过程,获得概率值;选择概率值最大时,对应的那个词语,作为最终的词语。文中没有提及这k个词不如原有第j个触发词时的处理方式。把原有的第j个触发词,替换为最终找到的词语。

软提示/连续提示(Soft Prompt/Continuous Prompt)

        由于硬提示的相对不稳定性(过多融入语言符号),软提示概念即将Prompt的生成作为模型的一个任务来学习,将定性的语言转化为机器进行自搜索的过程。Prompt 开始变了,将离散的prompt token换成可训练的prompt token向量。离散prompt的是以token喂给bert的,连续prompt就是把这些token替换成向量,直接把通过了bert emebdding层的prompt token的向量替换成可训练参数,冻结BERT,只训练3*768这个矩阵

  1. Prefix-tuning在输出前加上一串连续的向量(前缀prefix),保持PLM参数不变,仅训练该向量。在给定可训练前缀矩阵M和θ参数化的固定PLM对下面的对数似然函数优化:

提示学习的关键方法

基于提示学习已有的工作,其主要模块或方法:

(1)输入改造模板。目标是给语言模型“最合适”的提示。

(2)标签词。目标是让语言模型“最容易”预测到。

(3)标签词与类别概率分布的转换方式。让语言模型输出与下游任务对应。

小结

算法工程师的主要任务,就是基于业务场景、结合实际资源情况选择尽可能匹配的方法来完成任务——这个选择的重要依据是方法在一些常见维度上的特性,或者说相对其他方法的优劣。

星号越多表示该指标取值越大

               提示学习充分利用了语言模型在学习大规模语料后得到的知识、和模式,以及文本生成能力,在训练数据很少甚至没有的情况下,完成分类、阅读理解等任务。相比端到端的方法,提示学习框架结构复杂多变、实现难度较大,对广大工程师不是很亲和。

        提示模板的设计,类似特征工程工作,对领域知识和数据挖掘能力要求比较高。需要注意的是,提示学习的一些策略需要基于“开发集”来优化提示模板,模型过拟合的概率比较大。一些提示学习工作,使用规模较大的开发集或测试集来优化提示模板,实际上脱离了“小样本”这个场景——实际的小样本场景中,训练集和测试集都很小。一些人把“对抗学习”的目标换改为“帮助”,应用到提示学习中。比如,AutoPrompt就借鉴了对抗学习的方法来搜索优质模板。

        垂直领域应用越来越多,需要  预训练语言模型在低资源的情况下快速形成工作能力。提示学习是微调之后又一种非常好的策略,可以帮助预训练语言模型快速形成战斗力。提示学习是一种人工主导的。

参考:

Prompt Learning(提示学习) - 简书

prompt到底行不行 - 知乎

提示学习(Prompt Learning)——低资源场景的福音 - 知乎

Fine-tune之后的NLP新范式:Prompt越来越火,CMU华人博士后出了篇综述文章

相关文章:

提升学习 Prompt 总结

NLP现有的四个阶段: 完全有监督机器学习完全有监督深度学习预训练:预训练 -> 微调 -> 预测提示学习:预训练 -> 提示 -> 预测 阶段1,word的本质是特征,即特征的选取、衍生、侧重上的针对性工程。 阶段2&…...

JavaScript学习笔记(2.0)

BOM--(browser object model) 获取浏览器窗口尺寸 获取可视窗口高度:window.innerWidth 获取可视窗口高度:window.innerHeight 浏览器弹出层 提示框:window.alert(提示信息) 询问框:window.confirm(提示信息) 输…...

直击2023云南移动生态合作伙伴大会,聚焦云南移动的“价值裂变”

作者 | 曾响铃 文 | 响铃说 2023年3月2日下午,云南移动生态合作伙伴大会在昆明召开。云南移动党委书记,总经理葛松海在大会上提到“2023年,云南移动将重点在‘做大平台及生态级新产品,做优渠道转型新动能,做强合作新…...

STM32F1开发实例-振动传感器(机械)

振动(敲击)传感器 振动无处不在,有声音就有振动,哒哒的脚步是匆匆的过客,沙沙的夜雨是暗夜的忧伤。那你知道理科工程男是如何理解振动的吗?今天我们就来讲一讲本节的主角:最简单的机械式振动传感器。 下图即为振动传…...

2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建

去年公司由于不断发展,内部自研系统越来越多,所以后来搭建了一个日志收集平台,并将日志收集功能以二方包形式引入自研系统,避免每个自研系统都要建立一套自己的日志模块,节约了开发时间,管理起来也更加容易…...

2023-3-10 刷题情况

打家劫舍 IV 题目描述 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大…...

如何建立一个成功的MES?

制造执行系统(MES)是一种为制造业企业提供实时生产过程控制、管理和监视的信息系统。一个成功的MES系统可以帮助企业提高生产效率,降低成本,提高产品质量,提高客户满意度等。下面是一些关键步骤来建立一个成功的MES系统…...

Kafka生产者幂等性/事务

Kafka生产者幂等性/事务幂等性事务Kafka 消息交付可靠性保障: Kafka 默认是:至少一次最多一次 (at most once) : 消息可能会丢失,但绝不会被重复发送至少一次 (at least once) : 消息不会丢失,但有可能被重复发送精确一次 (exact…...

JavaWeb--案例(Axios+JSON)

JavaWeb--案例(AxiosJSON)1 需求2 查询所有功能2.1 环境准备2.2 后端实现2.3 前端实现2.4 测试3 添加品牌功能3.1 后端实现3.2 前端实现3.3 测试1 需求 使用Axios JSON 完成品牌列表数据查询和添加。页面效果还是下图所示: 2 查询所有功能 …...

css制作动画(动效的序列帧图)

相信 animation 大家都用过很多,知道是 CSS3做动画用的。而我自己就只会在 X/Y轴 上做位移旋转,使用 animation-timing-function 规定动画的速度曲线,常用到的 贝塞尔曲线。但是这些动画效果都是连续性的。 今天发现个新功能 animation-timi…...

【设计模式】装饰器模式

装饰器模式 以生活中的场景来举例,一个蛋糕胚,给它涂上奶油就变成了奶油蛋糕,再加上巧克力和草莓,它就变成了巧克力草莓蛋糕。 像这样在不改变原有对象的基础之上,将功能附加到原始对象上的设计模式就称为装饰模式(D…...

Nginx配置实例-反向代理案例一

实现效果:使用nginx反向代理,访问 www.suke.com 直接跳转到本机地址127.0.0.1:8080 一、准备工作 Centos7 安装 Nginxhttps://liush.blog.csdn.net/article/details/125027693 1. 启动一个 tomcat Centos7安装JDK1.8https://liush.blog.csdn.net/arti…...

Java中IO流中字节流(FileInputStream(read、close)、FileOutputStream(write、close、换行写、续写))

IO流:存储和读取数据的解决方案 纯文本文件:Windows自带的记事本打开能读懂 IO流体系: FileInputStream:操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来 书写步骤:①创建字节输入流对象 …...

C#完全掌握控件之-combbox

无论是QT还是VC,这些可视化编程的工具,掌握好控件的用法是第一步,C#的控件也不例外,尤其这些常用的控件。常见控件中较难的往往是这些与数据源打交道的,比如CombBox、ListBox、ListView、TreeView、DataGridView. 文章…...

STL的空间配置器(allocator)

简答: 在CSTL中,空间配置器便是用来实现内存空间(一般是内存,也可以是硬盘等空间)分配的工具,他与容器联系紧密,每一种容器的空间分配都是通过空间分配器alloctor实现的。 解析: 1.两种C类对象实例化方式的异同在c中&a…...

linux系统莫名其妙的环境变量问题

今天使用Ubuntu20.04系统,使用less命令查看日志,发现日志中的“中文”显示为乱码; 使用vim命令查看该日志文件也显示为乱码; 使用more命令查看该日志文件则显示正常。 首先查询系统的字符集编码,发现编码正常支持中…...

使用 Microsoft Dataverse 简化的连接快速入门

重复昨天本地部署dynamics实例将其所有的包删除之后,再次重新下载回来。运行填写跟之前登陆插件一样的信息点击login 然后查看控制台,出现这样就说明第一个小示例就完成了。查看你的dy365平台下的 “我的活动”就可以看到刚刚通过后台代码创建的东西了。…...

PLSQL Developer 安装指南

PLSQL Developer 是 Oracle 的客户端。 下面以64位破解版的PLSQL Developer为例,进行PLSQL Developer 安装讲解。 0. 下载 PLSQL Developer https://download.csdn.net/download/Shipley_Leo/87557938 1. 根据操作系统选择对应“plsqldev.exe”可执行文件&#xff…...

腾讯云企业网盘2.5版本全新发布啦!!!

腾讯云企业网盘又又又更新啦!本期重点打磨管理协同、企业安全守护能力,同时也不断强化自身产品体验,助力企业高效办公~那么,此次更新具体有什么安全可靠的新功能呢?今天就带大家一起解锁~01协同管理,提升工…...

Excel职业版本(4)

图表 图表基本结构 组成元素 图表的分类 柱状图 介绍:在竖直方向比较不同类型的数据 适用场景:用于二维数据集,对于不同类型的数据进行对比,也可用于同一类型的数据在不同的时间维度的数据对比,通过柱子的高度来反…...

3-2 SpringCloud快速开发入门:Ribbon 实现客户端负载均衡

接上一章节Ribbon 是什么,这里讲讲Ribbon 实现客户端负载均衡 Ribbon 实现客户端负载均衡 由于 Spring Cloud Ribbon 的封装, 我们在微服务架构中使用客户端负载均衡调用非常简单, 只需要如下两步: 1、启动多个服务提供者实例并…...

ChatGPT,乌合之众的疯狂

最近ChatGPT有多火爆就不用我说了。公司里,从CEO到技术人员,乃至于门口的保安、食堂的大婶,没有一个不会聊两句ChatGPT的。连我20年未见的小学同学、三线城市警官,都问我这东西能不能给领导写汇报材料。 用不了多久,家…...

代码随想录刷题-数组-长度最小的子数组

文章目录长度最小的子数组习题暴力解法滑动窗口长度最小的子数组 本节对应代码随想录中:代码随想录,讲解视频:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili 习题 题目链接:209. 长度最小的子数…...

成功解决安装MySQL5.7提示公钥GPG密钥配置为file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

前言 大家好,我是沐风晓月,今天做MySQL5.7安装的时候遇到问题了,我们一起来复盘下这个问题,如果你使用我的方法没有解决,一定要留言给我,我们一起来排查和学习和完善。 本文收录于csdn 我是沐风晓月的专栏 【日常遇到的疑难问题和bug解决】 ,若点击无法跳转,请在csdn …...

vue配置环境变量

目录 创建配置文件 .env.development 文件 .env.production 文件 .env.dev 文件 使用变量 配置 package.json 文件 例子:在 api.js 使用 可以继续添加 创建配置文件 在根目录与 package.json 同级创建文件 .env.development、 .env.production、.env.dev 文件…...

js学习3(数组)

目录 结构图 数组操作 每日一练 结构图 数组操作 ## 数组中可以存储任何类型元素 ## 创建: 字面量([...])、创建对象(new Array(arr_len)) ## 遍历: 循环遍历、forEach(callback)、map(callback)、filter(callback)、every(callback)、some(callback)、…...

不用写代码也能开发,产品经理是怎么做到的?

产品经理再也不用求开发了……就在前几天,我做的小程序上线了! 从产品原型设计,前端开发后端开发,产品部署到运维,都是由我1个人完成的。 我是啥时候学会写代码的呢?不瞒你说,我一行代码都没写…...

Android源码分析 - Parcel 与 Parcelable

0. 相关分享 Android-全面理解Binder原理 Android特别的数据结构(二)ArrayMap源码解析 1. 序列化 - Parcelable和Serializable的关系 如果我们需要传递一个Java对象,通常需要对其进行序列化,通过内核进行数据转发,…...

数字孪生与 UWB 技术创新融合:从单点测量到全局智能化

人员定位是指利用各种定位技术对人员在特定场所的位置进行准确定位的技术。人员定位技术主要应用于需要实时监控、管理和保障人员安全的场所,如大型厂区、仓库、医院、学校、商场等。人员定位技术的应用范围非常广泛,例如:-在工厂生产线上&am…...

蓝桥杯嵌入式PWM_IN(打开中断)

1.原理图 2.配置 3.代码 关键函数 HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1) HAL_TIM_IC_CaptureCallback(TIM_HandTypeDef *htim)//回调函数 HAL_TIM_GET_COUNTER(&htim3) __HAL_TIM_SetCounter(&htim3,0)void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef …...

蓝桥杯集训·每日一题Week1

前缀和(Monday) AcWing 3956. 截断数组(每日一题) 思路: 首先可以预处理出前缀和。判断数组长度如果小于 333 或者前 nnn 项不是 333 的倍数,则可以直接输出 000。 否则就枚举所有 s[i]s[n]3s[i] \cfrac…...

25k的Java开发常问的ThreadLocal问题有哪些?

前言:ThreadLocal问的比较多的是和Synchronized的区别、ThreadLocal被设计弱引用、存储元素的过程、实现线程隔离的原理。 文章目录 ThreadLocalThreadLocal定义ThreadLocal与Synchronized的区别ThreadLocal底层实现ThreadLocalMap存储元素的过程ThreadLocal实现线程隔离的原理…...

R语言基础(四):数据类型

R语言基础(一):注释、变量 R语言基础(二):常用函数 R语言基础(三):运算 5.数据类型 5.1 基本数据类型 R语言基本数据类型大致有六种: 整数Integer、浮点数Numeric、文本(字符串)Character、逻辑(布尔)Logical、复合类型Complex、…...

批处理命令--总结备忘「建议收藏」

批处理命令--总结备忘「建议收藏」 前言1、基础语法:2、批处理基本命令3、实例3.1 打开虚拟目录3.2 以当前时间为文件名,建文件夹3.3 备份postgresql数据库前言 最近用批处理命令做了一些postgresql数据库的备份,打开虚拟环境。。。发现批处理处理一些常用重复工作时真的很…...

面试知识点梳理及相关面试题(十一)-- docker

1. Docker和虚拟机的区别 容器不需要捆绑一整套操作系统,它只需要满足软件运行的最小内核就行了。 传统虚拟机技术是虚拟出一整套硬件后,在其上运行一个完成操作系统,在该系统上再运行所需应用进程容器内的应用进程直接运行于宿主的内核&am…...

k8s--services(微服务)

文章目录一、k8s网络通信service和iptables的关系二、services1.简介2.默认3.IPVS模式的service4.clusterip5.headless6.从外部访问service的三种方式(1)nodeport(2)loadbalancer7.metallb一、k8s网络通信 k8s通过CNI接口接入其他…...

【Java开发】设计模式 01:单例模式

1 单例模式介绍单例模式(Singleton Pattern)是Java中最为基础的设计模式。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对…...

10、go工程化与标准库

目录一、用go mod管理工程二、包引入规则三、init调用链四、可见性五、标准库1 - 时间函数2 - 数学计算3 - I/O操作4 - 编码一、用go mod管理工程 初始化项目:go mod init $module_name,$module_name和目录名可以不一样。上述命令会生成go.mod文件 mod…...

【Selenium自动化测试】鼠标与键盘操作

在 WebDriver 中,与鼠标操作相关的方法都封装在ActionChains 类中,与键盘操作相关的方法都封装在Keys类中。下面介绍下这两个类中的常用方法。 鼠标操作 ActionChains类鼠标操作常用方法: context_click():右击double_click()&…...

自定义javax.validation校验枚举类

枚举类单一情况 package com.archermind.cloud.phone.dto.portal.external.validation.validator;import com.archermind.cloud.phone.dto.portal.external.validation.constraints.EnumValidation; import lombok.extern.slf4j.Slf4j;import javax.validation.ConstraintVali…...

[Java·算法·中等]LeetCode39. 组合总和

每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2👉️ 力扣原文 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形…...

【Linux】vi和vim编辑器

目录主题主题 三种常见模式: 正常模式 以vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用[上下左右]按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用「复制、…...

BIO,NIO,AIO

IO模型 用什么样的通道进行数据传输和接收,java支持3种io网络编程模式 BIO NIO AIO BIO 同步阻塞 一个客户端连接对应一个处理线程 BIO示例代码(客户端和服务端) package com.tuling.bio;import java.io.IOException; import java.net.So…...

代码随想录刷题-数组-有序数组的平方

文章目录有序数组的平方习题暴力排序双指针有序数组的平方 本节对应代码随想录中:代码随想录,讲解视频:有序数组的平方_哔哩哔哩_bilibili 习题 题目链接:977. 有序数组的平方 - 力扣(LeetCode) 给你一…...

【玩转c++】stack和queue的介绍和模拟实现

本期主题:list的讲解和模拟实现博客主页: 小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐stack的介绍和使用1.1.stack的介绍1. stack是一种容器适配器,专门用在具有后进先出操作的上…...

Linux order(文件、磁盘、网络、系统管理、备份压缩)

1. Linux 文件命令 -rwxrwxrwx chmod:change mode,用于(文件所有者或 root )变更用户(u:owner g:group o:other a:all)的权限 chmod [OPTION]… MODE[,MODE]… FILE… OPTION -R:递归修改more option:chmod…...

最详细的CentOS7安装Mysql数据库服务

1.查看是否安装mysql: rpm -qa | grep mysql如果有查出来东西,使用命令删除: rpm -e xxx2.检查是否有mysql用户组和mysql用户,没有就添加有就忽略: groups mysql 添加用户组和用户 groupadd mysql && useradd -r -g mysql mysql&a…...

【IoT】项目管理:如何做好端到端的项目管理?

今天主要来谈谈项目管理这个话题。 首先来看一个我在网络上看到的一个关于项目管理的案例或者是段子。 将项目管理的作用及意义非常直观地展示了出来。 有一个植树搞绿化的企业,在公司内部设置有五个部门,分别是: 运输部门;挖坑部…...

渲染十万条数据就把你难住了?不存在的!

虚拟列表的使用场景如果我想要在网页中放大量的列表项,纯渲染的话,对于浏览器性能将会是个极大的挑战,会造成滚动卡顿,整体体验非常不好,主要有以下问题:页面等待时间极长,用户体验差CPU计算能力…...

编程学习的心路历程和困惑回顾

回首入行9年的经历,从大一开始学习C语言和数据结构,老师一直是在用IDE演示程序的编写和运行,我们也就一直在跟黑乎乎的命令行窗口打交道。 后来在一些课程的实验环节,接触到了一些别人编写好的工程代码,知道了Makefile…...