自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入了解 Zuul2:Netflix 的异步非阻塞微服务网关

Zuul2 是 Netflix 开源的高性能微服务网关,凭借其异步非阻塞架构和强大的功能,成为处理大规模并发请求的理想选择。虽然其编程模型相对复杂,但其带来的性能提升和功能扩展使其在许多场景下具有无可比拟的优势。如果你正在寻找一个高性能、可扩展的微服务网关,Zuul2 绝对值得一试。希望本文能帮助你更好地了解 Zuul2。如果你对 Zuul2 有进一步的兴趣,可以参考 Netflix 的官方文档,深入了解其架构和使用方法。

2025-03-01 10:40:24 549

原创 Hystrix 断路器:微服务架构中的弹性保护机制

Hystrix 断路器是微服务架构中不可或缺的弹性保护机制。通过熔断、降级、线程池隔离和实时监控等功能,Hystrix 可以有效防止服务故障的蔓延,提高系统的可靠性和稳定性。合理配置 Hystrix 参数并结合监控工具,可以更好地应对分布式系统中的故障问题。希望这篇博文能帮助你更好地理解和使用 Hystrix 断路器。如果有任何疑问,欢迎留言讨论!

2025-03-01 10:39:30 484

原创 Seata 分布式事务:一站式解决方案指南

Seata 是一个功能强大且易于集成的分布式事务解决方案,能够有效解决微服务架构中的数据一致性问题。通过本文的介绍,你可以快速掌握 Seata 的安装、配置和使用方法。无论是简单的订单系统,还是复杂的业务流程,Seata 都能提供可靠的事务管理支持。

2025-03-01 10:37:08 716

原创 Consul 注册中心使用指南

Consul 是由 HashiCorp 开发的一款开源服务发现与注册工具,广泛应用于微服务架构中。它不仅支持服务发现、健康检查、键值存储,还具备多数据中心支持和图形化管理界面。本文将详细介绍 Consul 的安装、配置以及在微服务架构中的使用方法。

2025-03-01 10:33:58 1030

原创 Sentinel 限流控制及配置指南

Sentinel 是一款功能强大的流量控制和熔断降级工具,特别适合微服务架构中的流量控制和系统保护。通过本文的介绍,你可以快速掌握 Sentinel 的安装、配置和使用方法。无论是通过代码动态配置规则,还是通过控制台进行动态管理,Sentinel 都提供了灵活的解决方案。

2025-03-01 10:32:55 738

原创 Eureka 使用指南

Eureka 是微服务架构中广泛使用的服务注册与发现框架,通过其简单高效的设计,能够有效解决分布式系统中的服务发现问题。尽管 Netflix 已停止维护 Eureka 2.0,但它仍然是许多现有微服务系统的首选方案。如果需要更高性能或更多功能,可以考虑使用 Nacos 或 Consul。希望本文能帮助你更好地理解和使用 Eureka,为你的微服务架构开发提供有力支持。

2025-03-01 10:30:51 565

原创 Nacos 详细介绍:微服务架构中的服务发现与配置管理利器

Nacos 是一个功能强大的服务发现和配置管理平台,特别适合微服务架构。通过本文的介绍,你可以全面了解 Nacos 的核心功能、架构、优势以及如何与 Spring Cloud 集成。无论是服务注册与发现,还是动态配置管理,Nacos 都能为你的微服务架构提供强大的支持。

2025-03-01 10:29:37 648

原创 Eureka 详细介绍

Eureka 是微服务架构中广泛使用的服务注册与发现框架,通过其简单高效的设计,能够有效解决分布式系统中的服务发现问题。尽管 Netflix 已停止维护 Eureka 2.0,但它仍然是许多现有微服务系统的首选方案。如果需要更高性能或更多功能,可以考虑使用 Nacos 或 Consul。

2025-03-01 10:28:51 417

原创 Spring Cloud Gateway 权限认证指南

通过上述步骤,你可以在 Spring Cloud Gateway 中集成 Spring Security 和 JWT,实现集中式的权限认证。主要步骤包括

2025-03-01 10:27:00 371

