自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(149)
  • 资源 (10)
  • 收藏
  • 关注

原创 HashMap进行put操作会引起死循环?

HashMap进行put操作会引起死循环?最近在磕《java并发编程艺术》,在看到第六章的时候出现了下面这段我不是很理解的东西,如下《java并发编程艺术》截取为什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。1. 线程不安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%

2020-07-03 13:22:33 6020 4

原创 《JAVA并发编程的艺术》Java中的锁

《JAVA并发编程的艺术》Java中的锁文章目录《JAVA并发编程的艺术》Java中的锁Lock接口代码清单5-1 LockUseCase.java表5-1 Lock接口提供的synchronized关键字不具备的主要特性表5-2 Lock的API队列同步器5.2.1 队列同步器的接口与示例表5-3 同步器可重写的方法表5-4 同步器提供的模板方法代码清单5-2 Mutex.java队列同步器的实现分析1. 同步队列表5-5 节点的属性类型与名称以及描述2. 独占式同步状态获取与释放代码清单5-3 同步器

2020-07-02 19:41:31 1301

原创 JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤

JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤文章目录JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤定义优点:缺点:应用敏感词检测开始构建敏感词Trie树时间复杂度敏感词去重敏感词检测去特殊字符方法结束标识符JAVA实现完整代码初始化词库定义在计算机科学中,trie树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而

2020-06-19 19:25:04 3033 2

原创 变治法

变治法文章目录变治法变治法的基本思想预排序Gauss消去法一般的线性方程组是指如下形式的方程组LU分解法计算矩阵的逆平衡查找树AVL树的平衡旋转右单旋转先左后右旋转2-3树2-3树的搜索与插入堆和堆排序堆的构建与堆结点的插入堆结点的删除堆排序Horner法则计算n次多项式的值的算法。二进制幂问题化简求最小公倍数lcm(m,n)计算图中的路径数优化问题的化简线性规划简化为图论问题变治法的基本思想首先是”变“, 将问题的实例变得更容易求解;然后是”治“,对问题的实例进行求解。变治法有三个变形:实例

2020-06-16 21:04:36 2558

原创 算法学习之动态规划(Dynamic programming)

动态规划(Dynamic programming)文章目录动态规划(Dynamic programming)基本思路与分治法比较斐波那契计算二项式系数时间效率分析Warshall算法定义Floyd算法最优二叉查找树二叉查找树(Binary Search Tree)背包问题记忆功能基本思路解决若干个(交叠)子问题将子问题的解用表格记录下来,避免子问题的重复计算上述表格的最终状态即为(包含)最终解与分治法比较都将问题划分为若干个子问题分治法中各子问题相互独立,而动态规划中各子问题允许相互交

2020-06-16 15:01:23 1327

原创 ArrayList源码研读

