自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 资源 (1)
  • 收藏
  • 关注

原创 《Unix环境高级编程》chapter16 网络IPC:套接字

文章目录chapter16 网络IPC:套接字套接字描述符寻址建立连接数据传输带外数据chapter16 网络IPC:套接字套接字描述符为创建一个套接字,调用socket函数/*domain: 通信域type: 套接字类型protocol: 协议*/int socket(int domain,int type,int protocol); //若成功,返回文件(套接字)描述符套接字通信域分为:域描述AF_INETIPv4因特网域AF_INET6IPv

2021-05-18 11:32:42 371 1

原创 《Unix环境高级编程》chapter15 进程间通信

文章目录chapter15 进程间通信引言管道FIFOXSI IPC消息队列信号量共享存储POSIX信号量chapter15 进程间通信引言进程间通信(InterProcess Communication ,IPC),包括管道、命名管道(FIFO)和XSI IPC的三种形式IPC(消息队列、信号量和共享存储),以及POSIX提供的替代信号量机制。管道//创建管道int pipe(int fd[2]); //fd[0]为读端,fd[1]为写端所有UNIX系统都提供了管道通信,管道有以下两

2021-05-11 11:00:22 440

原创 [每天一道面试题 c++] Day15 new和malloc的区别?

Day-15问题new和malloc的区别?参考答案参考:细说new与malloc的10点区别malloc和new的区别【C++】new和malloc的区别经典面试题之new和malloc的区别理解C++ new-handler机制C++中delete和delete[]的区别new和malloc主要有以下几点区别:1. new会调用对象的构造函数完成对象的构造;而malloc不会,这也是两者最大的区别class A{ public: A(int a=

2021-04-23 14:48:28 469

原创 《Unix环境高级编程》chapter13 守护进程

文章目录chapter13 守护进程守护进程编写规则出错记录chapter13 守护进程守护进程(daemon)是生存期长的一种进程,它们常常在系统引导装入时启动,仅在系统关闭是才终止。注意,大多数守护进程都以超级用户(root)特权运行。所有的守护进程都没有控制终端,其终端名设置为问号。最后,应当引起注意的是用户层守护进程的父进程是init进程。守护进程编写规则在编写守护进程程序时需遵循一些基本规则:首先要做的是调用umak将文件模式创建屏蔽字设置为一个已知值(通常是0)调用fork,然后

2021-04-23 11:58:07 259

原创 《Unix环境高级编程》chapter14 高级I/O

文章目录chapter14 高级I/O非阻塞I/O记录锁I/O多路转接POSIX异步I/O函数readv和writev存储映射I/Ochapter14 高级I/O非阻塞I/O非阻塞I/O使我们可以发出open、read和write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则调用立刻出错返回,表示该操作如继续执行将阻塞。对于一个给定的描述符,有两种为其指定非阻塞I/O的方法:如果调用open获得描述符,则可指定O_NONBLOCK标志对于已经打开的一个描述符,则可调用fc

2021-04-23 11:56:13 336

原创 [论文阅读 2020 Arxiv 自监督对比学习]Exploring Simple Siamese Representation Learning

简介paper:Exploring Simple Siamese Representation Learningcode:暂未开源,可参考PatrickHua/SimSiamKaiming He大神的自监督学习新作。这篇论文相比于之前的SimCLR、BLOY,不需要negative sample pairs、large batches、momentum encoders,可以说是将基于孪生网络的自监督模型简化到了极致,而这也是这篇论文想引导大家思考的,即基于孪生网络的自监督学习模型中,究竟是什么在起作

2021-04-22 19:45:27 2828

原创 [每天一道面试题 c++] Day14 C++源文件从文本到可执行文件经历的过程?

Day-14问题C++源文件从文本到可执行文件经历的过程?参考答案参考:一个C++源文件从文本到可执行文件经历的过程C++源文件到可执行文件的过程一个C++源文件从文本到可执行文件经历的过程C++源文件到可执行文件分为四个阶段:预处理,编译,汇编和链接.预处理预处理是对C++源文件进行编译前的预备处理,预处理后将得到一个.i后缀的预处理文件.//g++ 预处理指令g++ -E helloworld.cpp -o helloworld.i预处理主要完成以下工作:去除#d

2021-04-22 11:16:44 154

原创 [每天一道面试题 c++] Day13 介绍一下STL的allocator

Day-13问题介绍一下STL的allocator参考答案参考:《STL源码剖析》chapter2 空间配置器STL allocator封装了STL容器在内存管理上的底层细节。我们日常所习惯的内存分配是使用new运算符,内存释放是使用delete运算符。而new运算符实际包含两个步骤:调用全局::operator new分配内存(实际上就是调用malloc分配内存)调用对象相应的构造函数来构造对象同理,delete运算符也包含两个步骤:调用对象相应的析构函数来析构对象调用全局

2021-04-20 10:57:05 294

原创 [论文阅读 2019 CVPR 目标跟踪]Unsupervised Deep Tracking

简介paper:Unsupervised Deep Trackingcode:594422814/UDT_pytorch这篇论文的亮点在于通过无监督学习的方式来进行目标跟踪,且取得了与监督学习模型相当的精度。论文的基本思想是:首先将当前帧作为template frame,后一帧作为Search frame,从而得到响应RSR_SRS​,之后反过来,将后一帧作为template frame同时以预测结果RSR_SRS​作为其标签,然后当前帧作为Search frame预测当前帧的响应RTR_TRT​,

2021-04-19 19:44:08 501

原创 [每天一道面试题 c++] Day12 map和set的区别?分别是怎么实现的

Day-12问题map和set的区别?分别是怎么实现的。参考答案参考:《STL源码剖析》chapter5 关联式容器set与mapmap和set的底层都是通过红黑树实现的,map和set的区别有:map中的元素是key-value(关键字-值)对;而set中的元素是关键字;map和set都不允许插入重复元素。set的迭代器是const的(底层是通过使用红黑树的const iterator),所以不允许修改元素的值;map允许修改value的值,但是不允许修改key的值;map和set都不

2021-04-19 10:51:26 422

原创 [每天一道面试题 c++] Day11 请你说一下fork函数

Day-11问题请你说一下fork函数参考答案fork函数的作用是在一个已经存在的进程中创建一个新进程,这个新进程称为子进程,原进程称为父进程。子进程是父进程的副本。由于我们知道程序=代码+数据,对于代码(正文段),父子进程是共享的,而对于数据(堆栈等),子进程是通过写时拷贝来保证数据的独立性(具体可以参考Linux fork函数深度解析(写时拷贝+进程终止(exit)+进程等待(wait,waitpid)))。fork一般有两种用法:一个父进程希望复制自己,使父进程和子进程同时执行不同

2021-04-17 15:07:01 210

原创 [每天一道面试题 c++] Day10 为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数? 构造函数可以是虚函数吗?

Day-10问题为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数? 构造函数可以是虚函数吗?参考答案为什么析构函数必须是虚函数?将被继承的父类的析构函数设置为虚函数后,可以保证在new申请一个子类对象,并使用基类指针指向该对象,当释放该基类指针时可以保证子类的析构函数被执行,从而释放子类的空间,避免内存泄露。为什么C++默认的析构函数不是虚函数?因为虚函数需要额外的虚函数表和虚表指针,需要占用额外的内存,只有当作为父类时才会将析构函数设置为虚函数,这样可以避免不必要的内存浪

2021-04-15 18:37:16 306

原创 《Unix环境高级编程》chapter12 线程控制

文章目录chapter12 线程控制线程属性线程特定数据同步属性重入例子:getenv的线程安全版本chapter12 线程控制线程属性每个线程对象可以关联一个属性对象,该属性对象通过初始化函数初始化,通过销毁函数销毁,可以通过相关取值/设值函数读取/修改属性值。#include<pthread.h>//两个函数的返回值:若成功,返回0;否则,返回错误编号int pthread_attr_init(pthread_attr_t* attr) //初始化线程属性in

2021-04-14 22:17:29 265

原创 [每天一道面试题 c++] Day9 请你实现c++中的shared_ptr

Day-9问题请你实现c++中的shared_ptr参考答案参考:面试题:简单实现一个shared_ptr智能指针shared_ptr的核心是通过一个引用计数来统计指向对象的指针数量,当该引用计数为0时则释放对象资源。#include<iostream>#include<mutex>using namespace std;template<typename T>class my_shared_ptr{ private: i

2021-04-14 11:42:25 291

原创 [论文阅读 2020 CVPR 目标跟踪]Siamese Box Adaptive Network for Visual Tracking

简介paper:Siamese Box Adaptive Network for Visual Trackingcode:hqucv/siamban这篇论文和SiamCAR的思想有点撞车,都是发现SiamRPN系列的跟踪算法需要预先设置好anchor bbox的相关参数,而这需要花费很多精力去调整这些参数。基于这个动机,这篇论文通过FCN对目标的bbox进行端到端的回归训练得到。主要内容如上图所示是这篇论文中SiamBAN的网络结构。不同于SiamRPN系列跟踪器,该模型将跟踪划分为一个分类任

2021-04-13 18:56:23 729 1

原创 [每天一道面试题 c++] Day8 讲讲你理解的c++四大智能指针

Day-8问题讲讲你理解的c++四大智能指针参考答案参考:C++里面的四个智能指针C++中的四个智能指针 博客园Auto_ptr被废弃的原因智能指针实际上是实现了RAII思想:资源在构造期间获得,在析构期间释放。将智能指针实现为一个类,在这个类构造时申请空间,当这个类离开作用域时,析构函数被调用从而使得申请的空间自动释放,尽可能地避免了内存泄露。c++中有四个智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr,其中auto_ptr已经被c++1

2021-04-13 11:14:17 273

原创 [每天一道面试题 c++] Day7 请讲讲你理解的c++中的引用和指针

Day-7问题请讲讲你理解的c++中的引用和指针参考答案引用是某一变量的别名,而指针的值是一个地址,通过它能找到以它为地址的内存单元。区别:指针本身就是一个对象,而引用不是对象,C++中对象是一块能存储数据并具有某种类型的内存空间指针不一定需要初始化,而引用必须被初始化,且引用的初始值必须是一个对象指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被改变指针可以有多级指针,比如指向指针的指针,而引用只有一级,一个引用不能再指向另一个引用使用sizeof看一个指针的大小

2021-04-12 21:22:29 132

原创 [论文阅读 2019 CVPR 目标跟踪]Target-Aware Deep Tracking

简介paper:Target-Aware Deep Trackingcode:XinLi-zn/TADT这篇论文的动机是:在跟踪时,提取到的深度特征发挥的作用并不大。作者认为主要是三方面的原因造成的:首先,预训练的CNN特征与目标并不相关,后者很可能不会出现在正式的训练数据中;其次,预训练的CNN专注于增加类间差异,而对类内差异不敏感(如下图所示);在实际跟踪一个具体目标时,只有很少的filter处于活动状态;针对上面提及的这些问题,作者提出了Target-aware跟踪器。主要内容

2021-04-12 21:01:32 629

原创 [论文阅读 2018 ECCV 目标跟踪]Distractor-aware Siamese Networks for Visual Object Tracking

简介paper:Distractor-aware Siamese Networks for Visual Object Trackingcode:foolwood/DaSiamRPN参考:ECCV视觉目标跟踪之DaSiamRPN的评论区~这篇论文是在SiamRPN的基础上改进的。论文提出的动机主要有两点:一是在之前的siamese跟踪器只能区分开前景和无语义的背景(non-semantic background,这里所谓的non-semantic是指not real object,just back

2021-04-10 21:46:20 261 1

原创 [每天一道面试题 c++] Day6 说一说C++中四种类型转换

Day-6问题说一说C++中四种cast转换(即C++中的四种类型转换)参考答案参考:c++ 四种强制类型转换介绍dynamic_cast彻底明白了~C++类型转换之reinterpret_castC++中有四种类型转换(建议看完上面3个参考资料,基本就掌握了):const_cast: 去除对象的const属性static_cast: C++隐式转换都基于此转换实现,可以用于常规类型的转换、基类和派生类之间的向上/向下转换(向下转换由于没有动态类型检查,所以不安全)dynam

2021-04-10 15:48:38 223

原创 [论文阅读 2019 CVPR 目标跟踪]Fast Online Object Tracking and Segmentation: A Unifying Approach

简介paper:Fast Online Object Tracking and Segmentation: A Unifying Approachcode:foolwood/SiamMask参考:[CVPR2019]我对Siamese网络的一点思考(SiamMask)这篇论文提出了一个可同时用于单目标跟踪(SOT)和视频目标分割(VOS)的跟踪模型。当前的单目标跟踪算法普遍采用第一帧的bbox进行初始化,问题在于:有时候仅仅通过bbox并不能很准确地描述目标物体;此外当前的视频目标分割算法速度普遍偏

2021-04-09 20:52:09 260

原创 [每天一道面试题 c++] Day5 判断计算机是大端(Big-endian)还是小端(Little-endian)的

Day-5问题判断计算机是大端(Big-endian)还是小端(Little-endian)的参考答案//利用联合体所有成员都从低地址开始存放int main(){ union test{ int a; char b; } c; c.a=1; //小端时,c.b为1;大端时,c.b为0 if(c.b==1) printf("little endian"); else printf("big endian");

2021-04-09 14:24:27 280

原创 mac下正确安装opencv-contrib-python使用SIFT

opencv-contrib-python是opencv的一个扩展库,如果要使用SIFT或SURF则需要安装此包。然而,现在的opencv-contrib-python 3.4.2以后的版本并不支持SIFT和SURF。所以现在正确安装opencv-contrib-python并使用SIFT的方式是:使用降级的3.4.2.16版本的opencv-python 和 opencv-contrib-python最终环境配置如下:python==3.7.10opencv-python==3.4.2.16o

2021-04-08 11:18:21 962

原创 [每天一道面试题 c++] Day4 请说出const尽可能多的作用

Day-4问题请说出const尽可能多的作用参考答案参考:C++ const的各种用法详解const成员变量C++中的const成员函数和const类对象const在C++中的用法可以分为以下几类:const修饰变量和数组常变量: const + 类型 + 变量名 / 类型 + const + 变量名常数组: const + 类型 + 数组名[大小] / 类型 + const + 数组名[大小]const修饰指针以及引用常引用: const + 类型 + &

2021-04-02 21:17:52 127

原创 [论文阅读 2019 ICCV-oral 目标跟踪]Learning Discriminative Model Prediction for Tracking

简介paper:Learning Discriminative Model Prediction for Trackingcode:visionml/pytracking参考:看懂这篇视觉跟踪算法你就可以超神了Martin持续发力的经典之作Dimp。这篇论文的动机是:首先,当前的siamese跟踪器只重视target的特征而忽略了background信息;其次,当前的siamese跟踪器是离线训练的,而跟踪任务跟踪的目标大部分情况是训练集中所没有的,这就导致算法的在线跟踪时的不可靠;同时,当前大多数

2021-04-02 20:09:26 954

原创 《Unix环境高级编程》chapter11 线程

文章目录chapter11 线程线程概念线程标识线程创建实例:打印线程ID线程终止实例:获取线程退出状态线程同步互斥量实例: 使用互斥量保护数据结构读写锁(也叫做共享互斥锁)条件变量实例:使用条件变量自旋锁屏障乐观锁与悲观锁chapter11 线程线程概念每个线程都包含表示执行环境所必需的信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。一个进程的所有信息对该进程的所有线程都是共享的,包括可执行程序的代码、程序的全局内存和堆内存、

2021-04-02 11:05:27 322

原创 《Unix环境高级编程》chapter10 信号

文章目录chapter10 信号信号概念函数signal实例:捕捉SIGUSR1和SIGUSR2的简单程序不可靠信号可重入函数可靠信号术语和语义函数kill和raise函数alarm和pause信号集、函数sigprocmask和函数sigpending实例:为进程打印信号屏蔽字实例:信号设置和sigprocmask实例函数sigsetjmp和siglongjmp实例:使用siglongjmp恢复信号屏蔽字函数abort函数sleep作业控制信号常见信号总结chapter10 信号信号概念信号是软件中

2021-04-01 20:40:06 202

原创 [论文阅读 2019 CVPR-oral 目标跟踪]ATOM: Accurate Tracking by Overlap Maximization

简介paper:ATOM: Accurate Tracking by Overlap Maximizationcode:visionml/pytracking附上Martin大神的演讲:bilibiliMartin大神的这篇论文的动机是:以往的跟踪器关注点大多在target classification,而没有关注target estimation部分。这篇论文借助IOU-Net来对目标的位置进行更精确的定位,并在多个数据集上取得了SOTA,而且速度还不慢。On the new large-sc

2021-04-01 20:09:11 479

原创 [每天一道面试题 c++] Day3 请说出static尽可能多的作用

Day-3问题请说出static尽可能多的作用参考答案参考:C++中static关键字的总结C++中static关键字的作用可以分为以下五类:面向过程中的作用静态局部变量静态全局变量静态函数面向对象中的作用静态成员变量静态成员函数面向过程中的作用先看下面的例子:#include<iostream>static void fn1(); //声明静态函数static int n=0; //声明静态全局变量static vo

2021-03-27 14:44:48 165

原创 [每天一道面试题 c++] Day2 实现string类的拷贝赋值成员

Day-2问题实现string类的拷贝赋值成员参考答案参考:让我们一步一步实现一个完整的 String 类:构造、拷贝、赋值、移动和析构#include<iostream>#include<cstring>#define DEBUGclass String{ private: char* m_data; public: String(const char* str=nullptr); String

2021-03-26 23:05:06 153

原创 [每天一道面试题 c++] Day1 检查下面代码有什么问题?

DAY-1问题检查下面代码有什么问题?void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ){ char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str );}参考答案错误有:传入GetMemory()函数的形参为字符串指针,在函数内部改变形参的值并不能真正改变传入形参的实际值,所以

2021-03-26 21:34:07 500

原创 [论文阅读 2020 AAAI 目标跟踪]SiamFC++: Towards Robust and Accurate Visual Tracking with Target Estimation

简介paper:SiamFC++: Towards Robust and Accurate Visual Tracking with Target Estimation Guidelinescode:MegviiDetection/video_analyst这篇论文在SiamFC基础上进行了改进,提出了SiamFC++,并在OTB2015,VOT2018,LaSOT,GOT-10k和TrackingNet上取得了SOTA.这篇论文基于以下原则设计了SiamFC++:G1: (decomposit

2021-03-25 22:51:40 1569

原创 [论文阅读 2021 CVPR-oral 目标跟踪]Transformer Meets Tracker Exploiting Temporal Context for Robust Visual

简介paper:Transformer Meets Tracker: Exploiting Temporal Context for Robust Visual Trackingcode:594422814/TransformerTrack盼着盼着它来了!这篇论文将Transfomer引入了单目标跟踪任务中,且取得了很好的效果。这篇论文提供了一个基于Transfomer的中间模块,通过该中间模块可以显著提升提取的特征质量。主要内容不同于原始的Transfomre,这篇论文将encoder和de

2021-03-24 22:45:27 4554 1

原创 《Unix环境高级编程》chapter09 进程关系

文章目录chapter09 进程关系终端登录网路登录进程组会话作业控制shell执行顺序孤儿进程组例子chapter09 进程关系终端登录大多数Linux系统的终端登录方式与BSD终端登录方式大同小异,这里以BSD终端登录为例进行说明.对于上图有以下几点需要注意:当系统自举后,内核创建进程ID为1的进程,也就是init进程:init进程使系统进入多用户模式,init读取文件/etc/ttys,对每一个运行登录的终端设备,init调用一次fork,它所生成的子进程则exec getty程序ge

2021-03-23 12:11:41 156 1

原创 《Unix环境高级编程》chapter08 进程控制(二)

chapter08 进程控制(二)章节知识总结如前面所述,不管进程如何终止,最后都会执行内核中的同一段代码,这段代码为相应进程关闭所有打开描述符,释放它所使用的存储器等。这里对子进程与父进程的结束顺序进行相关讨论:子进程后于父进程结束:对于父进程已经终止的所有进程,它们的父进程都改变为init进程。我们称这些进程由init进程收养。其操作过程大致是:在一个进程终止时,内核逐个检查所有活动进程,以判断它是否是正要终止进程的子进程,如果是,则该进程的父进程ID就更改为1(init进程的ID),这样就

2021-03-22 10:56:05 119

原创 [论文阅读 2021 CVPR 目标跟踪]Graph Attention Tracking

简介paper:Graph Attention Trackingcode:ohhhyeahhh/SiamGAT这篇论文是在SiamCAR的基础上改进的,两篇论文的第一作者是同一个人。这篇论文的动机是:以往的跟踪器都以基于cross-correlation对提取的template feature和search feature进行information embedding,论文作者认为这种方式存在着以下几个缺点:以往跟踪器对template patch提取的一般是以目标中点为中心大小为m∗mm *

2021-03-20 15:34:19 2886 2

原创 《Unix环境高级编程》chapter08 进程控制(一)

chapter08 进程控制(一)章节知识总结每个进程都有一个非负整型表示的唯一进程ID,且进程ID是复用的。当一个进程终止后,其进程ID就成为复用的候选者,大多数UNIX系统实现延迟复用算法,使得赋予新建进程的ID不同于最近终止进程所使用的ID。系统中有一些专用进程:ID为0的进程通常是调用进程,常常被称为交换进程(swapper),该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程;ID为1的进程是init进程,在自举过程结束时由内核调用。获取进程ID的相关函数如下:#in

2021-03-19 23:18:02 136

原创 [论文阅读 2020 CVPR 目标跟踪]SiamCAR: Siamese Fully Convolutional Classification and Regression for Visual

简介paper:SiamCAR: Siamese Fully Convolutional Classification and Regression for Visual Trackingcoe:ohhhyeahhh/SiamCAR这篇论文提出的动机是:SiamRPN系列的跟踪器依赖于RPN来进行Classfication和Regression,而这些基于RPN的跟踪需要设置好anchor boxes相关参数才能达到比较好的跟踪效果,对调参的要求较高。基于此,这篇论文基于一个简单的网络结构,实现了一个

2021-03-19 21:42:43 5725

原创 《Unix环境高级编程》 chapter07 进程环境

chapter07 进程环境章节知识总结在Unix中有8种方式使进程终止,其中5种为正常终止,它们是:从main返回;调用exit;调用_exit或_Exit最后一个线程从其启动例程返回从最后一个线程调用pthread_exit异常终止有3种方式,它们是:调用abort接到一个信号最后一个线程对取消请求做出响应exit、_exit、_Exit这3个函数用于正常终止一个程序,而exit则现在执行一些清理处理,然后返回内核。这3个退出函数都带一个整型参数,称为终止状态(或退出状态

2021-03-19 10:20:08 220

原创 《Unix环境高级编程》chapter06 系统数据文件和信息

chapter06 系统数据文件和信息最近发现APUE实在是太难”啃“了,打算尝试用一种新的方式看这本书,现忽略一些不重要的函数调用,主要关注理论知识。重点知识UNIX系统的正常运行需要使用大量与系统有关的数据文件,比如口令文件、组文件等口令文件在POSIZ.1中也被称为用户数据库,口令文件是/etc/passwd,而且是一个ASCII文件,其中各字段之间用冒号分割,包括用户名、加密口令(现在普遍不将加密口令放在口令文件中)、数值用户ID、数值组ID等信息与口令文件相关的函数如下:#includ

2021-03-17 23:23:12 162

conEmu安装包

Windows下的一个类Linux终端,

2018-10-16

空空如也

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

TA关注的人

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