原创 Spring Cloud Alibaba 使用指南

通过本文,你已经学会了如何使用 Spring Cloud Alibaba 的核心组件,包括 Nacos 和 Sentinel。Spring Cloud Alibaba 提供了强大的工具和组件,帮助开发者快速构建高可用、高性能的微服务系统。希望本文能帮助你快速入门并应用到实际项目中。

2025-03-01 10:26:03 840

原创 Spring Cloud Gateway 详细介绍

Spring Cloud Gateway 是一个功能强大且灵活的 API 网关,它通过路由、过滤和转发等功能,为微服务架构提供了一种简单而有效的方式来管理 API 请求。它不仅支持动态路由、限流、熔断等高级特性,还与 Spring Cloud 生态系统无缝集成,适合中小型微服务项目

2025-03-01 10:24:46 599

原创 Spring Cloud 全家桶详细指南

Spring Cloud 是一个强大的微服务框架,涵盖了服务注册与发现、负载均衡、声明式服务调用、断路器、配置中心、API 网关、分布式事务等多个方面。通过合理使用 Spring Cloud 的组件,可以快速搭建一个高效、可靠的微服务架构。在实际开发中,需要注意性能优化和监控,及时解决常见问题,确保系统的稳定运行。

2025-03-01 10:23:10 714

原创 Spring Cloud Config 配置中心使用指南

Spring Cloud Config 提供了一个集中化的配置管理解决方案,支持多种配置源、动态刷新和多环境配置。通过简单的配置和依赖添加,即可快速搭建配置中心和客户端。它不仅简化了配置管理的复杂性,还提高了系统的灵活性和可维护性。

2025-03-01 10:22:15 470

原创 帮我写一篇介绍基础springboot cloud的博文

Spring Boot Cloud 提供了一套完整的解决方案,用于构建基于微服务架构的应用程序。它整合了多个强大的组件,如服务注册与发现、客户端负载均衡、断路器、配置管理、API 网关等,极大地简化了微服务的开发和管理。通过本文的介绍和示例,相信你已经对 Spring Boot Cloud 有了初步的了解。在实际开发中,可以根据项目的具体需求选择合适的组件进行组合,充分发挥 Spring Boot Cloud 的优势,构建高效、可扩展且健壮的微服务系统。

2025-03-01 10:19:37 517

原创 Hibernate查询性能优化:提升应用效能的实战指南

Hibernate查询性能优化是一个系统工程,需要从查询语句、加载策略、缓存机制、批量操作、数据库配置等多个方面入手。通过合理使用延迟加载、`JOIN FETCH`、二级缓存、分页查询等策略,可以显著提升应用的响应速度和整体性能。

2025-03-01 10:16:38 771

原创 MyBatis增删改查SQL案例实战

本文通过具体的SQL案例,详细介绍了MyBatis的增删改查操作。通过灵活的Mapper接口和XML配置,MyBatis能够实现高效的数据操作,同时支持动态SQL和批量操作,极大地提升了开发效率。希望本文能帮助你更好地掌握MyBatis的核心功能,提升开发能力。

2025-02-28 22:56:05 397

原创 Hibernate与MyBatis性能大比拼:谁才是持久层的王者?

随着技术的不断发展,Hibernate和MyBatis都在不断优化性能和功能。例如,Hibernate正在改进其缓存机制和SQL生成策略,而MyBatis也在不断优化其映射机制。无论选择哪个框架,开发者都需要根据项目需求和技术背景做出合理的选择。

2025-02-28 22:55:26 896

原创 Hibernate 一对多关联查询:实现与优化

Hibernate通过实体类和映射文件的配置,可以方便地实现一对多关联查询。通过合理使用HQL和`fetch`策略,可以优化查询性能,减少数据库访问次数。希望本文能帮助你更好地理解和使用Hibernate的一对多关联查询

2025-02-28 22:50:12 266

原创 MyBatis三级缓存详解与实战应用

MyBatis的三级缓存机制为开发者提供了灵活的缓存策略选择。一级缓存适用于单个`SqlSession`的查询优化;二级缓存适用于同一`Mapper`的多次查询优化;三级缓存则通过集成Redis等工具,实现全局缓存,适用于分布式系统

