自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木头

一个空杯,等着灌满

  • 博客(443)
  • 资源 (1)
  • 收藏
  • 关注

原创 JAVA:Spring Boot 集成 Jasync 异步数据库访问

摘要 本文介绍了如何在Spring Boot中集成Jasync异步MySQL客户端,构建高性能数据库访问服务。Jasync基于Netty实现异步通信,相比传统JDBC具有非阻塞、高吞吐等优势。文章详细展示了从Maven依赖配置、数据库连接设置、Repository封装到REST控制器实现的完整流程,并提供了样例代码。通过CompletableFuture实现异步查询,可显著提升高并发场景下的I/O效率。该方案适用于爬虫平台、网关服务等对低延迟要求严格的场景,可作为传统JDBC的高性能替代方案。

2025-08-07 08:38:24 305

原创 JAVA:阻塞与非阻塞队列安全的技术指南

本文深入解析了Java中的阻塞队列和非阻塞队列,对比了两者的实现原理和应用场景。阻塞队列(如LinkedBlockingQueue)通过锁机制实现线程安全,适用于生产者-消费者模型;非阻塞队列(如ConcurrentLinkedQueue)基于CAS操作,提供更高性能。文章通过代码示例展示了两种队列的实际应用,并给出了场景选择建议:阻塞队列适合任务调度和流量控制,非阻塞队列更适合高并发场景。最后总结了不同业务场景下的最佳队列选择方案。

2025-08-07 08:37:29 875

原创 JAVA:Spring Bean 生命周期的技术指南

摘要:Spring Bean的生命周期包含实例化、依赖注入、初始化、使用和销毁等阶段。具体流程包括:1)通过构造函数实例化Bean;2)依赖注入属性;3)执行Aware接口回调;4)调用@PostConstruct和初始化方法;5)使用Bean;6)容器销毁时调用@PreDestroy和销毁方法。通过实现InitializingBean、DisposableBean等接口或使用BeanPostProcessor可以定制生命周期行为。掌握这些阶段有助于优化Spring应用,提高性能和可维护性。

2025-08-06 09:08:49 598

原创 Python:OpenCV 高效视觉的处理库

OpenCV是一个功能强大的开源计算机视觉库,支持多种编程语言和平台。本文介绍了OpenCV的核心功能,包括基础图像操作(读取、显示、转换)、图像处理技术(滤波、边缘检测、阈值处理)、特征检测与描述(角点检测、SIFT特征、特征匹配)以及实际应用示例(人脸检测、实时视频处理、文档扫描)。通过Python代码示例展示了OpenCV在计算机视觉领域的广泛应用,适合初学者快速上手并实现各类图像处理任务。

2025-08-06 09:08:01 340

原创 Redis:基本操作语法的技术指南

Redis是一款高性能键值数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文系统梳理了Redis常用命令,包括连接方式、Key操作及五大核心数据类型(String、Hash、List、Set、Sorted Set)的使用方法,每种类型均附有典型应用场景和命令示例。此外还简要介绍了持久化、发布订阅和事务功能,帮助开发者快速掌握Redis核心功能。文末通过对比表格清晰展示了各数据结构的特性与应用场景。

2025-08-05 08:45:30 363

原创 JAVA: Spring Batch 批处理框架的技术指南

Spring Batch是一个用于大规模数据批量处理的轻量级框架,支持数据导入、处理和导出。其核心结构包括Job(批处理任务)、Step(执行单元)以及Reader、Processor、Writer组件。本文通过一个基础示例演示了Spring Batch的实现流程:创建Spring Boot项目并添加依赖,配置MySQL数据源,定义数据模型,实现自定义的Reader(读取数据)、Processor(处理数据)和Writer(输出数据),最后配置Job完成批处理任务。

2025-08-05 08:44:43 250

原创 JAVA:死锁问题解决策略的技术指南

本文深入探讨了多线程编程中的死锁问题。死锁是指多个线程相互等待对方释放资源,导致程序无法继续执行的情况。文章分析了死锁产生的四个必要条件,并通过Java代码示例展示了典型的死锁场景。针对死锁问题,提出了五种有效的解决策略:避免资源嵌套锁(固定加锁顺序)、使用tryLock超时机制、定时调度检测、减少锁的使用范围以及采用无锁并发工具。每种策略都附有代码示例和适用场景说明,为开发者提供了实用的解决方案。最后通过表格对比了不同策略的优缺点,帮助读者根据实际业务需求选择合适的防范措施。