ArrayList源码研读文章目录ArrayList源码研读属性构造器public ArrayList (int initialCapacity)public ArrayList ()public ArrayList (Collection<? extends E> c)容量削减public void trimToSize ()扩容ensureCapacity (int minCapacity)calculateCapacity (Object[] elementData, int minCa

2020-06-04 23:22:02 1131

原创 剑指offer之java/C++实现(完整版)

GitHub地址: https://github.com/krishhh5/offer/tree/master/h

2020-04-10 11:58:28 1265

原创 linux管道符重定向环境变量

管道符、重定向与环境变量输入输出重定向输入重定向是指把文件导入到命令中而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中输入。标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。输入重定向中用到的符号及其...

2019-11-18 01:39:01 1338

原创 springmvc响应数据和结果视图,文件上传,异常处理,拦截器

响应数据和结果视图字符串controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。//指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB-INF/pages/success.jsp@RequestMapping("/testReturnString")public String testReturnString() {System...

2019-09-28 23:33:34 1110

原创 springmvc文件上传,异常处理和拦截器

文件上传步骤导入文件上传jar包编写文件上传的jsp页面编写文件上传的controller异常处理思路:逐级往上抛,最终由DispatcherServlet找异常处理器进行异常处理自定义异常类继承Exception定义serialVersionUIDprivate static final long serialVersionUID = 405594514712801630...

2019-08-19 15:24:23 1164

转载 OAuth2.0机制

OAuth2.0机制介绍OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。令牌与密码令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。

2020-11-25 20:05:49 318

原创 2020网易有道实习一面

网易有道一面时长:一个小时自我介绍项目介绍一下项目maven依赖循环是如何解决的filter异常捕获不到是什么情况,怎么解决的说一下Shiro幂等性是怎么设计的trie实现过程trie树和hashmap区别说一下跨域说一下OAuth2.0机制JWTJWT与传统sessionAOP原理代理模式原理SpringBoot是什么做题:两个链表求和反问...

2020-11-25 17:41:24 317

原创 虚拟机类加载机制

类加载的时机一个类的生命周期包括:加载(Loading)、验证(Werification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中验证、准备、解析这三个阶段称为连接(linking)。加载、验证、准备、初始化、卸载这五个阶段顺序是确定的,但类型的加载过程必须按照这种顺序按部就班地开始(不是进行也不是完成),而解析就不一定:它在某种情况下可以在初始化之后再开始,这是为了支持java语

2020-11-08 15:33:13 490

原创 jps,jstat,jinfo,jstack,jmap,jhat

基础故障处理工具jps,jstat,jinfo,jstack,jmap,jhatjps:虚拟机进程状况工具JDK的很多小工具的名字都参考了UNIX命令的命名方式,jps(JVM Process Status Tool)是其中的典型。除了名字像UNIX的ps命令之外,它的功能也和ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)

2020-11-06 16:37:04 573

原创 设计模式之状态模式

状态模式实例APP抽奖活动问题请编写程序完成APP抽奖活动具体要求如下:假如每参加一次这个活动要扣除用户50积分,中奖概率是10%。奖品数量固定,抽完就不能再抽了。活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完。基本介绍状态模式(State Paterrn):它主要用来解决对象再多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应,状态之间跨域相互转换。当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类原理图说明Context

2020-10-26 23:39:15 91

原创 设计模式之迭代器模式

迭代器模式需求:编写程序展示一个学校院系结构传统设计问题将学院看作学校的子类,系看作学院的子类,这样实际上是站在组织大小来进行分层次的这样不能很好实现遍历的操作基本介绍迭代器模式是常用的设计模式,属于行为性设计模式。如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式。原理类图Iterator:迭代器接口,是系统提供,含有hasNext,n

2020-10-25 19:58:05 98

原创 设计模式之模板方法模式

模板方法模式豆浆制作问题编写制作豆浆的程序,说明如下制作豆浆的流程:选材-》浸泡-》放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种不同口味的豆浆都是一样的。基本介绍模板方法模式(Template Method Pattern)又叫模板模式,在一个抽象类公开定义了执行它的方法的模板。它的子类可以按照需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说,模板方式模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得

2020-10-25 14:31:55 128

原创 设计模式之代理模式

代理模式基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过dialing对象访问目标对象。这样做的目的是:可以在目标对象实现的基础上增加额外的功能操作,即扩展目标对象的功能。被代理对象可以是远程对象、创建开销大的对象或需要安全控制的对象。代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态地创建对象,而不需要实现接口,他是属于动态代理的范畴)。代理模式示意图静态代理基本介绍静态代理在使用时,需要定义接口或者父类

2020-10-23 23:08:00 86

原创 设计模式之享元模式

享元模式例子:展示网站项目给客户A做一个产品展示网站,要求:有客户要求以新闻的形式发布有客户要求以博客的形式发布有客户希望以微信公众号的形式发布传统方案解决网站展示项目直接复制粘贴一份,然后根据客户不同的要求,进行定制修改给每个网站租用一个空间方案设计如图传统方案分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同的网站的实例对象很多,造成服务器浪费解决思路:整合到一个网站中,共享相关的代码和数据,对于硬盘,内存,CPU,数据库

2020-10-22 15:09:23 87

原创 设计模式之组合模式

组合模式例子:学校院系展示编写程序展示学校院系结构:要展示学校的院系组成,一个学校有多个学院,一个学院有多个系。传统方案传统方案存在的问题将学院看作是学校的子类,系是学院的子类,这样实际上是站在组织大小的角度分层次的实际上我们的要求是:在一个页面展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案不能很好实现管理的操作,比如对学院、系的添加。解决方案:把学校、院、系都看作是组织结构,他们之间没有继承关系,而是一个树形的结构,可以更好实现管理操作。=》组合模式。组合模

2020-10-21 13:52:06 118

原创 设计模式之装饰者模式

