自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Travelerwz的博客

学习、分享、工作

  • 博客(262)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 恭喜你!发现宝藏一份---干货技术文章汇总

技术文章汇总点个【在看】谢谢你,分享让更多热人加入我们的群体自从开通【CPP后台服务器开发】微信公众号以来,收获了不少读者的青睐,为此非常感谢大家;由于工作原因,一周基本会更新一到两篇文章,有基础的,也有比较深入一些的,差不多都是平时工作中遇到的或者查漏补缺的,希望和大家一起分享;今天是周日,突然想着,现在也写了很多文章,很多都被冲到后面去了,一直没时间汇总,今天将自己所有的文章做一个归类和汇总,并且以后每篇文章都附带这篇文章,希望和大家一起进步!路漫漫其修远兮,吾将上下而求所!我们一起加油

2020-05-10 09:06:21 1021

原创 联合索引

索引相关的基础知识可以移步至:数据库索引漫谈https://mp.weixin.qq.com/s/Xy4AmYN5eys2vbp0AGCANw这篇文章主要针对索引进阶内容。联合索引联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,这里的索引键值数量大于等于2;创建语句:create TABLE com_table( id int not null, name VARCHAR(20) not null, age int not null, constrain

2021-04-29 07:16:56 591

原创 一文带你彻底理解高性能无锁队列

一文带你彻底理解高性能无锁队列目前,大部分软件设计都在追求高性能,快速处理,耗时低,仿佛已经是行业中必不可少的一部分。作为互联网从业人员,我们也必须适应时代的潮流,彻底掌握这种高性能编程。问题引入:一个生产者,多个消费者的队列,如果是你,你回怎么设计?想必拿到这个问题,更多的人脑海中已经浮现了一把锁;我也是的,那我们就从浅入深的来看看高性能的无锁队列是怎么一步一步的演化开来的。1、低效的实现队列编写多线程的时候,往往会发生资源竞争的现象,导致我们不得不加锁去保护变量,但在这个的同时也对性能

2021-04-11 16:52:10 748

原创 异曲同工的SSH和HTTPS

异曲同工的SSH和HTTPS一、初识 SSHSSH是一种协议标准,其目的是实现安全远程登录以及其它安全网络服务,主要用于计算机之间的加密登录与数据传输。目前市场用的最多的就是开源Openssh这个库;默认端口为22。二、SSH 原理了解SSH工作原理之前,我们先来了解下常用加密算法的常识:对称加密算法对称加密算法就是加密和解密采用同一把秘钥,常见算法有AES、DES等;优缺点:算法公开、计算量小、加密速度快、加密效率高;双方用相同的秘钥,安全性等不到保证;如果秘钥数量多的时候,

2021-02-27 09:45:29 246

原创 一起探索C++类内存分布

