自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员小章的博客

踏踏实实一步一步学!

  • 博客(66)
  • 收藏
  • 关注

原创 Java初学者笔记--JavaSE篇

Java学习笔记1 Java基础篇待整理部分:序号内容链接地址1Java概述https://blog.csdn.net/weixin_44141495/article/details/1079988182Java环境搭建https://blog.csdn.net/weixin_44141495/article/details/1079989033Java基础概念https://blog.csdn.net/weixin_44141495/article/d

2020-08-26 15:13:15 1313

原创 HashMap源码分析系列 -- 第二弹:HashMap的常见方法的实现流程

HashMap的常见方法的实现流程从今天起,争取一周之内整理完HashMap有关的各种问题。网上有很多HashMap的源码分析的帖子,我看了一些。当然也有写的非常好的,不过大多的源码分析帖企图一篇文章就把问题讲完,有时候看起来就很混乱。而且贴了较多的源码。这里我准备分为5个部分,分别上传五篇篇博文,希望用更清晰的方式,来总结HashMap的相关问题。五个部分HashMap的继承体系,HashMap的内部类,成员变量HashMap的常见方法的实现流程HashMap的一些特定算法,常量的分析Has

2020-08-31 21:09:34 518

原创 每日面试题9:Map的四种遍历方式,以及删除操作

emty

2020-08-31 21:07:40 559

原创 HashMap大厂面试频率高,源码太长了不想看?看完这一篇就完事了!

HashMap源码分析系列 – HashMap的继承体系,内部类,成员变量从今天起,争取一周之内整理完HashMap有关的各种问题。网上有很多HashMap的源码分析的帖子,我看了一些。当然也有写的非常好的,不过大多的源码分析帖企图一篇文章就把问题讲完,有时候看起来就很混乱。而且贴了较多的源码。这里我准备分为5个部分,分别上传五篇篇博文,希望用更清晰的方式,来总结HashMap的相关问题。五个部分HashMap的继承体系,HashMap的内部类,成员变量HashMap的常见方法的实现流程Hash

2020-08-31 19:11:31 667

原创 大厂爱问的HashMap的几个问题,看看你都答得上来吗?

你对HashMap了解多少?某一天你接到一个公司的面试邀请,去参加面试。面试官问你:HashMap熟悉吗? 答:熟悉的,经常用。HashMap的底层是什么? 答:数组+链表+红黑树。简单讲一下HashMap的实现原理!? 答:嗯先用hash算法计算插入位置,然后插入到对应的位置,如果已经有值了判断是否一样,如果不一样就查到其尾部。那好的,请你说一下HashMap的hash算法的实现,以及为什么?答:计算哈希值&(容量-1),这么做可以让链表每个那加载因子为什么是0.

2020-08-30 13:27:51 966 2

原创 什么是HTML? 看这一篇就够了(附带主流IDE推荐)

1 HTML简介1.1 HTML是什么百度词条:HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。

2020-08-29 15:38:44 36469

原创 Java学习笔记 -- 注解 @@@@@@@@@@

Java注解 看到满天的@,还以为恋爱来了我们学习学习接口的时候,我们会发现我们重写的方法头上有一个@Override,这就是一个Java注解。Java注解的格式就是以@起头的。满天的@,到底@谁呢?什么是注解Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。注解是一个标识,可以传入一些参数,当我们类加载

2020-08-29 12:54:02 1934

原创 Java 反射 --JVM:我对你知根知底了 类:????

Java 反射基础篇什么是反射Java的反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。反射的用途在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法生成动态代理。如何使用对于一个字节码文件.clas

2020-08-29 10:58:05 476

原创 Java 对方不想跟你讲话 ,并向你抛出了一个异常

Java异常概述Java异常体系Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。异常分类ErrorError是程序无法处理的错误,它是由JVM产生和抛出的,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。ExceptionException是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。程序中应当尽可能去处理这些

2020-08-29 10:23:46 1216

