自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zwrlj527的专栏

技术重在分享交流,没有交流就没有进步,我为技术而生。。。

  • 博客(137)
  • 资源 (4)
  • 论坛 (2)
  • 收藏
  • 关注

原创 使用jenkins一次性全模块更新重部署有先后依赖关系的微服务

序今天主要来说下又依赖关系的微服务通过jenkins全模块发布的问题,因为其他模块都依赖配置中心。一、modules情况<modules> <!-- 公共dto、vo、常量 --> <module>fsihouse-data</module> <!-- eureka注册中心 --> <module>fsihouse-cloud-eureka</module> <!-- 配置

2021-01-20 15:49:30 270

转载 SpringBoot配置ELK环境

在看大型网站的中间件技术,对于Elasticsearch有点兴趣,所以将配置流程记录了一下为什么要用ELK“ELK实际上是三个工具,Elastricsearch + LogStash + Kibana,通过ELK,用来收集日志还有进行日志分析,最后通过可视化UI进行展示。一开始业务量比较小的时候,通过简单的SLF4J+Logger在服务器打印日志,通过grep进行简单查询,但是随着业务量增加,数据量也会不断增加,所以使用ELK可以进行大数量的日志收集和分析”简单画了一下架构图在环境配

2021-01-07 09:16:04 19

转载 彻底搞明白这些:二叉树、平衡二叉树、B-Tree、B+Tree

背景一般说MySQL的索引,都清楚其索引主要以B+树为主,此外还有Hash、RTree、FullText。本文简要说明一下MySQL的B+Tree索引,以及和其相关的二叉树、平衡二叉树、B-Tree,相关的知识网上很多,为了方便自己更快、清楚的了解,文本聚合一些内容以及个人的一些理解。说明二叉查找树(BST)概念二叉查找树是基于二分查找法来提高数据查找速度的二叉树的数据结构;特点二叉查找树是采用二分查找法把数据按规则组装成一个树形结构的数据,减少无关数据的检索,提升了数据检索的速

2021-01-07 08:53:32 23

转载 SpringBoot中使用注解来实现 Redis 分布式锁

一、业务背景有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。二、分析流程使用Redis作为分布式锁,将锁的状态放到Redis统一维护,解决集群中单机JVM信息不互通的问题,规定操作顺序,保护用户的数据正确。梳理设计流程 新建注解 @interface,在注解里设定入参标志 增加 AOP 切点,扫描特定注解 建立 @Aspect 切面任务,注册 bean 和拦截特定方法 特定方法...

2021-01-07 08:47:04 21

原创 自定义注解缓存反射编码转中文

序上一篇讲到了本地缓存字典,那么我是这么用的呢?这接就来分享给大家,先说下我的使用场景,我这边是因为编码转中文太多了,之前定的是用枚举,我想着有些事可以参与程序逻辑的,也建议上缓存。领导没同意,到现在发现不能满足场景使用了,比如文化程度、名族、籍贯,这些都是输入的编码,数据库表也没有存中文冗余,籍贯存的就是身份证前面几位,你可以想想,这用枚举合适吗?之前建议用缓存,组内另一大佬也没说不用。哎,级别也就比我高一点点而已,不过领导喜欢他。他沉着冷静不爱怼领导,我呢,为了一些技术、业务逻辑有时候就是不同意领导的

2020-12-31 21:07:54 614

原创 Caffeine自定义使用配置多本地缓存(启动加载字典数据)

序Caffeine的坑,多的不想说,唯一想说的就是如果配置了特异性缓存,后面就不再默认创建,这点就比较不太友好。不过也不是什么特别大的问题,最多就是我自行多配置1个默认配置的呗。一、引入jar支持<!-- 缓存支持 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</arti

2020-12-31 20:29:47 543

转载 详解本地缓存之王 Caffeine

概要Caffeine[1]是一个高性能,高命中率,低内存占用,near optimal 的本地缓存,简单来说它是 Guava Cache 的优化加强版,有些文章把 Caffeine 称为“新一代的缓存”、“现代缓存之王”。本文将重点讲解 Caffeine 的高性能设计,以及对应部分的源码分析。与 Guava Cache 比较如果你对 Guava Cache 还不理解的话,可以点击这里[2]来看一下我之前写过关于 Guava Cache 的文章。大家都知道,Spring5 即将放弃掉 Gu

2020-12-30 09:01:31 41

原创 Docker部署入门-开发应知应会

