自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(166)
  • 收藏
  • 关注

原创 【烈日炎炎战后端の58万词の索引】

总字数:58万字包括:Java语言(20万字);计算机专业课(13.8万);开发工具(11万字);编程总结(13.3万)一. Java语言【烈日炎炎战后端】JAVA基础(3.4万字)【烈日炎炎战后端】JAVA集合(1.8万字)【烈日炎炎战后端】JAVA虚拟机(3.6万字)【烈日炎炎战后端】JAVA多线程(11.2万字)二. 计算机专业课【烈日炎炎战后端】 数据结构(0.7万字)【烈日炎炎战后端】设计模式(1.1万字)【烈日炎炎战后端】计算机网络(4.2万字)【烈日炎炎战后端】操作系

2020-08-06 10:46:47 796 1

原创 【烈日炎炎战后端】编程题总结(13.3万字)

这里写目录标题专题总结【代码规范】【树】<序>1 [二叉树的前、中、后序遍历(递归) ](https://leetcode-cn.com/problems/binary-tree-inorder-traversal)2 [二叉树的前、中、后序遍历(非递归) ](https://leetcode-cn.com/problems/binary-tree-inorder-traversal)3 二叉树的层次遍历(BFS)4 [**合并二叉树** ](https://leetcode-cn.

2020-08-06 10:18:47 941

原创 【烈日炎炎战后端】Nginx(0.3万字)

Nginx1、什么是Nginx2、为什么要用Nginx3、为什么Nginx性能这么高4、Nginx怎么处理请求的5、什么是正向代理和反向代理6、使用“反向代理服务器的优点是什么?7、Nginx的优缺点8、如何用Nginx解决前端跨域问题?9、限流怎么做的,算法是什么,(限制请求速度)10、为什么要做动静分离?11、怎么做的动静分离12、Nginx负载均衡的算法怎么实现的?策略有哪些?1、什么是NginxNginx是一个高性能的反向代理服务器,他是一个非常高效的反向代理、负载平衡,他可以处理2-3万并发连

2020-08-06 10:12:25 442

原创 【烈日炎炎战后端】Elecsticsearch(1.5万字)

Elecsticsearch1. Elecsticsearch介绍2. Elecsticsearch核心概念3. Elecsticsearch中的倒排索引4. Elasticsearch分布式搜索引擎架构图5. Elasticsearch节点自动发现机制6. Elasticsearch搜索数据过程7. Elasticsearch写数据的过程8. Elasticsearch读数据过程9. Elasticsearch文档的索引更新和删除10. Elasticsearch如果保证在并发情况下读写一致?11. El

2020-08-06 10:08:43 782

原创 【烈日炎炎战后端】Zookeeper(0.5万字)

Zookeeper1、谈下你对 Zookeeper 的认识?2、Zookeeper 都有哪些功能?3、谈下你对 ZAB 协议的了解?4、Zookeeper 怎么保证主从节点的状态同步?5、Zookeeper 有几种部署模式?6、说一下 Zookeeper 的通知机制?7、集群中为什么要有主节点?8、集群中有 3 台服务器,其中一个节点宕机,这个时候 Zookeeper 还可以使用吗?9、说一下两阶段提交和三阶段提交的过程?分别有什么问题?11. 说下四种类型的数据节点 Znode?12、Zookeeper

2020-08-06 10:05:29 380

原创 【烈日炎炎战后端 】MyBatis(0.4万字)

MyBatis1. 谈谈你对 MyBatis 的理解?2. MyBaits 的优缺点有哪些?3. MyBatis 与 Hibernate 有哪些不同?4、MyBatis 中 #{} 和 ${}的区别是什么?5、MyBatis 是如何进行分页的?分页插件的原理是什么?6、MyBatis 有几种分页方式?7、MyBatis 逻辑分页和物理分页的区别是什么?8、MyBatis 是否支持延迟加载?如果支持,它的实现原理是什么?9、说一下 MyBatis 的一级缓存和二级缓存?10、Mybatis 有哪些执行器(Ex

2020-08-06 10:03:46 235

原创 【烈日炎炎战后端】Git(0.1万字)

Git1. Git是什么2. Git命令行入门3. Git常用命令1. Git是什么Git它是一个免费开源的分布式版本控制系统,你可以使用Git提高我们处理一些大大小小的项目所有文件,可以说是提高团队开发效率神器.2. Git命令行入门简易的命令行入门教程:Git 全局设置:git config --global user.name "徐明晓"git config --global user.email "1206512593@qq.com"创建 git 仓库:mkdir Code-

2020-08-06 10:01:52 230

原创 【烈日炎炎战后端】消息队列(1.0万字)

消息队列1. 消息队列的优点有哪些?2. 消息队列的缺点有哪些?3. 如何保证消息的有序性?4. 如何保证消息的可靠性传输?5. RabbitMQ如何实现消息确认机制?6. 如何保证消息队列的高可用?7. RabbitMQ/ActiveMQ/RocketMQ/Kafka对比8. RabbitMQ/ActiveMQ/RocketMQ/Kafka如何选择1. 消息队列的优点有哪些?消息队列的主要作用是:解耦、异步、削峰.解耦:**消费者和生产者互不影响,降低他们之间的耦合度.**A 系统通过接口调

2020-08-06 10:00:49 437

转载 【烈日炎炎战后端】Spring(2.1万字)

Spring1. 讲下Spring框架2. Spring与SpringMVC的区别3. Spring与SpringBoot的关系3. SpringBoot优势4. Spring 、Spring Boot 和 Spring Cloud 的关系4. SpringBoot常用注解5. Spring IOC和AOP6 Bean生命周期7. Spring事务及事务传播8. Spring中的循环依赖1. 讲下Spring框架Spring框架,可以管理web层,业务层,Dao层,持久层,该Spring可以配置各个层

2020-08-06 09:57:27 334

原创 【烈日炎炎战后端】SpringMVC(0.5万字)

SpringMVC1、谈谈你对 MVC 模式的理解?2、SpringMVC 的工作原理/执行流程?3、SpringMVC 的核心组件有哪些?4、SpringMVC 常用的注解有哪些?5、@RequestMapping 的作用是什么?6、如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?7、SpringMVC 的控制器是不是单例模式,如果是会有什么问题,怎么解决?8、SpringMVC 怎么样设定重定向和转发的?9、SpringMVC 里面拦截器是怎么写的?10、SpringMVC 和 Strut

2020-08-06 09:48:09 292

原创 【烈日炎炎战后端】Linux(0.3万字)

Linux常用命令英文全称(辅助理解用): link.1. Linux基础命令(1) 首先,在进入linux系统后.我们常常需要知道系统只有哪些文件,这个时候可以使用显示列表命令(ls).[root@localhost ~]# ls //显示列表[root@localhost ~]# ls -l //显示长列表(2) 在对目录进行操作时.我们可以选择创建新目录(mkdir),切换目录(cd),复制文件或目录(cp),删除文件或目录(rm).[root@localhost ~]

2020-08-06 09:40:30 274

原创 【烈日炎炎战后端】Redis(6.1万字)

Redis1. Redis是什么?[1] 什么是远程字典服务器?[2] 为什么redis是高性能的?[3] 分布式的含义?[4] NoSQL的含义2. Redis有哪五种不同类型的值?应用场景有哪些?[1] String(字符串)[2] Hash(哈希)[3] List(列表)[4] Set(集合)[5] zset (sorted set:有序集合)3. 使用redis可能出现的问题[1] 缓存雪崩[2] 缓存击穿[3] 缓存穿透[4] 三种问题区别记忆方法[5] 数据库和缓存的双写一致性问题5. Redi

2020-08-06 09:33:26 1753

原创 【烈日炎炎战后端】MySQL编程(3.6万字)

这里写目录标题1.模式定义与删除1.1 定义模式1.2 模式删除2. 基本表操作2.1 定义基本表2.2 修改基本表2.3 删除基本表2.4索引的建立与删除3.数据查询3.1 单表查询:仅涉及一个表的查询3.2 连接查询:涉及两个表以上的查询3.3 嵌套查询3.4 数据更新4.视图5. SQL连接查询6. 分页查询【MySQL命令脑图】【MySQL学习日志】MySQL练习题1. 50道练习题目2.答案3. mysql中如何查看sql语句是否用到索引4.mysql查询什么时候用on什么时候用where?5.o

2020-08-06 09:18:09 1029

原创 【烈日炎炎战后端】MySQL理论(2.8万字)

MySQL理论1. 数据库三大范式2. char 和 varchar 的区别?3. Mysql的存储引擎以及区别4. 一条SQL查询是如何执行的?5. 什么是回表6. MySQL是如何解决幻读的7. 主从复制原理8.mysql日志中redo和undo日志概念以及应用【MySQL索引】[1] 什么是MySQL索引?[2] B+树相对于B-树的优势?[3] MySQL索引实现[4] 聚簇索引(非聚簇索引)[6] 最左前缀原则[7] 联合索引[8] 覆盖索引[9] 什么情况下索引会失效?[10] 什么情况下不建议

2020-08-06 09:15:11 718

原创 【烈日炎炎战后端】 数据结构(0.7万字)

数据结构1. B-树和B+树2. 红黑树3. 跳表4. 排序5. 哈希冲突解决方法6. dfs和bfs1. B-树和B+树图片来源: link.一个m阶的B-树和B+的区别,具有如下几个特征: 关键词 B-树 B+树 备注 最大分支,最小分支

2020-08-06 09:01:52 465

原创 【烈日炎炎战后端】设计模式(1.1万字)

设计模式1. 你知道那些常用的设计模式?2. 设计模式的六大原则?3. 如何理解设计模式的六大原则?4. 设计模式的分类5. 请手写一下单例模式?1. 你知道那些常用的设计模式?1. 单例模式:单例模式保证系统内存中该类只有一个对象。优势:可以防止频繁的创建和销毁对象造成的资源浪费,以此来提高系统性能。实现方式:懒汉模式创建和饿汉模式创建。应用场景:我们JDK中,java.lang.Runtime就是百科全书的单例模式(饿汉式),spring里面就是用了单例模式2.工厂模式:将实例化对象的代

2020-08-06 08:55:44 375

原创 【烈日炎炎战后端】操作系统(1.1万字)

操作系统1. 讲一下并发和并行?2. 同步、异步、阻塞、非阻塞3. BIO,NIO,AIO,多路复用IO?4. 讲一下线程和进程的区别和联系?4. 讲一下线程状态并且解释一下?5. 讲一下进程间通讯方式?6. 进程的调度算法有哪些?7. 线程同步的四种方式[<死锁专题>]1. 什么是死锁?2. 死锁产生的必要条件?3. 解决死锁的基本方法?1. 讲一下并发和并行?并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间线内间隔发生:单核 cpu 下,线程实际还是

2020-08-06 08:46:58 702

原创 【烈日炎炎战后端】计算机网络(4.2万字)

计算机网络(42068字)2. 输入url(网址)之后到显示网页的过程?3. 什么是沾包?如何处理?【< TCP专题之三次握手四次挥手>】[1] TCP报文的结构[2] 解释一下TCP三次握手四次挥手[3] 为什么是三次握手,可以是两次吗?[4] 为什么断开连接需要四次挥手?[5] 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?【TCP专题】[1] 讲一下TCP/IP协议?[2] 讲一下TCP和UDP协议的区别(5条)?[3] TCP协议是如何保证可靠传输的?

2020-08-05 12:27:15 1129 2

原创 【烈日炎炎战后端】JAVA多线程(11.2万字)

【8月后端】JAVA多线程(13000字)1. 多线程环境下的线程安全体现在哪些方面?关于原子性,你应该注意的地方:2. 创建线程的方式及其区别?3. 说一下从Java API层面上的6种线程状态4 final原理4 ThreadLocal有了解吗?5. synchronized 和Lock区别1. 在实现上2. 在使用上3. 在功能上6. as-if-serial与happens-before【同步的方式】[1] synchronized同步方法[2 synchronized同步代码块[3] 使用vola

2020-08-05 11:57:42 1769 1

原创 【烈日炎炎战后端】JAVA虚拟机(3.6万字)

JVM1. 说一下 JVM 的主要组成部分?2. 谈谈对运行时数据区的理解?3. 谈谈对内存泄漏的理解?4. JMM是什么?5. 为什么要学习Jvm?6. 什么是栈帧?7. Stop-The-World8. 元空间(Metaspace)【<类加载器专题>】[1] 什么是类加载器?[2] 类加载器的分类有?[3] 类加载器的职责有?[4] 什么是双亲委派机制?【JVM垃圾回收专题】[1] 垃圾回收的场所及原因?[2] 为什么学习GC和如何学习GC?[3] JVM如何判定一个对象是否应该被回

2020-08-05 10:46:19 1062

原创 【烈日炎炎战后端】JAVA集合(1.8万字)

JAVA集合(18186字)【HashMap问答】[1] HashMap是什么?[2] HashMap的底层是怎样的?[3] HashMap的树化及其链表化机制及其原因?[4] HashMap的扩容机制是怎样的?[5] 为什么HashMap初始容量是16?[6] 为什么HashMap加载因子(loadFactor)为0.75?[7] 为什么桶数组的长度是2^n[8] HashMap线程安全吗?为什么?[9] 关于HashMap的key值的数据类型不能为基础类型的原因?[10] 其他总结【String】

2020-08-05 10:28:22 783

原创 【烈日炎炎战后端】JAVA基础(3.4万字)

JAVA基础(34587 字)1. 如何理解面向对象?2. Java和C++的区别?3. Java面向对象的三大特性?4. Java中重载和重写5. Java 中的访问修饰符6. Java的8种基本类型与封装类?7. Java中“==”和equals的区别?8. 为什么重写equals一定要重写hashcode?9. Java中抽象类和接口的区别?10. final finally finalize 区别及用法?11. this和super的区别13 泛型14. 常用注解15. JDK1.8中有

2020-08-05 10:13:39 1594

原创 Spring事务及事务传播

Spring 并不直接支持事务,只有当数据库支持事务时,Spring 才支持事务。Spring中有声明式和编程式(淘汰)事务,声明式事务是基于Spring AOP方式实现的。所谓事务传播机制,也就是在事务在多个方法的调用中是如何传递的,是重新创建事务还是使用父方法的事务?父方法的回滚对子方法的事务是否有影响?这些都是可以通过事务传播机制来决定的。**声明式事务隔离级别:**较SQL标准的四种隔离级别多一个,为使用数据库默认的隔离级别(isolation_default)。声明式事务传播特性:传播特性是S

2020-08-06 09:55:52 192

原创 Bean生命周期

链接:https://www.zhihu.com/question/38597960/answer/77600561Bean 的生命周期如上图所示,Bean 的生命周期还是比较复杂的,下面来对上图每一个步骤做文字描述:Spring启动**,查找并加载需要被Spring管理的bean,进行Bean的实例化**Bean实例化后对将Bean的引入和值注入到Bean的属性中如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法**(实现B

2020-08-06 09:53:03 112

原创 Spring IOC和AOP

什么是Spring:  Spring是一个开源的,轻量级的IOC和AOP容器框架,简化了开发流程,方便了对其他框架的整合控制反转(Inversion Of Controll):  将相互依赖对象的创建和协调工作都交由IOC容器来完成,当某个对象需要其他协作对象时,由IOC通过依赖注入(DI, Dependency Injection)的方式提供协作对象,达到只需要关注业务本身逻辑的目的.IOC源码中的实现思路获取 Bean 的定义Spring 中有 AnnotationConfigAppli

2020-08-06 09:52:31 130

转载 SpringBoot常用注解

@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean.@Scope注解 作用域@Lazy(true) 表示延迟初始化@Service用于标注业务层组件@Controller用于标注控制层组件(如struts中的action)@Repository用于标注数据访问组件,即DAO组件@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注@Scope用于指定scope作用域的(用在类上)@P

2020-08-06 09:52:01 118

原创 Spring 、Spring Boot 和 Spring Cloud 的关系

已订正1.SpringSpring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spirng Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题.2. Spring BootSpring Boot 是在强大的 Spring 帝国生态基础上面发展而来,发明 Spring Boot 不是为了取代 Spring .

2020-08-06 09:51:29 233

原创 Spring与SpringBoot的关系

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,它的出现简化了使用 Spring 的难度.同时它集成了大量常用的第三方库配置,大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于 Java 的配置),开发者能够更加专注于业务逻辑.SpringBoot的优点包括可以独立运行,简化了配置,可以实现自动配置,无代码生成以及XML配置,并且可以进行应用监控....

2020-08-06 09:50:57 406

原创 Spring与SpringMVC的区别

Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring.简单点的话可以将SpringMVC类比于Struts.Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,spring mvc是其中一个开源项目....

2020-08-06 09:50:24 383

原创 讲下Spring框架

Spring框架,可以管理web层,业务层,Dao层,持久层,该Spring可以配置各个层的组件(bean),并且维护各个bean之间的关系.bean元素的作用是,当Spring的框架加载的时候,Spring就会自动创建一个Bean对象,并放入内存.Spring中的中一个重要概念是IOC(控制反转),它可以将将对象间的依赖关系交给Spring容器,使用配置文件来创建所依赖的对象,由主动创建对象改为了被动方式,实现解耦合....

2020-08-06 09:49:59 180

原创 SpringMVC 和 Struts2 的区别有哪些?

SpringMVC 的入口是一个 Servlet 即前端控制器(DispatchServlet),而 Struts2 入口是一个 filter 过虑器(StrutsPrepareAndExecuteFilter);SpringMVC 是基于方法开发(一个 url 对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),Struts2 是基于类开发,传递参数是通过类的属性,只能设计为多例;Struts2 采用值栈存储请求和响应的数据,通过 OGNL 存取数据;SpringM..

2020-08-06 09:46:19 147

原创 如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?

解决 POST 请求乱码问题:在 web.xml 中配置一个 CharacterEncodingFilter 过滤器,设置成 utf-8;GET 请求中文参数出现乱码解决方法有两个:(1)修改 tomcat 配置文件添加编码与工程编码一致,如下:<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>(2)对参数进..

2020-08-06 09:45:24 606

原创 @RequestMapping 的作用是什么?

RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.RequestMapping 注解有六个属性,下面我们把它分成三类进行说明.value、method:value:指定请求的实际地址,指定的地址可以是 URI Template 模式;method:指定请求的method类型, GET、POST、PUT、DELETE 等;consumes、produces:consumes:指定处理

2020-08-06 09:44:53 1805

原创 SpringMVC 常用的注解有哪些?

@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上.用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径;@RequestBody:注解实现接收 HTTP 请求的 json 数据,将 json 转换为 Java 对象;@ResponseBody:注解实现将 Controller 方法返回对象转化为 json 对象响应给客户....

2020-08-06 09:44:22 405

原创 SpringMVC 的核心组件有哪些?

1. 前端控制器 DispatcherServlet作用:Spring MVC 的入口函数.接收请求,响应结果,相当于转发器,中央处理器.有了 DispatcherServlet 减少了其它组件之间的耦合度.用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性.“耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量.耦合的强弱取.

2020-08-06 09:43:52 7071

原创 SpringMVC 的工作原理/执行流程?

简单来说:客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler -> HandlerAdapter 会根据 Handler 来调用真正的处理器来处理请求,并处理相应的业务逻辑 -> 处理器返回一个模型视图 ModelAndView -> 视图解析器进行解析 -> 返回一个视图对象 -> 前端控制器 DispatcherServlet 渲染数据(Model

2020-08-06 09:43:28 253

原创 谈谈你对 MVC 模式的理解?

MVC 是 Model — View — Controler 的简称,它是一种架构模式,它分离了表现与交互.它被分为三个核心部件:模型、视图、控制器.Model(模型):是程序的主体部分,主要包含业务数据和业务逻辑.在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据.View(视图):是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在 View 视图层输入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理.

2020-08-06 09:42:10 2266

原创 Redis哨兵(Sentinel)模式

链接:https://www.jianshu.com/p/06ab9daf921d主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。一、哨兵模式概述哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。这里的哨兵有两个作用通过发送命令,让Re.

2020-08-06 09:29:57 186

原创 Redis持久化方式

已订正1. Redis 提供了不同级别的持久化方式:RDB(Redis DataBase)持久化:Redis 可以通过创建快照来存储内存里面的数据在某个时间点上的副本到本地数据库中,如果系统,Redis或者硬件其中之一崩溃,那么Redis将丢失最近一次创建快照之后写入的所有数据.AOF(Append Only File)持久化:AOF持久化会将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化.它可以做到每秒一次的频率对AOF文件进行同步.不持久化:如果你只希望数据在服务器运行的时候.

2020-08-06 09:29:23 137

原创 多线程的 Redis

link相信redis6.0以前一直都是单线程,到了6的版本才加入了多线程.一、问题概述Redis 6.0 之后的版本抛弃了单线程模型这一设计,原本使用单线程运行的 Redis 也开始选择性使用多线程模型,乍一看Redis的作者这么牛,也逃不过“真香定律”,这个问题其实可以拆分,拆分为两个主要的问题:(1)为什么 Redis 一开始选择单线程模型(单线程的好处)?(2)为什么 Redis 在 6.0 之后加入了多线程(在某些情况下,单线程出现了缺点,多线程可以解决)?随着时间的推移,单线程出现

2020-08-06 09:28:55 477

空空如也

空空如也

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

TA关注的人

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