自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 微服务SpringBoot整合Jasypt加密工具

Jasypt是Java加密工具包,能支持对密码的哈希加密,对文本和二进制数据的对称加解密,还能集成SpringBoot项目对配置文件中的密钥进行加密存储。

2022-10-11 16:18:38 18520 127

原创 【开发神器】自动化测试、用 Apipost!

产品介绍 Apipost是一体化研发协作平台,满足整个研发生命周期的业务需求。从产品经理确定需求,前后端一起过会讨论接口结构如何设计,提前设计mock好并分享给前端使用;后端进入代码开发并调试接口是否符合预期;接口正确后前后端联调并交付给测试;测试人员基于开发完成的接口进行自动化冒烟测试。整个研发流程高效无需等待,沟通交流便捷,有效提高团队研发效率35%。对于一个互联网公司来说,测试人员是公司里不可缺少的一个角色。但从事软件测试的人员不计其数,每年都有很多毕业生卷入互联网的大军。

2022-09-05 10:02:08 10702 82

原创 【云原生专题】基于Docker+Neo4j图数据库搭建企业级分布式应用拓扑图

图数据库是NoSQL领域中的一种,在处理相关联的大数据方面比关系型数据库天然具有优势,近年来在知识图谱、金融风控、社交关系等场景中发挥了重要的角色功能。同时,图数据库在AI领域,天然适合诸如记忆提取、关联推理、归纳探索等场景,成为了人工智能领域不可缺少的部分。Neo4J是比较通用和常见的图数据库,具有社区版和企业版之分,普通学习使用免费的社区版即可。Neo4J还提供了一个Web访问的可视化执行与查询的界面,类似ElasticSearch一样,非常容易上手。...

2022-08-16 16:09:10 8745 114

原创 【JAVA并发编程专题】Fork/Join框架的理解和使用

简单的说,Fork/Join是一个并行任务执行框架,能够把一个大的任务拆分成若干个小任务,并行地进行执行,最终还可以汇总各个小任务的执行结果。比如我们想计算1+2+...+100的结果,我们可以把这个大的任务拆分为10个小的任务,这10个小任务分别是1+...+10、11+...+20、...91+...+100,然后最终把这10个小任务的结果再加起来得到大任务的结果。...

2022-06-02 19:57:39 9420 1

原创 专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】

服务链路追踪已成为不可或缺的一环skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入apache 孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器化技术(docker、K8s、Mesos)架构而设计,它是一款优秀的 APM(Application Performance Management)工具。skywalking是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视

2022-06-02 07:30:00 12070 84

原创 《JAVA生态圈技术总结》之 微服务架构蓝图总览

这里写目录标题一、微服务定义1.1 定义一1.2 定义二二、微服务利弊2.1 优点2.2 缺点三、微服务的适用性3.1 康威法则3.2 生产力3.3 架构演进四、服务分层五、服务注册发现六、微服务网关七、微服务配置中心八、微服务通信九、服务监控9.1 监控体系9.2 监控架构9.3 全链路监控十、断路器与流量控制十一、DevOps(云原生架构系列)十二、容器云一、微服务定义1.1 定义一微服务是一种架构风格,将单体应用划分成一组小的服务,尽量符合单一职责的原则,使得服务之间相互协作,实现业务功能;

2022-05-23 23:07:06 42996 151

原创 巨细!Python爬虫详解

爬虫的总流程可以理解为:蜘蛛要抓某个猎物–>沿着蛛丝找到猎物–>吃到猎物;即爬取–>解析–>存储;在爬取数据过程中所需参考工具如下:爬虫框架:Scrapy请求库:requests、selenium解析库:正则、beautifulsoup、pyquery存储库:文件、MySQL、Mongodb、Redis……今天的文章是对爬虫的原理做一个详解,希望对大家有帮助,同时也在后面的工作中奠定基础!

2024-03-19 16:48:49 4249 1

原创 基于OpenAPI工具包以及LSTM的CDN网络流量预测

