自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(757)
  • 资源 (32)
  • 收藏
  • 关注

转载 比特币源码分析--P2P网络初始化

比特币源码分析--P2P网络初始化 https://blog.csdn.net/ztemt_sw2/article/details/802917051、源码获取 比特币是一个开源项目,其源码可以从以下github链接上获取: https://github.com/bitcoin/bitcoin 关于源码的编译,在《精通比特币》一书中有较为详细的说明,有兴趣的读...

2019-05-02 14:27:07 258

转载 全节点处理区块流程分析

全节点处理区块流程分析https://www.jianshu.com/p/9112625f660f 我们已经分析过了全节点处理单笔交易(loose transaction)的详细流程,这篇文章将分析全节点收到一个区块后的处理流程,内容包括如何验证这个区块,如何更新本地的区块链账本。注1:本文的分析以中本聪的代码v0.1.15版本为蓝本,节点指代为全节点。注2:如果对比特币区块...

2019-03-08 11:23:28 387

转载 交易(transaction)

1. Owner0 先查到 Owner1 的公钥。用 Owner1 的公钥(Public Key)把汇款详情加密。这样,只有 Owner1 本人用自己的私钥(Private Key),才能打开加了密的汇款详情。在图例中,没有画汇款详情。不过这个小小的叙述的疏忽无妨大雅。 2. 为了方便 Owner1 验证这笔汇款的确来自 Owner0,而不是别人,Owner0 发出的汇款单里,除了有加了密...

2019-02-04 01:08:40 302

转载 比特币源码分析--深入理解比特币交易

比特币源码分析--深入理解比特币交易https://blog.csdn.net/ztemt_sw2/article/details/81101717    交易是比特币最重要的一块,比特币系统的其他部分都是为交易服务的。前面的章节中已经学习了各种共识算法以及比特币PoW共识的实现,本文来分析比特币中的交易相关的源码。1 初识比特币交易    通过比特币核心客户端的命令getrawt...

2019-01-20 01:32:12 271

转载 比特币源码剖析(四)之核心数据结构

比特币源码剖析(四)之核心数据结构* 网络中的节点不断收集新的交易,然后一个Merkle树的形式打包进区块中, * 打包的过程就是要完成工作量证明的要求,当节点解出了当前的随机数时, * 它就把当前的区块广播到其他所有节点,并且加到区块链上。 * 区块中的第一笔交易称之为CoinBase交易,是产生的新币,发送给区块的产生者区块的结构字段 说明 大小 Magic no...

2019-01-10 21:02:38 180

转载 比特币源码分析-网络(二)

比特币源码分析-网络(二)https://www.jianshu.com/p/4b42d8698f35 众所周知,比特币网络是采用的P2P网络体系,所以,没有明显的客户端与服务端的区别或者是概念,每一个节点既是自身的客户端,又是其它节点的服务端。在sync.h中,定义了 CSemaphore,它包装了系统底层的信号量机制,对wait(), try_wait(),post()实现了封...

2019-01-01 00:02:14 152

转载 Java线程池的应用

Java线程池的应用https://blog.csdn.net/lilamei170607/article/details/79974877java多线程详解(7)-线程池的使用在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效...

2018-12-24 14:43:38 80

转载 Bitcoin序列化库使用

Bitcoin序列化库使用 Bitcoin序列化功能主要实现在serialize.h文件,整个代码主要是围绕stream和参与序列化反序列化的类型T展开。stream这个模板形参表达具有read(char**, size_t) 和write(char**, size_t)方法的对象, 类似Golang 的io.reader ,io.writer。简单的使用例子:#includ...

2018-12-24 10:09:18 102

转载 JAVA虚拟机JVM工作原理

JAVA虚拟机JVM工作原理https://blog.csdn.net/leftfist/article/details/85131366https://www.cnblogs.com/jpfss/p/10272622.html提起JAVA,都知道它有个虚拟机,因此可以跨平台,一次编写,到处运行。但具体原理是咋样的?身为JAVA小白,岂可不知!一、原理二、结构1、类加...

2018-12-23 23:08:10 95

转载 比特币源码解析(6) - 数据结构 - 交易池

比特币源码解析(6) - 数据结构 - 交易池 https://blog.csdn.net/u012183589/article/details/777767160x00 摘要我们知道当交易被广播并且被矿工接收到时,矿工就会把交易加入到本地的交易池当中,每个矿工又会对自己的交易池设置相应的限制,来保证交易数量不会过多,矿工在打包交易到区块中时,也会根据一定的优先顺序来选择交易,从而让自...