2025-02-28 22:49:36 734

原创 Hibernate vs MyBatis:新手开发者该如何选择?

Hibernate和MyBatis都是优秀的持久层框架,但它们各有特点。对于新手开发者来说,选择哪个框架取决于你的技术背景和项目需求

2025-02-28 22:49:05 723

原创 Spring Boot:特性全解析与实战应用

Spring Boot 是一个强大的框架,通过自动配置、简化依赖管理和丰富的生产级功能,极大地提升了开发效率。无论是构建简单的 RESTful API,还是复杂的微服务架构,Spring Boot 都是一个值得信赖的选择。

2025-02-28 22:48:17 760

原创 Spring Boot集成Hibernate实现自定义SQL查询

通过Spring Boot集成Hibernate,我们可以方便地执行自定义SQL语句,满足复杂的查询需求。`@Query` 注解提供了强大的灵活性,允许开发者直接编写原生SQL语句,同时保持代码的简洁性和可维护性。

2025-02-28 22:46:33 354

原创 Spring Boot集成MyBatis自定义SQL:灵活高效的数据操作

通过Spring Boot集成MyBatis,可以灵活地使用自定义SQL实现复杂的数据操作。这种方式不仅充分利用了MyBatis的灵活性,还结合了Spring Boot的便捷性,适用于各种复杂业务场景。希望本文能帮助你更好地掌握Spring Boot与MyBatis的集成开发。

2025-02-28 22:45:44 285

原创 Hibernate与MyBatis:如何选择适合你的持久层框架

Hibernate和MyBatis各有优势,选择合适的框架需要根据项目需求和团队技术背景综合考虑。如果项目需要灵活的SQL控制和高性能优化,MyBatis是更好的选择;如果项目更注重快速开发和减少SQL维护工作量,Hibernate则更适合。

2025-02-28 22:45:09 388

原创 Hibernate VS MyBatis:Java持久层框架的深度对比

Hibernate和MyBatis各有优缺点,选择哪个框架取决于项目需求和开发团队的技术背景。如果项目对象模型复杂,需要快速开发,且对SQL的控制要求不高,Hibernate是一个不错的选择。如果项目需要处理复杂查询,对性能要求较高,或者需要对SQL进行精细优化,MyBatis则是更好的选择。

2025-02-28 22:43:09 416

原创 Spring Boot集成Hibernate:高效构建Java应用

通过Spring Boot集成Hibernate,开发者可以快速构建高效、可维护的Java应用。Spring Boot的自动配置与Hibernate的ORM功能相结合,极大地简化了开发流程,同时提供了强大的性能优化支持。无论是小型项目还是大型企业应用,这种组合都能满足开发需求。

2025-02-28 22:42:11 665

原创 Spring Boot集成MyBatis:从零开始快速上手

通过以上步骤,我们成功在Spring Boot项目中集成了MyBatis,并实现了基础的增删改查操作。这种集成方式不仅简化了开发流程,还充分发挥了Spring Boot和MyBatis的优势。希望本文能帮助你快速上手Spring Boot与MyBatis的集成开发!

2025-02-28 22:37:46 519

原创 Hibernate:ORM框架的卓越之选

Hibernate 作为一款优秀的 ORM 框架,为 Java 开发者提供了强大的工具来简化数据库操作、提高开发效率和优化性能。通过使用 Hibernate,开发者可以更加专注于业务逻辑的实现,而无需被繁琐的 SQL 编写和数据库操作细节所困扰。无论是初学者还是经验丰富的开发者,Hibernate 都值得一试。

2025-02-28 22:34:36 446

原创 MyBatis:Java持久层框架的优雅之选

MyBatis作为一款优秀的持久层框架,凭借其灵活的SQL分离机制、强大的动态SQL支持、灵活的结果映射以及高效的缓存机制,成为了Java开发中不可或缺的工具。无论是初学者还是经验丰富的开发人员,深入了解MyBatis的原理和特性,都将有助于提升开发效率和项目质量。

