自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Castle Yeager 成长之路

记录自己的点滴

  • 博客(36)
  • 收藏
  • 关注

原创 2022秋招 - 陌陌 - Python开发工程师 - 08.24 - 一面复盘

08.24 15:301、自我介绍2、面试官先介绍了团队情况,业务分工等3、现在你做Python开发用哪个版本4、用过Django2.x吗?和3.x相比有什么区别5、装饰器使用场景6、static method 和 class method的区别(不会)7、手写匹配RPC地址,用正则表达式(不会)8、说一下多进程和多线程的区别9、GIL如何规避10、说一下什么是魔术方法(懂但说的不好)11、能列举一些魔术方法吗12、HTTP常见的状态码,405遇到过吗(没)13、说一下HTTP/1

2021-08-24 17:04:48 244 1

原创 2022提前批 - 深信服 - Python开发工程师 - 08.21 - 一面复盘

2022提前批 - 深信服 - Python开发工程师 - 08.21 - 一面复盘1、自我介绍2、你觉得Python语言有什么特性呢?3、解释性语言和编译性语言的区别4、有了解Python虚拟机吗?(回答不了解,只知道Python解释器),那你说一下解释器吧5、解释器主要的功能是什么?6、GIL锁有了解吗,解释一下7、协程和线程之间的区别8、进程切换和线程切换的区别9、Python函数声明中有三种类型的参数,说一下区别(听题没听清楚,以为问的三种函数类型,面试官指正了问的是三种参数类型,

2021-08-21 18:25:24 324

原创 2022提前批 - 奇安信 - 服务端开发工程师 - Python - 8月7日 - 笔试复盘

2022提前批 - 奇安信 - 服务端开发工程师 - Python - 8月7日 - 笔试复盘文章目录2022提前批 - 奇安信 - 服务端开发工程师 - Python - 8月7日 - 笔试复盘前言单选第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题第十三题第十四题第十五题第十六题第十七题第十八题第十九题第二十题不定项第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题编程题第一题 - 挑选芭蕾舞演员第二题 - 最大资源储备总结前言秋招临近,试着投了奇安信的服务端

2021-08-08 18:38:31 983 1

原创 关于Python列表底层实现原理

关于Python列表底层实现原理目录关于Python列表底层实现原理引言一、空列表和空元组分别占多少内存空间?二、为什么列表和元组可以保存不同类型的数据三、Python列表的扩容机制四、列表和元组初始化时的共有部分都有哪些内容五、列表和元组的性能差异引言今天学习极客时间上的《Python核心技术与实战》课程,在看了第3课关于列表和元组的深入剖析后,觉得自己以前对于列表元组的理解还不够深入,于是跟着课程中老师提供的思路搜索了资料,算是整理出了一些知识体系吧。一、空列表和空元组分别占多少内存空间?课程

2021-07-03 22:15:55 1324 1

原创 2021第十二届蓝桥杯Python组国赛/决赛 题解

2021第十二届蓝桥杯Python组国赛/决赛 题解前言2021年第十二届蓝桥杯国赛/决赛,因为疫情原因没有像往年一样前往北京参赛,而是在自己学校的机房进行考试,形式上类似蓝桥杯省赛,但由于参加国赛的都是在省赛上获得省一的同学,所以人数相对较少,换到了一个较小的机房统一考试,而这间机房正好就在我实验室隔壁,早上不用站在考场外干等了。这届蓝桥杯也是本人第一次参加编程竞赛,之前无任何经验,这段时间通过把蓝桥杯省赛、国赛作为一个阶段性目标,让自己的代码水平比平时划水时提高了不少,这里不敢说自己算法水平有多大

2021-06-07 00:33:53 5929 19

原创 第十一届蓝桥杯第二次省赛Java研究生组 Python版

引言博主尝试用Python语言去写其他语言组别的试题,按逆序刷的话,今天先做一套十一届Java研究生组的试题。试题A:约数个数本题考察的是质因数的知识,由于是填空题,所以直接从1开始遍历到根号78120,判断每一个数是否能整除78120即可。比较基础。res = 0for i in range(1, 78120+1): res += 1 if 78120 % i == 0 else 0print(res)# 输出 96注意Python遵循左闭右开的原则,所以右边是78120 +

2021-04-08 23:49:25 1920

原创 第十一届蓝桥杯省赛第二场 Python组

引言博主没有参加第十一届蓝桥杯,这是在官网上找到的历年真题,按年份倒序刷吧。我会以Python语言的角度去分析题目的考点。填空题1本题考察的点是Python字符串处理函数中的count()函数,具体用处是统计字符串中出现子串的次数。我们把题目要求的 2 当作子串,统计从 1 到 2020 这些字符串中出现子串 2 的次数即可。res = 0for num in range(1, 2021): res += str(num).count('2')print(res)# 输出624

2021-04-06 23:50:44 877 3

原创 第十二届蓝桥杯模拟赛(第四期)题解 Python版

第十二届蓝桥杯模拟赛(第四期)题解 Python版引言填空题1填空2填空3填空4填空5编程题1编程题2编程题3编程题4编程题5引言虽然之前也写过一些力扣题解,但都比较简单,而且语言描述得比较不好吧,基本算是一个记录性质的博客。博主参加过第十二届蓝桥杯模拟赛的第二期、第三期和本次第四期,第一期还不知道有这个模拟赛所以没参加,鉴于第四期个人感觉难度较低,所以尝试做一下题解!有问题欢迎评论区交流!由于本人参加的是Python组,所以很多地方的代码可能会带有Python风格填空题1非常基础的一道题,给定

2021-04-04 23:59:41 673 6

原创 力扣605 种花问题

力扣605 种花问题题干假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n朵花?能则返回True,不能则返回False。示例输入: flowerbed = [1,0,0,0,1], n = 1输出: True输入: flowerbed = [1,0,0,0,1], n = 2

2020-12-28 23:42:16 326 1

原创 力扣566 重塑矩阵

力扣566 重塑矩阵题干在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。示例输入: nums = [[1,2], [3,4]] r = 1, c = 4 输出: [[1,

2020-12-28 21:38:59 115

原创 力扣561 数组拆分1

力扣561 数组拆分1题干给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。返回该 最大总和 。示例输入:nums = [1,4,3,2] 输出:4 解释:所有可能的分法(忽略元素顺序)为:(1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3(1, 3), (2, 4) -&

2020-12-28 19:45:54 137

原创 力扣485 最大连续1的个数

力扣485 最大连续1的个数题干给定一个二进制数组, 计算其中最大连续1的个数。示例输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:输入的数组只包含 0 和1。 输入数组的长度是正整数,且不超过 10,000。解析刷到这道题的第一印象就是和之前的力扣053 最大子序和非常相似。可以用动态规划(DP)的思想来解。本题数组是一个线性结构,只需要用一个一维数组即可求解,关键是如何找出当前元素和上一个元素之间的

2020-12-28 18:50:34 114

原创 力扣448 找到所有数组中消失的数字

力扣448 找到所有数组中消失的数字题干给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例输入:[4,3,2,7,8,2,3,1]输出: [5,6]解析说一下本人怎么理解本题的。首先给定数组长度为n ,正常来说是可以满足 数字

2020-12-27 21:55:42 204

原创 力扣088 合并两个有序数组

力扣088 合并两个有序数组题干给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m +n)来保存 nums2 中的元素。示例输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5

2020-12-07 16:39:54 133

原创 力扣066 加一

力扣066 加一题干给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。输入:digits = [0]输出:[1]解析1、常规法本题的常

2020-12-06 21:39:11 95

原创 力扣053 最大子序和

力扣053 最大子序和题干给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解析子序和这个问题研一考算法的时候考过,所以有印象是考察动态规划(DP)的题目,所以也就往那方面思考了,数组作为一个线性结构,解本题也是用不到二维数组的,用一维数组就足够了。我们可以构造一个新数组results,长度和原数组num

2020-12-06 20:11:26 129

原创 力扣035 搜索插入位置

力扣035 搜索插入位置题干给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例输入: [1,3,5,6], 5输出: 2输入: [1,3,5,6], 2输出: 1输入: [1,3,5,6], 7输出: 4输入: [1,3,5,6], 0输出: 0解析本题的标签中有一个二分查找,但是我现在还不想思考二分查找的方法,感觉脑子不够用了,所以就用O(N)的方法吧,二分

2020-12-06 17:59:48 122

原创 力扣027 移除元素

力扣027 移除元素题干给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。给定 nums = [0,1,2,

2020-12-06 17:40:09 107

原创 力扣026 删除排序数组中的重复项

力扣026 删除排序数组中的重复项题干给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长

2020-12-06 15:14:43 138

原创 力扣001 两数之和

力扣001 两数之和题干给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]解析1、暴力破解——双循环主要想法:外循环遍历全部元素,确定第一个数 num1。确定num1后,从nu

2020-12-05 20:46:08 108 1

原创 Python组 入门训练 BEGIN-4 Fibonacci数列

蓝桥杯 入门训练 BEGIN-4 Fibonacci数列题干要求:资源限制时间限制:1.0s 内存限制:256.0MB问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10007的余数。说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先

2020-12-04 21:41:34 140

原创 Python组 入门训练 BEGIN-3 圆的面积

蓝桥杯 入门训练 BEGIN-3 圆的面积题干要求:资源限制时间限制:1.0s 内存限制:256.0MB问题描述给定圆的半径r,求圆的面积。输入格式输入包含一个整数r,表示圆的半径。输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。说明:在本题中,输入是一个整数,但是输出是一个实数。对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为

2020-12-04 20:06:23 284

原创 Python组 入门训练 BEGIN-2 序列求和

蓝桥杯 入门训练 BEGIN-2 序列求和题干要求:资源限制时间限制:1.0s 内存限制:256.0MB问题描述求1+2+3+…+n的值。输入格式输入包括一个整数n。输出格式输出一行,包括一个整数,表示1+2+3+…+n的值。样例输入4样例输出10样例输入100样例输出5050数据规模与约定1 <= n <= 1,000,000,000。说明:请注意这里的数据规模。本题直接的想法是直接使用一个循环来累加,然而,当

2020-12-04 19:40:38 173

原创 Python组 入门训练 BEGIN-1 A+B问题

入门训练 BEGIN-1 A+B问题题干要求:资源限制时间限制:1.0s 内存限制:256.0MB问题描述输入A、B,输出A+B。说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。输入格式输入的第一行包括两个整数,由空格分隔,分别表示A、B。说明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式。做题时你应该假设所给的输入是一定满足输入格式的要求的,所以你不需要对输入的格式进行检查。多余的格式检查可能会适得其反,使用你的程序错误。在测试的

2020-12-04 18:05:46 224

原创 Pygame 外星人入侵(10)计分板

目录引言一、游戏难度的提升1、提升速度2、何时提升速度3、重置速度二、计分板功能1、玩家的得分2、绘制玩家得分3、提高玩家得分4、优化1:正确计算每一只外星人的分数5、优化2:外星人分数提升6、优化3:将得分标准化三、计分板的其他功能1、玩家最高得分2、玩家等级4、余下的飞船数四、总结引言本篇博文是《外星人入侵》系列的完结篇,在之前的博文中,我们实现了游戏的绝大多数功能并将相关代码封装起来,方便修改。在本完结篇中,我们将要实现的功能有二:1、游戏难度的提升2、计分板的实现一、游戏难度的提升既然

2020-08-10 00:27:13 1150 3

原创 Pygame 外星人入侵(9)开始按钮

目录引言一、定义按钮基类1、按钮的构成2、在按钮上渲染文本3、将按钮和文本“组合”二、绘制开始按钮1、修改游戏设置2、创建开始按钮实例3、修改绘制屏幕方法三、游戏开始和游戏失败时开启游戏1、检测玩家点击按钮的事件2、点击开始按钮后的业务3、修改主模块逻辑四、小结引言直到上一篇博文为止,我们实现了《外星人入侵》这款有中飞船、外星人、子弹的绘制和移动,以及它们之间的碰撞检测。在这篇博文中,将要实现为游戏增加“开始按钮”。一、定义按钮基类由于 pygame 不提供原生的按钮类供我们使用,因此我们需要自己

2020-08-08 02:01:58 1344

原创 Pygame 外星人入侵(8)互相伤害

目录引言一、子弹击落外星人1、子弹和外星人碰撞检测2、调用碰撞检测方法二、外星人击落飞船1、飞船和外星人碰撞检测2、飞船和外星人碰撞后的业务3、重构 update_aliens()三、外星人触底1、外星人和屏幕的碰撞检测2、代码整合封装四、设置飞船数量和游戏状态1、设置玩家飞船数2、设置游戏的活跃状态3、修改碰撞后的业务4、修改游戏主循环代码五、小结引言到这篇博文位置,我们对《外星人入侵》这款游戏中的游戏元素进行了绘制,游戏元素的移动进行了完善。我们已经可以在屏幕上移动飞船,发射子弹;同时屏幕上方的外

2020-08-06 23:30:26 346

原创 Pygame 外星人入侵(7)外星人压境

Pygame 外星人入侵(7)外星人压境目录Pygame 外星人入侵(7)外星人压境一、外星人单向移动1、设置外星人移动速度2、更新外星人的位置3、修改主模块二、更加合理地移动1、碰撞检测2、碰撞后的业务3、整群外星人的碰撞检测4、修改主模块方法三、小结在之前的博文中,实现了在屏幕上绘制一大群外星人,现在我们想让这群外星人动起来,它们的移动遵循着一定的规律。一、外星人单向移动我们首先要实现的是,如何让一群外星人一起向屏幕右侧移动。1、设置外星人移动速度游戏参数性质的变量统一存放在 设置模块中的设

2020-08-05 22:52:53 310

原创 Pygame 外星人入侵(6)外星人大军

Pygame 外星人入侵(6)外星人大军目录Pygame 外星人入侵(6)外星人大军一、绘制单个外星人1、初始化外星人2、将外星人绘制到屏幕左上角3、修改update_screen()二、绘制一行外星人1、每行要绘制多少个外星人2、循环生成一行外星人3、修改主模块三、绘制一群外星人1、总共要绘制多少行外星人2、循环绘制一群外星人四、小结直到上一篇博文为止,我们实现了游戏屏幕的绘制、飞船的绘制、飞船的移动以及子弹的绘制和发射。之后将要实现的是外星人的绘制。大致分为这几步:1、绘制单个外星人2、绘

2020-08-05 18:35:18 319

原创 Pygame 外星人入侵(5)发射子弹

Pygame 外星人入侵(5)发射子弹目录Pygame 外星人入侵(5)发射子弹引言一、定义子弹类1、增加子弹相关的设置参数2、新增子弹模块3、定义子弹类二、发射子弹1、实现发射逻辑2、优化1:删除出界的子弹3、优化2:限制子弹数量三、代码封装四、小结引言在之前的博文中,我们实现了游戏屏幕的绘制、飞船的绘制以及玩家通过按键来操控飞船移动的功能。在这篇博文中,将会完成让玩家飞船发射子弹的功能。一、定义子弹类我们既然要 “发射”“子弹”,那么首先就必须要有可发射的“子弹”。所以我们需要自己定义一个

2020-08-01 13:11:16 1565 2

原创 Pygame 外星人入侵(4)飞船移动

Pygame 外星人入侵(4)飞船移动目录Pygame 外星人入侵(4)飞船移动引言一、移动飞船1、响应玩家按键2、修改飞船的坐标二、优化1:连续移动1、设置飞船移动的状态属性2、响应事件以修改状态3、update() 修改飞船位置4、修改主模块代码三、左右移动四、优化2:调整飞船的速度1、设置速度参数2、完善飞船调速(有点啰嗦)五、优化3:限制飞船活动范围六、封装代码七、小结引言直到上一篇博文为止,我们实现了:1、游戏屏幕的绘制2、飞船的初始化和绘制3、现有代码的封装和重构实现效果:在这

2020-07-31 17:04:07 1210 2

原创 Pygame 外星人入侵(3)

Pygame 外星人入侵(3)目录Pygame 外星人入侵(3)引言一、重构事件循环1、自定义模块 game_functions2、封装函数 check_events()3、主模块代码缩减二、重构屏幕更新1、封装函数 update_screen()2、主模块代码缩减三、小结引言到这里为止,我们已经可以在一个 Pygame 游戏屏幕上绘制并显示出一架飞船了,且飞船的位置是我们所心仪的。那么在这部分,我们要对现有的代码做一下重构。目的是简化主模块的代码量。一、重构事件循环在第一篇链接: https:

2020-07-28 13:15:21 261

原创 Pygame 外星人入侵(2)

Pygame 外星人入侵(2)目录Pygame 外星人入侵(2)引言一、飞船类1、飞船图片的准备2、定义飞船类3、飞船类的构造函数4、飞船类的实例方法二、显示飞船到屏幕上1、飞船类的导入2、实例化飞船3、绘制飞船三、小结引言从上一篇截止的地方开始,我们将在这一篇博文中:1、编写飞船类的代码2、初始化一架 垂直位置居中、水平位置靠屏幕底端的飞船3、将这架飞船显示到上一篇的屏幕上一、飞船类我们现在有了一块 Pygame 游戏屏幕,现在要往屏幕上加元素,比如我们将要操控的飞船。因此,我们需要单独

2020-07-28 11:15:28 381

原创 Pygame 外星人入侵(1)

Pygame外星人入侵(1)引言:最近从零开始学习python,在看了一些视频后,认识到了看书的重要性,于是选择了基本口碑很不错的Python书籍,目前正在阅读的就是《Python编程:从入门到实践》这本,目前第一部分(基础知识)已经阅读完了,现在要进行第二部分中第一个项目的编写(共3个项目),那就外星人入侵。写这个博文的目的是记录自己学习pygame的一些过程。一、安装pygamePygame是我们编写游戏所需的包,书中给出了不同操作系统下的安装方法,这里我个人没有按照书上的方法来安装,而是在

2020-07-28 07:07:05 716 2

原创 关于Python列表的一道题

关于Python列表的一道题前因后果做题思路流程代码调试思考和猜想append()函数解决方法修改后的代码小结前因后果list1=[1,2,3,4],怎么做才能得到 [2,3,4],[1,3,4],[1,2,4],[1,2,3]最近在学习Python,今天学习了Python中的列表,于是上CSDN上看看相关的帖子和学习心得。于是浏览到了这篇帖子List.index()方法详解在这篇帖子的最后,作者留了一道题目,也就是标题看到的题目,刚学了列表,于是就上手试着写了一下做题思路观察原列表 list

2020-07-09 20:51:43 563

原创 Xenomai 3.0.5 and ROS1 on Ubuntu16.04 安装手册

Xenomai 3.0.5 and ROS1 on ubuntu 16.04安装手册由于本人对于ubuntu和Xenomai信息获取不佳,以及对外网的浏览的不熟练,导致刚开始安装Xenomai的整个流程很慢,而且也遇到了很多错误。因此,在安装流程中会写出一些我遇到的错误以及我个人的解决方法。根据电脑配置原因和实验需要,所以准备把ubuntu系统安装到实验室的台式机上,而不是在笔记本的...

2020-01-13 23:21:29 3134 11

空空如也

空空如也

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

TA关注的人

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