自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 自动驾驶规划 - 5次多项式拟合

自动驾驶运动规划中会用到各种曲线,主要用于生成车辆的轨迹,常见的轨迹生成算法,如贝塞尔曲线,样条曲线,以及apollo EM Planner的五次多项式曲线,城市场景中使用的是分段多项式曲线,在EM Planner和Lattice Planner中思路是,都是先通过动态规划生成点,再用5次多项式生成曲线连接两个点(虽然后面的版本改动很大,至少lattice planner目前还是这个方法)。在这里可以看出5次多项式的作用,就是生成轨迹,这里的轨迹不一定是车行驶的轨迹,

2023-03-03 22:01:40 4361 2

原创 自动驾驶规划 - Apollo Lattice Planner算法【1】

LatticePlanner算法属于一种局部轨迹规划器,输出轨迹将直接输入到控制器,由控制器完成对局部轨迹的跟踪控制。因此,Lattice Planner输出的轨迹是一条光滑无碰撞满足车辆运动学约束和速度约束的平稳安全的局部轨迹。Lattice Planner的输入端主要由三部分组成,感知及障碍物信息、参考线信息及定位信息。局部规划模块的输出是带有速度信息的一系列轨迹点组成的轨迹,其保证了车辆控制器在车辆跟踪控制过程中的平稳性和安全性。挺复杂的越挖越多,看来得慢慢总结了(主要为了学思路,总结到自己的项目中)

2023-02-12 21:57:32 3631 2

转载 局部路径规划算法-DWA动态窗口法

动态窗口算法(Dynamic Window Approaches, DWA) 是基于预测控制理论的一种次优方法,因其在未知环境下能够安全、有效的避开障碍物, 同时具有计算量小, 反应迅速、可操作性强等特点。DWA算法属于局部路径规划算法。DWA算法(dynamic window approach)是移动机器人在运动模型下推算(v,w)对应的轨迹,确定速度采样空间或者说是动态窗口(三种限制);

2023-02-02 21:39:51 3046

转载 自动驾驶轨迹生成-B样条曲线

https://blog.csdn.net/weixin_42301220/article/details/125173884

2023-01-15 16:04:07 329

原创 自动驾驶轨迹生成-贝塞尔(Bézier)曲线

在车遇到障碍物或者是前车速度较慢的时候,就会进入换道逻辑,那么如何从一个车道换到另外一个车道,同时要保证车里面的人的一个体感问题,就是如何平滑过度,这就是为什么要使用贝塞尔曲线来做换道时的轨迹生成了,OK那开始讲贝塞尔曲线了。

2023-01-15 14:56:39 2731 3

原创 每周一篇论文-规划算法Jump Point Search-Online Graph Pruning for Pathfinding on Grid Maps

JPS算法的论文阅读

2022-11-06 21:06:50 684

转载 计算机网络-ARP、DNS、SMTP常见协议-005

属于网络层,其主要应用规模较小,可靠性要求较低的网络,可以通过不断的交换信息让路由器动态的适应网络连接的变化,这些信息包括每个路由器可以到达那些网络,这些网络有多远等。​ 以太网设备比如网卡都有自己唯一的MAC地址,它们是以MAC地址传输以太网数据包的,但是它们却识别不了IP包中的IP地址,所以我们在以太网中进行IP通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使数据包能发到一个确定的地方去,这就是ARP(地址解析协议)链路是路由器接口的另一个说法,即OSPF也称为接口状态路由协议。

2022-05-30 14:23:42 1532

转载 python的面向对象

类继承1、私有权限:在属性名和方法名 前面 加上两个下划线 __ 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;2、类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问; 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。这里实例化类也无法访问class Person(object): def __init__(self,name,age): self.name=name self.__age=age def _

2022-05-12 21:22:07 111

转载 Python基础-001

文章目录Python判断对象是否相等(== 和 is)如何在Python中管理内存一、垃圾回收:二、引用计数:三、内存池机制内存管理内存池机制python 循环赋值_Python垃圾回收中引用计数、标记清除、分代回收机制详解变量与对象引用计数垃圾回收垃圾回收的时机Python判断对象是否相等(== 和 is)Python中的对象包含三个基本要素,分别是:id:用来唯一标识一个对象,可以理解为内存地址;type:标识对象的类型;value:对象的值;== :比较两个对象的内容是否相等,即两个