一起探索C++类内存分布C++ 类中内存分布具体是怎么样,尤其是C++中含有继承、虚函数、虚拟继承以及菱形继承等等情况下。由于在linux下没有windows下显示直观,我们采用vs2015进行调试。部署环境我们在 属性->C/C++ ->命令行 -> /d1 reportSingleClassLayoutXXX ,XXX表示类名;单个基础类class Base{private: int a; int b;public: void test();

2021-02-08 20:42:16 189 1

原创 C++ 模板 全特化与偏特化

C++ 模板 全特化与偏特化模板模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。大白话:C++是一门强类型语言,编写一段通用的逻辑,可以把任意类型的变量传进去处理,通过把通用逻辑设计为模板,摆脱了类型的限制,极大地提升了代码的可重用性。**模板实例化:**模板定义本身不参与编译,而是编译器根据模板的用户使用模板时提供的类型参数生成代码,再进 行编译。用户提供不同的类型参数

2021-01-23 10:19:36 239

原创 数据库索引漫谈

数据库索引漫谈前言​ 大家在平时工作学习中,使用到索引的场景有非常多,比如查询缓慢等等场景,但是索引是什么东西?怎么使用索引?怎么才能命中索引?等等一系列问题提出时,是不是会懵一下,这篇文章就带大家研究下索引和命中率的一系列问题。什么是索引概念:索引是帮助数据库高效获取数据的排好序的数据结构。从概念上讲数据库索引的本质是数据结构。(重要)索引是表级别的,不是库级别的,最简单的例子就是在创建表的时候我们需要指定存储引擎。索引分类常见MySQL索引一般分为:Hash索引和B+

2021-01-17 09:43:41 196

原创 走进redis事务

走进redis事务听到事务,相比大家知道传统数据库事务,最重要的就是四原则:原子性:要么全部成功,要么全部失败隔离性:多个并发事务之间互相隔离永久性:事务一旦提交,数据永久有效一致性:事务执行之前和执行之后处于一致性状态redis作为内存数据库,是否也支持事务?答案是肯定的,但是redis的事务支持和传统数据库的支持是有一定的区别的;redis的事务支持是不具备上述的四个条件的,具体的我们在操作中见真知。事务命令multi 开启事务exec 执行事务discard 取消事务

2020-12-19 16:33:57 123 1

原创 带你彻底理解 Redis 持久化

带你彻底理解 Redis 持久化一、前言redis作为内存数据库,在我们后端开发中应用是非常多的,尤其是在大流量背景下,redis作为缓存数据库就必不可少了。想了解redis使用场景可以移步至redis使用场景。redis 作为内存数据库,就会存在一个致命的问题,比如宕机、停电、自然灾害等等导致redis停止服务,那么内存中的数据就会丢失,对于不重要的数据还好,但是一旦涉及到核心数据,这个是万万不能接受的。为此,redis也为我们提供了两种持久化方式,AOF和RDB持久化,既然两种持久化方式是同时提供

2020-12-13 08:50:59 235

原创 相伴一生的IP和MAC

相伴一生的IP和MAC一、前言​ 想必大家对于MAC地址和IP地址并不陌生,但是,当我们提前这两个概念的时候,是不是有一种呼之欲出又不知从何说起的感觉。这种就是我们经常在嘴边说起,但是以前的知识有记忆有点模糊了!这篇文章主要从IP和MAC地址的概念到一个网络包传输过程进行了解。​ 我先提出几个问题,希望能带着问题去阅读,可能会事半功倍;​ 1、IP地址、MAC地址、子网掩码、默认网关是什么?​ 2、我们请求一个网页的时候,网络包在不同网关之间是怎么传输的?​ 3、IP地址和MAC地址之

2020-12-05 09:45:02 175

原创 boost库使用—线程类

boost库使用—线程类boost 库中提供了两种创建线程的方式,一种是单个线程创建,另外一种是线程组的创建,进行线程管理;同时,在线程库中还提供了锁的方式;thread 线程thread 就是没有组管理,与我们在linux下使用pthread_create()函数是一样的,只是在C++11中,引入了boost中的thread方法;包含头文件:#include <boost/thread.hpp>using namespace boost;常用方法:thread t

2020-11-21 16:12:52 392

原创 镜像制作大法

镜像制作大法一、前言上一节《程序员背锅救星-docker》中,我们讲述了docker最基本的概念以及镜像、容器以及仓库的概念和使用,还包含了实践内容,我们通过拉取centos镜像,创建容器并且进入容器对linux系统进行操作;但是那只是利用了仓库中的镜像,然后创建容器进行操作的,那我们如果需要自己的镜像改怎么做呢?这次就和大家一起看看镜像是怎么制作的~二、制作镜像一般制作镜像有两种方式,一种是基于commit命令,另外一种是基于dockerfile创建镜像;过程如下图所示:对于这两种创建镜像

2020-11-14 20:17:17 1529

原创 程序员背锅救星-docker

程序员背锅救星-docker一、前言本篇内容带大家走进docker的世界,从基础到实战,从头到尾讲述docker的概念和使用docker进行环境部署等等一系列“骚”操作~二、docker概念​ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。​ 就如上述你看到的图片一样,容器的设计理念由码头上的集装箱而来,通过集装箱

2020-11-07 13:13:04 248 1

原创 禁止拷贝构造,禁止bug

禁止拷贝构造,禁止bug一、前言​ 首先,我先讲讲为什么会写这篇文章;这个也是翻阅自己之前博客,当时看开源代码的时候,总是很奇怪,为什么有的代码中会会出现类似于Epoll( const Epoll& ) = delete;这样的代码产生,当时大概查阅了一下资料,只是说这个代码的意思是将默认的拷贝构造函数禁止了,但是并没有了解到为什么这样做,直到前几天思考了这个问题,觉得有必要写下来,并且分享一下,也为自己做一个笔记,在今后的开发过程中,多留一个心眼,少踩一个坑~二、拷贝构造函数我们先

2020-10-24 08:01:19 481

原创 探索静态库与动态库的“奥秘”

探索静态库与动态库的“奥秘”什么是库?所谓“库”,就是稳定成熟的可以复用的代码;库从本质上来说是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a(linux)、.lib(windows))和动态库(.so(linux)、.dll(windows))。所谓静态、动态是指链接,可以看下编译链接的过程:库与可执行文件区别:库文件无法直接执行,从生产库的源码中可以查看出,源码是没有main函数,都是一些函数模块的定义和实现,由于没有主入口,所以无法直接运行库。

