自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(283)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java多线程专题

Java多线程专题 Java多线程专题01 Java多线程专题02 Java多线程专题03 Java多线程专题04 Java多线程专题05 Java多线程专题06 Java多线程专题07 Java多线程专题08 Java多线程专题09 ...

2020-10-28 12:11:32 554

原创 手写一个Mini版Spring框架

前言:我们的目标是自己动手写一个类似于Spring的框架,包含IoC,MVC,JDBCTemplat,AOP等基础特性。这个框架是演示性质的,为了学习而建,但是并不简陋,所以是一个可以运行使用的框架。这个框架还有一个目的,为了引导人去读Spring源代码,所以目录结构,Class名Interface名与Spring的名字是一样的,甚至内部的method和field名字也是基本一样的。这个小的框架叫做Minis(mini-Spring)框架结构示例截图如下:目前我们将代..

2020-06-08 09:23:57 1330

原创 什么是编程(Python版):目录

目录概述程序、数字与进制初等数学题解基本算术运算求阶乘求平方根求阶乘的平方根化乘除为加减计算机内部探秘进制转换及数据存储统一到加法程序执行编程基础概念操作系统编程语言程序结构数据结构面向对象编程进程与线程递推与递归分治算法及性能分析更多数学趣题求对数(向John Napier致敬)求质数Fibonacci斐波拉契数列Pascal/杨辉三角Hanoi塔走迷宫方程求解同余方程求面积(刘徽割圆术)Bernoulli伯努利数(向Ada致敬)字符处理字符编码Python字符串操作凯撒密码Caesar cipher

2020-05-22 10:41:40 693

原创 个人微信公众号阅读导航目录

公众号地址传送门:https://mp.weixin.qq.com/s/JCBnKP8WKjWojRF5BJ5MXA如果有您关注的内容,欢迎转发和关注哦!想看到而又没看到的内容,欢迎在评论区提问补充哦!Java面试机经(初级篇) Java 面试机经(初级篇-01期) 原创书籍 Java语言十五讲(前言) Java语言十五讲(第一讲 ...

2019-11-20 09:34:10 1264

原创 Java面试机经出炉了

感谢大家长久以来对本公众号的支持和关注,一直以来就想过要编写一本有助于计算机专业相关毕业生的面试题集,时至今日《Java面试机经(初级篇)》终于可以出炉了。更加荣幸的是,这次的编写可以和郭老师一起合作完成,郭老师作为Sun Microsystems公司技术研发中心Java组成员,虽然没有为Java发展做出什么贡献,没有开辟新大陆,就像是一个跟随哥伦布船队的小船员,也是见证了一段历史。但是对新大陆热...

2019-09-18 09:38:23 727

原创 Java语言十五讲(前言)

特此声明:本文为本人公司郭总原创书籍的前言,该书还未出版,作为该书籍的初版在接下来的时间里,将免费在本人微信公众号内不间断更新与大家一起学习阅读。喜欢学习的小伙伴可以搜索微信公众号:程序员Hotel 或者在文末处微信扫描二维码识别关注前言每年技术媒体都会评选最受欢迎的编程语言,Java总是高居前位。自然,没有办法说一个语言绝对比另一种语言好,这个话题一如既往地会引起大家无谓的争论不休。对别...

2019-03-26 18:31:21 989 2

原创 枚举类根据name获取value