2022-05-08 21:24:02 250

转载 计算机网络-004

文章目录Cookie 和 Session 的区别?Session详解cookie和session结合使用中间人攻击TCP/UDP协议TCP的粘包和粘包TCP协议标志位的意义TCP滑动窗口TCP是通过什么机制保障可靠性的?1、ACK确认机制2、超时重传3、TCP滑动窗口实现流量控制TCP的拥塞控制拥塞控制的机制慢开始与拥塞避免快重传与快恢复面试题TCP的拥塞控制机制三次握手和四次挥手三次握手四次挥手网络IO模型HTTP协议的请求报文和响应报文格式浏览器中输入域名后的整个流程。HTTP协议详解之URL篇Coo

2022-05-07 22:48:11 989

转载 ES知识点

Elasticsearch​ 在生产环境实践经验,最佳的情况下,是仅仅在 ES中就存少量的数据,就是你要用来搜索的那些索引,如果内存留给 filesystem cache 的是 100G,那么你就将索引数据控制在 100G 以内,这样的话,你的数据几乎全部走内存来搜索,性能非常之高,一般可以在 1 秒以内。结合Hbase优化:Hbase 的特点是适用于海量数据的在线存储,就是对 hbase 可以写入海量数据,但是不要做复杂的搜索,做很简单的一些根据 id 或者范围进行查询的这么一个操作就可以了。从 e

2022-05-07 16:34:43 465

转载 数据结构-001