运行下面的代码后可得到network_traffic_forecast目录,里面含有本案例所需的代码和数据集,其data子目录下有4个csv,数据的时间间隔是1分钟,每个区域下面有3个运营商,共31个区域,每个{区域,运营商}对应一条具体的线路,即共31*3条线路,4个csv文件分别对应不同区域流量的4天数据,例如:time_series_1.csv: {0-3}区域,time_series_2.csv: {4-7}区域。构建任何模型之前,都需要先对数据集进行分析,了解数据集的规模、属性名、属性值等情况。

2023-12-02 03:06:21 661 2

原创 CompletableFuture原理与实践

CompletableFuture是由Java 8引入的,在Java8之前我们一般通过Future实现异步。Future用于表示异步计算的结果,只能通过阻塞或者轮询的方式获取结果,而且不支持设置回调方法,Java 8之前若要设置回调一般会使用guava的ListenableFuture,回调的引入又会导致臭名昭著的回调地狱(下面的例子会通过ListenableFuture的使用来具体进行展示)。

2023-08-03 19:36:35 470 1

原创 多系统使用CAS实现SSO登录案例

实现SSO有很多种方案,比较简单且可行的一般都是如上两种再加上CAS,一般企业内部多个系统之间如果想实现SSO,比较推荐的方式就是今天要介绍的CAS,Central Authentication Service,中央身份认证服务。CAS Server,作为认证服务的中心,需要单独部署;CAS Client,指需要单点登录的各个系统,官方支持10+类型的客户端;如下是一个多系统完整进行CAS SSO的流程:SSO登录流程。

2023-07-26 23:29:23 1468 16

原创 Java使用位图+redis生成抖音号、淘淘号、B站UID号等分布式ID

上一篇中我们介绍了《为什么亿级数据量时要使用位图》,今天这一篇就来实战使用位图。做分布式项目首先要考虑分布式ID的生成,分布式ID暂时没有太好的高性能全局递增或趋势递增,即使是美团的lefa、百度的uid-generator、滴滴的tinyid都或多或少借用了第三方中间件不但对性能有所影响也增加了系统的复杂度。我在之前的文章《高并发下分布式ID各个的解决方案以及redis集群分布式ID代码实现。

2022-10-24 08:30:00 3410 5

原创 为什么亿级数据量时要使用位图?位图和布隆过滤器有什么关系?

我们知道Byte表示字节,一个字节等于8bit,这里的bit就和位图有关系。在上面的例子中,我们不是要存放1千万个整数嘛,那就申请一个具有1千万个bit的数组,用每个bit(二进制位)来表示一个整数,当前bit为0表示不存在这个整数,为1表示该整数就存在。虽然数量是1千万个,但是每个数的范围是1到1亿,所以我们需要1亿个bit,换算下来,就是12.5MB,和刚才的40MB相比,节省的不是一点点。下一篇会实战使用位图来实现抖音号、淘淘号等需要生成看似无序却呈趋势递增的号段式ID。

2022-10-21 19:23:26 4581 3

原创 【云原生】DevOps之使用Gitlab Runner进行CICD

在很久之前的文章中,我们已经搭建过了Jenkins+Docker+Harbor+SpringCloud微服务持续集成自动化部署,今天来介绍Gitlab原生的Gitlab Runner CICD功能。Gitlab实现CICD的方式有很多,比如通过Jenkins,通过Gitlab Runner等,今天主要介绍后者。Gitlab在安装的时候,就默认包含了Gitlab CI的能力,但是该能力只是用于协调作业,并不能真的去执行作业,因此需要搭配Gitlab Runner来作为执行器实现具体的CICD工作。

2022-10-18 08:30:00 5499 91

原创 比红黑树更快的跳表到底是什么数据结构?如何实现?

