自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码农印象

努力做好一个文邹邹的工具人,你做的越多,你知道的越多!

  • 博客(341)
  • 资源 (6)
  • 收藏
  • 关注

原创 【面试指南】如何看待你的竞争对手30k,而你却3k?想要高薪,我们也要学会拧螺丝、造飞机的能力

刚开始工作的时候,我也想不通这个问题,甚至很鄙视这种现象。后面当了面试官,做到了公司中层管理,也会站在公司以及行业角度去重新思考这个问题。为什么这种现象会越来越普遍呢?尤其在 IT 行业愈加明显。面试看的是应聘者上限,工作则是按需安排。银行考试,以为自己是在面试行长 ,下到“金融下乡”,上到国家宏观经济政策考了个遍,结果实际工作是……柜员,处理手续、卖信用卡、卖ETC。互联网公司面试,又是领导力、又是算法架构,结果入职以后就是调整、测试、controlC+V。所以为什么面试要考察上限呢?说白了.

2021-11-16 16:22:49 334 1

原创 【每日一句】邮件模版

【每日一句】邮件模版。

2022-11-11 10:18:44 980 1

原创 【程序员节】1024程序员节专属程序员的浪漫

情人节少不了送花送礼物,,当然不会在送什么礼物上给你指点一二,但可以发挥自己的优势,但是可以通过制作网站的方式打动她。

2022-10-23 19:55:31 23017

原创 我把问烂了的⭐MySQL⭐面试题总结了一下

连接池基本原理数据库连接池原理在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。内连接(innerjoin)取得两张表中满足存在连接匹配关系的记录。外连接(outerjoin)取得两张表中满足存在连接匹配关系的记录,以及某张表(或两张表)中不满足匹配关系的记录。交叉连接(crossjoin)显示两张表所有记录一一对应,没有匹配关系进行筛选,也被称为笛卡尔积。死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。...

2022-07-29 14:42:03 496

原创 五个维度着手MySQL的优化

举例给name字段建索引,查询的时候,只用到了索引的字段,这就是索引覆盖。也就是直接通过查询索引,拿出来的数据就已经满足了查询返回的字段数据。无需额外其他查询操作了,也就是索引覆盖了。这样肯定快。如果初衷是查name,结果写成了select*,变成查多了其他字段,那其他字段不是索引,肯定无法触发索引覆盖使用场景了,也就是需要额外的回表查询操作了,那这样就慢了。ps对回表不了解的,可以看看这篇先MySql索引失效、回表解析_小目标青年的博客。...

2022-07-29 14:39:01 298

原创 以后面试官问你 为啥不建议使用Select *,请你大声回答他!

举例给name字段建索引,查询的时候,只用到了索引的字段,这就是索引覆盖。也就是直接通过查询索引,拿出来的数据就已经满足了查询返回的字段数据。无需额外其他查询操作了,也就是索引覆盖了。这样肯定快。如果初衷是查name,结果写成了select*,变成查多了其他字段,那其他字段不是索引,肯定无法触发索引覆盖使用场景了,也就是需要额外的回表查询操作了,那这样就慢了。ps对回表不了解的,可以看看这篇先MySql索引失效、回表解析_小目标青年的博客。...

2022-07-29 14:37:50 270

原创 为什么要分库分表?

上面主要从垂直和水平,两个方向介绍了我们的系统为什么要分库分表。说实话垂直方向(即业务方向)更简单。在水平方向(即数据方向)上,分库和分表的作用,其实是有区别的,不能混为一谈。分库是为了解决数据库连接资源不足问题,和磁盘IO的性能瓶颈问题。分表是为了解决单表数据量太大,sql语句查询数据时,即使走了索引也非常耗时问题。此外还可以解决消耗cpu资源问题。分库分表可以解决数据库连接资源不足、磁盘IO的性能瓶颈、检索数据耗时和消耗cpu资源等问题。分库分表的具体实现方案有哪些?...