序今天来跟大家分享下开发应知应会的Docker操作,做个简单入门与使用吧。不喜欢使用插件的绕行,这里除了docker的安装支持,剩下的是结合项目与idea的docker插件玩,开发、个人运维应该是够了的。一、Docker安装支持(CentOS)我这里没有测试服务器给我玩,也没有装虚拟机,我是之前做活动买了3年的阿里服务器个人玩。系统我是装的CentOS7.5的。具体步骤如下:查看centos版本cat /etc/redhat-release使用命令安装阿里云镜像curl -fsSL

2020-12-17 17:53:35 492

原创 smart license简单使用感想

序中途换换脑子,顺便为以后做储备。看了下license,看到个比较新的smart license工具包。就简单弄弄试试。一、先说说出处我关注了一些公众号,从推文里看到的。绝对还不错,其实主要是简单,不过用license来预防盗版等等其实就是一个矛与盾的游戏。出处:https://www.oschina.net/p/smart-license二、使用我是先看的java引入,现在凡是不支持springboot、maven引包的,我基本也不想看。其实也是不想破坏目前的springboot框架。引包

2020-12-15 17:17:16 523

转载 微服务架构:注册中心 ZooKeeper、Eureka、Consul 、Nacos 对比!

序 之前总想着自己弄,可是自己毕竟精力有限,工作场景不一定需要。现在是不是的也转载下,很多老师写的是真不错,分享给大家,扩大传播源,让更多的朋友能阅读到,有什么不好的呢?前言服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额...

2020-12-10 16:06:45 26

转载 通过 jstack 与 jmap 分析一次线上故障

序 上次排查线上问题是仅仅使用了jstack,今天是看到一篇联合分析,觉得不错,转载分享大家,提供一个问题排除思路。下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。1、排查思路简单分析下可能出问题的地方,分为5个方向: 系统本身代码问题 内部下游系统的问题导致的雪崩效应 上游系统调用量突增 http请求第三方的问题 机器本身的问题 ..

2020-12-10 08:44:32 29

原创 使用JRebel热部署

序今天来说说热部署,之前推荐过一批插件给博友们,也不知道大家伙用了没。热部署又很多种实现,比如引入DevTool,我今天说说之前推荐过的插件JRebel。一、插件安装与破解这个我就不多说了,自行百度。二、插件无效1、 插件安装后修改类文件是可以的,可以看看生效的效果:PS:1、必须使用插件的debug、run启动方式哦2、看到Reloading就证明生效了哦2、修改xml文件没有看到重新加载日志的处理找到JRebel确定。然后勾选:如果修改resources下的文件,看到:

2020-12-08 12:32:18 91

转载 2021最新编程原则

每个程序员都可以从理解编程原理和模式中受益。这篇概述用于我个人参考,同时我也把它放在这。也许这在设计、讨论或复查中对你有所帮助。但请注意,这还远远不够,你常常需要在相互矛盾的原则之间做出权衡。本文受The Principles of Good Programming启发。我觉得这份列表已经足够了,但这并不完全符合我个人的想法。此外,我还需要更多的论证、细节以及其他资料的链接。如果您有任何反馈或者改进的建议,请让我知道。目录通用 KISS (Keep It Simple Stupid)

2020-12-08 08:43:45 35

原创 生成api接口文档的故事

序最近在整理优化项目,运维历史原因欠下很多接口文档的账,postman的导出json已不能满足测试、交付验收的要求,要写文档,对于写不爱写文档的人来说,简直是灾难。于是就开始了生成api接口文档的探索之路。主要也是试验了3种方式,javaDoc注释,直接使用idea的工具生成接口报告,出来的是html的,类似jdk的api,还是吃藕啊。下面主要说说2种方式,以及遇到的问题。方式一:smartDoc1、jar引入<dependency> <groupId>com.git

2020-12-05 11:00:17 560

原创 springboot使用actuator

序最近有点空闲,回头来处理一些没有的注释,然后,是不是换换脑子,给springboot加点东西。几天来说说开启监控acuator的问题。不废话,看招。一、maven引入jar<!-- actuator支持 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifa

2020-11-30 16:30:51 69 1

原创 springboot切换使用undertow容器

序最近稍微有点空闲,回头再来优化下基础框架,也是一种重新学习。今天主要写写跟大家分享下springboot使用undertow,废话不多说。一、maven引入jar<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 默认是使用的tomcat --

2020-11-30 15:56:47 552

转载 学习笔记(1):python就业班视频-03-linux版本以及应用领域