2025-08-04 09:14:16 275

原创 Python:PyOpenSSL 安全通信的技术库

PyOpenSSL是OpenSSL的Python接口,提供SSL/TLS协议支持、证书管理和加密操作。文章详细介绍了PyOpenSSL的核心功能,包括创建安全客户端/服务器(示例代码展示443端口HTTPS通信和8443端口简易SSL服务器搭建)、证书管理(生成自签名证书、解析证书信息、验证证书链)等实用功能。通过Python代码示例,演示了如何生成密钥对、创建X509证书、处理证书签名请求等典型应用场景。

2025-08-04 09:13:28 143

原创 JAVA:什么是 happens-before 原则?

摘要: Java内存模型(JMM)通过happens-before原则解决多线程的可见性问题,确保操作A的结果对操作B可见且执行顺序正确。核心规则包括程序顺序、锁同步、volatile变量、线程启动/终止及传递性。例如: synchronized保证锁释放对后续加锁可见 volatile写操作对读操作可见 Thread.start()前操作对线程内可见 未建立happens-before可能导致线程间数据不可见(如非volatile变量)。

2025-08-01 08:30:01 876

原创 JAVA:Spring Boot 实现单点登录的技术指南

JAVA:Spring Boot 实现单点登录的技术指南

2025-08-01 08:28:48 151

原创 MySQL:基本操作语法的技术指南

本文整理了MySQL数据库的常用操作语法,涵盖数据库和表的基本管理、数据增删改查、索引使用以及用户权限管理等内容。主要包括:创建/删除数据库和表、修改表结构、插入/查询/更新/删除数据、添加/查看/删除索引、创建用户和授权等核心操作。文中提供了大量实用示例代码,如条件查询、字符串拼接、时间处理等技巧,并附有完整的用户表操作流程演示。这些基础语法适用于中小型系统开发,能帮助开发者快速掌握MySQL的基本使用。

2025-07-31 08:44:18 530

原创 Python:Pillow 高效的图像处理库

Pillow是Python中功能强大的图像处理库,提供了丰富的图像操作功能。本文介绍了Pillow的核心应用,包括基础图像操作(打开/保存、格式转换、调整大小)、高级图像处理(裁剪、滤镜应用、颜色调整)以及图像合成与绘图(混合图像、添加文字、绘制图形)。文章还提供了三个实用示例:批量图像处理工具、缩略图生成器和图像水印工具,展示了Pillow在实际项目中的应用价值。这些功能使Pillow成为数据科学、计算机视觉和Web开发中不可或缺的图像处理工具。

2025-07-31 08:43:44 203

原创 Redis:缓存雪崩、穿透、击穿的技术解析和实战方案

本文针对Redis在高并发环境中常见的三大问题——缓存雪崩、穿透、击穿,提供了系统性的解决方案。缓存雪崩建议采用随机TTL、多级缓存和限流策略;缓存穿透推荐使用空值缓存、布隆过滤器和参数校验;缓存击穿可通过互斥锁、热点永不过期和异步更新应对。文章强调组合使用本地缓存、远程缓存和异步回源机制,并配合限流熔断保障系统稳定性。每种问题都给出了具体代码示例,为构建健壮的缓存系统提供了实用指导。

2025-07-30 09:53:32 1306

原创 Python:Scrapy 异步高性能的 WEB 爬虫框架

Scrapy是一个高效的Python爬虫框架,具有异步处理和强大扩展性。本文介绍了Scrapy的核心功能与使用流程: 框架特点:异步引擎、内置数据提取、中间件系统,适合大型爬虫项目 项目创建:通过scrapy startproject建立项目结构,定义数据模型 爬虫开发:示例演示了名言网站爬虫的实现,包括数据提取和分页处理 核心组件:详细解析了Spider、数据提取方法(支持CSS/XPath)和ItemLoader 实践案例。