装饰者模式星巴克咖啡订单项目咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、shortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性。使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡 + 调料组合传统方案[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eDg2a8mY-1603253622697)(E:\CodingLea

2020-10-21 12:14:08 110

原创 设计模式之 桥接模式

桥接模式实例手机操作问题:现在对手机类型的不同品牌实现操作编程(比如:开机,关机,上网,打电话等)。如图传统方法解决分析扩展性问题(类操作):如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机的品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码的围护成本。解决方案-使用桥接模式。基本介绍桥接(Bridge)模式是指,将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。

2020-10-16 16:02:08 104

原创 设计模式之适配器模式

适配器设计模式生活中适配器的例子某些手机的耳机口是type-c的接口,但大部分耳机都是圆孔的插头。那么我们可以买一个转接口(适配器)就可以在type-c的接口上使用圆孔耳机啦基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能在一起工作的两个类可以协调工作。其别名包装器(Wrapper)适配器模式属于结构型模式主要分三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式将一个类的接口

2020-10-15 22:21:00 124

原创 设计模式之建造者模式

建造者模式盖房问题需要建造房子,这一过程为打桩,砌墙,封顶房子有各种各样的,比如普通房、高楼、别墅,各种房子的过程虽然一样,但是要求不一样传统方法解决盖房要求思路分析(图解)代码public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roof

2020-10-15 15:16:00 99

原创 设计模式之原型模式

原型模式问题:克隆羊问题(创建多只一模一样的羊)1. 传统方法public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { super(); this.name = name; this.age = age; this.color = color; } public Stri

2020-10-14 13:42:47 133

原创 工厂模式之简单工厂模式、方法工厂模式、抽象工厂模式

简单工厂模式传统方式/** * @Author: Antares * @Date: 2020/2/22 14:15 */public abstract class Pizza { protected String name; /** * 原材料准备 */ public abstract void prepare(); public void bake() { System.out.println(name + "bakin

2020-10-13 19:28:54 86

原创 单例模式的八种实现方式

单例模式饿汉式(静态常量)/** * @Author: Antares * @Date: 2020/2/21 22:22 */public class Single01 { public static void main(String[] args) { SingleTon instance01 = SingleTon.getInstance(); SingleTon instance02 = SingleTon.getInstance();

2020-10-13 19:22:37 144 2

原创 Java内存区域与内存溢出异常

Java内存区域与内存溢出异常文章目录Java内存区域与内存溢出异常运行时数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存HotSpot虚拟机对象探秘对象的创建对象的内存布局对象的访问定位实战:OutOfMemoryError异常Java堆溢出虚拟机栈和本地方法栈溢出方法区和运行时常量池溢出本机直接内存溢出运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包

2020-09-24 14:39:59 362

原创 MySQL中查看 INFORMATION_SCHEMA TABLES 信息

MySQL中查看 INFORMATION_SCHEMA TABLES 信息用处查看表(临时表除外)的相关信息语法SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database' AND TABLE_NAME = 'table';输出及其解释TABLE_CATALOG表所属的目录的名称. 总是 def。TABLE_SCHEMA表所属的数据库名。TABLE_NAME

2020-08-15 16:29:30 827 1

原创 MySQL中的 SHOW TABLE STATUS 的使用

MySQL中的 SHOW TABLE STATUS 的使用说明该SQL输出提供了很多关于每个非临时表的信息。您还可以使用mysqlshow --status db_name命令获取此列表。如出现类似子句,指示要匹配的表名。可以使用where子句使用更一般的条件来选择行,此语句还显示有关视图的信息。语法格式SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]-- 参数:[FROM db_name]

2020-08-15 16:16:55 1153 1

原创 Java String intern() 方法

intern() 方法返回字符串对象的规范化表示形式。它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。该方法返回一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。例子public class Test { public static void main(String args[]) { String Str1 = new String("abc")

2020-08-13 23:13:49 133

原创 为什么MySQL不允许对同一张表同时进行查询和更新?

为什么MySQL不允许对同一张表同时进行查询和更新?问题下面这个看起来没有问题的SQL语句却运行不了UPDATE `tb1` AS outer_tb1 SET cnt = ( SELECT count(*) FROM `tb1` AS inner_tb1 WHERE inner_tb1.type = outer_tb1.type);[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VsjqOqCe-1596815087572)(E:\CodingLearn

2020-08-07 23:45:13 1368 5

转载 MySQL中的<=>

和=号的相同点像常规的=运算符一样,两个值进行比较,结果是0(不等于)或1(相等);换句话说:’A’<=>’B’得0和’a’<=>’a‘得1。和=号的不同点和=运算符不同的是,NULL的值是没有任何意义的。所以=号运算符不能把NULL作为有效的结果。所以:请使用<=>,‘a’ <=> NULL 得0 NULL<=> NULL 得出 1。和=运算符正相反,=号运算符规则是 ‘a’=NULL 结果是NULL 甚至NULL = N..

2020-08-06 14:24:02 197

原创 Leetcode两数之和Java和Python实现

文章目录题目: 两数之和解题思路代码题目: 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。链接:两数之和解题思路用空间来换取时间如果不借助空间的话,只能通过双重循环来解决这种方法的时间复杂度是O(n^2)利用HashMap来存储已经遍历过的num,因为题目要求返回数组下标所以map存储的结构形式为: nums[i]为键,i为值在遍历的

2020-08-05 23:26:03 146 1

原创 schema和数据类型优化之选择优化的数据类型

schema和数据类型优化之选择优化的数据类型文章目录schema和数据类型优化之选择优化的数据类型**更小的通常更好**简单就好尽量避免null选择合适的数据类型整数类型【[参考](https://www.cnblogs.com/-xlp/p/8617760.html)】整数(whole number)实数(real number)字符串类型VARCHAR和CHAR**VARCHAR:****合适的情况:****CHAR:****适合的情况:**blob和text磁盘临时表和文件排序使用enum代替字符

2020-08-05 16:50:43 191 1

原创 @RequestBody参数接受为null,居然是属性命名的问题

@RequestBody接收参数为null,居然是属性命名的问题问题有一个接口它接收到的参数都显示为null,我检查了属性名,都是一模一样controller代码@PostMapping("/test")public MeasuringPoint saveTest(@RequestBody MeasuringPoint measuringPoint){ System.out.println (measuringPoint); return measuringPoint;}实体

2020-08-01 14:47:09 2366 1

原创 Java 8 新特性之 Stream

Java 8 新特性之 Stream文章目录Java 8 新特性之 Stream什么是 Stream?Stream的操作三个步骤创建通过Collection系列集合提供的stream()或parallelStream()通过Arrays中的静态方法stream()获取数组流通过Stream类中的静态方法of()通过Stream的iterate()和generate()创建无限流中间操作筛选与切片映射排序终止操作查找 / 匹配归约 / 收集Java 8 API添加了一个新的抽象称为流Stream,可以让你

2020-07-19 18:21:32 174

原创 Java8新特性之方法引用和构造器引用

Java8新特性之方法引用和构造器引用方法引用若 Lambda 表达式体中的内容已有方法实现,则我们可以使用“方法引用”语法格式:对象 :: 实例方法@Testpublic void test01(){ PrintStream ps = System.out; Consumer<String> con1 = (s) -> ps.println(s); con1.accept("aaa"); Consumer<String> con2

2020-07-19 15:05:26 124

原创 Java8新特性之函数式接口

Java8内置函数式接口Consumer< T > :消费者接口@Testpublic void test01(){ //Consumer Consumer<Integer> consumer = (x) -> System.out.println("消费" + x); //test consumer.accept(1000);}Supplier< T > : 供给型接口 @Test public void

2020-07-19 14:41:28 122 1

原创 Java8新特性之Lambda

Java8新特性之Lambda基础语法-> 箭头操作符左侧是lambda表达式的参数列表,右侧是lambda表达式中所需的功能,即lambda体语法格式一:无参数,无返回值@Test public void test02(){ Runnable runnable = () -> { System.out.println("Hello Lambda"); }; }语法格式二:有一个参数,无返回值@Testpubl

2020-07-19 14:08:36 104

AOF 持久化.pdf

持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据

2020-02-21

RDB 持久化.pdf

持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据

2020-02-21

redis服务器配置.pdf

Redis 服务器命令主要是用于管理 redis 服务。 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf(Windows 名为 redis.windows.conf)。 你可以通过 CONFIG 命令查看或设置配置项

2020-02-21

redis事务.pdf

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

2020-02-21

Lua 脚本.pdf

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

2020-02-21

jsp servlet实现 学生管理系统.zip

mysql jsp servlet实现 学生管理系统 学完jsp,servlet之后写的一个简单的学生管理系统

2019-07-24

数据结构相关的学习资料.rar

数据结构的相关的图,排序,树,查找,线性表,队列,栈等等知识都有

2019-07-24

C语言进阶 重点、难点与疑点解析.牟海军.pdf

该书适合学完c语言基础后使用,里面都是c语言进阶知识,个人认为这是一本很好的c语言进阶书 如果c语言还没有开始学习请先看完c primer plus再看这本书

2019-07-24

cinemaPro.rar

学完javase后可以自己做一些模拟的购票系统或管理系统 这是我学完之后用了两天时间写的比较简单的一个购票系统,可供大家学习参考 如果已经学了html的同学,可以选择html改造界面

2019-07-24

JSP&Servlet;.rar

学完Javase的同学可以开始学jsp&servlet;啦,推荐一本书叫<<jsp&servlet;学习笔记>> 但是里面有很多的源码,如果懒得自己敲的话可以在这下载

2019-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除