原创 Java Json解析方式以及IDEA的Json转换插件

JSON简介JSON是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。特点内容简洁和,层次结构清晰,是一种理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。与XML的区别,XML即是一种数据交换格式,可以一种标记语言,而JSON主要是数据的传输。对比这是电话归属地的JSON传输格式和XML的区别,直接肉眼上观察,JSON结构更简单,内容

2020-08-28 19:38:17 3856

原创 DOM4J 解析XML文件 (经典号码归属地案例)

XML可扩展标记语言(eXtensible Markup Language)。特性:xml具有平台无关性, 是一门独立的标记语言.xml具有自我描述性应用场景网络数据传输.数据存储配置文件文件格式.XML文件是保存XML数据的一种方式XML数据也可以以其他的方式存在(如在内存中构建XML数据)。不要将XML语言狭隘的理解成XML文件解析方式SAX解析SAX(Simple API for XML)解析是按照 xml 文件的顺序一步一步

2020-08-28 18:45:05 567

转载 Java 多线程学习笔记

文章目录1.1 线程与进程进程:​ 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少有一个线程线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程1.2 线程调度分时调度所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。抢占式调度优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选

2020-08-28 13:49:37 809

原创 Java核心Api -- 整理篇

Java核心Api常用数据类型序号内容链接地址1Stringhttps://blog.csdn.net/weixin_44141495/article/details/1081007512StringBufferhttps://blog.csdn.net/weixin_44141495/article/details/1081015003Integerhttps://editor.csdn.net/md/?articleId=1082777354Ob

2020-08-28 13:23:45 619

原创 Java Integer类Api文档