传送门我在之前在头条介绍了十分优秀的二分查找算法,但是它只能作用于有序数组上,查找起来比较方便,但是数组中插入和删除元素是比较麻烦的;那么有没有办法让二分查找也能作用于有序链表上,从而达到查找、插入和删除元素都十分的快速呢?对于普通的有序列表来说,当然不能实现我们的目标,如下查找的时间复杂度为O(n);我们可以基于原始链表建立一个 索引层,比如每两个节点提取一个节点到索引层:如此,两种数据结构我们查找元素16的比较次数分别为10次和8次,确实能提高查询速度;

2022-10-09 23:38:51 1777 6

原创 秒懂如何使用SpringBoot+Junit4进行单元测试

测试用例的名称一定要突显被测试代码的意图,名称不一定要以“Test”结尾,可以很长,单词之间用下划线连接;要注重测试用例代码的可读性,让人一眼就能看出测试意图;测试用例中应该避免使用分支和循环,可以拆成多个测试用例;每个测试用例使用prepare-action-verify三段式结构;不要在测试用例中捕获异常,应该抛出异常或者期待异常,当然还可以使用ExpectedException;测试用例不能依赖数据库中的已有数据,应该在测试用例中自己准备数据;

2022-10-05 18:20:17 6460 69

原创 谈谈对链表的理解

链表和数组相比有哪些不同点?它的优缺点是什么?链表有哪些类别?它们各自的优缺点是什么?如何使用链表实现LRU算法?链表相对于数组而言,是两种不同的内存组织方式,链表不需要连续的内存空间,天然支持动态扩容,而且不像数组扩容那样需要搬运数据。链表大小等于实际使用大小,不存在浪费空间的现象。链表适合插入和删除操作,时间复杂度为O(1),但是并不意味着适合非常频繁地插入和删除,因为那样会导致频繁地申请内存和释放内存,容易造成内存碎片,从而提高GC的频率。

2022-10-04 19:41:34 1064 3

原创 【基础巩固】详细总结对数组的理解

数组是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据。在这里,线性表的意思是,数据像一条线一样组织起来的,每个线性表上的数据只有向前和向后两个方向,比如数组、链表、队列、栈等;而非线性表就比如树、堆、图之类的。方便寻址。比如上面说到寻址公式为,倘若下标从1开始,那么寻址公式就要改为,这样,每次数组随机访问寻址就会多一次减法操作,数组是系统中使用最为频繁的数据结构,这一点点的性能提升对整个系统来说就是很可观的。历史原因。

2022-10-03 23:26:13 840

原创 深入理解时间复杂度和空间复杂度

数据结构和算法之间有什么关系?为什么经常把它们放在一起来研究和分析呢?我们为什么要掌握和使用复杂度分析方法?和使用真实数据测试相比,它的优缺点是什么?有哪些常见的算法时间复杂度?它们之间的优劣顺序是怎样的?有哪些常见的算法空间复杂度?如何理解最好、最坏和平均时间复杂度?

2022-10-02 23:24:30 1311 3

原创 微服务SpringBoot+Neo4j搭建企业级分布式应用拓扑图

Neo4jRepository是SpringData为我们提供的用来操作Neo4j数据库的接口,我们先来看看它的继承关系:Neo4jRepository的继承关系可以看到,通用的增删查改功能基本都有了,如果我们的数据库操作也是些简单的操作,那基本就不用再添加方法了,直接使用Neo4jRepository提供的方法即可。当然也支持我们自定义方法进行操作,这个下面再信息讲述。

2022-09-28 14:07:17 6413 61

原创 【面试专题】总结记录40个数据结构与算法的常见问题

数据结构是一种存储格式,它定义了数据的存储、组织和操作方式。一些流行的数据结构是数组、树和图。数组通常被称为存储在连续内存位置的项目集合。存储的项目属于同一类型。它组织数据,以便可以轻松地对一组相关的值进行排序或搜索。图:数组与数组一样,链表是指一种线性数据结构,其中元素不一定以连续的方式存储。它基本上是一个节点序列,每个节点指向下一个节点,形成链状结构。图:链表LIFO 是后进先出的缩写它是一种访问、存储和检索数据的方式。它首先提取最后存储的数据。

