自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [译] 充分利用多摄像头 API

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。【Android思维脑图(技能树)】

2024-05-17 02:29:40 615

原创 Unity技术-GameFramework文档系列(五)- 创建实体(2)

👉前提👉实践过程经历前面文章创建UI的过程,这一步操作起来就顺心多了,坑也少了。同样需要创建预制体(物体模型)预制体上需要挂载继承了【EntityLogic】的脚本走走走,预制体出来我们就要开始创建了,代码先获取实体组件再创建实体这和UI基本如出一辙昂,再回忆回忆和UI都是预制体,传递的参数都是预制体路径和分组。等等-分组,差点忘记了需要在框架的基础组件中添加分组小空在学习木头前辈的教程中留意到:这种带有路径的预制体加载方式,实际打包后会不会出现调用不到的问题。给出的答案是:不管是打不打包,框架都会处理

2024-05-17 00:46:13 940

原创 Redis事务详述

Redis事务相关的指令有五个,分别是MULTI、EXEC、DISCARD、WATCH、UNWATCH指令指令作用返回值MULTI| 标记一个事务块的开始 | 总是返回 OK |EXEC| 执行所有事务块内的命令 | 事务块内所有命令的返回值,按命令执行的先后顺序排列。当操作被打断时,返回空值 nil |DISCARD| 取消事务,放弃执行事务块内的所有命令,如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH | 总是返回 OK |WATCH。

2024-05-16 21:51:16 646

原创 LiveData+Retrofit网络请求实战(1)

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

2024-05-16 17:16:26 291

原创 Kotlin关键字与操作符(1)

给大家送上我成功跳槽复习中所整理的资料,由于文章篇幅有限,所以只是把题目列出来了《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!题目列出来了[外链图片转存中…(img-dBjFLS41-1715846365667)][外链图片转存中…(img-yombAycI-1715846365670)][外链图片转存中…(img-07sWpitY-1715846365672)]《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门。

2024-05-16 15:59:38 392

原创 Jetpack之LiveData修炼秘籍:文章+视频,学不会来打我

现在随着短视频,抖音,快手的流行NDK模块开发也显得越发重要,需要这块人才的企业也越来越多,随之学习这块的人也变多了,音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。

2024-05-16 14:40:54 355

原创 hencoder学习自定义view(1)

canvas.drawText(“rikkatheworld”,100,100,paint);这三个值为透明度和三原色,实际运用setARGB和setColor效果是一样的paint.setARGB(100,255,0,0);canvas.drawRect(0,0,200,200,paint);setShader(Shader shader) 设置 除了给paint直接设置颜色,还可以给paint设置,它是一个着色器,是一套设置颜色的方案。当设置了Shader后,Paint就不会使用setColor或者se

2024-05-16 13:02:11 309

原创 GitHub标星5-3K,字节跳动大神教你Android-实现登录界面和功能实例,就你还不会!

