自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(191)
  • 问答 (2)
  • 收藏
  • 关注

原创 数据结构与算法分析----中序线索化二叉树+中序遍历

目录概述线索化二叉树的实现中序遍历构建中序线索化二叉树的遍历概述百度百科:在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。原二叉树的某些结点的左指针或右指针或左右指针是空的,浪费资源,我们可以让这些指针指向其他的一些结点,方便遍历和查找我们用某一种方式(前中后序)遍历二叉树,在某个结点前面打印的称为此结点的前驱结点,在这个结点后面打印的称为后继结点。我们线索化二叉树要做的就是让结点的空指

2021-11-23 10:43:35 1075 1

原创 数据结构与算法分析----二叉树+前序+中序+后序遍历

目录二叉树概述遍历先创建一个二叉树前序遍历中序遍历后续遍历代码二叉树概述知道单链表吧,单链表每个节点只能由一个后继节点。一个链表,假设他每个节点都可以有不多于两个的后继节点,那么他就可以被称为二叉树,此时,这个二叉树中的节点被称为结点,二叉树的后继结点又被称为子结点,且有着左右之分,一个结点的左边的子结点为左子结点,右边的为右子结点。如:源自百度百科这里的每个字母都代表着一个结点二叉树不一定要由链表实现,他是一种数据结构,是一种结构,只要有着这种结构的都可以称为二叉树百度百科:二叉树(Bin

2021-11-21 17:33:17 10 1

原创 数据结构与算法分析----斐波那契查找算法+二分查找算法+差值查找算法

文章目录二分查找和差值查找概述实现斐波那契查找概述二分查找和差值查找二分查找和差值查找法基本一样,仅在一处代码不同,合并到一起描述下面先讲二分查找概述二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。百度百科: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字

2021-11-11 17:41:47 407 1

原创 数据结构与算法分析----八大排序(暂时缺少堆排序)

目录概述概述排序分为内部排序和外部排序:八大排序都属于内部排序八大常用排序:

2021-11-02 14:32:17 52 1

原创 数据结构与算法分析----哈希表

目录概述概述哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。来自百度百科...

2021-11-01 19:17:39 38 1

原创 数据结构与算法分析----递归回溯之迷宫和八皇后

目录递归概述借一个阶乘的例子来理解递归实现找到迷宫出口实现递归概述百度百科:程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当

2021-09-30 15:48:59 148 2

原创 数据结构与算法分析----栈+中缀、后缀表达式(逆波兰表达式)+中后缀对应计算器的实现

文章目录栈概述用数组作为底层实现一个栈栈概述百度百科:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。简单来说:就是一种先入后出的存储数据的容器。想象一下乌鸦喝水,瓶子就是栈,乌鸦投入的石子就是元素,投入的第一个石子直接到栈底,然

2021-09-09 11:09:38 41 1

原创 数据结构与算法分析----环形链表之约瑟夫问题的解决

文章目录环形链表概述环形链表的简单实现约瑟夫问题的解决测试环形链表概述循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。环形链表的简单实现节点的设计:和普通的单链表一样链表的功能实现类:这里仅简单的实现一个环形链表,add方法接受一个整形的参数,用于设置链表有几个节点,用for循环,依次创建节点,节点名称固定,标号按照从1到整形参数k来设置在每次创建新节点后,将其加入链表,如果链表中没有数据,则,将第一个节点设置为第一个结点,即first

2021-09-02 10:18:12 29 1

原创 MySQL----查询(Select)

left join就是显示左边的所有数据,及右边显示的是和左边有交集部分的数据,inner join只显示有交集的行至于right与left可以看作是以谁为主where条件:在生成临时表基础上,再加条件限制。

2021-08-07 16:22:00 79 1

原创 (基于Java)数据结构与算法分析----单链表+双向链表

单链表概述插入节点(创建)修改删除打印链表测试所有代码注意事项概述百度百科:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。简单来说,链表就是,把一个一个的数据集给串起来,然后形成的串串。数据集在链表中就称为节点Java中的链表和C语言的比较类似,不过这里我们不需要使用指针节点:链表是由节点组成的,一个

2021-07-28 17:25:17 77 2

原创 MySQL----增删改

插入记录insert into `test01`(`id`,`name`,`id2`) values(1,'牛蛙',1);INSERT into `test01`(`name`,`id2`) values('牛蛙2号',2); #我们的id为自增的,一般我们不指定自增字段的值,靠系统自动为其添加-- 格式:insert into `表名`(字段名) values(准备存放的字段对应的数据)。insert into `test01` values(3,'牛蛙3号',3); #或者直接不写字段名。

2021-07-22 16:57:08 26 3

原创 数据结构与算法分析----队列

文章目录概述单次性的顺序队列总代码:循环队列全部代码概述百度百科:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称

2021-07-18 18:08:20 67 2

原创 MySQL----入门级的一些注意事项

创建一个数据库一般选择下面的字符集和排序规则

2021-07-14 15:16:02 33 2

原创 数据结构与算法分析----稀疏数组

文章目录概述什么是稀疏数组应用场景一个简单例子的实现创建稀疏数组根据稀疏数组把二维数组还原全部代码:概述什么是稀疏数组在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。应用场景用于对某一二维数组(矩阵)进行压缩。如,这样一个二维数组:十一行十一列,仅有两个有效数值,其他均为零,此时我们便可使用稀疏数组对其进行压缩。即,首先得

2021-07-07 17:41:51 23 1

原创 文件夹形式的Mysql安装

步骤压缩包解压得到一个文件夹,尽量把文件夹名字改为mysql-版本号的形式。这就代表Mysql安装成功,然后需要配置。配置环境变量打开Path变量,在里面新建一个环境变量,指向Mysql安装路径下的bin目录。这里,用户变量表示此变量下配置的环境变量仅对当前用户起效。系统变量表示对所有用户都起效。然后,在mysql安装文件夹中新建一个my.ini文件,此文件是Mysql的核心配置文件。作用:用来配置Mysql的,然后在此文件中写这么些东西:注意一点:8.0以上不需要datadir那句

2021-07-04 18:38:26 34 3

原创 MyBatis----注解开发

文章目录注解开发实现简单的增删改查环境搭建实现注解开发实现简单的增删改查MyBatis在配置文件开发中,我们需要为每个实体类编写映射的配置文件,在配置文件中进行配置,才可以对其相关数据库进行操作。在注解开发中,我们不需要编写映射配置文件。这里用到以下几个注解:@Insert:实现新增@Update:实现更新@Delete:实现删除@Select:实现查询环境搭建jar包坐标:<build> <plugins> <!--

2021-06-20 18:54:33 42 2

原创 MyBatis----多表简单操作

文章目录一对一表环境搭建查询一对一表这里,仅记录一个一对一表查询操作环境搭建先有两个表:orders表:ordertime用于记录下单时间,这里设置的是bigint(Long)类型的,是因为这里设置的向数据库中存储的数据是1970年到下单时间的毫秒数,再从数据库中取出来的时候再转换为Date(时间)这个表的索引:设置的和user01表的外键关系:user01表:就是user01表的id设置为orders表的外键(orders的uid字段)这里我们要通过MyBatis实现一个查询,即查

2021-06-19 17:39:32 40 1

原创 MyBatis----核心配置文件的深入

文章目录typeHandlers标签例子plugins标签typeHandlers标签typeHandlers标签作用:主要是类型处理器的定义类型处理器作用就是把数据进行类型转换无论是MyBatis在预处理语句(PreparedStatement) 中设置一个参数时, 还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成Java类型。下表描述了一些默认的类型处理器简单来说,就是我们Java层面和数据库中的数据进行数据交互的时候,需要进行数据类型的转换。在MyBatis中,最基本的

2021-06-16 20:02:16 252 5

原创 MyBatis----映射文件的深入之动态SQL

文章目录动态sql动态sql之if动态sql之foreach动态sqlMybatis的映射文件中,前面我们的SQL都是比较简单的,有些时候业务逻辑复杂时,我们的SQL是动态变化的,此时在前面的学习中我们的SQL就不能满足要求了。而,我们使用动态sql可以使我们的sql语句有多种可能性,根据不同语句使用不同的语法。动态sql之ifMybatis的映射文件,可在sql语句中使用sql来根据当前情况来使用不同的语句:下面是一个多条件聚合查询。向查询语句中传入一个类,可根据类的属性进行查询,当属性值为

2021-06-15 12:49:24 1539 5

原创 MyBatis----代理开发

文章目录概述一般的Dao代理开发的简单实现一个带有参数的测试概述代理开发方式介绍采用Mybatis的代理开发方式实现Dao层的开发,这种方式是现在进入企业的主流。Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。Mapper接口开发需要遵循以下规范:1、Mapper.xml文件中的namespace与mapper接口的全限定名相同2、Mapper接口方法名和Mappe

2021-06-14 18:07:58 47 2

原创 MyBatis----核心配置文件的简单分析+相应的API

文章目录概述environments 环境Mapppers标签properties属性typeAliases类型别名MyBatis中的API概述核心配置文件可以配置下面这些东西:configuration配置根标签properties属性配置属性settings设置设置参数typeAliases类型别名设置别名typeHandlers类型处理器objectFactory对象工厂plugins插件environments 环境environment环境变量transactio

2021-06-14 12:04:03 23 1

原创 MyBatis----增删改查基础简单操作

文章目录查增修改删除查在上一篇查增大致和查一样下面是向数据表的user表中传递user对象的数据这里用的另外一个标签insert,用相较于查,这里使用的parameterType属性,用他来指定要插入的数据类型。注意注释。这里#{}花括号中传的是实体属性名,不是表字段名然后配置文件不变,这里直接:这里的ID表里设置的会自动生成,我们不需要自己设置。这里有两个需要注意的地方,即第四第五步。MyBatis和JDBC不同,JDBC中,对表执行更新操作会自动提交事务,MyBatis不会,需要我们自己

2021-06-13 21:31:05 818 3

原创 Mybatis----入门

文章目录概述快速入门概述mybati是一 个优秀的基于java的持久层框架,它内部装了jdbc, 使开发者只需要关注sql语句本身, 而不需要花费精力去处理加教驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过iava对象statement中sql的动态参数进行映射生成最终执行的sq|语句。最后Mybatis框架执行sq井将结果映时为iava对象并返回,采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封

2021-06-13 18:58:21 1833 3

原创 AOP----基于注解的AOP开发

文章目录简单流程注解通知的类型简单流程1:创建目标接口和目标类(内部有切点)2:创建切面类(内部有增强方法)3:将目标类和切面类的对象创建权交给spring4:在切面类中使用注解配置织入关系5:在配置文件中开启组件扫描和AOP的自动代理6:测试创建目标接口和目标类(内部有切点)接口目标类:创建切面类(内部有增强方法)切面类:将目标类和切面类的对象创建权交给spring即为每个AOP需要的类放在spring容器中声明切面类:用Aspect注解在切面类中使用注解配置织入关系

2021-06-10 20:29:51 19 1

原创 AOP----开发简介

文章目录一些术语开发的注意事项开发快速入门一些术语Spring的AOP实现底层就是对上面的动态代理的代码进行了封装,封装后我们只需要对需要关注的部分进行代码编写,并通过配置的方式完成指定目标的方法增强。AOP的相关术语,常用的术语如下:Target (目标对象) :代理的目标对象,其中的方法被称为目标方法Proxy (代理) :一个类被AOP织入增强后,就产生一个结果代理类Joinpoint (连接点) :所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持

2021-06-10 15:59:17 16 1

原创 AOP----入门

文章目录概述:AOP底层的实现AOP动态代理技术概述:什么是AOP:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。简单来说,面向切面编程就是主要是

2021-06-09 15:52:12 65 3

原创 SpringMVC----异常处理

文章目录概述异常处理的思路异常处理器使用MVC的简单异常处理器自定义异常处理器小结概述在我们MVC,编码、运行过程中总少不了出现异常系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。基于Java的抽取思想,我们应该把所出现的所有异常抽取出来,全部交由MVC的某一部分处理异常处理的思路系统的Dao、Service. Controller出现都通过throws Exception向上抛

2021-06-08 20:59:04 13 1

原创 SpringMVC----拦截器初识

文章目录概述MVC拦截器使用步骤入门案例:拦截器中常用方法的使用多个拦截器拦截同一个访问地址小结概述SpringMVC中的拦截器和servlet中的过滤器功能差不多,都是对用户的请求进行审查处理的MVC拦截器使用步骤创建拦截器类实现HandlerInterceptor接口配置拦截器测试拦截器的拦截效果入门案例:创建拦截器类实现HandlerInterceptor接口实现HandlerInterceptor接口中的三个方法,需要我们手动写,因为这三个抽象方法是被default修饰的

2021-06-08 15:21:27 25 2

原创 SpringMVC----JdbcTemplate的初步使用

文章目录JdbcTemplate作用简单的一个入门了解记录一下中间遇到的错误通过配置Bean的方式来使用JdbcTemplateUpdate方法的使用查询多结果查询单结果查询聚合查询(结果为数字的那种简单的类)JdbcTemplate作用他是MVC中封装数据库那一部分组件,这里暂时只记录把数据源交给他管理的情况简单的一个入门了解用JdbcTemplate一般就三个步骤导入包创建连接池创建JdbcTemplate,并把连接池交给JdbcTemplate然后使用JdbcTemplat

2021-06-08 10:45:52 33 1

原创 SpringMVC----文件上传

文章目录单文件上传多文件上传单文件上传在前端页面,要想提交文件,需要表单三要素:1:post请求2:form表单enctype="multipart/form-data"3:type="file"的input标签一旦表单中enctype="multipart/form-data",则不能使用request的get类的方法然后再MVC中,我们需要先进行配置:1:引入jar包:<dependency> <groupId>commons-fileu

2021-06-07 18:56:39 36 3

原创 SpringMVC----获得请求参数

文章目录获得基本参数类型获得POJO类型的参数,即通过请求参数构建对象获得数组类型参数获得集合参数类型(类型可为对象)解决MVC中Post提交表单出现乱码获得基本参数类型什么是基本参数类型?即最基本的数据类型,如字符型,整形…在获取用户基本请求参数中,请求的参数只要和对应方法的形参能对应起来。"对应"的意思是:参数类型,和参数名称,和参数个数,都必须一样。那么,请求的参数值会自动注入到方法的形参中参数名:页面中收集参数标签的name属性参数名:页面中收集参数标签的name属性最重要的是参数对应起来

2021-06-07 14:26:34 37 4

原创 SpringMVC----数据响应方式

作为一个完整的Servlet程序,一定要有响应。当我们给方法加上@RequestMapping来设置映射地址,此方法就可以作为一个servlet程序来使用了,我们设置的返回值就是作为响应的数据,此处记录一下了解的数据响应方式文章目录大概分类页面跳转直接返回字符串使用模型视图(ModelAndView)对象返回回写数据直接返回字符串对于返回中文出现乱码的问题返回JSON字符串大概分类一. 页面跳转直接返回字符串即这种的通过ModelAndView对象返回二. 回写数据直接返回字符串.

2021-06-05 19:02:54 32 2

原创 SpringMVC----前段时间学习小结

文章目录概述简单的编写流程概述SpringMVC是一种基于 Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品,已经融给在Spring Web Flow中。简单来说,就是基于Java抽取思想,实现的一个框架。在Web应用中,有很多经常重复的操作,比如接收请求,包装参数…而MVC将这些重复的代码部分抽取然后包装起来,形成框架。我们只需要编写web层中特有的那部分代码,就可。MVC中控制这些共有操作的那一部分叫做前端控制器。而我们编写的那部分叫做P

2021-06-04 18:00:15 39 3

原创 SpringMVC----简单配置视图解析器

文章目录什么是视图解析器具体例子视图解析器部分源码简单分析什么是视图解析器我们在controller层写的一些方法,我们会让它返回一些前端页面(视图)的url,而视图解析器就是MVC多个组件中的一个,他用来解析我们返回的视图的url,然后返回一些结果给我们前端控制器,在经过多个步骤然后展现在页面上具体例子这里我们写了一个Controller,最后返回一个jsp页面的名字如图:在jsp包下面我们知道,对于一般的操作,我们返回的需要是/jsp/Controller.jsp或jsp/Control

2021-06-04 14:12:03 37 4

原创 JDBC----连接数据库

文章目录连接步骤获取驱动程序通过驱动程序获取Connection对象连接步骤在连接之前需要先导入mysql驱动包,官网上一搜一大堆,这里不再记录连接分为两个步骤获取驱动程序通过驱动程序获取Connection对象获取驱动程序需要用到Driver驱动类即创建Driver驱动类的实例这里的Driver是一个接口,后面是mysql驱动中对此接口的实现方法但,一般我们不这样直接在程序中出现第三方的方法(指mysql公司提供的驱动中的Driver实现类),所以我一般用反射获得驱动类但

2021-05-17 22:30:10 69 1

原创 JDBC----概述

文章目录数据持久化JDBC概述JDBC程序编写流程数据持久化JAVA中存在集合或数组等容器中的数据都是临时的,他在服务器物理内存上存于内存中,随着程序的结束,这些数据也会消失,数据并不持久,若果想保存数据的持久,则需要把数据存入到外存(硬盘,U盘)中,数据可以以多种形式存放于硬盘中,比如文件、数据库。所以连接数据库的层被称为持久层●持久化(persistence) :把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化" ,

2021-05-14 10:56:33 586 6

原创 Spring中的API

ApplicationContext的继承体系紫色的是接口,淡绿色是抽象类,绿色的是实现类ApplicationContext的实现类有三个ClassPathXmlApplicationContext(类路径下的XML上下文文件)他是从类的根路径下加载配置文件FileSystemXmlApplicationContext(电脑磁盘XML上下文文件)从电脑磁盘路径下加载配置文件,文件可在磁盘下的任意位置AnnotaTionConfigApplicationContext用注解配置容器对象

2021-05-05 16:19:39 92 2

原创 Spring----XML引入不同类型数据的配置方式

文章目录带参构造方法的依赖注入当形参是集合直接在`constructor-arg`中进行配置引入外部配置的集合配置属性的Set注入全部代码带参构造方法的依赖注入需要注意的几点配置带参构造方法 构造方法不能使用联级赋值简单说,就是不能在constructor-arg标签中直接配置对象的属性值如果一个类的某个属性是对象的话,可以在这个类的bean标签外,为这个对象进行配置,然后用此bean标签中的ref指向那个对象的id,来引入外部对象如:constructor-arg中的index属性可以用

2021-05-04 17:22:18 72 2

原创 AJAX+AJAX中的同步和异步

文章目录AJAX什么是AJAX如何使用AJAX结合例子说明创建AJAX对象初始化 设置请求方法和url设置请求头(可无)发送请求为创建的AJAX绑定事件(处理响应)处理响应(获取响应信息)AJAX中的同步和异步同步异步AJAXAJAX的概述AJAX = Asynchronous JavaScript and XML (异步的JavaScript和XML)。A]AX不是新的编程语言,而是一种使用现有标准的新方法。AJAX是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。什么是A

2021-04-25 20:07:29 125 3

原创 JSON----Json在JavaScript和Java中的作用和用法

文章目录JSONJSON作用把对象转换为字符串把字符串转换为对象eval()利用eval将字符串转换为对象JSONJSON作用JSON是一种特殊的字符串,用于数据交互上面。这种字符串可以被各种语言识别,我们可以在一种语言中,把对象(对象必须不含函数)转换成字符串,然后在另一种语言中使用JSON把字符串转换为对象,从而实现数据交互。把对象转换为字符串首先,我们在JS中创建一个对象:var obj={"name":"牛蛙","age":18,"Gender":"小青年"};注意,我们这里创建的对象

2021-04-11 19:13:28 95 2

空空如也

空空如也

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

TA关注的人 TA的粉丝

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