枚举类如下所示:public enum ProductEnum { //币种 Product_Currency_CNY("productCurrencyCny","元","CNY"), Product_Currency_USD("productCurrencyUsd","美元","USD"), Product_Currency_HKD("productCurrencyHkd","港元","HKD"), Product_Currency_GBP("produc

2021-01-08 14:02:49 3160 2

原创 视频讲解:设计模式专题

设计模式:工厂 设计模式:抽象工厂 设计模式:适配器 设计模式:中介者 设计模式:迭代器 设计模式:装饰器 设计模式:责任链 设计模式:桥接

2020-11-20 09:20:45 450

原创 SELECT list is not in GROUP BY clause and contains nonaggregated column

首先打开数据库客户端错误信息如:nested exception is java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'digitao.API1.name' which is not functionally dependent on columns in GROUP BY clause; this

2020-08-19 13:56:12 1104

原创 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary log

1、本地解决办法:在mysql中执行以下命令SET GLOBAL log_bin_trust_function_creators=TRUE;2、也可以通过修改配置文件的方式解决:在my.ini(linux下为my.conf)文件中 [mysqld] 标记后加一行内容为(修改后需重启MySQL服务):log-bin-trust-function-creators=1原因解释来源于网络,出处作者不详:这是我们开启了bin-log,我们就必须指定我们的函数是否是1.D...

2020-08-10 17:33:01 692

原创 更多数学趣题:走迷宫

===》点我返回目录《===我们都走过迷宫,在弯弯曲曲的小道上寻找出口,迷茫中夹带惊喜。刚开头都是乱走,碰到死胡同后又折回来,慢慢地有了一套办法,确保不遗漏可能的路径,还有些人知道使用左手/右手法则。我们用程序来走走迷宫。我们这儿定义的迷宫是简单形式的,一个N*N矩形,四周有外墙,有一个入口,一个出口,保证有解,可以走的范围从[0,0]到[N-1,N-1],假定[0,0]为入口,[N-1,N-1]为出口。计算机里面,我们可以采用不遗漏可能路径的办法,就是深度优先搜索。作为预备知识,先介绍一下深度

2020-07-01 11:01:37 1248

原创 更多数学趣题:Hanoi塔

===》点我返回目录《===印度有个古老传说:在世界的中心贝拿勒斯的神庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上穿好了由大到小的64片金片,这就是汉诺塔。不论白天黑夜,一群沉默的僧侣在移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消失。我们仔细看上面的步骤,会发现一个关键点,就是对三个盘片来讲,就是要先想方设法让上面的两个整体移动到中间柱子,剩下的大.

2020-07-01 10:58:04 814

原创 更多数学趣题:Pascal/杨辉三角

===》点我返回目录《===Pascal/杨辉三角型如下:或者是中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现了这个三角。Pascal帕斯卡在1654年发现这一规律(13岁时发现的),所以这个表又叫做Pascal三角。它的特点是下面一行的数字由上面一行的数字两两相加而来(从上图等腰三角形看得很清楚。)既然知道了这个特点,我们程序思路就有了,通过前一行算后一行,用循环即可以做到。我们可以先提炼出一个函数,根据上一行得出下一行:def calculaterow(n,las

2020-07-01 10:51:24 541

原创 更多数学趣题:Fibonacci斐波拉契数列

===》点我返回目录《===现在世人皆知的Fibonacci斐波拉契数列最早来源于兔子繁殖问题,大约在800年前由Fibonacci引入(他的另一大贡献是引入了阿拉伯数字)。说的是假定兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?对一对新生的兔子,我们看一下怎么繁殖的:第一个月兔子没有繁殖能力,所以还是一对;第二个月兔子还是没有繁殖能力,所以还是一对;第三个月兔子生下一对小兔,有了两对;第四个月兔子又生下一对小

2020-07-01 10:47:06 492

原创 更多数学趣题:求质数

===》点我返回目录《===质素也叫素数,只能被自己和1整除,它们是数的骨架,由他们组合可以生成别的数。它们是人类最着迷的数字,自古就吸引了无数学者学生。古代的人们就知道素数有无穷多个,这一点被欧几里得所证明。而伟大的数学家欧拉靠心算算出了232-1是一个素数。(欧几里得,公元前325年-公元前265年,维基百科)我们现在就编程序判断一个数是不是素数。基本的思路就是从2开始一个一个算能否被n整除,如果可以被整除,就说明不是素数。如果我们动一下脑筋,就会看出不需要算到n,因为很明.

2020-06-10 14:24:14 542

原创 更多数学趣题:求对数

===》点我返回目录《===在数学中,对数是对求幂的逆运算,如果a的x次方等于N,那么数x叫做以a为底N的对数(logarithm),记作x=logaN。这是我们现代人的理解方式,而从历史上,其实不是这样的。1614年John Napier提出了对数,而指数是才后来发明出来的概念,欧拉1770年写道“对数源于指数”。历史上对数是为了简化计算,将乘除化为加减,将乘方开方化为乘除。为什么对数能简化运算?这源自对数的一个独特的特性:log(ab)=log(a)+log(b).例如,我们计算1234

2020-06-10 14:11:14 845

原创 编程基础概念:分治

===》点我返回目录《===当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。基本的步骤为:分而治之,把一个复杂的问题分解成很多规模较小的子问题,然后解决这些子问题,把解决的子问

2020-06-09 15:31:34 367

原创 编程基础概念:算法及性能分析

===》点我返回目录《===算法是计算机上的一系列操作,每个算法都需要占用计算机的计算资源,我们要衡量算法的时间复杂度和空间占用情况。时间复杂度,我们一般用大O表示,我们会看三个指标:最坏情况下的时间复杂度;平均时间复杂度;最好情况下时间复杂度。常数阶:O(1)对数阶:O(log2n)线性阶:O(n)线性对数阶:O(nlog2n)平方阶:O(n²)立方阶:O(n³)指数阶:O(2^n)阶乘:O(n!)分析程序代码,记录每一个操作,这样做不太可行,工作量太大,所以一

2020-06-09 15:31:26 421

原创 编程基础概念:递推与递归

===》点我返回目录《===在进行计算的时候,经常会用到递推的概念。递推是一种用若干步可重复的简运算来描述复杂问题的方法。通常是通过计算前面的一些项来得出序列中的当前项的值。程序调用自身称为Recursive递归。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。比如对斐波那契数列,我们看这个函数的定义,fib(n)的返回值是fib(n-1)+fib(n-2)。这个概念上很清晰,但是

2020-06-09 15:29:18 707

原创 编程基础概念:进程与线程

===》点我返回目录《===对于操作系统而言,进程是整个系统的根本,操作系统是以进程为单位执行任务。随着技术发展,在执行一些细小任务,且本身无需分配单独资源时,进程的实现机制依然会繁琐的将资源分割,这样造成浪费,而且还消耗时间,所以就有了专门的多任务技术被创造出来——线程。 线程的特点就是在不需要独立资源的情况下就可以运行。如此一来会极大节省资源开销,以及处理时间。进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局

2020-06-09 15:28:38 291

原创 编程基础概念:面向对象编程

===》点我返回目录《===现在的世界,大家都用面向对象编程。这是结构化编程的基础上进一步发展出来的。以前编程的范式是数据结构+算法,后来软件规模越来越大,于是在一个程序里面出现了成百上千个函数过程和数据结构,程序很不容易维护。于是人们就把程序分解成子程序,子程序里面包含更小的组成部件,每个部件由一些数据结构及相关的算法组成。这些部件我们叫做对象。按照这样的观点,程序由一堆对象及对象间的消息互动组成。听起来好像很平常,甚至认为很自然很理所当然。这个思想却是一大进步。这个范式最后成为主流,现在几乎所有

2020-06-07 15:21:36 351

原创 编程基础概念:数据结构

===》点我返回目录《===前面我们已经用程序来处理数据了,隐含地把它们的组合也涉及了,也就是说,我们要处理的并不是一个数字,也不是单个字符,而是一组数字和字符。这是一种数据之间的组合结构。我们可以按照数据之间的关系进行分类,如果一组数据是一个接着一个的排着队,1:1,我们可以叫他们线性序列,如果它们是一个对应两个或者多个,1:N,我们叫这种结构为树,如果它们之间的关系是多对多,N:N,我们叫做图。线性序列: 48 6 57

2020-06-07 15:19:50 669

原创 编程基础概念:程序结构

===》点我返回目录《===我们这里探讨的程序结构,基于一个编程的范式:结构化编程(Structural Programming)。当然还有别的范式,技术演进的历史进程,通行的就是结构化编程和面向对象编程,而面向对象编程内部的基础还是结构化编程的底子。所以我这里也只说基本的结构化编程的程序结构。一个计算机程序从结构上来说,有三种结构:Sequence顺序,Decision分支和Repetition循环。科学家证明了只要这三种结构就可以完备地表达算法。Sequence顺序结构举例:a=1+2

2020-06-07 15:18:20 1604

原创 编程基础概念:编程语言

===》点我返回目录《===我们在演示理论计算机的时候,用了两种编程的方式,一种是二进制,一种是机器指令。 机器指令代码表示为:LOAD R0 40LOAD R1 41ADD R2 R0 R1STORE 42 R2HALT用十六进制表示为:10401141320124220000计算机编程语言就是指令规范,告诉机器怎么运行。前面演示看到的机器指令我们叫汇编语言。计算机语言虽然是给机器用的,但是却是人来写的,二进制和汇编太底层了,对人不友好,所以又进一步发展

2020-06-07 15:14:53 761

原创 编程基础概念:操作系统

===》点我返回目录《===上面我们探索到了一台理论上的计算机是什么样子的。为了让大家能使用计算机,这么一台裸机肯定是不行的,不能让大家自己去管理CPU,管理内存,管理输入输出设备,管理程序装载。这些底层的工作是统一的,不需要每一个使用计算机的人自己动手去做。这就诞生了操作系统,把计算机的这些组成部件的管理给包起来,然后使用计算机的人其实使用的是操作系统。操作系统可以看成是一个调度程序,它负责管理计算机这台设备,包括CPU、内存和I/O设备。那它调度什么东西呢?如果一台计算机是一种专用的机器,其

2020-06-07 15:12:45 403

原创 计算机内部探秘:程序执行

===》点我返回目录《===上面我们知道了存储和加法实现,但是这个还不是程序,那么一个程序是怎么在计算机内部执行的呢?有了前面的讲解,你能猜到,还不是一堆电路在飞速干活,这个过程好机械。这么想就对了,计算机就是一个又笨又快的机器。通过简单的门电路基本的功能(加法移位逻辑运算)组合成威力无比的现代计算机。你可能厌倦了在这么基本的物理层面学习计算机编程,但是稍安勿躁,虽然这很啰嗦,但是值得的,我们最后花点时间从底层看看现代伟大的发明计算机是如何执行的。现代计算机的理论模型是Turing图灵机,由

2020-06-04 14:28:27 797

原创 计算机内部探秘:统一到加法

===》点我返回目录《===我们继续深究下去,打破砂锅问到底。上述介绍的补码系统粗看起来这是比较奇怪的表示,实际上不然,了解了几种运算后,就会明白补码表示是多么简便。我们来看两个数的加减运算。a+b或者a-b。如果用我们平时数学上的表示,我们需要分别判断a和b的符号,加上运算符,就有8种组合:+++,++-,-++,-+-,--+,---,+-+,+--。我们的内部电路的运算需要判断八种情况,会比较复杂。如果用补码,因为补码自身已经处理了正负数,所以只需要判断运算符是+还是-,如果是+就把a

2020-06-04 14:25:25 438 1

原创 计算机内部探秘:进制转换及数据存储

===》点我返回目录《===我们生活中一直使用十进制系统,而计算机里面一直用二进制系统。这个系统由科学巨人Leibniz莱布尼茨重新发明并提倡。他还写过一篇文章,介绍二进制以及用它来解释古代中国伏羲图,以至于后来很多人认为他从《周易》中得到启发发明二进制。这种论调在民族自卑情节下流传广泛,这是往自己脸上贴金。(GottfriedLeibniz,1646.7.1-1716.11.14)我们来看看进制之间怎么转换。二进制到十进制是很简单的,一个二进制数根据公式其数值等于k*2n+K*2n..

2020-06-01 13:07:33 583

原创 初等数学题解:化乘除为加减

===》点我返回目录《===我们知道四则混合运算加减乘除是算数的基础,这里面乘和除又可以通过加减来实现,所以加减是更为基本的运算。这些我们小学就知道了,人类是这么走过来的,计算机也是这么走过来的。我们先来实现两个数的乘法,a*b,按照定义就是把a自加b次,如3*4,就是把3自己加自己总共加四次。程序如下:def multiply(a,b):if a==0 or b==0:return 0elif a==1:return b...

2020-05-29 16:02:10 1501

原创 初等数学题解:求阶乘的平方根

===》点我返回目录《===这个题目有点趣味,组合了前面两个题目。虽然内心有点疑惑,但是同古人同样不辞辛劳的你把上面两个题目的程序拼在一起:n=int(input("enter a number:"))result = 1while n>1 :result = result * nn = n - 1print (result)n=resultif n>=0:y=n/2while y**2-n>0.0001 o...

2020-05-29 15:56:43 891

原创 初等数学题解:求平方根

===》点我返回目录《===数学里面有很多操作是互逆的,正向操作简单,但是逆向操作很复杂。平方的逆操作是开平方根,这个开方操作计算起来并不容易。费了我们先人很多功夫。在中学的课本中,会讲到竖式计算法。它的基本思路是这样的:比如1156是四位数,不难看出它的平方根是个两位数,且十位上的数字是3.于是问题就转换成:怎样求出它的个位数a?根据两数和的平方公式,可以得到1156=(30+a)2=302+2*30a+a2,所以 1156-302=2×30a+a2,即 256=(30*2+a)a,这

2020-05-27 13:32:05 844 1

原创 初等数学题解:求阶乘

===》点我返回目录《===阶乘用符号表示为!,是一个连续的乘法,比如3!=3*2*1=6,通用式为n!=n*(n-1)*(n-2)*...*1。拿到了这个计算求4!这个题目,你毫不费力写下了这么个程序:print(4*3*2*1)运行结果为24。正确的。然后我们再计算8!,你虽然有点觉得不对劲,还是改写了上面的程序:print(8*7*6*5*4*3*2*1)运行结果为40320。还是正确。不过这个时候,你可能没有底气了,你担心下一个题目是50!。是啊,肯定有什么地方不

2020-05-27 13:27:22 984

原创 初等数学题解:基本算术运算

---》点我返回目录《---计算机从名字来看就是用来做数学计算的,起初也确实是这样子。所以我们就先从Python做数学计算开始入手,解一下中学的数学题目。先做点基础知识的准备工作,看看对于数字,Python都有哪些基本运算。写一段程序如下:print (123+456)print (345-123)print (12*34)print (12345678987654321*12345678987654321)print (56/8)print (56/9)print

2020-05-27 13:17:30 612

原创 程序、数字与进制

程序、数字与进制现在我们用的计算机跟历史上发明的其它工具都不相同:它需要编程。人是好奇而有创造力的物种,从我们远古的祖先在数百万年前手握两块石头敲打砍砸发明石器那个时候起,人类就开始了漫长的发明之旅。(Olduvai砍砸器,约200万年前。大英博物馆收藏。)人类为了生存,不断迁徙和扩展,从非洲走出,遍布亚洲欧洲最后到美洲(那个南非出生的Elon Musk觉得地球装他不下了,一心要移民火星),一路上发明了许多帮助人类生存的工具。我们骄傲的祖先筚路蓝缕以启山林,发明了棍棒、长矛,点燃了火种,成了采

2020-05-22 10:44:12 802

原创 概述

概述本书不是Python语言教科书,我们使用一门语言,最主要的用途是用它来解决各种实际问题。这就是本书的重点:如何用Python语言来解决问题,也因此,本书将会有大量的代码演示及讲解。计算机编程,我们会要处理各种数据,使用各种算法,所以,本书将涉及到数据结构、算法等一些原理方面的知识。我们由浅入深,一步步讲解怎么编程序,因此,本书讲解的只是绝不仅仅限于学习Python,这里面学到的知识是通用的,你可以不费劲地用另一门语言替代书中的Python程序。基本内容如下: 程序、数字与进制 ...

2020-05-22 10:42:36 331

原创 每天进步一点点~注解篇

收藏从未停止,学习从未开始,与其长篇大论,不如简短精悍。每天进步一点点,目标距离缩小点。每天进步一点点,成功就会在眼前。本人水平和能力有限,文章如有不对或有需要修改的地方,还望各位指明纠正1. @SpringBootApplication@SpringBootApplicationpublicclassPxjrApplication{publ...

2020-04-30 15:59:00 349

原创 IntelliJ IDEA 常用插件

“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。”--《论语·魏灵公》Alibaba Java Coding Guidelines阿里巴巴Java编码规范插件,这个首先排在第一位,安装成功后如下图所示会出现编码规范扫描选项,使用过程中也可以实时检测自己的代码编写规范,以便写出更加优秀的代码,鼠标放在项目上右键以及在Tools上也可以对其进行设置...

2020-04-24 16:16:57 863

原创 Lombok

简介Lombok是什么?Lombok一个库,可简化许多繁琐的任务并减少Java源代码的冗余长度。首先在我们未使用Lombok开发时的一个Bean如下所示,代码冗余量很长,这样的代码看起来既没有技术含量,又影响着代码的美观,而且针对每个Bean对象都需要做如此重复的操作。packagecom.example.api.User;importjava.util.Objects;...

2020-04-14 14:20:21 280 1

原创 JVM的内存结构、内存溢出、内存泄漏、内存模型你知道吗?

Java8后,内存分成如下几部分:程序计数器PC Register,Metaspace,Stack,Heap,和本地方法栈。Metaspace用于存放类的元信息以及方法信息;而常量池和静态变量存在Heap中。Heap里面存储运行时产生的对象。Stack里面存放线程相关的数据,如局部变量,参数,对象引用等。PC Register存放的是当前线程执行的指令地址。本地方法栈是调用本地方法时用到的...

2019-12-20 11:44:00 444

原创 Java设计模式~单例模式

单例模式单例(Singleton)模式的定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象...

2019-12-15 15:20:15 327

一个程序员的奋斗史txt

本书描写了一位刚从大学毕业,对社会懵懵懂懂的菜鸟程序员段伏枥,通过自身的努力,一步一步前行,最后成为技术高手,并荣获微软最有价值专家的故事。书中不仅有初涉社会时的无奈,也有苦中作乐的愉悦,更有同事间的勾心斗角,是当今IT职场的一个缩影。 这是一个程序员的奋斗,也是无数程序员的缩影。 同时,这也是一部IT公司潜规则与科技江湖厚黑学的实录。

2018-07-26

学生管理系统

项目描述: 基于jsp+servlet的java学生信息管理系统 运行环境: jdk8+tomcat8+mysql+eclipse/myeclipse/idea 项目技术: jsp+servlet+css+jsp+jdbc 数据库文件: 压缩包自带

2018-07-04

空空如也

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

TA关注的人

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