自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吉他程序员的博客

我们有一支程序员的乐队,欢迎加入

  • 博客(192)
  • 资源 (11)
  • 收藏
  • 关注

原创 VM虚拟机安装Centos7.6_64位系统_游戏服务器必备

大部分联网的游戏搭建需要centos7.6环境, 但是我们又没钱买服务器, 于是我们可以用虚拟机模拟centos7.6环境,跟服务器一模一样。设置好上面图所示, ip设置成 192.168.200.0 , 记住点确定。改完之后,先按esc键,然后分别按: 键,w键,q键 这样就保存退出。不需要桌面版,要设置成服务器那种模式,右键桌面任何位置,打开命令窗口。完成后会自动打开,安装系统,需耐心等待。选择一个服务器存储的位置,注意不要选C盘哦,会占空间。内存设置,一般给4G就可以了,看具体游戏的要求。

2024-05-20 23:42:30 600

原创 DNF 单机&联网 搭建教程(附视频)

分别覆盖/root /usr。将生成的授权文件覆盖到客户端。要的请在csdn留言。要的请在csdn留言。要的请在csdn留言。

2023-12-12 14:02:52 1588 7

原创 Redisson 延时队列 延时严重问题

当量很大的时候,如果设置的 partition ,poll 在10 左右,由于极致压榨了cpu性能,保证延时队列不延时,CPU能打到 50%。加上 @RedissonFastDelayQueueClient 注解后,就代表是 延时队列有数据后回调的类,里面的方法配置了 @DelayTrigger注解 就代表回调执行的方法。redisson 刚好,由于是采用了redis做延时队列,性能超高,而且还能持久化,到线上推送效果也表现极好,没出过问题(前提是我二次定制开发过)。需求是要设置5秒以上的延时推消息。

2023-06-28 12:00:51 476

原创 java agent 实战 监控Elasticsearch(只需依赖一个jar 完全无侵入式)解决jar启动问题

但是这种方式对类的修改有较大的限制,修改后的类要兼容原来的旧类,具体的要求在 Java 官方文档 Instrumentation#retransformClasses()方法介绍 中可以找到: 转换类时禁止添加、删除、重命名成员变量和方法,禁止修改方法的签名,禁止改变类的继承关系。但是上面会有一个问题,在线上 我们用jar -jar 启动时,会有各种问题, 但是在文章的前面实现的案例都已经解决了,需要读者自行下载。这里我们其实就是用到了agent的动态绑定方式去绑定。到此我们实例已经制作完毕。

2023-06-28 09:35:15 1459

原创 动态修改Java线程池 生产环境解决方案

我们公司开发的一个线程池框架,基于JDK原生的线程池,名为HThreadPool ,优点如下: 通过 nacos 可以动态修改线程池的参数,且实时生效。 通过提供http接口,来返回当前线程池的各项指标。 内部包装了JDK的ThreadPoolExecutor , 线程池功能都是原生的。 集成简单,只需引入一个starter, 然后配置nacos地址即可。 效果测试nacos上配置线程池参数:​启动程序,查看监控(通过提供http接口方式):..

2022-01-12 18:10:00 1523

原创 hadoop3 MapReduce执行过程(三)

MapReduce概述Hadoop MapReduce 是一个分布式计算框架,用于编写批处理应用程序。编写好的程序可以提交到 Hadoop 集群上用于并行处理大规模的数据。可以处理像什么单词统计,手机号流量统计啊等。适用场景数据统计,如:网站的PV、UV统计 搜索引擎构建索引 海量数据查询 复杂数据分析算法实现不适用场景OLAP 要求毫秒或秒级返回结果 流计算 流计算的输入数据集是动态的,而MapReduce是静态的 DAG计算 多个任务之间存在依赖关系,后一个的输

2021-11-15 10:05:05 2846

原创 hadoop3 HDFS介绍(二)

