自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 java培训:JVM 内存布局

概览内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略 ,保证了 JVM 的高效稳定运行。上图描述了当前比较经典的JVM内存布局。(堆区画小了2333,按理来说应该是最大的区域)如果按照线程是否共享来分类的话,如下图所示:PS:线程是否共享这点,实际上理解了每块区域的实际用处之后,java培训就很自然而然的就记住了。不需要死记硬背。下面让我们来了..

2022-02-21 11:44:39 504 1

转载 前端培训:Vue3语法糖详解分享

script setup 有哪些优势<script setup> 是在单文件组件(SFC)中使用组合式 API 的编译时语法糖。相比于普通的<script>语法,它具有更多优势:更少的样板内容,更简洁的代码。 能够使用纯Typescript声明 props 和抛出事件。 更好的运行时性能 (其模板会被编译成与其同一作用域的渲染函数,没有任何的中间代理)。 更好的 IDE 类型推断性能 (减少语言服务器从代码中抽离类型的工作)。基本语法<setu.

2022-02-21 11:09:22 1090

转载 大数据培训:构建Flink SQL流式计算平台

一、背景Flink 由于阿里在国内的助推,火爆程度可以想象,大数据培训且目前Flink 有非常明显的趋势是往SQL 方向进行的。很多大厂已经实现了Flink SQL化,那我们怎么去实现一个流式计算平台呢?二、Flink SQL 初探以及代码实现连接kafka 对数据进行处理写入mysqlpackage org.example;import org.apache.flink.streaming.api.environment.StreamExecutionEnvironm.

2022-02-21 10:32:35 570 1

转载 大数据培训:Flink 快照分析

在 Flink 作业中,无论是 SQL 还是 JAR 模式,常常会直接或者间接地使用到状态(State)。当 Flink 进行快照时,用户定义的这些状态数据可以被保存在状态点中,以供后续的崩溃恢复。Flink 的状态分为 Operator State 和 Keyed State,而 Keyed State 又可以分为 ValueState、MapState、ListState、AggregatingState、MergingState、ReducingState 等多种类型。此外,这些林林总总的状态又有

2022-02-18 11:42:51 470

转载 前端培训:Vue3 的自定义指令

背景众所周知,Vue.js 的核心思想是数据驱动 + 组件化,通常我们开发页面的过程就是在编写一些组件,并且通过修改数据的方式来驱动组件的重新渲染。在这个过程中,我们不需要去手动操作 DOM。然而在有些场景下,我们还是避免不了要操作 DOM。前端培训由于 Vue.js 框架接管了 DOM 元素的创建和更新的过程,因此它可以在 DOM 元素的生命周期内注入用户的代码,于是 Vue.js 设计并提供了自定义指令,允许用户进行一些底层的 DOM 操作。举个实际的例子——图片懒加载。图片懒.

2022-02-18 11:21:40 271

转载 java培训:JVM参数配置

Java代码的编译,大家都知道是将.java代码编译成.class文件,这个过程是我们常说的编译,也称为前端编译。实际上Java程序的编译和运行不仅仅是将代码编译成.class文件就可以的,因为机器无法直接运行.class文件,java培训还需要JIT或者解释器将.class文件转换成机器码,这个过程称为运行时编译。今天我们就来深入学习一下运行时编译器是怎么实现对Java代码的优化。类的编译加载执行过程类编译我们编写完代码之后,需要用JDK自带的javac工具将.java文件编译成.

2022-02-18 10:44:43 203

转载 java培训:JVM性能调优理论基础知识分享

JVM是Java虚拟机,它是一个虚构出来的计算机,可在实际的计算机上模拟各种计算机的功能。JVM有自己完善的硬件结构,例如处理器、堆栈和寄存器等,还具有相应的指令系统。JVM在整个JDK中处于最底层,负责与操作系统的交互。因此掌握JVM调优便显得尤为重要。在进行JVM调优介绍之前,让我们来简单介绍一下基础知识吧!1. 什么是垃圾?在C语言中,我们通过malloc和free来申请和释放内存;在C++语言中我们通过new和delete来申请和释放内存。那么Java语言当我们new了一个对象之后,发生了什

2022-02-17 11:33:38 110

转载 web前端培训:开发过程中比较实用的 Linux 命令