JSONArray array = new JSONArray(); for (User user : users) { array.put(user.toJSON()); } try { out = context.openFileOutput(FILENAME, Context.MODE_PRIVATE); // 覆盖 writer = new OutputStreamWriter(out); Log.i(TAG, “json的值:” + array.toString()); writer.write(

2024-05-16 11:19:27 364

原创 OkHttp流程分析(1)

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

2024-05-16 01:52:02 1010

原创 LeakCanary源码分析以及ContentProvider的优化方案

现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!Android架构师之路很漫长,一起共勉吧!

2024-05-16 00:10:08 896

原创 Kotlin(2)-泛型与集合(1)

*要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!**要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。[外链图片转存中…(img-mwRxIvZA-1715785254605)]

2024-05-15 23:01:07 735

原创 Hello,Jenkins

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

2024-05-15 18:51:10 330

原创 GitHub标星5-3K,字节跳动大神教你Android-实现登录界面和功能实例,就你还不会!

JSONArray array = new JSONArray(); for (User user : users) { array.put(user.toJSON()); } try { out = context.openFileOutput(FILENAME, Context.MODE_PRIVATE); // 覆盖 writer = new OutputStreamWriter(out); Log.i(TAG, “json的值:” + array.toString()); writer.write(

2024-05-15 17:24:41 356

原创 Unity-2D游戏开发套件指南-免费资源

我们将分享使用2D游戏开发套件创建场景、绘制及测试关卡、添加移动平台、触发开门动作、游戏中的敌人、摧毁对象、传送玩家。你可以访问Asset Store资源商店下载2D游戏开发套件:在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

2024-05-15 14:13:20 794

原创 Redis持久化AOF与RDB全面解析(大厂面试必问,看完之后offer直接到手,你学废了吗?)

RDB持久化方案进行备份时,Redis会单独fork一个子进程来进行持久化,会将数据写入一个临时文件中,持久化完成后替换旧的RDB文件。在整个持久化过程中,主进程(为客户端提供服务的进程)不参与IO操作,这样能确保Redis服务的高性能,RDB持久化机制适合对数据完整性要求不高但追求高效恢复的使用场景。

2024-05-15 12:36:54 279

原创 OpenCV开发之——人脸识别库生成so文件

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

2024-05-15 07:27:50 747

原创 Listview与RecyclerView对比浅析【重点对比缓存】

RV优势a.mCacheViews的使用,可以做到屏幕外的列表项ItemView进入屏幕内时也无须bindView快速重用;b.mRecyclerPool可以供多个RecyclerView共同使用,在特定场景下,如viewpaper+多个列表页下有优势.缓存区别====1,封装了viewholder,Listview需要自己写ViewHolder缓存,而RecyclerView已经帮我们实现了。2,RecyclerView的缓存机制有了加强,ListView是2级缓存,而RecyclerView实现了4级缓

2024-05-15 05:47:15 553

原创 Kotlin中_和!!的区别

说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有。

2024-05-15 04:34:22 455

原创 jetpack-ViewModel 源码解析

为了方便有学习需要的朋友,我把资料都整理成了视频教程(实际上比预期多花了不少精力)当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

2024-05-15 03:15:04 956

原创 Hello,Jenkins

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

2024-05-15 01:38:34 889

原创 GitHub标星5-3K,字节跳动大神教你Android-实现登录界面和功能实例,就你还不会!

JSONArray array = new JSONArray(); for (User user : users) { array.put(user.toJSON()); } try { out = context.openFileOutput(FILENAME, Context.MODE_PRIVATE); // 覆盖 writer = new OutputStreamWriter(out); Log.i(TAG, “json的值:” + array.toString()); writer.write(

2024-05-15 00:11:35 745

原创 zookeeper使用篇-Zookeeper Api实践

**data[]**是创建节点的时候对应存储的内容acl是创建节点的时候的策略createMode是创建节点的时候指定的节点类型,通常指定四种类型(实际不止):1.持久化节点–PERSISTENT2.持久化顺序节点–PERSISTENT _ S E QUENTIAL3.临时节点–EPHEMERAL4.临时顺序节点-- EPHEMERAL _ S EQUENTIALcb是注册一个异步回调函数,类型为StringCallback,一般重写void processResult( int rc , String

2024-05-14 22:06:57 889

原创 Studio-4-1-放了个大招,期待已久的动态数据库工具终于来了!

Sunflower 应用的 UI 包含两个标签页。先看一下植物目录标签页,里面列出了可以添加到我的花园的植物。在右上角有一个筛选按钮,点击该按钮会按生长区筛选植物,出现如下列表:可以很直观地看到,这个按钮会根据一些条件来筛选植物。假设我们对整个工程完全不了解,希望通过 Database Inspector 来搞清楚如何实现筛选功能。从菜单栏依次选择 View > Tool Windows > Database Inspector,就能在 Android Studio 里打开 Database Inspect

2024-05-14 20:20:51 690

原创 ReactNative 常用开源组件(2)

不错的按钮https://github.com/mastermoo/react-native-action-buttonhttps://github.com/ide/react-native-button输入框表单验证https://github.com/gcanti/tcomb-form-nativehttps://github.com/FaridSafi/react-native-gifted-formhttps://github.com/bartonhammond/snowflake炫酷效果的 Tex

2024-05-14 18:47:15 896

原创 OkHttp 3(2)

到这里,我就大体把OkHttp的层次设计概括了一遍,这些内容都是我自己读源码的理解,因此总会有不对的地方。其实读源码是必须自己打开编辑器去读的,你可以参考网上的文章,但是你如果不亲自去研读的话,是挺难理解的,也无法确定它的正确性。所以我也希望小伙伴能看了我的文章之后能够亲自去研读相关的源码,然后对比我的理解,大家相互交流,后面我也会继续带来这个系列的其他文章。

2024-05-14 17:28:08 951

原创 Kotlin:字符串(String)(2)

一线互联网Android面试题含详解(初级到高级专题)这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率如果设置门槛,很多开发者朋友会因此错过这套高级架构资料,错过提升成为架构师的可能。这就失去了我们的初衷;让更多人都能通过高效高质量的学习,提升自己的技术和格局,升职加薪。最后送给大家一句话,望共勉,永远不要放弃自己的梦想和追求;

2024-05-14 15:45:30 811

原创 Kotlin 在Android开发中那些让人舒适的地方(2)

val userInfo: UserInfo by lazy { UserInfo() }lateinit var person: InvationPerson4方便易读的循环===================================================================Kotlin有区间的概念,这个概念让创建循环更加易读方便。// print :0 1 2 3 4 5 6 7 8 9 10for (i in 0…10) {print("$i ")}// print :

2024-05-14 14:36:52 756

原创 hibernate学遇到的错误(1)

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了5、6年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。不断奔跑,你就知道学习的意义所在!

2024-05-14 03:23:12 751

原创 GitHub标星7-5K!Android-超级稳定且高效的UI适配方案【建议收藏】(1)

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶注解原理丶注解原理丶序列化Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)代码框架结构优化(数据结构丶排序算法丶设计模式)APP性能优化(用户体验优化丶适配丶代码调优)热修复丶热升级丶Hook技术丶IOC架构设计。

2024-05-14 01:52:57 770

原创 [译] MDC-102 Flutter:Material 结构和布局(Flutter)

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

2024-05-13 20:51:50 904

原创 Unity-3D游戏开发套件指南(入门篇)-免费资源(1)

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。Android 基础知识点Java 基础知识点Android 源码相关分析常见的一些原理性问题。

2024-05-13 19:13:24 957

原创 Redis精通系列——LFU算法详述(Least Frequently Used - 最不经常使用)(2)

Redis对象头中的lru字段,在LRU模式下和LFU模式下使用方式并不相同。​在LRU模式,lru字段存储的是key被访问时Redis的时钟server.lrulock(Redis为了保证核心单线程服务性能,缓存了Unix操作系统时钟,默认每毫秒更新一次,缓存的值是Unix时间戳取模2^24)。当key被访问的时候,Redis会更新这个key的对象头中lru字段的值。因此在LRU模式下,Redis可以根据对象头中的lru字段记录的值,来比较最后一次key的访问时间。​用Java代码演示一个简单的Redis

2024-05-13 17:37:56 888

原创 offer求比较+部分大厂Android面经+真题解析(1)

下面是OPPO技术面的面经(总体感觉上好像并没有什么特别的难度吧)其他公司的面经另外有做整理,有兴趣的朋友可以自己去看 【指路 ↓】 【https://www.jianshu.com/p/4d30f01372c9】常 见 的 Activity 类 型+描述Activity 生命周期 Activity 从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回 调方法,这些回调方法包括:onCreate onStart onResume onPause onStop onDestroy 其实这些方法都

2024-05-13 15:11:29 1044

原创 Kotlin:lifecycleScope与GlobalScope以及MainScope的区别,详细分析为什么在Android中推荐使用lifecycleScope!

会不会有什么好奇为什么SupervisorJob() + Dispatchers.Main以及上面刚开始写的Dispatchers.Main + coroutineExceptionHandler,是个什么鬼,为什么可以加呢。在协程内部操作的过程中调度器、异常处理都是从CoroutineContext里面取的,包括作用域分发异常,也是从上下文中取得得父子协程。调度器是协程的拦截器(在挂起函数恢复时调用),然后使用continuation包装调用然后达到在另一个线程调度的效果。但是是有使用限制的。

2024-05-13 13:29:37 453

原创 Kotlin 协程总结

不过,我们学习 Kotlin 中的协程,一开始确实可以从线程控制的角度来切入。因为在 Kotlin 中,协程的一个典型的使用场景就是线程控制。就像 Java 中的 和 Android 中的,Kotlin 中的协程也有对 Thread API 的封装,让我们可以在写代码时,不用关注多线程就能够很方便地写出并发操作。下面的例子是使用协程进行网络请求获取用户信息并显示到 UI 控件上:launch({val user = api.getUser() // 👈 网络请求(IO 线程)nameTv.text = u

2024-05-13 12:21:47 738

原创 hencoder学习自定义view(1)

canvas.drawText(“rikkatheworld”,100,100,paint);这三个值为透明度和三原色,实际运用setARGB和setColor效果是一样的paint.setARGB(100,255,0,0);canvas.drawRect(0,0,200,200,paint);setShader(Shader shader) 设置 除了给paint直接设置颜色,还可以给paint设置,它是一个着色器,是一套设置颜色的方案。当设置了Shader后,Paint就不会使用setColor或者se

2024-05-13 09:27:02 888

原创 Github标星5-8K今年最热门技术-Android-MVP-阿里大牛-倾情-详解(上)(1)

三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。(参考自:百度百科)

2024-05-13 07:59:28 874

原创 [译] MDC-102 Flutter:Material 结构和布局(Flutter)

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

2024-05-13 03:56:50 536

原创 Unity-3D游戏开发套件指南(入门篇)-免费资源(1)

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。Android 基础知识点Java 基础知识点Android 源码相关分析常见的一些原理性问题。

2024-05-13 02:17:55 914

原创 Redis精通系列——LFU算法详述(Least Frequently Used - 最不经常使用)(3)

/ 4 bytes 引用计数void *ptr;// 8 bytes (64位操作系统),指向对象具体的存储地址/对象bodyRedis对象头中的lru字段,在LRU模式下和LFU模式下使用方式并不相同。​。

2024-05-13 00:42:22 716

空空如也

空空如也

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

TA关注的人

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