2022-07-29 14:37:01 673

原创 MySQL 23道经典面试吊打面试官

回表就是先通过数据库索引扫描出该索引树中数据所在的行,取到主键id,再通过主键id取出主键索引数中的数据,即基于非主键索引的查询需要多扫描一棵索引树.事务是指是程序中一系列操作必须全部成功完成,有一个失败则全部失败。特性「1.原子性(Atomicity)」要么全部执行成功,要么全部不执行。「2.一致性(Consistency)」事务前后数据的完整性必须保持一致。「3.隔离性(Isolation)」隔离性是当多个事务同事触发时,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。...

2022-07-29 14:35:13 193

原创 最近很火的国产接口神器Apipost体验

官网介绍它是集Postman、Swagger、Mock、流程测试为一体的一款工具,通过协作功能将研发团队的每个角色整合打通以至于提高研发效率。作为前端、后端、测试都在搞的我,自然要上手体验一把,看看它与我之前常用的postman、swagger有哪些不同和优势。...

2022-07-29 14:33:52 1005

转载 go-zero 实战之 blog 系统

本文以 的网站后台为例,着重介绍一下如何使用 开发 的用户模块。本文涉及的所有资料都已上传 github 仓库 kougazhang/go-zero-demo,感兴趣的同学可以自行下载。用户模块是后台管理系统常见的模块,它的功能大家也非常熟悉。管理用户涉及到前端操作,用户信息持久化又离不开数据库。所以用户模块可谓是 “麻雀虽小五脏俱全”。本文将详细介绍一下如何使用 go-zero 完成用户模块功能,如:用户登录、添加用户、删除用户、修改用户、查询用户 等(完整的 api 文件请参考仓库代码)。blog

2022-07-10 14:53:59 554

转载 多图详解万星 Restful 框架原理与实现

我们先通过 自带的命令行工具 来生成一个 ,其 函数如下:解析配置文件将配置文件传入,初始化 初始化 将 注入 中:注册路由将 中的启动的 同时注入到 当中启动 接下来我们来一步步讲解其设计原理!Let’s Go!从日常开发经验来说,一个好的 web 框架大致需要满足以下特性:上图描述了 rest 处理请求的模式和大部分处理路径。下面我们来细说一下整个 rest 是如何启动的?上图描述了整体 server 启动经过的模块和大致流程。准备按照如下流程分析 rest 实

2022-07-10 14:36:51 359

转载 定制个机器人帮你和Ta聊天

这是基于200万聊天记录训练出来的,你可以用自己和女朋友的记录训练了试试效果 😛至于微信机器人怎么用,你可以 搜搜看哈 是一个通过已知对话数据集快速生成回答的 Go 问答引擎。好多年前,当我们需要一个聊天机器人的时候,我是先用了 ,但是使用下来,我们的1.2亿对话语料训练后的模型回答一个问题需要21秒左右,实在没法接受。仔细看了 源码之后,我用 Go 重新实现了一个,并用 go-zero 的 MapReduce 框架做了并行优化,结果我们一个回答平均耗时大概18毫秒。国庆假期,我有...

2022-07-10 14:33:41 223

转载 用 Go + WebSocket 快速实现一个 chat 服务

在 开源之后,非常多的用户询问是否可以支持以及什么时候支持 ,终于在 里面我们从框架层面让 的支持落地了,下面我们就以 作为一个示例来讲解如何用 来实现一个 服务。我们以 中的 聊天室为例来一步步一讲解 的实现,分为如下几个部分:先放一张图,大致的数据传输:中间有个 就是整个 的 。首先要支撑双方通信:数据流是 的主要功能,先不急着看代码,我们先想 怎么接入并被 感知:这样,新接入的 就被加入到 注册 通道中。发出了 注册 的动作, 会怎么处理呢?接收注册消息 -> 加入

2022-07-10 14:02:42 540

转载 高可用延迟队列设计与实现