Java Integer类Api成员变量MAX_VALUEpublic static final int MAX_VALUE最大的int,2^31-1MIN_VALUEpublic static final int MIN_VALUE最小的int,-2^31常见方法概述比较相关返回值内容描述static intcompare(int x, int y)比较两个 int数字值。intcompareTo(Integer anotherIntege

2020-08-28 13:21:52 1177

原创 IDEA那些炒鸡好用的基础插件(没有介绍JavaEE相关的插件)

Java炒鸡好用的插件本篇介绍的插件没有和JavaEE开发相关的,都是一些基础功能的插件,Java初学者也可以装。1.Codota插件如果说idea的智能提示是你输入几个字母,idea就能快速的找到你要的方法,类。那么codota则是能结合上下文来猜想你要做的操作。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PWTZETCD-1598584150478)(https://gitee.com/darknightjakt/mapdepot/raw/master/img/

2020-08-28 11:10:11 741

原创 快速排序,你值得拥有!

Java 快速排序算法介绍一种很快的排序和其名字一样和希尔排序的思想类似,每次排序都是对整体进行相对有序化,着手处理整体的顺序.将序列分为无数个小序列,最终每个小序列都相对有序实现步骤寻找一个基准值,然后比基准值小的放到基准值的左边,比基准值大的放到基准值的右边执行完上述操作之后,我们以基准值进行分割,将数组分为两部分。每一个部分都当成一个独立的数组,分别找出基准值,都执行上述操作操作重复流程直至序列有序看上去不难不难理解,我们给出一个图例1.整理序列如图所示的

2020-08-28 00:20:58 187

原创 Java 常见的接口 (Comparable,Runnable,Cloneable)

Java常见接口Comparablepublic interface Comparable<T> { public int compareTo(T o);}类对象之间比较“大小”往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作。对于不同的类有不同的语义。如Student类,比较2个学生对象可以比较他们的score分数来评判。该接口是让我们给我们的实体类增加排序规,比如a与b比,如果a.compareTo(b)大于0说明a比b大,反之b比a大,相等说明一

2020-08-27 21:38:01 1493

原创 Java动态规划经典面试题1 (机器人走格子)

题目概述题目分析这是一道经典的面试题,用的就是动态规划算法,我们求最值,获取所有情况这些算法题很多都是动态规划的范畴,首先我们按照解题思路一步步来最后一步当机器人走到最后一步的时候,其位置无非就是终点Finish的上面或者左边,所以我们到达终点(m-1,n-1)的路径数等于到达(m-2,n-1)(m-1,n-2)状态方程显而易见:F(m,n)=F(m-1,n)+F(m,n-1)起始条件如果网格的长度或者宽度为0,那么这个网格就不存在了,0钟可能的路径。边界值如果F(m,

2020-08-27 18:01:59 1042 1

原创 Java 每日面试题 6(线程进程,start()和run()方法)

线程和进程有什么区别?1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互

2020-08-27 16:09:51 436

原创 动态规划算法?一篇带你入门

动态规划基础篇入门案例前一段时间在刷力扣,一开始只刷数组相关的题目,还有链表等,后来发现越来越多的算法题并不是逻辑思维能力足够就能做做出来的,依赖于一定的算法基础,比如匹配字符串,虽然暴力算法很好实现肯定有很多的纰漏。好的算法绝对不是代码行数越短越好,比如以下两个代码就是很好的例子。问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。这道题一看,就会轻易的知道用递归,f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2);public

2020-08-27 15:56:56 239

原创 大厂常问的HashMap线程安全问题,看这一篇就够了!

我们都知道Jdk1.7的HashMap存在安全问题,在多线程环境下,扩容的时候可能会形成环状链表导致死循环的问题,别问我们为什么知道,面试题啊!这篇帖子我来讲一下Jdk1.7HashMap在扩容时的线程安全问题首先我们看一下HashMap在扩容的流程代码流程扩容相关常量DEFAULT_LOAD_FACTOR:默认负载因子,这个参数是判断扩容时的重要参数,当Map中的元素的数量达到最大容量乘上负载因子时,就会进行扩容。如果在构造方法中没有指定,那么默认就是0.75。这个0.75是个非常合理.

2020-08-26 23:55:48 4530

转载 Java 每日面试题8 (TCP UDP 三次握手 四次握手)

TCP与UDP的区别以及三次握手和四次挥手UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去和很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如

2020-08-25 21:01:56 663

转载 Java每日面试题7 (线程创建的4种方式,sleep和wait方法有什么区别)

Java创建线程的四种方式1.继承Thread类实现多线程run()为线程类的核心方法,相当于主线程的main方法,是每个线程的入口a.一个线程调用 两次start()方法将会抛出线程状态异常,也就是的start()只可以被调用一次b.native生明的方法只有方法名,没有方法体。是本地方法,不是抽象方法,而是调用c语言方法registerNative()方法包含了所有与线程相关的操作系统方法c. run()方法是由jvm创建完本地操作系统级线程后回调的方法,不可以手动调用(否则就是普通方法)

2020-08-24 12:43:26 307

转载 Java 网络编程超详细总结(搬运)

1. 概述计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。网络编程就是编写程序使互联网的两个(或多个)设备(如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持。通过其提供的接口我们可以很方便地进行网络编程。2. 网络分层计算机网络20世纪60年代出现,经历了20世纪70年代、80年代和90年代的发展,进入21世纪后,计算机网络已经成为信息社会的基础设施,深入到人类社会的方方面面,与人们的工作、学习和生活息息相关。计

2020-08-23 23:05:09 9808

原创 Java图书管理系统 -- 基于Socket实现客户端服务端拆分

图书管理系统小Demo又又又升级了!本图书管理系统已经经历了三个阶段通过操作数组来实现图书的增删改查方法,用控制台获取用户输入来实现人机交互通过集合容器存储对象,使用序列化在管理系统开启关闭时,加载,存储数据到本地。使用TCP协议实现客户端服务端分离,客户端实现信息输入,信息展示,服务端接收用户请求,并处理数据,将结果返回给用用户。最终效果图第二代图书管理系统:第一代,我们的三层架构实际上是MVC缩水版,service层和controller层其实是一个东西,连接前端的(控制台实现)是

2020-08-23 20:42:40 1982 7

转载 Java IO流笔记 (搬运)

文章目录@[toc]**1、流的概念和作用****1.2、Java IO所采用的模型**1.3、IO流的分类1.4、IO流特性1.5、IO流常用到的五类一接口**1.6、Java IO流对象**1.6.1、输入字节流InputStream1.6.2、输出字节流OutputStream1.6.3、字符输入流Reader1.6.4、字符输出流Writer1.6.5、字节流和字符流使用情况:(重要)1.7、字符流与字节流转换1.8、字节流和字符流的区别(重点)**1.9、System类对IO的支持** [外链图片

2020-08-22 11:21:24 1322

原创 Java 每日面试题6( BufferReader, 对象序列化)

BufferReader属于哪种流,主要是用来做什么,里面有哪些方法?BufferReader属于处理流中的缓冲流,可以将读取的内容存在内存里面,比Reader类多了一个readLine()方法。这篇博文提供了BufferReader类的详细介绍Java中,什么是实现对象序列化?如何实现对象序列化?对象序列化可以将一个对象保存到一个文件,可以将通过流的方式在网络上传输,可以将文件的内容读取转化为一个对象。所谓对象流也就是将对象的内容流化,可以对流化后的对象进行读写操作,也可将流化后的对象传

2020-08-21 15:03:19 419

原创 Java Set类的常见实现类 TreeSet和HashSet

Set集合的常用实现类 TreeSet和HashSetHashSetHashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。特点:不能保证元素的排列顺序HashSet 不是线程安全的集合元素可以是 nullHashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方

2020-08-21 14:38:02 615

转载 Java集合框架那些必须了解的数据结构基础

1 链表1.1 定义​ 链表【Linked List】:链表是由一组不必相连(不必相连:可以连续也可以不连续)的内存结构(节点),按特定的顺序链接在一起的抽象数据类型。​​ 链表是离散存储线性结构​ n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。​1.1.1 补充​ 抽象数据类型(Abstract Data Type【ADT】):表示数学中抽象出来的一些操作的集合。内存结构:内存中的结

2020-08-21 14:36:41 91

原创 Java Map接口的常见实现类

HashMap概述HashMap 是Map 的子类,此类的定义如下:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable​ 此类继承了AbstractMap 类,同时可以被克隆,可以被序列化下来。特点HashMap是 Map 接口使用频率最高的实现类。允许使用

2020-08-21 14:34:37 3711

原创 Java List接口的三大常用实现类

List三大常用集合ArrayList(重点)ArrayList 是 List 接口的典型实现类、主要实现类本质上,ArrayList是对象引用的一个”变长”数组。概述ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,AbstractList 是List 接口的子类。AbstractList 是个抽象类,适配器设计模式。ArrayList 是List 接口的子类,

2020-08-21 14:33:09 2144 2

原创 Java集合框架的Collection和Map接口概述

Java集合框架的Collection和Map接口概述Java集合框架概述一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型数组在存储数据方面的弊端:数组初始化以后,长度就不可变了,不便于扩展数组中提供

2020-08-21 14:31:53 687

原创 Java Collections类Api文档

Java Collections常用方法成员属性EMPTY_SETpublic static final Set EMPTY_SET空集(不可变)。 这个集是可序列化的。EMPTY_LISTpublic static final List EMPTY_LIST空列表(不可变)。 此列表是可序列化的。EMPTY_MAPpublic static final Map EMPTY_MAP空地图(immutable)。 这张地图是可序列化的。方法详细信息sortso

2020-08-20 13:05:05 717

转载 Java Date DateFormat Calendar类的使用

Java 日期时间java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。new Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。new Date(long millisec)Date对象创建以后,可以调用下面的方法。序号方法和描述1boolean after(Date date) 若当调用此方法的Date对象在指定日期

2020-08-20 12:51:52 509

原创 Java Math类常用方法汇总

Java Math类常用方法成员属性Epublic static final double Edouble值比其他任何一个更接近 e ,自然对数的基数。PIpublic static final double PIdouble值比任何其他的更接近 pi ,圆周长与其直径的比率。常用方法详细信息logpublic static double log(`整型浮点型` a)返回的自然对数(以e为底) double值。特殊情况:如果参数为NaN或小于零,则结果为NaN。如果参数为无

2020-08-20 12:41:14 370

原创 再见插入排序,我们聊聊希尔排序

插入排序,冒泡排序,选择排序这是我之前写的链接插入排序,选择排序,冒泡排序,希望你看完这两篇博客可以按照我的标题说的做。这三种排序最大特点是什么?那就是逻辑清晰,我们我们很容易理解,也很容易想到,代码量都比较小,那么为什么还有那么多其他的排序算法呢?算法分析冒泡排序,选择是双for循环,代码执行次数是外部for循环的i和内部j循环的乘积,时间复杂度是O(n^2);插入排序,内部是while,虽然有折半操作,但是总的时间复杂度也是O(n^2)范畴。我们的数学家,科学家们总是能给我们带

2020-08-20 12:21:49 159

原创 每日面试题5 (List,TreeSet,TreeSet排序自定义类)

1.List集合是否可以重复添加元素?如何去除重复元素解决思路遍历原集合先排序,然后遍历集合,如果相邻两位元素相等,删除后面那位。这里有一个大家经常会犯的错误,刚好这篇博文提供了完美解决方法。转换为Set集合创建任意一个Set集合的子类,将我们的List作为参数传入这个Set集合子类的构造方法,然后再创建一个LIst集合的子类,将我们的Set作为参数传入这个List集合的构造方法,再将新的List覆盖原来的List创建一个Set集合,调用addAll(l

2020-08-20 11:21:44 342

原创 再见选择排序,我们聊聊插入排序

告别选择排序,咋们聊聊插入排序这是我之前写的冒冒泡排序的链接选择,希望你看完这两篇博客可以按照我的标题说的做。选择排序的问题之前你写选择的时候不是一直在喷冒泡吗?好吧,一个好的广告是拿一个老牌的产品去和新的产品比,然后吊打,比如小米和友商,干翻友商。每一趟选择排序最多排好两个数字(最大值和最小值),其他数字的顺序并不会发生变化。无论是多大多小的数据都会拿来比较,假设数组的长度很长,然后有一段区域的值普遍都很小,但是我们寻找最大值都是要进行一遍排序操作。插入排序思想我们日常打牌是不是要理一

2020-08-20 00:26:50 102

原创 告别冒泡排序,咋们聊聊选择排序

告别冒泡排序,咋们聊聊选择排序这是我之前写的冒冒泡排序的链接冒泡排序,希望你看完这两篇博客可以按照我的标题说的做。冒泡排序的问题在这片博文中我谈到了冒泡排序的一些特性第一轮交换之后,并不能保证数组是有序的最大的数字会移动到最后,因为最大的数始终大于其他数字,所以一直会进行交换操作,交换操作是当前位置的数字与后一位进行交换,交换完毕,索引值加一,然后下一次判断时,之前被我们换到后面的数字又要进行判断,这个过程一直重复直至我们的索引值移动到数组的尾部每次冒泡排序的下标所能到达的最大值是上一次的减1

2020-08-19 21:32:30 109

原创 Java算法与数据结构 (测试代码)

数据结构学习笔记 - 测试代码篇本篇主要提供了测试排序算法的测试方法,没什么技术含量,为我们学习排序算法的一个立一个规范。文件结构xxxxSort代表的是对应的排序算法类SortAlgorithm是所有xxxSort排序算法类都要实现的接口SortUtils是提供测试方法的静态工具类Test是测试排序算法的测试类[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6vGEwkK-1597838924135)(C:\Users\Faker\Desktop\1223

2020-08-19 20:09:14 402 1

空空如也

空空如也

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

TA关注的人

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