2018-12-23 15:17:14 83

转载 线程池原理(讲的非常棒)

线程池原理(讲的非常棒)https://www.cnblogs.com/KingIceMou/p/8075343.htmlhttps://www.cnblogs.com/linjiqin/category/499574.html#undefinedhttp://carlosfu.iteye.com/category/345837https://www.nowcoder.com/di...

2018-10-31 10:29:20 107

转载 JAVA面试题(1~95)

JAVA面试题(1~95)《上》https://blog.csdn.net/ywl470812087/article/details/790831411、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继...

2018-10-23 15:31:05 571 1

转载 十年架构师详解JVM运行原理

十年架构师详解JVM运行原理 做Java开发的几乎都知JVM这个名词,但是由于JVM对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及理解什么是JVM,以及弄清楚JVM的工作原理,个人认为这块还是非常有必要去认真了解及学习的,特别是刚入门或入门不久的java开发来说,JVM是Java的基石!1.JVM简析作...

2018-10-23 15:27:07 118

转载 学习资源

学习资源 https://blog.csdn.net/kyi_zhu123/article/details/53014691             1.   免费的编程中文书籍索引                  2.  GitHub 开源超级全的免费编程书籍...

2018-10-19 09:49:42 136

转载 比特币源码情景分析之区块同步消息(message)处理

https://blog.csdn.net/ztemt_sw2/article/details/80291705比特币源码情景分析之区块同步消息(message)处理被交易消耗的UTXO被称为交易输⼊,由交易创建的UTXO被称为交易输出。通过这种⽅式,⼀定量的⽐特币价值在不同所有者之间转移,并在交易链中消耗和创建UTXO.⼀笔⽐特币交易通过使⽤所有者的签名来解锁UTXO,并通过使⽤新的所...

2018-05-03 20:36:58 983

转载 2020-12-01

嵌入式 Ubuntu 交叉编译工具链安装嵌入式 Ubuntu 交叉编译工具链安装里写目录标题什么是交叉编译? 交叉编译工具的下载 交叉编译工具的安装 1.用 FileZilla 传到ubuntu中 2.在 Ubuntu 中创建目录: /usr/local/arm,命令如下: 3.交叉编译工具的解压 4.修改环境变量 5.安装相关库 6.交叉编译器验证 什么是交叉编译?ARM 裸机、 Uboot 移植、 Linux 移植这...

2020-12-01 08:49:07 5

原创 事务传播行为

事务传播行为:如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为 1. TransactionDefinition.PROPAGATION_REQUIRED: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。 2. TransactionDefinition.PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。 ...

2020-11-23 14:43:58 15

原创 2020-11-22

Map接口和Collection接口是所有集合框架的父接口Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等 ArrayList底层是数组。 LinkedL

2020-11-23 08:33:35 5

原创 2020-11-22

新线程创建当程序调用start()方法时,会创建一个新线程,然后执行run()方法。但是如果我们直接调用run()方法,则不会创建新的线程,run()方法将作为当前调用线程本身的常规方法调用执行,并且不会发生多线程。Throw:作用在方法内,表示抛出具体异常,由方法体内的语句处理。 具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。Throws:作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。 主要的声明这个方法会抛出会抛

2020-11-22 15:44:41 10

原创 动态代理

https://www.zhihu.com/question/20794107

2020-11-21 12:53:43 7

原创 2020-11-20

return Proxy.newProxyInstance( obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);   java.lang.reflect.Proxy.newProxyInstance方法根据传入的接口类型 (obj.getClass.getInterfaces())动态构造一个代理类实例返回,这也说明了为什么动态代理实现要求其所代理的对象一定要实现 一个接口。这个代理类实例在内存中是动态构造..

2020-11-21 09:55:51 31

转载 TCP滑动窗口协议

TCP滑动窗口协议。大家都知道,我们从一台机器向另外一台机器发送数据的时候,数据并不是一口气也不可能一口气传输给接收方。这个并不难理解,因为网络环境特别的复杂,有些地方快有些地方慢。所以,操作系统把这些数据写成连续的数据包,并且以一定的速率发给对方。一定的速率怎么理解呢?网络环境就像复杂的交通链路。就好比一个沙漏,中间可能有一个地方流量非常的小,这个最小的口径决定了网络传输的真正速度。我们要考虑到带宽缓冲区等因素,如果一下子发送所有的数据只会加大网络压力,造成丢包重试,轻则传输更慢,重则网络崩溃。因为TCP