HDFS前言设计的的思想:主要的是分而治之,将大的文件分割称为一个个小的文件,存储在各个机器上。在大数据中的应用:为大数据框架提供储存数据的服务重点概念:文件分块、副本存放、元数据。HDFS的概念和特性首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件。其次,它是分布式的,很多服务器联合实现功能。HDFS组成结构图HDFS 写文件的基本流程先来了解几个概念block文件上传前需要分块,这个块就是block,一般

2021-11-15 10:03:01 424 1

原创 hadoop3 完全分布式集群搭建(一)

基础概念1. NameNode存储文件的元数据。如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和所在的DataNode等。2. DataNode具体存储文件块数据,以及数据块校验和。3. Secondary NameNode(2nn)每隔一段时间对NameNode元数据备份。4. ResourceManager管理整个集群的资源(内存,cpu等)。5. NodeManager管理单个节点的资源(内存,cpu等)。开始搭建

2021-11-15 10:01:21 707

原创 Java大数据架构-背景篇

架构图从下往上我们可以看到,分为几层:数据采集,传输层 数据存储层 数据计算查询层 数据展示层后面我们会详细介绍各层的组件,敬请期待~~大数据的前景一、大数据在医疗行业的应用大数据让就医看病更简单。过去,对于患者的治疗方案,大多数都是通过医师的经验来进行,优秀的医师固然能够为患者提供好的治疗方案,但由于医师的水平不相同,所以很难保证患者都能够接受最佳的治疗方案。而随着大数据在医疗行业的深度融合,大数据平台积累了海量的病例、病例报告、治愈方案、药物报告等信息资源..

2021-11-15 10:00:03 691

原创 selenium 处理时间日期控件 解决查询后失效问题

如果你是通过 js 来 清空 readonly 属性, 向下面这样代码:#-*- coding:utf-8 -*-import timefrom selenium import webdriverdriver = webdriver.Chrome()driver.get("file:///C:/bootstrap-datetimepicker/bootstrap-datetimepicker/demo/index.html")js = "$('input:eq(0)').removeAttr('

2021-11-02 16:28:21 1348

原创 Java 聚合支付 实战 XorPay

请看效果支付项目成果视频效果很简单:用户输入手机号登录。登录成功,也注册成功,然后请求支付二维码。用户扫码付款,然后后端接收支付回调,更改用户已支付。用户点击按钮刷新页面,发现已支付,查看商品文章。本文章以 XorPay的native支付 作为案例讲解, 如果你需要对接别的支付,也可以联系我!!!申请XorPay保管好你的aid 和 app secret 这是支付接口的凭证登录,注册模块实现创建用户表:CREATE TABLE `t_user` ( `id` int uns

2021-09-27 10:30:35 1508

原创 新手 搭建技术博客网站

本文可以让你了解到:整个网站搭建到上线的流程。搭建网站的成本。网站域名,备案等细节。搜索引擎如何可以搜到你的网站。一. 我的博客网站展示Java架构师修炼网站内容还在完善中,下面是我的文章数据库:都是我一篇一篇写的,写的过程中技术也得到了质的提升!!!!这是我的网站一些备案的信息:Google浏览器可以搜到我的文章:二. 网站搭建成本1) 时间成本(在我的指导下) :网站搭建 2天备案+审核 30天左右2) 金钱成本:服务器: 74元一年 (腾讯云服务器首年)域名:

2021-09-13 17:55:52 206

原创 Java 日活跃百万消息量 热词提取 实战

注意本文是线上实战,已经应用到公司线上,并不是自己测试。量级:每天500W消息。需求每天500W 聊天消息,将聊天消息先分词,然后汇总提取出热词(出现次数最多的词)然后进行排序展示。线上效果图:展示对应热词名称和历史触发次数。原始消息数据量展示图:由于数据量巨大,每天有近500w数据,所以存储到ES ,然后按照每天建立索引。实现思路(温馨提示: 请耐心阅读)第一种方案:每天零点,起一个定时器,分页查询当天ES数据,直到查完今天数据为止。然后分页去处理消息.

2021-06-01 11:59:03 1384 1

原创 企业级 Redis + Lua 分布式 高并发限流 实战

