- 博客(471)
- 资源 (26)
- 问答 (1)
- 收藏
- 关注
原创 idea编译Spring5源码的完整过程
环境:mac10.15.7,idea版本2019,JVM1.8,编译Spring5.0.2源码。目前spring已经出5.3甚至更高版本了,但是要依赖JDK17,我不想搞两个JDK,所以安装Spring5.0.2版本就够了,高级特性以后再说。
2022-06-10 09:55:47 703 2
原创 mac基于SpringBoot2+prometheus+ Grafana搭建监控系统的完整过程
在mac上,搭建SpringBoot2+prometheus+ Grafana搭建监控系统的完整过程
2022-05-31 18:16:03 569
原创 马上面试,算法怎么抱佛脚
我一直都反对要面试了才想起来要准备算法,临时抱佛脚很难有理想的效果。但是这又是很多人不得不面对的问题,那只有几天的情况下该怎么准备算法呢?我上一篇文章将算法常见问题整理了一个相对完整的体系结构。然而要掌握整个体系没有几个月搞不定。如果只有几天的话, 我们只能将最重要、最频繁、不是很难的问题先搞清楚,面试能否过就全靠运气了。下面我整理了几条脉络,你可以一条条的练习:1.一维数组 写个在有序数组中插入和删除元素的方法,操作数组的最前、最后和中间位置的元素都能通过,这两个方法就是用来热身的,同时感受.
2022-02-09 15:45:51 664
原创 没有吹牛,真的是全网独家-算法的体系结构
今天 不写具体的内容,而是发一张一直想画的图,算法到底有哪些基本的东西,相互关系又是什么呢?算法学习要循序渐进,那到底怎么个循序渐进呢?一图搞定。这是我肝了好几天画出来的,绝对值得收藏!...
2022-01-26 22:10:52 480
原创 贪心热门问题10:最大数
LeetCode179 最大数问题。给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例1:输入:nums = [10,2]输出:"210"示例2:输入:nums = [3,30,34,5,9]输出:"9534330"这个题解法很简单,但是现在还没太想明白为什么。参考根据网上的说法,我们可以根据结果来决定a和b的排序关系。如果拼接好之后ab比ba要好,那么我们会认为a应
2022-01-23 11:39:51 939
原创 贪心热门问题9:合并区间
LeetCode56.以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].这个题与前面的区间问题一样,按照左边界还是
2022-01-23 11:04:55 119
原创 贪心热门问题8:划分字母区间
这个题第一次做会感觉特别难, 无从下手,或者想的很复杂,但其实特别特别简单的方法就能解决。LeetCode763 . 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefe
2022-01-23 10:55:07 110
原创 贪心热门问题7:无重叠区间
区间问题也是面试中经常遇到的情况,我们来看一下。LeetCode435,给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例2:输入: [ [1,2], [2,3] ]输出: 0解释: 你不需要移除任何区间
2022-01-23 10:22:21 751
原创 贪心热门问题6:分发糖果
继续看贪心热门题目:LeetCode135,要求如下:n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。...
2022-01-23 09:26:52 337
原创 贪心热门问题5:加油站问题
LeetCode134:加油站问题也是贪心的热门问题之一。题目要求:在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。示例1输入: gas = [1,2,3,4,5]cost = [3,4,5,1,2]输出: 3解释:从 3 号加油站(索引为...
2022-01-22 10:08:49 785
原创 贪心热门问题4:跳跃游戏
如果要说贪心考察哪个问题最多,这个跳跃游戏一定名列靠前。先看一下题目要求:给定一个非负整数数组nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。...
2022-01-22 09:17:17 187
原创 mac 搭建单机版kafka完整过程-基于kafka3.0
基于kafka3.0安装的完整过程和正确的测试方法,解决zookeeper is not a recognized option和Permission denied @ apply2files等问题
2022-01-21 16:43:38 3959
原创 贪心热门问题3:柠檬水找零
这也是贪心的典型题目之一。LeetCode860,在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例
2022-01-20 23:21:59 132
原创 贪心热门问题2:K 次取反后最大化的数组和
我们说贪心算法很多解题思路是我们先 看出来了,然后只是用代码实现而已,这个题就很典型:LeetCode1005,K次取反后最大化的数组和,给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。以这种方式修改数组后,返回数组 可能的最大和 。示例1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,.
2022-01-20 23:06:11 496
原创 贪心1:从田忌赛马说起
我们知道算法有三座大山:回溯、贪心和动态规划。前面断断续续用了半个多月,将回溯的基本问题过了一遍。从前面的题目可以看到回溯就是递归的进一步拓展。在递归中,回归阶段由系统给我们做好,我们主要收割结果就行了。但是在回溯中,我们要自己负责一部分撤销工作。而所有的回溯问题几乎都是这个套路来的。而回溯类型的题目也有非常明确的特点,层次太深太灵活,暴力枚举做不到,但是可以局部枚举。所以局部枚举就是一个for循环,而层次问题就交给递归来做。因此不管是代码结构还是画出来的结构图,各个题目都非常类似。不同的是去重等一些问题的
2022-01-20 08:38:46 408
原创 递归与回溯14:排列问题,有重复元素的全排列
LeetCode47,与前面的不同是给定的数字序列可能有重复,请你返回全排列结果。例如:输入:nums = [1,1,2]输出: [[1,1,2], [1,2,1], [2,1,1]]为了方便去重一定要对元素经行排序,这样我们才方便通过相邻的节点来判断是否重复使用了。我以示例中的 [1,1,2]为例 (为了方便举例,已经排序)抽象为一棵树,去重过程如图:图中我们对同一树层,前一位(也就是nums[i-1])如果使用过,那么就进行去重。一般来说:组合问题和排列问题是在树形结构的叶.
2022-01-20 07:29:15 310
原创 递归与回溯13:排列问题,全排列
LeetCode给定一个 没有重复 数字的序列,返回其所有可能的全排列。例如:输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]排列问题是典型的小学生都会,但是难道众人的问题。如果自己写结果,很容易,但是如果要用计算机来做,就难多了。这个问题与前面组合等问题的一个区别是使用过的后面还要再用,例如1,在开始使用了,但是到了2 和3的时候仍然要再使用一次。这本质上是因为 [1,2] 和 [2,1] 从集合
2022-01-20 07:14:47 822
原创 递归与回溯12:电话号码问题
LeetCode17,电话号码组合问题,也是热度非常高的一个题目,给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]我们说回溯仍然会存在暴力枚举的情况,这个题就很典型,例如如果输入23,那么,2就有 a、b、c三种情况,3有d、e、f三种情况。所以组合一下就一共就有3
2022-01-19 23:57:49 239
原创 递归与回溯11:子集问题,递增子序列
先看题意:给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。例如:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]...
2022-01-19 08:34:08 774
原创 递归与回溯10:子集,有重复元素
这个题与前面的相比又加码了,如果给定的子集有重复元素该怎么办?先看题目要求:LeetCode90给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。示例:输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]这个问题的关键是怎么处理去重的问题,这里卡哥的解析挺好,我们直接节选了:抽象为树形结构,那么“使用过”在这个树形结构上是有两个
2022-01-19 08:25:06 300
原创 递归与回溯9:子集问题-求子集
前面看了组合问题和分割为的典型例子,还有子集问题和排列问题也是回溯的典型例子,我们继续看子集问题。LeetCode78,给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。例如:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]我们知道回溯就可以画成一种树状结构,子集、组合、分割问题都可以抽象为一棵树,有一些区别是组合问
2022-01-19 08:06:00 691
原创 递归与回溯9:分割问题,复原IP地址
这也是一个经典的回溯问题,更具体来说是一个分割问题。先看题意:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在
2022-01-19 07:50:24 2197
原创 递归与回溯8:分割问题-分割回文串
分割问题也是回溯要解决的典型问题之一,常见的题目有分割回文串和IP地址分割,以及很多字符串分割相关的问题。LeetCode131 分割回文串,给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。例如:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]字符串如何判断回文本身就是一个道算法题,但仅仅是解答本题的一部分,因为还有更大的问题:如何切割?如果暴力切割,是非
2022-01-18 08:41:10 248
原创 递归与回溯7:LeetCode40. 组合总和 II(不可重复)
本题与LeetCode39的区别就是这里candidates 中的每个元素在每个组合中只能使用 一次 。但是candidats数组里的元素是可以重复的。有点绕,我们看一下例子:示例1:输入: candidates =[10,1,2,7,6,1,5], target =8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]题目说candidates是一个数组,里面有两个1,因此输出的结果里可以出现{1,1}的情况。严格来说这里说candidates是一个集合,是不严..
2022-01-18 08:26:26 285
原创 递归与回溯6:LeetCode39组合总和(可重复使用)
LeetCode39和40题都是组合总和的问题,唯一的区别是元素是否可以重复使用。39题是可以重复的,而40题是不可以的。我们来看一下。LeetCode39题目要求:给你一个 无重复元素的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是
2022-01-17 23:27:35 587
原创 全网最简洁的快速排序和寻找第K大元素
快速排序是很多人面试的梦魇,例如有个小伙伴去美图面试,技术面已经过了,到了算法环节,面试官直接这么出题:然后不出意外,不出所料,这位小伙伴直接走人了。这个题怎么的难吗?快速排序很多人都知道怎么回事,但是为什么写不出来具体实现,更不能针对这个题的要求做修改呢?网上能找到一堆的材料,说得非常复杂,写的时候可能会定义多个方法, 我估计大部分人看的欲望都没有。我们今天就给出一种最简洁的实现方法。1. 快速排序就是双指针+二叉树的前序遍历快速排序是将分治法运用到排序问题的典型例子,基本思想是:通过一个
2022-01-15 17:28:20 388
原创 你能写出满分的二分查找算法吗
二分查找是分治的经典案例。分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如二分搜索、排序算法(快速排序,归并排序)等等……任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较
2022-01-15 10:34:49 411
原创 递归与回溯5:剪枝优化
我们说过,回溯法虽然是暴力搜索,但也有时候可以有点剪枝优化一下的,主要就是去掉那些不必要的递归,从而提高执行效率。例如假如有五个男孩子都和一个女生说要厮守终生。她会和这五个人都先过一辈子再确定谁会真正做到吗?当然不会。而是会先思考一下,有一个可能导出勾勾搭搭,那她可以认为这个人只是一时兴起,剪掉!有一个可能太窝囊了,什么都不会,那她可以认为和他在一起会非常累,剪掉!有一个长得太对不起祖宗,可能会影响下一代,剪掉!最后就剩下两个,再进一步考虑!这就是剪枝!在上一篇回溯的题目中,我们得遍历过程是这样的:
2022-01-13 19:00:45 618
原创 递归与回溯4:一文彻底理解回溯
1.回溯大白话关于回溯,先用大白话说几个结论:1.回溯能干什么?主要解决那些暴力枚举也无法解决的问题。2.回溯与递归是什么关系?回溯是递归的纵横拓展,主要是递归(纵)+局部暴力枚举(横)。所以你可以从递归和暴力两个方面来拆解回溯问题。3.回溯的关键在于“回”上,也就是要撤销,为什么要撤销?因为回溯本质上仍然是枚举,你不喜欢她的前任,你要将她前任的所有东西都仍然,然后才愿意重新开始!4.回溯经常看到“剪枝”,什么是剪枝,为什么要剪枝?剪枝就是去掉那些不必要的递归,从而提高执
2022-01-13 17:49:39 5001 2
原创 递归与回溯3:递归的优化
1 如何优雅地说一万次“我爱你”咕泡曾经组织过一次线上小活动,看谁说更多的“我爱咕泡”,我当时写了这么一段代码:public class FibonacciTest { public static int count = 0; public static void main(String[] args) { Fibonacci(20); System.out.println("count:" + count); } public st
2022-01-09 11:16:32 258
原创 递归与回溯2:一文搞懂递归
递归,大部分人都知道怎么回事,但是代码就是写不出来,所谓”你讲的都对,但我就是不会“。递归的本质仍然是方法调用,不过是自己调用自己。系统给我们维护了不同调用之间的保存和返回等功能。这种例子在现实中也有很多的,例如有一个笑话:从前啊,有座山,山上有座庙,庙里有个老和尚和一个小和尚在讲故事,老和尚对小和尚说:从前啊,有座山,山上有座庙,庙里有个老和尚和一个小和尚在讲故事,老和尚对小和尚说:从前啊,有座山,山上有座庙,庙里有个老和尚和一个小和尚在讲故事,老和尚对小和尚说:·····如.
2022-01-09 11:09:05 475
原创 递归与回溯1:生成全部有效括号组合
从现在开始我们一起来梳理递归相关的问题。递归是高阶算法的核心,回溯、dp都是递归的拓展和延伸。废话少说,递归的问题一般我们不要急着看代码,因为看了也不懂,而应该先分析问题的本质,从小到大逐步归纳出特征,最后再写代码。而计算机调用的时候恰好是从大小到逐步递进的。先看一个CC150中的题目,实现一种算法,打印n对括号中的全部有效组合,即左右括号正确配对。示例:输入n=3,输出:((())), (()()), (())(), ()(()),()()()所以有3个。这个题如果用递归的话怎么做呢?
2021-12-31 22:24:21 3660 2
原创 原创300篇心得-不是没时间,是对自己不够很
曾经给自己定了一个小目标,2021年将原创文章数量达到300篇,没想到今天刚刚好完成。所以就写点心路历程吧。我08年就注册csdn账号了,为什么从今年开始执着写csdn呢?因为这是很好的积累。我发现凡是自己认真思考过的,并写成博客的,很久都不会忘。即使细节忘了,稍微一回顾马上就知道了,所以坚持写是促进自己沉淀的很好方式。很多人文章可读性很高、人气很旺,还各种MVP评审等等,而我的博客自我感觉可读性一般般,也没想过去评什么专家,因为在我眼里,写文章更多是为了自己沉淀,很多问题说的很精简,不会那么多话,
2021-12-31 14:40:03 356
原创 数字与数学7:幂的问题
LeetCode231题,让你判断一个数是否为2的幂LeetCode326题,让你判断一个数是否为3的幂LeetCode342题,让你判断一个数是否为4的幂这几个题是一个模子里复制出来的,但是解法还是有很大区别的,我们看一下。1.判断是否为2的次幂常规的思路可能是i从1循环到根号n, i每次*2或者高级一点的写法<<1 左移1,这种常规的解题思路时间复杂度是O(logn),这个题有个经典的解法,直接判断(n & (n - 1)) == 0即可,为什么这样呢?看一下下面
2021-12-31 08:47:28 688
原创 数学与数字6:LeetCode268. 丢失的数字
算法学习的一个原则是”复杂问题简单做,简单问题深入做“,这是一道简单的问题,但是可以深入分析。我们参考宫水三叶等的文章,发现这个题竟然有5种做法。先看题意:给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。示例:输入:nums = [3,0,1]输出:2解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。题目没有说数组是否为排序的,那我们就要
2021-12-31 08:25:29 179
原创 数字与数学5:丑数
LeetCode263和264是两道关于丑数的问题,一听名字挺邪乎。看一下要求:给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例1:输入:n = 6输出:true解释:6 = 2 × 3示例2:输入:n = 14输出:false解释:14 不是丑数,因为它包含了另外一个质因数 7 。LeetCode263是让你判断一个数是不是丑数,264是让你判断前n个丑数。
2021-12-31 08:10:47 3774
原创 数学与数字4:罗马数字与整数的相互转换
罗马数字与整数的转换也是LeetCode中学习频率非常高的问题。先看一下什么是罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII
2021-12-31 07:48:44 457
原创 数学与数字3:整数反转-溢出的统一处理法则
这是一道经典的问题,听名字也不复杂是不?但是却是一位小伙伴面试美团的原题:所以我们千万不要只觉得回溯、dp才叫算法,先看一下题目要求吧:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。这个题的关键在哪里呢?两点,一个是进行数字反转,另一个是如何判断溢出。溢出的判断在很多与整数有关的题目中都会出现,例如 字符
2021-12-31 07:29:53 959
原创 数学与数字2:天平称重问题
这是一道典型的应用问题, 但内核就在进制问题的处理。题目要求是:用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。如果有无限个砝码,但它们的重量分别是1,3,8,27,81````等3的指数幂,神奇之处是用它们的组合可以称出任意整数的重量(砝码允许放在左右两个盘中)。本题目要求编程实现:对用户给定的重量,给出砝码的组合方案,重量<1000000.先看一下这个题是什么意思,例如一个物体的重量是5,那么我们一个盘子放9,一个放1+3,然后将物体放在右侧,就可以得到物体的重量。其他的都能做类
2021-12-30 08:39:07 1159
原创 数学与数字1:辗转相除法
数字不属于数据结构,数学问题在一般的算法书里也不会讲,但是在面试的时候还是经常会出现的。在数学专业和计算机硕士课程中有一门课叫数论,很多算法问题都是从数论里来的。不过一般不会涉及那些晦涩难懂的算法,面试还是以基本问题为主吧。具体来说包含以下几种常见情况。从现在开始,我们就不断研究相关的题目,本文是一个大纲。1.进制相关问题该问题我们在前面很多地方有涉及,这里我们再进一步拓展。有些问题看似与进制无关,但是内核是一样的,例如天平称重问题就是一个变种的3进制问题。1.称重问题2.Nim游戏
2021-12-30 08:38:05 350
mysql-connector-c++-8.0.23-macos10.15-x86-64bit.dmg
2021-05-10
live555.chm帮助文档
2016-09-09
QtFtp源代码
2016-07-19
qt5使用curl实现文件下载的示例程序
2016-06-20
64位win7系统下安装USB下载器驱动FriendlyArm-usb-dnw-driver
2016-02-02
ffmpeg-2.0.tar.bz2 linux源代码
2014-05-02
vlc -1.1.7.tar.bz2 linux版源代码
2014-05-02
深度学习基础教程
2014-04-10
Geoffrey Hinton 深度学习 培训材料
2014-04-10
Handbook of Face Recognition 李子青-人脸识别技术
2014-04-10
为什么java中使用移位会出错
2022-01-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人