专家-小佬
码龄7年
关注
提问 私信
  • 博客:120,604
    社区:200
    问答:7,936
    128,740
    总访问量
  • 51
    原创
  • 75,934
    排名
  • 229
    粉丝
  • 2
    铁粉
  • 学习成就

个人简介:热爱码工 主要用于记录知识点、博客教学、问题处理等。如有问题,可以联系我博客。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:河北省
  • 加入CSDN时间: 2017-06-30
博客简介:

qq_39360549的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    2
    当前总分
    122
    当月
    2
个人成就
  • 获得118次点赞
  • 内容获得28次评论
  • 获得159次收藏
创作历程
  • 8篇
    2024年
  • 4篇
    2023年
  • 4篇
    2020年
  • 17篇
    2019年
  • 24篇
    2018年
  • 4篇
    2017年
成就勋章
TA的专栏
  • .netcore
    7篇
  • 自动化发布
    3篇
  • antd
    1篇
  • C# 安全代码(加密解密)
    4篇
  • C# MVC
    5篇
  • C# MVC EF
    3篇
  • 零散的东西
    1篇
  • 导出、读取word/excel
    4篇
  • C#  APi
    5篇
  • ADO.NET
    1篇
  • Dapper(sqlsugar)
    2篇
  • js
    4篇
  • C# 调用微信接口
    1篇
  • C#&& Oracle
    1篇
  • 正则
    1篇
  • redis
    3篇
  • JAVA
    6篇
  • C#
    9篇
  • Linux
    1篇
  • VUE
    1篇
兴趣领域 设置
  • 大数据
    mysqlredis
  • 后端
    spring架构
  • 微软技术
    c#.netasp.net
  • 服务器
    linux
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

.NET 中推荐使用 HttpClientFactory替代HttpClient

在 .NET 开发中,了解如何发出高效、可靠且可伸缩的 Web 请求至关重要。该领域的两个主要参与者是 和。虽然两者都用于发送 HTTP 请求和接收 HTTP 响应,但有一个令人信服的理由比传统的 .本文旨在用简单的英语揭开这些选项的神秘面纱,强调直接使用的陷阱,并说明为什么对于渴望提高其 .NET 技能的年轻开发人员来说,这是一个更好的选择。HttpClient 的故事:一个警示故事曾几何时,在 .NET 的土地上,开发人员习惯于发出 Web 请求。
原创
发布博客 2024.06.04 ·
813 阅读 ·
23 点赞 ·
0 评论 ·
17 收藏

.NET 几种微服务框架

NET有哪些微服务框架?.NET的微服务框架还真不多,一般企业都会自己搭建微服务框架,或者基于其它框架搭建微服务(比如abp)。本文将介绍几种微服务框架,供大家学习参考。
原创
发布博客 2024.05.27 ·
1132 阅读 ·
16 点赞 ·
1 评论 ·
18 收藏

C#最有价值的10个语法糖

C#语言是世界最优雅的语言之一,深受广大程序员的喜欢,尤其是其中的一些语法糖。C#语言推出了许多有价值的语法糖,这些语法糖可以使代码更加简洁、易读和提高程序的运行效率。本文将介绍10个比较实用的语法糖。以上是C#中最有价值的10个语法糖,它们提供了更强大、更灵活和更高效的编程工具,帮助开发者更轻松地编写清晰、简洁和可维护的代码。当然还有其它比较优秀的语法糖,比如并行Parallel.For,篇幅有限这里就不列出了。你觉得C#那个语法糖比较优秀,欢迎留言讨论。
原创
发布博客 2024.05.27 ·
439 阅读 ·
8 点赞 ·
0 评论 ·
6 收藏

.NET 通过 OpenTelemetry Traces 对应用程序进行追踪

是提供的一种遥测数据类型,用于记录和描述在分布式系统中的单个操作或工作单元的生命周期。在中,一个Trace可以被视为由一系列相关的事件组成的时间线,这些事件被称为Spans。每个Span可以包含多个属性、注释和事件,用于描述在该 Span 的生命周期中发生的特定操作或事件。例如,一个 HTTP 请求可以被表示为一个Span,其中包含了请求的开始时间、结束时间、HTTP 方法、URL、状态码等信息。如果这个请求还调用了其他的服务或数据库,那么这些调用也可以被表示为与原始请求Span相关联的子Span。
原创
发布博客 2024.05.24 ·
1031 阅读 ·
15 点赞 ·
1 评论 ·
21 收藏

