- 博客(210)
- 资源 (4)
- 收藏
- 关注
原创 Sentinel使用Nacos存储规则及同步
因为SentinelDashboard中设置的限流规则在应用重启之后就丢失了,所以需要将Sentinel的规则持久化。1、Sentinel 动态规则扩展Sentinel 的理念是开发者只需要关注资源的定义,当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则:通过 API 直接修改 (loadRules) 通过DataSource适配不同数据源修改手动通过 API 修改比较直观,可以通过以下几个 API 修改不同的规则:FlowRule...
2021-02-01 11:48:14 9205 16
原创 【JVM系列三】HotSpot JVM的垃圾回收算法实现-JVM垃圾回收器
引言上一篇文章《【JVM系列二】深入理解JVM 垃圾回收算法》,详细介绍了JVM对象存活的判定算法(引用计数法、可达性分析法--GC Roots 引用链),以及常用的垃圾回收算法(标记-清除、复制、标记-整理),本文将分析HotSpot的垃圾回收算法的具体实现。在HotSpot VM中实现这些算法,必须对算法的执行效率进行严格考量,才能保证虚拟机的高效运行。目前主流的商业虚拟机都是采用“分代收集”的垃圾算法,它主要是根据对象存活周期的不同将堆内存划分为几块。一般是将Java堆分为新生代与老年代,根
2021-01-29 12:22:32 418 2
原创 【JVM系列二】深入理解JVM 垃圾回收算法
引言上一篇文章,我们分析了JVM运行时数据区,大致知道了JVM各个内存区域分别存储哪些数据,以及Java堆中对象的创建、布局与如何访问,具体可查看《【Java高级】深入理解JVM内存模型,看完这篇足以!》。本文我们主要分析JVM的垃圾回收相关内容。那么,我们在进入正文前,可以先思考以下几个问题:哪些内存需要回收? 什么时候回收? 如何回收?一、概述我们来先看一下,JVM体系结构概览图:其中,程序计数器、虚拟机栈、本地方法栈3块区域都是线程私有的,因此生命周期与线程相同。栈中
2021-01-28 11:11:27 604
原创 【JVM系列一】深入理解JVM内存模型,从这一篇开始!
前言版本:JDK1.7本文主要内容是摘自《深入理解Java虚拟机》一书,进行知识点的梳理与归纳总结,方便分享与交流,如有不对的地方还望指出。1 JVM运行时数据区根据《Java虚拟机规范(JavaSE7版)》的规定,Java虚拟机所管理的内存主要包括以下几个运行时数据区域:1.1 程序计数器特点:内存空间小,线程私有。它可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处
2021-01-27 14:27:04 383 1
原创 使用Sentinel实现gateway网关及服务接口限流
1、Sentinel 简介1.1 Sentinel是什么:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。1.2 Sentinel 的主要工作机制:对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,S
2021-01-25 10:41:56 16965 10
原创 【Sharding-JDBC系列一】Spring Boot整合Sharding-JDBC实现读写分离
目录Sharding-JDBC简介搭建mysql主从数据库Springboot应用搭建pom依赖application.properties配置测试开启日志(非必须)Sharding-JDBC简介ShardingSphere-JDBC 定位为轻量级的分布式数据库中间件解决方案,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
2021-01-22 11:39:59 2414 2
原创 【Spring源码:循环依赖】一文弄懂Spring循环依赖
1. 什么是循坏依赖很简单,其实就是互相依赖对方,比如,有一个A对象依赖了B对象,B对象又依赖了A对象。// A依赖了Bpublic class A{ private B b;} // B依赖了Apublic class B{ private A a;}但是,在我们普通的java开发中,循坏依赖会出现问题吗?如果不考虑Spring,循环依赖并不是问题,因为对象之间相互依赖注入是很正常的事情。比如:这样,A,B就互相依赖上了。但是,在Spring
2021-01-15 09:32:19 2113 2
原创 【Spring源码:AOP二】基于JDK动态代理和Cglib创建代理对象的原理分析
上一篇,我们最后通过一个例子讲解了resolveBeforeInstantiation()中,通过InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation返回一个代理对象,下面,我们继续分析这个方法返回的是null的情况,那么它就会往下执行doCreateBean()。 @Override protected Object createBean(String beanName, RootBeanDefinition mbd,
2021-01-14 10:58:01 262
原创 【Spring源码:AOP一】基于JDK动态代理和Cglib创建代理对象的原理分析
本文直接进入正题,从AOP代理对象创建器说起。AOP代理对象创建器:AspectJAwareAdvisorAutoProxyCreator其中,InstantiationAwareBeanPostProcessor接口是BeanPostProcessor接口的子接口,主要作用:为特殊定制目标bean的实例化过程,如给目标对象创建代理对象。BeanPostProcessor接口,即bean后置处理器,作用是在Bean对象在实例化和依赖注入完毕后,在显示调用初始化方法的前后添加我们自己的逻辑.
2021-01-14 09:51:25 830 4
原创 【Mybatis源码】Mybatis如何为mapper接口生成代理对象--JDK动态代理
引言mybatis版本:3.5.1 mybatis-spring:2.0.1使用过Mybatis框架的开发人员应该都知道,在编写dao层时,只需要提供mapper接口与相应的xxxMapper.xml,无需实现类,便可以将mapper接口对象交由Spring容器管理,疑问:Mybatis是如何为mapper接口生成代理对象的? Mybatis又是如何将mapper对象交给Spring管理?我们在整合mybatis与spring时,都会使用MyBatis-Spring 将 MyBatis
2021-01-09 14:27:58 4052 11
原创 【Spring源码:FactoryBean二】终于弄懂FactoryBean是如何自定义bean的创建过程了
引言我们在上一篇文章中我们着重分析了FactoryBean中getObjectType方法的流程,最后还画了一个大概的流程图,描述了我们传入的class类型(IOrderService.calss)与我们自定义的FactoryBean子类之间如何关联起来的,即我们调用getBean(IOrderService.class),底层最终会调用factoryBean.getObjectType()。这一篇文章我们将分析FactoryBean是如何让Spring容器管理调用它的getObject()
2020-12-26 14:59:41 867 4
原创 【Spring源码:FactoryBean一】终于弄懂FactoryBean是如何自定义bean的创建过程了
引言我们在日常JavaWeb开发,应该都见过或使用过FactoryBean这个类,很多人估计都没弄懂它和BeanFactory的区别,亦或者是在面试时,可能都会被问到Spring中BeanFactory和FactoryBean的区别。或许我们很多人都没自定义去扩展使用过FactoryBean,但是可以回顾下在哪些框架中有应用到它?例如:Feign的 FeignClientFactoryBean,spring-mybatis的MapperFactoryBean等都是扩展实现了Spring的Factory
2020-12-25 16:00:16 1966 3
原创 【项目实战】Spring Cloud Gateway 实现JWT / Token登录认证流程
在我看来,在某些场景下,网关就像是一个公共方法,把项目中的都要用到的一些功能提出来,抽象成一个服务。比如,我们可以在业务网关上做日志收集、Token校验等等,当然这么理解很狭隘,因为网关的能力远不止如此,但是不妨碍我们更好地理解它。下面的例子演示了,如何在网关校验Token,并提取用户信息放到Header中传给下游业务系统。1. 生成Token用户登录成功以后,生成token,此后的所有请求都带着token。网关负责校验token,并将用户信息放入请求Header,以便下游系统可以方便的获取用户信息
2020-11-07 17:04:29 17974 7
原创 Spring Cloud Alibaba 完美融合Dubbo-Nacos示例
原文请关注微信公众号“阿甘正专”,获取更多最新文章推荐哦0.0引言目前微服务盛行,很多人会把Spring Cloud与Dubbo进行对比,Spring Cloud与Dubbo的比较本身是不公平的,主要是Spring Cloud提供了一套较为完整的架构方案,而Dubbo只是服务治理与RPC实现方案。这里会通过一个简单的例子,来直观地感受Nacos服务注册中心之下,利用Dubbo来实现服务...
2019-09-11 21:27:04 13563 15
原创 Spring Boot + Token 实现接口幂等性 | 防止表单重复提交
一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等 二、常见解决方案 唯一索引 -- 防止新增脏数...
2019-08-16 17:50:17 7404 5
转载 为什么说 TCP 协议是可靠的?
TCP 协议是 TCP/IP 协议栈中的传输层的协议,TCP协议又叫传输控制协议(Transport Control Protocal)。众所周知,它是一个可靠协议。因为它能保证接收端完整地接受到发送端发送的数据包,即保证不丢包。
2022-09-15 15:46:41 5741
转载 Java中finally与return的执行顺序
在Java的异常处理中,try、catch 和 finally 是按顺序执行的。如果 try 中没有异常,则顺序为 try→finally,如果 try 中有异常,则顺序为 try→catch→finally。但是当 try、catch、finally 中加入 return 之后,return 和 finally 的执行顺序让很多人混淆不清。下面来分别说明一下。1. try 和 catch 中带有return1)try 中带有 returnpublic class tryDemo { ...
2022-03-24 17:48:31 8285 1
转载 搞懂异地多活,看这篇就够了
阅读本文大约需要 20 分钟。本文由公众号“水滴与银弹”号主Kaito原创分享。你好,我是 Kaito。在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理。异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的?这些疑问,想必是每个程序看到异地多活这个名词时,都想要搞明白的问题。有幸,我曾经深度参与过一个中等互联网公司,建设异地多活系统的设计与实施过程。所以今天,我就来和你聊一聊异地多活背后的的实现原理。.
2022-03-02 16:21:15 626
转载 结合电商支付业务一文搞懂 DDD
2004 年,软件大师 Eric Evans 的不朽著作《领域驱动设计:软件核心复杂性应对之道》面世,从书名可以看出,这是一本应对软件系统越来越复杂的方法论的图书。然而,在当时,中国的软件业才刚刚起步,软件系统还没有那么复杂,即使维护了几年,软件退化了,不好维护了,推倒重新开发就好了。因此,在过去的那么多年里,真正运用领域驱动设计开发(DDD)的团队并不多。一套优秀的方法论,因为现实阶.
2022-01-19 17:36:49 1235
转载 浅谈我对DDD领域驱动设计的理解
从遇到问题开始当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决。比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品。所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的。再比如,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备。但是最近由于各种原因,导致服务经常出故障。所以,我们希望通过各种措施提高服务的质量和稳定性。其中的一个措施就是希望能做一个灰度发布的平台,这个平台可
2022-01-19 16:32:50 421
转载 Netty 粘包和拆包详解
1. 前言前面几个章节主要解析了 Netty 的编码、解码问题,那么是否有了编解码器,我们的 Netty 通信就能正常了呢?TCP 协议在传输数据时没有办法判断数据是什么时候结束的,它无法识别一段完整的信息,因此可能会导致接受到的数据和发送时的数据不一致的情况。因此需要人为的指定一种规范的协议,从而保证数据的安全性,比如:我们所熟悉的 HTTP 协议。本节内容,我们主要需要以下两点知识TCP 拆包、粘包的原因; TCP 拆包、粘包的解决方案。2. 学习目的拆包、粘包在 TCP 协
2021-09-18 11:01:37 1143
转载 Java基础:java.util.concurrent.BlockingQueue
前言在一次项目中,偶遇BlockingQueue,特意查了下用法,使我对它有了强列的兴趣,经过一段时间的学习,将其整理,用图解的方式解释,方便理解。介绍在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。图(1_0.png)是其继承关系,可以看出BlockingQueue是继承Queue。我们先看下BlockQueue的图解,通过图.
2021-09-09 15:27:53 463
转载 Netty入门总结看这一篇就够了
一、Netty的简介Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端二、JDK原生NIO程序的问题JDK原生也有一套网络应用程序API,但是存在一系列问题,主要如下:NIO的类库和API繁杂,使用麻烦,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等 需要具备其它的额外技能做铺垫,例如熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程
2021-08-13 11:42:39 701
转载 字符串拼接还在用StringBuilder?快试试Java8中的StringJoiner吧,真香!
前言之前,我们经常会通过StringBuffer或者StingBuilder对字符串进行拼接,但是你知道Java8中推出的StringJoiner吗?它比前者更加优美、灵活,如果你现在还使用StringBuffer拼接,强烈推荐你试试StringJoiner。介绍在实用StringJoiner类之前,如果我们想要数据最终的字符串以逗号隔开,大概是这样的StringBuilder sb = new StringBuilder();IntStream.range(1,10).forEach(
2021-07-14 17:51:11 246
转载 面试官:如何让主线程等待所有的子线程结束之后再执行?我懵了
使用Thread的join方法package com.qcy.testThreadFinish;/** * @author qcy * @create 2020/09/09 17:05:23 */public class Case1 { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(() -> {
2021-07-12 15:19:52 804
转载 CompletableFuture 使用详解
1、 runAsync 和 supplyAsync方法CompletableFuture 提供了四个静态方法来创建一个异步操作。public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)public static <U>
2021-07-12 12:45:17 983
转载 【Java8源码分析】NIO包-Buffer类:ByteBuffer与HeapByteBuffer(一)
1 概述Java NIO 由以下几个核心部分组成:Buffer Channel Selectors相关类的使用方法可以参考Java NIO 系列教程,写的通俗易懂。本文主要从源码方面分析一下Buffer类2 Buffer类Buffer类是一个抽象类,所有的XxxBuffer均继承此类。Buffer类的作用跟BufferedReader和BufferedInputStream类中的缓冲区作用是一样的。只不过线程Buffer独立出来,而且添加了更多的功能。2.1 构造函数p
2021-07-01 10:29:26 442
转载 手把手教你实现自定义 Spring Boot 的 Starter
引言上篇文章《天天用SpringBoot,它的自动装配原理却说不出来》我们有说springBoot的自动装配怎么实现的(建议最好先看下篇文章,因为前后有关系),这篇文章的话我们就自己来实现一个SpringBoot的 starter吧。废话不多说我们还是直入主题吧。什么是Spring Boot Starter呢?我们直接来看看官网是怎么介绍的吧。❝Starters are a set of convenient dependency descriptors that you can in
2021-06-30 19:34:41 535
转载 Java魔法类:Unsafe应用解析
前言Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概率变大,使得Java这种安全的语言变得不再“安全”,因此对Unsafe的使用一定要慎重。注:本文对s
2021-06-30 15:42:41 258
转载 LruCache里为什么用LinkedHashMap,HashMap可以吗?
近期有朋友准备面试,在群上我们会讨论一些面试题,每次我都会受到暴击,很多题目都答不上来。平时开发中,谷歌、第三方用得很溜,貌似解决了问题,可回想起来,技术没什么长进。比如我知道图片是用三级缓存,用的是Lru算法,可是如果不用glide,手写一个图片缓存工具类,我发现自己思路并不清晰。以写内存缓存为例,我会想到用强引用缓存,软引用缓存去实现,那么强引用,软引用具体使用哪些类去实现缓存是最好的?这个我都要去查一下,知道可以用LruCache,LinkedHashMap去缓存数据,LruCache为什么选择Lin
2021-05-31 17:53:10 718
转载 使用Redis实现关注关系
最近使用关系型数据库实现了用户之间的关注,于是思考换一种思路,使用Redis实现用户之间的关注关系。综合考虑了一下Redis的几种数据结构后,觉得可以用集合实现一下。假设“我”的ID是1,“别人”的ID是2。一、添加关注添加关注分为两步:1、将对方id添加到自己的关注列表中;2、将自己的id添加到对方的粉丝列表中:SADD 1:follow 2SADD 2:fans 1二、取消关注取消关注同样分为两步:1、将对方id从自己的关注列表中移除;2、将自己的id从对方的粉丝列表中移
2021-05-31 10:14:28 1066 1
转载 使用Redis的有序集合Zset实现排行榜功能
游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。一个典型的游戏排行榜包括以下常见功能:能够记录每个玩家的分数; 能够对玩家的分数进行更新; 能够查询每个玩家的分数和名次; 能够按名次查询排名前N名的玩家; 能够查询排在指定玩家前后M名的玩家。更进一步,上面的操作都需要在短时间内实时完成,这样才能最大程度发挥排行榜的效用。由于一个玩家名次上升x位将会引起x+1位
2021-05-28 18:14:22 3751
转载 LRU缓存机制的原理与实现
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。你是否可以在 O(1) 时间复杂度内完成这两种操作?实例:LRUCac
2021-05-10 15:18:25 384
转载 面试官:每秒上千订单的场景下,如何对分布式锁进行高并发优化?
目录背景引入库存超卖现象是怎么产生的?用分布式锁如何解决库存超卖问题?有没有其他方案可以解决库存超卖问题?分布式锁的方案在高并发场景下如何对分布式锁进行高并发优化?分布式锁并发优化方案有没有什么不足?该优化方案的后续改进背景引入今天给大家聊一个有意思的话题:每秒上千订单场景下,如何对分布式锁的并发能力进行优化?首先来看看这个问题的背景!前段时间有个朋友在外面面试,然后有一天找我聊说:有一个国内不错的电商公司,面试官给他出了一个场景题:假如下单时,
2021-04-27 10:50:07 448
转载 Redisson实现Redis分布式锁的原理分析
目录一、写在前面二、Redisson实现Redis分布式锁的底层原理1、加锁机制2、锁互斥机制3、watch dog自动延期机制4、可重入加锁机制一、写在前面现在面试,一般都会聊聊分布式系统这块的东西。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用
2021-04-27 10:22:00 8574
转载 阿里二面:什么是mmap?--零拷贝
平时在面试中你肯定会经常碰见的问题就是:RocketMQ为什么快?Kafka为什么快?什么是mmap?这一类的问题都逃不过的一个点就是零拷贝,虽然还有一些其他的原因,但是今天我们的话题主要就是零拷贝。传统IO在开始谈零拷贝之前,首先要对传统的IO方式有一个概念。基于传统的IO方式,底层实际上通过调用read()和write()来实现。通过read()把数据从硬盘读取到内核缓冲区,再复制到用户缓冲区;然后再通过write()写入到socket缓冲区,最后写入网卡设备。整个过程发生了
2021-04-25 09:46:33 919
转载 面试官突然的关心-日志篇 SLF4J
当面试官问到,你们用的什么日志框架,log4j 和logback吗?和slf4j什么区别?吓尿了,日志系统也关心,学起来!前言日志重要吗?程序猿排查问题,数据统计分析、故障定位都依赖日志,甚至有的公司直接用日志的输出,经过统计做业务系统的输入。所以日志实在太重要了,大家几乎每天都在用日志,那都知道用的是什么日志框架,以及实现的原理吗?开胃菜说Log4j 和 Logback 之前,不得不提SLF4J。简单说,SLF4J相当于定义了接口,Log4j 和 Logback是具体实现。SL.
2021-04-23 11:07:13 351
转载 一文读懂分布式任务调度平台XXL-JOB
本文主要介绍分布式任务调度平台XXL-JOB(v2.1.0版本),包括功能特性、实现原理、优缺点、同类框架比较等基本介绍项目开发中,常常以下场景需要分布式任务调度:同一服务多个实例的任务存在互斥时,需要统一协调 定时任务的执行需要支持高可用、监控运维、故障告警 需要统一管理和追踪各个服务节点定时任务的运行情况,以及任务属性信息,例如任务所属服务、所属责任人因此,XXL-JOB应运而生:XXL-JOB是一个开源的轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展、
2021-04-20 18:26:12 1099
转载 ElasticJob 的产品定位与新版本设计理念
导读:调度(Scheduling)在计算机领域是个庞大概念,CPU 调度、内存调度、进程调度等都可称之为调度。它是指在特定的时机分配合理的资源去处理预先确定的任务,用于在适当的时机触发一个包含业务逻辑的应用。调度无论在单机还是分布式环境中都是很重要的课题。在单机环境,调度与底层操作系统脱离不了干系;而在分布式环境中,调度直接决定运行集群的投入和产出。调度的两个核心要素是资源治理和触发时机。背景ElasticJob 诞生于 2015 年,当时业界虽然有 QuartZ 等出类拔萃的定时任...
2021-04-20 17:55:21 193
转载 传统架构 vs 云原生架构,谈谈为什么我们需要云原生架构?
云原生架构是什么回顾过去十年,数字化转型驱动着技术创新和商业元素的不断融合和重构,可以说,现在已经不是由商业模式决定采用何种技术架构,而是由技术架构决定企业的商业模式。所以无论是行业巨头还是中小微企业都面临着数字化转型带来的未知机遇和挑战。机遇是商业模式的创新,挑战来自对整体技术架构的变革。新一代的技术架构是什么?如何变革?是很多互联网企业面临的问题。而云原生架构则是这个问题最好的答案,因为云原生架构对云计算服务方式与互联网架构进行整体性升级,深刻改变着整个商业世界的 IT 根基。...
2021-04-13 10:21:36 952
Dubbo-admin管理平台---dubbo-admin-2.5.4-SNAPSHOT
2017-09-20
apache-cxf-3.1.10.zip
2017-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人