2025-07-30 08:28:02 481

原创 JAVA:Seata 常见面试题的技术指南

Seata是一个开源的分布式事务解决方案,主要用于解决微服务架构下的跨服务、跨数据库事务一致性问题。其核心组件包括事务协调器(TC)、事务管理器(TM)和资源管理器(RM),采用增强的2PC协议实现事务管理。Seata支持AT、TCC、SAGA和XA四种事务模式,其中AT模式通过自动生成Undo Log实现事务回滚,提供高性能的事务处理。系统通过全局唯一XID跟踪事务状态,并包含完善的故障恢复机制。Seata相比传统2PC具有性能优化、开发简化等优势,可通过集群部署、事务粒度优化等方式提升性能。

2025-07-29 09:07:56 625

原创 JAVA:Spring Boot 集成 Protobuf 的技术指南

本文介绍了如何在Spring Boot中集成Protobuf实现高效数据传输。Protobuf相比JSON/XML具有更高性能、更小体积和跨语言支持。文章详细展示了从Maven依赖配置、proto文件定义、代码生成到接口开发的完整流程,并提供了curl和Java客户端的测试方法。通过实际案例演示了Protobuf在微服务通信中的优势,特别适合对传输效率要求高的场景,如微服务、IoT设备等。

2025-07-28 17:21:23 139

原创 AI:阿里开源 Qwen3-Coder 优秀的代码开源模型

阿里通义千问团队开源的高性能代码模型Qwen3-Coder,支持多语言代码生成、补全与解释,具备128K长上下文处理能力。该模型通过特殊Token训练优化代码结构理解,支持多轮对话编程,可集成至IDE工具链。提供480B参数版本,适用于函数生成、代码注释、测试用例编写等场景,是构建AI编程助手的理想开源选择。项目已在HuggingFace和GitHub发布,支持API调用和本地部署。

2025-07-24 11:24:12 419

原创 JAVA:Eureka 与 Zookeeper 的技术对比及实践样例

本文对比了微服务架构中两种主流的服务注册与发现组件:Eureka和Zookeeper。Eureka是Netflix开源的高可用AP系统,适合Spring Cloud生态;Zookeeper则是Apache的强一致性CP系统,提供分布式协调功能。文章从设计理念、实现机制、适用场景等方面进行对比,并给出实践示例和选型建议:Eureka更适合云原生高可用需求,Zookeeper适合强一致性场景。最后总结了二者的核心差异,包括CAP理论偏向、服务剔除机制和生态支持等,为开发者提供了清晰的技术选型指南。

2025-07-24 09:01:03 733

原创 JAVA:Spring Cloud与Dubbo深度对比及实践样例

Spring Cloud 与 Dubbo 微服务框架对比摘要 Spring Cloud 和 Apache Dubbo 是当前主流的微服务框架,二者在架构设计和功能实现上有显著差异。Spring Cloud 基于 HTTP/REST 通信,生态完善但组件较多,适合需要丰富功能的中大型项目;Dubbo 采用高性能 RPC 调用,内置服务治理能力,更适合对性能要求高的 Java 项目。

2025-07-23 09:42:03 735

原创 JAVA:微服务服务之间如何独立通信的技术解析

本文介绍了微服务架构及其通信方式。微服务将应用拆分为自治的小型服务单元,通过HTTP/REST、gRPC等协议进行同步通信,或借助RabbitMQ、Kafka等实现异步消息传递。文章重点分析了同步与异步通信的特点,并提供了Spring Boot+OpenFeign+Nacos的实践案例,展示了订单服务如何远程调用商品服务。最后对比了两种通信方式的适用场景,建议核心链路使用同步通信,非核心业务采用异步解耦。文中还强调了服务注册发现、接口契约管理等关键设计要点。

2025-07-23 09:41:02 212

原创 Redis:慢查询分析与优化的技术指南

Redis慢查询是执行时间超过预设阈值的命令请求,会被记录在内存队列中用于性能分析。关键参数包括阈值设置(slowlog-log-slower-than)和日志最大长度(slowlog-max-len)。通过SLOWLOG GET等命令可查看慢查询记录,推荐线上设置为10ms阈值和1024条日志上限。实践中应避免大Key和长命令,采用分批操作和SCAN替代全量查询。