.NET 程序通过 OpenTelemetry Logs 对接 Seq

OpenTelemetry 是一个由 CNCF(Cloud Native Computing Foundation)托管的开源项目,旨在为观察性(Observability)提供一套全面的工具,包括度量(Metrics)、日志(Logs)和追踪(Traces)。它的目标是为所有类型的遥测数据提供一种标准化的方法。OpenTelemetry 提供了一套 API 和 SDK,使得开发者可以在他们的应用程序中生成和收集遥测数据。
原创
发布博客 2024.05.24 ·
816 阅读 ·
8 点赞 ·
0 评论 ·
25 收藏

.NET 中 Channel 类 简单使用

在这个例子中,我们创建了两个生产者和两个消费者,它们都共享同一个通道。我们还可以通过控制消费者的数量来控制消费数据的速度,从而来调节系统的流量,达到消峰填谷的作用。在这个例子中,我们创建了一个无界的通道,然后创建了两个任务,一个是生产者,一个是消费者。消费者从通道中读取数据并打印出来,但消费者处理数据的速度比生产者慢,所以当通道满时,生产者的 WriteAsync 操作将会阻塞,直到消费者读取了一些数据,使得通道有空间可用。相当于是一个进程内的内存队列,而且它没有持久化,纯内存操作,性能是非常非常高的。
原创
发布博客 2024.05.23 ·
402 阅读 ·
4 点赞 ·
0 评论 ·
9 收藏

为什么不推荐在Spring Boot中使用@Value加载配置

比如,同一个配置,可能背多个Service或者Controller使用,当我们再要修改它的时候,就会存在一个遗漏的风险。注解相信很多Spring Boot的开发者都已经有接触了,通过使用该注解,我们可以快速的把配置信息加载到Spring的Bean中。我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧加群:601122412 ,享受一起成长的快乐。另外,在这里,其实还可以增加对配置的校验,主要在pom.xml中引入。今天的分享就到这里,如果本文对你有帮助,欢迎一键三连。
原创
发布博客 2024.05.23 ·
320 阅读 ·
9 点赞 ·
0 评论 ·
5 收藏

Spring Boot中的 6 种API请求参数读取方式

使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,Spring Boot中也提供了多种机制来满足不同的API设计要求。接下来,就通过本文,为大家总结6种常用的请求参数读取方式。如果你发现自己知道的不到6种,那么赶紧来查漏补缺一下。如果你知道的不止6种,那么告诉大家,一起互相学习一下吧~
原创
发布博客 2024.05.23 ·
370 阅读 ·
9 点赞 ·
0 评论 ·
10 收藏

关于#python#的问题:psychopy声音刺激中,错误时播放呢

答:

🕒下午好,题主!目前:🟢[在线]
有帮助望采纳

在PsychoPy中,你可以通过编写代码来控制音频文件的播放,根据实验条件(例如正确或错误响应)来决定是否播放音频。以下是一个简单的示例,展示了如何在PsychoPy的代码组件中实现这一功能:

首先,确保你有一个音频文件(例如 correct.wav 和 error.wav),这些文件将根据参与者的响应来播放。

在你的实验中,你需要一个能够检测参与者响应是否正确的机制。这通常是通过比较参与者的响应和预设的正确答案来实现的。

在你的实验代码中,你可以使用 if 语句来检查参与者的响应是否正确,并根据结果播放相应的音频文件。

以下是一个简单的PsychoPy代码示例,展示了如何实现这一功能:

from psychopy import sound

# 初始化声音组件
correct_sound = sound.Sound('correct.wav')
error_sound = sound.Sound('error.wav')

# 假设你有一个变量 `response` 表示参与者的响应,以及一个变量 `correct_response` 表示正确答案
# 这里我们只是示例,实际的响应和正确答案应该在你的实验逻辑中定义
response = '正确答案'  # 参与者的响应
correct_response = '正确答案'  # 预设的正确答案