提醒注意本文不是个人测试,而是已经应用在线上,自定义限流组件代码。可以在线上推广使用。无需惧怕量级。采用了计数器+滑动窗口配合实现, 借鉴了著名的 Sentinel 滑动窗口思想:需求描述按照 每小时,每分钟,每秒 维度 进行分布式限流。效果展示首先来看下压测jmeter配置:每秒200个线程访问限流接口,无限循环下去。后台设置的接口限流条件为: 5次/每秒 ,代码:观察后台输出情况:这里我抽查了几个, 发现每秒确实是 5次成功拿锁。 证明我们的.

2021-05-31 14:33:47 430 2

原创 Java 高效大文件 读取&写入(一亿行)

写文件需求:写入1亿行,7位以内的随机的数字。首先看成果图,代表没骗大家!!!!!这个是最终生成的文件,有770多MB 。下面用glogg打开预览:程序打印耗时7149ms + 923 ms = 8072ms ,也就是8秒,写入1个亿数据到文件!!!!(还可以参数调优)思想利用nio高效写文件,先写入20个小文件,最后合并,每个小文件开一个线程。代码:public static void main(String[] args) throws Clone.

2021-05-19 10:42:44 2451 1

原创 Eclipse开发go环境搭建

Windows平台下载完成后,直接双击安装即可默认情况下,.msi文件会安装在 C:\Go 目录下。可以将 C:\Go\bin 目录添加到环境变量 PATH 中,方便调用命令。Go 里面有两个非常重要的环境变量 GOROOT 和 GOPATH 。GOROOT 是 安装 go 的路径;GOPATH 是我们自定义的工作空间。GOPATH 可以是一个目录的列表,在 windows 环境变量中设置的时候,多个目录可以使用分号(;)分隔,在 Linux 环境变量中可以使用冒号(:)分隔。

2021-03-16 22:41:49 1792

原创 Canal 详解 Mysql与Redis数据同步 解决方案

要保证数据库和redis强一致性是不可能的,肯定有少许时间的不一致。canal是阿里的一套组件,用来监听mysql master发送的类似binary log的数据,然后让消息费去消费。Canal 简单原理canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 mysql master收到dump请求,开始推送binary log给slave(也就是canal) canal解析binary log对象(原始为byte流)Ca

2021-03-12 09:27:45 467

原创 Jedis 连接池 详解

