自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Xgx120413的专栏

一步一步往上走,创造属于自己的天空

  • 博客(100)
  • 资源 (33)
  • 收藏
  • 关注

原创 【高并发】- 不可不知道的RPC框架服务通信

前面章节讲解了高并发系统中相关指标、为什么要学习高并发设计思想、高并发系统中每个环节的流量处理等思想。本章节讲解服务通信,来帮助大家更好理解系统间通信过程

2023-01-31 23:04:39 568

原创 【高并发】- 分布式事务都不会?

本章主要对分布式事务进行梳理和讲解。可能在业务设计过程中,各微服务都采用了独立数据库,所以,这些微服务之间的数据共享有了更高的要求:要解决数据一致性的问题。

2023-01-31 23:02:21 528

原创 【高并发】- 生产级系统搭建 - 4

关于高并发系统中,当前比较热门的还是属于“秒杀”系统,前面章节在整理了“秒杀”系统的相关设计概念后,本章节,来讲解扣减库存相关的业务逻辑

2023-01-30 16:32:07 274

原创 【高并发】- 生产级系统搭建 - 3

本章讲解高并发系统动静分离方案设计、热点数据处理、管控等思想

2023-01-29 14:52:39 267

原创 【高并发】- 生产级系统搭建 - 2

本章讲解高并发系统中常见概念及相关设计的方案,目的是让小伙伴都了解高并发系统中,每个环节所涉及到的相关概念。帮助大家更好地理解和掌握高并发系统中的场景及设计思想

2023-01-29 14:43:52 698

原创 【高并发】- 生产级系统搭建 - 1

一般在企业中所搭建的系统并非天生就支持高并发,而是随着业务的发展而逐渐的被优化和重构,慢慢的支持高并发的。所以在实际生产过程中,开发者必不可免地会慢慢接触到高并发系统,因此本章会围绕为什么要学习高并发,以及生产级系统搭建的流程展开讨论

2023-01-28 22:34:41 396

原创 【高并发】- 指标介绍

本文主要讲解高并发系统的概念,在实际开发过程中为什么要使用高并发系统,相比于传统系统,能带来怎样的改变

2023-01-26 23:31:24 811

原创 2022年10月24日程序员节日快乐

忙碌的工作中,只能通过这种方式,来打个卡。2022年10月24日程序员节日快乐。

2022-10-24 14:35:39 77

原创 23种设计模式 - 单例模式​

23种设计模式 - 单例模式1.关于单例模式的一些说明单例模式:确保一个类最多只有一个实例,提供一个全局访问点注意: 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提供这一实例 单例模式可以分为两种:预加载和懒加载(即饿汉式和懒汉式)2.两种形式详解1.预加载(饿汉式)预先加载。还没有使用该单例对象,但是该单例对象就已被加载到内存。若没有使用该单例对象,该对象就被加载到了内存,会造成内存的浪...

2020-12-27 14:16:30 165

原创 排序算法-Java实现快速排序算法