您观看课程学习后免费入群领取【超全Python资料包+17本学习电子书】 Python, 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。 Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General...

2020-11-18 08:59:28 10

转载 jvm虚拟机栈的学习

虚拟机栈作用:主要用于方法的执行。(1)线程私有的,它的生命周期与线程相同,每个线程都有一个。(2)每个线程创建的同时会创建一个JVM栈,JVM栈中每个栈帧存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double;和对象引用(reference 32 位以内的数据类型,具体根据JVM位数(64为还是32位)有关,因为一个solt(槽)占用32位的内存空间 ,64位长度的long和double类型的数

2020-11-14 14:53:16 17

转载 jvm堆Java Heap的学习

Java 堆(Java Heap)(1)是Java虚拟机所管理的内存中最大的一块。(2)堆是jvm所有线程共享的。(3)在虚拟机启动的时候创建。(4)唯一目的就是存放对象实例,几乎所有的对象实例以及数组都要在这里分配内存。(5)Java堆是垃圾收集器管理的主要区域。(6)java堆是计算机物理存储上不连续的、逻辑上是连续的,也是大小可调节的(通过-Xms和-Xmx控制)。(7)如果在堆中没有内存完成实例的分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。(8)因此很多

2020-11-14 14:45:02 16

转载 jvm方法区学习

方法区1,方法区的内容是每个装载进来的类信息,根据内外部环境划分内外部环境划分(A类的信息组成)外部信息1)、类型的全名2)、类型的父类型的全名3)、给类型是一个类还是接口4)、类型的修饰符5)、所有父接口全名的列表内部信息1)、类型的常量池2)、类型字段的信息3)、类型方法的信息4)、所有的静态类变量(非常量)信息5)、一个指向类加载器的引用6)、一个指向Class类的引用从上面的分类可以看出方法区内存放的类信息进行了分类统一处理,2,对1中图类信息大部分都好理解,这里

2020-11-13 08:52:08 14

原创 SSD&HDD混装换一块SSD(迁移系统与资料不重装)

序这时候还在公司,不是为了加班。废话也不多说,今天跟大家分享的是笔记本更换固态硬盘,再战3年。一、缘起最近马上双11,我观望一款SSD固态1TB硬盘由来已久。原因是我的笔记本当初是固态+机械硬盘,当初花重金找熟人买的私货。thinkPad的T系列440P,什么是T,什么是P我也不解释,当时为了性能又上了一块固态硬盘,顶配CPUi7,1920高分屏,16G内存。纵然是熟人也是花了小1万,如今已用5年了,想着省省,所以升级啊再战3年。那尴尬的问题就来了。。。二、折腾买了硬盘不想耽误工作重装系统,所以想

2020-11-05 21:17:31 69

转载 使用python修改微信支付宝运动步数