0. Owner、Group、Others、RootLinux 系统是一种多用户系统,它将文件访问者身份分为三种:文件所有者(Owner)当创建一个用户的时候,Linux 会为该用户创建一个主目录,路径为 /home/<username>,我们可以使用 cd ~,快捷进入主目录。如果你想放一个私密文件,就可以放在自己的主目录里,然后设置只能自己查看。群组(Group)每个用户都有一个用户组,方便多人操作的时候,前端培训为一群人分配权限。当创建用户的时候,会自动创建一个与它同名

2022-02-17 10:57:56 180

转载 大数据培训:Flink窗口的开始时间的计算

我还记得的在我刚学习flink的时候,B站的老师说过,Flink窗口的开始时间和结束时间和你想的不一样。那个时候我好像记得老师说过,flink的窗口大小会根据你的时间单位来进行修正。然后在现如今,很多人还是不是很了解窗口机制,以及watermark。更别提什么窗口什么时候,什么时候结束。所以呢,今天从大数据培训源码角度给大家普及一下窗口什么时候开始,什么时候结束。我们可以来编写一个简单的代码,来看一下效果,我习惯用java来写flink,所以也就使用java了。@Overridepublic

2022-02-17 10:11:00 564

转载 大数据培训:Flink全链路延迟的测量方式及原理

一、背景Flink Job端到端延迟是一个重要的指标,用来衡量Flink任务的整体性能和响应延迟(大部分流式应用,要求低延迟特性)。通过流处理引擎竞品对比,我们发现大部分流计算引擎产品,都在告警监控页面,集成了全链路时延指标展示(直方图)。一些低延时的处理场景,例如用于登陆、用户下单规则检测,实时预测场景,需要一个可度量的Metric指标,来实时观测、监控集群全链路时延情况。二、源码分析来源1、本文的源码分析基于Flink社区issue FLINK-3660,以及issue对应的pr源码

2022-02-16 10:55:18 615

转载 web前端培训: Vue3面试考点分享

1、Vue 3.0 性能提升主要是通过哪几方面体现的?1.响应式系统提升vue2在初始化的时候,对data中的每个属性使用definepropery调用getter和setter使之变为响应式对象。如果属性值为对象,还会递归调用defineproperty使之变为响应式对象。vue3使用proxy对象重写响应式。proxy的性能本来比defineproperty好,proxy可以拦截属性的访问、赋值、删除等操作,不需要初始化的时候遍历所有属性,前端培训另外有多层属性嵌套的话,只有访问某个属性的时

2022-02-16 10:30:25 144

转载 java培训:JVM 锁的优化和逃逸分析

锁优化jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。自旋锁和自适应自旋现在大多的处理器都是多核处理器 ,如果在多核心处理器,java培训有让两个或者以上的线程并行执行,我们可以让一个等待线程不放弃处理器的执行时间。设置一个等待超时时间,看线程是否能够很快的释放锁,在等等待的这段时间可以执行一个空循环,让当前线程继续占用 CPU 的时间片。这就是所谓的「自旋锁」。JVM 中可以通过 +XX:UseSpinning来开启自旋锁,在 JDK1.6 过后默认

2022-02-16 10:05:27 118

转载 java培训:MyBatis 相关面试题分享

什么是Mybatis?1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,java培训将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。3、通过xml 文件或注解的方式将要执行的各种 sta

2022-02-15 12:05:33 147

转载 web前端培训: JavaScript 中初始值如何填充数组

1. 用 primitives 填充数组假设我们想用给定值初始化一个长度为3的数组。array.fill() 方法可以用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。再结合使用 Array(n):const length = 3;const filledArray = Array(length).fill(0);filledArray; // [0, 0, 0]Array(length).fill(initialValue) 是一种创建具有前端培训所需长度并使用原始值

2022-02-15 11:30:07 267

转载 大数据培训:在 flink 中使用 hive udf的原因分析

