Redis面试题以及答案

1. 什么是Redis?它主要用来什么的?

Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。

2.说说Redis的基本数据结构类型

大多数小伙伴都知道,Redis有以下这五种基本类型:

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • zset(有序集合)

它还有三种特殊的数据结构类型

  • Geospatial
  • Hyperloglog
  • Bitmap

list应用场景参考以下:

  • lpush+lpop=Stack(栈)
  • lpush+rpop=Queue(队列)
  • lpsh+ltrim=Capped Collection(有限集合)
  • lpush+brpop=Message Queue(消息队列)

 3、什么是缓存穿透、缓存击穿、缓存雪崩?

在缓存系统的设计和运维中,"缓存击穿"、"缓存穿透"和"缓存雪崩"是三种常见的问题场景,它们各自描述了不同的异常情况,可能导致缓存系统的效率下降甚至崩溃。以下是对这三个概念的解释:

缓存穿透

缓存穿透是指查询一个数据库中不存在的数据,由于缓存不会记录这个不存在的数据,这导致每个此类请求都会穿过缓存并打到数据库上,造成不必要的数据库负载。如果有大量此类请求,数据库可能会遭受极大压力。

防御措施

  • 对查询的参数进行合法性校验,阻止不合法的查询请求。
  • 所查询的空结果也可以缓存起来,设定一个较短的过期时间。
  • 使用布隆过滤器,将所有可能存在的数据的哈希值放到一个足够大的布隆过滤器中,查询时先检查布隆过滤器,如果布隆过滤器说数据不存在,则不再继续查询数据库。

缓存击穿

缓存击穿是指热点数据(大量并发访问的数据)在缓存中失效的时候,导致所有对这个数据的访问都会直接打到数据库上,从而造成数据库压力瞬间增大。缓存击穿和缓存穿透不同,它指的是一个在缓存和数据库中都存在的热点数据。

防御措施

  • 设置热点数据永不过期。
  • 使用互斥锁(Mutex)或者分布式锁。当缓存失效时,不是立马去加载数据库,而是先使用锁机制,保证同一时间只有一个请求去数据库中查询数据并加载到缓存中。
  • 使用双重检测锁模式,在缓存失效的时候,所有的并发线程在访问数据库前,先获取一个锁,第一个访问的线程通过数据库加载数据,其他的线程则等待这个线程查询完毕,直接使用已经加载好的缓存数据。

缓存雪崩

缓存雪崩是指缓存中大量数据在同一时间失效,由于原有请求无法被缓存命中,所有数据都需要从数据库加载,导致数据库压力瞬间增大。这种情况可能由缓存服务器宕机或者缓存大量数据设置了相同的过期时间引起。

防御措施

  • 设置不同的数据缓存时间,使缓存失效的时间点尽量分散。
  • 使用高可用的缓存架构,比如主从复制、缓存集群,保证单点故障不会导致整个缓存服务不可用。
  • 对数据库访问进行限流措施,避免数据库被过多的请求压垮。
  • 为缓存数据设置适当的冗余和备份策略,即使缓存服务宕机也能迅速恢复。

理解这三个问题及其防御措施对于设计和维护一个高效且健壮的缓存系统至关重要。

4.说说Redis的常用应用场景

  • 缓存
  • 共享Session
  • 分布式锁
  • 计数器应用
  • 排行榜
  • 消息队列
  • 社交网络
  • 位操作

5. Redis 的持久化机制有哪些?

RDB,就是把内存数据以快照的形式保存到磁盘上。

RDB持久化,是指在指定的时间间隔内,执行指定次数的写操作,将内存中的数据集快照写入磁盘中,它是Redis默认的持久化方式。执行完操作后,在指定目录下会生成一个dump.rdb文件,Redis 重启的时候,通过加载dump.rdb文件来恢复数据。RDB触发机制主要有以下几种:

RDB 的优点

  • 适合大规模的数据恢复场景,如备份,全量复制等

