- 博客(44)
- 收藏
- 关注
原创 【LeetCode】-707.设计链表
707.设计链表707.设计链表单链表实现-使用虚拟头结点707.设计链表设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链
2022-05-15 22:15:13
282
原创 【LeetCode】链表-两两交换链表中的节点
链表-两两交换链表中的节点两两交换链表中的节点设置虚拟头结点两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 1
2022-05-09 13:23:31
703
原创 【LeetCode】LRU缓存(C++代码)
题目请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导
2022-04-26 14:52:53
2073
原创 【Go】Cron定时任务库
Go-Cron定时任务库前言Cron定时任务库介绍Cron v1.2cron表达式设置说明Cron v3.0前言在项目的日常运行中,常常有需要用到定时任务的场景,比如考试即将截止的提醒,数据库的定时备份等。定时任务我们可以写脚本利用Linux的crontab命令来实现,在Go语言中也可以使用Cron定时任务库,本文将介绍此库的用法,并附上示例代码。Cron定时任务库介绍Cron是Go中用于设置定时任务的一个库,需要注意的是,Cron库分两个大版本,v1.2和v3.0,其功能和go get地址都是不同
2022-04-17 20:16:10
2330
原创 【LeetCode】-电话号码的字母组合(Go代码+多解法)
电话号码的字母组合题目介绍给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:0 <= digi
2022-04-10 19:58:28
1002
原创 【Go】grpc-gateway学习笔记
grpc-gateway学习笔记简介安装遇到"google/api/annotations.proto"文件找不到的问题桩代码生成命令简介grpc-gateway可以很方便地把grpc接口以HTTP的方式暴露出去。具体来讲就是对外提供HTTP请求,并将其转换为RPC调用请求具体上游微服务。gRPC-Gateway 是 Google 协议缓冲区编译器 protoc 的插件。它读取 protobuf 服务定义并生成一个反向代理服务器,该服务器将 RESTful HTTP API请求转到 gRPC服务。该服
2022-03-27 13:33:23
1363
1
原创 【Go】gRPC + Protobuf 学习笔记
这里写目录标题RPC什么是RPCRPC的原理IDL常见的RPC框架Protobuf介绍安装Protobuf编译器Protobuf编译器插件:protocol-gen-goProtobuf运行时库Protobuf文件语法数据类型protoc命令行gRPC介绍gRPC架构概览多语言支持特点安装gRPC的4中通信方式Unary 一元方式Client-side streaming 客户端流式Server-side streaming 服务端流式Bidirectional streaming 双向流式gRPC中pro
2022-03-20 13:14:20
1061
原创 【Go】Go Modules详解
这里写目录标题介绍Package和Module的区别如何开启Go Modules如何初始化Go Modules基础使用命令go.mod文件go.sum文件本文参考文章介绍Go Modules是Golang官方推荐的依赖管理(dependency management)解决方案。在Go v1.11/1.12版本引入,在Go 1.13版本稳定并默认打开。官方文档:https://go.dev/blog/using-go-modulesPackage和Module的区别在Go里面Package是一个目
2022-03-13 17:09:50
1429
原创 【leetcode】只出现一次的数字
只出现一次的数字前言题目解法1-巧用异或运算前言本周分享一道很有意思的算法题,巧妙地运用了异或运算来解决问题。题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4原题链接:https://leetcode-cn.com/problems/single-numbe
2022-03-06 02:18:16
152
原创 【Docker】容器化技术入门学习笔记
Docker基础命令学习笔记前言安装DockerDocker服务相关命令Docker镜像相关命令Docker容器相关命令数据卷数据卷的概念数据卷的作用如何设置容器的数据卷数据卷容器如何配置数据卷容器前言Docker是一种容器技术,它解决了软件跨环境迁移的问题。docker相当于静态环境,避免因为外部主机本身的区别,或是没有安装某些软件、库,或是环境变量的设置等情况,导致程序无法运行。docker依赖linux内核,只能在linux下使用,Windows用的话需要安装linux虚拟机,在虚拟机上运行。
2022-02-26 23:56:39
877
原创 LeetCode-环形链表(快慢指针)代码逐行解释
环形链表前言题目解法-快慢指针前言环形链表的判断是算法学习中的一个经典问题,本文将讲解并使用代码说明如何通过快慢指针来判断环形链表。题目给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意: pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回
2022-02-12 22:00:33
332
原创 LeetCode-最大子数组和(动态规划)代码逐句解释
最大子数组和题目解法-动态规划题目给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例 :输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。力扣原题链接:https://leetcode-cn.com/problems/maximum-subarray解法-动态规划算法流程:特判:若数组长度为1,则直接输出该数
2022-02-06 17:34:48
506
原创 Windows恢复回收站误删文件
Windows恢复回收站误删文件前言误删的文件能恢复吗如何恢复DiskGenius数据恢复软件如何操作Windows File Recovery(WFR)如何操作前言许多人会遇到重要文件误删的情况,即放入回收站后并清空回收站。这种情况下想要再找回文件比较棘手。本文将介绍两种恢复误删文件的方法。误删的文件能恢复吗Windows系统删除文件时(即将文件从回收站清空)其实没有将该文件从磁盘中真正抹除,只是将该文件隐藏起来。只有当下一次有新文件写入磁盘时才有可能会覆盖写入已删除文件所占据的磁盘空间,这时候已
2022-01-30 12:54:00
2274
1
原创 MySQL事务、隔离级别、脏读幻读不可重复读
MySQL事务、隔离级别、脏读幻读不可重复读事务事务的ACID特性mysql的4种事务隔离级别什么是脏读什么是不可重复读什么是幻读事务数据库事务是指对数据库执行一批操作。这些操作要么全部执行成功,要么全部执行失败。在MySQL中,InnoDB引擎支持事务,而MyIsam引擎则不支持。事务的ACID特性A–原子性:事务中的所有操作,要么都做,要么都不做。C–一致性:事务执行的结果必须是使数据库从一个一致性状态,变到另一个一致性状态。I–隔离性:一个事务的执行不能被其他事务干扰。D–持久性:一个
2022-01-23 21:06:39
1003
原创 LeetCode-盛最多水的容器(双指针)
盛最多水的容器题目思路代码实现题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为
2022-01-15 21:28:10
105
原创 LeetCode-删除链表的倒数第N个结点(双指针)
题目删除链表的倒数第N个结点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]力扣原题:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/解法1-哈希表思路:先遍历一次链表,将各个结点按顺序存入哈希表中。然后再删除指定结点。C++代码实现:/** * Definition for singly-link
2022-01-09 22:44:14
528
原创 【计算机网络】-TCP的拥塞控制及拥塞控制方法
TCP的拥塞控制及拥塞控制方法TCP的拥塞控制TCP的拥塞判断TCP拥塞控制的方法基于窗口的拥塞控制拥塞窗口慢开始拥塞避免快重传快恢复TCP拥塞控制总体流程图TCP拥塞控制综合例子TCP的拥塞控制TCP的拥塞控制与流量控制不同,前者是全局性的控制,而后者是针对点对点通信量的控制。网络上有很多计算机,可能当前的网络状态已经比较拥堵了。此时贸然发送大量数据,会造成大量丢包。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。TCP的拥塞控制便是用于防止网络出现拥塞的。TCP的拥塞判断
2022-01-02 19:48:57
7953
原创 LeetCode-三数之和(双指针)
这里写目录标题前言题目解法1-暴力破解解法2-排序+双指针前言本周分享一道双指针相关的算法题。作者水平有限,有任何问题欢迎在文章下方留言交流!关键词:双指针。题目三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]力扣原题:h
2021-12-26 15:16:13
717
原创 LeetCode-最长回文子串(动态规划)
最长回文子串(动态规划)前言题目思路代码前言分享一道面试高频的动态规划算法题——最长回文子串。作者水平有限,有任何问题欢迎在文章下方留言交流!关键词:字符串,动态规划。题目最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。输入:s = "a"输出:"a"力扣原题地址:https://leetcode-cn.com/problems/longest-palindromic-subs
2021-12-20 00:38:53
208
原创 LeetCode-无重复字符的最长子串(滑动窗口)
LeetCode-无重复字符的最长子串(滑动窗口)前言题目思路1、暴力解法2、滑动窗口代码实现前言分享一道面试高频算法题——无重复字符的最长子串。作者水平有限,有任何问题欢迎在文章下方留言交流!关键词:滑动窗口题目无重复字符的最长子串给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。力扣原题地址:https://leetcode-cn.com/probl
2021-12-12 18:11:56
485
原创 LeetCode-复杂链表的复制
前言本周比较忙,简单分享一道力扣题目。作者水平有限,如有任何问题,欢迎在文章下方留言交流!题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。复杂链表例子如下图:力扣原题地址:https://leetcode-cn.com/problems/copy-list-with-random-pointer/思路可以将原链表的结点和新链表的结点对应起来,存入
2021-11-28 23:08:29
353
原创 P2P下载技术-BT协议与Magnet磁力链接
P2P下载技术-BT协议与Magnet磁力链接前言传统服务器-客户端文件下载P2P下载最早的应用-NapsterBT-BitTorrentbt的工作原理Magnet磁力链接前言我们在互联网上下载文件时大概几种方式:FTP、HTTP、BT、Magnet磁力链等。浏览器会直接支持FTP和HTTP下载,BT和磁力链下载一般需要专用的下载软件的支持。传统服务器-客户端文件下载FTP,全称File Transfer Protocol,即文件传输协议,顾名思义,它就是一个提供文件传输功能的协议。通过该协议下载
2021-11-21 00:33:33
18122
原创 【计算机网络】-地址解析协议ARP
前言在网络实际传输中,我们经常会遇到这样的问题:知道了目标机器的(主机或路由器)的IP地址,需要找出其相应的硬件地址。本文要讲的地址解析协议ARP就是用来解决这样的问题的。作者水平有限,有任何问题欢迎在文章下方留言!ARP协议所在层由于是IP协议使用了ARP协议,而众所周知IP协议处于网络层,因此通常就把ARP协议划归网络层。但ARP协议的用途是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址,因此,有的教科书会按照协议的作用,把ARP协议划归在数据链路层。这样划分当然也是可以的。A
2021-11-07 15:30:30
674
原创 LeetCode-包含min函数的栈
包含min函数的栈前言题目描述思路代码前言本周较忙,分享一道简单的题目。作者水平有限,有任何问题欢迎在文章下方留言!题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。思路我的想法是用两个栈,一个主栈用于存储数据,另一个辅助栈用于存储最小元素。具体做法是:当每次主栈的最小元素变更时,就把新的最小元素压入辅助栈,这样,辅助栈的栈顶元素就是当前最小元素。当主栈把当前最小元素弹出时,把辅助栈的栈
2021-10-31 23:06:00
113
原创 【Go】数据验证-validator
Go数据验证-validator前言安装使用方法验证规则跨字段验证前言在web后端开发中经常会遇到数据验证的问题,对于前后端分离的web应用来说,后端对前端传来的数据应持有完全不信任的态度,我们要验证前端发来的数据是否包含所有必要字段,每个字段的数据是否符合我们的需求等等。这个时候普通的验证方法比较繁琐,在go中我们可以使用validator这个包来进行数据验证。作者水平有限,有任何问题欢迎在文章下方留言,谢谢!安装validator包安装:go get github.com/go-playgr
2021-10-24 15:16:35
4320
原创 很有意思的HDB3编解码--C++实现
前言 本周的物联网通信实验课上,需要我们编写部分HDB3编解码的c语言代码,个人觉得这个编解码的代码写得十分巧妙,还挺有意思的,故记录一下。什么是HDB3 数字传输系统中传输的数字信息是来自计算机、电传机等数据终端的各种数字信号, 或者是来自模拟信号经数字化处理后的脉冲编码(PCM)信号等。这些数字信号所占据频谱 是从零频或低频开始,通常称为数字基带(baseband)信号。 在某些具有低通特性的有线信道中,特别是在传输距离不太远的情况下,基带信号可
2021-10-17 14:25:46
4284
3
原创 Golang/Gin-JWT身份验证
Golang/Gin-JWT身份验证前言JWT验证简介JWT验证流程JWT的组成头部载荷签证JWT-hello worldJWT在实际项目中的使用前言如果我们编写的api不需要验证就可以随意调用,显然是不安全的。我们需要对用户进行身份验证,根据用户身份提供服务。这时候JWT就派上用场了。作者水平有限,有任何问题欢迎在文章下方交流!JWT验证简介JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。
2021-10-10 16:33:33
1631
1
原创 ThinkPad x1 tablet gen3键盘改typec键线分离
ThinkPad x1 tablet gen3键盘改typec键线分离前言gen2和gen3键盘的区别1、从外观上来看2、按键手感方面3、改装难度方面gen3键盘改装改装方案具体过程1、拆除软连接部分2、开槽焊接3、封装完成前言之前已改过一把ThinkPad x1 Tablet gen2的键盘,但是那把键盘敲起来的手感感觉并不好,键程太短,按键大小和间距我都不太适应,所以已经吃灰许久了。当时我改那把gen2的时候看到有人说gen3的手感要比gen2好得多,无奈于gen3的二手键盘很难买得到了,gen2
2021-10-03 14:15:43
7550
21
原创 游戏手柄改typec接口
前言几年前买的杂牌游戏手柄坏了好久,连接十分不稳定,稍微动一下线就会断连,我推断是线的质量不好,理论上将把线换掉应该就好了。一不做二不休,我想直接改成typec接口,手柄与数据线分离,这样就不用再怕数据线损坏了,而且收纳起来也会方便不少。实操1、首先把手柄拆开来,拆解很简单,只需要把背后几颗螺丝卸下,后盖就拿下来了。2、原装的数据线是直接焊接在板子上的,板子焊接处用了热熔胶固定。3、板子这端我们就不碰它了,直接把数据线剪断,把usb四根线转焊到typec母座就可以了。4、四根线的线序板子上有标注
2021-09-26 00:02:26
3106
原创 DJI Windows SDK踩坑记录
DJI Windows SDK踩坑记录前言DJI Windows SDK现状DJI官方称WSDK将不会再进行更新维护DJI Windows SDK无法直接控制Mavic 2 pro的飞行姿态一个不熟悉UWP的开发者可能会犯的错误前言DJI的windows SDK已经近3年未更新,最后一个版本仍为beta版。使用它的人也没有那么多,许多问题网上可以找的到的资料也相对较少,本文记录了我自己踩过的一些坑,以供大家参考。作者水平有限,有任何问题欢迎在文章下方留言交流!DJI Windows SDK现状大疆的
2021-09-18 14:07:37
1779
1
原创 Golang/Gin-WebSocket实现实时消息推送
Golang/Gin-WebSocket实现实时消息推送前言gorilla/websocket基础用法实现实时消息推送代码api补充说明前言WebSocket在 HTML5 游戏和网页消息推送都使用比较多。WebSocket 是 HTML5 的重要特性,它实现了基于浏览器的远程socket,它使浏览器和服务器可以进行全双工通信。目前Go中用的比较多的WebSocket包是gorilla/websocket,本文将介绍如何使用gorilla/websocket,在Gin框架下编写WebSocket实时
2021-09-10 21:42:37
8042
原创 [AHK]--显示器输入源快速切换
显示器输入源快速切换前言DDC/CI 协议简介Auto Hot Key简介显示器输入源快捷键切换ahk脚本代码获取你的显示器的输入源id编译成.exe可执行文件前言当你有多台设备需要共用一台显示器,这个时候通过显示器物理按键频繁切换显示器输入源就会比较麻烦。如果我们可以通过快捷键的方式切换的话,将会方便不少。本文将介绍如何在windows环境下使用ahk脚本实现显示器输入源快捷键切换。参考资料:https://www.chiphell.com/thread-2248082-1-1.htmlDDC/
2021-09-04 14:24:19
7280
1
原创 Golang实现简易留言区
Golang实现简易留言区前言使用根留言id、父留言id、留言本身id构建n层嵌套的留言树使用到的第三方包接口数据表设计接口代码处理请求操作数据库前言最近项目需要实现一个项目页面下的简易留言区,我个人感觉对新手开发者来说设计起来还是有点难度的,故写了这篇文章分享一下我的做法,供大家参考。作者水平有限,有任何问题欢迎在文章下方留言!使用根留言id、父留言id、留言本身id构建n层嵌套的留言树一级留言的根id和父id均为0一级留言下的所有子留言的根id为一级留言的id使用到的第三方包
2021-08-28 15:40:26
724
4
原创 C#委托delegate--学习笔记
c#中的委托delegate前言委托delegateC#中的Action和FuncAction-无返回值的委托类型Func-有返回值的委托类型自定义委托委托的声明委托的+=、-=操作前言这两天学习了c#高级编程的中的委托,做了一点笔记备忘,也供大家参考。 作者水平有限,有任何问题欢迎在文章下方留言交流!委托delegate委托是安全封装方法的数据类型,类似于 C 和 C++ 中的函数指针。一个委托可以保存多个函数指针,即能保存多个方法。委托是一种类(class),类是一种数据类型,所以委托也
2021-08-20 17:05:20
250
原创 DJI Winodws SDK导入及官方示例程序运行
DJI Winodws SDK导入及官方示例程序运行DJI Windows sdk官方文档开发环境准备注册DJI开发者账户生成App Key下载DJI windows sdk将DJI windows sdk集成到你的应用程序中创建UWP项目将DJI Windows SDK导入你的项目将第三方的dll文件添加到项目中。项目属性配置注册申请运行你的windows sdk演示项目运行示例应用程序连接你的无人机遥控器下载DJI官方windows sdk示例程序运行示例程序DJI Windows sdk官方文档/
2021-08-15 11:10:38
3301
3
原创 Go后端项目服务器一站式部署笔记(Gin+MySQL+Nginx)
Go后端项目服务器部署笔记前言mac远程连接服务器一些Linux小工具htopByobuGo环境安装wget安装wget命令下载安装包配置Go环境变量MySQL安装初始化MySQL检查mysql服务状态创建mysql账户配置mysql允许远程访问使用Navicat远程连接mysqlNginx配置sites-enabled管理服务器文件Git安装Git拉取你的项目编译你的项目首先开启Go Modules,设置GOPROXY使用go build命令编译你的项目Goland远程开发作用如何配置热更新运行你的项目
2021-08-07 22:47:42
9388
6
原创 Gin框架学习笔记
Gin框架笔记安装Gin框架需要go版本在1.6以上查看自己go版本$ go version安装Gin框架$ go get -u github.com/gin-gonic/gin国内直接使用这条命令安装大概率会因网络超时安装失败。**解决办法1:**更换阿里云的镜像源// 启用 Go Modules 功能$ go env -w GO111MODULE-on// 配置 GOPROXY 环境变量$ go env -w GOPROXY=https://mirrors.aliyun.co
2021-07-31 21:43:51
1226
原创 Golang基础知识学习笔记
写在前面最近做一个小程序后端项目,准备用go语言编写,所以学习了一下go语言基础,做了一些笔记,备忘,也供大家参考。参考资料:Go语言教程|菜鸟教程作者水平有限,有任何问题可以在文章下方给我留言,谢谢!笔记目录写在前面1、Go语言结构2、执行go程序3、Go的变量声明1)声明变量并指定类型2)声明变量不指定类型3)省略var,使用:=4)多变量声明4、Go的常量常量的定义特殊常量—iota5、Go的条件判断语句switch语句Type Switchswitch中的fallthrough关键字se
2021-07-24 16:49:41
558
2
原创 Linux笔记(1)——top/htop/终端多窗口工具byobu/kill命令信号捕捉
前言 本文记录一下自己的Linux学习笔记。 本文主要包括Linux的top命令以及进阶工具htop,byobu多窗口工具以及kill命令对进程发出的信号及其捕捉。1、top命令和htop工具top命令什么是top命令top命令经常被用来监控Linux的系统状况,比如cpu、内存等的使用情况。如何使用打开Linux的终端,输入“top”并回车。>>top然后终端会显示如下界面top命令内容解读先来看第一行top - 01:58:03 up 12 min, 1
2021-07-16 23:18:55
923
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人