1.序篇废话不多说,咱们先直接上本文的目录和结论,小伙伴可以先看结论快速了解博主期望本文能给小伙伴们带来什么帮助:背景及应用场景介绍:博主期望你能了解到,其实很多场景下实时数仓的建设都是随着离线数仓而建设的(相同的逻辑在实时数仓中重新实现一遍),因此能够在 flink sql 中复用 hive udf 是能够大大提高人效的。 flink 扩展支持 hive 内置 udf:flink sql 提供了扩展 udf 的能力,即 module,并且 flink sql 也内置了 HiveModule(需要

2022-02-15 11:00:13 482 2

转载 大数据培训:Flink调度器性能的提高

分发模式描述了消费者任务如何连接到生产者任务。目前,Flink 中有两种分布模式:pointwise 和 all-to-all。当分布模式在两个顶点之间是逐点分布时,遍历所有边的计算复杂度为 O(n)。当分布模式为 all-to-all 时,遍历所有边的复杂度为 O(n 2 ),这意味着随着规模的增加,复杂度会迅速增加。在 Flink 1.12 中,ExecutionEdge类用于存储任务之间的连接信息。这意味着对于 all-to-all 分布模式,会有 O(n 2 ) Execution.

2022-02-14 11:48:03 192

转载 前端培训:React调度算法迭代过程

React内部最难理解的地方就是「调度算法」,不仅抽象、复杂,还重构了一次。可以说,只有React团队自己才能完全理解这套算法。既然这样,那本文尝试从React团队成员的视角出发,来聊聊「调度算法」。什么是调度算法React在v16之前面对的主要性能问题是:当组件树很庞大时,更新状态可能造成页面卡顿,根本原因在于:更新流程是「同步、不可中断的」。为了解决这个问题,React提出Fiber架构,意在「将更新流程变为异步、可中断的」。最终实现的交互流程如下:不同交互产生.

2022-02-14 11:19:05 174

转载 java培训:MyBatis高级进阶学习分享

配置文件标签日志管理日志文件 是用于记录系统操作事件的记录文件或文件集合。在实际开发中日志是非常重要的,能起到两个很大的作用,其一:帮助开发人员排错,其二:能通过记录管理谁操作了什么内容,这两点尤其和库关联的时候,就能起到非常关键的作用,删库跑路这样的说法相信各位都听说过吧!日志框架掌握两个常用的即可:STDOUT_LOGGING LOG4J使用方式比较简单,在主配置文件 mybatis-config.xml 中添加如下代码:<settings>&l.

2022-02-14 10:51:00 255

转载 Java培训:封装的含义及实现方式

1.1 封装的含义封装也叫信息隐藏或者数据访问保护,类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者函数)来访问内部信息或者数据。public class Wallet { private String id; private long createTime; private BigDecimal balance; private long balanceLastModifiedTime; // ...省略其他属性... public Walle.

2022-02-11 14:05:34 215

转载 前端培训:3 个可能有用JavaScript 类

1 、 从构造函数返回一个对象(单例)构造函数返回除了它所属的类的实例之外,其他东西是非常奇怪的。好吧,在 JavaScript 中,这实际上是可以做到的。让我们举一个简单的汽车类的例子。class Car {make = '';model = '';doorsCount = 4;wheelsCount = 4;constructor(make, model) {this.make = make;this.model = model;}}默认.

2022-02-11 13:41:36 91

转载 大数据培训:Hadoop HDFS 实现原理

一、HDFS体系结构1.1 HDFS 简介Hadoop分布式文件系统 (HDFS) 是运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,大数据培训机构非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件

2022-02-11 11:45:43 269

转载 大数据培训:Hadoop生态系统圈

Hadoop概述Hadoop体系也是一个计算框架,在这个框架下,可以使用一种简单的编程模式,通过多台计算机构成的集群,分布式处理大数据集。Hadoop是可扩展的,它可以方便地从单一服务器扩展到数千台服务器,每台服务器进行本地计算和存储。大数据培训机构除了依赖于硬件交付的高可用性,软件库本身也提供数据保护,并可以在应用层做失败处理,从而在计算机集群的顶层提供高可用服务。Hadoop核心生态圈组件如图所示。Hadoop生态圈Hadoop包括以下4个基本模块。1)Hadoop基础功能.

2022-02-10 11:59:35 394

转载 前端培训:Vue 面试题分享

1.请说一下响应式数据的理解?核心答案:数组和对象类型当值变化时如何劫持到。对象内部通过defineReactive方法,使用Object.defineProperty将属性进行劫持(只会劫持已经存在的属性),数组则是通过重写数组方法来实现。这里在回答时可以带出一些相关知识点(比如多层对象是通过递归来实现劫持,顺带提出Vue3中是使用proxy来实现响应式数据)补充回答:内部依赖收集是怎样做到的,每个属性都拥有自己的dep属性,存放他所依赖的watcher,当属性变化后会通知自己对应的w

2022-02-10 11:24:00 191

转载 java培训:SpringBoot技术的理解

背景分析在传统JAVAEE应用体系中创建一个项目,需要手动添加大量的依赖,还要考虑版本的兼容性,还有繁重的配置、复杂的项目部署,会高度影响开发效率。即使是使用Spring进行资源整合,也存在同样的这些问题。还有就是现在的软件生态应用也已经形成一定的规模java培训机构,整个软件架构体系在变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此由此spring boot诞生。要解决什么问题?Spring Boot是一个全新的Java软