2020-09-28 16:47:55 19

转载 2020-09-28

腾讯面试:我倒在了网络基础知识 TCP与UDP的区别 TCP的三次握手和四次挥手 [TCP三次握手 四次挥手](https://o-fawkes.blog.csdn.net/article/details/77413870) TCP流量控制 TCP拥塞控制 慢开始:乘法增加 拥塞避免:加法增大 快重传 快恢复 参考文章 腾讯面试:我倒在了网络基础知识腾讯面试十分注重网络基础知识,问的几乎都是一些细节知识,.

2020-09-28 07:18:54 114

原创 编译器

编译器的结构我们上面大概了解了一下语言的处理过程,下面我们就来了解一下编译器的内部结构,编译器内部其实具有两种结构:分析(analysis)部分和整合(synthesis)部分。分析过程相当于是把源程序分成多个结构,每个结构都有特定的语法格式进行校验,在经由每个校验后,如果不满足指定的语法格式则进行提醒,使用户进行修改。分析部分还会收集有关源程序的信息,会把收集到的信息存放在一个被称为符号表(symbol table)的数据结构中。符号表和中间表示形式一起传给整合部分。整合过程是根据分析...

2020-09-26 17:27:26 22

原创 qemu1

你可能好奇如何使用 QEMU 创建一个新的虚拟机。第一步是为虚拟机创建一个硬盘镜像。然后就可以安装 Ubuntu 9.10 了;这里我们创建一个 10GB 的硬盘镜像就足够了。使用以下命令创建: 1 2 3 $ qemu-img create ubuntu.img 10G $ls-lh ubuntu.img -rw-r--r--. 1 root root 10G Mar 11 11:54 ubuntu.img qemu-s...

2020-09-22 14:30:23 11

转载 qemu

Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,因为 KVM 是硬件辅助的虚拟化技术,主要负责 比较繁琐的 CPU 和内存虚拟化,而 Qemu 则负责 I/O 虚拟化,两者合

2020-09-22 13:51:45 12

转载 2020-09-03

在Linux内核,所有的网络设备都被抽象为一个接口处理,该接口提供了所有的网络操作net_device结构表示网络设备在内核中的情况,也就是网络设备接口。网络设备接口既包括软件虚拟的网络设备接口,如环路设备,也包括了网络硬件设备,如以太网卡。 Linux内核有一个dev_base的全局指针,指向一个设备链表,包括了系统内的所有网络设备。该设备链表每个节点是一个网络设备。 在net_device结构中提供了许多供系统访问和协议层调用的设备方法,包括初始化、打开关闭设备、数据包发送和接收等...

2020-09-03 19:44:02 18

转载 FILE 结构体的定义,inode

FILE 结构体的定义,inode ,软链接和硬链接的理解一、FILE结构体: C将每个文件简单地作为顺序字节流。每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中。当打开文件时,就建立了和文件的关系。  在开始执行程序的时候,将自动打开3个文件和相关的流:标准输入流、标准输出流和标准错误。流提供了文件和程序的通信通道。例如,标准输入流使得程序可以从键盘读取数据,而标准输出流使得程序可以在屏幕上输出数据。打开一...

2020-08-26 17:11:56 29

原创 verify_area

verify_area的作用是对当前进程的地址addr到addr+size这一段进程空间以页为单位执行写操作前的检测。若页面是只读的,则执行共享检验和复制页面操作

2020-08-26 13:58:07 43

转载 struct socket 结构详解

struct socket 结构详解 Socket数据结构网络协议CC++ 用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这个数字称为套接字描述符。在系统调用 的实现函数里,这个数字就会被映射成一个表示socket的结构体,该结构体保存了该socket的所有属性和数据。在内核的协议中实现中,关于表示 socket的结构体,是一个比较复杂的东西,下面一一介绍。 struct socket。 这是一个基本的BSD ...

2020-08-26 12:31:15 62

原创 struct rtable

int ip_rt_ioctl(unsigned int cmd, void *arg),这个函数会根据传入的cmd是SIOCADDRT,还是SIOCDELRT,来决定是创建一个路由表项,还是删除一个路由表项。对于创建路由表项,系统着会再调用rt_new来继续工作rt_new函数会对我们传入的参数进行判断,看是否符合创建路由表项的条件。首先,函数先从传入的rt.rt_dev来判断要创建路由表项的设备是否存在,如果不存在则退出,因为创建一个路由表项,其实就是要对路由表项结构体的各个成员进行赋值的,

2020-08-26 09:20:48 66

转载 struct inode 结构体详解

inode的定义inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。二、inode的分类及其具体涵义inode分为内存中的inode和文件系统中的inode,为了避免混淆,我们称前者为VFS inode, 而后者以EXT2为代表,我们称为Ext2 inode。下面分别对VFS inodee与Ext2 inode做一下简单的描述:1、VFS inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本

2020-08-24 14:30:25 164

原创 rtable

对于创建路由表项,系统着会再调用rt_new来继续工作rt_new函数会对我们传入的参数进行判断,看是否符合创建路由表项的条件。首先,函数先从传入的rt.rt_dev来判断要创建路由表项的设备是否存在,如果不存在则退出,因为创建一个路由表项,其实就是要对路由表项结构体的各个成员进行赋值的,其结构体如下struct rtable{ struct rtable *rt_next;/*指向下一个rtable表项 */ unsigned long...

2020-08-21 11:44:17 56

转载 container_of

在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢??? 哎,算了,还是放弃吧。。。)。 这就是内核大佬们厉害的地方,随便两行代码就让我们怀疑人生,凡是都需要一个过程,慢慢来吧。 其实,原理很简单: 已知结构体type的成员member的地址ptr,求解结构体type的起始地址。 ...

2020-08-21 10:59:37 29

转载 套接字的秘密—socket与sock

那么如何把套接字和文件联系起来呢? 答案就是通过下面这张图。其中task_struct表示一个进程,files_struct中的fd_array[]表示该进程打开的所有描述符,对于套接字来说,与其他类型文件的区别就是最终f_op指向的是socket_file_ops。不过,可以看到,这里的socket_file_ops只有一些通用的操作,并没有send和recv。特有的操作通过socketcall()区分的。socket 和 sock终于到今天的主角了。实际上,对每一个新创建...

2020-08-20 18:57:55 95

转载 2020-08-20

struct socket 结构详解 Socket数据结构网络协议CC++ 用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这个数字称为套接字描述符。在系统调用 的实现函数里,这个数字就会被映射成一个表示socket的结构体,该结构体保存了该socket的所有属性和数据。在内核的协议中实现中,关于表示 socket的结构体,是一个比较复杂的东西,下面一一介绍。 struct socket。 这是一个基本的BSD ...

2020-08-20 16:22:56 40

转载 网络协议栈深入分析

网络接口层* 硬件监听物理介质,进行数据的接收,当接收的数据填满了缓冲区,硬件就会产生中断,中断产生后,系统会转向中断服务子程序。* 在中断服务子程序中,数据会从硬件的缓冲区复制到内核的空间缓冲区,并包装成一个数据结构(sk_buff),然后调用对驱动层的接口函数netif_rx()将数据包发送给链路层。该函数的实现在net/inet/dev.c中,(在整个网络栈实现中dev.c文件的作用重大,它衔接了其下的驱动层和其上的网络层,可以称它为链路层模块的实现...

2020-08-15 21:57:10 35

转载 2020-08-14

查看的的Windows路由表  路由表是的Windows的TCP / IP协议栈的一个重要的部分。但是,路由表不是的Windows操作系统向普通用户显示的东西。如果你要看到这个路由表,你必须要打开一个命令提示符对话框,然后输入“ROUTE PRINT”命令。然后,你将看:路由详解:第一条0.0.0.0 0.0.0.0 192.168.123.254 192.168.123.88 1缺省路由:意思就是说,当一个数据包的目的网段不在你的路由记录中,那么,你的路由器该把那个数据包发送到...

2020-08-14 14:43:24 19

转载 Linux网络协议栈(一)——Socket入门

https://www.cnblogs.com/hustcat/archive/2009/09/17/1568765.html3、套接字的实现套接字最先是在UNIX的BSD版本实现的,所以也叫做BSD套接字,它隐藏了各个协议之间的差异,并向上提供统一的接口。Linux中实现套接字的基本结构:3.1、BSD套接字3.1.1、核心数据结构为了实现BSD套接字,内核提供一个重要的数据结构struct socket,它的定义如下://BSD套接字(include/linux/net.h)st.

2020-08-07 23:08:19 62

转载 struct sk_buff结构体详解

struct sk_buff结构体详解struct sk_buff是linux网络系统中的核心结构体,linux网络中的所有数据包的封装以及解封装都是在这个结构体的基础上进行。<span style="color:#333333"><span style="color:black"><code class="language-cpp"><span style="color:#0077aa">struct</span...

2020-08-07 22:13:51 106

股票期权市场参与者技术实施指引1.3版.doc

股票期权市场参与者技术实施指引1.3版.doc

2020-06-25

个股期权算法.txt

个股期权算法.txt

2020-06-25

上海证券交易所交易型开放式指数基金业务实施细则.pdf

上海证券交易所交易型开放式指数基金业务实施细则.pdf

2020-06-25

结算.ppt结算.ppt

结算.ppt结算.ppt

2020-06-25

股指期货基础知识.pptx

股指期货基础知识.pptx

2020-06-25

深圳证券交易所国债净价交易技术方案 .doc

深圳证券交易所国债净价交易技术方案 .doc

2020-06-25

公共交通IC卡互联互通业务指南1.0.1.docx

公共交通IC卡互联互通业务指南1.0.1.docx

2020-06-25

歌盟SJL22加密机程序员手册.pdf

歌盟SJL22加密机程序员手册.pdf

2020-06-25

加密机基础知识2014.ppt

加密机基础知识2014.ppt

2020-06-25

IBM_v7000培训方案.pptx

IBM_v7000培训方案.pptx

2020-06-25

捷羿预付卡清结算系统培训.docx

捷羿预付卡清结算系统培训.docx

2020-06-25

IBM_PowerVM虚拟化介绍.ppt

IBM_PowerVM虚拟化介绍.ppt

2020-06-25

交通部IC卡业务规范-20150601.zip

交通部IC卡业务规范-20150601.zip

2020-06-25

河南方城凤裕村镇银行ATMP操作手册.docx

河南方城凤裕村镇银行ATMP操作手册.docx

2020-06-25

中国银联银行卡联网联合技术规范V2.1-2014年6月发布版(境内卷及配套文档).rar

中国银联银行卡联网联合技术规范 中国银联银行卡联网联合技术规范 中国银联银行卡联网联合技术规范 中国银联银行卡联网联合技术规范 中国银联银行卡联网联合技术规范

2020-06-25

1214加密机投产手册(测试环境只需做3.3章节即可).doc

1214加密机投产手册(测试环境只需做3.3章节即可).doc

2020-06-25

ORACLE培训教程.pptx

ORACLE培训教程.pptx

2020-06-25

中行现金2.0.rar

中行现金2.0.rar

2020-06-25

银行业务知识培训_V4

银行业务知识培训_V4

2020-06-25

1-16级.文档.全(含10-16级纯英文课文).chm

英孚1-16级英文文本\

2020-05-26

一个64位操作系统的设计与实现-源代码.rar

一个64位操作系统的设计与实现-源代码.一个64位操作系统的设计与实现-源代码.rar

2019-10-14

Test_Report_ProViewSuiteX.250.docx

英文测试报告

2019-07-12

Test Plan_ProView_Suite_Vx.2.50.docx

标准英文测试计划文档

2019-07-12

山东省城市商业银行合作联盟有限公司 自助设备8583格式接口规范 VER1.28.pdf

自助设备8583格式接口规范

2019-07-09

ESB联机交易接口规范通用卷

ESB联机交易接口规范通用卷

2019-03-20

银行互联网安全接入平台接入规范

银行互联网安全接入平台接入规范

2019-03-20

《外围接入系统与储蓄主机接口规范v3.0》

银联接口规范8583,

2019-03-20

通讯MAC算法(适用于IC卡系统固定报文规范)

通讯MAC算法(适用于IC卡系统固定报文规范)通讯MAC算法(适用于IC卡系统固定报文规范)

2018-10-10

金融数据加密机程序员手册

金融数据加密机程序员手册

2018-10-10

金融密码服务平台应用开发手册(JAVA)

金融密码服务平台应用开发手册(JAVA)

2018-10-10

自己动手写CPU【553页】【书签】

自己动手写CPU【553页】【书签】【高清】自己动手写CPU【553页】【书签】【高清】

2018-06-13

程序员英语手册

程序员英语手册程序员英语手册程序员英语手册程序员英语手册

2018-06-13

空空如也

空空如也

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

TA关注的人 TA的粉丝

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