2025-02-28 22:34:06 722

原创 SSH与SSM:Java开发中的两大框架组合

SSH和SSM都是Java Web开发中非常流行的框架组合,它们各自有着独特的架构和应用场景。SSH框架分层清晰,功能强大,适用于复杂的业务逻辑和大型项目;SSM框架开发效率高,灵活性强,适用于中小项目。在实际开发中,开发者可以根据项目的需求和特点选择合适的框架组合,以提高开发效率和保证代码质量。

2025-02-28 22:29:30 744

原创 Spring vs Spring Boot:哪个更适合新手

对于新手来说,Spring Boot 是一个更适合入门的框架。它通过自动配置、简化依赖管理和独立运行的特性,显著降低了学习曲线,让新手能够快速搭建项目并专注于业务逻辑的实现。虽然 Spring 功能强大,但它的学习曲线较高,新手可能需要花费更多时间学习配置和核心概念。

2025-02-27 23:38:46 712

原创 Spring 与 Spring Boot:区别、联系与选择

Spring 和 Spring Boot 都是强大的 Java 开发框架,但它们在设计理念、使用方式和应用场景上存在显著差异。Spring 提供了灵活的配置方式和强大的功能,适合大型企业级应用和复杂业务逻辑;而 Spring Boot 则通过自动配置和简化依赖管理,显著提升了开发效率,适合快速开发、微服务架构和小型项目。

2025-02-27 23:36:32 861

原创 深入解析 JWT:原理、应用与 Spring Security 集成

JWT 是一种高效的无状态认证机制,适用于前后端分离的架构和微服务场景。通过与 Spring Security 集成,可以轻松实现安全的认证和授权。希望本文能帮助你更好地理解和使用 JWT。如果你对 JWT 还有其他问题,欢迎在评论区留言交流!

2025-02-27 23:35:45 674

原创 深入解析 JWT:原理、应用与 Spring Security 集成

JWT 是一种高效的无状态认证机制,适用于前后端分离的架构和微服务场景。通过与 Spring Security 集成,可以轻松实现安全的认证和授权。希望本文能帮助你更好地理解和使用 JWT。如果你对 JWT 还有其他问题,欢迎在评论区留言交流!

2025-02-27 23:33:54 848

原创 Spring Boot 集成 OAuth2:实现安全认证与授权

通过 Spring Security OAuth2,可以轻松实现安全认证和授权,支持单点登录和第三方登录。OAuth2 提供了多种授权方式,适用于不同的应用场景,同时支持令牌刷新和多租户功能,能够满足复杂的安全需求。

2025-02-27 23:31:55 883

原创 深入解析 Spring Security:构建安全的 Spring Boot 应用

Spring Security 是一个功能强大且灵活的安全框架,能够为 Spring Boot 应用提供全面的安全保护。通过简单的配置,我们可以实现用户认证、授权、会话管理和防止常见攻击等功能。同时,Spring Security 也支持高级特性,如自定义用户详情服务、JWT 支持等,以满足复杂的安全需求。

2025-02-27 23:30:39 1106

原创 Spring Boot 集成 Apache Shiro:实现安全认证与授权

通过本文,我们详细介绍了如何在 Spring Boot 项目中集成 Apache Shiro,实现身份验证、授权和动态权限管理。Shiro 提供了强大的安全功能,结合 Spring Boot 的自动配置和依赖管理,可以快速为应用添加安全防护。

2025-02-27 23:28:58 647

原创 深入探索 Spring Boot:从入门到实战

Spring Boot 是一个强大的框架,它通过自动配置、简化依赖管理和强大的生态系统,极大地提升了开发效率。无论是构建简单的 RESTful API,还是复杂的微服务架构,Spring Boot 都是一个值得信赖的选择。

2025-02-27 23:25:17 903

原创 Spring Boot中AOP的多种用途与实践指南

Spring Boot结合AOP提供了强大的功能,可以用于日志记录、性能监控、异常处理、权限校验等多种场景。通过AOP,我们可以将横切关注点从业务逻辑中分离出来,从而提高代码的可维护性和可读性。希望本文能够帮助你在实际开发中更好地利用AOP技术