延迟队列:一种带有 的消息队列这样解释,整个设计就清楚了。你的目的是 延时,承载容器是 mq。列举一下我日常业务中可能存在的场景:为了解决以上问题,最简单直接的办法就是定时去扫表:几个缺点:最大问题其实是什么?调度模型基本统一,不要做重复的业务逻辑我们可以考虑将逻辑从具体的业务逻辑里面抽出来,变成一个公共的部分。而这个调度模型,就是 延时队列 。其实说白了:延时队列模型,就是将未来执行的事件提前存储好,然后不断扫描这个存储,触发执行时间则执行对应的任务逻辑。那么开源界是否已有现成的方案呢?答案是肯定的。

2022-07-10 13:42:20 261

转载 服务注册与发现的原理和实现

对于搞微服务的同学来说,服务注册、服务发现的概念应该不会太陌生。简单来说,当服务A需要依赖服务B时,我们就需要告诉服务A,哪里可以调用到服务B,这就是服务注册发现要解决的问题。服务注册是针对服务端的,服务启动后需要注册,分为几个部分:当一个服务节点起来之后,需要把自己注册到 上,便于其它节点来发现自己。注册需要在服务启动完成并可以接受请求时才会去注册自己,并且会设置有效期,防止进程异常退出后依然被访问。定时续期相当于 ,定期告诉 自己还在,能够继续服务。当进程退出时,我们应该主动去撤销注册信息,便于调用

2022-07-10 11:34:01 740

转载 听说过对 Go map 做 GC 吗?

在 Golang 中的 map 结构,在删除键值对的时候,并不会真正的删除,而是标记。那么随着键值对越来越多,会不会造成大量内存浪费?首先答案是会的,很有可能导致 OOM,而且针对这个还有一个讨论:github.com/golang/go/issues/20135。大致的意思就是在很大的 中, 操作没有真正释放内存而可能导致内存 OOM。所以一般的做法:就是 重建map。而 中内置了 的容器组件。 在一定程度上可以避免这种情况发生。那首先我们看看 原生提供的 是怎么删除的?测试代码如上,我们可以

2022-07-10 11:24:54 269

转载 最简单的 K8S 部署文件编写姿势

首先,你需要知道有这些知识点,其次要把这些知识点都搞明白也不容易,再次,每次编写依然容易出错!前一篇文章 讲解了如何快速创建自己的服务镜像,不过为了演示,这篇文章我们以 镜像为例。首先安装 工具一键生成K8S部署文件生成的 文件如下:部署服务,如果 namespace不存在的话,请先通过 创建查看服务允许状态测试服务4. 总结 工具极大简化了 K8S yaml 文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。本文转自 https://learnku.com/a

2022-07-10 09:24:28 356

转载 从代码到部署微服务实战

当前微服务已经成为服务端开发的主流架构,而Go语言因其简单易学、内置高并发、快速编译、占用内存小等特点也越来越受到开发者的青睐,微服务实战系列文章将从实战的角度和大家一起学习微服务相关的知识。本系列文章将以一个“”由浅入深的和大家一起一步步搭建起一个完整的微服务系统该篇文章为微服务实战系列的第一篇文章,我们将基于go-zero+gitlab+jenkins+k8s构建微服务持续集成和自动构建发布系统,先对以上模块做一个简单介绍:实战主要分为五个步骤,下面针对以下的五个步骤分别进行详细的讲解首先我们搭建实验环

2022-07-09 23:51:55 374

转载 最简单的Go Dockerfile编写姿势

选择最简单的镜像比如alpine,整个镜像5M左右设置镜像时区2. 多阶段构建第一阶段构建否则构建出可执行文件,确保构建过程独立于宿主机第二阶段将第一阶段的输出作为输入,构建出最终的极简镜像3. 完整Dockerfile编写过程首先安装 工具在 项目下创建一个 服务文件结构如下:在 目录下一键生成 内容如下:在 目录下 镜像查看镜像可以看出镜像大小约为18M。启动服务测试服务4. 总结 工具极大简化了 文件的编写,提供了开箱即用的最佳实践,并且支持了