# 检查响应是否正确
if response == correct_response:
    # 如果响应正确,不播放任何声音
    pass
else:
    # 如果响应错误,播放错误声音
    error_sound.play()


在这个示例中,我们首先导入了 sound 模块,并初始化了两个声音对象 correct_sound 和 error_sound。然后,我们假设有一个变量 response 表示参与者的响应,以及一个变量 correct_response 表示正确答案。我们使用 if 语句来检查 response 是否等于 correct_response。如果相等,我们不执行任何操作(即不播放声音);如果不相等,我们播放 error_sound。

请注意,这只是一个示例,你需要根据你的实验设计和逻辑来调整代码。例如,你可能需要从键盘、鼠标或其他输入设备获取参与者的响应,并且正确答案可能是在实验运行时动态确定的。确保你的实验逻辑能够正确地检测参与者的响应,并根据需要播放相应的声音。

回答问题 2024.05.22

js怎样能正确的定义全局变量

答:

🕒下午好,题主!目前:🟢[在线]
有帮助望采纳

在谷歌浏览器扩展(Chrome Extension)中,JavaScript 文件通常运行在沙盒环境中,这意味着它们不能直接访问全局作用域。然而,Chrome 扩展提供了一种机制来定义和访问全局变量,即使用 chrome.storage API 或者在 background 脚本中定义变量。

以下是几种在 Chrome 扩展中定义全局变量的方法:
1.使用 chrome.storage API:
chrome.storage 允许你在扩展的不同部分(如 background 脚本、content 脚本、popup 脚本等)之间共享数据。

示例:

// 在 background 脚本中设置全局变量
chrome.storage.sync.set({key: 'value'}, function() {
    console.log('Value is set to ' + 'value');
});

// 在 content 脚本中获取全局变量
chrome.storage.sync.get('key', function(result) {
    console.log('Value currently is ' + result.key);
});

2.在 background 脚本中定义变量:
background 脚本在扩展的全局作用域中运行,因此你可以在其中定义全局变量。

示例:

// background.js
var globalVariable = 'I am global';

// 在 content 脚本中访问全局变量
// 需要使用消息传递机制
chrome.runtime.sendMessage({action: "getGlobalVariable"}, function(response) {
    console.log(response.globalVariable);
});

// 在 background 脚本中处理消息
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.action === "getGlobalVariable") {
        sendResponse({globalVariable: globalVariable});
    }
});


3.使用 window 对象:
如果你在 background 脚本中,可以直接在 window 对象上定义全局变量。

示例:

// background.js
window.globalVariable = 'I am global';


4.使用 chrome.extension.getBackgroundPage():
如果你在 content 脚本或其他非 background 脚本中,可以使用这个方法来访问 background 页面的全局作用域。

示例:

// content.js
var bg = chrome.extension.getBackgroundPage();
console.log(bg.globalVariable);


请注意,由于 Chrome 扩展的安全模型,content 脚本不能直接访问 background 脚本中的变量,因此需要使用消息传递机制或 chrome.storage API 来共享数据。此外,chrome.storage 提供了同步和本地存储选项,sync 存储会自动同步到用户的 Google 账户,而 local 存储只在本地保存。

回答问题 2024.05.22

谁会P4语言啊,我想请教一下

答:

🕒下午好,题主!目前:🟢[在线]
有帮助望采纳

P4是一种用于编程网络数据平面的高级语言,它允许用户描述数据包如何在网络设备(如交换机和路由器)中被处理。P4语言中的16w0和16w4这样的表达式通常与位字段(bitfield)的操作有关,其中w表示宽度(width),后面的数字表示具体的值。

在P4中,16w0和16w4可以被解释为具有16位宽度的位字段,其中16w0表示所有位都设置为0,而16w4表示所有位都设置为4。这里的4可能是一个占位符,表示一个具体的值,而不是字面上的数字4。在实际的P4代码中,这个值可能代表一个特定的操作码、标志或其他与网络协议相关的信息。

例如,如果你在P4代码中看到这样的表达式:


bit<16> my_field = 16w4;

这意味着my_field是一个16位的位字段,并且它的所有位都被设置为4。这通常用于初始化一个位字段,以便在后续的代码中使用。

请注意,P4语言的具体语法和用法可能会随着不同的P4版本和实现而有所不同。因此,如果你在特定的P4代码库或文档中遇到这些表达式,最好参考该代码库或文档的说明来准确理解它们的含义。

回答问题 2024.05.22

java业务性能问题求解(sql,业务设计相关)

答:

🕒下午好,题主!目前:🟢[在线]
有帮助望采纳

为了优化性能并满足你的需求,以下是一些建议:

索引设计:

对于 master 表,你应该在 user_id 和 purchase_time 字段上创建索引,因为这些字段将被用于过滤数据。
对于 details 表,你应该在 sheetNo 和 product_id 字段上创建索引,因为这些字段将用于连接和过滤数据。
SQL 查询设计:

为了减少数据库的查询次数,最好的做法是使用一个 SQL 查询来获取所有需要的数据。这样可以利用数据库的优化器和索引来提高查询效率。

以下是一个可能的 SQL 查询示例:


SELECT m.user_id, d.product_id, SUM(d.quantity) AS total_quantity, SUM(d.amount) AS total_amount
FROM master m
JOIN details d ON m.sheetNo = d.sheetNo
WHERE m.user_id = '用户a'
  AND m.purchase_time >= DATE_SUB(NOW(), INTERVAL 90 DAY)
  AND d.product_id = 'x商品的id'
GROUP BY m.user_id, d.product_id;

这个查询会一次性返回用户 a 在过去的 90 天内购买商品 x 的总数量和总金额。

性能考虑:

使用单个 SQL 查询的好处是它可以利用数据库的索引和查询优化器来高效地处理数据。此外,它减少了网络传输的开销,因为所有数据都在一个往返中返回。
在 Java 代码中进行多次查询会增加数据库的负载,因为每次查询都需要建立和断开数据库连接,这可能会导致性能瓶颈。
大厂通常会倾向于使用单个 SQL 查询来获取数据,因为它们通常有大量的数据和复杂的查询需求。他们还会使用数据库的分析工具来监控和优化查询性能。
进一步优化:

如果你的数据量非常大,可能需要考虑使用分区表来进一步提高查询性能。
对于复杂的查询,可以考虑使用数据库的分析工具来查看查询执行计划,并根据需要调整索引或查询逻辑。
总之,使用单个 SQL 查询来获取所需数据通常是最佳实践,因为它可以减少数据库的负载并提高整体性能。在设计索引和查询时,应该考虑到数据的访问模式和查询的复杂性。

回答问题 2024.05.22

powerbuilder datawindow控件导出Excel数据,可不可以不自动覆盖原数据,而是在后面新插入入数据。

答:
🕒下午好,题主!目前:🟢[在线]
有帮助望采纳

在 PowerBuilder 中,DataWindow 控件默认的导出行为是将数据导出到 Excel 文件时覆盖原有的数据。如果你想要在导出数据时不覆盖原有数据,而是在后面新插入数据,你需要编写一些额外的代码来实现这个功能。

以下是一个基本的步骤,用于在导出 DataWindow 数据到 Excel 时,将新数据追加到现有 Excel 文件的末尾:

打开 Excel 文件:
使用 OLEObject 类型的变量来打开 Excel 应用程序和目标文件。

定位到最后一个数据行:
你需要找到 Excel 文件中最后一个数据行的位置,以便在后面插入新数据。

复制 DataWindow 数据到 Excel:
将 DataWindow 中的数据复制到 Excel 文件中,从你定位的最后一个数据行的下一行开始。

保存并关闭 Excel 文件:
在数据复制完成后,保存 Excel 文件并关闭 Excel 应用程序。

下面是一个简单的示例代码,展示了如何在 PowerBuilder 中实现这个功能:

// 声明变量
OLEObject ole_excel
OLEObject ole_workbook

// 创建 Excel 应用程序对象
ole_excel = CREATE OLEObject

