07 2018 档案

摘要:什么时候类加载 第一次需要使用类信息时加载。 类加载的原则:延迟加载,能不加载就不加载。 触发类加载的几种情况: (1)、调用静态成员时,会加载静态成员真正所在的类及其父类。 通过子类调用父类的静态成员时,只会加载父类而不会加载子类。 (2)、第一次 new 对象的时候 加载(第二次再 new 同一 阅读全文
posted @ 2018-07-31 10:24 甜菜波波 阅读(761) 评论(0) 推荐(0) 编辑
摘要:一,有两个术语,一个叫“定义类加载器”,一个叫“初始类加载器”。 比如有如下的类加载器结构: bootstrap ExtClassloader AppClassloader -自定义clsloadr1 -自定义clsloadr2 如果用“自定义clsloadr1”加载java.lang.String 阅读全文
posted @ 2018-07-31 10:13 甜菜波波 阅读(1946) 评论(0) 推荐(0) 编辑
摘要:package com.nio; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channe... 阅读全文
posted @ 2018-07-30 09:24 甜菜波波 阅读(429) 评论(0) 推荐(0) 编辑
摘要:网上有许多讲偏向锁,轻量级锁的文章,但对偏向锁如何升级讲的不够明白,有些文章还相互矛盾,经过对jvm源码(biasedLocking.cpp)的仔细分析和追踪,基本升级过程有了一个清晰的过程,现将升级流程阐述如下: 因为偏向锁,锁住对象时,会写入对象头相应的标识,我们先把对象头(官方叫法为:Mark 阅读全文
posted @ 2018-07-28 16:54 甜菜波波 阅读(9305) 评论(5) 推荐(4) 编辑
摘要:呃。HotSpot VM的GC组老人之一Jon Masamitsu很久之前就写过blog讲解这个:https://blogs.oracle.com/jonthecollector/entry/our_collectors 简单来说,有这么多东西反映了HotSpot VM的开发历史和实现细节。我在写篇 阅读全文
posted @ 2018-07-28 08:01 甜菜波波 阅读(302) 评论(0) 推荐(0) 编辑
摘要:JVM 在Java应用程序优化中是不可缺少的一大重项,如何合理配置Java参数,如果验证配置参数的有效性,从GC日志中可以获得很重要的提示,以下是笔者对GC垃圾收集器默认开启的组合日志的部分的解析,希望能帮到想学习的同学O(∩_∩)O~~ JVM 在Java应用程序优化中是不可缺少的一大重项,如何合 阅读全文
posted @ 2018-07-28 07:55 甜菜波波 阅读(368) 评论(0) 推荐(0) 编辑
摘要:jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代) jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代) jdk1.9 默认垃圾收集器G1 -XX:+PrintCommandLineFl 阅读全文
posted @ 2018-07-28 07:53 甜菜波波 阅读(4058) 评论(1) 推荐(0) 编辑
摘要:import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; import java.nio.charset.Charset; /** * Created with . * Date: 14-5-27 * Time: 上午11:38 * To... 阅读全文
posted @ 2018-07-27 13:57 甜菜波波 阅读(673) 评论(0) 推荐(0) 编辑
摘要:2. 实体类 package com.TestSpringDemo; public class Car { private String brand; public String getBrand() { return brand; } public void setBrand(String bra 阅读全文
posted @ 2018-07-27 10:17 甜菜波波 阅读(1734) 评论(0) 推荐(0) 编辑
摘要:Spring通过一个配置文件描述Bean及Bean直接的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。Sprig的IoC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。 Bean工厂(com.s 阅读全文
posted @ 2018-07-27 09:52 甜菜波波 阅读(187) 评论(0) 推荐(0) 编辑
摘要:1 maven 中配置 maven配置全局的jdk和配置局部的jdk 设置全局的jdk,在setting.xml文件中的profiles元素下添加如下profile元素 设置全局的jdk,在setting.xml文件中的profiles元素下添加如下profile元素 阅读全文
posted @ 2018-07-27 09:49 甜菜波波 阅读(1611) 评论(0) 推荐(0) 编辑
摘要:阻塞和非阻塞,同步和异步 1 例子 故事:老王烧开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。-同步阻塞 老王想了想,这种方法不够聪明。 2.老王还是用水壶煮水 阅读全文
posted @ 2018-07-26 16:17 甜菜波波 阅读(216) 评论(0) 推荐(0) 编辑
摘要:谢邀。不知道题中的一段文字出自何处。“锁池”和“等待池”这种翻译我还是头一回见。不过,题主的思路已经对了,即不拘泥于文字,而是在考虑这两个东西在锁的调度(即决定哪个线程可以获得锁的过程)中起到什么作用。 Java平台中,每个对象都有一个唯一与之对应的内部锁(Monitor)。Java虚拟机会为每个对 阅读全文
posted @ 2018-07-26 14:37 甜菜波波 阅读(8593) 评论(6) 推荐(9) 编辑
摘要:在java中,每个对象都有两个池,锁(monitor)池和等待池 wait() ,notifyAll(),notify() 三个方法都是Object类中的方法. 锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchro 阅读全文
posted @ 2018-07-26 13:51 甜菜波波 阅读(1814) 评论(0) 推荐(2) 编辑
摘要:Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。 Queue的实现 1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口 阅读全文
posted @ 2018-07-25 14:40 甜菜波波 阅读(926) 评论(0) 推荐(0) 编辑
摘要:前言: 由于最近写的程序在运行一段时间后出现高cpu,然后不可用故进而进行排查,最终定位到由于metaspace引起fullgc,不断的fullgc又占用大量cpu导致程序最终不可用。下面就是这次过程的分析排查和总结,便于以后温故,同时也希望能给遇到同样问题的同学一些参考。 一 jvm的内存分配情况 阅读全文
posted @ 2018-07-24 15:39 甜菜波波 阅读(7389) 评论(0) 推荐(1) 编辑
摘要:1.总体介绍: CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用 阅读全文
posted @ 2018-07-24 15:24 甜菜波波 阅读(343) 评论(0) 推荐(0) 编辑
摘要:我们知道,CMSGC在老生代回收时产生的内存碎片会导致老生代的利用率变低;或者可能在老生代总内存大小足够的情况下,却不能容纳新生代的晋升行为(由于没有连续的内存空间可用),导致触发FullGC。针对这个问题,Sun官方给出了以下的四种解决方法: 增大Xmx或者减少Xmn 在应用访问量最低的时候,在程 阅读全文
posted @ 2018-07-24 14:53 甜菜波波 阅读(4854) 评论(0) 推荐(0) 编辑
摘要:逃逸分析作为其他优化手段提供依据的分析技术,其基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他方法中,称为方法逃逸。甚至还有可能被外部线程访问到,比如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。 如果能证明一个对象不会逃逸 阅读全文
posted @ 2018-07-24 14:26 甜菜波波 阅读(866) 评论(0) 推荐(0) 编辑
摘要:spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现。 应用注解的方式配置: 先在maven中引入AOP用到的依赖 然后在springmvc的配置文件中加入AOP的配置,即扫描AOP的包以及让AOP生效 然后加入AOP逻辑处理类 在类上加上注解Aspect声明这个类 阅读全文
posted @ 2018-07-23 14:39 甜菜波波 阅读(554) 评论(0) 推荐(0) 编辑
摘要:方法1:使用java.sql.DriverManager类 驱动管理器类,用于管理所有注册的驱动程序。 (注:DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。) 常用的两个API reg 阅读全文
posted @ 2018-07-23 14:17 甜菜波波 阅读(7887) 评论(0) 推荐(1) 编辑
摘要:Integer a = 100,b = 100,c=130,d=130; System.out.println(a == b); System.out.println(c==d); 打印结果为: 第一个是true; 第二个是flase; 原因:a,b,c,d四个变量都是integer对象的引用,所以 阅读全文
posted @ 2018-07-23 13:46 甜菜波波 阅读(228) 评论(0) 推荐(0) 编辑
摘要:给出答案: 是不能的,其他线程只能访问该对象的非同步方法,同步方法则不能进入; 因为非静态方法上的synchronized修饰符要求执行方法时要获得对象的锁,如果已经进入A方法,说明对象锁已经被取 阅读全文
posted @ 2018-07-23 13:26 甜菜波波 阅读(1661) 评论(0) 推荐(0) 编辑
摘要:1.sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会 2.yield()方法只会给相同优先级或更高优先级的线程以运行的机会 3.线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态 4.sleep 阅读全文
posted @ 2018-07-23 13:16 甜菜波波 阅读(484) 评论(0) 推荐(0) 编辑
摘要:1.servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由 javax.servlet.Servlet接口的 init,service和 destroy方法表达。 2.加载 Servlet的 class >实例化 Servlet >调用 Servlet的 i 阅读全文
posted @ 2018-07-23 12:52 甜菜波波 阅读(4564) 评论(0) 推荐(0) 编辑
摘要:执行流程: 1、 用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获(捕获) 2、 DispatcherServlet对请求 URL进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping获得该Hand 阅读全文
posted @ 2018-07-23 11:56 甜菜波波 阅读(5148) 评论(0) 推荐(0) 编辑
摘要:1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启 2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行 3. PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事 阅读全文
posted @ 2018-07-23 11:52 甜菜波波 阅读(3043) 评论(0) 推荐(0) 编辑
摘要:1. ISOLATION_DEFAULT: 这是一个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别. 另外四个与 JDBC的隔离级别相对应: 2. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它允许令外一个事务 阅读全文
posted @ 2018-07-23 11:47 甜菜波波 阅读(12916) 评论(0) 推荐(0) 编辑
摘要:https://blog.csdn.net/qq_32575047/article/category/6983639 阅读全文
posted @ 2018-07-23 11:39 甜菜波波 阅读(223) 评论(0) 推荐(0) 编辑
摘要:ArrayList 和 HashMap 的默认大小是多数? 在 Java 7 中,ArrayList 的默认大小是 10 个元素,HashMap 的默认大小是16个元素(必须是2的幂)。这就是 Java 7 中 ArrayList 和 HashMap 类 的代码片段: 1 2 3 4 5 // fr 阅读全文
posted @ 2018-07-23 11:30 甜菜波波 阅读(12800) 评论(0) 推荐(1) 编辑
摘要:在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL。配置如下: <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web. 阅读全文
posted @ 2018-07-20 16:02 甜菜波波 阅读(2237) 评论(0) 推荐(1) 编辑
摘要:最近在看spring的资源获取时发现JDK里存在几种不同方式的资源获取,因比较混乱特地总结起来帮助和我一样混乱的人理解。下面是我项目的类结构图,在 src/main/java 下有两个类 ResourceTest.java和Resource.java ,resources 目录下有两个资源文件 re 阅读全文
posted @ 2018-07-19 18:33 甜菜波波 阅读(437) 评论(0) 推荐(0) 编辑
摘要:Start with JVM 周志明先生著-《深入理解Java虚拟机》,书买回来好几天了,但是最近才准备开始搞一搞了(哭瞎…..)。首先是第一章的Java以及JVM发展历史,大概知道了现行的应用最广泛的Java虚拟机是HotSpot,当然一些商业公司也有使用自己的虚拟机。 JVM运行时数据区 这是放 阅读全文
posted @ 2018-07-17 06:28 甜菜波波 阅读(23762) 评论(3) 推荐(0) 编辑
摘要:疑惑 以前在看源码的时候,总是会遇到框架里的代码使用Thread.currentThread.getContextClassLoader()获取当前线程的Context类加载器,通过这个Context类加载器去加载类。 我们平时在程序中写代码的时候,遇到要动态加载类的时候,一般使用Class.for 阅读全文
posted @ 2018-07-16 13:48 甜菜波波 阅读(4249) 评论(0) 推荐(2) 编辑
摘要:web.xml用于配置Web应用的相关信息,如:监听器(listener)、过滤器(filter)、Servlet、相关参数、会话超时时间、安全验证方式、错误页面等,下面是一些开发中常见的配置: ①配置Spring上下文加载监听器,加载Spring配置文件并创建IoC容器: <context-par 阅读全文
posted @ 2018-07-13 17:18 甜菜波波 阅读(9194) 评论(0) 推荐(2) 编辑
摘要:<context-param>的作用: web.xml的配置中<context-param>配置作用 1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></contex 阅读全文
posted @ 2018-07-13 15:48 甜菜波波 阅读(6446) 评论(0) 推荐(1) 编辑
摘要:本文中的垃圾收集器研究背景为:HotSpot+JDK1.7 一、垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代、三个属于年老代,G1属于横跨年轻代和年老代的算法。 JVM会从年轻代和年老代各选出一个算法进行组合,连线表示哪些算法可以组合使用 二、各个垃圾收集器说明 1、Seria 阅读全文
posted @ 2018-07-09 15:42 甜菜波波 阅读(171) 评论(0) 推荐(0) 编辑
摘要:写这篇wiki的目的:最近在调整Hbase的JVM,翻了些文档和wiki,想写点东西,给自己和想了解jvm日志和参数的同 学提供些帮助. 一:理解GC日志格式,读GC日志的方法 1:开启日志 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps 阅读全文
posted @ 2018-07-09 14:10 甜菜波波 阅读(359) 评论(0) 推荐(0) 编辑
摘要:Java GC类型 Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集。 UseParNewGC 打开此开关参数后,使用ParNew+Serial Old收集器组合 阅读全文
posted @ 2018-07-09 13:36 甜菜波波 阅读(2092) 评论(0) 推荐(0) 编辑
摘要:1 2 3 4 [ ~]# cat gc.log.0 | grep 'Full GC' 1.652: [Full GC (System) 1.652: [CMS: 0K->21718K(262144K), 0.0837910 secs] 48398K->21718K(458752K), [CMS P 阅读全文
posted @ 2018-07-09 13:21 甜菜波波 阅读(436) 评论(0) 推荐(0) 编辑
摘要:一、日志分析 理解GC日志是处理Java虚拟机内存问题的基本技能,下面我们具体来看看。 通过在java命令种加入参数来指定对应的gc类型,打印gc日志信息并输出至文件等策略。 1、编写java代码 public class ReferenceCountingGC { public Object in 阅读全文
posted @ 2018-07-09 12:55 甜菜波波 阅读(1632) 评论(0) 推荐(0) 编辑
摘要:在catinlin.sh的最上面加上 JAVA_OPTS=" -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/lnmp/tomcat8/gc.$$.log" 阅读全文
posted @ 2018-07-09 11:58 甜菜波波 阅读(2333) 评论(0) 推荐(0) 编辑
摘要:本文是 Plumbr 发行的 Java垃圾收集指南 的部分内容。文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息。我们通过 -XX:+UseSerialGC 选项,指定JVM使用串行垃圾收集器, 并使用下面的启动参数让 JVM 打印出详细的GC日志: -XX:+PrintG 阅读全文
posted @ 2018-07-09 11:53 甜菜波波 阅读(270) 评论(0) 推荐(0) 编辑
摘要:堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor 阅读全文
posted @ 2018-07-06 16:47 甜菜波波 阅读(4362) 评论(4) 推荐(1) 编辑
摘要:李克华 云计算高级群: 292870151 195907286 交流:Hadoop、NoSQL、分布式、lucene、solr、nutch 李克华 云计算高级群: 292870151 195907286 交流:Hadoop、NoSQL、分布式、lucene、solr、nutch 李克华 云计算高级群 阅读全文
posted @ 2018-07-06 11:00 甜菜波波 阅读(6356) 评论(0) 推荐(0) 编辑
摘要:1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话, 阅读全文
posted @ 2018-07-06 10:43 甜菜波波 阅读(139) 评论(0) 推荐(0) 编辑
摘要:前提: 某大型跨境电商业务发展非常快,线上机器扩容也很频繁,但是对于线上机器的运行情况,特别是jvm内存的情况,一直没有一个统一的标准来给到各个应用服务的owner。经过618大促之后,和运维的同学讨论了下,希望将线上服务器的jvm参数标准化,可以以一个统一的方式给到各个应用,提升线上服务器的稳定性 阅读全文
posted @ 2018-07-06 10:20 甜菜波波 阅读(208) 评论(0) 推荐(0) 编辑
摘要:当开发maven项目时,如果workspace中有maven依赖的项目,并且groupid和artifactId都相同,maven就会优先依赖workspace中的项目文件,如果想依赖maven库中的jar包,可以关闭workspace中的依赖项目,或者修改依赖项目的版本 阅读全文
posted @ 2018-07-03 16:56 甜菜波波 阅读(204) 评论(0) 推荐(0) 编辑
摘要:最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下。 一、Thread Dump介绍 1.1什么是Thread Dump? Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的t 阅读全文
posted @ 2018-07-02 11:03 甜菜波波 阅读(4975) 评论(0) 推荐(1) 编辑
摘要:一,在centos linux 上查看进程占用cpu过高 top shift+h 查看哪个进程程消耗最高 二,查看JAVA进程中哪个线程消耗最高 2.1 导出java运行的线程信息 jstack 进程id(jps查看) jstack 进程id > ps.txt jstack -l 进程id (窗口打 阅读全文
posted @ 2018-07-02 10:51 甜菜波波 阅读(11770) 评论(0) 推荐(0) 编辑
摘要:ps -ef|grep java 1. jps 或 ps –ef|grepjava (获取PID) 阅读全文
posted @ 2018-07-02 10:47 甜菜波波 阅读(2534) 评论(0) 推荐(0) 编辑
摘要:什么是Thread Dump Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程 阅读全文
posted @ 2018-07-02 10:40 甜菜波波 阅读(603) 评论(0) 推荐(0) 编辑
摘要:李克华 云计算高级群: 292870151 195907286 交流:Hadoop、NoSQL、分布式、lucene、solr、nutch 李克华 云计算高级群: 292870151 195907286 交流:Hadoop、NoSQL、分布式、lucene、solr、nutch 李克华 云计算高级群 阅读全文
posted @ 2018-07-01 19:49 甜菜波波 阅读(266) 评论(0) 推荐(0) 编辑
摘要:博客园 首页 新随笔 联系 管理 订阅 随笔- 70 文章- 22 评论- 7 博客园 首页 新随笔 联系 管理 订阅 随笔- 70 文章- 22 评论- 7 随笔- 70 文章- 22 评论- 7 设置JVM参数,查看堆大小 1.在eclipse设置JVM参数 打开eclipse-窗口-首选项-J 阅读全文
posted @ 2018-07-01 19:44 甜菜波波 阅读(6229) 评论(0) 推荐(1) 编辑
摘要:《Effective Java 中文版》 豆瓣评分:9.1【1235 人评价】 推荐理由:本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 友情提示:同推荐《重构 : 改善既有代码的设计》、《代码整洁之道》、《代码大全》,有一定的内 阅读全文
posted @ 2018-07-01 11:53 甜菜波波 阅读(227) 评论(0) 推荐(0) 编辑
摘要:业务迅速发展带来了跑批数据量的急剧增加。单机处理跑批数据已不能满足需要,另考虑到企业处理数据的扩展能力,多机跑批势在必行。多机跑批是指将跑批任务分发到多台服务器上执行,多机跑批的前提是”数据分片”。elasticJob通过JobShardingStrategy支持分片跑批。 跑批配置需要做如下修改: 阅读全文
posted @ 2018-07-01 10:36 甜菜波波 阅读(4389) 评论(0) 推荐(0) 编辑
摘要:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build>然 阅读全文
posted @ 2018-07-01 09:55 甜菜波波 阅读(155) 评论(0) 推荐(0) 编辑
摘要:查看进程: 方法: ps -aux | grep 'zookeeper' 系统有返回,说明zookeeper启动。 你可以搜索ps -aux。 阅读全文
posted @ 2018-07-01 08:47 甜菜波波 阅读(3498) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示