2022-07-09 12:31:18 1127

转载 基于gRPC的注册发现与负载均衡的原理和实战

gRPC是一个现代的、高性能、开源的和语言无关的通用RPC框架,基于HTTP2协议设计,序列化使用PB(Protocol Buffer),PB是一种语言无关的高性能序列化框架,基于HTTP2+PB保证了的高性能。go-zero是一个开源的微服务框架,支持http和rpc协议,其中rpc底层依赖gRPC,本文会结合gRPC和go-zero源码从实战的角度和大家一起分析下服务注册与发现和负载均衡的实现原理原理流程图如下:从图中可以看出go-zero实现了gRPC的resolver和balancer接口,然后通过

2022-07-09 11:56:44 358

原创 【Docker】docker容器内安装yum,vim等命令

二.更新apt-get指令三. 安装yum命令个人感叹当时在搞mysql集群,需要改ncf配置文件,进入容器之后是没有vim命令的,然后网上各种说法我总结了几种方式改配置文件1.我上述的 docker容器内安装yum,vim等命令2.可以cp 复制,将容器内的文件复制出来,在复制进去3.通过容器卷技术 -v 挂载4.别人或者你自己的配置好的镜像...

2022-07-08 11:51:30 9705 7

原创 【protobuf】统一protobuf版本的办法

组内同一项目可能需要多人共同开发、维护,由于每个人本地的protobuf版本不一致,各自本地编译完proto文件后,会造成合并代码的时候出现大量DIFF,从而导致代码Review以及合并的困扰,也可能会因为各版本间的兼容问题,出现隐性代码Bug。为解决此问题,决定寻找一种方式统一组内protobuf版本,避免此类问题的发生。目前组内同学的protobuf版本有各种各样,每次合并代码会出现大量代码DIFF问题。所以决定制作一个Docker镜像来统一protobuf版本。组内同学版本花哨不一,所以通过掐头去尾取

2022-07-08 08:20:38 1697

原创 【protobuf 】protobuf 升级后带来的一些坑

升级后带来的一些坑

2022-06-25 18:42:31 1451

原创 【Go语言】Go语言我们应该这样学~全网较全的学习教程

哈喽,我是一个初级的互联网玩家,致力于分享各领域优质开源项目。这是一篇可以让你受益终身的 Go 精华文章,汇聚了圣经级 500 + Go开源项目的精华,Go 开源电子书、Go学习路线图!建议你花 2 分钟读完这篇回答,可以帮你节省 90% 的找书时间,一定要坚持读到最后。Go-web编程百度云链接 提取码:pm8sGo并发实战链接 提取码:4endGo语言编程链接 提取码:lhfkG语言标准库链接:提取码:ax5nGo语言程序设计:提取码:d35wGo语言圣经:提取码:q8mrGo语言实战:提取码:ikaq

2022-06-17 15:42:12 900

原创 【WIN】浏览器打不开网页出现DNS_PROBE_FINISHED_NO_INTERNET

浏览器打不开网页出现DNS_PROBE_FINISHED_NO_INTERNET

2022-06-04 09:49:45 2696 1

原创 【Go进阶】终端版学生管理系统