2022-09-27 15:27:54 811 3

转载 快出数量级的性能是怎样炼成的

我们之前做过一些性能优化的案例,不算很多,还没有失手过。少则提速数倍,多则数十倍,极端情况还有提速上千倍的。提速一个数量级基本上是常态。这是怎么做到的呢?这些被提速的场景都有一个共同点:原先都是用各种数据库(也有HADOOP/Spark)上的SQL实现的,包括查询用的几百行SQL也有跑批用的几千行存储过程,然后我们改用集算器的SPL重新实现之后就有了这样的效果。集算器SPL有什么神奇之处?是不是能让各种运算跑得更快?有点遗憾,并没有这样的好事。

2022-09-26 09:42:06 421 25

原创 【云原生-k8s篇】管理容器的顶级 Kubernetes工具有哪些?

Terraform 允许你将Kubernetes 基础架构置于你的控制之下并对其进行管理,而无需配置文件、自动配置脚本,甚至是一行 Ruby。可以使用各种 Kubernetes 原生开发的应用程序,以及一些开箱即用的解决方案,可将你的应用程序扩展到容器领域。作为管理服务器的 Kubernetes 工具,NameNode 将帮助你识别服务器的IP 地址和它们正在使用的端口。Kubernetes 是一个越来越受欢迎的平台,许多其他服务提供商和工具为最终用户提供了一种更好的方式来创建和管理他们的集群。

2022-09-20 10:00:38 7258 51

原创 【面试专题】2022 年 30 大 JDBC 面试问题和答案

这是大多数面试中第一个也是最常见的问题之一。JDBC 代表 Java 数据库连接。顾名思义,它是一种 Java API,用于与关系数据库交互,以使用 SQL 访问、修改和处理数据。它利用 JDBC 驱动程序与数据库进行交互。通过使用 JDBC,可以访问来自不同类型关系数据库(如 MySQL、Oracle、MS Access 等)的表格数据。java.sql.ResultSet 接口用于表示数据库结果集,它是使用Statement 对象执行SQL 查询的结果。

2022-09-19 09:51:44 1410 3

原创 2022 年 25 大 Java 8 面试问题和答案 - 从基础到有经验

在我们解决这些问题之前,让我们在这里做一些基本的回顾,并确定 Java 8 是什么。Java 8 于 2014 年 3 月 14 日发布,Java 将其描述为“……Java的最新版本,其中包含新功能、增强功能和错误修复,以提高开发和运行 Java 程序的效率。”它是一个可以作为对象引用和共享的函数。Lambda 表达式需要更少的编码,提供一种实现 Java 8 功能接口的方法,并让用户封装一个行为单元以传递给其他代码。函数式接口是只包含一个抽象方法的接口。

2022-09-13 17:06:27 4065 2

原创 通宵三天 我做了一个超级好玩的中秋节小游戏

花好月圆团圆夜,星月流光相皎洁。华灯初上,照耀团圆夜晚,中秋喜乐,祝福阖家安康。

2022-09-10 16:49:46 2446 43

原创 什么编程语言的开发者平均年薪高达94万?

编程语言是程序员(开发人员)与计算机进行通信的一种方式。编程语言由一组规则组成,这些规则允许将字符串值转换为生成机器代码的各种方式,或者在可视化编程语言的情况下,可以转换为图形元素。一般来说,程序是一组用特定语言(C、C++、Java、Python)编写的用于完成特定任务的指令。

2022-09-09 10:40:59 3151 2

原创 2022 年最值得关注的颠覆性技术

颠覆性技术是一种创新,会导致消费者、企业和行业运营方式发生重大变化。颠覆性技术有可能通过其可衡量和优越的属性来取代现有的系统或习惯。简单来说,颠覆性技术是一种新技术,它显着改变了现有市场或行业的运作方式。颠覆性技术最初往往会遭到现有企业的抵制,因为它们有可能颠覆现状。然而,随着时间的推移,它们可以彻底改变一个行业的运作方式。一些颠覆性技术的例子包括个人电脑、在线购物和拼车应用程序。