2022-02-10 10:52:48 100

转载 java培训:Java堆和栈区分出来的原因

为什么要把堆和栈区分出来呢?第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)。这种共享的收益是很多的。一方面这种共享提供了一种有效的数据交互方式(如:共享内存),另一方面,堆中的共享常量和缓存可以被所有栈访问,节省了空间。第三,栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址.

2022-02-09 11:33:59 207

转载 前端培训:分享web前端面试“区别”题

1.jquery 和 javascript 的区别jQuery 是 JavaScript 的一个封装集合。封装了很多 JavaScript 的方法,也就是说,jQuery 里面的内容都是 JavaScript 语句。只是封装起来让我们学习和使用的简单一些.2.React 和 Vue 的区别React 和 Vue 的相似之处:(1)、使用 Virtual DOM(2)、提供了响应式(Reactive)和组件化(Composable)的视图组件。(3)、将注意力集中保持在核.

2022-02-09 11:07:56 86

转载 大数据培训:SQL 面试题及答案分享

一、行列转换描述:表中记录了各年份各部门的平均绩效考核成绩。表名:t1表结构:a -- 年份b -- 部门c -- 绩效得分表内容:a b c2014 B 92015 A 82014 A 102015 B 7问题一:多行转多列问题描述:将上述表内容转为如下输出结果所示:a col_A col_B2014 10 92015 8 7参考答案:selecta,max(case when b="A" then c en.

2022-02-09 10:39:44 369

转载 大数据开发之运维面试题汇总分享

Q1:集群线上扩容如何达到自动化?线上扩容,规模正常都是以 10+以上,如果都以课堂所示,人肉操作,时间投入与产出比不匹配,人力造成很大的不必要浪费,想学习老师线上集群实际扩容的方案。A:课堂所示兼顾了小白同学,所以是手把手纯人肉搭建,产线环境扩容数量少则几十多则上百,人肉肯定不行,我们公司的运维分为 IAAS 运维、大数据运维、应用运维,大数据运维工程师在扩容集群时,需要向 IAAS 运维工程师以工单的方式申请服务器并提出自己的需求, IAAS 运维工程师在提供服务器时不管是新采购服务器大数据培训还是

2022-02-08 11:56:45 1338

转载 前端开发之js栈内存和堆内存的区别

js中的堆内存与栈内存在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。和java中对内存的处理类似,栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,**以及对象变量的指针,java培训这时候栈内存给人的感觉就像一个线性排列的空间,每个小单元大小基本相等。而堆内存主要负责像对象Object这种变量类型的存储。栈内存中的变量一般都是已知大小或者有范围上限的,算作一种简单存储。而堆内存存储的对象类型数据对于大.

2022-02-08 11:28:46 2021

转载 java开发之Spring集成MyBatis知识分享

集成步骤第一步:创建数据库、数据表数据库各位跟随自己爱好建就行,java培训数据表我这里是 programmer,字段有这几个:id 主键,varchar(64)、自动增长、不为null name 姓名,varchar(125) age 年龄,int第二步:新建项目,完成基本配置新建基于 maven 的 Java项目,完成如下配置:pom.xml 文件中主要是依赖:<?xml version="1.0" encoding="UTF-8"?><project

2022-02-08 11:01:09 135

转载 大数据开发之Flink + TiDB

一、实时数仓经典架构实时数仓有三个著名的分水岭:第一个分水岭是从无到有,Storm 的出现打破了 MapReduce 的单一计算方式,让业务能够处理 T+0 的数据。第二个分水岭是从有到全,Lambda 与 Kappa 架构的出现,使离线数仓向实时数仓迈进了一步,而 Lambda 架构到 Kappa 架构的演进,实现了离线数仓模型和实时数仓模型的紧密结合。第三个分水岭是从繁到简,Flink 技术栈的落地大数据培训使实时数仓架构变得精简,并且是现在公认的流批一体最佳解决方案。.

2022-01-21 13:33:05 457

转载 前端开发之 JS 原型知识分享

1. 普通对象和函数对象「javascript内部只有普通对象和函数对象」typeof {} // objecttypeof [] // objecttypeof function() {} // functiontypeof new Function('str', 'console.log(123)') // functiontypeof null // object2. 构造函数function Person(name, age, job) { this.name = n

2022-01-21 11:57:54 158

转载 java开发之Mybatis 快问快答

1.Mybatis的一级、二级缓存(1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。(2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不 同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不 打开二级缓存,要开

2022-01-21 11:09:06 154

转载 java开发之SpringBoot+flowable实现工作流

背景使用flowable自带的flowable-ui制作流程图使用springboot开发流程使用的接口完成流程的业务功能flowable-ui部署运行flowable-6.6.0 运行 官方demo1、从官网下载flowable-6.6.0 : https://github.com/flowable/flowable-engine/releases/download/flowable-6.6.0/flowable-6.6.0.zip2、将压缩包中的 flowable-6.6.0\w

2022-01-20 14:14:13 1349 1

转载 前端开发之React调度算法的迭代过程

React内部最难理解的地方就是「调度算法」,不仅抽象、复杂,还重构了一次。可以说,只有React团队自己才能完全理解这套算法。既然这样,那本文尝试从React团队成员的视角出发,来聊聊「调度算法」。什么是调度算法React在v16之前面对的主要性能问题是:当组件树很庞大时,更新状态可能造成页面卡顿,根本原因在于:更新流程是「同步、不可中断的」。为了解决这个问题,React提出Fiber架构,意在「将更新流程变为异步、可中断的」。最终实现的交互流程如下:不同交互产生.

2022-01-20 11:50:22 135

转载 大数据开发之Flink sql 的基础用法

Flink sql 是什么sql 的诞生就是为了简化我们对数据开发,可以使用少量的 sql 代码,帮助我完成对数据的查询,分析等功能声明式 & 易于理解对于用户只需要表达我想要什么,具体处理逻辑交给框架,系统处理,用户无需关心,对于一些非专业的开发人员有了解 sql,并且 sql 相对我们学习 java,c 等语言更简单,大数据培训学习成本更低,如果跨团队,或者非大数据开发人员,也可以通过 sql 来进行 flink 任务的开发自动调优查询优化器,会对我们编写的 s.

2022-01-20 11:23:00 4404

原创 尚硅谷JavaWeb新版视频教程发布

一堆堆乌云,像青色的火焰,在无底的大海上燃烧。大海抓住闪电的箭光,把它们熄灭在自己的深渊里。这些闪电的影子,活像一条条火蛇,在大海里蜿蜒游动,一晃就消失了。——暴风雨!暴风雨就要来啦!这是勇敢的海燕,在怒吼的大海上,在闪电中间,高傲地飞翔;这是胜利的预言家在叫喊:——让暴风雨来得更猛烈些吧!江湖,似大海般内卷。我们,人人都是海燕。当码农真的需要勇气,来面对惊涛骇浪,只要你一个眼神肯定,走下去就有意义。“海燕啊

2022-01-20 10:50:02 150

转载 大数据开发之Flink SQL建设实时数仓实践

个推Flink SQL使用现状在SQL模式下,个推通过jar+SQL文件+配置参数的方式使用Flink。其中jar是基于Flink封装的执行SQL文件的执行jar,提交命令示例如下:/opt/flink/bin/flink run -m yarn-cluster -ynm KafkaSourceHbaseSinkCaseTestSql \-c ${mainClassName} \${jarPath} \--flink.parallelism 40 \--mode stream \--sq

2022-01-19 11:59:13 718 1

转载 前端开发之样式调试

首先,要想成为一个前端开发工程师,必须有一个好的前端开发工具,比如HbuilderX(个人比较喜欢用)、VSCode(使用的时候需要自行安装各种插件,如果习惯用微软东西的,可以使用),当然前端开发工具非常多,可谓是各有千秋,有付费的也有免费的,有国内的也有国外的,而HbuilderX属于国内免费的较为好用的前端开发工具,当然如果你是一个绝世高手,前端培训你也可以使用记事本开发前端。可能还有人会问,为什么不用Dreamweaver呢?这个东西主要是给有为青年用来练手的,不适合我们工作中使用。其次,你还需要

2022-01-19 11:30:14 517

转载 SpringBoot利用Actuator来监控应用的方法

Actuator是什么?先从官网摘几句文绉绉的解释:SpringBoot可以帮助你再将应用程序推向生产环境时对其进行监视和管理。 你可以选择使用http断点或JMX来管理和监视应用程序。 审计【auditing】、健康【health】和指标收集【metrics gathering】可以自动应用到你的应用程序中。总结一下就是:Actuator就是用来监控你的应用程序的。快速开始引入依赖<!--Actuator--><dependency> <

2022-01-19 11:04:55 986

空空如也

空空如也

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

TA关注的人

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