序此文时转载的,来源微信,亲测可行,故此分享给大家。今天分享的文章让你霸屏微信运动,横扫支付宝榜单1、项目意义如果你想在支付宝蚂蚁森林收集很多能量种树,为环境绿化出一份力量,又或者是想每天称霸微信运动排行榜装逼,却不想出门走路,那么该 python 脚本可以帮你实现。2、实现方法手机安装第三方软件乐心健康,注册账号登录,将运动数据同步到微信和支付宝。用 python 脚本远程修改乐心健康当前登录账号的步数即可。第一步:在手机上安装乐心健康 app。安卓版下载地址:(http://app.m

2020-10-28 13:53:43 568 3

原创 JVM类加载器学习笔记

序对JVM一直是朦朦胧胧的,似懂非懂,今天也是在CSDN平台的学院学习了着方面的课程,算是详细理解一遍吧,分享给大家。一、什么是JVMJVM(Java Virtual Machine,Java虚拟机)JVM是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。所以,JAVA虚拟机JVM是属于J

2020-10-26 09:12:28 18

原创 网络编程实现远程执行shell指令

序今天下午,忙完手里的活,就在想扩展一下之前的java执行shell。之前是通过http请求,发送指令,后端执行,现在想的是网络编程创建服务端,客户端自己run或使用工具,拦截一部分人吧。这么做其实是适合很多所谓的堡垒机,免得无权限登录,但是又需要执行一些命令。废话不多说,直接上码。一、shell执行工具类import org.apache.commons.lang.ArrayUtils;import java.io.BufferedReader;import java.io.InputStr

2020-10-10 20:21:58 67

原创 AlibabaCloudToolkit插件乱码解决轨迹

序这么多年,使用的开发工具也是经历了myeclipse、eclipse、idea。现在觉得idea确实好用,没有之一。我也一直认为工欲善其事必先利其器,所以光有好用的idea还不够,我还爱装插件,先看看我安装的一些插件吧。一、我的插件一览二、缘起今天要说的是Alibaba Cloud Toolkit,公司没有运维,测试总是让我们开发部署测试项目。后来再推动下,测试折腾jenkins又嫌弃我们的微服务模块太多。jenkins讲真,我觉得是运维玩的东西,我作为开发也不想玩,而且编译也有好多种方式了。发

2020-09-24 13:58:01 625

原创 redis缓存+数据库实现动态自动任务springboot/cloud

序之前分享过自己搭建的自动任务,是基于quartz + 表,通过url回调实现。今天分享的是基于springboot的动态创建任务,结合缓存与数据库,使用主任务监听任务是否改变,动态重置任务。老风格,废话不多说,直接上核心代码。一、表结构设计我的想法是,接口名称就是controller的一个方法名,自动任务的runable方法传参taskInfo信息,使用固定的包名、类名+这里的接口名称,反射执行具体任务逻辑。理论上是可以包名、类名也让配置,我这里是为了统一管理,所以不允许自己瞎设置。二、spr

2020-09-07 19:46:33 60

原创 springCloud微服架构maven转gradle环境与问题处理

序springBoot都已经更新到2.3.3.RELEASE了,话说从2.3.0就正式使用gradle编译了。一直也想体验gradle的美,不是因为跟同事一起编码,不想QJ同事一样用gradle我早就投入她的怀抱了(之前QJ了部分同事一起用lombok,深感罪孽深重)。今天另一位同事又提起这个变革了,反正这周有点迷茫,那就来一波吧。老风格,不废话,直接上关键的骚操作。一、gradle环境配置先到gradle的官网下载最新版本的bin.zip文件。注意要准备梯子哦,不然下载不了。这个环境配置跟java的

2020-08-25 17:00:35 626

原创 springboot环境下集成tk+mybatis+pageHelper+phoenix与使用

序之前分享过springboot集成hbase,最近需求变更,不直接对hbase了。套一层phoenix,然后通过映射,让数据进入hbase。所以今天就来分享下springboot集成phoenix。废话也不多说,直接上码。一、引入jar<!-- mybatis mapper支持 --> <dependency> <groupId>tk.mybatis</groupId> <artif

2020-08-13 17:44:51 152

原创 spring的自定义事件使用

序最近看到博文有提到spring事件监听的,看完其实感觉这个事件跟aop的功能一样,为了业务解耦,方便改动。跟异步又也很像,可以不用管执行结果。当然如果是要求执行成功的,也没必要用,费劲写半天还不如直接在方法里写。废话也不多说,直接上spring事件的使用,至于什么场景用,就看大家的了。一、自定义事件类import com.alibaba.fastjson.JSONObject;import lombok.Data;/** * @author zhengwen **/@Datapubl

2020-07-20 08:28:11 66

原创 工作流Activiti集成构建自有平台方案

序最近以为工作安排,让我研究工作流。说实话这个一直停留在用的阶段,但是能工作流Activiti网上资料也很多,真要基于这个构建自有工作流也是可以的。下面就说说我的方案与试验。一、 可行性经过4天的学习研究,集成试验,以及流程拆解,交互使用体验。做基本的二次开发改造后,是可行的,就是怎么改造、改造程度、使用深度等都决定二次开发的工作量,同时改造是否优秀、简单明确也是需要后续讨论制定最优方案才行。二、 集成方式集成方式有2种:A、 使用Activiti的用户、角色管理方式,这种方式有工作流管理首页

2020-07-14 20:18:17 705

原创 直接接Hbase&HbaseApi实现模糊分页查询
原力计划

序 之前分享了基于spring-boot-data集成Hbase、直接集成Hbase,今天分享使用封装好的一些接口集成Hbase,顺便谢谢Hbase的查询。废话也不多说,直接上码。一、jar引入<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId>

2020-06-22 15:53:31 185

原创 springBoot直接集成Hbase2.1

序上次分享了基于spring的starter集成hbase的,说过要分享直接对接的。一、pom引包<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.0.0</version> <exclusions> <e

2020-06-13 17:54:21 874 2

原创 springBoot集成Hbase(spring-data-hadoop-boot版)

序最近开始一步一步走进大数据,当然是作为程序员。今天就来说说Hbase的集成,首先今天先说下通过spring-data-hadoop-boot的集成吧。老规矩,废话不多说,加班快下班了,就抽20分钟分享。一、maven引包<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-hadoop-boot&l

2020-06-06 18:08:34 1078 3

原创 springBoot极简接入kafka(自动配置)
原力计划

序上次分享了springboot的优雅集成,最近在跟同事讨论的时候,发现有更简单的集成方式,真的是极简。直接上代码吧,今天周日,昨天加班到9点,闺女要我带她玩。一、maven引包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId></dependency><

2020-05-31 13:14:46 1077 1

原创 centOS安装mysql8.0.20

序昨天看到腾讯云的服务器做活动,就顺手买了一个,准备自己玩玩。首先肯定是要搞相关环境的啦。所以总结下mysql8.0.20的安装(centOS7.5)。一、先下载我这里是下载了再传到服务器的,其实可以直接使用wget命令下载到指定目录。先说这么复制路径:然后点击后面的Download:在文本编辑器里粘贴就可以得到下载地址了。二、使用wget命令下载到指定目录命令语法:wget -P 目录 网址三、下载文件解压与授权首先使用cd命令进入到下载的tar文件所在的目录(你的wget命令下

2020-05-29 10:03:27 482

原创 kafka优雅集成(多线程提升性能)
原力计划

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出导入门禁系统同步数据方案序继上周G20数据收集讨论会议后,初步方案是采用各业务系统有对应的数据收集服务端,供业务系统接口调用同步数据。

2020-05-27 17:43:26 109

原创 系统同步数据方案(ETL的Kettle)

一、工具准备Kettle下载。这个软件虽然是开源的,但是资源非常少,国内下载速度也慢。之前是先下载的8.1版本,今天下载的最新版本9.0。以下验证是在8.1版本上面验证的。二、简单使用与可行性验证转换转换使用主要是验证了数据库表的输入、输出,实现数据转存。设置变量作业设计了一个增量插入同步的作业,异常发送邮件。三、详细设置设计思路: 在id角标记录表取上次已经同步到的id,从正式表筛选此id之后的数据输出到临时表,然后再由临时...

2020-05-13 17:44:46 688

原创 小米手环模拟门禁卡

放上原卡读取整卡保存数据自己编译名字,建议写原卡加密方便分析 保存打开IC卡清空工具点击文件打开原卡加密文件处理成功,点击退出。上第三代空白卡点击写入三代打开空白数据,手机,进行模拟,这个第三代IC卡手环放在机器上面重开软件...

2020-05-12 18:20:13 1462

原创 设备预警规则设计(使用表达式引擎)

序 一位领导一再强调每个人都是产品,确实作为一个多年编码的程序员,我们都需要有这样的格局眼光。之前要求联动预警可以拖拽配置,这里就分享一下个人的设计想法。一、技术实现准备规则解析:使用表达式引擎JEXL(号称目前最快,灵活)拖拽实现:前端说有插件(H5还是很强大)拖拽配置:抽象出一个简易的设计界面(对元素抽象处理)二、界面设计产品御用设计界面Axure用的真差...

2020-05-07 18:21:08 345

原创 最新版SpringBoot2.2.6.RELEASE+SpringCloudHoxton.SR3原跨域配置无效及各种报错

序 上一篇博文就讲到了我的处理cors跨域,分享了关键代码。原springBoot版本2.2.2.RELEASE、springCloud版本Hoxton.SR1,那是年前的最新版本,现在项升级到当前与时俱进,于是问题就来了,升级后eureka注册中心、配置中心、各服务、网关都正常启动,就是上到外网环境就会出现跨域问题,昨天本来是听说使用undertow容器比tomcat、jetty性...

2020-05-01 10:18:02 1962 5

小米盒子增强版ROOT&WIFI-ADB

小米盒子增强版ROOT&WIFI-ADB 现在百度到的小米盒子增强版的Root方法都不成功,这里绝对是原创ok的 安卓开发,你值得拥有

2017-07-07

mySql实现树形查询的函数存储过程例子

mySql实现树形查询的函数存储过程例子

2017-06-08

apache负载均衡

apache负载均衡

2017-04-01

eclipse luna集成weblogic开发环境以及项目部署

eclipse luna集成weblogic开发环境以及项目部署

2015-09-30

关于在线播放视频

发表于 2011-11-25 最后回复 2011-11-25

weblogic10环境报的2个错

发表于 2011-11-13 最后回复 2011-11-17

空空如也

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

TA关注的人 TA的粉丝

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