2022-09-07 21:37:34 3179

原创 【牛客刷题】BM20 数组中的逆序对

🍍每日推荐🍖文章开始之前我想首先介绍一下,以便没有使用过的小伙伴能够快速入手,是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下。

2022-09-02 09:49:59 5767 1

原创 【牛客刷题】链表的奇偶重排

🍍每日推荐🍖文章开始之前我想首先介绍一下,以便没有使用过的小伙伴能够快速入手,是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下。......

2022-09-01 15:12:15 6927 30

原创 【设计模式专题】观察者模式实战详细分析

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知,并自动更新。新手经常会把观察者模式经常与发布订阅模式,其实二者还是有一些区别的,...............

2022-08-19 08:00:00 1067 26

原创 开源 SPL 打破数据库计算的封闭性

我们知道,数据库的数据处理能力是封闭的。所谓封闭性,这里是指要被数据库计算和处理的数据,必须事先装入数据库之内,数据在数据库内部还是外部是很明确的。数据库一般有 OLTP 和 OLAP 两个用途。对于 OLTP 业务来讲,因为要保证数据的一致性,而一致性只有在一个确定的范围内谈论才有意义,这样就自然就会带来封闭性:数据库系统将保证也只负责数据库内部的数据的一致性。不过,OLAP业务却没有数据一致性的要求。而用于OLAP业务的数据仓库也常常是用数据库来充当,这样的数据仓库也顺便继承了这个封闭性。.......

2022-08-15 09:36:40 3663 45

原创 【微服务专题】Nacos详解

比如在微服务环境中,多个微服务组件都有redis.properties的配置文件,那么如何区分哪个微服务该使用哪个Group下面的配置文件呢,其实也很简单,只要在配置文件中指定Group即可。很多时候,多个微服务中有相同的配置内容,比如大家连结的是同一个redis服务,同一个mq服务,那么就需要在各自的配置文件中都写上相同的配置内容,显得比较繁琐,我们完全可以将这些共同的配置内容抽取出来,形成另一个配置文件,然后大家共享它。在这样的情况下,我们的应用程序如何读取不同环境下的配置内容呢?......

2022-08-10 18:43:03 4937 12

原创 国内市场上的 BI 软件到底有啥区别?

BI基础功能方面,各厂商并没有太大差异,不同的就是界面及操作方式,但是BI的价值不在于颜值的高低,能够完成期望的数据分析目标以及方便地改造并适配自己的项目才更有价值BI的开源与可集成性,以及关联分析能力高低,报表能力配套等,才是差异大的地方,才是更需要重点去考察的地方。...

2022-08-08 09:24:50 2145 63

原创 【设计模式专题】责任链模式实战讲解

责任链模式是一种让校验逻辑与业务解耦的一种设计模式,让每个节点都有自己的处理器,处理器去处理具体逻辑,并且每个节点都有对下一个节点的引用,类似于没有prev的单向链表,当前节点指向下一个节点。当调用方法时,沿着预定的链路依次对每个节点进行处理,直到某个节点被终止或整条链路处理完成。让调用方法者不用在意方法内的校验逻辑,只需要关注业务逻辑,让业务结构更加清晰。将请求和处理进行解耦;请求处理者只关注自己感兴趣的请求进行处理,对于不感兴趣的交给下一个节点处理;......

2022-08-05 18:50:59 3790 7

原创 《云原生-Kubernetes篇》深入剖析Kubernetes中pod的原理

pod可以为其中的容器配置探针(probe),用以监控容器的健康检查,而不是以容器镜像是否运行来作为健康检查的依据,因为会存在很多情况,容器是正常运行的,但是无法对外提供服务了,因此探针的健康检查方式更加准确。pod中的所有容器共享network、volume、IP地址,在pod启动的时候,需要先启动一个Infra中间容器,而其它容器都是通过join的方式加入到Infra容器的资源中的。sidecar,是一种容器设计模式,指的是我们可以在一个pod中,启动一个辅助容器来完成一些独立于主容器之外的工作。...

