自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (21)
  • 收藏
  • 关注

原创 sql语句中的字段的类型问题

今天在生产环境中发现,有几个页面的请求响应非常慢,大概需要5秒左右;但是在测试环境一点问题都没有。         经过测试,问题定位在了一个查询语句上(select username from t_user where user_code=123),经过2个小时左右的代码检查,终于让我发现问题所在了。   user_code字段类型是varchar2,sql语句里面却把这个字段赋值为一个

2013-08-29 23:42:43 986

原创 java程序中三种OutOfMemory异常

jvm中使用了三种不同类型的内存区域:Permanent Generation space(永久保存区域)、Heap space(堆区域)、Java Stacks(Java栈)。    其中永久保存区域主要存放Class(类)和Meta的信息,Class第一次被Load的时候被放入PermGen space区域,Class需要存储的内容主要包括方法和静态属性。    堆区域用来存放Clas

2013-08-29 23:22:30 9429 2

原创 tomcat启动序列图

今天在eclipse里面以debug方式启动了tomcat,单步运行,熟悉了一下tomcat的启动过程,并以序列图的方式做了记录。

2012-11-24 17:43:42 2104 3

原创 tomcat的启动过程

平时我们通过bin目录下的startup.bat来启动tomcat,startup.bat又调用了catalina.bat,catalina.bat从命令行启动org.apache.catalina.startup.Bootstrap,这个类有main方法,所以可以从命令行执行。          Bootstrap执行后,首先执行init()方法进行初始化,然后调用load()和start(

2012-11-21 22:23:25 9764 1

原创 Felix+struts2+spring Dm

最近在研究osgi,想把这个技术应用到web项目中。平时开发都用eclipse,发现使用这几个框架,开发时很不方便,必须要把模块打成jar包部署到osgi环境下运行才知道程序有没有bug.不知道有没有更好的的方法,方便调试。

2012-02-29 11:24:11 886

原创 socket 通信

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.uti

2011-03-04 11:01:00 736

原创 ORACLE 数据库导入、导出

最近在项目中,时间比较宽松,就想学一下数据库技术。想把项目的数据库复制一份到我本机的数据库上。起初,我使用db link来复制表,发现可以复制表和数据,但是索引,列的注释都没有复制到。于是改用exp和imp来做。 远程数据库:projdb     用户名/密码是ctu/admin,表空间:myspace我本机的数据库:testdb    用户名/密码是ctu/adm

2010-10-27 11:10:00 1146

原创 insert 语句中插入&符号的做法。

insert into employer(employer_id,name) values('1','&first');今天用pl/sql写sql的时候,向数据库插入一条数据,值里面包含&这个符号。执行插入时,oracle提示输入first的值。oracle把&first当做变量了。解法如下;1.insert into employer(employer_id,name) values('1','&'||'first');2.insert into employer(employer_id,name) va

2010-10-21 17:24:00 3212

原创 分库分表

一、为什么需要进行分库分表 在业务发展的初期,用户量少,业务量少,一一台服务器,部署一个数据库实例就可以支持所有的读写操作。 随着业务的快速发展,用户量逐渐增多,业务量也上来了,当增加到一定量的时候,就会达到服务器和数据库的瓶颈:1、一个数据库实例支持的并发连接数有上限;2、单个服务器的带宽、CPU、内存大小、磁盘大小都会有一定的上限,不能无限扩展;3、并发读写数据库会产生大量锁等待,导致响应时间变长;因此,我们的目标就是:1、提高支持的并发连接数2、增加带宽...

2021-03-14 12:40:13 140

原创 win10安装 Kubernetes

1.安装 Docker Desktop for windows2.查看Kubernetes版本4.配置docker镜像源,和第三步配合使用,这里要配置阿里云的镜像3. 下载k8s环境配置工具的代码https://github.com/AliyunContainerService/k8s-for-docker-desktop.git5.执行PowerShell在Windows...

2020-04-23 00:03:52 3518

原创 从0开始入手k8s部署springboot应用

1、开发环境 1.1 操作系统win10, 开启虚拟化 1.2 eclipse, jdk1.8,maven 3 1.3 docker, kubernetes、kubectl2、创建spring boot工程 该工程提供一个hello world服务,访问http://localhost:8080/hello,浏览器显示hello world...

2020-04-22 23:57:15 1813 1

原创 jvm 内存配置

在启动java程序时创建jvm,操作系统会给jvm分配内存,这块内存就是jvm的运行时数据区。运行时数据区通常包括这几个部分:程序计数器(Program Counter Register)、Java栈(VM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)经常配置的内存参数主要有如下几个:Xss:每个线程的stac...

2020-04-22 23:04:36 662

原创 cas服务器时间不同步导致两台服务器

使用cas做单点登录时,两台客户端服务器A和B,cas认证服务器C.使用keytool生成服务端证书和客户端证书,把客户端证书分别导入到A和B的jdk证书库,服务端证书配置到cas服务器的tomcat里面。        在测试登录的时候,发现证书验证失败。于是,使用keytool -list -v -keystore 查看证书信息,发现客户端jdk的证书库的有效时间与cas服务器的证

2014-03-11 11:57:56 2211

原创 在使用spring mvc时,我使用了@Service这样的注解, 发现使用注解@Transactional声明的事务不起作用

问题出现的场景:在使用spring mvc时,我使用了@Service这样的注解, 发现使用注解@Transactional声明的事务不起作用。我的配置如下:                 原因是:component-scan和事务所在的上下文不一样,component-scan所在的配置是由servlet加载的,事务所在的配置文件是由Listen

2014-02-08 17:33:59 31641 3

原创 mysql Access denied for user \'root\'@\'localhost\系列问题的解决方法

mysql Access denied for user \'root\'@\'localhost\ 的解决方法

2014-01-23 12:03:58 7680

转载 Java中OutOfMemoryError与unable to create new native thread(JVM创建大量线程)的关系

该文章转自以下网址:http://hi.baidu.com/hexiong/item/037488116cefd90a8ebde4b1          在java应用中,有时候会出现这样的错误:OutOfMemoryError: unable to create new native thread。这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半

2013-08-29 23:26:47 1160

原创 Tomcat的Connector组件

上一次画了一个Tomcat的启动序列图,了解了tomcat的主要组件和启动顺序,今天着重了解一下Connector组件。   Tomcat各个组件的实例化都是在Catalina类的初始化过程中完成的,然后启动各个组件。这里从Connector的start()方法开始。connector.start()方法里面创建了一个CoyoteAdapter对象,这个对象负责处理请求;然后把Coyote

2012-12-05 23:40:09 1595

原创 获取txt文件的编码格式

在项目中有一个功能是从本地上传一个txt文件,按行读取文件内容,并按规定的格式解析文件,并把解析出来的数据存入数据库。并且文件的格式需要根据文件的内容进行判断。    这个需要主要由两个功能组成,一个是文件上传,一个是读文件。    文件上传使用struts2的文件上传功能,读文件肯定是java.io了。不过这里的重点并不是说明文件上传或者是java的IO,而是如何知道文件的编码格

2012-11-27 09:17:26 10261

原创 使用FreeMarker生成xml字符串

1、使用FreeMarker需要freemarker-2.3.8.jar,当然,也有其他版本的2、在java工程里面建如下图的包路径 org.test是顶层包,test.java是测试类,里面就一个main方法,调用MessageTempleteManager的方法。MessageTempleteManager负责生成xml;templete包下面放模板文件下面看代码:

2012-11-26 13:09:26 6602 1

原创 批处理练习4

下面练习两个命令的使用:setlocal、shift1、setlocal执行 setlocal设置环境变量,但是只对该批处理文件有效。要还原原先的设置,必须执行 endlocal。 达到批处理文件结尾时,对于该批处理文件的每个尚未执行的 setlocal命令,都会有一个隐含的 endlocal被执行。练习:echo offrem 查看环境变量的值set WOK

2012-11-25 18:27:13 1169

原创 批处理练习3---for命令续

接着上一次的for命令练习继续,上一次练习到/F选项,使用该选项时,for命令还有两种用法1、集合是一个字符串echo offecho "带/F选项"for /F "eol=; tokens=1,2,3 delims=;= " %%i in ("help for;nice to meet you.") do @echo %%i %%j %%k2、集合是另外一个命令的

2012-11-25 17:50:06 777

原创 批处理练习3---For命令

for命令该命令对一组文件中的每一个文件执行某个特定命令。下面是help for命令显示的帮助信息:一、基本命令格式FOR %variable IN (set) DO command [command-parameters]  %variable  指定一个单一字母可替换的参数。  (set)      指定一个或一组文件。可以使用通配符。  command    指定

2012-11-25 17:37:51 3190

原创 批处理练习2

这次主要练习if命令。下面打开cmd,输入help if,看一下if命令的帮助吧,帮助很多,只截了一部分,因为后面的是命令扩展,很少用到。从上图可以知道,IF 条件判断语句,有三种用户,格式如下:IF [NOT] ERRORLEVEL number commandIF [NOT] string1==string2 commandIF [NOT] EXIST file

2012-11-25 15:21:13 1162

原创 批处理练习1

在windows系统上面,可以编写脚本执行一些系统命令,这样的脚本是.bat文件,称作批处理文件。练习批处理命令需要打开cmd.exe,我们经常看到的黑框。下面我通过查看命令的帮助,并结合练习来熟悉这些命令的使用。一、rem命令   rem 是个注释命令,用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行,与java语言中//的作用一样,是单行注释。二、echo

2012-11-25 14:51:32 2564

原创 递归算法转换成非递归算法

这周,一个同事在开发这样一个功能:把java对象转换成JSON格式的字符串,我知道有开源的jar包,但是他说那个不能处理他目前的需要,所以需要开发一套转换方法。看了他画的流程图,实在看不懂,就给他提了一些建议,重新画了流程图,并采用递归的方式来实现。并另外给他提了一个建议,看看能否把递归方法用非递归的方式来实现。下面给出一个简单的列子,作为递归算法使用非递归算法来实现的一个思路。

2012-11-24 14:15:31 3400

原创 关于J2EE项目中三层架构如何在开发中得到正确的实施

我现在参与了一个广电项目的开发,项目采用了目前比较流行的框架进行系统的架构Struts2+sping+hibernate,项目的包结构主要分成Action、Service、dao这三层,Action层负责与web界面进行交互,接收界面传来的命令,然后展示不同的界面;Service层服务具体的事务处理,Spring的事务配置在这一层,这一层为Action层提供服务;Dao层就是为了和数据库打交道,进

2012-11-24 12:04:27 2720

原创 关于Java对象和XML之间的相互转换

最近参与的一个软件项目中,由于这个项目被划分为了几个子系统,并且需要和其他公司的系统进行交互,所以各个系统之间中定义了一系列的接口,接口都是基于XML格式的字符串,作为HTTP请求体,进行发送。           在项目中有两种场景需要进行XML和java对象之间转换:             1、在两个系统之间同步数据                    使用这种方式进行交互时,

2012-11-23 23:43:14 4068

原创 tomcat类图一

今天使用StartUml这个工具根据源代码生成了几个类图。启动类BootStrap中创建了一个Catalina对象,Catalina对象引用了一个Server对象,server对象是个单例的,Server里面有多个Service,每个Service有包含多个Connector。其中,Server接口由StandServer类实现,Service接口由StandService类实现,这两

2012-11-22 22:03:10 3335 2

原创 1、获取tomcat源码

1、安装环境          工欲善其事必先利其器,在开始工作之前,先准备好环境和工具:jdk、eclipse、并配置eclipse的svn插件、ant,具体怎么配置就不说了,网上都有。2、下载源码       打开eclipse,新建svn资源库:http://svn.apache.org/repos/asf/tomcat,然后展开这个目录,如图所示

2012-11-18 11:05:56 9244 2

原创 软件资源网址收集

在工作中有很多软件由于在手头没有,或者工作环境中没有,或者有但需要升级,这时需要下载,我们不得不去搜索这些软件的下载地址,花费了不少时间。因此,为了节省时间,在以后我会把这些软件地址慢慢的增加进来,以备使用。 1、jdk         jdk是开源的,在官网下载需要注册oracle的用户           官方网址:http://www.oracle.com/technetwork

2012-11-17 11:42:54 8154

转载 java的关键字volatile

<br />Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而volatile关键字就是提示V

2011-03-23 13:22:00 566

原创 选择最有效率的表名顺序

Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当Oracle处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。例如:表TAB1 16,384 条记录表TAB2 1条

2011-03-07 11:28:00 2137

原创 java序列化

Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。把Java对象转换为字节序列的过程

2011-03-04 11:09:00 581

原创 数据库设计范式

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。第一范式(1NF)无重复的列  所谓第一范式(1NF)是

2011-03-03 17:12:00 856

原创 数据库优化方法整理

数据库优化的目标无非是避免磁盘I/O瓶颈、减少CPU利用率和减少资源竞争。在基于表驱动的信息管理系统(MIS)中,基本表的设计规范是第三范式(3NF)。第三范式的基本特征是非主键属性只依赖于主键属性。基于第三范式的数据库表设计具有很多优点:一是消除了冗余数据,节省了磁盘存储空间;二是有良好的数据完整性限制,即基于主外键的参照完整限制和基于主键的实体完整性限制,这使得数据容易维护,也容易移植和更新;三是数据的可逆性好,在做连接(Join)查询或者合并表时不遗漏、也不重复;四是因消除了冗余数据(冗余列),在查询

2011-03-03 16:57:00 7456 1

原创 数据库视图有什么作用

<br /><br />首先,使用视图有几个好处是:<br /> <br /> 1、视图能简化用户的操作<br /> 经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。<br /><br /><br /> 2、视图机制可以使用户以不同的方式查询同一数据<br /> 通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。<br /> 数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。<br />

2011-03-03 16:47:00 11028

原创 通过javabean操作xml

<br /> <br />编写一个xml文件,然后使用xmlSpy生成xsd,下一步要做的就是把xml转换成javabean了。<br />我从apache网站下载了xmlbeans-2.5.0这个压缩包,然后解压,<br />从命令行进入解压后的文件夹里面的bin目录,里面有个文件叫scomp.cmd。<br />我把生成的xsd文件放在了c:/,其内容是<br /><?xml version="1.0" encoding="UTF-8"?><br /><xs:schema xmlns:xs="http:

2010-11-02 14:55:00 1810

原创 自己写的一个数据库连接池的使用

<br />1.在工程里面加入以下jar文件:<br />    mydatasource.jar,--<br />     dom4j.jar,<br />     ojdbc<br /> 2.把连接池配置文件放在工程src目录下或者其他目录,如pool.xml,其内容如下:<br />  <?xml version="1.0" encoding="UTF-8" ?><br /><pools><br />        <pool name="default"><br />           <driv

2010-11-01 17:30:00 935

原创 json字符中的特殊字符处理

最近,在页面上用js进行取值,然后组成json字符串发送到后台,发现当textArea里面包含一些特殊字符,比如“,‘,:等字符时,在后台解析json字符串的时候,就会发生异常。 解决办法是,把这些特殊字符进行转换后,再处理。function encodeJsonComponent(json)    {              json = replaceAllEx(js

2010-10-27 13:11:00 5875

原创 使用db link 把ORACLE 数据库中的表复制到另外一个数据库,也可以把表中的数据从一个库复制到另外一个库的表

数据库1:db1数据库2:db2一、下面把db1里面的表,复制到到db2: 1.在db2里面创建db link  create public database link mydblink  connect to scott  identified by tigger  using 'db1';  2.只复制一个表和数据。  create table product as select * from product@mydblink  如果想复制所有的表和数据,可以这样做:    select 'create

2010-10-27 11:23:00 9003

felix+strust+spring-DM的例子

最近一段时间有不少朋友发邮件给我要这个例子,有时候没有来得及回邮件,今天把代码上传到CSDN上,需要的下载吧,2个资源分,哈哈。 1、解压后,里面有5个工程,名字为abc的工程是个web工程,用来部署struts插件工程,其他四个是从网上找的获取时间的例子; 2、把abc这个工程导入eclipse,发布到tomcat6.0运行; 3、访问http://localhost:8080/abc/time/showtime.action,出现时间的话,就成功了。

2012-08-20

文件上传下载安装文件

这个是已编译好的可以使用的安装文件,下载后,放入tomcat6上运行。

2011-12-14

基于struts2开发的文件上传和下载工具

工作闲暇之余,发现很多时候需要把文件从一台服务器拷贝到另外一台服务器,有时候使用ftp,或像飞秋之类的软件。如果没有安装这些软件怎么办?于是想起做一个文件上传和下载功能的项目,通过浏览器进行文件传输,方便。 这个是源码,方便需要的朋友进行学习和参考。稍后会把编译后可运行的文件上传。

2011-12-12

增加了上传图片功能的CkEditor

给ckeditor增加了上传图片的功能,下载后,直接放入web工程的webcontent目录下面就可以了

2011-12-08

ant一键构建工具

使用Ant从svn更新项目、编译、打包,一键完成。

2011-12-06

window系统下使用命令行从ftp服务器下载文件的工具

window系统下使用,从ftp服务器下载文件。 下载后,解压到c盘根目录,修改ftp.txt文件中的IP地址,ftp用户名和密码,执行ftp.bat后,把ftP服务器上的文件下载到c:/ftpfile目录。

2011-12-06

用于eclipse的股票插件

该插件使开发者在eclipse中可以查询股票信息。 下载该插件,放入plugins目录,重启eclipse。然后在工具栏点击股票图标,打开股票视图,输入股票代码,按回车即可显示股票信息;如果想一次查询多个股票,输入股票代码时以“,”号分隔。

2011-12-04

eclipse中的股票插件

这个是使用eclipse开发的插件,下载后放在plugins目录下。 在eclispe中查看股票信息的插件

2011-12-03

eclipse股票插件

这是个eclipse插件,下载后放入eclipse的plugins目录即可。 输入股票代码,按回车,显示股票信息;如果一次查询多个股票,股票代码用,号隔开。

2011-12-03

Eclipse插件

在上个版本的基础上,增加了右边的文件列表,在文件树上选择一个文件夹,在右侧列表中显示文件夹里面的文件列表,双击列表可以打开文件夹或文件。 eclispe插件,下载后,放到eclipse的plugins目录,重启eclipse,在菜单栏找到“File Explorer"菜单,打开MyFileExplorer视图,列出了电脑上的所有分区,选择分区后,显示其下面的文件。 操作:选择树节点,右键菜单可以添加文件夹、删除文件夹、刷新文件夹;双击节点,可以修改文件夹的名称。 双击文件名,调用外部程序打开文件,如doc,使用word打开

2011-12-03

[删除] Eclipse资源浏览插件MyExplorer(含源码)

eclispe插件,下载后,放到eclipse的plugins目录,重启eclipse,在菜单栏找到“File Explorer"菜单,打开MyFileExplorer视图,列出了电脑上的所有分区,选择分区后,显示其下面的文件。 操作:选择树节点,右键菜单可以添加文件夹、删除文件夹、刷新文件夹;双击节点,可以修改文件夹的名称。 双击文件名,调用外部程序打开文件,如doc,使用word打开

2011-11-27

java socket编写的上网代理

使用java socket开发的上网代理,编译后,运行Start.class,然后修改浏览器的代理服务器,端口为10101

2011-11-27

用java写的一个数据库连接池

自己开发的一个数据库连接池,包含代码,在oracle测试了一下,请各位对代码指正。 使用的方法如下: 1.在工程里面加入以下jar文件:mydatasource.jar,dom4j.jar,ojdbc14.jar 2.在工程目录任意位置放入连接池配置文件,如pool.xml,其内容如下: <?xml version="1.0" encoding="UTF-8" ?> <pools> <pool name="default"> <driver-class> oracle.jdbc.driver.OracleDriver </driver-class> <url>jdbc:oracle:thin:@192.168.1.7:1521:TESTDB</url> <username>appuser</username> <password>111111</password> <maxPoolSize>1</maxPoolSize> </pool> <pool name="elite"> <driver-class> oracle.jdbc.driver.OracleDriver </driver-class> <url>jdbc:oracle:thin:@192.168.1.151:1521:myDB</url> <username>admin</username> <password>admin</password> <maxPoolSize>1</maxPoolSize> </pool> </pools> public static void main(String[] args) { String conf = "/org/sky/proxy/pool.xml"; try { IConnectionPool pool = ConnectionPoolFactory.buildConnectionPoolFactory(conf).getConnectionPool("default"); IConnection conn = pool.getConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select * from TB_EVENTS"); while(rs.next()){ System.out.println(rs.getString(1)); } conn.close(); //pool.realseConnection(conn); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }

2010-10-29

使用struts1.x上传多个文件的一中方法

在项目中要上传多个文件,经过百度,Google,终于弄出来了。

2010-08-09

ibatis的程序例子代码

这个工程展示了ibatis的用法,其中也提到了excel文件的生成方法,有问题,请各位朋友提出来,共同讨论

2009-02-10

计算机毕业论文

我的毕业设计是让开发一个趋势组件,在jfreechart的基础上,我完成了我的设计。

2008-06-24

图书馆管理信息系统报告

这是一个软件需求分析报告。

2008-01-21

路由选择算法java源码

本程序实现了路由选择算法

2008-01-21

模拟银行管理与业务系统

大型数据库课程设计源码,开发语言java,数据库采用oracle,请大家多多指教。

2008-01-20

即时通讯工具(局域网内通讯)

一个聊天工具,模仿qq的界面做的。大家下了后,可以随便改。

2008-01-13

图书管理系统面向对象分析与设计报告.doc

这是我软件工程课做的,请大家多多指点,呵呵

2008-01-13

空空如也

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

TA关注的人

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