- C#测试实战:从集成到端到端——代码级深度解析与工程化实践
墨夶
C#学习资料c#开发语言
——零侵入框架设计、自动化工具链与真实场景模拟为什么需要“测试金字塔”?在微服务架构下,C#应用的复杂性呈指数级增长。集成测试(IntegrationTesting)和端到端测试(E2ETesting)是保障系统稳定性的两大核心防线:集成测试:验证模块间协作,定位接口与依赖问题端到端测试:模拟真实用户场景,确保全链路流程无误本文通过代码实战,从依赖注入模拟到浏览器自动化,构建一个企业级测试框架,并
- 记录springboot集成多个mqtt,实现重连后重新订阅
shell_girl
springbootjavaspring
springboot整合多个mqtt前提:实际应用中,项目需要订阅其他服务器的消息,并且把本机消息发布,所以需要连接多个mqtt,实现不同的需求参考:https://blog.csdn.net/qq_40083897/article/details/117333716整合大致结构如下:1.引入依赖org.springframework.integrationspring-integration-s
- springboot 集成mqtt 以bytes收发消息
springboot集成mqtt,且订阅和推送消息全部以bytesmaven加入依赖org.springframework.integrationspring-integration-streamorg.springframework.integrationspring-integration-mqttapplication.yml添加配置参数spring:#mqttmqtt:url:tcp://
- 基于SpringBoot实现MQTT消息收发
萧雲漢
SpringBootspringbootspringjava中间件iot
基于SpringBoot实现MQTT消息收发实验环境SpringBoot2.2.2.RELEASE:项目框架EMQXcommunitylatest:MQTT服务端Docker18.0.~:部署容器POM引入依赖包#pom.xmlorg.springframework.bootspring-boot-starter-integration2.2.2.RELEASEorg.springframewor
- springboot mqtt收发消息
java知路
springbootjavaspring
在SpringBoot中,可以使用MQTT协议来收发消息。以下是一个简单的示例:1.添加依赖在`pom.xml`文件中添加以下依赖:```xmlorg.springframework.integrationspring-integration-mqtt5.5.3```2.配置MQTT连接工厂在`application.properties`文件中添加以下配置:```propertiesspring
- 【读代码】深入解析Ragas:RAG应用效果评估最好的工具
kakaZhui
大模型实践之知识库RAGLLMAgent人工智能AIGCRAGRagas
一、基本介绍Ragas是由ExplodingGradients团队开发的专业LLM应用评估框架,通过自动化测试和量化指标帮助开发者构建可靠的AI系统。项目采用模块化架构设计,核心功能包括:#典型架构模块├──metrics#50+评估指标实现├──testset#测试集生成系统├──embeddings#多模态嵌入支持├──integrations#主流框架集成├──optimizers#遗传算法
- Spring Framework 核心模块详解
白仑色
Spring系列springSpringFramework核心模块Java开发IoC容器
摘要SpringFramework是Java企业级开发的基石框架,它通过模块化设计实现了“轻量级”、“非侵入式”和“一站式”的特性。理解Spring的核心模块结构,是掌握其原理与应用的关键。本文将全面解析SpringFramework的五大核心模块体系:核心容器(CoreContainer)AOP和Instrumentation数据访问/集成(DataAccess/Integration)Web模
- 有没有DBeaver的详细插件安装教程?
java
以下是DBeaver插件安装的详细教程,涵盖常规插件安装、特殊驱动配置及常见问题处理,按操作步骤分类说明:️一、常规插件安装(通过EclipseMarketplace)打开插件市场菜单栏帮助→EclipseMarketplace。搜索与安装输入插件名(如GitIntegration)→点击安装→接受协议→重启生效。验证安装重启后,菜单栏或工具栏会出现新插件功能入口(如Git
- 推荐一些DBeaver和Navicat的插件
java
以下是针对DBeaver和Navicat的实用插件及扩展推荐,结合两者特性分类整理:一、DBeaver插件推荐(开源扩展性强)GitIntegration功能:将SQL脚本、连接配置纳入Git版本控制,支持分支对比与提交记录回溯。场景:团队协作开发或需追踪SQL变更的项目。DataGenerator功能:批量生成模拟测试数据(支持正则、字典模板),快速构建沙箱环境。
- Llama_Index核心组件介绍
智模睿脑君
llama语言模型深度学习自然语言处理人工智能神经网络知识图谱
文章目录一、什么是LlamaIndex1.简介2.作用二、LlamaIndex核心组件1.数据连接器(DataConnectors)2.数据索引(DataIndexes)3.引擎(Engines)4.数据代理(DataAgents)5.应用集成(ApplicationIntegrations)三、LlamaIndex核心概念1.RAG1,索引2,查询2.索引阶段1,Dataconnectors2,
- UltraEdit 2025 Crack Manage Git Repositories
SEO-狼术
DelphiCracknetgit
UltraEdit2025CrackManageGitRepositoriesUltraEdit2025.0nowincludesbuilt-inGitintegration,makingsourcecontroltasksaccessiblewithoutleavingtheeditor.UltraEditCoreisapowerfultexteditordesignedspecifically
- JAVA:Kettle 强大的开源ETL工具
拾荒的小海螺
JAVAjava开源etl
请关注微信公众号:拾荒的小海螺博客地址:http://lsk-ww.cn/1、简述Kettle(PentahoDataIntegration):强大的开源ETL工具Kettle,又称作PentahoDataIntegration,是一款流行的开源ETL(Extract,Transform,Load)工具,提供了丰富的功能和易用的界面,用于数据集成、转换和加载。是Pentaho项目的一个重要组成部分
- 【GoogleCts】ApfIntegrationTest fail in CtsNetTestCases.apk 问题分析
Dic-
AOSP#AndroidFrameworkGoogleXTSGoogle套件测试自学笔记问题记录解决方案Cts测试Android
问题描述Test:android.net.cts.ApfIntegrationTest#testDropPingReplySuite/Plan:CTS/ctsSuite/Build:15_r2/12699308Detail:java.lang.AssertionError:Expectedanexceptionofclassjava.util.concurrent.TimeoutException
- Python 企业级开发与DevOps实践
gohacker
pythondevops开发语言
https://www.python.org/static/community_logos/python-logo-master-v3-TM.png大型项目结构与设计模式项目结构规范text复制下载enterprise_app/├──docs/#项目文档├──tests/#测试代码│├──unit/#单元测试│└──integration/#集成测试├──src/#主代码│├──package/#
- 持续集成CI(Continuous Integration)
观看本文后,你将能够描述持续集成(ContinuousIntegration)和持续交付(ContinuousDelivery),解释在持续集成中使用小批量的原因,并描述持续集成的好处。人们常把CI/CD当作一个概念来使用,但持续集成和持续交付是两种不同的实践方式。持续集成(CI)是指在一组测试通过后,持续地将每位开发者的变更构建、测试并集成到主分支中的过程。其结果是得到具有潜在可部署性的代码。持
- SpringBoot-integration 使用MQTT对接大疆机场+无人机 完整示例
若疆赤云online
大疆机场+无人机springboot后端java
参考大疆上云API-大疆上云api是二级路由方案,我这做开发直接使用一级路由满足当前系统要求mqttconfig定义mqtt连接工厂,消息处理通道和路由定义,只监听需要的topicimportcn.hutool.core.util.StrUtil;importcom.alibaba.fastjson.JSONObject;importcom.central.common.utils.CustomT
- 环境整理(pro、sit、uat、test、pre、dev、fat )
shunnianlv
pro(Productionenvironment):生产环境,面向外部用户的环境,正式环境,连接上互联网即可访问。sit(SystemIntegrationTest):系统集成测试,开发人员自己测试流程是否走通。uat(UserAcceptanceTestenvironment):用户验收测试环境,用于生产环境下的软件测试者测试使用。test:测试环境,外部用户无法访问,专门给测试人员使用的,版
- Gartner<Reference Architecture Brief: Data Integration>学习心得
架构师学习成长之路
微服务架构云原生ETL数据集成
数据集成参考架构解析引言在当今数字化时代,数据已成为企业最宝贵的资产之一。随着企业规模的不断扩大和业务的日益复杂,数据来源也变得多样化,包括客户关系管理(CRM)、企业资源规划(ERP)、人力资源管理(HR)和市场营销等领域的运营系统。这些系统虽然在其特定功能领域表现出色,但将它们作为企业所有数据的中央存储库来满足运营、高级分析和人工智能/机器学习(AI/ML)需求则具有挑战性。因此,数据集成架构
- Jenkins 和 GitLab CI/CD比较
辣香牛肉面
工具类jenkinsgitlabci/cd
近十年来,持续集成(ContinuousIntegration,CI)和持续交付(ContinuousDelivery,CD)领域都取得了很大的进步。DevOps测试的兴起导致了对CI/CD工具的快速需求。现有的解决方案总是随着时间的推移而改进,大量新产品或新版本正在进入QA领域。当你手头有这么多选项时,选择正确的工具确实会有一点儿挑战。另一个被提到最多的工具是GitLabCI/CD。作为一个De
- 升级gradle 8.0 后打包报如下错误
MorrisMao
androidgradle
升级gradle8.0后打包报如下错误>Task:app:minifyReleaseWithR8AGPBI:{"kind":"warning","text":"Unexpectedreferencetomissingserviceclass:META-INF/services/reactor.blockhound.integration.BlockHoundIntegration.","sourc
- 推荐项目:Leeroy——Jenkins与GitHub拉取请求的完美融合
褚知茉Jade
推荐项目:Leeroy——Jenkins与GitHub拉取请求的完美融合leeroyJenkinsintegrationwithGitHubpullrequests项目地址:https://gitcode.com/gh_mirrors/le/leeroy项目介绍Leeroy是一个使用Go语言编写的轻量级应用,它巧妙地将Jenkins持续集成服务和GitHub的拉取请求(PullRequest)功能
- sentence_transformers安装
AI算法网奇
python基础人工智能计算机视觉
目录安装:测试引用:报新错:sentence_transformers安装:pipinstallsentence_transformers测试引用:python-c"fromsentence_transformersimportSentenceTransformer"报新错:python-c"fromtransformers.integrationsimportCodeCarbonCallback
- seurat v5更新及样本整合方法
感性逻辑
单细胞学习数据库mysql
目录seuratv5的去批次方式①pbmc单细胞数据②SeuratV5多种去批次进行合并分组数据进行去批次CCA降维harmony降维Analysis,visualization,andintegrationofVisiumHDspatialdatasetswithSeurat•Seurat(satijalab.org)ToolsforSingleCellGenomics•Seurat(satij
- CMMI五个级别
编程星空
计算机基础cmmi
CMMI五个级别CMMI(CapabilityMaturityModelIntegration)是一种用于评估和改进组织流程成熟度的模型。CMMI分为五个级别,每个级别代表组织在流程管理和改进方面的不同成熟度。以下是区分CMMI五个级别的方法:CMMI级别1:初始级在初始级,组织的流程通常是临时的、无序的,且缺乏标准化。项目的成功依赖于个人的努力和能力,而不是系统化的流程。组织没有明确的流程管理,
- Oxygen Feedback Crack
SEO-狼术
CracksdkOxygen
OxygenFeedbackCrackOxygenIntegration为您的社区提供了一种简单有效的互动和提供反馈的方式。它易于配置和集成,并且包括用户友好的界面和许多对评论员和管理员都有用的功能。OxygenFeedbackEnterprise允许您在自己的服务器上安装软件,以便更好地控制数据。您也可以连接到LDAP目录进行身份验证。OxygenIntegration功能随时随地交互-氧气反馈
- 持续集成与持续部署
19岁的墨先生
前端工程化ci/cd
一、持续集成1.1核心概念1.1.1持续集成持续集成(英文:ContinuousIntegration,简称CI)。在软件工程中,持续集成是指将所有开发者工作副本每天多次合并到主干的做法持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起1.1.2持续交付持续交付(英文:ContinuousDelivery,简称CD)。完
- bitmagnet 项目技术文档
詹坦直Lucinda
bitmagnet项目技术文档bitmagnetAself-hostedBitTorrentindexer,DHTcrawler,contentclassifierandtorrentsearchenginewithwebUI,GraphQLAPIandServarrstackintegration.项目地址:https://gitcode.com/gh_mirrors/bi/bitmagnet1
- (四)MMA(事件通知/模块间数据状态迁移/Meterialized Views/Saga Pattern)
山猪打不过家猪
模块化单体javaandroidservlet
文章目录项目地址一、事件通知二、数据状态迁移2.1UserRegisteredIntegrationEvent1.创建UserRegisteredIntegrationEvent(Users)2.UserRegisteredIntegrationEvent进行发布(Users)3.UserRegisteredIntegrationEventHandler(消费者模块)4.测试5.总结三、Meter
- electron渲染进程发送消息给主进程报错__dirname is not undefined
Orange301511
大前端electronvue.jsjavascript
"electron":"17.0.1","electron-updater":"4.6.5"当进行自动更新渲染进程发送消息给主进程报错__dirnameisnotundefined解决方案在根目录vue.config.js添加如下代码pluginOptions:{electronBuilder:{nodeIntegration:true}}
- Jenkins环境搭建及简单介绍
大佬,救命!!!
jmeter自动化笔记开源推荐测试工具
一、jenkins介绍1、持续集成(CI)Continuousintegration持续集成团队开发成员每天都有集成他们的工作,通过每个成员每天至少集成一次,也就意味着一天有可能多次集成。在工作中我们引入持续集成,通过持续集成自动构建(代码的编译、发布、部署、用例的更新和自动化执行),从而达到尽早发现代码集成的错误。例如:一个项目有a,b,c;任何一个改动代码,都要去集成;2、在没有持续集成时,开
- JAVA基础
灵静志远
位运算加载Date字符串池覆盖
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
- keepalived实现redis主从高可用
bylijinnan
redis
方案说明
两台机器(称为A和B),以统一的VIP对外提供服务
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A)
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始
- java文件操作大全
0624chenhong
java
最近在博客园看到一篇比较全面的文件操作文章,转过来留着。
http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html
转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html
一.获得控制台用户输入的信息
&nbs
- android学习任务
不懂事的小屁孩
工作
任务
完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem
- zoom.js
换个号韩国红果果
oom
它的基于bootstrap 的
https://raw.github.com/twbs/bootstrap/master/js/transition.js transition.js模块引用顺序
<link rel="stylesheet" href="style/zoom.css">
<script src=&q
- 详解Oracle云操作系统Solaris 11.2
蓝儿唯美
Solaris
当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。
- spring学习——springmvc(一)
a-john
springMVC
Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。
1,跟踪Spring MVC的请求
请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前
- hdu4342 History repeat itself-------多校联合五
aijuans
数论
水题就不多说什么了。
#include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--)
- EJB和javabean的区别
asia007
beanejb
EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了
1.EJB用于服务端应用开发, 而JavaBeans
- Struts的action和Result总结
百合不是茶
strutsAction配置Result配置
一:Action的配置详解:
下面是一个Struts中一个空的Struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
&quo
- 如何带好自已的团队
bijian1013
项目管理团队管理团队
在网上看到博客"
怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点:
1.诚信
对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提
- Java代码混淆工具
sunjing
ProGuard
Open Source Obfuscators
ProGuard
http://java-source.net/open-source/obfuscators/proguardProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, m
- 【Redis三】基于Redis sentinel的自动failover主从复制
bit1129
redis
在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。
什么是Sentine
- 使用代理实现Hibernate Dao层自动事务
白糖_
DAOspringAOP框架Hibernate
都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。
public void save(Object obj){
Session session = this.getSession();
Transaction tran = session.beginTransaction();
try
- maven3实战读书笔记
braveCS
maven3
Maven简介
是什么?
Is a software project management and comprehension tool.项目管理工具
是基于POM概念(工程对象模型)
[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复]
[与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]
功能:
- 编程之美-子数组的最大乘积
bylijinnan
编程之美
public class MaxProduct {
/**
* 编程之美 子数组的最大乘积
* 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。
* 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。
* 但按题目的意思,是要求得这个子数组,而不
- 读书笔记-2
chengxuyuancsdn
读书笔记
1、反射
2、oracle年-月-日 时-分-秒
3、oracle创建有参、无参函数
4、oracle行转列
5、Struts2拦截器
6、Filter过滤器(web.xml)
1、反射
(1)检查类的结构
在java.lang.reflect包里有3个类Field,Method,Constructor分别用于描述类的域、方法和构造器。
2、oracle年月日时分秒
s
- [求学与房地产]慎重选择IT培训学校
comsci
it
关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题
培训学校的教学楼和宿舍的环境和稳定性问题
我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子...
&nb
- RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
daizj
oraclermanfilespersetPARALLELISM
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转
PARALLELISM ---
我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:
RMAN > configure device type disk parallelism 3 ;
表示启动三个通道,可以加快备份恢复的速度。
- 简单排序:冒泡排序
dieslrae
冒泡排序
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
- 初二上学期难记单词三
dcj3sjt126com
sciet
concert 音乐会
tonight 今晚
famous 有名的;著名的
song 歌曲
thousand 千
accident 事故;灾难
careless 粗心的,大意的
break 折断;断裂;破碎
heart 心(脏)
happen 偶尔发生,碰巧
tourist 旅游者;观光者
science (自然)科学
marry 结婚
subject 题目;
- I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码
dcj3sjt126com
redis
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
前面3步应该没有问题,主要的问题是执行make的时候,出现了异常。
异常一:
make[2]: cc: Command not found
异常原因:没有安装g
- 并发容器
shuizhaosi888
并发容器
通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器ConcurrentHashMap
替代同步基于散列的Map,通过Lock控制。
&nb
- Spring Security(12)——Remember-Me功能
234390216
Spring SecurityRemember Me记住我
Remember-Me功能
目录
1.1 概述
1.2 基于简单加密token的方法
1.3 基于持久化token的方法
1.4 Remember-Me相关接口和实现
- 位运算
焦志广
位运算
一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&am
- nodejs 数据库连接 mongodb mysql
liguangsong
mongodbmysqlnode数据库连接
1.mysql 连接
package.json中dependencies加入
"mysql":"~2.7.0"
执行 npm install
在config 下创建文件 database.js
- java动态编译
olive6615
javaHotSpotjvm动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视
- Storm0.9.5的集群部署配置优化
roadrunners
优化storm.yaml
nimbus结点配置(storm.yaml)信息:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional inf
- 101个MySQL 的调节和优化的提示
tomcat_oracle
mysql
1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 3. 使用电池供电的RAM(注:RAM即随机存储器)。 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列
- zoj 3829 Known Notation(贪心)
阿尔萨斯
ZOJ
题目链接:zoj 3829 Known Notation
题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。
解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1