2020-10-24 07:59:47 200

原创 大道至简—循环队列

大道至简—循环队列一、前言​ 队列可能是大家学习linux通讯时接触到的知识,当然也是我们在编程中使用较多的一个点,其中最主要的一方面用来降低程序之间的耦合度,还有异步操作;​ 前段时间在公司写了一个小的服务,同样使用了队列对服务进行了异步操作,知识队列没有使用现有的一些大型库,自己使用了原生的STL队列中的接口,进行了简单的封装,当前对代码调优不够,后来才发现有很多的漏洞影响着性能;其中就有一条是引发今天这篇文章的元素——在程序中,需要不断的申请释放内存,这样就影响了程序的性能;​ 使

2020-09-18 08:00:26 206

原创 傻瓜式学JAVA---springboot入门

傻瓜式学JAVA—springboot入门功能:浏览器发送hello请求,服务器接收并处理,响应hello spring字符串一、创建Maven工程[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VqDjOL1g-1599874105893)(https://imgkr2.cn-bj.ufileos.com/292009b5-e99a-47d9-a442-81cb32c16fc6.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-

2020-09-12 09:29:02 366

原创 windows程序崩溃调试终极武器

windows程序崩溃调试终极武器—dump文件一、前言前不久开发了一款windows程序,目前已经是测试跑了,对于windows程序熟悉的童鞋,应该都知道一个事,就是他运行时有一个黑框,如果崩溃的就是下面这种情形~[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBnXE8go-1599873016190)(https://imgkr2.cn-bj.ufileos.com/3d8c2beb-b08a-4fc2-9486-3486f2ea1a9c.png?UCloudPu

2020-09-12 09:11:21 463

原创 揭开高性能服务器底层面纱

揭开高性能服务器底层面纱一、前言我们经常听说高性能服务器,那什么是高性能服务器;用大白话来解释就是说处理事件快,效率高,占用服务器资源少,多路复用等等集万千宠爱于一身;但是,往往要想做到高性能,这是非常难的,需要一个好的优秀的架构和底层接口。这篇文章只限于linux平台,对于windows平台下,可以去参考下IOCP的用法,这里就不多说了~目前主流的高性能服务器底层都是封装了EPOLL接口,使用epoll进行事件处理,为什么epoll可以作为高性能服务器底层事件处理?那就让我们从源码下手,来揭开面纱

2020-09-06 09:09:22 326

原创 常见的网络编程面试题汇总

常见的网络编程面试题汇总一、前言上篇文章为大家介绍先目前后台开发岗位的一些要求,请查看:后端开发岗位要求汇总,希望能帮助到大家;今天这篇常见网络面试题是不对前面介绍岗位的网络部分的一个补充,这些面试题都是收集与网络,答案如果错误,请及时联系我进行修正,免的维大家造成知识的错误二、网络面试题tcp和udp的区别(1) TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接(2) TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不

2020-08-23 08:55:18 901

原创 后端开发岗位要求汇总

后端开发岗位要求汇总一、前言​ 2020年,是一个“多灾多难”之年,我们经历了疫情,经历了美股熔断,经历了全球大放水,同样经历了各种活久见的事情;不过,还好国内疫情已经没有那么严重了,剩下的就是等待疫苗的横空出世来拯救我们就好了!回归正题吧,不扯淡了!今天的主题是主要整理一下后端开发岗位招聘要求和需要掌握的技能,相信今年有很多想要更换工作的同猿们,被突如其来的疫情打乱了计划,希望来年的你们能得到你们想要的offer!祝好~这份要求可能没有大家常见有数据分析那种,有很多的饼图、柱状图等等,这里只有单

2020-08-15 14:27:08 4858 1

原创 GDB 多线程之旅

GDB 多线程之旅前言首先,我来说下为什么写多线程吧!作为一个工作几年的小老鸟,接触到的最多的编程,就是多线程编程!在多线程的世界中,每一个变量,每一把锁都是至关重要,稍微一个不小心,就会冲突或者异常;此时,调试代码就是重中之重了!Windows就不说了,主要有界面,打断点,查变量等等操作简直容易的不要不要的了!Linux下的多线程调试就比较骚气了,由于没有界面的“光环”加持,所以我们必须要借助强大的辅助工具----GDB,熟练使用GDB调试程序,是一个linux程序员必备的技能之一;这里我

2020-08-08 09:35:45 232

原创 肝!动态规划

肝!动态规划前言也许大家听到动态规划这几个字,和我有一样的感觉,这简直是太难了!我好难~但是,只要你想要去大厂或者知名的互联网公司,这个就是你的第一道难关,过也得过,不过也得过呀~既然知道了动态规划的重要性,让我们一起肝一下吧~动态规划的概念学习动态规划,那就必须要知道动态规划到底是什么玩意儿~有刷题经验的朋友应该知道,大家都喜欢用DP来命名动态规划的数组,这个起因就在这里:动态规划:Dynamic Programming,所以我们简称动态规划为DP动态规划其实是将一个原问题分

2020-08-03 21:41:46 171

原创 C++使用锁注意事项

C++使用锁注意事项并发编程中,单线程中出现数据异常混乱的现象倒是没有,但是在多线程中,出现数据混乱等现象就比较多了;在C++或者其他编程语言中,一般都会使用锁的方式来进行对数据保护;但是锁不是万能的,有时候使用锁会导致效率低下、造成死锁等异常情况发生;一般加锁原则:不用锁>可重入锁>自动锁>手动锁一般规则如下:1、对象之间的依赖顺序是单向的,保障对象A的锁和对象B的锁是按顺序的2、回调函数以及接口调用是可能影响单向性的,因此在触发回调和接口调用之前,需要手动释放锁

2020-07-18 10:37:55 772

原创 再谈进程—从入门到出家

再谈进程—从入门到出家这段时间由于工作上用到几个比较基础的进程编程,却发现自己好久没有接触进程了,都狂忘了!不得不感慨几句:老了老了~~~趁着对进程的回忆,也总一个简单的总结,下次可以回头看看,也帮大家做一个回顾这篇文章就叫——再谈进程—从入门到出家创建进程创建进程使用fork()函数,由fork函数创建的进程被称为子进程;#include <unistd.h>pid_t fork(void);注:fork函数被调用一次,但是返回两次,唯一的区别就是子进

2020-06-28 21:40:03 199

原创 聊一聊 C++的特性 explicit && 匿名空间

聊一聊 C++的特性 explicit && 匿名空间explicit关键字首先看一下explicit的作用:explicit 是避免构造函数的参数自动转换为类对象的标识符,平时代码中并不是经常用到,但是,有时候就是因为这个,会造成一定的BUG出现,而我们却苦苦查询不到问题;下面看一个例子来说明下:案例一test.cpp#include <iostream>using namespace std;class Test{public: Test

2020-06-06 08:49:20 192

原创 掌握这个技能,你可以畅游github

掌握这个技能,你可以畅游github一、前言​ github,被戏称为全球最大的同性交友网站,主要汇集了大量的程序猿,是程序员的汇集地;在github上有大量的开源项目供广大程序猿参考和学习,但是很过人都不知道怎么去使用github去获取自己想要的资料和项目;​ 福音来了!这篇文章带你去一探究竟!二、畅游githubGitHub Trend 与 GitHub TopicGitHub Trend总结了每天/每周/每月周期的热门 Repositories 和 Developers

2020-05-30 09:44:12 245

原创 内存池设计与实现

内存池设计与实现一、前言作为C++程序员,想必对于内存操作这一块是比较熟悉和操作比较频繁的;比如申请一个对象,使用new,申请一块内存使用malloc等等;但是,往往会有一些困扰烦恼着大家,主要体现在两部分:申请内存后忘记释放,造成内存泄漏内存不能循环使用,造成大量内存碎片这两个原因会影响我们程序长期平稳的运行,也有可能会导致程序的崩溃;二、内存池内存池是池化技术中的一种形式。通常我们在编写程序的时候回使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每

2020-05-12 13:54:35 508

原创 你必须知道的linux网络

你必须知道的linux网络linux网络模型谈到网络模型,大部分都应该知道的是OSI七层网络模型,在linux下一般说的是四层网络模型,也就是TCP/IP模型这两种我们都应该知道;七层网络模型OSI参考模型分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层四层网络模型应用层:负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等。传输层:负责端到端的通信...

2020-04-25 08:29:34 376

原创 我们需要懂得CMake文件

我们需要懂得CMake文件一、前言​ 从事于linux下的C++开发的人员都知道,在C++下编写程序是没有类似windows下编译器的一键编译和运行的按钮,只能由我们开发人员进行手动编译、运行;为了减免这种繁琐而且复杂的劳动力,出现了makefile文件,makefile文件可以帮助我们很快的编译大量文件,最终形成可执行文件;其实编写makefile文件并不是很复杂,但是后面出现了cmak...

2020-03-29 14:28:31 4465 1

原创 linux服务器程序性能调试

linux服务器程序性能调试CPUCPU使用率:除了空闲时间外的其他时间占总 CPU 时间的百分比平均CPU使用率:1-(新得空闲时间-老空闲时间)/(总新的CPU时间-总旧的CPU时间)注:我们前面介绍的性能分析命令都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置perf 简介及安装Perf 是内置于Linux 内核源码树中的性能剖析(profiling)工具。...

2020-03-21 09:51:06 363

原创 redis分布式锁?坑那么多

redis分布式锁?坑那么多一、白话分布式什么是分布式,用最简单的话来说,就是为了较低单个服务器的压力,将功能分布在不同的机器上面;就比如:本来一个程序员可以完成一个项目:需求->设计->编码->测试但是项目多的时候,一个人也扛不住,这就需要不同的人进行分工合作了这就是一个简单的分布式协同工作了;二、分布式锁首先看一个问题,如果说某个环节被终止或者别侵占,...

2020-03-14 18:43:32 649 2

原创 redis源码:SDS是何方人物

redis源码:SDS是何方人物SDS介绍:Redis中SDS称之为简单动态字符串sds数据结构与API相关文件是:sds.h, sds.c。最大预分配长度:#define SDS_MAX_PREALLOC (1024*1024)定义:struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可...

2020-03-07 09:57:57 172

原创 异步日志文件模块实现

异步日志文件模块实现前先时间,在公司做的一个项目,当时并没有觉得有什么问题;但是后来发现,在写日志的时候,每次都是同步在写,尤其是写文件,这个是比较耗时的,所以就想优化一下;优化方案:异步读写这里的异步是利用队列来做每个模块都将日志写入队列,不关心写入成功还是失败;创建线程专门用于读取队列中的日志信息,进行写日志文件情景图[外链图片转存失败,源站可能有防盗链机制,建议将...

2020-02-29 09:17:49 667

原创 Seesion在C++服务端是怎么使用的?

Seesion在C++服务端是怎么使用的?前面介绍了cookie和session两种机制的产生和使用过程(可以关注CPP后台服务器公众号查看),但是,似乎在我们C++后台开发过程中遇见的很少;那session在我们服务端是怎么使用的呢?首先,我们看一个需求: 客户第一次设置登陆后,以后再次登陆的时候,想要使用快捷登陆或者是一键登陆,比如我们使用指纹登陆,即可获取我们的账户信息 ...

2020-02-23 11:24:35 1153

原创 session与cookie

session与cookie首先,先来看一下会话的概念;想必大家都听说过HTTP协议吧。这里不做过多的表述,不同自行百度即可;说一下HTTP协议的最突出的特点就是一种无状态的协议,一旦数据交换完毕,就会关闭连接,如果需要再次交换新的数据,就需要重新建立连接,这样服务器端是无法跟踪上一次的会话,服务端会把它作为新的客户端来处理,那么会出现以下的场景: A 买了商品A,B买...

2020-02-22 09:18:15 209

原创 boost库使用—线程类

boost库使用—线程类boost 库中提供了两种创建线程的方式,一种是单个线程创建,另外一种是线程组的创建,进行线程管理;同时,在线程库中还提供了锁的方式;thread 线程thread 就是没有组管理,与我们在linux下使用pthread_create()函数是一样的,只是在C++11中,引入了boost中的thread方法;包含头文件:#include <boost...

2020-02-16 17:06:38 437

原创 boost库使用—asio库

boost库使用—asio库****一、boost库asio简介Boost Asio ( asynchronous input and output)关注异步输入输出。Boost Asio库提供了平台无关性的异步数据处理能力(当然它也支持同步数据处理)。一般的数据传输过程需要通过函数的返回值来判断数据传输是否成功。Boost Asio将数据传输分为两个独立的步骤:采用异步任务的方式开始 ...

2020-02-15 14:10:49 1727

原创 redis使用场景

redis使用场景string类型字符串常见操作set key value //存入键值对mset key value [key value…] //批量存储字符串键值对setnx key value //存入一个不存在的字符串键值对get key ...

2020-02-10 11:39:39 126

原创 redis-cluster

redis-clusterredis-cluster简介Redis Cluster是一个高性能高可用的分布式系统结构图特点所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。节点的fail是通过集群中超过半数的节点检测失效时才生效。客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中...

2020-01-18 22:44:30 160

C语言多线程编程之线程池

C语言多线程编程,包括多线程的创建,调用,销毁,还有接口等等

2018-12-21

UDP服务器客户端编程实战

UDP多多线程编程,客户端和服务端均可发送和接收,同时支持并发,可以连接多个客户端

2018-12-19

UDP编程实战while循环版

UDP编程实战

2018-12-13

Tinyhttpd注释版

Tinyhttpd注释版,还有流程图等等,代码中增加了很多的注释

2018-12-10

More Effective C++(中文版)

2016-10-29

C++ Templates

C++ Templates

2016-09-25

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

TA关注的人

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