个人整理面试题

springcloud

  1. 什么是 spring cloud?

spring cloud 是一系列框架的有序集合。它利用 spring boot
的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring
boot 的开发风格做到一键启动和部署。

  1. spring cloud 断路器的作用是什么

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

  1. spring cloud 的核心组件有哪些

Eureka:服务注册于发现。 Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。 Zuul:网关管理,由 Zuul
网关转发请求给对应的服务。

  1. SpringCloud和Dubbo

SpringCloud和Dubbo都是现在主流的微服务架构 SpringCloud是Apache旗下的Spring体系下的微服务解决方案
Dubbo是阿里系的分布式服务治理框架
从技术维度上,其实SpringCloud远远的超过Dubbo,Dubbo本身只是实现了服务治理,而SpringCloud现在以及有21个子项目以后还会更多
所以其实很多人都会说Dubbo和SpringCloud是不公平的
但是由于RPC以及注册中心元数据等原因,在技术选型的时候我们只能二者选其一,所以我们常常为用他俩来对比
服务的调用方式Dubbo使用的是RPC远程调用,而SpringCloud使用的是 Rest API,其实更符合微服务官方的定义
服务的注册中心来看,Dubbo使用了第三方的ZooKeeper作为其底层的注册中心,实现服务的注册和发现,SpringCloud使用Spring
Cloud Netflix Eureka实现注册中心,当然SpringCloud也可以使用ZooKeeper实现,但一般我们不会这样做
服务网关,Dubbo并没有本身的实现,只能通过其他第三方技术的整合,而SpringCloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,SpringCloud还支持断路器,与git完美集成分布式配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素
从技术选型上讲~
目前国内的分布式系统选型主要还是Dubbo毕竟国产,而且国内工程师的技术熟练程度高,并且Dubbo在其他维度上的缺陷可以由其他第三方框架进行集成进行弥补
而SpringCloud目前是国外比较流行,当然我觉得国内的市场也会慢慢的偏向SpringCloud,就连刘军作为Dubbo重启的负责人也发表过观点,Dubbo的发展方向是积极适应SpringCloud生态,并不是起冲突
Rest和RPC对比 其实如果仔细阅读过微服务提出者马丁福勒的论文的话可以发现其定义的服务间通信机制就是Http Rest
RPC最主要的缺陷就是服务提供方和调用方式之间依赖太强,我们需要为每一个微服务进行接口的定义,并通过持续继承发布,需要严格的版本控制才不会出现服务提供和调用之间因为版本不同而产生的冲突
而REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只是通过一个约定进行规范,但也有可能出现文档和接口不一致而导致的服务集成问题,但可以通过swagger工具整合,是代码和文档一体化解决,所以REST在分布式环境下比RPC更加灵活
这也是为什么当当网的DubboX在对Dubbo的增强中增加了对REST的支持的原因 文档质量和社区活跃度
SpringCloud社区活跃度远高于Dubbo,毕竟由于梁飞团队的原因导致Dubbo停止更新迭代五年,而中小型公司无法承担技术开发的成本导致Dubbo社区严重低落,而SpringCloud异军突起,迅速占领了微服务的市场,背靠Spring混的风生水起
Dubbo经过多年的积累文档相当成熟,对于微服务的架构体系各个公司也有稳定的现状

  1. SpringBoot和SpringCloud

SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案,旨在快速搭建单个微服务
而SpringCloud专注于解决各个微服务之间的协调与配置,服务之间的通信,熔断,负载均衡等
技术维度并相同,并且SpringCloud是依赖于SpringBoot的,而SpringBoot并不是依赖与SpringCloud,甚至还可以和Dubbo进行优秀的整合开发

总结:

SpringBoot专注于快速方便的开发单个个体的微服务

SpringCloud是关注全局的微服务协调整理治理框架,整合并管理各个微服务,为各个微服务之间提供,配置管理,服务发现,断路器,路由,事件总线等集成服务

SpringBoot不依赖于SpringCloud,SpringCloud依赖于SpringBoot,属于依赖关系

SpringBoot专注于快速,方便的开发单个的微服务个体,SpringCloud关注全局的服务治理框架

  1. 微服务之间是如何独立通讯的
    1.远程过程调用(Remote Procedure Invocation):

    也就是我们常说的服务的注册与发现
    
    直接通过远程过程调用来访问别的service。
    
    优点:
    
    简单,常见,因为没有中间件代理,系统更简单
    
    缺点:
    
    只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
    
    降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
    