// 连接到 Excel 应用程序
IF ole_excel.ConnectToNewObject("Excel.Application") <> 0 THEN
    MessageBox("错误", "无法创建 Excel 应用程序对象")
    RETURN
END IF

// 打开现有的 Excel 文件
ole_workbook = ole_excel.Workbooks.Open("C:\路径\文件名.xlsx")

// 定位到最后一个数据行
long ll_lastrow
ll_lastrow = ole_excel.Cells(ole_excel.Rows.Count, 1).End(ExcelVb.xlUp).Row

// 复制 DataWindow 数据到 Excel
FOR ll_row = 1 TO dw_datawindow.RowCount()
    ole_excel.Cells(ll_lastrow + ll_row, 1).Value = dw_datawindow.GetItemString(ll_row, 1)
    ole_excel.Cells(ll_lastrow + ll_row, 2).Value = dw_datawindow.GetItemNumber(ll_row, 2)
    // 根据需要添加更多列
NEXT

// 保存 Excel 文件
ole_workbook.Save()

// 关闭 Excel 文件
ole_workbook.Close(ExcelVb.True)

// 关闭 Excel 应用程序
ole_excel.Quit()

// 释放对象
DESTROY ole_workbook
DESTROY ole_excel

请注意,这个示例代码是简化的,你需要根据你的 DataWindow 结构和 Excel 文件的实际情况进行调整。此外,确保你的应用程序有权限访问和修改 Excel 文件,并且在使用 OLE 对象时处理可能的异常。

在实际应用中,你可能还需要考虑数据格式、列宽、字体等其他 Excel 格式设置,以及错误处理和用户交互。

回答问题 2024.05.22

如何解决访问网址被屏蔽的情况

答:
🕒下午好,题主!目前:🟢[在线]
有帮助望采纳

当你访问广告资料库并尝试打开某些广告主发布的广告页面时,遇到的各种情况可能由不同的原因引起。以下是对每种情况的解释和可能的原因:

“404”:

这通常表示页面不存在。可能是因为广告主提供的链接指向了一个不存在的页面,或者页面已经被删除或移动。
“403”:

“403 Forbidden”意味着服务器理解了请求,但拒绝执行它。这可能是因为你没有权限访问该页面,或者服务器配置为不允许访问。
“你已被屏蔽”:

这通常意味着你的IP地址、浏览器或设备被广告主或广告平台屏蔽。可能是因为你被识别为机器人、违反了某些规则,或者广告主设置了特定的访问限制。
加载完成后白屏:

这可能是由于多种原因,包括JavaScript错误、CSS问题、浏览器兼容性问题或服务器端问题。如果页面依赖于外部资源(如广告脚本或跟踪代码),这些资源可能无法加载,导致白屏。
由a链接跳转到b链接:

这通常是预期的行为,如果广告链接被设计为重定向到另一个页面(b链接)。然而,如果这种重定向不是预期的,可能是因为广告链接被修改或重定向设置有误。
解决这些问题的方法可能包括:

检查链接是否正确,确保没有拼写错误。
清除浏览器缓存和Cookies,然后重试。
尝试使用不同的浏览器或设备访问链接。
联系广告主或广告平台的技术支持,报告问题并寻求帮助。
如果被屏蔽,可能需要检查是否有违反了广告平台的规则,或者尝试使用VPN或代理服务器来更改IP地址。
在处理这些问题时,确保遵守相关的法律法规和广告平台的政策,不要尝试绕过安全措施或进行不当行为。

回答问题 2024.05.22

有没有兄弟会替换fmod studio的.bank文件内的音效?

答:

🕒下午好,题主!目前:🟢[在线]

有帮助望采纳

要替换或编辑使用 FMOD Studio 创建的 .bank 文件中的音效,你需要遵循以下步骤。请注意,这些步骤可能需要一定的技术知识和对 FMOD Studio 的基本了解。

打开 FMOD Studio:
首先,确保你安装了 FMOD Studio。打开软件,准备导入或编辑音效。

导入原始项目:
如果你有原始的 FMOD Studio 项目文件(通常是 .fspro 文件),导入它。如果没有,你可能需要从原始游戏资源中找到它,或者重新创建一个项目。

