1658538813089932_社区达人页

个人头像照片
1658538813089932
已加入开发者社区2002

勋章 更多

个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
初入江湖
初入江湖

成就

已发布153篇文章
3条评论
已回答0个问题
0条评论
已发布0个视频
github地址

我关注的人 更多

技术能力

兴趣领域
擅长领域
技术认证

暂时未有相关云产品技术能力~

暂无个人介绍

暂无精选文章
暂无更多信息

2022年08月

2022年07月

2022年05月

2022年04月

  • 04.28 15:23:26
    发表了文章 2022-04-28 15:23:26

    你真的了解Maven吗?

    Maven是Apache下的一个开源项目,目前可以用于构建和管理任何基于 Java 的项目的工具,让 Java 开发人员的日常工作更轻松。为了让开发人员更轻松,Maven做到了以下几点:
  • 04.28 15:12:06
    发表了文章 2022-04-28 15:12:06

    【设计模式】快速理解装饰者模式,及其在JDK源码中的应用

    装饰者模式(Decorator)的定义是:在不必改变原类文件情况下,允许向一个现有的对象添加新的功能。比如一个毛坯房,可以使用灰色去装饰厨房,可以使用白色装饰客厅,但是不管使用多少颜料去装饰这个房间,房子的本质是不会发现变化的。 使用装饰者模式除了可以在不改变原类的前提下装饰对象之外,还可以随意组合各个装饰类,比如有三个装饰类,分别是给原类上红、黄、绿三种颜色。在使用时,可以将任意两种或任意三种装饰类搭配。接下来将会用代码演示上面的这个例子。
  • 04.28 15:07:53
    发表了文章 2022-04-28 15:07:53

    最实用的设计模式:策略模式的快速理解

    策略模式是设计模式中一个相对来说比较好理解,应用也十分广泛的设计模式。在我工作这些年所接触的项目中,有一个项目在整体上就使用了策略模式。在百科上,针对策略模式是这样介绍的:策略模式指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。 以某火锅品牌为例,同样是最后的收费环节,学生周末8.8折,工作日的指定时间6.9折,非学生全额支付。同样的收费方式在不同的情况下有不同的计算方式,这里就可以使用策略模式来实现。
  • 04.28 15:05:27
    发表了文章 2022-04-28 15:05:27

    【设计模式】快速理解建造者模式,及其在JDK源码中的应用

    建造者(Builder)模式在百度百科上的定义:是一种将复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 这段话在理解上十分抽象,简单来讲就是如果一个对象很复杂,使用建造者模式允许用户通过简单的方式构建这个对象,而不用关心对象具体构建的细节。且可以使用同样的构建过程可以创建出不同的对象。 接下来将会通过具体的代码实例去讲解建造者模式。
  • 04.28 15:00:31
    发表了文章 2022-04-28 15:00:31

    如何使用SpringBoot写一个属于自己的Starter

    SpringBoot以其自动装配的能力被广泛应用,我们在写代码时肯定遇到过很多spring-boot-starter命名的依赖,比如spring-boot-starter-web,在pom文件中引入这些starter依赖后,SpringBoot就能通过自动装配的技术扫描到这些类并装载到Bean容器中。
  • 04.28 14:57:28
    发表了文章 2022-04-28 14:57:28

    Kafka生产者是如何发送消息的?

    当有数据要从生产者发往消费者的时候,在kafka底层有这样一套流程。首先生产者调用send方法发送消息后,会先经过一层拦截器,接着进入序列化器。序列化器主要用于对消息的Key和Value进行序列化。接着进入分区器选择消息的分区。
  • 04.28 14:52:59
    发表了文章 2022-04-28 14:52:59

    大数据场景下的消息队列:Kafka3.0快速入门

    Kafka是一个分布式的基于发布/订阅模式的消息队列,同时它又是一个分布式的事件流平台。既可作为消息队列,又可作为数据管道、流分析的应用。目前Kafka的最大应用还是消息队列。 市面上主流的消息队列有RabbitMQ,ActiveMQ、Kafka等等,其中RabbitMQ,ActiveMQ这些主要是Java应用中的队列,而Kafka主要在大数据场景下使用。 消息队列主要应用场景有如下几种:削峰、限流、解耦、异步通信等。
  • 04.28 14:46:27
    发表了文章 2022-04-28 14:46:27

    【设计模式】快速理解原型模式,及其在源码中的应用

    在正常的开发过程中,百分之99的对象实例都是通过new进行创建的,但是在实际的场景中,还是存在一些不通过new生成对象实例的应用场景。 比如:需要生成大量类似的对象实例时,如果都通过new去创建,性能并不好。 又比如:通过很复杂的方式生成了一个对象,现在要再创建出一个类似的对象出来。 上面的两种应用场景都可以通过“拷贝”这个动作来实现,这种根据一个已有的原型对象,拷贝生成新的对象的方式,就是设计模式中的原型模式(prototype)。 在Java中,可以通过Cloneable接口和clone方法很好地实现原型模式。
  • 04.28 14:43:12
    发表了文章 2022-04-28 14:43:12

    像写SQL一样去处理内存中的数据,SparkSQL入门教程

    读取到的数据是DataFrame,接下来的操作就是对DataFrame的操作了。 (五)总结 SparkSQL是对Spark原生RDD的增强,虽然很多功能通过RDD就可以实现,但是SparkSQL可以更加灵活地实现一些功能。我是鱼仔,我们下期再见。
  • 04.28 14:39:10
    发表了文章 2022-04-28 14:39:10

    学会RDD就学会了Spark,Spark数据结构RDD快速入门

    Spark计算框架封装了三种主要的数据结构:RDD(弹性分布式数据集)、累加器(分布式共享只写变量)、广播变量(分布式共享支只读变量)
  • 04.28 14:24:16
    发表了文章 2022-04-28 14:24:16

    软件行业和互联网行业究竟有什么区别?又该如何去选择?

    前段时间我从一家偏传统软件行业跳到了互联网行业,到今天为止满打满算工作了一个月。就这一个月的时间已经足够看出两者之间巨大的差距了,也希望通过这篇分享给正在纠结去哪一种类型公司的人一个参考。
  • 04.28 14:12:53
    发表了文章 2022-04-28 14:12:53

    十亿条数据需要每天计算怎么办?Spark快速入门

    前段时间公司规划了一个新的项目,我成了这个项目的负责人。在做技术选型时,有一个需求阻碍了前进的步伐。大概有十亿条数据,数据总量在六百G左右,这些海量的数据需要每天根据一定的逻辑计算得到几千万的值。当数据量达到这种程度时,Java应用已经无法支撑了,于是在技术选型时选中了大数据计算框架--Spark。
  • 04.28 14:09:07
    发表了文章 2022-04-28 14:09:07

    MongoDB快速上手,聊聊这款火了一阵又销声匿迹的非关系型数据库

    事情的起因要从最近的一个新产品说起,最近部门有一个新的大数据产品规划,在考虑技术实现时,有一个动态表字段扩展的需求,比如原来表结构里只有a、b字段,需要不断的往里新增c、d、e等等字段,并且数据量也特别大。
  • 04.28 13:58:50
    发表了文章 2022-04-28 13:58:50

    基于SpringCloudGateway实现微服务网关

    后端写完所有的微服务之后,最终是要交给前端去调用。我们都知道每个微服务都有各自的端口号,如果前端直接通过IP加端口的方式去调用微服务会很麻烦。如果想对请求增加限制也会变得十分困难。这个时候微服务网关就出现了。
  • 04.28 13:49:23
    发表了文章 2022-04-28 13:49:23

    深入了解ElasticSearch的Nested数据类型

    ElasticSearch中可以将数据以对象的方式存储并查询,但是ES底层的Lucene 没有内部对象的概念,因此如果通过默认的方式往ES中插入对象,ES会将对象层次结构扁平化为字段名称和值的简单列表。 比如下面这一段数据:
  • 04.28 13:43:45
    发表了文章 2022-04-28 13:43:45

    详解单例模式及其在Sping中的最优实践

    在程序中,每new() 一个对象,就会有一个对象实例生成。有时候在程序中,需要有一个在完整运行状态下只需要生成一个的实例,我们把这种实例称为单例。 抽象到设计模式中,这种只生成一个实例的模式就是单例模式(Singleton)。
  • 04.28 13:40:10
    发表了文章 2022-04-28 13:40:10

    这次终于把Spring的监听器讲明白了

    监听器可以在使用过程时监听某些事件的发生,然后对这些事件做出响应处理。监听器对应用场景很多,用户的每一个操作都可以被定义为一个事件,通过监听器就能对某些业务场景中的事件进行监听。 Spring中提供了ApplicationListener监听事件,本文会从应用出发讲解Spring的监听器,并逐步深入到源码之中。
  • 04.28 13:35:02
    发表了文章 2022-04-28 13:35:02

    如何在SpringBoot启动时执行初始化操作,两个简单接口就可以实现

    最近遇到一个功能点,数据库中一张很简单的表有一千多条数据,这里的数据主要做到了值域映射的作用,简单来讲就是我可以通过中文名拿到数据库中对应的code值。原本的实现方式是每次用到之后去查一次sql,虽然不会有什么问题,但是只要是走了网络io,都会消耗时间。所以这个方案需要想办法优化。 优化的方式其实很简单,数据量不多,一千多条数据放在内存里也占不了多少空间。因此完全可以把一次性把数据加载到内存中,后面只需要每次去内存里调用就可以了。
  • 04.28 13:32:18
    发表了文章 2022-04-28 13:32:18

    线上报了内存溢出异常,又不完全是内存溢出

    最近一直忙于对付即将上线的系统,期间也碰到了很多问题。最近印象比较深的是一个内存溢出的报错。测试告诉我最近某个功能总是没有效果,于是我就去线上看了一下错误日志,这不看不知道,一看吓一跳,满屏的OutOfMemoryError ,出于隐私保护,这里只展示其中的一点异常信息:
  • 04.28 13:29:58
    发表了文章 2022-04-28 13:29:58

    快速理解工厂方法模式,及其在源码中的应用

    有一个总工厂负责生产各种电视产品,此时来了一个生产小米电视的需求,就会分配出一个制作小米电视的工厂,然后就能用该工厂生产小米电视了。 上面这种通过工厂来实例化类的方式抽象到设计模式中就是工厂方法模式。
  • 04.28 13:20:00
    发表了文章 2022-04-28 13:20:00

    公司CEO和我说:在系统优化的时候,不要轻易用多线程

    最近一段时间整个公司有不少应用上线,上线后慢慢开始暴露一些问题,除去bug之外,一个很值得关注的点就是系统的优化。毕竟优化系统不仅可以使得程序更加稳定,还能节省一些资源的浪费。作为一个技术氛围很不错的公司,很多人会把自己的优化方案发出来和大家一起讨论,只不过没想到这一讨论把公司CEO以及几位P8、P9大佬都给炸出来了。
  • 04.28 13:17:26
    发表了文章 2022-04-28 13:17:26

    使用Optional更优雅地处理非空判断

    在平常的编码之中,有一个错误总会在你的意料之外出现,那就是空指针异常。空指针的出现也很简单,你得到了一个null对象,调用了一些方法,出现空指针异常。空指针会出现在各种地方,常见的比如Map.get()没有获取到对象就调用对象例的方法,类对象没有获取到就调用类中的方法。
  • 04.28 12:17:01
    发表了文章 2022-04-28 12:17:01

    写了两年代码之后再来看看Spring中的Bean

    Spring中的Bean简单来讲就是一个个被Spring容器管理的Java对象,我们写了一个类之后,这个类只是一个单纯的Java类,可以通过new的方式去创建它。当我们把这个类添加到Spring的容器里之后,这个类就变成了Bean,由Spring容器管理,可以通过自动注入的方式去使用。
  • 04.28 12:05:56
    发表了文章 2022-04-28 12:05:56

    从JVM角度思考--如何预估线上环境机器资源大小

    如何给JVM虚拟机巧妙地设计参数对大部分开发来说一直是个随缘的事情,可能是去网上拷贝一套参数,可能是沿用公司其他应用的参数。但是这个随缘的操作可能就会给未来留下隐患。给JVM分配的内存过大倒是没什么问题,无非浪费点资源,但是如果分配的内存过小,就有可能导致频繁的Full GC,给人一种系统一直很卡的感觉。这篇文章就通过一个实例分析一下如何结合场景设置JVM虚拟机参数。 当然,本文更重要的是希望能通过预估参数的这个过程,让你更加了解虚拟机内部的一些东西,要想最准确的参数设置,用一些工具记录下JVM各个区域的变化会更有效。
  • 04.28 12:04:24
    发表了文章 2022-04-28 12:04:24

    用几张图深度剖析Java内存模型

    首先看一张图:下图是Java虚拟机运行时数据区,JVM的内存模型可以分为方法区、虚拟机栈、本地方法栈、堆和程序计数器。
  • 04.28 12:01:37
    发表了文章 2022-04-28 12:01:37

    两张图让你快速读懂JVM字节码指令

    很多人可能会觉得JVM字节码很神秘,我们写的一行行代码放到底层竟然可以用一串16进制的数字保存。再到计算机底层竟然可以用0和1执行如何复杂的代码。JVM的设计确实十分巧妙,但对我们几乎所有开发者来说,这些底层的内容我们已经不需要再去掌握了,因此今天我们不去讲JVM字节码究竟是怎么设计的,我们通过最简单的方法来快速读懂JVM字节码。
  • 04.28 11:58:34
    发表了文章 2022-04-28 11:58:34

    用了MybatisPlus后,我很久没有手写sql了

    最早写JDBC的时候,要手动配连接信息,要一条条手写sql语句。后来Mybatis出现了,不需要再手动配置连接信息,sql语句也和代码隔离开来,但是还免不了写Sql。接着出现了MybatisPlus,这下连Sql都不用写了。
  • 04.28 11:50:58
    发表了文章 2022-04-28 11:50:58

    模板方法设计模式理论与应用

    首先了解一下什么是模板,在工厂中指定某一样工具的时候,会先设计一个模子,然后就根据这个模子制造成各种颜色的工具。虽然制造出来的工具可能样式、颜色都不同,但是基本的样子和模子是一模一样。 抽象到编程中,我们设计一个抽象类模板,指定代码的执行流程,后续子类实现各自的代码逻辑,但是执行流程和抽象父类一样,这种设计模式就是模板方法模式。
  • 04.28 11:48:29
    发表了文章 2022-04-28 11:48:29

    闲着无聊造个轮子,开源一个可快速接入的分布式SSO系统

    最近突然有个想法想造点轮子,平常写的代码业务居多,因此想写点别的。于是就有了造轮子系列。登录认证应该是每个程序员写的第一个功能,至少对我来说是的,于是我的第一个造轮子项目也打算写登录认证,只不过换成了分布式统一认证项目。希望达到的效果是接入的项目可以通过简单的配置快速接入,不用再关注登录认证的事情。
  • 04.28 11:44:06
    发表了文章 2022-04-28 11:44:06

    ElasticSearch聚合查询Restful语法和JavaApi详解(基于ES7.6)

    在前面关于ES的一系列文章中,已经介绍了ES的概念、常用操作、JavaAPI以及实际的一个小demo,但是在真实的应用场景中,还有可能会有更高阶的一些用法,今天主要介绍两种相对来说会更难一些的操作,聚合查询。该文档基于ElasticSearch7.6,将介绍restful查询语法以及JavaApi。 阅读本文需要你有ElasticSearch的基础。
  • 04.28 11:33:48
    发表了文章 2022-04-28 11:33:48

    如何上传自己的jar包到maven中央仓库(2021最新版)

    现在网络上已经有不少上传jar包至中央仓库的教程,但是我搜了一大圈之后发现当时的做法目前并不适用,因此决定自己写下上传jar包至中央仓库的方式,写这篇文章的时间是2021年8月18日
  • 04.28 11:32:45
    发表了文章 2022-04-28 11:32:45

    深入浅出CMS垃圾收集器

    CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的老年代收集器。CMS是基于标记-清除算法的老年代垃圾回收器,CMS是目前应用最广泛的老年代垃圾回收器。 CMS的使用只需要在JVM的启动参数中增加(-XX:+UseConcMarkSweepGC)参数即可激活使用CMS垃圾收集器。 CMS基于“标记-清除”算法实现,是HotSpot虚拟机的第一款真正意义上的并发收集器,基本上实现了垃圾收集线程与用户线程同时工作。
  • 04.28 11:30:46
    发表了文章 2022-04-28 11:30:46

    迭代器模式:理解与实践

    上面的这段代码通过循环逐一将arr的下标加1,从而实现了遍历数组的功能。 但是通过循环实现遍历的话依赖于集合对象内部,因此就有了一种能顺序访问集合对象中各个元素,又无需依赖对象内部表示的设计模式--迭代器模式。
  • 04.28 01:05:14
    发表了文章 2022-04-28 01:05:14

    适配器模式详解与应用

    引用一个最经典的例子,我们自己家里的电压都是220V的,而早期的手机充电时所用的都是5V的电压。要想让手机在220V的家庭电压下充电,就需要一个电源适配器。在编程中,也经常会出现一个类程序无法直接去使用,而需要通过适当变换的行为抽象出来的设计模式就是适配器模式。
  • 04.28 01:00:10
    发表了文章 2022-04-28 01:00:10

    网络开发的最强大框架:Netty快速入门

    Netty是一个异步的,基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。Netty的应用十分广泛,可以说主流的框架中,如果有网络方面的需求,一般用的都是netty框架。比如Dubbo、ES、Zookeeper中都用到了Netty。因此即使在平常工作中没有Netty的使用场景,Netty还是十分值得我们去学习的。
  • 04.28 00:52:52
    发表了文章 2022-04-28 00:52:52

    Java常用关键字:this、super、final、static、访问修饰符

    我从工作开始之前开始写博客,写到现在发现以前写的内容在现在看来有了更多想法,因此有了现在的知识重写计划,最主要的目的是维护github上的知识体系,让JavaStarter更加成熟。
  • 04.28 00:44:08
    发表了文章 2022-04-28 00:44:08

    为什么说datax是目前最好的异构数据源数据交换工具

    以前我做过一个项目,其中有个需求就是每天定时把sql server中的数据同步到Mysql中,当时写了一段Java的代码来实现,一套Java代码中需要写两个数据源的连接以及两套sql的代码,十分不方便。如果还要实现Oracle、Mysql、SqlServer的互相同步,那代码逻辑就更加复杂。而且通过代码的方式,同步600万条数据要花费2个多小时,性能效率十分低下。
  • 04.28 00:37:09
    发表了文章 2022-04-28 00:37:09

    为什么要引入分布式任务调度系统?

    在开发中,定时任务是一种十分常见的应用场景,比如每天晚上12点同步数据,又或者每隔一个小时拉取一次数据。 在Java中,实现定时任务的方式有很多,最简单的在线程中通过Thread.sleep睡眠线程,或者采用SpringBoot中的@Schedule注解,又或者采用定时线程池ScheduledExecutorService来实现。
  • 04.28 00:32:28
    发表了文章 2022-04-28 00:32:28

    Java中的拦截器和过滤器有什么区别

    过滤器Filter基于Servlet实现,过滤器的主要应用场景是对字符编码、跨域等问题进行过滤。Servlet的工作原理是拦截配置好的客户端请求,然后对Request和Response进行处理。Filter过滤器随着web应用的启动而启动,只初始化一次。 Filter的使用比较简单,继承Filter 接口,实现对应的init、doFilter以及destroy方法即可。
  • 04.28 00:28:05
    发表了文章 2022-04-28 00:28:05

    取经阿里十年技术大佬,得到Java线上问题排查攻略!

    再牛逼的程序员都写不出完美无缺的代码,作为后端开发工程师,一不小心就会遇到线上故障。如果线上故障处理不及时,就可能导致各种严重的后果。恰好最近部门出现了一次挺严重但幸运的是影响面不大的线上故障,最后在阿里工作十年的leader分享了线上问题的排查思路。结合这次分享,写下了这篇Java线上问题排查攻略。
  • 04.28 00:24:56
    发表了文章 2022-04-28 00:24:56

    详解Java中的BIO、NIO、AIO

    IO流是Java中比较难理解的一个知识点,但是IO流在实际的开发场景中经常会使用到,比如Dubbo底层就是NIO进行通讯。本文将介绍Java发展过程中出现的三种IO:BIO、NIO以及AIO,重点介绍NIO。
  • 04.28 00:20:53
    发表了文章 2022-04-28 00:20:53

    怎样才能写出规范的好代码?

    最近发现一件事情,自己写的代码和公司里工作5到10年的前辈写的代码虽然功能一样,但是他们的代码更规范,更优雅。比如有时候我会给一个需求写一个方法,但是有些人就可以好几个需求通过同一个方法实现。因此有了今天这个疑问,怎样才能写出规范的好代码?
  • 04.28 00:18:11
    发表了文章 2022-04-28 00:18:11

    写了那么久的String字符串,你可能根本不懂它!

    String str和new String()有什么区别?这个问题之前在面试中有被问到过一次,当时面试结束后也写了自己关于这个题目的理解,不过最近在看Effect Java的时候发现书中也提到了关于String的用法,刚好就放到一起聊一下。
  • 04.28 00:13:44
    发表了文章 2022-04-28 00:13:44

    数据库分库分表扫盲,不会用也得知道概念

    分库分表故名思意是将一张表拆分成多个表,可能是一个库中的分表,也可能是分库又分表。分库分表主要解决的问题是数据库的性能瓶颈问题。即使建立索引,当数据量超过一定值时,查询效率就注定会降下来。通过分库分表,可以将原本的大数据拆分到多个表或者库中。
  • 04.28 00:12:23
    发表了文章 2022-04-28 00:12:23

    Oauth2是个什么东西?

    在之前的项目中只用到了SpringSecurity,后来发现公司的架构中有Oauth2,虽然自己在业务中没有过接触,但是觉得还是需要去了解一下,因此就有了这篇博客。本博客会从概念和简单的应用出发,讲解Oauth2的理论及实践,不涉及数据库等操作。
  • 04.28 00:07:33
    发表了文章 2022-04-28 00:07:33

    如何在自己的项目中引入ElasticSearch搜索引擎?

    在大多数系统中,都需要支持搜索的功能,以简单博客系统为例,虽然说Mysql也可以通过模糊查询匹配到对应的数据,但是效率实在太低。这个时候就需要拿出分布式搜索引擎ElasticSearch了。本博客重点在于ES的集成使用,因此前端采用最简单的方式呈现,大家只需要关注后端逻辑即可。(本博客基于ES7.6.1,和ES6.X版本有较大差异)
  • 发表了文章 2022-08-07

    列式存储?OLAP?ClickHouse究竟是何方神圣

  • 发表了文章 2022-07-05

    JDK9相比于JDK8,究竟变强了多少

  • 发表了文章 2022-05-25

    如何快速学习一门新技术

  • 发表了文章 2022-05-15

    时间类有多复杂,JDK竟设计了三版

  • 发表了文章 2022-04-28

    你真的了解Maven吗?

  • 发表了文章 2022-04-28

    【设计模式】快速理解装饰者模式,及其在JDK源码中的应用

  • 发表了文章 2022-04-28

    最实用的设计模式:策略模式的快速理解

  • 发表了文章 2022-04-28

    【设计模式】快速理解建造者模式,及其在JDK源码中的应用

  • 发表了文章 2022-04-28

    如何使用SpringBoot写一个属于自己的Starter

  • 发表了文章 2022-04-28

    Kafka生产者是如何发送消息的?

  • 发表了文章 2022-04-28

    大数据场景下的消息队列:Kafka3.0快速入门

  • 发表了文章 2022-04-28

    【设计模式】快速理解原型模式,及其在源码中的应用

  • 发表了文章 2022-04-28

    像写SQL一样去处理内存中的数据,SparkSQL入门教程

  • 发表了文章 2022-04-28

    学会RDD就学会了Spark,Spark数据结构RDD快速入门

  • 发表了文章 2022-04-28

    软件行业和互联网行业究竟有什么区别?又该如何去选择?

  • 发表了文章 2022-04-28

    十亿条数据需要每天计算怎么办?Spark快速入门

  • 发表了文章 2022-04-28

    MongoDB快速上手,聊聊这款火了一阵又销声匿迹的非关系型数据库

  • 发表了文章 2022-04-28

    基于SpringCloudGateway实现微服务网关

  • 发表了文章 2022-04-28

    深入了解ElasticSearch的Nested数据类型

  • 发表了文章 2022-04-28

    详解单例模式及其在Sping中的最优实践

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息