2.消息:

   使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。

   优点:

   把客户端和服务端解耦,更松耦合

   提高可用性,因为消息中间件缓存了消息,直到消费者可以消费

   支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应

   缺点:

   消息中间件有额外的复杂
  1. 负载均衡的意义是什么?

在计算中,负载均衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载均衡旨在优化资源使用,最大吞吐量,最小响应时间并避免任何单一资源的过载。使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务进程。

  1. springcloud如何实现服务的注册?

1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)
2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用ribbon或feign进行服务直接的调用发现。

  1. 什么是服务熔断?什么是服务降级

在复杂的分布式系统中,微服务之间的相互调用,有可能出现各种各样的原因导致服务的阻塞,在高并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不可用,服务器的线程全部阻塞,导致服务器崩溃,由于服务之间的调用关系是同步的,会对整个微服务系统造成服务雪崩

为了解决某个微服务的调用响应时间过长或者不可用进而占用越来越多的系统资源引起雪崩效应就需要进行服务熔断和服务降级处理。

所谓的服务熔断指的是某个服务故障或异常一起类似显示世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,而不是一直等到此服务超时。

服务熔断就是相当于我们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,通过维护一个自己的线程池,当线程达到阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值

  1. 微服务的优缺点分别是什么?说下你在项目开发中碰到的坑

优点

每一个服务足够内聚,代码容易理解

开发效率提高,一个服务只做一件事

微服务能够被小团队单独开发

微服务是松耦合的,是有功能意义的服务

可以用不同的语言开发,面向接口编程

易于与第三方集成

微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界面组合

    开发中,两种开发模式
             前后端分离
             全栈工程师

可以灵活搭配,连接公共库/连接独立库

缺点

分布式系统的负责性

多服务运维难度,随着服务的增加,运维的压力也在增大

系统部署依赖

服务间通信成本

数据一致性

系统集成测试

性能监控

  1. 你所知道的微服务技术栈?

维度(springcloud) 服务开发:springboot spring springmvc
服务配置与管理:Netfix公司的Archaiusm ,阿里的Diamond 服务注册与发现:Eureka,Zookeeper
服务调用:Rest RPC gRpc 服务熔断器:Hystrix 服务负载均衡:Ribbon Nginx 服务接口调用:Fegin
消息队列:Kafka Rabbitmq activemq 服务配置中心管理:SpringCloudConfig
服务路由(API网关)Zuul 事件消息总线:SpringCloud Bus

  1. Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别

1.ZooKeeper保证的是CP,Eureka保证的是AP

ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的

Eureka各个节点是平等关系,只要有一台Eureka就可以保证服务可用,而查询到的数据并不是最新的

自我保护机制会导致

Eureka不再从注册列表移除因长时间没收到心跳而应该过期的服务

Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点(高可用)

当网络稳定时,当前实例新的注册信息会被同步到其他节点中(最终一致性)

Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper一样使得整个注册系统瘫痪

2.ZooKeeper有Leader和Follower角色,Eureka各个节点平等

3.ZooKeeper采用过半数存活原则,Eureka采用自我保护机制解决分区问题

4.Eureka本质上是一个工程,而ZooKeeper只是一个进程

  1. eureka自我保护机制是什么?

当Eureka Server
节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。

  1. 什么是Ribbon?

ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。feign默认集成了ribbon。

  1. 什么是feigin?它的优点是什么?

1.feign采用的是基于接口的注解
2.feign整合了ribbon,具有负载均衡的能力
3.整合了Hystrix,具有熔断的能力

使用:
1.添加pom依赖。
2.启动类添加@EnableFeignClients
3.定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务

  1. Ribbon和Feign的区别?

1.Ribbon都是调用其他服务的,但方式不同。
2.启动类注解不同,Ribbon是@RibbonClient feign的是@EnableFeignClients
3.服务指定的位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
4.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign需要将调用的方法定义成抽象方法即可。

  1. 什么是Spring Cloud Bus?

spring cloud bus 将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控。
如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置文件。 使用:
1.添加依赖
2.配置rabbimq

  1. 什么是Hystrix?

防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard) 服务降级: 双十一 提示 哎哟喂,被挤爆了。
app秒杀 网络开小差了,请稍后再试。 优先核心服务,非核心服务不可用或弱可用。通过HystrixCommand注解指定。
fallbackMethod(回退函数)中具体实现降级逻辑。

  1. springcloud断路器作用?