2025-07-22 09:31:34 832

原创 JAVA: Dubbo 负载均衡策略详解与实践指南

本文详细解析了Apache Dubbo框架中的四种负载均衡策略及其应用场景,包括随机(Random)、轮询(RoundRobin)、最少活跃数(LeastActive)和一致性哈希(ConsistentHash)。通过配置示例展示了全局、服务级和方法级的策略设置方法,并提供了自定义负载均衡实现方案。文章还探讨了权重配置、粘滞连接等高级特性,以及常见问题的解决方案。

2025-07-22 09:30:42 155

原创 JAVA:如何设计一个高并发的系统

本文系统介绍了高并发系统的设计原则与实现方案。核心设计原则包括无状态设计、异步化、冗余部署和弹性伸缩。关键技术实现涵盖:1)Nginx负载均衡与静态资源优化;2)Java线程池配置与异步处理;3)多级缓存架构(本地缓存+Redis);4)数据库分库分表与读写分离。典型场景实践展示了秒杀系统的库存预热、原子扣减和异步下单方案,以及基于Redis的实时排行榜实现。文章还提供了熔断降级配置示例和多活部署架构,确保系统高可用性。最后通过JMeter压测验证系统性能,构建完整的高并发解决方案。

2025-07-21 09:11:36 708

原创 Python:Datatable 高性能的数据处理库

Datatable:高性能Python数据处理库 Datatable是一个专为大规模数据集设计的高性能Python库,提供类似R语言data.table和pandas的功能,但处理速度更快。主要特点包括卓越性能、内存高效、易用语法和多线程支持。基础操作涵盖数据创建、导入导出、列操作等;支持条件筛选、多列排序等数据处理;提供强大的分组聚合功能。实际应用示例展示了其在大型数据集分析、数据清洗、时间序列处理和机器学习集成中的优势,特别适合需要高效处理海量数据的场景。

2025-07-21 09:10:28 255

原创 Linux:安装 Node.js 的技术指南

本文介绍了在Linux系统上安装Node.js的三种主要方法:使用官方二进制包(推荐)、通过系统包管理器安装或使用NVM进行多版本管理。详细步骤包括下载安装、版本验证以及常见问题解决方案。文章还提供了三个实践示例:创建简单Node.js应用、使用Express框架开发Web应用以及构建CLI工具。根据需求选择适合的安装方式后,开发者即可利用Node.js丰富的生态系统进行各类应用开发。

2025-07-19 10:40:26 26

原创 JAVA:TTZero EEC 处理 Excel 的高效工具库

TTZero EEC是一款专为大数据量Excel导出设计的Java工具,通过流式写入技术解决传统工具(如Apache POI)在处理百万级数据时的内存溢出问题。它具备高性能(10W行导出仅需3-8秒)、低内存占用(<10MB)等优势,支持样式自定义、多Sheet导出和分页写入。相比同类工具,TTZero EEC提供更简洁的API和更优的扩展性,适用于企业报表、数据备份等场景。该工具已开源,开发者可通过Maven快速集成,并提供了Spring Boot的Web导出示例。

2025-07-18 08:41:53 42

原创 MySQL:索引覆盖技术解析与实践指南

索引覆盖是一种高效的MySQL查询优化技术,通过使查询仅需访问索引而无需回表获取数据行,显著提升性能。核心优势包括减少I/O操作、加快查询速度和降低服务器负载。 实现原理是利用B+树索引结构,当查询字段全部包含在索引中时,MySQL可直接从索引获取数据,避免二次查找。实践案例显示,合理设计复合索引可使查询速度提升5-10倍。 高级应用包括前缀索引、函数索引(MySQL8.0+)及排序优化。设计时需权衡写性能、空间占用和维护成本,确保SELECT列全在索引中。

2025-07-17 08:52:35 785

原创 Python:Paramiko 高效的 SSHv2 协议库