RDB缺点

  • 没办法做到实时持久化/秒级持久化。
  • 新老版本存在RDB格式兼容问题

AOF

AOF(append only file) 持久化,采用日志的形式来记录每个写操作,追加到文件中,重启时再重新执行AOF文件中的命令来恢复数据。它主要解决数据持久化的实时性问题。默认是不开启的。

AOF的工作流程如下:

AOF的优点

  • 数据的一致性和完整性更高

AOF的缺点

  • AOF记录的内容越多,文件越大,数据恢复变慢。

6、Redis 实现高可用有三种部署模式:主从模式,哨兵模式,集群模式。

Redis 支持几种不同的高可用性和故障转移策略。这些模式分别为:

  • 主从模式 (Master-Slave Replication): Redis 主从复制允许多个从服务器(slaves)拷贝一个主服务器(master)的数据集。在这个模式下,数据写入是由单个主服务器处理的,然后数据会被复制到一个或多个从服务器。如果主服务器出现故障,可以手动将其中一个从服务器提升为新的主服务器。不过,这个过程并不是自动的,需要管理员介入

  • 哨兵模式 (Sentinel): Redis Sentinel 是一个监控和自动故障转移系统。Sentinel 能够监控主服务器和从服务器,并在检测到主服务器不可用的情况下,自动从从服务器中选举出新的主服务器。这个过程是自动的,不需要管理员手动干预。Sentinel 可以提供更高的可用性,因为它能够在主服务器故障时自动进行故障转移。

        Spring Data Redis 提供了对哨兵模式的支持,这样应用程序就不需要在发生主从切换时进行          手动干预。以下是如何在 Spring Boot 应用程序中配置 Redis 哨兵支持的一个基本示例:

# application.yml 或 application.properties 中的配置
spring:redis:sentinel:master: mymaster # 这是你在哨兵配置中设置的主节点名称nodes:- sentinel-host1:26379 # 这里的 IP 和端口是你的哨兵实例- sentinel-host2:26379- sentinel-host3:26379password: your-redis-password # 如果你的 Redis 设置了密码

      在你的 Spring Boot 应用程序中进行了上述配置后,Spring Data Redis 会自动使用哨兵来发现当前的主节点,并且在主节点发生变化时自动更新连接。这样,即使发生故障转移,你的应用程序也可以继续与新的主节点进行通信,而无需任何手动干预。

为了完整性,请确保你添加了 Spring Boot 的 Redis Starter 依赖:

<!-- 在你的 pom.xml 中添加 Spring Boot Redis Starter -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

使用 Spring Data Redis 和 Spring Boot 的自动配置特性,可以极大地简化哨兵模式的使用,同时确保你的应用程序能够充分应对 Redis 主节点的变化。

  • 集群模式 (Cluster): Redis 集群提供了数据的自动分片(sharding)和复制。在这种模式下,数据被分散存储在多个节点上,每个节点负责维护集群数据的一部分。集群模式支持多个主节点(master nodes)和从节点(slave nodes),如果某个主节点失败,它对应的从节点可以自动升级为主节点,实现故障转移。这种模式可以提供很高的性能和良好的可伸缩性,适合大规模数据环境。

spring:redis:cluster:nodes:- node1-host:6379- node2-host:6379- node3-host:6379max-redirects: 3password: your-redis-password # 如果你的 Redis 集群配置了密码

在这里:

  • spring.redis.cluster.nodes 是你的 Redis 集群节点列表,节点由它们的主机名和端口组成。
  • spring.redis.cluster.max-redirects 是在集群模式下,客户端在执行命令时,因为键被重新分配到其他节点时,允许的最大重定向次数。
  • spring.redis.password 是连接到 Redis 集群节点所需的密码。

配置完成后,Spring Boot 会自动配置 LettuceJedis 作为 Redis 客户端,以连接到你的 Redis 集群。这种方式允许你的 Spring Boot 应用程序利用 Redis 集群的所有优点,包括自动分片和高可用性。