2025-02-27 23:23:08 414

原创 使用Spring Boot AOP实现接口日志记录

在Spring Boot项目中,日志记录是监控系统运行状态和用户行为的重要手段。通过AOP(面向切面编程),我们可以以非侵入的方式实现日志记录,避免在业务逻辑中混入日志代码,从而提高代码的可维护性和可读性。

2025-02-27 23:21:00 301

DeepSeek指导手册:从入门到精通的人工智能助手应用实例

内容概要:DeepSeek 指导手册详细介绍了从入门到高级应用场景的全过程,包括如何轻松创建账户、使用控制台界面,掌握基础对话技巧以及利用 AI 解决复杂现实任务的方法。通过有效的提问技巧,魔法指令的学习,提高沟通效果。深入浅出地介绍了学术论文、自媒体运营和编程等多个领域的实际应用。最后探讨了如何高效整合个人信息并搭建自动化工作流等进阶技能。 适合人群:对AI工具感兴趣,尤其是希望提升日常工作效率的专业人士,如研究人员、自媒体创作者、程序员等。 使用场景及目标:为初学者和资深用户提供全面指南,旨在让用户掌握 DeepSeek 的基本操作与高级特性,在工作生活中更加熟练地运用 AI 助力个人成长和技术发展。 其他说明:该指导手册采用实战驱动的方式进行教学,每章都配有具体的实例演示,便于用户理解和模仿;同时提供了大量实用的小贴士与避开常见误区的建议,以确保最佳用户体验。手册内容丰富且实用性强,对于想要深入了解和使用 AI 工具的人来说极具价值。

2025-02-25

清华大学《DeepSeek:从入门到精通》-国产开源大模型的深度解析及使用指南

内容概要:本文档出自清华大学新闻与传播学院新媒体研究中心的104页《DeepSeek:从入门到精通》,全面介绍了DeepSeek这款由清华开发、国内领先的AI大模型及相关应用。文档内容包括DeepSeek的基础概念、核心技术如逻辑推理、代码生成、语义分析等功能,以及详细的操作指南。此外,文档还探讨了不同类型模型(推理模型 vs 非推理模型)的应用差异、提示语设计的原则、以及常见的陷阱应对策略等。 适合人群:适合对AI技术和通用大模型有兴趣的研究者和技术爱好者,特别是希望深入了解和实践国产大模型的开发者。 使用场景及目标:①了解和使用DeepSeek的各种应用场景;②学习提示语策略,提高与AI交互的效率和质量;③研究国产大模型与开源技术结合的可能性,探索前沿科技创新。 其他说明:文档强调了通过DeepSeek实现智能对话、文本创作、知识推理等方面的创新应用,同时也提醒读者注意使用过程中的潜在问题和解决方案。

2025-02-25

jdk1.8 Windows版本

jdk1.8 Windows版本

2025-02-15

jdk11 Windows版本

jdk11 jdk11 Windows版本

2025-02-15

Android侧滑菜单按钮

