- 博客(517)
- 资源 (59)
- 收藏
- 关注
原创 SpringBoot实现二维码登录功能完整指南
本文介绍了一个基于SpringBoot的二维码登录系统实现方案。系统采用分层架构设计,使用SpringBoot作为基础框架,结合WebSocket实现实时通信,Redis存储状态信息,Google ZXing生成二维码。核心业务流程包括二维码生成、状态管理、移动端扫描确认等步骤,通过状态机设计(WAITING→SCANNED→CONFIRMED)确保
2026-02-02 22:34:53
44
原创 设计模式——适配器模式
适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它充当两个不兼容接口之间的桥梁,就像电源适配器转换电压一样。该模式包含目标接口、被适配者和适配器三个核心组件。适配器将被适配者的接口转换为目标接口,使原本不兼容的类能够协同工作。主要优点包括接口兼容、无需修改原有代码和解耦合,但也可能增加系统复杂度和性能开销。适用场景包括使用第三方库、统一不同接口和复用现有类等情况。使用时需权衡利弊,避免过度使用导致不必要的复杂度。
2026-01-31 16:44:25
375
原创 设计模式——迭代器模式
迭代器模式是一种行为型设计模式,它提供统一接口遍历集合对象,同时隐藏内部实现细节。该模式通过定义迭代器接口和可迭代接口,将集合遍历逻辑与集合本身解耦,使得客户端代码无需关心集合的具体实现。迭代器模式的优点包括统一遍历接口、隐藏内部结构、易于扩展集合类型等,适用于需要遍历各种集合的场景。Java集合框架是迭代器模式的典型应用,通过Iterator接口和Iterable接口实现集合的统一遍历。使用建议:当需要统一遍历不同集合或隐藏集合内部结构时采用迭代器模式,简单遍历可直接使用for循环。
2026-01-31 16:43:29
405
原创 设计模式——责任链模式
责任链模式是一种行为型设计模式,它将请求沿着处理者链传递,直到找到能处理该请求的对象。它解决了传统if-else代码臃肿、难以扩展的问题,实现发送者与接收者解耦。典型应用场景包括审批流程、异常处理和事件处理等。该模式通过动态组合处理者链,使系统更灵活可扩展。示例展示了请假审批流程中,不同层级的处理者如何按职责范围依次处理请求。
2026-01-30 10:00:10
547
原创 点播系统springboot直出和nginx代理两种实现方案对比
本文整理了两个视频点播系统实现方案。方案一使用Spring Boot直接处理MP4文件,手动实现HTTP Range请求,适合内网或低并发场景;方案二通过Nginx静态服务器处理视频文件,内置支持Range请求,具有高并发和扩展性优势,推荐用于正式项目。文章对比了两方案的优缺点,建议根据实际场景选择,并指出方案二更适用于生产环境。还提供了后续扩展方向,如HLS转换、CDN加速等。
2026-01-29 16:23:41
684
原创 设计模式——访问者模式
访问者模式是一种行为型设计模式,它允许在不修改对象结构的情况下定义新操作。该模式通过将操作从对象结构中分离出来,解决了传统方式中违反开闭原则、代码臃肿和难以扩展的问题。典型结构包括Visitor接口、Element接口及其具体实现。示例展示了购物车场景,其中Visitor计算不同类型商品(图书、水果)的总价,而无需修改商品类本身。访问者模式的优势包括符合开闭原则、操作分离、易于扩展和集中管理相关操作,特别适合需要添加新操作但不想修改已有类结构的场景。
2026-01-27 15:12:30
381
原创 设计模式——解释器模式
解释器模式是一种行为型设计模式,用于定义语言的文法并解释其中的句子。它通过抽象表达式(Expression)接口和具体表达式类(终结符和非终结符)构建解析结构,将复杂语法分解为可管理的部分。该模式解决了传统if-else解析方式导致的代码臃肿、难以扩展和维护问题,使语法规则更清晰、扩展更容易。典型应用包括计算器、正则表达式和SQL解析器等场景。示例展示了如何使用该模式解析数学表达式,通过组合不同的表达式类(数字、加减乘)来构建复杂的表达式树并计算结果。
2026-01-26 10:01:08
414
原创 设计模式——观察者模式
*** 观察者接口/*** 更新* @param message 消息/*** 主题接口*//*** 添加观察者*//*** 移除观察者*//*** 通知所有观察者*//*** 具体主题:微信公众号*/@OverrideSystem.out.println(observer + " 订阅了 " + name);@OverrideSystem.out.println(observer + " 取消订阅了 " + name);
2026-01-26 09:57:11
419
原创 设计模式——装饰器模式
装饰器模式是一种动态扩展对象功能的设计模式,通过组合而非继承的方式为对象添加新功能。它解决了传统继承方式导致的类爆炸问题,使功能扩展更加灵活。装饰器模式包含组件接口、具体组件、装饰器基类和具体装饰器四个部分。以咖啡为例,基础咖啡可以动态添加牛奶、糖、奶油等装饰,每种装饰都会增加相应费用并修改描述,而无需创建大量子类。这种模式特别适合需要动态、灵活地组合功能的场景。
2026-01-25 16:36:50
437
原创 设计模式——组合模式
组合模式是一种结构型设计模式,用于将对象组织成树形结构,以表示"部分-整体"的层次关系。该模式允许客户端统一处理单个对象和组合对象,简化代码并提高扩展性。 核心特点: 统一接口:所有对象(叶子和组合)实现相同接口 递归组合:组合对象可以包含其他组合对象 透明性:客户端无需区分叶子与组合对象 典型应用: 文件系统(文件/文件夹) 组织架构(员工/部门) 图形界面(组件/容器) 优势:简化客户端代码、便于添加新组件类型、清晰表示层次结构 局限:设计较复杂、可能限制组件类型
2026-01-25 16:36:09
355
原创 设计模式——策略模式
策略模式是一种行为设计模式,允许定义可互换的算法族并封装每个算法。它通过将算法与使用它的上下文分离,解决了传统if-else结构导致的代码臃肿和难以扩展问题。该模式包含策略接口、具体策略实现和上下文类三部分,支持运行时动态切换算法。典型应用场景包括出行方式选择、支付方式和排序算法等。优点是提高代码可维护性和扩展性,缺点是可能增加类数量。策略模式适用于需要灵活切换算法的场景,但需注意避免过度使用导致系统复杂化。
2026-01-23 15:23:34
375
原创 设计模式——状态模式
状态模式是一种行为型设计模式,允许对象在不同状态下改变其行为。它通过将每个状态封装为独立类来避免大量if-else判断,使代码更清晰、易扩展。典型结构包括状态接口、具体状态类和上下文类。该模式适用于订单系统、游戏角色状态管理等场景,能有效分离状态逻辑,但会增加类数量。与策略模式不同,状态模式强调状态间的转换关系。使用时应权衡复杂度,对简单状态可直接使用条件判断。
2026-01-23 15:22:52
598
原创 设计模式——模板方法模式
模板方法模式是一种行为型设计模式,通过在父类中定义算法框架,将具体步骤的实现延迟到子类中。该模式解决了传统方式中代码重复、维护困难等问题,提供了代码复用、一致性保证和易于扩展等优势。典型应用场景包括做菜流程、Servlet生命周期、JDBC操作等。示例代码展示了抽象类定义模板方法、具体类实现细节的结构,并演示了如何通过继承实现不同菜品的制作流程。该模式适合需要固定流程但允许细节变化的场景,但需要注意继承带来的限制。
2026-01-22 16:51:41
336
原创 设计模式——桥接模式
摘要:桥接模式是一种解耦抽象与实现的结构型设计模式,使两者能独立变化。它通过组合代替继承,避免了类爆炸问题,如形状与颜色的组合只需分别定义而不需创建所有组合类。该模式包含抽象、扩展抽象、实现接口和具体实现四个角色,优势包括解耦合、独立变化和扩展容易,适用于多维度系统。典型应用场景包括UI框架、数据库驱动等。使用时需权衡复杂度,仅在多维度场景下采用。
2026-01-22 16:50:02
341
原创 设计模式——抽象工厂模式
抽象工厂模式摘要 抽象工厂模式是一种创建型设计模式,用于创建相关对象族而不指定具体类。它通过提供一个接口来创建多个相互关联的产品对象,确保产品族的兼容性。与工厂方法模式只能创建单一产品不同,抽象工厂模式能创建一组相关产品(如现代风格家具或古典风格家具)。其优势包括:保证产品族一致性、降低客户端与具体类的耦合、便于扩展新产品族。模式结构包含抽象工厂、具体工厂、抽象产品和具体产品四个主要部分,通过工厂生产者来获取合适的工厂实例。典型应用场景是需要创建一组相互关联的产品对象时。
2026-01-21 11:09:31
969
原创 设计模式——建造者模式
建造者模式是一种创建型设计模式,它将复杂对象的构建过程分解为多个步骤,允许灵活组合不同配置。该模式解决了传统构造方法参数过多、顺序依赖等问题,提高了代码可读性和可维护性。通过定义产品类、Builder类和可选指挥者类,建造者模式实现了构建与表示的分离,使相同构建过程能创建不同对象。示例展示了如何用建造者模式配置不同电脑(如办公电脑和游戏电脑),通过链式调用方法设置可选参数,最终生成所需对象。这种模式特别适用于创建具有多个可选参数或配置变体的复杂对象。
2026-01-20 15:32:05
294
原创 设计模式——工厂方法模式
工厂方法模式是一种创建型设计模式,通过定义创建对象的接口,让子类决定实例化哪个类。它解决了传统new创建方式导致的耦合问题,使对象创建逻辑集中管理,易于扩展。模式包含抽象产品、具体产品、抽象工厂和具体工厂四个角色。示例展示了日志记录器的实现:定义Logger接口和多种具体记录器(Console/File/Database),通过对应的工厂类创建实例。客户端只需与抽象工厂交互,无需关心具体实现类,实现了解耦和灵活扩展。
2026-01-20 14:54:40
1369
原创 设计模式——外观模式
外观模式是一种结构型设计模式,为复杂子系统提供简化接口。它通过定义高层接口(Facade类)来封装多个子系统的交互,降低客户端与子系统的耦合度。外观模式的优势包括简化接口、解耦合和易于使用,常见于API封装、数据库访问等场景。代码示例展示了如何通过外观类统一调用多个子系统的方法,使客户端只需与外观类交互。虽然外观模式能简化系统使用,但需注意不要过度使用而增加不必要的复杂度,且外观类不应包含业务逻辑。适用场景包括复杂系统简化、分层设计等需求。
2026-01-19 22:55:51
428
原创 设计模式——备忘录模式
摘要:备忘录模式是一种行为型设计模式,允许在不破坏封装的前提下保存和恢复对象状态。它通过三个核心角色实现:Originator(发起人)负责创建和恢复状态,Memento(备忘录)存储状态,Caretaker(管理者)管理备忘录。该模式适用于需要撤销操作、保存历史状态的场景,如游戏存档、文档撤销和版本控制。优势在于保持封装性、支持撤销功能,但需注意内存消耗问题。实际应用中可与命令模式结合,实现更完整的撤销功能。
2026-01-19 22:55:14
542
原创 设计模式——命令模式
命令模式是一种行为型设计模式,将请求封装为对象,使请求可参数化、排队、记录和撤销。它通过解耦调用者与接收者(如遥控器与电器),提供灵活的操作控制。核心组件包括命令接口、具体命令、调用者和接收者。优势在于支持撤销/重做、操作记录和请求排队,适用于GUI操作、宏命令和事务处理等场景。但需注意类数量增加带来的复杂度,避免过度使用。典型实现如灯光控制示例所示,通过命令对象封装操作,实现灵活控制。
2026-01-19 09:51:15
299
原创 设计模式——原型模式
原型模式摘要 原型模式是一种通过复制现有对象来创建新对象的设计模式,避免了重复初始化对象的开销。它包含原型接口(定义克隆方法)和具体原型(实现克隆逻辑)。实现时需注意浅拷贝(只复制引用)和深拷贝(复制引用对象)的区别:浅拷贝可能导致对象共享问题,而深拷贝能确保对象完全独立。该模式适用于创建成本高或需要动态配置的对象场景,能有效提高性能并简化对象创建过程。
2026-01-19 09:50:40
837
原创 设计模式——单例模式
单例模式确保类只有一个实例并提供全局访问点,常用于资源管理场景如数据库连接池、配置管理等。核心实现要点包括私有构造方法、私有静态实例和公共访问方法。推荐使用静态内部类实现方式,它具备线程安全、延迟加载和代码简洁等优点。其他常见实现有饿汉式、懒汉式和双重检查锁。该模式适用于需要全局唯一对象、资源密集或频繁访问的场景,能有效节省资源并保证数据一致性。
2026-01-17 22:53:32
525
原创 设计模式——代理模式
代理模式摘要 代理模式是一种结构型设计模式,通过创建代理对象来控制对目标对象的访问。它类似于生活中的经纪人、中介等角色,在客户端和目标对象之间充当中间人。代理模式的主要优势包括:控制访问权限、增强功能(如添加日志或缓存)、延迟加载资源等。常见代理类型有远程代理、虚拟代理和保护代理。虽然会增加系统复杂度,但代理模式在RPC调用、AOP编程、权限控制等场景中非常实用。使用时需权衡利弊,避免过度设计增加不必要的复杂性。
2026-01-17 22:48:58
359
原创 设计模式——享元模式
享元模式是一种结构型设计模式,通过共享相似对象来减少内存使用。它将对象状态分为内部状态(可共享)和外部状态(不可共享),通过享元工厂管理共享对象。典型应用包括游戏开发(共享角色/道具)、文字处理(共享字符)等。该模式能显著减少内存占用(如示例中10000棵树仅需少量对象),但会增加系统复杂度。适用场景为需要创建大量相似对象且内存敏感的情况,使用时需注意线程安全和状态分离问题。
2026-01-17 22:48:06
414
原创 设计模式——中介者模式
摘要:中介者模式是一种行为型设计模式,通过引入中介者对象来协调多个对象间的交互,降低耦合度。该模式适用于对象间交互复杂、耦合度高的场景,如聊天室、GUI组件通信等。主要优势包括解耦合、集中管理和易于扩展,但需注意中介者可能变得过于复杂。实现时需定义中介者接口、同事接口,并通过具体中介者(如聊天室)来协调具体同事(如用户)之间的通信。
2026-01-17 22:46:28
503
原创 vue-office使用指南
Vue-Office 是一个 Vue.js 文档预览库,支持 Word、Excel、PPT 和 PDF 文件在线预览。本文介绍了其安装方法(npm 安装对应格式包)和基础使用方式,包括四种文档类型的组件调用示例。还提供了一个完整的文档预览组件实现,支持文件上传、类型判断和多格式预览功能,包含文件选择处理、渲染回调、错误处理等逻辑。组件采用 Element UI 样式,具有用户友好的界面交互设计。
2025-12-27 21:54:38
1433
1
原创 sentinel使用之限流-熔断
本文详细介绍了Spring Boot项目整合Sentinel的配置步骤。首先明确环境要求:JDK 8/11、Spring Boot 2.3.x~2.7.x、Spring Cloud Alibaba 2.2.10.RELEASE。接着指导下载并启动Sentinel控制台,包括自定义端口和账号密码设置。重点展示了完整的POM文件配置,包含Spring Boot Web、Sentinel核心依赖、Lombok等必要组件,并通过dependencyManagement统一管理版本。最后提供了项目构建和打包的相关插件
2025-12-11 15:48:31
172
原创 @JsonView 在 Spring Boot 中的实战指南(附完整 Demo + 多接口复用场景)
摘要:本文介绍了Spring Boot中使用@JsonView注解实现动态字段控制的实战方案。通过定义视图接口(如BaseView、PhoneView)绑定实体类字段,可在不同接口(A/B接口复用手机号字段)中灵活控制JSON返回内容,避免创建冗余DTO类。文章包含完整Demo演示,展示如何通过视图继承实现字段复用,解决多场景下同一实体类的差异化序列化需求,同时确保敏感数据安全。
2025-11-24 18:43:56
168
原创 docker启动rockermq
RocketMQ是一个高性能、高可靠的分布式消息中间件,支持异步处理、系统解耦、流量削峰等应用场景。其核心特性包括高性能、高可靠性、高可用性、灵活扩展性和丰富的消息类型。核心组件包括Name Server(路由管理)、Broker(消息存储转发)、Topic(消息分类)和Message Queue(物理存储单元)。部署方式支持单机、集群和云环境,可通过Docker快速启动NameServer、Broker和可视化控制台,提供两种启动方案:单独运行容器或使用docker-compose编排。配置文件broke
2025-11-18 17:26:24
368
原创 告别 mysqldump 痛点!用 mydumper 实现 MySQL 高效备份与恢复
本文介绍了使用 mydumper 替代 mysqldump 实现高效 MySQL 备份与恢复的方法。通过对比两者的核心特性,mydumper 在多线程备份、压缩支持、大表处理等方面优势明显。文章详细讲解了 Docker 部署 mydumper 环境的步骤,并提供了全库备份、指定表备份以及数据恢复的实战操作指南,包括参数说明和注意事项。mydumper 特别适用于中大型数据库场景,能显著提升备份效率并减少对业务的影响。
2025-11-08 19:01:24
1198
1
原创 Rabbitmq扇形队列取消绑定交换机之后任然接收消息问题
文章摘要: 该文档描述了RabbitMQ扇形交换机使用过程中遇到的一个问题:当取消队列与交换机的绑定关系后,队列仍然能接收到消息。作者首先展示了正常工作的配置代码,包含三个队列(A1、B1、C1)绑定到扇形交换机。测试时发送的消息能被三个队列正常消费。随后为了业务调整,作者注释掉了A1队列的声明和绑定代码,但发现A1队列依然能接收到消息。这个问题表明在RabbitMQ中,仅从代码层面取消绑定关系可能无法真正从服务器端移除绑定,需要进一步检查服务器状态或执行显式的解绑操作。
2025-10-29 18:34:43
310
原创 不提交也不释放的事务,数据库连接还有可能被复用
本文展示了Spring事务管理下数据库连接池的使用情况。通过HikariCP配置最大连接数为2,在调用事务接口和非事务接口时,观察到连接复用现象:事务接口aa()使用未提交的连接(autoCommit=false),而非事务接口mu()复用已提交的连接(autoCommit=true)。当连接池耗尽时,mu()会复用aa()的事务连接,导致autoCommit状态不一致。测试结果证实了连接池中连接对象(ConnectionImpl)被不同代理(HikariProxyConnection)复用的机制。
2025-10-25 23:32:49
61
原创 微信公众号对接 Spring Boot 服务:实现验证码自动回复功能
本文介绍了如何通过Spring Boot对接微信公众号,实现用户发送“验证码”关键词后自动回复随机验证码的功能。主要内容包括:1)公众号配置(获取AppID、配置服务器回调地址);2)Spring Boot项目搭建(使用OkHttp3调用微信接口);3)核心功能开发(GET接口验证请求、POST接口处理用户消息并生成验证码);4)测试验证流程。该方案适用于用户注册、身份验证等场景,个人订阅号即可实现。
2025-10-25 23:25:07
108
原创 SpringCloud 整合 Zipkin链路追踪
本文介绍了分布式链路追踪工具Zipkin的安装与使用。Zipkin是Twitter开源的分布式跟踪系统,用于收集和展示微服务调用链数据。文章首先概述了Zipkin的作用,然后详细讲解了通过Docker安装Zipkin的方法,包括直接运行镜像和使用docker-compose部署。特别提供了支持MySQL持久化存储的配置方案,并附上了Zipkin所需的MySQL数据库表结构脚本。最后提到SpringCloud整合Zipkin的方法,实现分布式系统的链路追踪功能。全文涵盖了从安装部署到数据持久化的完整流程。
2025-10-24 11:01:11
78
原创 不提交也不释放的事务,数据库连接还有可能被复用
摘要 实验发现Spring事务管理下,未提交事务的数据库连接池连接仍可被复用,这与传统认知相悖。通过配置HikariCP连接池(最大2连接)并设计测试接口,观察到未提交事务的连接会被后续请求复用。这可能导致GTID错误(当MySQL开启GTID且混用事务/非事务表时)以及数据修改丢失问题。研究揭示了Spring事务管理机制与连接池交互的特殊行为,对高并发系统设计具有重要启示。
2025-09-28 17:18:21
93
原创 MySQL GTID一致性错误全解析:从连接池复用到完美解决方案
MySQL GTID一致性错误解析与解决方案 摘要:在微服务架构中,MySQL GTID一致性错误常表现为"一个接口修改导致另一接口报错"的连锁反应。核心问题在于:1)同一事务中混合操作事务型(InnoDB)和非事务型(MyISAM)表;2)连接池污染导致事务状态残留。根本原因是GTID强制校验机制下,非事务表操作会隐式提交"微型事务",与事务型操作冲突。解决方案包括:严格分离不同引擎表操作、确保事务完整提交/回滚、检查GTID参数配置(gtid_mode/enfor
2025-09-28 11:27:27
121
原创 什么是GTID,它有什么作用?
摘要:GTID(全局事务标识符)是MySQL 5.6+引入的特性,由"服务器UUID+事务序号"组成,确保事务在分布式环境中全局唯一可追溯。其核心作用包括:1)简化主从复制故障恢复和新从库搭建,自动定位复制起点;2)避免事务重复执行,保证数据一致性;3)实现事务级追踪监控,快速定位数据不一致问题。不过,GTID要求事务具备原子性,不支持混合引擎操作(如MyISAM和InnoDB混用),否则会触发严格模式报错。GTID通过强制全局一致性机制,显著提升了主从复制的可靠性和运维效率。(149字
2025-09-28 10:06:02
179
原创 mysql默认事务隔离级别下并发读不到最新数据解决方案
从MySQL 5.5开始,InnoDB取代MyISAM成为默认存储引擎,支持事务、行级锁等特性,更适合高并发场景。文章通过用户更新查询案例,演示了事务隔离级别下数据一致性问题:方法b在事务中读取了方法a更新前的旧值。解决方案包括:1)使用悲观锁for update锁定查询行;2)采用共享锁保证读取最新数据。代码示例展示了如何在Spring Boot中实现这两种锁机制解决并发读写问题。
2025-09-22 17:41:03
269
原创 轻松加载外部Jar,实现SpringBoot功能灵活扩展
本文介绍了在SpringBoot项目中动态加载外部Jar包实现功能扩展的方法。针对java -jar启动时-cp参数失效的问题,提出通过配置PropertiesLauncher和loader.path参数来解决。具体步骤包括:修改pom.xml配置ZIP打包方式、执行Maven打包、启动时指定外部Jar路径。该方法支持按环境差异化加载依赖、临时集成第三方SDK等场景,虽然会略微降低启动速度,但显著提升了项目灵活性。需要注意路径格式和类加载优先级问题,适用于功能扩展优先于启动效率的场景。
2025-09-22 15:54:49
256
转载 部署一套完整的 Prometheus+Grafana 智能监控告警系统
本文介绍了开源监控工具Grafana和Prometheus的搭建与应用。Grafana是一个功能强大的数据可视化平台,支持多种数据源和丰富的图表展示方式,并提供警报通知功能。Prometheus作为监控系统,相比Zabbix更加灵活解耦,通过exporter收集数据后由服务端拉取。文章详细讲解了Prometheus的安装配置流程,以及如何添加机器状态监控(node_exporter)。最后介绍了Grafana的安装方法,通过整合Prometheus作为数据源,实现监控数据的可视化展示。整个系统架构清晰:ex
2025-09-17 10:55:17
161
dynamic-datasource-aop-copy
2020-07-09
dynamic-datasource-aop-loop.rar
2020-07-10
sping-boot-shiro-jwt-redis-refreshtoken.zip
2020-08-25
springboot-RedisKeyExpirationListener.zip
2020-05-02
appname.sh
2020-07-18
mybatisplusPage.zip
2019-12-27
微信公众号对接 Spring Boot 服务:实现验证码自动回复功能
2025-10-25
Spring Boot + Flink CDC + MongoDB** 为核心,演示一套 零侵入、低延迟、高扩展的实时数据管道
2025-08-20
ShardingSphere 的 Spring Boot 数据加密与模糊查询实现
2025-08-06
shardingsphere-jdbc整合springboot实现读写分离
2025-08-05
基于MyBatis-Plus全链路敏感字段加密方案 通过自定义TypeHandler实现数据入库自动加密和查询自动解密和模糊查询
2025-08-01
分布式下,springboot一个注解防重复提交starter
2024-10-16
超卖问题的4种解决方案、秒杀方案
2024-09-10
整合canal监听mysql
2024-05-13
springCloudAlibaba的一个demo,包括注册中心,配置中心,服务熔断降级、链路追踪、seata分布式事务
2021-10-02
oneToMany-OneToOne-search.zip
2020-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