Paramiko是Python实现的SSHv2协议库,支持远程服务器管理和文件传输。文章介绍了Paramiko的安装、基础SSH连接(密码/密钥认证)、SFTP文件传输(上传/下载/目录操作)以及高级功能如交互式Shell、端口转发和多线程命令执行。通过实际代码示例,展示了如何利用Paramiko进行批量服务器管理,包括创建SSH连接、执行命令和文件操作等场景。Paramiko作为跨平台SSH库,能有效简化Python程序的远程服务器自动化管理任务。

2025-07-17 08:50:51 418

原创 Redis:如何在项目里面使用缓存?

本文介绍了Redis在Web应用中的缓存实践,从基础模式到高级应用场景。主要内容包括:Redis作为缓存的核心优势(高速访问、丰富数据结构等);基础缓存模式实现(查询缓存、更新策略);典型应用如分布式Session、分布式锁和秒杀系统;以及多级缓存架构设计。文章通过Java代码示例展示了各种场景下的最佳实践,帮助开发者合理使用Redis提升系统性能,同时解决分布式环境下的数据一致性问题。

2025-07-16 08:50:29 722

原创 架构师:搭建 Dubbo 集成 Zookeeper 高性能的 RPC 框架

Dubbo是一款高性能Java RPC框架,适用于微服务架构中对性能、高可用和服务治理要求较高的系统。本文介绍了Dubbo的核心特性(高性能RPC、服务注册发现、负载均衡等)、架构组成(Consumer/Provider/Registry)以及适用场景。通过Spring Boot集成示例,展示了服务提供者与消费者的实现过程,包括接口定义、远程调用和Zookeeper注册中心配置。文章还提供了常见问题解决方案(服务注册失败排查、调用超时优化等)和Dubbo 3.0新特性(应用级发现、反应式编程)。

2025-07-16 08:49:36 243

原创 Redis:持久化配置深度解析与实践指南

Redis持久化机制详解:保障数据安全的关键配置 Redis作为高性能内存数据库,通过RDB和AOF两种持久化机制确保数据安全。RDB以二进制快照形式定时保存数据,具有恢复快、体积小的特点;AOF则记录每条写命令,提供更完整的数据保护。Redis 4.0+引入混合模式,结合两者优势。本文详细解析了两种机制的配置方法,包括生产环境的最佳实践方案,以及针对不同业务场景(如电商平台、金融系统)的配置建议。同时提供了持久化监控、数据恢复和常见问题解决方案,帮助开发者在性能和可靠性之间取得平衡。

2025-07-15 08:50:23 1016

原创 Python:TextBlob 文本处理与情感分析

TextBlob是一个简单易用的Python自然语言处理库,提供文本处理、情感分析、分类和翻译等功能。主要特点包括安装简便、API直观,支持分词、词性标注、名词短语提取、拼写纠正等。文章演示了基本用法,如创建TextBlob对象、情感分析(返回极性和主观性评分)、文本分类(训练朴素贝叶斯分类器)以及语言翻译和拼写检查。实际应用示例展示了如何分析产品评论情感。TextBlob适合NLP入门和小型文本分析项目,建立在NLTK和Pattern库之上,是快速原型开发的理想选择。

2025-07-15 08:46:19 142

原创 JAVA:为什么选择Redis而不是Memcached

本文对比了Redis与Memcached两大缓存系统的核心差异。Redis凭借丰富的数据结构、持久化机制、事务支持等特性,在电商购物车、实时排行榜、分布式锁等五大场景中具有不可替代的优势。性能测试显示,Redis在复杂操作上表现更佳,而Memcached仅在简单KV操作中略占优势。企业案例表明,Redis能满足Twitter时间线、Uber地理查询等复杂需求。最后指出,Memcached仅适用于纯KV缓存且无需持久化的简单场景。Redis已成为现代分布式系统的首选缓存方案。

2025-07-14 08:45:47 708

原创 Docker:部署 RocketMQ 集群的技术指南

通过本文的实践,我们成功使用 Docker Compose 搭建了一个完整的 RocketMQ 集群环境,整体结构如下:🛰 2 个 NameServer:提供服务发现与路由注册功能,确保高可用;📦 2 个异步 Master Broker:每个 Broker 独立运行,采用 ASYNC_MASTER 模式,适合非关键业务的高性能消息传输;📊 1 个 RocketMQ Dashboard:提供可视化控制台,支持 Topic 管理、消息查看、集群监控等功能。