当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应
当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应) 断路器有完全打开状态:一段时间内 达到一定的次数无法调用
并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务 半开:短时间内 有恢复迹象
断路器会将部分请求发给该服务,正常调用时 断路器关闭 关闭:当服务一直处于正常状态 能正常调用

  1. 什么是SpringCloudConfig?

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring
Cloud中,有分布式配置中心组件spring cloud config
,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config
组件中,分两个角色,一是config server,二是config client。

使用: 1、添加pom依赖 2、配置文件添加相关配置 3、启动类添加注解@EnableConfigServer

springboot

1.什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式处理方案,主要是简化了使用 Spring
的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

2.为什么要用 Spring Boot?

Spring Boot 优点非常多,如: 独立运行 简化配置 自动配置 无代码生成和XML配置 应用监控 上手容易 Spring Boot
集这么多优点于一身,还有理由不使用它呢?

3.Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。 application
配置文件这个容易了解,主要用于 Spring Boot 项目的自动化配置。 bootstrap 配置文件有以下几个应用场景。 使用
Spring Cloud Config 配置中心时,这时需要在 bootstrap
配置文件中增加连接到配置中心的配置属性来加载外部配置中心的配置信息; 少量固定的不能被覆盖的属性; 少量加密/解密的场景;

4.Spring Boot 的配置文件有哪几种格式?它们有什么区别?

.properties 和 .yml,它们的区别主要是书写格式不同。 1).properties 2).yml 另外,.yml
格式不支持@PropertySource注解导入配置。

5.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude
= { DataSourceAutoConfiguration.class })。 @ComponentScan:Spring组件扫描。

6.开启 Spring Boot 特性有哪几种方式?

1继承spring-boot-starter-parent项目
2导入spring-boot-dependencies项目依赖

7.Spring Boot 需要独立的容器运行吗?

可以不需要,内置了 Tomcat/ Jetty 等容器。

8.运行 Spring Boot 有哪几种方式?

1打包用命令或者者放到容器中运行
2用 Maven/ Gradle 插件运行
3直接执行 main 方法运行

9.Spring Boot 自动配置原理是什么?

注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass
就是自动配置的核心,首先它得是一个配置文件,其次根据类路径下能否有这个类去自动配置。

11.你如何了解 Spring Boot 中的 Starters?

Starters可以了解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring
及其余技术,而不需要四处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只需加入
spring-boot-starter-data-jpa 启动器依赖就能使用了。
Starters包含了许多项目中需要用到的依赖,它们能快速持续的运行,都是一系列得到支持的管理传递性依赖。

12.如何在 Spring Boot 启动的时候运行少量特定的代码?

可以实现接口 ApplicationRunner 或者者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个
run 方法,

13.Spring Boot 有哪几种读取配置的方式?

Spring Boot 可以通过 @PropertySource,@Value,@Environment,
@ConfigurationProperties 来绑定变量,

14.Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

Spring Boot 支持 Java Util Logging, Log4j2, Lockback 作为日志框架,假如你使用
Starters 启动器,Spring Boot 将使用 Logback 作为默认日志框架,

15.SpringBoot 实现热部署有哪几种方式?

主要有两种方式: Spring Loaded Spring-boot-devtools Spring-boot-devtools?

16.你如何了解 Spring Boot 配置加载顺序?

在 Spring Boot 里面,可以使用以下几种方式来加载配置。
1properties文件;
2YAML文件;
3系统环境变量;
4命令行参数; 等等……

18.Spring Boot 可以兼容老 Spring 项目吗,如何做?

可以兼容,使用@ImportResource注解导入老 Spring 项目配置文件。

19.保护 Spring Boot 应用有哪些方法?

在生产中使用HTTPS 使用Snyk检查你的依赖关系 更新到最新版本 启用CSRF保护 使用内容安全策略防止XSS攻击

redis

1.Redis支持哪几种数据类型?

String、List、Set、Sorted Set、hashes

2.Redis主要消耗什么物理资源?

redis是一种基于内存高性能的数据库— 主要依赖于内存内存。

3.Redis的全称是什么?

Remote Dictionary Server

4.Redis有哪几种数据淘汰策略

  1. noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但DEL和几个例外)
    2.allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
    3.volatile-lru:尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
    4.allkeys-random:回收随机的键使得新添加的数据有空间存放。
    5.volatile-random:回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
    6.volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。

8.一个字符串类型的值能存储最大容量是多少?

512M

9.MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

10.Redis回收使用的是什么算法?

**LRU算法

Java基础

1.String类可以被继承吗?

不能。String类在声明中使用final关键字修饰符。使用final关键字修饰的类无法被继承。

