- 博客(100)
- 资源 (114)
- 问答 (7)
- 收藏
- 关注
原创 【Mysql】连接查询|子查询|union|limit|表的创建
从一张表中单独查询,称为单表查询emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。这种跨表查询,多张表联合起来查询数据,被称为连接查询。select语句中嵌套select语句,被嵌套的select语句称为子查询select…from…where…group by…having…order by…limit…1.from2.where4.having5.select。
2022-11-26 11:29:43
37
3
原创 【Qt】桌面应用开发 | 绘图事件和绘图设备 |文件操作
Qt的这种格式是二进制的,不同于某些本地的元文件,Qt的pictures文件没有内容上的限制,只要是能够被QPainter绘制的元素,不论是字体还是pixmap,或者是变换,都可以保存进一个picture中。实际上,QDataStream对于类的存储,是将复杂的类分割为很多基本单元实现的。QPixmap使用底层平台的绘制系统进行绘制,无法提供像素级别的操作,而QImage则是使用独立于硬件的绘制系统,实际上是自己绘制自己,因此提供了像素级别的操作,并且能够在不同系统之上提供一个一致的显示形式。
2022-11-15 08:36:24
1326
87
原创 【Qt】桌面应用开发教程——布局|按钮组|容器|常用控件|消息事件机制
在搭建Qt窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。一般遇到这种情况我们都会将这个窗口或者模块拿出来做成一个独立的窗口类,以备以后重复使用。在使用Qt的ui文件搭建界面的时候,工具栏栏中只为我们提供了标准的窗口控件,如果我们想使用自定义控件怎么办?例如:我们从QWidget派生出一个类SmallWidget,实现了一个自定窗口,{Q_OBJECTpublic:signals:private:};{// 创建布局对象。
2022-11-11 07:09:20
508
78
原创 【Qt】QMainWindow |QDialog对话框
默认情况下QMainWindow项目一创建就自带了菜单栏,可以在对象树窗口中,右键菜单栏对象,移除菜单栏:删除后也可以创建菜单栏,此时在对象树中右键MainWindow对象,菜单里边会多了创建菜单栏的功能。
2022-11-07 15:57:01
1078
39
原创 【Oracle客户端】PLSQL Developer 15 (64 bit)最新版安装使用教程(亲测)
尝试连接确定,连接为Normal,如果出现问题,说明你路径出错了,可以在不登录情况下进入到软件中设置连接目录,如果觉得难,可以选择Navical Premium,有教程说明,只需一键下载就可以了。出现以下ORCL就说明,文本内容没错,环境变量也没错。ip是192.168.220.133。把下面两个路径添加好。
2022-11-06 07:55:10
85
34
原创 【Qt】边学边写之Qt教程(零基础)
Qt框架默认提供的标准信号和槽不足以完成我们日常应用开发的需求,比如说点击某个按钮让另一个按钮的文字改变,这时候标准信号和槽就没有提供这样的函数。但是Qt信号和槽机制提供了允许我们自己设计自己的信号和槽。函数声明在类头文件的signals域下没有返回值,void类型的函数只有函数声明,没有实现定义可以有参数,可以重载通过emit关键字来触发信号,形式:emit object->sig(参数);
2022-11-03 11:00:00
678
70
原创 【web服务器】(个人专用)
Html(Hyper Texture Markup Language)是超文本标记语言,在计算机中以 .html或者.htm作为扩展名,可以被浏览器识别,就是经常见到的网页. Html的语法非常简洁,比较松散,以相应的英语单词关键字进行组合,html标签不区分大小写,标签大多数成对出现,有开始,有结束,例如 ,但是并没有要求必须成对出现.同时也有固定的短标签,例如,. 学习html基本可以认为就是学习各种标签,标签也可以设置属性,例如。
2022-11-01 16:53:26
192
8
原创 【MySQL】精准复习这篇就够了~
数据库:英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。数据库管理系统:DataBaseManagement,简称DBMS。数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。常见的数据库管理系统:MySQL、Oracle、MS SqlServer、DB2、sybase等....
2022-10-31 11:01:52
54
7
原创 【网络编程】高并发服务器|网络套接字函数|TCP服务器函数-大端小端
我们在系统编程里面学了进程间通信有:但是只能用于 本机的进程间通信,现在我们学习一种不同的主机间进程通信方法: socketSocket本身有“插座”的意思,成对出现,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。套接字的内核实现
2022-10-22 10:30:00
111
7
原创 网络编程-多路I/O转接服务器|线程池并发服务器|UDP服务器|本地套接字
能做出高并发服务器方法有:多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。多路IO转接(多路IO复用): 内核监听多个文件描述符的属性(读写缓冲区)变化如果某个文件描述符的读缓冲区变化了,这个时候就是可以读了,将这个事件告知应用层主要使用的方法有三种实现原理:应用层的文件描述符集合给内核,内核去处理进行剔除,再返回给应用层,所以需要备份一个旧的,轮询select能监听的文件描述符个数受限于FD_SETSIZE,一般为1
2022-10-19 07:38:05
268
7
原创 Linux系统编程-线程同步
现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。**互斥:**是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行。一个公共资源同一时刻只能被一个进程或线程使用。
2022-10-11 11:45:00
50
6
原创 系统编程【信号篇】硬核教程,没有之一 |信号集 |信号捕捉|不可重入,可重入函数
信号的概念信号是 Linux 进程间通信的最古老的方式。信号是软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。“中断”在我们生活中经常遇到,譬如,我正在房间里打游戏,突然送快递的来了,把正在玩游戏的我给“中断”了,我去签收快递( 处理中断 ),处理完成后,再继续玩我的游戏。这里我们学习的“信号”就是属于这么一种“中断”。
2022-10-07 10:30:00
83
原创 Linux网络编程-网络基本知识
网络适配器 :作用 收发数据mac地址 作用: 用来标识一块网卡 6个字节 物理地址ip用来标识一台主机 逻辑地址iPv4 : ip地址是4字节 32位ipv6: 128位 16字节子网id ip中被子网掩码中1连续覆盖的位主机id ip中被子网掩码中0连续覆盖的位192.168.1.2/24 192.168.1.2/255.255.255.0网段地址: 192.168.1.0广播地址: 192.168.1.255子网掩码 netmask: 用来区分子网id 和主机id作用: 用来标识应
2022-10-07 10:21:21
73
原创 Linux系统编程-守护进程|线程
进程组,也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多个进程的管理。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID为第一个进程ID(组长进程)。
2022-10-07 10:13:45
53
1
原创 【亡羊补牢篇】进程间通信 | 管道| 共享存储映射
管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,所有的 UNIX 系统都支持这种通信机制。半双工,数据在同一时刻只能在一个方向上流动。数据只能从管道的一端写入,从另一端读出。写入管道中的数据遵循先入先出的规则。管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等。管道不是普通的文件,不属于某个文件系统,其只存在于内存中。管道在内存中对应一个缓冲区。不同的系统其大小不一定相同。
2022-10-03 11:15:00
53
2
原创 Linux系统编程 进程控制
在每个进程退出的时候,内核释放该进程所有的资源、包括打开的文件、占用的内存等。但是仍然为其保留一定的信息,这些信息主要主要指进程控制块PCB的信息(包括进程号、退出状态、运行时间等)。父进程可以通过调用wait或waitpid得到它的退出状态同时彻底清除掉这个进程。wait() 和 waitpid() 函数的功能一样,区别在于,wait() 函数会阻塞,waitpid() 可以设置不阻塞,waitpid() 还可以指定等待哪个子进程结束。
2022-09-30 23:45:00
307
原创 Linux系统编程 -文件和目录操作函数
dup() 和 dup2()是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁。
2022-09-28 10:30:00
295
3
原创 Linux系统编程 Makefile-IO
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE。
2022-09-25 21:56:26
83
3
原创 Linux系统编程-vim-gcc-动态库静态库
此篇内容全是知识点,可用作帮助手册,一些晦涩难懂的我已测试教程及运行截图;注意:那些没实现的不是不重要,而是需要自己动手实践一遍,不然纯理解,隔天就忘.gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。gedit是一个自由软件。这是 Linux 下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。
2022-09-23 09:42:21
76
原创 Linux系统编程基本命令
我们这里使用的是ubuntu,为什么不适用centous呢?它们相差不是很大,原因是ubuntu适合开发者使用,centous很适合结合Oracle。都是干货,标明了哪些是重点,需要掌握的模块,哪些是只要了解,这样的学习成本非常小。**/:**根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
2022-09-20 19:06:25
3802
10
原创 JavaScript算法|前 K 个高频元素、寻找峰值和合并区间、 搜索二维矩阵 II和计算右侧小于当前元素的个数
从示例入手: 1.申明一个变量用于存储合并的结果 res = [] 2.第一个数组直接放入res中,res = [[1, 3]] 3.对比 res中的 [1, 3] 和 下一个数组 [2 ,6],[1,3] 的最大值 3
2022-09-16 20:35:25
223
1
原创 C++ STL重点、难点复习总结
6大组件:容器、算法、迭代器、仿函数(函数对象)、适配器、空间配置器【C++】学习已经接近尾声了,这篇文章里都是面试复习的知识点,在排版界面方面可能会有点乱,博主没有把精力放在这些上,主要是一些干货,帮助那些需要面试的小伙伴以及回顾一些重点知识。
2022-09-09 11:42:23
1401
63
原创 【C++难点收录】“C++难?,你真的理解了这些吗?”《常见面试题》【二】
概念:解决菱形继承的数据冗余和二义性原理:将虚基类对现象放到公共位置(vs是放到整个对象尾部),虚基表中存偏移量,来计算虚基类的位置;没加virtual之前
2022-09-06 10:15:00
380
12
原创 C++之二叉树进阶|搜索树|key/value模型
> 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:>> - 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值> - 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值> - 它的左右子树也分别为二叉搜索树
2022-09-03 14:37:03
431
5
原创 《JavaScript从入门到精通》|变量作用域|垃圾回收|闭包【函数进阶篇】
JavaScript 是一种非常面向函数的语言。它给了我们很大的自由度。在 JavaScript 中,我们可以随时创建函数,可以将函数作为参数传递给另一个函数,并在完全不同的代码位置进行调用。我们已经知道函数可以访问其外部的变量。但是,如果在函数被创建之后,外部变量发生了变化会怎样?函数会获得新值还是旧值?如果将函数作为参数传递并在代码中的另一个位置调用它,该函数将访问的是新位置的外部变量吗?让我们通过本文来学习这些相关知识,以了解在这些场景以及更复杂的场景下到底会发生什么。
2022-09-01 20:30:39
281
4
原创 【C++难点收录】“为什么C++难,你真的理解了这些吗?”《常见面试题》
> 1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。>> 2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共> 享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)>> 3. 堆用于程序运行时动态内存分配,堆是可以上增长的。> 4. 数据段--存储全局数据和静态数据。> 5. 代码段--可执行的代码/只读常量。 ............
2022-08-30 09:15:51
2280
74
原创 JavaScript 【函数】| 递归|堆|栈
递归是编程的一个术语,表示从自身调用函数(译注:也就是自调用)。递归函数可用于以更优雅的方式解决问题。当一个函数调用自身时,我们称其为递归步骤。递归的基础是函数参数使任务简单到该函数不再需要进行进一步调用。递归定义的数据结构是指可以使用自身来定义的数据结构。例如,链表可以被定义为由对象引用一个列表(或null)而组成的数据结构。list = {像 HTML 元素树或者本章中的department树等,本质上也是递归:它们有分支,而且分支又可以有其他分支。就像我们在示例sumSalary。...
2022-08-27 22:25:28
312
3
原创 JavaScript算法描述【排序与搜索】六大经典排序|搜索旋转排序数组|在排序数组中查找元素的第一个和最后一个位置、数组中的第K个|
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]...
2022-08-24 13:59:47
1001
66
原创 【JavaScript 从入门到精通】symbol类型
symbol是唯一标识符的基本类型symbol 是使用带有可选描述(name)的Symbol()调用创建的。symbol 总是不同的值,即使它们有相同的名字。返回(如果需要的话则创建)一个以key作为名字的全局 symbol。使用Symbol.for多次调用key相同的 symbol 时,返回的就是同一个 symbol。symbol 有两个主要的使用场景:“隐藏” 对象属性。如果我们想要向“属于”另一个脚本或者库的对象添加一个属性,我们可以创建一个 symbol 并使用它作为属性的键。
2022-08-23 14:10:17
242
6
原创 【JavaScript 从入门到精通】构造器|可选链
构造函数,或简称构造器,就是常规函数,但大家对于构造器有个共同的约定,就是其命名首字母要大写。构造函数只能使用new来调用。这样的调用意味着在开始时创建了空的this,并在最后返回填充了值的this。我们可以使用构造函数来创建多个类似的对象。JavaScript 为许多内建的对象提供了构造函数:比如日期Date、集合Set以及其他我们计划学习的内容。ℹ️对象,我们还会回来哒!在本章中,我们只介绍了关于对象和构造器的基础知识。它们对于我们在下一章中,学习更多关于数据类型和函数的相关知识非常重要。
2022-08-23 14:08:54
229
1
原创 【JavaScript 从入门到精通】垃圾回收| this
垃圾回收是自动完成的,我们不能强制执行或是阻止执行。当对象是可达状态时,它一定是存在于内存中的。被引用与可访问(从一个根)不同:一组相互连接的对象可能整体都不可达。现代引擎实现了垃圾回收的高级算法。《The Garbage Collection Handbook: The Art of Automatic Memory Management》(R. Jones 等人著)这本书涵盖了其中一些内容。如果你熟悉底层(low-level)编程,关于 V8 引擎垃圾回收器的更详细信息请参阅文章。
2022-08-23 14:06:09
334
1
原创 JavaScript 从入门到精通Object(对象)
对象是具有一些特殊特性的关联数组。属性的键必须是字符串或者 symbol(通常是字符串)。值可以是任何类型。点符号:。方括号,方括号允许从变量中获取键,例如。。。循环。我们在这一章学习的叫做“普通对象(plain object)”,或者就叫对象。Array用于存储有序数据集合,Date用于存储时间日期,Error用于存储错误信息。……等等。它们有着各自特别的特性,我们将在后面学习到。
2022-08-23 14:04:01
189
原创 JavaScript 编程语言【 数据类型】日期和时间
在 JavaScript 中,日期和时间使用Date对象来表示。我们不能单独创建日期或时间,Date对象总是同时创建两者。月份从 0 开始计数(对,一月是 0)。一周中的某一天getDay()同样从 0 开始计算(0 代表星期日)。当设置了超出范围的组件时,Date会进行自动校准。这一点对于日/月/小时的加减很有用。日期可以相减,得到的是以毫秒表示的两者的差值。因为当Date被转换为数字时,Date对象会被转换为时间戳。使用Date.now()可以更快地获取当前时间的时间戳。
2022-08-21 10:57:52
297
1
原创 JavaScript 编程语言【 数据类型】Object.keys,values,entries|解构赋值
解构赋值可以简洁地将一个对象或数组拆开赋值到多个变量上。let {这表示属性prop会被赋值给变量varName,如果没有这个属性的话,就会使用默认值default。没有对应映射的对象属性会被复制到rest对象。数组的第一个元素被赋值给item1,第二个元素被赋值给item2,剩下的所有元素被复制到另一个数组rest。从嵌套数组/对象中提取数据也是可以的,此时等号左侧必须和等号右侧有相同的结构。
2022-08-21 10:56:14
213
原创 JavaScript 编程语言【 数据类型】过滤|排序|映射|迭代
可以应用for..of的对象被称为可迭代的。技术上来说,可迭代对象必须实现方法。的结果被称为迭代器(iterator)。由它处理进一步的迭代过程。一个迭代器必须有next()方法,它返回一个对象,这里done:true表明迭代结束,否则value就是下一个值。方法会被for..of自动调用,但我们也可以直接调用它。内建的可迭代对象例如字符串和数组,都实现了。字符串迭代器能够识别代理对(surrogate pair)。(译注:代理对也就是 UTF-16 扩展字符。)有索引属性和length。
2022-08-21 10:51:08
367
原创 JavaScript算法描述【排序与搜索】六大经典排序|合并两个有序数组|第一个错误的版本
排序算法(sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。排序算法的一个指标是稳定性,稳定性即:如果只按照第一个数字排序的话,第一个数字相同而第二个数字不同的,第二个数字按照原有排序的就是稳定排序,不按照原有排序的就是不稳定排序。
2022-08-20 17:38:01
114
1
原创 【JavaScripts从入门到入神】 Mocha 进行自动化测试|Polyfill 和转译器
在 BDD 中,规范先行,实现在后。最后我们同时拥有了规范和代码。作为测试—— 保证代码正确工作。作为文档——describe和it的标题告诉我们函数做了什么。作为案例—— 测试实际工作的例子展示了一个函数可以被怎样使用。有了规范,我们可以安全地改进、修改甚至重写函数,并确保它仍然正确地工作。这在一个函数会被用在多个地方的大型项目中尤其重要。当我们改变这样一个函数时,没有办法手动检查每个使用它们的地方是否仍旧正确。展示修改,无论修改了什么。
2022-08-19 10:29:44
156
13
原创 JavaScript算法描述【回溯算法】|括号生成|子集|电话号码的字母组合|全排列|单词搜索
回溯算法(back tracking)是一种类似尝试算法,按选优条件向前搜索,主要是在搜索尝试过程中寻找问题的解,以达到目标,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。换句话说,找到一条路往前走,能走就继续往前,不能走就算了,掉头换条路。相对于动态规划,这部分的内容相对于简单些。回溯的处理思想,和枚举搜索有点类似,通过枚举找到所有满足期望的值。为了有规律地枚举所有的解,可以把问题拆解为多个小问题。每个小问题,我们都会面对一个岔路口,选择一条发现此路不通的时,就往回走,走到另一个岔路口。..
2022-08-17 17:33:37
1193
73
原创 面向对象之【探索C++】硬核教程 造轮子的快乐源泉 【函数篇】
1.内联函数1.1 内联函数的引出1.2 预处理宏缺陷1.3 内联函数基本概念1.4 类内部的内联函数1.5 编译器对内联函数的处理2.函数的默认参数3.函数的占位参数3.函数重载(重点)3.2 函数重载基本语法3.3 函数重载的实现原理3.4 extern “C”浅析重点回顾...
2022-08-14 21:01:53
296
116
原创 JavaScript从入门到精通|函数表达式
函数是值。它们可以在代码的任何地方被分配,复制或声明。如果函数在主代码流中被声明为单独的语句,则称为“函数声明”。如果该函数是作为表达式的一部分创建的,则称其“函数表达式”。在执行代码块之前,内部算法会先处理函数声明。所以函数声明在其被声明的代码块内的任何位置都是可见的。函数表达式在执行流程到达时创建。在大多数情况下,当我们需要声明一个函数时,最好使用函数声明,因为函数在被声明之前也是可见的。这使我们在代码组织方面更具灵活性,通常也会使得代码可读性更高。...
2022-08-11 20:49:00
208
2
C++ 程序的生前和死后【完】 P12 12 c init Startup的第三项大工程
2022-06-22
密:C++ 程序的生前和死后【完】 P10 10 HeapAlloc 角色与影响.MP4
2022-06-22
C++ 程序的生前和死后【完】 P2 02 默认的 Startup code 在哪儿,main 生前和死后的 Call
2022-06-21
《侯捷 - C++内存管理机制_60_侯捷》31.G4.9pull allocator运行观察
2022-06-18
本地web文件在服务器运行为啥出现残缺问题
2022-10-25
for循环了多少次,执行内部语句的最少执行
2022-10-14
C语言的一道输入输出格式结果问题
2022-10-14
类外不是不能去调用私有成员变量吗
2022-08-08
为什么编译器显示语法有问题,运行却成功
2022-08-08
C/C++系统学习路线
2022-07-11
暑假到了,我们该怎么利用长达两个月时间的假期呢?
2022-06-14
vscode的输入小写字母t出错
2022-06-09
(gcc)编译文件过程
2022-05-14
数据结构和算法怎么学呀?
2022-04-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