​开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java快速排序算法的实现进行分享。首先,来看一下,快速排序的实现的动态图:快速排序介绍:快速排序,根据教科书说法来看,是冒泡排序的一种改进。快速排序,由一个待排序的数组(array),以及找准三个变量: 中枢值(pivot) 左值(left) 右值(right) 根据中枢值(pivot...

2020-12-10 23:48:06 436

原创 中间件面试专题:kafka高频面试问题

开篇介绍大家好,近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些消息中间件高频面试题进行分享。Q1:什么是消息和批次? 消息,Kafka里的数据单元,也就是我们一般消息中间件里的消息的概念。消息由字节数组组成。消息还可以包含键,用以对消息选取分区。为了提高效率,消息被分批写入Kafka。 批次,就是一组消息,这些消息属于同一个主题和分区。如果只传递单个消息,会导致大量的网络...

2020-12-10 00:16:40 190

原创 中间件面试专题:RabbitMQ高频面试问题

开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些消息中间件高频面试题进行分享。通知:公众号【Java极客思维】正在送书福利活动,关注公众号并参加福利活动吧!只有参与了本次活动的小伙伴才能够参与年底的大福利,不要错过呀~Q1:RabbitMQ 的介绍、用途、好处?RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的消息中间件。作用:解耦、...

2020-12-08 22:25:30 181

原创 Java面试专题-多线程(3)-原子操作

开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些多线程高频面试题进行分享。通知:公众号【Java极客思维】正在送书福利活动,关注公众号并参加福利活动吧!只有参与了本次活动的小伙伴才能够参与年底的大福利,不要错过呀~Q1:什么是CAS算法?CAS(compare and swap)的缩写。 Java利用CPU的CAS指令,同时借助JNI来完成...

2020-12-07 22:32:11 139

原创 Java面试专题-多线程篇(2)- 锁和线程池

开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些多线程高频面试题进行分享。Q1:乐观锁 和 悲观锁乐观锁:乐观锁(Optimistic Locking)其实是一种思想。相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。悲观锁:...

2020-12-06 17:23:30 140

原创 Java面试专题-多线程篇(1)

开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些多线程高频面试题进行分享。Q1:线程 和 进程有什么区别?进程:进程是程序运行资源分配的最小单位。进程内部有多个线程,会共享这个进程中的资源。线程:线程是CPU调度的最小单位。必须依赖进程而存在。特点: 线程的划分尺度小于进程,这使得多线程拥有高并发性; 进程在运行时各自内存单元相互独立,...

2020-12-06 17:23:06 120

原创 Java面试专题-集合篇(2)

开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些集合高频面试题进行分享。Q:集合的体系有哪些?单列集合:双列集合:Q1:Collection 和 Collections 异同区别是什么?Collection:java.util包下的接口,它是各类集合的父接口,继承它的接口主要有Set 和 List;Collections:...

2020-12-03 21:57:42 143

原创 Java面试专题-基础篇(1)

开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些基础高频面试题进行分享。Q1:== 和 equals 的区别?== 和 equals的区别: equals是方法,==是运算符; 如果==比较的是基本数据类型,则比较两者数值是否相等,也就是我们理解的等于符号;如果比较的是引用数据类型,则比较两者栈地址值是否相等; equals()用来比较两个对...

2020-12-02 21:28:04 141

原创 Springboot整合WebSocket实现网页版聊天,快来围观!

前几天写了一篇《SpringBoot快速入门》一文,然后周末趁着有时间,在这个Springboot框架基础上整合了WebSocket技术写了一个网页版聊天功能。 如果小伙伴找不到那套框架了,可以看下之前的文章找到Springboot快速入门一文往期推荐Springboot 完整搭建快速入门,必看!通过该文章可以了解服务端与客户端之间的通信机制,以及了解相关的Http协议等技术内容。话不多说,先来看看运行的过程:页面写的十分简单,后续也...

2020-11-29 22:17:20 564

原创 Docker安装基本命令操作,带你了解镜像和容器的概念!

上一章节我们了解了Docker的基本概念,以及相关原理。这一章节进行实操。《Docker这么火爆。章节一:带你详尽了解Docker容器的介绍及使用》一、Docker安装声明:Docker支持Centos 6及以后的版本。1. 查询是否有安装docker[root@VM-0-3-centos /]# yum list installed | grep docker[root@VM-0-3-centos /]#我的是腾讯云的服务器,什么都没有安装,所以没有查询出do...

2020-11-26 23:06:26 139

原创 Docker这么火爆。章节一:带你详尽了解Docker容器的介绍及使用

前言 很多小伙伴可能在工作中都听说过Docker,但是实际工作中却没有使用过,听得多了,也对Docker内心有一种很深切的想了解,但是因为各种原因而不知道如何去了解而发愁,不要急,这篇文章带你认识Docker!一、 Docker简介 Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代...

2020-11-25 00:00:27 137

原创 Maven一定要会的这几个知识!

一、Maven概念 Maven是一个项目管理和整合工具。Maven为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为Maven使用了一个标准的目录结构和一个默认的构建生命周期。 若有多个开发团队环境的情况下,Maven能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置都非常简单且可复用,在创建报告、检查、构建和测试自动配置时,Maven可以让开发者的工作变得更简单。Maven的主要...

2020-11-23 23:37:32 349

转载 如何实现一个高性能可渲染5000+节点的Tree组件?

​作者:jayzouhttps://segmentfault.com/a/1190000021228976背景项目中需要渲染一个5000+节点的树组件,但是在引入elementTree组件之后发现性能非常差,无论是滚动、展开/收起节点还是点击节点卡顿都非常明显,利用performance跑一下性能数据发现到问题所在从上图可以看到,除去Idle之外,总共花费的时间为12s,其中Scripting花了10s从上图可以看出,Scripting期间除了 Observe 之外,大部分时间...

2020-11-22 23:33:38 264

原创 Springboot 完整搭建快速入门,必看!

前言手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发。Springboot项目搭建将会从以下几个方面进行项目搭建快速入门一、项目创建新建Maven项目根据上面操作即可完成项目搭建二、pom.xml依赖添加接下来在pom.xml引入springboot相关依赖引入S...

2020-11-21 23:23:45 582 9

原创 面试中AOP这样说,面试官只有一个字:服!

​前面几天介绍了Spring,IOC容器,bean的生命周期和初始化及销毁过程,注解的使用。今天介绍一节纯干活,AOP的实现原理,看完这一篇,面试过程中,再也不要和面试官尬聊:面向切面编程!引用场景在日志,方法增强等等方面!本文通过对AOP是什么,使用场景,实现原理等方面,结合代码等方式图文介绍,用最简短的语言文字描述,彻底掌握AOP的使用方式,面试中介绍AOP时跟面试官侃侃而谈,面试官只会对你说一个字:牛逼!一、AOP介绍AOP:面向切面编程【底层就是动态代理】,指程...

2020-11-20 01:36:36 1243 6

原创 Spring第四天,BeanPostProcessor源码分析,彻底搞懂IOC注入及注解优先级问题!

Spring第一天,介绍Spring和核心注解,点击下方链接查看不要再说不会Spring了!Spring第一天,学会进大厂!Spring第二天,介绍Spring容器注册组件的几种方式,点击下方链接查看Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官!Spring第三天,介绍Bean的生命周期以及bean的初始化及销毁过程,点击下方链接查看Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!今天讲解Spring底层对Be...

2020-11-19 00:56:29 514 1

原创 Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!

点击下方链接回顾往期不要再说不会Spring了!Spring第一天,学会进大厂!Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官!今天讲解Spring中Bean的生命周期。通过代码案例 +源码的方式,用图文结合的方式来讲解Bean的生命周期。希望这一篇看过后,小伙伴后续面试中遇到该类问题,让面试官无话可说!一、Bean的生命周期首先我们来了解下bean的生命周期:bean创建 --> 初始化 --> 销毁bean的生命周...

2020-11-18 00:56:48 741

原创 Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官!

​前一篇《不要再说不会Spring了!Spring第一天,学会进大厂!》文章可点击下方链接进行回看。不要再说不会Spring了!Spring第一天,学会进大厂!今天将继续讲解Spring的注册bean的方式。将通过代码片段+源码的方式,用图文结合来讲清楚这些注册bean的方式。一、@Conditional条件注册bean@Conditional:是Spring4新提供的注解,它的作用是按照一定条件进行判断,满足条件后往IOC容器中进行注册。场景:往IOC容器中注册be...

2020-11-17 00:34:27 326 1

原创 不要再说不会Spring了!Spring第一天,学会进大厂!

工作及面试的过程中,作为Java开发,Spring环绕在我们的身边,很多人都是一知半解,本次将用14天时间,针对容器中注解、组件、源码进行解读,AOP概念进行全方面360°无死角介绍,SpringMVC知识介绍与讲解,将整个Spring进行一个整体介绍,学会承包你后面所有的装逼,吊打面试官。你学“废”了嘛~一、Spring基础Spring是什么Spring是一种开源轻量级框架,是为了解决企业应用程序开发复杂性而创建的。Spring致力于解决JavaEE的各层解决方案,而不仅仅于某..

2020-11-15 22:59:28 246

原创 2019年1024签到

签到打卡。最近项目任务重,沉迷开发,无法自拔。

2019-10-24 10:29:22 1239

原创 Zookeeper

关注博客:https://blog.csdn.net/Xgx120413学习Zookeeper相关的理论及实践。目录一、Zookeeper的相关介绍二、为什么要用到Zookeeper三、Zookeeper单机部署四、Zookeeper相关特性五、常用客户端及命令六、Zookeeper关于Java客户端七、Zookeeper一致性原理八、Zookeeper集群...

2019-09-28 21:43:42 2026 3

原创 谷歌经纬度转百度地图经纬度(精确度还可以)

最近因为要同步客户传过来的数据,但是我们这边地图用的百度地图,但是客户提供过来的是谷歌经纬度。因此在这里找到一个方法,转了一下比较靠谱。直接上方法就行:private static final double x_pi = 3.14159265358979324 * 3000.0 / 180.0;// 该方法传入一个经度,纬度作为参数(谷歌经纬度)并转换为百度经纬度public stat...

2019-04-26 18:07:30 3743 5

原创 Spring学习-01

关于Spring的学习开始了。期待一下。目录基于SprintMVC的MAVEN项目简单搭建 关于xml配置文件的简单介绍 关于Config注解 关于ComponentScan扫描规则 关于Scope扫描规则 关于Lazy懒加载springMVC的MAVEN项目简单搭建新建项目:以上,都可以二选一,这章节讲的很简单,所以java或者web项目都可以。结构目...

2018-11-29 21:10:06 335 2

原创 基于百度地图API删除指定的覆盖物

引用百度地图API过程中,想删除指定的覆盖物,有很多很多的坑。什么clearOverlay()方法,直接给我所有覆盖物都给干没了。还有网上介绍的removeOverlay(对象),这种又介绍不清楚,然后自己经过实践,最终解决了。直接上图、上代码。查询所有地图的覆盖物代码:// 获取所有的地图覆盖物var allOverlay = map.getOverlays();console...

2018-11-26 11:39:56 2521 2

原创 多线程-day-11AbstractQueuedSynchronizer深入分析

AbstractQueuedSynchronizer深入分析 AQS理解起来不难,繁复的概念却让人望而生怯,这里将花几天时间对AQS进行一个详细剖析。什么是AQS? AQS(AbstractQueuedSynchronizer),AQS是JDK下提供的一套用于实现基于FIFO等待队列的阻塞锁和相关的同步器的一个同步框架。这个抽象类被设计为作为一些可用原子in...

2018-11-11 01:57:45 278

原创 多线程-day-10显示锁

目录显示锁Lock接口和核心方法Lock和synchronized关键字的比较可重入锁ReentrantLock、公平锁、非公平锁读写锁Condition接口用Lock和Condition实现等待和通知一、Lock接口和核心方法 显示锁和synchronized一样,都是用来做线程同步的操作。 既然显示锁和synchronized...

2018-11-09 00:06:46 266

原创 多线程-day-09CAS原理

目录原子操作CAS什么是原子操作?如何实现原子操作?CAS的原理CAS的问题JDK中相关原子操作类的使用 在JDK5之前,Java语言同步操作,需要依赖synchronized关键字进行同步。这里就产生了锁的概念。synchronized称之为内置锁,也可以称为互斥锁。synchronized内置锁(互斥锁)可能带来以下几个问题:虽然是线程安全,但是在多个...

2018-10-31 22:48:40 229

原创 多线程-day-08多线程和线程并发工具总结

目录多线程和线程并发工具总结线程基础、线程之间的共享协作基础概念Java线程线程常用方法和线程状态共享线程线程间协作线程并发工具类Fork-Join分而治之、工作密取Fork-Join标准范式Fork-Join运用案例常用并发工具类 4.1 CountDownLatch 4.2 CyclicBarrier...

2018-10-31 22:32:33 987

原创 多线程学习-day-07CountDownLatch、CyclicBarrier

线程基础、线程之间的共享和协作(目前会将一些概念简单描述,一些重点的点会详细描述)学习目标:多线程的并发工具类(3)CountDownLatch、CyclicBarrier一、CountDownLatch官方介绍:CountDownLatch是在java1.5被引入的,它存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程等待...

2018-10-25 20:43:25 374

原创 windows下使用批处理脚本切换jdk版本

windows系统下,我们可能会根据项目不同,安装不同版本的Jdk版本,手动切换可能有点麻烦。这里给整合一份批处理脚本切换Jdk版本。Jdk切换方式:1、环境变量中手动修改JAVA_HOME,这样可能会比较麻烦。2、利用批处理脚本来切换Jdk版本下面说第二种方式,我们看一下批处理脚本,保存文件取名叫:switchVersion.bat(名字随意取)@echo offrem...

2018-10-25 10:41:38 1934 1

原创 多线程学习-day-06ForkJoin实现异步方式遍历指定文件夹文件

线程基础、线程之间的共享和协作(目前会将一些概念简单描述,一些重点的点会详细描述)学习目标:多线程的并发工具类(2)利用ForkJoin来写一个异步方式遍历指定文件夹下所有文件(或指定文件)程序直接看代码吧,注释也比较详细了:/** * 异步遍历指定盘的所有文件 * * @author Administrator * */public class FindDir...

2018-10-22 21:46:45 551

common.css

点击预览,弹出图片放大后效果信息,这个css为弹出层的样式。

2016-10-23

tinybox.js

前端jquery来通过点击预览图片效果。

2016-10-23

hadoop-annotations-2.6.0.jar

Hadoop相关jar包

2016-07-15

hadoop-auth-2.6.0.jar

hadoop连接相关jar包

2016-07-15

activation-1.1.jar

hadoop相关jar包,还有后续很多

2016-07-15

commons-configuration-1.9.jar

初始hadoop环境搭建,必须的jar包

2016-07-12

hadoop-auth-2.4.0.jar

Hadoop连接所需jar包

2016-07-12

substance.rar

substance.jar+使用方法 只需要几行代码就可以美化你的程序。有需要的就下载吧!

2016-01-19

Java连接redis所需要的jar包(jedis-2.7.2.jar)

操作redis所需要的jar包,需要的自己去下载测试

2016-01-11

MyBatis3.2.3帮助文档(中文版).chm

MyBatis3.2.3帮助文档(中文版).chm,有需要下载即可

2016-01-11

Thinking In Java 第四版(中文版).pdf

清晰的概念和解释,基础到深入,非常棒的一本书!适合初学者和专业人员的棉线对象叙述方式。

2016-01-09

jquery-2.0.0.rar

这是jQuery的2.0版本的,有兴趣的去下载!

2015-12-21

Java面试宝典2015版 高清完整PDF版

这是2015版面试宝典,有需要的自己下载吧!

2015-12-14

需求分析说明书模板.doc

需求分析说明书模板,有需要的自己下载!这篇还不错

2015-12-14

datagrid-detailview.js

easyui datagrid插件 datagrid-detailview.js

2015-12-10

Struts2.0中文教程.chm

详细的Struts2的API文档,里面详细记录了struts2的所有的技术,十分推荐查看!

2015-12-05

Java连接redis所需要的jar包

操作redis所需要的jar包,需要的自己去下载测试

2015-12-01

atom-windows.zip

atom编辑器,自己可以下载那个可跳动的插件。 http://kushagragour.in/code-blast-codemirror/demo/index.html,这个插件自己去搜索吧。

2015-12-01

commons-codec-1.6.jar

倒入此jar后, 能快速的对字符串进行md5加密。 String strMd5=DigestUtils.md5Hex("password");

2015-11-30

JavaScript权威指南(第6版)(中文版)

JavaScript权威指南(第6版)(中文版),非常好的一书

2015-11-27

编程珠玑高清pdf版

编程珠玑高清pdf版,里面的内容还是丰富的,值得一看

2015-11-27

敏捷开发的必要技巧完整版

敏捷开发的必要技巧完整版,可以看看了解一下敏捷开发.

2015-11-27

jedis-2.7.2.jar下载

jedis配合redis一起使用,亲测可用,试着玩玩吧

2015-11-14

大型网站技术架构:核心原理与案例分析

对于开拓启发网站架构设计有很好的帮助,建议看看

2015-11-09

SPRING技术内幕:深入解析SPRING架构与设计原理

SPRING技术内幕:深入解析SPRING架构与设计原理

2015-11-07

深入理解Java虚拟机

对于学习java的人来说,java虚拟机是必须要学习的!

2015-10-16

SSH三大框架搭建很基础完整

搭建最简单的SSH三大框架项目,很简单易懂,只要能完整的跟着步骤操作下来,肯定能够运行成功的!所以还希望与大伙儿一起进步了。有需要的下载就行。然后如果按照步骤然后搭建出来或者没有搭建出来的,都可以评价来说一下,然后更加的提升一下文档。

2015-10-04

easyUI中easyloader.js文件下载

这是easyUI中的easyloader.js文件,有需要的自己下载。

2015-09-16

nginx+tomcat+mysql部署java服务应用详细步骤

利用yum(黄狗)安装nginx,mysql,通过下载tomcat,jdk并安装。此处用mysql数据库(修改明文密码为复杂密码,不区分大小写设置)。设置tomcat,nginx相应的端口,路径等等。有需要即下载吧!

2015-08-03

Struts2+Spring+Hibernate框架搭建

简单的SSH框架搭建。有兴趣可以下载,都是右键点击属性---选择MyEclipse中操作的。

2015-08-02

如何利用PLSQL DEVELOPER导入导出数据库表

如何利用PLSQL DEVELOPER导入导出数据库表

2014-08-20

空空如也

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

TA关注的人

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