在学习Go语言基础后,为了巩固语言基础,我将用Go语言开发一个简易的学生管理系统,以此来简单地整合一下自己近期所学的知识!下面就开始我Go语言的第一个管理系统的编写吧~需求分析该简易版的学生管理系统主要是以管理员视角来执行程序中所编写的相关功能。当然我们学生管理系统最基本的功能当然离不开基本的增删查改功能啦~下面是我对该系统简单理解目录结构演示数据库表结构create table student( I_ID bigint unsigned auto_inc

2022-05-23 21:22:41 172

原创 【Go】Go语言中的omitempty字段

直接上代码:package main import ( "encoding/json" "fmt") type Person struct { Name string `json:"name"` Age int `json:"age"` Addr string `json:"addr,omitempty"`} func main() { p1 := Person{ Name: "taoge", Age:

2022-05-19 19:23:07 2402

原创 【Go】使用lua脚本实现redis分布式锁

分布式锁的要求实现分布式锁之前要明确一下分布式锁的要求互斥性,在任意时刻,只能有一个进程持有锁防死锁,不能因为持有锁的客户端宕机而使其他进程无法获取到锁。加锁和解锁的必须是同一个进程。保证锁的续租。redis分布式锁的优缺点redis实现的分布式锁性能会比zookeeper、etcd等实现的要好,但因为单点故障或者主备异步复制的问题,可能会出现当master宕机crash会导致多个client同时持有分布式锁。(这里的方案会出现这些问题)因为etcd的高可靠、强一致存储,可以避免故障时出

2022-04-30 01:55:05 908

原创 【Go】学习笔记

1. 跨平台、有垃圾回收机制;2. 支持Unicode字符集(符号集)以及utf-8编解码(存储格式),Go语言源文件总是用UTF8编码;3. 默认使用了静态编译,不依赖任何动态链接库;4. 必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。go语言编译过程中只有报错,没有警告;5. Go语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句;6. gofmt工具把代码格式化为标准格式;7. 只有i++,没有++i。i++是语句而非表达式,j = i++是错误的

2022-04-30 01:52:45 465

原创 【Goland】如何修改背景为图片

【Goland】如何修改背景为图片

2022-03-29 23:01:04 1099

转载 微信小程序中关于腾讯视频的使用与踩坑

在开发一个小程序项目时,需要在页面中观看视频,就需要使用到微信小程序的腾讯视频插件,这样就可以在页面中引用腾讯视频,而无需使用自己的服务器进行视频的播放,节约了很大的服务器开支。但是微信小程序插件的文档写的很不清楚,因此将我的解决方法写在这里。一、在小程序中引入插件。进入微信公众平台,在设置中找到第三方服务,在插件管理中添加插件。搜索到腾讯视频,点击添加,同时打开腾讯视频的详情,在里面找到该插件的appid与版本号。接着是代码部分,在app.json中添加 "plugins": { "t

2022-03-13 20:28:47 1752

转载 【Go进阶】并发下载器

大家好,我是 polarisxu。今天为大家带来一个实战项目。建议你一定要动手实践。在往下看之前,你不妨思考下,用 Go 如何实现一个并发下载器。(我之前有推荐过一个类似的开源项目:推荐三个Go实战开源项目)01 原理对于服务器上的某个文件,我们要并发下载到本地,很容易想到,应该将文件分成多个部分,然后开多个 goroutine 并发地去下载,最后将这多个部分合并成一个文件,实现并发下载的目的。现在的问题是,服务器上的一个文件,我们怎么做到分成多个呢?这需要 HTTP 协议相关知识了。HTTP

2022-02-24 22:57:57 532

原创 【Go】内存对齐

字节对齐问题我们在项目中有很多Struct结构体的时候,然后它结构体里面字段的排列方式如果不刻意的安排一下的话,因为有些比如说string占用的字节长度和int占用的字节长度是不一样的。会导致有一个内存不对齐,内存浪费的问题。等我们发现这个问题的时候,想手动去调整,但是因为结构体有很多,手动调整就很麻烦,所以目前就是把这个问题先放下来。但是这个问题在以前学习计算机组成原理的时候,倒是有了解过计算机的字长是多少【16 位】。操作系统每次处理一个字长需要多少字节。1-4-1-8-1=1+3+4+1

2022-01-23 12:12:40 465

原创 【Vue】黑马Vue入门到高级实战汇总

目录v-text v-cloak计算属性computed计算属性双向绑定监听器watchClass与Style绑定v-bind条件渲染v-ifv-if 与 v-show 比较列表渲染 v-for事件处理 v-on事件修饰符按键修饰符表单数据双向绑定v-model过渡&动画效果过滤效果案例动画效果案例自定义指令MVVM设计模式绑定语法v-bindv-showv-ifv-show 和 v-if 对比 观察者模式v-for数组中响应式的方法keyv-html绑定HTML片段内容防止用户短暂看到{{}}v-

2022-01-23 11:37:47 1210 1

转载 【前端精髓汇总】

CSS全面汇总速查vue所有基础语法vuex核心内容及重点细节总结vue cli2 ,3详解vue router全面详细知识点axios框架核心知识axios常见配置选项 跨域

2022-01-23 11:30:26 106

转载 解决Mac的brew下载非常慢

一键解决:自动脚本(全部国内地址)(在Mac os终端中复制粘贴回车下面这句话)/bin/zsh -c “$(curl -fsSLhttps://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)”

2022-01-23 10:57:25 1333

原创 【Vue】黑马vue快速入门自学笔记

01-02.vue基础-简介1.javascript框架2.简化Dom操作3.响应式数据驱动`03.vue基础-第一个vue程序1.文档传送门:https://cn.vuejs.org2.步骤(1)导入开发版本的vue.js;(2)创建Vue实例对象,设置el属性和data属性;(3)使用简洁的模板语法把数据渲染到页面上<body> <div id="app"> {{message}} </div> <.

2022-01-22 21:00:57 948

原创 交互利器之expect简介

expect简介expect是用于与telnet,ftp,scp,ssh等服务器进行交互的常用工具

2021-12-27 11:49:41 374 2

原创 Interface 与结构体

interface类型的nil的type是 nil,value是空(*Struct)(nil) 赋值过的nil的type是 *Struct,value是nil因此不相等

2021-12-16 22:03:53 184

转载 DevOps工具

■Devops流程https://blog.csdn.net/wwd0501/article/details/104025005https://www.infoq.cn/article/5AVh2WpN66T7M5VhYiFG?utm_source=related_read&utm_medium=article・XL Deployhttps://docs.xebialabs.com/#get-startedhttps://docs.xebialabs.com/v.9.7/deploy/c

2021-12-14 12:49:11 313

Docker入门到进阶实战

Docker进阶实战,内容主要基于B站狂神老师的Docker基础视频与部分网络docker博客总结,按照个人理解所整理总结。图床用的是github,由于网络原因图片加载不出来,嗯,我直接发个PDF吧,需要的自取吧。Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2022-07-08

终端版学生管理系统-Go语言

终端版学生管理系统-Go语言

2022-05-23

数据结构课程设计大纲

《数据结构》是计算机软件的一门基础课程,计算机科学各领域及有关的应用软件都要用到各种类型的数据结构。学好数据结构对掌握实际编程能力是很有帮助的。为了学好《数据结构》,必须编写一些在特定数据结构上的算法,通过上机调试,才能更好地掌握各种数据结构及其特点,同时提高解决计算机应用实际问题的能力。《数据结构与算法分析》课程设计是在学习完C语言和数据结构之后,对这两门课程所学知识的综合应用。

2018-06-29

数据结构课程设计

本题要求输入信息存入文件,读取文件中信息统计分数,并执行排序与查找功能,要求中未对输入数据进行插入和删除等操作,并且排序和查找过程中有许多的随机读取数据操作,因此使用顺序存储结构进行数据的存储。各个要求属性具有一定的联系,在定义数据时使用结构体和结构体数组来存储相关信息数据。在程序开始阶段为提高用户的体验,以及界面的美观度,为程序设计了一个图形界面,以西安科技大学照片为背景,并插入了音效。

2018-06-29

教你如何玩转指针

在信息工程中,指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中的寄存器(Register)。指针一般出现在比较近机器语言的语言,如汇编语言或C语言。面向对象语言如Java一般避免用指针,而是引用。

2018-03-23

指针那些事儿

指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。

2018-03-23

空空如也

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

TA关注的人

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