文章目录数据结构1、如何避免Hash碰撞(1)开放地址法(2)再哈希法(3)链地址法(4)建立公共溢出区2、二叉查找树、红黑树、AVL树、平衡二叉树、B树、B+树一、二叉查找树2、局限性及应用1、简介![请添加图片描述](https://img-blog.csdnimg.cn/d2baf99c2a924858b1232b114c11f176.png)二、AVL树1、简介2、局限性三、红黑树1、简介2、性质3、应用四、B/B+树1、简介2、[B树](https://so.csdn.net/so/search?

2022-05-05 13:21:27 149

转载 操作系统-002

文章目录4、Linux中常用到的命令6、操作系统中进程调度策略有哪几种?6.1、先来先服务和短作业(进程)优先调度算法6.1.1、先来先服务调度算法6.1.2、短作业(进程)优先调度算法6.2、高优先权优先调度算法6.2.1、优先权调度算法的类型6.2.2、高响应比优先调度算法6.3、基于时间片的轮转调度算法6.3.1、时间片轮转法6.3.2、多级反馈队列调度算法7、操作系统——内存分配管理7.1、逻辑地址空间与物理地址空间7.2、内存保护7.3、内存非连续分配管理方式**7.3.1 基本分页存储管理方式*

2022-05-04 22:55:03 169

转载 FastDFS 分布式文件系统

FDFSFastDFS 分布式文件系统为什么我们需要它?众所周知,在微服务架构中,从网关进来的请求会通过Ribbon进行负载均衡,可能造成你每次请求都有可能是不同的服务器处理的,因为,为了提高系统的吞吐量,某些服务被集群化,在这种情况下,当用户需要进行文件存储的时候,如果说把文件存储在当前处理请求的服务器中,那么下次当你想要获得这个文件的时候可能就获取不到了,因为你的这次请求可能交由另一个服务器处理了。为了解决在分布式系统中文的件存储这一问题,FastDFS应运而生FastDFS是什么?这是一款开

2022-04-22 10:46:06 343

转载 计算机网络-003-TCP、UDP

七层协议应用层(报文):包含用户应用程序和协议;表示层(报文):主要解决用户信息的语法表示问题,如会话加密与数据压缩、语法表示与连接管理;会话层(报文):会话链接的恢复与释放、对会话进行分段,同步等传输层(段):提供端到端之间可靠透明的传输。分段与重组、差错控制及流量控制,保证数据传输的完整性和正确性;网络层(分组):路径的选择,网络连接的多路复用、差错的检测与恢复、排序与流量控制、服务选择;数据链路层(帧):把不可靠信道变为可靠信道,将比特组织成帧,在链路上提供点到点的帧传输,差错检测、流量控

2022-04-22 10:28:37 880

转载 计算机网络-002-HTTP 和HTTPS的区别

HTTP与HTTPS介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证

2022-04-22 08:51:51 394

转载 操作系统 - 进程和死锁详细解析

文章目录操作系统1、进程1.1、什么是进程(Process)和线程(Thread)?有何区别?1.2、父子进程之间的关系:1.3、进程间的通信方式1.4、进程和线程切换时的区别1.上下文切换2.进程切换3.虚拟内存2、死锁(deadlock)2.1、什么是死锁?2.2、死锁产生的四个条件2.3、死锁的处理策略—预防死锁、避免死锁、检测和解除死锁一、死锁的处理策略——预防死锁(一)破坏互斥条件SPOOLing技术(二)破坏不剥夺条件(三)破坏请求和保持条件(四)破坏循环等待条件二、死锁的处理策略——避免死锁(

2022-04-21 23:48:06 713

转载 python的设计模式

文章目录设计模式0、接口1、单例模式方法一:使用模块方法二、装饰器实现方法三、基于__new__方法2、工厂模式3、建造者模式设计模式设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。0、接口定义:一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这种方法,作用:限制继承接口的类的方法的名称及调用方式,隐藏了类的内部实现1、单例模式​ 单例模式(Singleton Pattern)是一种常用的软

2022-04-21 14:01:33 8086

转载 ACID在MySQL里的底层怎么实现?

1.ACID在MySQL里的底层怎么实现?“ ACID 事务底层内部实现原理”,还是那句俗语 “一日之计在于晨” ,因此分享给大家的是 「mysql 模块」- ACID 内部实现原理。想必在 mysql 中,事务大家一定不陌生,但是我估计了解最多的是它 ACID 的表名特性含义吧。事务,我们想要达到什么结果呢?无非不就是 可靠性 与 并发 处理。今天就让我来为大家进行 ACID 底层内部 “解刨” 分析。01—ACID 概述所谓事务是用户自定义的一个数据库操作序列,这些操作是一个不可分割的单位。我们要

2022-04-21 11:44:42 173

转载 004-MYSQL的查询过程

文章目录1. sql慢查询(优化),如果没有索引怎么办?加了索引也比较慢怎么办2. 一条SQL语句在MySQL中执行过程全解析3. 回表1. sql慢查询(优化),如果没有索引怎么办?加了索引也比较慢怎么办原因讲解首先,我们来创建一个存储引擎为 InnoDB 的 User 表,这个表包含三个字段分别是 id,name 和 age。其中 id 为主键, name 上添加了一个普通索引名字叫 n,接着向这条表中插入 10 亿条数据。表和数据都创建完了,下面我们就来说说为什么加上了索引还是查询很慢,以及解决

2022-04-21 09:55:28 831

转载 003-MySQL索引

文章目录MySQL索引2.1 索引类型2.1.1 B树2.1.2 B+树2.1.3 B+树和B树的区别是:2.1.4 B+树比起B树有什么优点呢?2.2 MySQL中InnoDB的一级索引、二级索引2.3 数据库Mysql-索引的最左前缀匹配原则2.3.1 例子来理解最左前缀匹配原则2.3.2 最左前缀匹配原则适用场景2.4 哈希索引8、SQL,考察联合语句,如何分页以及复杂语句的优化8.1、分页8.2、复杂语句的优化MySQL索引关于[MySQL]索引的好处,如果正确合理设计并且使用索引的MySQL是

2022-04-20 18:48:06 86

转载 001-MYSQL命令

文章目录数据库一、命令相关1.常见命令2.指定查询结果中的列标题3. 查询经过计算的列(即表达式的值)4.使用通配符进行模糊查询5.多重条件查询:使用逻辑运算符6.对查询结果排序7.对查询结果分组8、MySQL -- 应用数据库一、命令相关1.常见命令mysql -uroot -p #如果刚安装好MySQL,root是没有密码的*mysql> mysql -h192.168.206.100 -uroot -p12345678; #u与root可以不加空格mysql> drop da

2022-04-20 18:32:25 245

转载 Python实现:图的遍历(BFS、DFS)、最小生成树(Kruskal、Prim)、最短路径(Dijkstra)

Python实现:图的遍历(BFS、DFS)、最小生成树(Kruskal、Prim)、最短路径(Dijkstra)https://blog.csdn.net/Hanx09/article/details/106816845

2022-04-20 11:13:56 233

转载 软件工程——瀑布模型、快速原型模型、增量模型、螺旋模型

https://blog.csdn.net/zjuwxx/article/details/97252039

2022-04-19 18:18:54 126

转载 测试开发的理论

文章目录1. 软件测试是什么?2. 测试的定义3.测试的原则4. 测试的流程5. 测试的模型1. 软件测试是什么?用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程软件测试的目的:1.确认软件的质量,其一方面是确认软件做了你所期望的事情,另一方面是确认软件以正确的方式来做了这个事件2.提供信息,比如提供给开发人员或程序经理的反馈信息,为风

2022-04-19 18:18:07 188

转载 007-Redis的发布、订阅

原理Redis是使用C实现的,通过分析 Redis 源码里的 pubsub.c 文件,了解发布和订阅机制的底层实现,籍此加深对 Redis 的理解。Redis 通过 PUBLISH 、SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能。通过 SUBSCRIBE 命令订阅某频道后,redis-server 里维护了一个字典,字典的键就是一个个 频道!而字典的值则是一个链表,链表中保存了所有订阅这个 channel 的客户端。SUBSCRIBE 命令的关键, 就是将客户端添加到给定

2022-04-19 13:57:49 298

转载 计算机网络-001-请求方法和状态码

文章目录1. HTTP 请求方法2. HTTP常见的状态码2开头 (请求成功)3开头 (请求被重定向)4开头 (请求错误)5开头(服务器错误)3. GET 和 POST 比较4. Post 和 Put 的区别1. HTTP 请求方法1、Opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送测试服务器功能(允许客户端查看服务器性能)2、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)。3、Post 把指定资源提交数据进行处理请求(提交表单、上传文

2022-04-14 09:24:32 184

转载 002-MySQL中的锁

文章目录三、MySQL锁3.1 Mysql中MyISAM和INNODBMyISAM:InnoDb:3.2 乐观锁和悲观锁(1)乐观锁(2)悲观锁补充:三、MySQL锁表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。粒度越小并发度越高,锁冲突的机率越低,加锁速度越慢,开销越大。3.

2022-04-12 13:30:46 66

转载 006-Redis-非阻塞IO

文章目录**Redis单进程单线程**Redis的非阻塞IOI/O多路复用程序的实现Redis单进程单线程Redis是单进程单线程的,Redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。多线程处理会涉及到锁。多线程处理会涉及到线程切换而消耗CPU。减少上下文切换时间,因为CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带宽。单线程无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来解决。单线程的redis为什么这么快?(一)纯内存操作

2022-04-11 19:13:00 1169

转载 005-Redis-持久化

文章目录Redis持久化一、RDB二、AOF三、AOF 重写四、RDB 与 AOF 的对比**Redis单进程单线程**Redis的非阻塞IOI/O多路复用程序的实现缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级一、缓存雪崩二、缓存穿透三、缓存预热四、缓存更新五、缓存降级缓存穿透、击穿、雪崩缓存穿透缓存击穿缓存雪崩热点数据和冷数据是什么Memcache与Redis的区别有没有尝试进行多机redis 的部署?如何保证数据一致的?Redis 常见性能问题和解决方案为什么Redis的操作是原子性的,怎么保证原子

2022-04-11 16:00:45 200

转载 Linux常见命令

文章目录1. 目录切换 cd2. 目录查看 ls [-al]3. 创建目录【增】 mkdir4. 删除目录或文件【删】rm5. 目录修改【改】mv 和 cp6. 搜索目录【查】find7. 文件操作命令7.1 文件操作【增,删,改,查】8. 权限修改9. 其他命令10. 查找命令11. su、sudo1. 目录切换 cd命令:cd 目录cd / 切换到根目录cd /usr 切换到根目录下的usr目录cd ../ 切换到上一级目录 或者 cd ..cd

2022-04-11 10:38:52 141

转载 002-Redis的pipeline、跳表

文章目录1. 项目中redis2. pineline相关3. Redis-Zset底层数据结构:跳跃表(跳表)1. 项目中redis# 建立redis连接redis_conn = get_redis_connection(alias='verify_codes')# 创建用户输入的手机号标志sms_fmt = "sms_{}".format(tel).encode('utf8')# 从数据库里面拿出手机号,名字是一样的real_sms = redis_conn.get(sms_fmt) #

2022-04-09 22:33:29 109

转载 003-Redis-Redis的底层数据结构、过期策略以及内存淘汰机制、Redis分布式锁

文章目录1.缓存类型2.Redis的底层数据结构(6种)2.1 简单动态字符串2.2 链表2.3 字典2.4 跳跃表2.5 整数集合2.6 压缩列表2.7 总结3 Redis的过期策略以及内存淘汰机制3.1 Redis的过期策略3.2 Redis的内存淘汰4.Redis分布式锁1.缓存类型缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。1.1本地缓存:本地缓存就是在进程的内存中进行缓存,比如我们的 JVM 堆中,可以用 LRUMap 来实现,也可以使用 Ehcache

2022-04-09 21:11:34 244

转载 MYSQL面经-命令相关和索引

一、命令相关1、常见命令mysql -uroot -p #如果刚安装好MySQL,root是没有密码的*mysql> mysql -h192.168.206.100 -uroot -p12345678; #u与root可以不加空格mysql> drop database db_name; # -- 删除数据库mysql> use db_name; #-- 选择数据库mysql> create table tb_name (字段名 varc

2022-04-08 08:55:39 297

转载 004-Redis-缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

一、缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间 (例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。解决办法:大多数系统设计者考虑用加锁( 最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。还有一个简单方案就时讲缓存失效时间分散开。

2022-04-06 13:41:45 242

转载 001-Redis基础类型

Redis基础类型:String:String 类型是 Redis 中最常使用的类型,内部的实现是通过 SDS(Simple Dynamic String )来存储的。SDS 类似于 Java 中的 ArrayList,可以通过预分配冗余空间的方式来减少内存的频繁分配。这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。(即以空字符’\0’结尾的字符数组),它是自己构建了一种名为 简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 作为 Re

2022-04-06 11:34:17 127

原创 面试-Django实现注册短信验证码发送

注册的逻辑注册需要的参数用户名,密码等,主要是图片验证码等输入输入图片验证码之后,点击获得验证码,这时候要验证图片验证码的正确性图片验证码正确才会发生短信,用户收到短信之后,输入后,点击注册就可以把数据写入数据库。图片验证码的作用是防止短信发送的浪费,但是背后真的那么简单吗?想多了,下面讲一下细节。这是代码===>class RegisterForm(forms.Form): username = forms.CharField(label='用户名', max_length=2

2022-04-06 09:13:46 1747

转载 Reids的pineline相关

pineline相关Redis 使用的是客户端-服务器(CS)模型和请求/响应协议的 TCP 服务器。这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听 Socket 返回,通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端。  Redis 客户端与 Redis 服务器之间使用 TCP 协议进行连接,一个客户端可以通过一个 socket 连接发起多个请求命令。每个请求命令发出后 client 通常会阻塞并等待 redis 服务器处理,redis 处理完请

2022-04-06 09:12:40 104

原创 面试-Django实现登陆的原理

登陆登陆的主要参数是:手机号/用户名,密码和记住我的选项class LoginForm(forms.Form): # 手机号 和用户名 密码 user_account = forms.CharField() password = forms.CharField(label='密码', max_length=20, min_length=6, error_messages={"min_length": "密码长度要大于6

2022-04-06 07:54:58 1840

转载 剑指 Offer 36. 二叉搜索树与双向链表

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地完成转换操作。当转化完成以后,树中节点的左指针需要指向前驱,

2022-04-05 22:41:14 97

B树-学生竞赛信息管理系统.txt

数据结构课程设计-B树-学生竞赛管理系统:在设计B树结构时,本项目考虑到真实的检索情况,B树的构造为了提高检索的速度,减少树的层数,避免递归带来的速度慢的问题。在对象设计上,学生和老师的对象关系,其中老师主要对竞赛数据进行增删改查得,而参加比赛的则是学生,所以本项目设计了加入竞赛的功能。

2020-07-15

空空如也

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

TA关注的人

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