代码量不多,就几句话,适用于初学者。 package com.example.sideslipmenutest; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.view.View.OnClickListener; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.View.OnTouchListener; import android.view.WindowManager; import android.widget.LinearLayout; public class MainActivity extends Activity implements OnTouchListener,OnClickListener{ private int screenWidth; private View content; private View menu; private LinearLayout.LayoutParams menuParams; private int menuPadding = 200; private int leftEdge; private int rightEdge = 0; private float xDown; public static final int SNAP_VELOCITY = 200; //记录手指移动时的横坐标。 private float xMove; //记录手机抬起时的横坐标。 private float xUp; //menu当前是显示还是隐藏。只有完全显示或隐藏menu时才会更改此值,滑动过程中此值无效。 private boolean isMenuVisible; //用于计算手指滑动的速度。 private VelocityTracker mVelocityTracker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); content.setOnTouchListener(this); menu.setOnClickListener(this); } @SuppressWarnings("deprecation") public void init(){ WindowManager window = (WindowManager)getSystemService(Context.WINDOW_SERVICE); screenWidth = window.getDefaultDisplay().getWidth(); content = findViewById(R.id.content); menu = findViewById(R.id.menu); Log.d("+++++++++++",String.valueOf(menu.getId())); Log.d("===========",String.valueOf(content.getId())); menuParams = (LinearLayout.LayoutParams)menu.getLayoutParams(); menuParams.width = screenWidth - menuPadding; leftEdge = -menuParams.width; menuParams.leftMargin = leftEdge; content.getLayoutParams().width = screenWidth; } @Override public boolean onTouch(View view, MotionEvent event) { Log.d("--------------",String.valueOf(view.getId())); createVelocityTracker(event); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 手指按下时,记录按下时的横坐标 xDown = event.getRawX(); break; case MotionEvent.ACTION_MOVE: // 手指移动时,对比按下时的横坐标,计算出移动的距离,来调整menu的leftMargin值,从而显示和隐藏menu xMove = event.getRawX(); int distanceX = (int) (xMove - xDown); if (isMenuVisible) { menuParams.leftMargin = distanceX; } else { menuParams.leftMargin = leftEdge + distanceX; } if (menuParams.leftMargin < leftEdge) { menuParams.leftMargin = leftEdge; } else if (menuParams.leftMargin > rightEdge) { menuParams.leftMargin = rightEdge; } menu.setLayoutParams(menuParams); break; case MotionEvent.ACTION_UP: // 手指抬起时,进行判断当前手势的意图,从而决定是滚动到menu界面,还是滚动到content界面 xUp = event.getRawX(); if (wantToShowMenu()) { if (shouldScrollToMenu()) { scrollToMenu(); } else { scrollToContent(); } } else if (wantToShowContent()) { if (shouldScrollToContent()) { scrollToContent(); } else { scrollToMenu(); } } recycleVelocityTracker(); break; } return true; } private void createVelocityTracker(MotionEvent event) { if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(event); } private int getScrollVelocity() { mVelocityTracker.computeCurrentVelocity(1000); int velocity = (int) mVelocityTracker.getXVelocity(); return Math.abs(velocity); } private void recycleVelocityTracker() { mVelocityTracker.recycle(); mVelocityTracker = null; } class ScrollTask extends AsyncTask<Integer, Integer, Integer> { @Override protected Integer doInBackground(Integer... speed) { int leftMargin = menuParams.leftMargin; // 根据传入的速度来滚动界面,当滚动到达左边界或右边界时,跳出循环。 while (true) { leftMargin = leftMargin + speed[0]; if (leftMargin > rightEdge) { leftMargin = rightEdge; break; } if (leftMargin < leftEdge) { leftMargin = leftEdge; break; } publishProgress(leftMargin); // 为了要有滚动效果产生,每次循环使线程睡眠20毫秒,这样肉眼才能够看到滚动动画。 sleep(20); } if (speed[0] > 0) { isMenuVisible = true; } else { isMenuVisible = false; } return leftMargin; } @Override protected void onProgressUpdate(Integer... leftMargin) { menuParams.leftMargin = leftMargin[0]; menu.setLayoutParams(menuParams); } @Override protected void onPostExecute(Integer leftMargin) { menuParams.leftMargin = leftMargin; menu.setLayoutParams(menuParams); } } private void sleep(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { e.printStackTrace(); } } private boolean wantToShowMenu() { return xUp - xDown > 0 && !isMenuVisible; } private boolean shouldScrollToMenu() { return xUp - xDown > screenWidth / 2 || getScrollVelocity() > SNAP_VELOCITY; } private boolean wantToShowContent() { return xUp - xDown < 0 && isMenuVisible; } private void scrollToMenu() { new ScrollTask().execute(30); } private void scrollToContent() { new ScrollTask().execute(-30); } private boolean shouldScrollToContent() { return xDown - xUp + menuPadding > screenWidth / 2 || getScrollVelocity() > SNAP_VELOCITY; } @Override public void onClick(View v) { if(v.getId() == menu.getId()){ scrollToContent(); } } }

2015-06-25

空空如也

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

TA关注的人

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