加载 Bank 文件:
在 FMOD Studio 中,你可以通过点击 File > Load Bank 来加载 .bank 文件。选择你想要编辑的 .bank 文件。

编辑音效:
一旦 .bank 文件被加载,你可以在 FMOD Studio 中看到所有的音效事件和资源。找到你想要替换的音效,然后进行编辑。你可以替换现有的音效文件,或者调整音效的参数。

导出新的 Bank 文件:
编辑完成后,点击 File > Build 来构建新的 .bank 文件。在构建过程中,你可以选择要包含的音效和事件。确保你选择了正确的输出格式和平台。

替换游戏中的 Bank 文件:
将新生成的 .bank 文件替换游戏目录中相应的文件。确保在替换之前备份原始文件,以防出现问题。

测试:
在游戏中测试新的音效,确保它们按预期工作。

如果你没有原始的 FMOD Studio 项目文件,或者不想通过 FMOD Studio 来编辑音效,你可以尝试使用第三方工具来解包和重新打包 .bank 文件。但是,这些工具可能不会完美地处理所有的音效资源,特别是当文件名相同或相似时,可能会导致覆盖或丢失数据。

在使用第三方工具时,请确保:

备份原始 .bank 文件。
仔细检查解包后的文件,确保没有文件被错误地覆盖或删除。
在重新打包之前,手动更改可能冲突的文件名。

回答问题 2024.05.22

telegram 问题

答:
🕒下午好,题主!目前:🟢[在线]

有帮助望采纳
如果你的 Telegram 账号因为软件未更新或其他原因被强制下线,而你的手机号码已经无法使用,且没有其他设备登录过该账号,那么情况可能会比较复杂。以下是一些可能的解决步骤:

尝试更新软件:首先,确保你的 Telegram 应用程序是最新版本的。如果你的设备支持,尝试更新 Telegram 到最新版本,然后尝试重新登录。

使用旧手机号码:如果可能,尝试重新激活或使用你之前用于注册 Telegram 的旧手机号码。如果你能够访问该号码,你可以接收短信验证码来重新登录。

联系 Telegram 支持:如果你无法使用旧手机号码,你可以尝试联系 Telegram 的官方支持。他们可能会要求你提供一些账号信息来验证你的身份,并帮助你恢复账号。你可以通过 Telegram 的官方网站或应用程序内的帮助部分找到联系方式。

检查是否有备份邮箱:如果你在注册 Telegram 时设置了备份邮箱,尝试使用该邮箱来恢复账号。

查找登录记录:Telegram 通常不会公开用户的登录历史记录,除非有特殊情况。如果你怀疑账号被盗用,你可以联系 Telegram 支持并提供可能的证据,他们可能会帮助你检查账号的登录情况。

强制登录:Telegram 没有提供官方的“强制登录”功能。尝试使用第三方工具或服务来强制登录可能会违反 Telegram 的服务条款,并可能导致你的账号被永久封禁。

创建新账号:如果上述方法都无法解决问题,你可能需要考虑创建一个新的 Telegram 账号。

请注意,任何尝试绕过 Telegram 安全措施的行为都可能违反其服务条款,并可能导致你的账号被封禁。始终建议通过官方渠道解决问题。在处理此类问题时,保持耐心并遵循官方指南是非常重要的。

回答问题 2024.05.22

三.net core 自动化发布到docker (创建一个dotnet工程发布)

echo ---------------开始编译程序...------------------输入名称(建议不要带“+”这类的字符),选择自由风格的类型(红框标注的),点击确定。用于测试,下面选项基本没有选择-配置代码地址。
原创
发布博客 2023.08.15 ·
629 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

二.net core 自动化发布到docker (Jenkins安装之后向导)

Jenkins安装之后向导
原创
发布博客 2023.08.15 ·
857 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

一.net core 自动化发布到docker (Jenkins安装)

centos 安装Jenkins
原创
发布博客 2023.08.15 ·
952 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

dotnet 依赖注入-批量注入Controller,service,Dao

dotnet webapi 批量注入扩展-autofuc
原创
发布博客 2023.08.01 ·
459 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多