Java语言的开发者为什么要将String类定义为final类呢?

•因为当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多的堆空间,因为不懂的字符串变量都指向池中的同一个字符串。如果字符串是可变的,那么字符串的驻留将不可能实现,因为这样的话,

如果变量改变了它的值,那么其他指向这个值的变量也会一起改变。如果字符串是可变的那边会引起很严重的安全问题。

•因为字符串是不可变的,所以是多线程安全的。同一个字符串实例可以可以被多个线程共享。这样便不用因为线程安全问题而使用同步。

•因为字符串是不可变的,所以在它创建的时候HashCode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串中的处理速度要快于其他的键对象。这就是HashMap中的键往往都使用字符串。

2.final修饰符在Java中有什么用?

•final修饰的变量叫做常量,常量必须初始化,初始化后的值不能被修改。

•final修饰的方法不能被重载也不能被重写。

•final修饰的类叫最终类,该类不能被继承。

3.JDK和JRE有什么区别?

JDK:Java Development Kit的简称,Java开发工具包,包含Java开发环境和运行环境。

JRE:Java Runtime Enviroment的简称,Java运行环境,为Java的运行提供了所需的环境。

4.==和equals的区别是什么?

•==对于基本数据类型和引用类型的作用效果是不同,对于基本数据类型比较的值是否相等,对于引用类型比较的应用是否相等。

•equals默认情况先比较的引用是否相等,只是很多类重写了Object类的equals方法,比如String,Integer把equals方法变成了比较的值是否相等,所以一般情况下equals比较的是值是否相等。

5.&和&&的区别?

&和&&在程序中最终的运算结果是一致的,区别在于:

•&运算符是:逻辑与,&不管左边表达式的结果是true还是false,右边的表达式都一定会执行;&运算符还可以使用在二进制位运算上。

•&&运算符是:短路与,&&运算符当左边的表达式结果是false时,右边的表达式不执行,存在短路现象。

6.重载(overload)和重写(override)的区别?

方法的重载和重写都是实现多态的方式,区别在于:

•重载实现的是编译时的多态性;重载发生在一个类中,同名的方法如果有不同的参数列表(参数个数,参数类型,顺序不同)则视为重载。

•重载实现的是运行时的多态性;重写发生在子类与父类之间,重写要求子类重写父类的方法后与父类重写的方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。

方法重写的规则:

•参数列表、方法名、返回值类型必须完全一致;

•构造方法不能被重写;

•声明为 final 的方法不能被重写;

•声明为 static 的方法不存在重写(重写和多态联合才有意义);

•访问权限不能比父类更低;

•重写之后的方法不能抛出更宽泛的异常;

10.阐述静态变量和实例变量的区别?

不管创建多少个对象,静态变量在内存中有且仅有一个;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。

12.Java 中操作字符串都有哪些类?它们之间有什么区别?

操作字符串的类有:String、StringBuffer、StringBuilder。 String 和
StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String
对象,再将指针指向新的 String 对象,而 StringBuffer 、 StringBuilder
可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。 StringBuffer 和
StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但
StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用
StringBuilder,多线程环境下推荐使用 StringBuffer。

13.抽象类一定要有抽象方法吗?

不需要,抽象类不一定要有抽象方法。

14.Java中IO流分为几种?**

按功能来分:输入流(input),输出流(outpu)。 按类型来分:字节流和字符流。

15.8大基本数据类型及其字节数?

byte: 1字节    
short: 2字节
int: 4字节    
long: 8字节
float: 4字节精确到7位有效数字    
double: 8字节
char: 2字节    
boolean: 1位
引用类型:4字节 ,1个字节表示8位

16.int和Integer的区别?

  1. int是基本数据类型,Integer是int的包装类就是将int类型包装成Object对象;
  2. Integer变量必须实例化后才能使用;int变量不需要;
  3. Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
  4. Integer的默认值是null;int的默认值是0。 深入: 两个通过new生成的Integer变量永远是不相等的。因为new生成的是两个对象,其内存地址不同。 Integer与new
    Integer不会相等。因为非new生成的Integer变量指向的是java常量池中的对象,而new
    Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同。
    两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false。 java在编译Integer i =
    127的时候,被翻译成 Integer i = Integer.valueOf(127); java
    API中对Integer类型的valueOf的定义如下,对于-128到127之间的数,会进行缓存,Integer i =
    127时,会将127这个Integer对象进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。
    Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true。(因为包装类Integer和基本数据类型int比较时,java会自动拆箱为int,然后进行比较,实际上就变为两个int变量的比较)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值