2025-07-14 08:44:50 270

原创 Python:LogBook 高性能的日志记录库

Logbook是Flask作者开发的现代Python日志库,提供了比标准logging更简洁易用的API。文章介绍了Logbook的安装、基础日志记录、日志级别设置等核心功能,重点展示了其高级特性:文件日志、日志轮转(按大小/时间)、多处理器组合等实用场景。还讲解了上下文日志记录功能,包括线程局部上下文和自定义上下文变量注入。最后提供了两个实际应用示例:Web应用日志配置(含彩色控制台输出和分级日志文件)和数据库操作日志记录方案。

2025-07-12 11:01:03 48

原创 JAVA:Spring Boot 集成 POI-TL 进行 Word 文档处理

POI-TL是基于Apache POI的Word模板引擎,通过模板+变量方式生成文档,支持文本替换、图片插入、表格填充等功能,比直接使用POI更简便。适用于合同生成、报告自动化等场景。集成时需添加poi-tl和poi-ooxml依赖。核心功能包括:1)基本文本替换,通过{{变量}}占位符动态填充;2)提供下载API,生成Word文件供下载;3)进阶功能如动态插入图片({{@变量}})和表格数据填充。

2025-07-11 08:47:22 59

原创 MySQL:合理使用锁机制的技术指南

MySQL锁机制解析与应用实践 本文深入解析MySQL的锁机制,包括表锁、行锁、意向锁、间隙锁、临键锁和元数据锁等核心锁类型的特点与适用场景。文章通过具体案例展示了锁在并发更新死锁、间隙锁阻塞和批量更新优化中的实际应用,并提供锁监控诊断方法。最后给出事务设计、索引优化和应用层锁优化的最佳实践建议,特别针对电商库存超卖等典型生产问题提出了数据库悲观锁和乐观锁的解决方案。全文涵盖锁的基本原理到高级应用,为数据库高并发场景下的数据一致性保障提供全面的技术指导。

2025-07-10 08:49:54 971

原创 Python:FastAPI 高性能的 Web 框架

FastAPI是一个高性能的Python Web框架,基于Starlette和Pydantic构建,具有极速开发、类型安全和自动文档生成等特性。本文介绍了FastAPI的核心功能,包括基础应用搭建、请求响应模型处理、高级功能(依赖注入、安全认证、文件上传、WebSocket)以及两个实际案例(待办事项API和用户认证系统)。通过代码示例展示了FastAPI简洁的语法和强大的能力,使其成为构建现代API的理想选择。

2025-07-10 08:46:05 372

原创 Redis:如何进行性能优化的技术解析

Redis性能优化关键策略与实践指南:本文系统讲解了Redis性能优化的核心要点,包括命令使用规范、数据结构选择、内存管理、持久化配置等关键因素。重点提供了Java实践示例:使用Hash结构替代JSON存储、Pipeline批量操作、Lua脚本保证原子性、合理设置淘汰策略等9大优化方案。同时推荐了redis-benchmark、RedisInsight等性能测试工具。通过合理配置连接池、集群部署和监控措施,可显著提升Redis吞吐量,避免成为系统瓶颈。适用于中高级开发者优化高并发场景下的Redis使用效率。

2025-07-09 08:02:41 1074

原创 Python:Rich 终端富文本与界面样式工具库

Rich 是一个功能强大的 Python 库,专为提升终端输出效果而设计。它支持丰富的文本样式(颜色、粗体等)、表格展示、语法高亮、进度条、Markdown 渲染和复杂布局系统。安装简单(pip install rich),基本用法包括格式化文本输出和控制台打印。高级功能涵盖自动适配的表格、实时进度条、代码高亮以及面板布局等。实际应用示例展示了如何构建数据分析工具和系统监控仪表盘,使 CLI 应用具备现代化、美观的交互界面。

2025-07-09 08:01:53 361

FontCreator字体工具

一种字体创造工具

2023-11-14

Synergy window soft

两台电脑操作共享当前的鼠标和键盘,一台为server,一台为client。当前提供的是window 32位安装包

2019-02-15

空空如也

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

TA关注的人

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