2022-07-20 16:00:53 5189 135

原创 完美融入云原生的无代码平台 iVX编辑器实战

对象树是iVX编辑器中直观呈现案例数据结构、管理对象的可视化体系。它具有非常强大的功能,尤其当案例中添加了数量众多的对象,数据结构繁杂时,借助于对象树可以更好地管理对象。在iVX中,对象树分为了前台和后台两个部分,前台为我们项目中可视的部分,各种页面的组件和模块都放在前台这个“根”的下方;后台则专门用于存放数据库,已及用于前台后台沟通的服务等,该部分主要是抽象的功能,并不具有可视的实体。下面将主要针对对象树前台根进行几种基本功能的详解对象树中的对象之间一般会存在以下两种特殊的关系。...

2022-07-19 11:42:05 2210 8

原创 【设计模式专题】用英雄联盟案例来讲解—桥接模式

桥接模式(bridge):抽象与实现分离,二者可以独立变化,用组合关系代替继承关系,降低了耦合度降低耦合度,扩展性强,细节对客户透明设计难度大,对系统要有深入的理解一个类有两个独立变化的维度2.2 实现RoadAPI上路实现类:中路实现类 下路实现类 2.3 创建英雄与路线桥接抽象类 2.4 创建各个英雄类型继承EZ 伊泽瑞尔类YaSuo 亚索类MangSeng 盲僧类2.5 编写测试类 测试桥接模式结果:.........

2022-07-18 17:49:34 450 24

原创 【数据库专题】实战演示造成数据库全表扫描的坑

为了直观地认识到哪些写法会容易导致全表扫描,我们这里进行实际操作。1.2 创建索引在这张表中,除了主键id有主键索引外,其它字段暂时都没有索引。然后再初始化一些数据:初始化的数据各位可以自行定义,此处仅供参考。没有where导致的全表扫描类型为ALL就代表全表扫描,在后面的键列都是空的,说明此次查询没有可以使用的键。**建议:**任何语句包括delete、update等,都一定要加上where条件,除了防止全表扫描,更要防止大规模地误修改了数据。如果你就是要修改表中的所有数据怎么办?如果你就是不在乎是

2022-07-13 17:47:12 789 4

原创 【牛客网专题】SQL206 获取每个部门中当前员工薪水最高的相关信息

这题主要的知识点就是对join的应用,考察对不同连接的理解。左,右,内,外全连接:a、在职员工:to_date=‘9999-01-01’b、薪水涨幅:不能用最大的薪资-最小的薪资,因为存在降薪情况,应该用最近日期的薪资-入职日期的薪资。表头emp_no:growth:当前薪资(to_date='9999-01-01’的薪资)-入职薪资(from_date=hire_date的薪资)ORDER BY growth题目中隐含的坑:即为涨幅的定义,我最开始的解法是直接拿最高薪资-最低薪资,这样做,当然是

2022-07-12 15:25:45 7420 36

原创 【算法专题】动态规划的理论与实战

在前面的文章中,我们介绍了贪心算法,它们和动态规划一样,通常都可以用来解决多阶段决策最优解的问题。但是在一些场景下,使用它们的话,并不能解决或者不能很好地解决这种多阶段决策最优解的问题。我们来看一个例子,假设我们背包能装15公斤重的东西,现在地上总共三种重量的物品若干,分别是1公斤、5公斤和11公斤,那么如何才能使得背包装满15公斤,并且物品数量最少?如果使用贪心算法的话,每一步都选择当下最优的,那么肯定会选择11+1+1+1+1,那么背包中总共会有5件物品。如果使用回溯算法的话,就会对1、5、1.....

2022-07-08 14:49:04 833 13

sa-jdi-1.8.0.jar 位图BitMap

sa-jdi-1.8.0.jar 位图BitMap

2022-10-24

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

TA关注的人

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