无论是哨兵模式还是集群模式,代码级别的操作基本相同,因为 Spring Boot 的抽象层已经为我们处理了底层的细节。您只需要在配置中指定相应的模式,然后在代码中就可以使用 StringRedisTemplateRedisTemplate 进行操作。

每种模式都有其优缺点,并且适用于不同的场景。在选择部署模式时,需要考虑数据的一致性要求、系统的复杂性、管理成本以及性能等因素。

7、对于哨兵模式和集群模式,如果我想在config类里自己创建RedisTemplate,该怎么做?

即使在哨兵模式和集群模式下,如果你想自定义 RedisTemplate,你仍然需要引入 spring-boot-starter-data-redis 依赖。这个 starter 会自动配置 Redis 连接工厂,无论是用于哨兵模式的 RedisSentinelConfiguration 还是集群模式的 RedisClusterConfiguration。你可以创建一个配置类,在其中定义你自己的 RedisTemplate Bean。

以下是如何自定义 RedisTemplate 的例子,分别用于哨兵模式和集群模式:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericToStringSerializer;@Configuration
public class RedisSentinelConfig {@Autowiredprivate RedisConnectionFactory redisConnectionFactory;@Beanpublic RedisTemplate<String, Object> redisTemplate() {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);template.setValueSerializer(new GenericToStringSerializer<>(Object.class));return template;}
}

集群模式下自定义 RedisTemplate

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericToStringSerializer;@Configuration
public class RedisClusterConfig {@Autowiredprivate RedisConnectionFactory redisConnectionFactory;@Beanpublic RedisTemplate<String, Object> redisTemplate() {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);template.setValueSerializer(new GenericToStringSerializer<>(Object.class));return template;}
}

在这两个配置类中,我们注入了 RedisConnectionFactory,它会根据你在 application.propertiesapplication.yml 中的配置自动装配。然后我们创建了一个 RedisTemplate<String, Object> Bean,并将连接工厂设置为注入的连接工厂。

在这里,GenericToStringSerializer 是一个序列化器,它可以处理你的对象序列化。当然,你可以根据你的需要选择其他序列化器,例如 Jackson2JsonRedisSerializerJdkSerializationRedisSerializer 等。

最后,不要忘记在 application.propertiesapplication.yml 中配置你的 Redis 哨兵或集群信息。

通过这种方式,你可以自定义 RedisTemplate 以满足你的特定需求,比如自定义序列化机制或启用事务支持。

8、Redisson使用哨兵模式和集群模式

Redisson 是一个高级的 Redis 客户端,它提供了丰富的功能,包括分布式数据结构和同步器,以及对哨兵模式和集群模式的支持。为了使用 Redisson 进行故障转移(failover),你需要根据你的部署环境(哨兵或集群)配置 Redisson。

以下是如何配置 Redisson 来支持哨兵模式和集群模式的示例。