一. JedisPool的几个重要参数介绍1. maxTotal控制连接池里面最多构建多少个Jedis实例。请看下面代码public static void main(String[] args) { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(2); JedisPool pool = new JedisPool(config,"172.29.2.10",7000); while(true) {

2021-03-12 09:27:10 4530 1

原创 HashedWheelTimer 源码解析

此文是接着上文续讲的,建议看下上文在看此文。Redisson 延时队列 原理 详解​githubs.xyzHashedWheelTimer 简介Redisson延时队列里面用到了HashedWheelTimer 作为延时任务触发机制。HashedWheelTimer 属于netty-common项目下的工具。HashedWheelTimer本质是一种类似延迟任务队列的实现,适用于对时效性不高的,可快速执行的,大量这样的“小”任务,能够做到高性能,低消耗。Demo用法HashedWh

2021-03-12 09:26:35 424

原创 Redisson 延时队列 原理 详解

花了一天研究了下Redisson 的延时队列,RBlockingQueue ,RDelayedQueue 。 网上没一个说清楚的,而且都是说轮询redis的zset,都是错误的! 让我来纠正,如果我有错的也可指出。Demo用法public static void main(String[] args) throws InterruptedException, UnsupportedEncodingException { Config config = new Config(); config.

2021-03-12 09:25:48 5930 1

原创 Redis原理(4) Cluster 详解

先看一张图,大致触摸下Redis ClusterRedis Cluster要求至少需要3个master才能组成一个集群,同时每个master至少需要有一个slave节点。各个节点之间保持TCP通信。当master发生了宕机, Redis Cluster自动会将对应的slave节点提拔为master,来重新对外提供服务。Redis Cluster 功能 :负载均衡,故障切换,主从复制。负载均衡先说下槽,集群中每个redis实例都负责接管一部分槽,总槽数为:16384(2^14),如果有..

2021-03-11 17:42:10 1176

原创 Redis原理(4)持久化 - AOF 篇

一. AOF简介AOF( append only file )持久化以独立日志的方式记录每次写命令,并在 Redis 重启时在重新执行 AOF 文件中的命令以达到恢复数据的目的。AOF 的主要作用是解决数据持久化的实时性。二. AOF相关配置# 是否开启AOF,默认关闭(no)appendonly yes# 指定 AOF 文件名appendfilename appendonly.aof# Redis支持三种不同的刷写模式:# appendfsync always #每次收到.

2021-03-11 17:41:38 433 1

原创 Redis原理(3) 持久化 RDB

一. RDB 简介Redis的RDB是用来将redis内存数据持久化到磁盘的一种机制,以此来防止redis数据全量丢失。二. RDB 相关配置# 900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化) save "" 关闭RDB功能save 900 1 save 300 10 save 60 10000 # 如果持久化出错,主进程是否停止写入stop-writes-on-bgsave-error yes#是否压缩 ,建议不开启,压缩也会消耗cpu,磁盘的

2021-03-11 17:40:59 246

原创 Redis原理(2)内存优化细节

每一片条凋零的落叶,每一个残破的鸟窝,每一寸苍白的头发.... 都是为了生命的延续。本文就是接着上文的延续:Redis 内存全面详解​githubs.xyz一. 从编码上来优化内存几种redis数据编码介绍(不全介绍)1. embstr172.29.2.12:7000> set a 11111111222222333331212222233333333332333333OK172.29.2.12:7000> OBJECT encoding a"embstr"上

2021-03-11 17:40:01 194

原创 Redis原理(1) 内存全面详解

一. 我们怎么观察线上Redis内存我们如果在我们的redis.conf配置文件里面配置:# 最大内存设置,100Mmaxmemory 104857600查看redis内存信息 (info Memory)172.29.2.11:7002> info Memory# Memoryused_memory:2598042used_memory_human:2.48Mused_memory_rss:3002368used_memory_rss_human:2.86Mmaxm

2021-03-11 17:39:20 1350

原创 Redis集群监控 (Granafa Prometheus Exporter 实战)

一. 写在前面的话本文是实战,来监控上篇文章我们搭建的Redis集群。我是花了2天才搞定,就因为granafa的版本问题。读者搭建时一定要用我指定的版本,否则你会尝到绝望的果实,看到血淋淋的键盘。二. Redis集群监控的三大利器redis exporter Prometheus granafaredis exporter 负责采集redis指标数据,通过 http 暴露给 Prometheus 拉取,然后通过granafa 将这些指标绘图展示数据。功能结构图不知道盗的哪里的.

2021-03-11 17:38:40 846 1

原创 Redis集群 实战 搭建

写给前面的话本文是自己亲自搭建成功过,3主3从Redis Cluster模式集群。 搭建过程有较多坑,本人在过程中心力憔悴,但好在最后成功了,读者也要有耐心。一. 资源准备准备三台机器(能连外网,能相互ping通),每台机器安装2个redis进程172.29.2.10 172.29.2.11 172.29.2.12分别安装依赖包,关闭防火墙[root@localhost src]# systemctl disable firewalld[root@localhost src]#.

2021-03-11 17:38:04 156

原创 纯Java代码实现 企业微信&钉钉 机器人群+告警

作为一名合格的架构师,如果没有一套及时的监控工具,那怎么能够让业务程序媛安心 ????先展示下钉钉告警预警图:在展示下企业微信告警预警图:钉钉告警准备建立告警群 。找到告警的钉钉群 , 点击右上角的群设置:点击智能群助手:点击添加群机器人点击添加机器人选择自定义 然后点击添加输入信息点击完成 ,这里选择 自定义关键词,就选择公司简称。 当告警内容包含这个关键词时,才会真正发出告警消息。 这里要注意下!!!!会得到一个Webhoo..

2021-03-11 17:35:05 2857

原创 SpringBoot+Mybatis 整合多数据源 (druid)

作为一个合格的架构师,今天这篇文章算是划水,但是又是不得不会的。我的项目是SpringBoot+Mybatis通用Mapper + 多数据源(druid),如果连基本Mybatis都没整合的,请先见我这篇文章:SpringCloud+Nacos+Mybatis+Redis+Kafka 微服务整套框架环境搭建​githubs.xyz准备两个数据源spring: datasource: type: com.alibaba.druid.pool.DruidDataSource.

2021-03-11 16:33:08 260 2

原创 Elasticsearch6 封装成 sql 语句 便捷查询

作为一个架构师,必须要提供出对业务程序员便捷的工具。由于ES6 原生查询起来特别麻烦,于是封装了一个 Esql工具,只需要提供sql查询语句就可以查到ES里面的数据。Esql目前不支持两种(如有需要可以留言叫我开发):不支持group by。 不支持 where in条件。比如有这样一个sqlselect * FROM idx_group_send_message where merchantId = '12361' and createT..

2021-03-11 10:26:14 1047 5

原创 JVM - 组成结构

JVM 整体组成可分为以下四个部分:类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库接口(Native Interface)JVM组成如图所示:程序在执行之前先要把java代码转换成字节码(class文件),jvm首先需要把字节码通过一定的方式类加载器(ClassLoader)把文件加载到内存中运行时数据区(Runtime Data Area),而字节码文件是jvm的一套指令集规范,并不能直接交个

2021-03-08 22:12:00 109

原创 JVM - 类加载器(ClassLoader) 原理 详解

ClassLoader的作用就是将class文件加载到jvm虚拟机中去,JVM就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。JVM自带有三个类加载器Bootstrap ClassLoader最顶层的加载类,主要加载核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclasspath和路径来改变Bootstrap C

2021-03-08 22:11:15 1371

原创 JVM - 运行时数据区 内存结构 详解

Java虚拟机定义了在程序执行期间使用的各种运行时数据区域。其中一些数据区域是在Java虚拟机启动时创建的,只有在Java虚拟机退出时才会销毁。其他数据区域是每个线程。每个线程的数据区域在线程创建时创建,在线程退出时销毁。关于运行时数据区可以用以下图形来表示:下面我们一一来解析这几个区方法区方法区用于存储已被虚拟机加载的类信息、常量、静态变量、动态生成的类等元数据。是各个线程共享的内存区域。我们通过ClassLoader加载的Class对象是存放在堆区的,不是方法区。永久代(持久代)

2021-03-08 22:10:28 1046 1

原创 try catch 底层原理

有这样一段程序public class Main { public static void main(String[] args) { new Main().call(); } public int call() { try { int a = 1 / 0; } catch (Exception e) { System.err.println("exception"); return 0; } finally { return 4; } }}程

2021-03-08 22:09:25 1002

原创 JVM - JDK8 堆+垃圾收集器 综合剖析

来张图大致感受下堆的结构:堆 与 栈JVM里的“堆”(heap)特指用于存放Java对象的内存区域(new创建的对象和数组),是用于管理动态生命周期的内存区域,堆的回收是由垃圾收集器来统一管理(不需要程序代码显示调用回收)。 堆被同一个JVM实例中的所有Java线程共享。栈用于存放指向堆对象地址的引用。程序访问堆是通过栈里的引用来访问的。如果堆的对象没有任何栈引用所指向,堆对象就有可能会被垃圾收集器回收掉。 栈引用的回收完全被JVM掌控,没有栈引用指向另一个栈引用的,方法执行开始就对应开辟一

2021-03-08 22:08:13 288

原创 JDK7 线上永久代内存溢出

今天线上爆出了 java.lang.OutOfMemoryError: PermGen space当时吓尿了,怎么突然报永久代内存溢出,临时先加大了永久代内存,将启动参数改为:-XX:PermSize=128m为 -XX:PermSize=256m启动异常消失。留了一台机器jvm参数为之前的,来观察问题。用 jstat命令查看发现惊人一幕不得了永久代占了99.07%了,后来想到这个版本 加了个扫描包下class的工具,但是不确定是这个引起的。于是 在启动参数上加了 -ver

2021-03-08 22:06:50 305

原创 如何优雅的扫描指定包下的所有class

如果你是框架代码编写者,或者要学习如何编写框架,那么获取指定包下所有class对象这个操作时必不可少的。下面我来讲解下过程。比如我们要扫描com.hadluo包下的A.class和B.class :思路:递归找出环境变量下指定包(com.hadluo)下面的所有以.class结尾的文件(也有可能是jar)。 截取文件: F:..../com/hadluo 之前的不要,然后去掉.class文件后缀,结果:com/hadluo/A , com/hadluo/B 。 将上面结果变成com...

2021-03-08 22:05:09 1717

原创 如何改变Bean的行为? BeanPostProcessor+动态代理 实践

提出问题业务service实现代码未知异常后,如何报警?如何知道报错时的参数?微服务的service层实现 有可能 会抛出未知异常(写代码时考虑不周全), 但是程序只会打出错误堆栈,很难定位问题,如果也打印了当时的参数就容易定位了。还有就是未知异常后,需要主动通知到告警群。实践我们新建一个 exception.jar , 让业务服务依赖我们这个jar,就自动完成上述功能。需要用到的技术:BeanPostProcessor + 动态代理。动态代理底层 请见我这篇文章:Java 动态代理 Proxy

2021-03-08 22:01:46 587 2

原创 不指定扫描包 框架第三方Jar包的Bean如何注入Spring (微服务监控实例)

提出需求要写一个微服务监控组件,来监控所有业务微服务是否健康。但是 不能侵入微服务的代码(实际上业务开发人员也不会在代码层面加你的监控组件),作为架构师的你,如何完成这一功能 ?实践流程新建一个monitor.jar(监控组件第三方jar) 。我们使用oshi进行linux机器的cpu,内存监控。引入maven:<dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core

2021-03-08 21:57:16 944

原创 SpringCloud+Nacos+Mybatis+Redis+Kafka 微服务整套框架环境搭建

作为一个架构师,首先项目框架必须是要会搭建的。今天就来介绍线上的框架搭建,注意不是学习。用到的技术maven构建整合springboot+mybatis+redis+kafka整合springcloud+nacos搭建步骤uc-parent工程新建一个 uc-parent(uc可以是自己公司的简称) maven 聚合父工程,用来统一jar包版本管理。里面就一个pom文件:pom.xml​注意修改下repository标签,改成自己的仓库地址失效了的话可以联系我,工程结构图:or

2021-03-08 21:50:59 2314 3

HadLuo-Mybatis3.rar

简单易懂的mybatis源码,请修改db.properties信息在运行。

2020-04-22

动态注册dubbo提供者接口

在dubbo服务运行过程中,上传正确的java代码文件,自动编译生成class并注册到dubbo zk 中,可以正常dubbo invoke来调用。整个过程服务不用重启。我写了个框架并命名为D-Unit。

2019-09-26

Dubbo传输层实现

仿dubbo的传输层实现,基于netty4.........................................

2018-05-09

自定实现dubbo服务导出

包括spring自定义标签,dubbo何如利用spring bean生命周期实现查找和赋值

2018-05-02

自定实现Dubbo Invoker

自己仿dubbo Invoker实现,思想跟dubbo实现一致。。。。。。。。。。。

2018-04-27

仿Dubbo的ExtensionLoader

仿Dubbo的ExtensionLoader maven工程....

2018-04-24

scala编写的dubbo自动化部署工具

自动用scala写的dubbo服务自动化部署工具,工程是eclipse编写的

2018-01-09

sacla编写的dubbo自动化部署工具

sacla编写的dubbo自动化部署工具,项目是eclipse编写的

2018-01-09

自己手动实现dubbo源码

里面有三个mavaen工程具体看博客介绍.................................

2017-12-21

netty-0.0.1.jar

基于netty4的类似websocket用法封装

2017-06-06

jd-gui-0.3.6.exe

反编译class的神器

2017-01-04

空空如也

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

TA关注的人

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