- JavaIO四大模型:NIO(IO多路复用)
Colourful.
Java网络编程java网络
文章目录概述NIO涉及到的名词JavaNIO服务端和客户端流程概述Java中的Selector和Linux中的epoll都是基友IO多路复用的,有时也被称为异步阻塞IO。我们之前介绍过,同步阻塞I/O和同步非阻塞IO。对于同步阻塞I/O来说,每次进行I/O时,我们的用户线程都会阻塞,显然这在高并发下效率很低。对于同步非阻塞I/O来说,每次进行I/O,虽然在内核缓冲区还没有数据的情况下,会给用户线程
- Spring容器中注册组件的几种方式
jarenyVO
SpringBootspringjava后端springboot
Spring容器中注册组件的几种方式本文大纲一、@Configuration和@Bean给容器中注册组件1.1.@Conditional按照条件注册bean二、@ComponentScan自动扫描组件三、@Import给容器中快速导入一个组件3.1.@Import使用class导入3.2.@Import使用ImportSelector全类路径名3.3.@Import使用ImportBeanDefi
- selenium UI自动化元素定位中classname和CSS区别
nanzhuhe
测试seleniumui自动化
在使用Selenium进行Web自动化测试时,定位元素是核心任务之一。Selenium提供了多种定位策略,包括通过ID、Name、ClassName、CSSSelector、XPath等。在这些定位策略中,ClassName(classname)和CSSSelector(CSSs)虽然经常被混淆,但它们在功能和用法上有所不同。ClassName(classname)ClassName是一种定位策略
- (18)java+ selenium自动化测试-元素定位之By css中篇
程序员的世界你不懂
javaseleniumcss
1.简介我们继续-css的定位元素的方法:ID属性值定位、其他属性值定位和使用属性值的一部分定位(这个类似xpath的模糊定位)。2.常用定位方法(8种)(1)id(2)name(3)classname(4)tagname(5)linktext(6)partiallinktext(7)xpath(8)cssselector(本篇讲解)3.自动测试实战以百度首页为例,将CSS的各种定位方法一一讲解和
- C3新增特性
小胖同学~
前端css
✅一、选择器(Selectors)1.属性选择器[attr^=value]:匹配属性值以特定字符串开头的元素。[attr$=value]:匹配属性值以特定字符串结尾的元素。[attr*=value]:匹配属性值包含特定字符串的元素。2.子元素和兄弟元素选择器:nth-child(n):匹配父元素下的第n个子元素。:nth-last-child(n):匹配父元素下的倒数第n个子元素。:nth-of-
- Keil中 L6406E: No space in execution regions with .ANY selector matching heap_4.o(.bss) 错误分析简述
lixzest
stm32C
链接器错误L6406E:Nospaceinexecutionregionswith.ANYselectormatchingheap_4.o(.bss)表明内存分配已超出预期范围,通常与全局/静态变量(.bss段)或堆(Heap)配置有关。以下是逐步解决方案:1.理解错误原因.bss段:存储未初始化的全局变量和静态变量。heap_4.o:通常与FreeRTOS的堆管理(Heap4)相关,Heap4需
- Vue3+TS 视频播放器组件封装(Video.js + Hls.js 最佳组合,从零基础到精通,收藏这篇就够了!
.hljs-comment,.hljs-quote{color:#b6b18b}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#eb3c54}.hljs-built_in,.hlj
- Android录制视频自带铺满多行水印
宝杰X7
Androidandroid音视频
文章目录引言环境要求代码实现总结引言 之前做过几种水印需求,这篇文章是关于使用Android原生库开发录制视频自带满帧文字水印。环境要求Android7.0以上AndroidStudio,官方开发者官网视频录制功能参考开源库PictureSelector的camerax库//用到的Google集成摄像头库constvalcamerax="1.4.2"constvalappcompat="1.2.0
- h5添加购物车动画(贝塞尔曲线)
路光.
动画
思路:获取动画移动到的终点位置,获取动画的起点位置,创建标签,删除标签,动画播放完成创建的domJS代码://返回元素的大小的及其相对于视口的位置获取动画下落的终点位置varcarRect=document.querySelector('.footer-car').getBoundingClientRect();this.jumpTarget={x:carRect.left+carRect.wid
- 微信小程序canvas实现抽奖动画
小糊涂加油
微信小程序小程序
本来想用setdata做抽奖动画的,但是存在合并更新以及性能问题,遂采用canvas的形式。参考了一篇blog,然后加了些抽奖逻辑的改动import{getRandomInt}from"../../utils/util";//components/names/names.tsComponent({lifetimes:{attached(){this.createSelectorQuery().se
- 【高频考点精讲】前端工程师必会的10种DOM操作优化技巧
全栈老李技术面试
前端高频考点精讲前端javascripthtmlcss面试题reactvue
前端工程师必会的10种DOM操作优化技巧(附真实代码示例)作者:全栈老李更新时间:2025年6月适合人群:前端初学者、进阶开发者版权:本文由全栈老李原创,转载请注明出处。最近在给团队做CodeReview时发现,很多同学对DOM操作的性能优化理解还停留在"少用querySelector"这种基础层面。今天全栈老李就给大家系统梳理下那些真正能提升页面性能的DOM操作技巧,都是我在大型项目中验证过
- React状态管理——RTK(Redux Toolkit)
安心不心安
React状态管理react.js前端前端框架
目录一、介绍二、安装三、目录结构设计四、案例store子模块搭建(store/counterStore.js)store主模块搭建(store/index.js)连接redux和react(index.js)react组件使用useSelector+useDispatch获取和修改状态(App.js)一、介绍二、安装//1.使用CRA快速创建React项目npxcreate-react-appre
- 从 v-model 到 defineModel:Vue3 正在悄悄改变开发习惯
代码里的小猫咪
vue前端vue.jsjavascriptv-modeldefineModeldefinePropsdefineEmits
一、组件化与双向绑定的演变背景1.早期前端:手写DOM与状态管理痛点在纯JavaScript时代,我们尝尝直接操作DOM、管理全局变量。随着应用复杂度提升,出现了以下问题:状态混乱:UI状态(表单值、控件可见性)散落在各个回调里,难以维护。模块化隔离不足:不同UI模块互相干扰,数据污染严重。手动同步:每次数据改变,都要手动querySelector→更新属性→补齐事件监听器,十分臃肿。2.MVVM
- 尚硅谷VUE项目-前端项目问题总结05【api-vuex-组件通信-面包屑-排序】
万物可爱_85
vue.jsjavascript前端
尚硅谷VUE项目-前端项目问题总结05search模块开发1.静态页面2.api3.vuex4.search产品模块和search子组件SearchSelector模块5面包屑【含组件兄弟通信$bus,子父自定义事件】6.排序search模块开发1.静态页面2.api//获取search数据/api/listPOST需要传递多个参数//当前接口,给服务器传递一个默认参数,至少是一个空对象expor
- 让没有小窗播放的视频网站的视频小窗播放
万能的小裴同学
前端javascript
让没有小窗播放的视频网站的视频小窗播放//视频小窗播放控制台脚本//将此代码复制到浏览器控制台运行//运行后,页面中的视频将添加小窗播放功能(function(){//获取页面中的所有video元素constvideos=document.querySelectorAll('video');if(videos.length===0){console.log('页面中没有找到video元素');re
- Kafka数据写入流程源码深度剖析(Broker篇)
Edingbrugh.南空
kafkakafka分布式
在Kafka数据写入流程中,Broker端负责接收客户端发送的消息,并将其持久化存储,是整个流程的关键环节。本文将深入KafkaBroker的源码,详细解析消息接收、处理和存储的具体实现。一、网络请求接收与解析Broker通过Processor线程池接收来自客户端的网络请求,Processor线程基于JavaNIO的Selector实现非阻塞I/O,负责监听网络连接和读取数据。其核心处理逻辑如下:
- Vue3中 :deep() 与 :deep 用法区别解析
在Vue3的ScopedCSS中,:deep()用于穿透样式作用域(样式穿透),其括号的使用有明确区别:1.有括号::deep(selector)(推荐写法)css复制下载:deep(.child-class){color:red;}✅正确用法:将需要穿透的选择器放入括号内✅编译后生成类似[data-v-xxx].child-class的选择器✅Vue3.3+官方推荐写法(无括号写法已被标记为废弃
- 用友uap开发nc65按钮配置
qq_31968809
用友ncuap用友用友ncxmlnc65
用友uap开发nc65按钮配置1.在xml文件中配置按钮2.新建一个java类与按钮相对应publicclassSelectOrCancelActionextendsNCAction{privateAbstractAppModelmodel;privatestaticfinallongserialVersionUID=1993918902236291721L;publicSelectOrCance
- html网页设计(旅游网站)
伤心小熊.
html旅游前端html5cssjquery
html部分获取时间hhhvardiv=document.querySelector('div');varmybtn=document.querySelector('button');varh=newDate().getHours();functionmyTime(){varh=newDate().getHours();vars="";if(hTRAVELDESTINATION当季热门旅行目的地旅
- 前端基础知识ES6系列 - 03(数组新增了哪些扩展)
前端小白从0开始
前端es6ecmascriptjavascripthtml5
一、扩展运算符的应用ES6通过扩展元素符...,好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列console.log(...[1,2,3])//123console.log(1,...[2,3,4],5)//12345[...document.querySelectorAll('div')]//[,,]主要用于函数调用的时候,将一个数组变为参数序列functionpush(array
- 软件测试之自动化测试常用函数
小何好运暴富开心幸福
可用性测试功能测试单元测试
软件测试之自动化测试常用函数自动化测试常用函数1.元素定位1.1cssSelector1.2xpath2.操作测试对象2.1点击/提交对象2.2模拟按键输入2.3清除文本内容2.4获取文本信息2.5断言2.6获取属性值2.7获取页面标题2.8获取页面链接3窗口3.1切换窗口3.2窗口设置大小3.3关闭窗口3.4屏幕截图4等待4.1强制等待4.2隐式等待4.3显示等待5浏览器导航5.1打开网站5.2
- 含eachars的html转pdf
张毫洁
htmlpdf前端
importhtml2canvasfrom‘html2canvas’;import{jsPDF}from‘jspdf’;printDivAsPdf(){console.log(this.baogao.nativeElement);leta=this.baogao.nativeElementasHTMLElement;constbjsElement=a.querySelector('#bjs')as
- Bug问题
帅帅哥的兜兜
bug
一、list页面importReact,{useEffect,useState}from'react';import{shallowEqual,useHistory,useSelector}from'dva';import{Button,message}from'choerodon-ui/pro';importformatterCollectionsfrom'hzero-front/lib/uti
- 使用eCharts绘制中国地图
夏日米米茶
echarts前端javascript
eCharts官网:https://echarts.apache.org/zh/index.html1.首先新建一个html页面,并引入echartseChartsMap2.接着准备地图数据文件从DataV获取GeoJson格式的地图数据:https://datav.aliyun.com/portal/school/atlas/area_selector如果你使用的是.json格式的文件,那么可以
- QuaggaJS 配置参数详解
IT 老王
服务器javalinuxjavascriptQuaggaJS
QuaggaJS配置参数详解QuaggaJS的配置参数非常灵活,可根据不同场景进行深度定制。以下是核心配置项的详细说明和使用示例:一、inputStream配置控制摄像头输入和视频流参数:inputStream:{name:"Live",//流名称(自定义)type:"LiveStream",//实时摄像头流target:document.querySelector('#interactive')
- 做前端五年的感受
前端
做了五年前端,真是一路从“摸石头过河”到现在的“手握利剑”啊。还记得刚开始的时候,写网页就是用最原始的JavaScript加上jQuery,那个时候感觉自己就是大神了——一行$(selector).hide()就能实现炫酷效果,页面动起来特别有成就感。可是,那种写法也蛮“粗糙”,代码一多就乱成一锅粥,维护起来特别费劲。后来慢慢接触到现代框架,先是Vue,再是React,感觉前端的世界突然宽广了很多
- easyexcel导出使用注解设置下拉选数据
maven依赖com.alibabaeasyexcel3.0.5获取下拉数据接口类,下拉数据需实现此接口类publicinterfaceExcelSelectorService{/***获取下拉数据**@returnjava.lang.String[]*@authorSunLingDa*@date2022/9/2016:50*/String[]getSelectorData();/***根据字典k
- el-select 实现分页加载,切换也数滚回到顶部,自定义高度
WKK_
javascriptvue.js前端elementui
el-select实现分页加载,切换也数滚回到顶部,自定义高度1.html2.功能js1.切换回到顶部//添加重置滚动位置的逻辑nextTick(()=>{constdropdown=document.querySelector('.el-select-dropdown.el-scrollbar__wrap');if(dropdown){dropdown.scrollTop=0;}});2.搜索方
- mysql一主多从 k8s部署实际案例
搞不懂语言的程序员
k8s中间件mysqlkubernetes数据库
一、Kubernetes配置(MySQL主从集群)主库StatefulSet配置(master-mysql.yaml):apiVersion:apps/v1kind:StatefulSetmetadata:name:mysql-masterspec:serviceName:"mysql-master"replicas:1selector:matchLabels:app:mysql-masterte
- seleniumbase中常用方法说明
ChiangBar
web自动化pythonselenium自动化功能测试测试工具
self.open(url)#将浏览器窗口导航到URLself.type(selector,text)#在输入框输入文本.self.click(selector)#点击元素.self.click_link(link_text)#点击超链接中的文本.self.go_back()#浏览器回退.self.select_option_by_text(dropdown_selector,option)#通过
- 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