哨兵模式

  • 添加 Redisson 依赖到你的项目中。如果你使用 Maven,在 pom.xml 文件中添加如下依赖:
    <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>最新版本</version>
    </dependency>
    

  • 创建一个配置类来配置 Redisson 客户端:
    import org.redisson.Redisson;
    import org.redisson.api.RedissonClient;
    import org.redisson.config.Config;
    import org.redisson.config.SentinelServersConfig;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;@Configuration
    public class RedissonConfig {@Bean(destroyMethod = "shutdown")public RedissonClient redissonSentinel() {Config config = new Config();SentinelServersConfig sentinelConfig = config.useSentinelServers().addSentinelAddress("redis://sentinel-host1:26379", "redis://sentinel-host2:26379", "redis://sentinel-host3:26379").setMasterName("mymaster").setPassword("your-redis-password") // 如果设置了密码.setReadMode(ReadMode.SLAVE) // 可以设置读取操作使用从节点.setFailedSlaveCheckInterval(1000); // 检查失败从节点的时间间隔,单位是毫秒return Redisson.create(config);}
    }
    

    集群模式

  • 同样的,确保 Redisson 依赖已经添加到你的项目中。

  • 创建一个配置类来配置 Redisson 客户端:

    import org.redisson.Redisson;
    import org.redisson.api.RedissonClient;
    import org.redisson.config.ClusterServersConfig;
    import org.redisson.config.Config;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;@Configuration
    public class RedissonConfig {@Bean(destroyMethod = "shutdown")public RedissonClient redissonCluster() {Config config = new Config();ClusterServersConfig clusterConfig = config.useClusterServers().addNodeAddress("redis://node1-host:6379", "redis://node2-host:6379", "redis://node3-host:6379").setPassword("your-redis-password") // 如果设置了密码.setReadMode(ReadMode.SLAVE) // 可以设置读取操作使用从节点.setFailedSlaveCheckInterval(1000); // 检查失败从节点的时间间隔,单位是毫秒return Redisson.create(config);}
    }
    

    请注意,在配置类中创建的 RedissonClient Bean 都使用了 destroyMethod = "shutdown",这样当 Spring 容器关闭时,Redisson 客户端会正确地关闭其连接。

    Failover 支持

    Redisson 内置支持故障转移,它会自动处理哨兵和集群模式下的节点故障。在哨兵模式下,如果主节点故障,Redisson 会自动连接到新的主节点。在集群模式下,Redisson 能够自动重新路由到正确的节点,即使在节点故障或数据槽迁移后。

    确保使用适合你部署场景的配置,并且正确地将 RedissonClient 实例注入到你需要进行 Redis 操作的类中。Redisson 提供了一系列丰富的方法和操作来与 Redis 进行交互。

9、RedisTemplate 为什么不需要加 destroyMethod?

RedisTemplate 是 Spring Data Redis 提供的一个高级抽象,它简化了与 Redis 数据库的交互。在Spring容器中,RedisTemplate 依赖于 RedisConnectionFactory 来创建与 Redis 服务器的连接。

RedisConnectionFactory 是一个更低级别的抽象,它管理着 Redis 连接的生命周期。当 Spring 应用程序上下文关闭时,Spring 容器会负责关闭所有的单例 bean,包括 RedisConnectionFactory。由于 RedisConnectionFactory 负责管理连接,它会在销毁过程中关闭并清理所有打开的 Redis 连接。

因此,RedisTemplate 本身不需要一个专门的 destroyMethod。当 RedisConnectionFactory 被销毁时,所有通过它创建的连接都会被关闭。这意味着,在大多数情况下,RedisTemplate 不需要进行特别的清理或关闭动作。

这与 RedissonClient 不同,RedissonClient 作为 Redisson 库的一部分,是一个独立的客户端实例,它管理着自己的连接池和线程。因此,需要明确地调用 shutdown 方法来释放资源,关闭所有线程并清理连接池。在 Spring 中,通过 destroyMethod 属性指定 shutdown 方法,确保在 Spring 容器关闭时,RedissonClient 实例能够正确地被销毁。

总的来说,Spring 框架提供了资源管理和清理的机制,确保了在容器关闭时资源得到释放。对于大多数 Spring 管理的 bean,无需手动指定 destroyMethod,除非这些 bean 需要特定的清理逻辑。

10、config类与start中的类

当你在自己的配置类中创建自定义的 RedisTemplateRedisConnectionFactory 或任何其他 Bean 时,Spring Boot 的自动配置机制会尝试尊重你的定义,并且在可能的情况下避免重复创建相同类型的 Bean。

Spring Boot 通过条件注解(如 @ConditionalOnMissingBean@ConditionalOnBean@ConditionalOnClass 等)来控制自动配置的条件。例如,对于 RedisAutoConfiguration,Spring Boot 会检查是否已经存在一个 RedisConnectionFactory Bean。如果存在,它就不会再创建一个新的 RedisConnectionFactory。这个逻辑同样适用于 RedisTemplate 和其他的自动配置 Bean。

在你的配置类中定义的 Bean 将会“覆盖”自动配置的 Bean,前提是你定义的 Bean 名称与自动配置尝试创建的 Bean 名称相同,或者你的 Bean 类型在应用上下文中是唯一的。Spring Boot 会根据上下文中已存在的 Bean 来调整其自动配置。

例如,如果你定义了一个 RedisConnectionFactory Bean,Spring Boot 将使用你提供的这个 Bean 来配置 RedisTemplate,而不是创建一个新的连接工厂。这种方式确保了你的自定义配置会被应用,并且不会与 Spring Boot 的自动配置发生冲突。

要确保你的自定义配置覆盖了 Spring Boot 的自动配置,你可以使用 @Primary 注解在你的 Bean 上,或者确保你的 Bean 名字与自动配置中创建的 Bean 名字相匹配。@Primary 注解告诉 Spring 容器在存在多个相同类型的 Bean 时优先使用被 @Primary 注解标记的 Bean。

11. 聊聊Redis 事务机制

Redis通过MULTI、EXEC、WATCH等一组命令集合,来实现事务机制。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

简言之,Redis事务就是顺序性、一次性、排他性的执行一个队列中的一系列命令。

Redis执行事务的流程如下:

  • 开始事务(MULTI)
  • 命令入队
  • 执行事务(EXEC)、撤销事务(DISCARD )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷力扣看见一个寻找单身狗的问题?【力扣题解】

今天刷力扣遇到一道有意思的题目&#xff0c;题目是写着撞色问题177 &#xff0c;当我写完这个题去看看有什么好的解题方式的时候&#xff0c;看见一个有趣的题解问题&#xff0c;他对这个题目的描述是几对情侣&#xff0c;带几个单身狗出去玩&#xff0c;然后现在我们要把这几…

天文馆3D可视化:揭秘宇宙星辰的奇幻之旅

在这个科技日新月异的时代&#xff0c;我们似乎离神秘的宇宙越来越近。 天文馆作为普及天文知识、展示宇宙奥秘的重要场所&#xff0c;一直备受人们的喜爱。然而&#xff0c;传统的天文馆展示方式往往局限于平面图片和简单的模型&#xff0c;无法让人真正感受到宇宙的浩瀚与壮丽…

Java与Go:指针

在计算机内存中&#xff0c;每个变量都有一个唯一的地址&#xff0c;指针就是用来保存这个地址的变量。通过指针&#xff0c;我们可以间接地访问和修改存储在该地址处的数据。今天我们来聊一聊Java和Go指针&#xff0c;预告一下&#xff0c;我们需要借助C语言做一些小小的比较。…

【堆】Top-K问题

标题&#xff1a;C语言库函数scanf&#xff08;&#xff09;解读 水墨不写bug &#xff08;图片来源于网络&#xff09; 正文开始&#xff1a; Top-K问题是一类问题的统称&#xff1a; 即根据对象的某一属性&#xff0c;找出这个属性最突出的K个对象&#xff0c;并且通常对象…

22. UE5 RPG使用MMC根据等级设置血量和蓝量(下)

上一篇&#xff0c;我们实现了玩家角色和敌人的等级的获取&#xff0c;使用MMC的提前工作已经准备完成&#xff0c;那么&#xff0c;这一篇讲一下&#xff0c;如何使用MMC&#xff0c;通过角色等级和体力值设置角色的最大血量。 MMC 全称 Mod Magnitude Calculation&#xff0c…

基于springboot的同城宠物帮养照看平台

技术&#xff1a;springbootmysqlvue 一、背景 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统同城上门喂遛宠物…

Java学习六—面向对象

一、关于面向对象 1.1简介 Java 是一种面向对象编程语言&#xff0c;其核心思想是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;。 面向对象编程是一种程序设计范式&#xff0c;它将数据与操作数据的方法&#xff08;函数&#xff09;捆…

软件工程-第三版王立福-第1章 绪论

本书结合IEEE最新发布的软件工程体系SWEBOK&#xff0c;和IEEE/ACM软件工程学科小组公布的软件工程教育知识体系SEEK&#xff0c;北大本科生指定教材。注重基础知识的系统性&#xff0c;选材的先进性及知识的应用。2009年出版 软件开发本质的认识&#xff0c;两大技术问题&…

JUnit5的条件测试、嵌套测试、重复测试

条件测试 JUnit5支持条件注解&#xff0c;根据布尔值判断是否执行测试。 自定义条件 EnabledIf和DisabledIf注解用来设置自定义条件&#xff0c;示例&#xff1a; Test EnabledIf("customCondition") void enabled() { // ... } Test DisabledIf("cust…

Java并发基石ReentrantLock:深入解读其原理与实现

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java的并发编程库中&#xff0c;ReentrantLock是一种非常重要的同步工具&#xff0c;它提供了一种比内置synchronized关键字更加…

科研学习|研究方法——实验法

1.实验方法的渊源 今天我们说物理学、生物学是实验的科学&#xff0c;应该不会有人再持异议了&#xff0c;然而连物理学这样的学科在历史上也并非一开始就是实验科学。在2000多年以前的亚里士多德时代&#xff0c;众人都认为物理学是非实验性质的&#xff0c;物理学成为实验科学…

netty基础_12.用 Netty 自己实现简单的RPC

用 Netty 自己实现简单的RPC RPC 基本介绍我们的RPC 调用流程图己实现 Dubbo RPC&#xff08;基于 Netty&#xff09;需求说明设计说明代码封装的RPCNettyServerNettyServerHandlerNettyClientHandlerNettyClient 接口服务端(provider)HelloServiceImplServerBootstrap 客户端(…

第四百一十四回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容&#xff0c;本章回中将介绍自定义Action菜单.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

【呼市经开区建设服务项目水、电能耗监测 数采案例】

实施方案 针对能耗采集中的水、电能源数据采集&#xff0c;因客观因素条件&#xff0c;数据采集方面存在较大难度。大多数国网电表485接口由于封签限制&#xff0c;不能实施采集&#xff0c;不让拆机接线&#xff0c;采集实施存在困难。水量能耗采集&#xff0c;存在类似问题&a…

腾讯云GPU服务器深度计算怎么收费?1小时、一个月和一年报价

腾讯云GPU服务器怎么收费&#xff1f;GPU服务器1小时多少钱&#xff1f;一个月收费价格表和一年费用标准&#xff0c;腾讯云百科txybk.com分享腾讯云GPU服务器GPU计算型GN10Xp、GPU服务器GN7、GPU渲染型 GN7vw等GPU实例费用价格&#xff0c;以及NVIDIA Tesla T4 GPU卡和V100详细…

Jmeter Ultimate Thread Group 和 Stepping Thread Group

线程组&#xff1a;使用复杂场景的性能测试 有时候我们做性能测试时&#xff0c;只依靠自带的线程组&#xff0c;显示满足不了性能测试中比较复杂的场景&#xff0c;下面这两种线程组可以帮助你很好的完成复杂的场景 第一种&#xff1a;Stepping Thread Group 在取样器错误后…

Socket类

2.2 Socket类 Socket 类&#xff1a;该类实现客户端套接字&#xff0c;套接字指的是两台设备之间通讯的端点。 构造方法 public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null &#xff0c;则相当于指定地址为回送…

Appium —— 移动应用自动化测试开源工具!

Appium介绍 Appium是一个用于自动化移动应用程序的开源工具&#xff0c;它支持iOS和Android平台。通过Appium&#xff0c;开发人员可以使用各种编程语言&#xff08;如Java、Python、Ruby等&#xff09;编写测试脚本&#xff0c;以自动化测试移动应用程序的功能和用户界面。Ap…

基于springboot+vue的小区团购管理

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

如何在Windows系统使用VS Code制作游戏网页并实现无公网IP远程访问

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程&#xff0c;我们将通过VS Code实现远程开发MENJA小游戏&#xff0c;并通过cpolar内网穿透发布到公网&#xff0c;分…