面试专区|【62道Redis高频题整理(附答案背诵版)】

news2024/10/6 6:52:36

什么是Redis?

Redis是一个高性能的开源内存数据库系统,它使用键值对存储数据,并支持多种数据结构,如字符串、哈希、列表、集合和有序集合。与传统关系型数据库不同,Redis将数据存储在内存中,以实现快速读写操作。同时,它还提供持久化功能,可以将数据周期性地写入磁盘,以保证数据的持久性。

由于Redis的高性能和丰富的数据结构,它在许多应用场景中得以广泛应用。例如,它可以用作缓存系统,将热门的数据存储在内存中,以提高读取速度。此外,Redis还可以用作消息队列,实现异步任务处理和解耦系统组件。在实时统计和计数方面,Redis也能很好地应用,例如实时在线用户数统计、访问频次计数等。总之,Redis是一个功能强大、灵活多样的数据库系统。

关系型数据库和非关系型数据库有什么区别?

关系型数据库(RDBMS)和非关系型数据库(NoSQL)在数据存储和处理方面存在着一些区别。

  1. 数据结构:关系型数据库使用表格结构(二维表)来组织数据,并且表格之间可以建立关系,即通过外键进行关联。而非关系型数据库采用不同的数据模型,如键值对、文档、列族、图等,没有固定的结构。

  2. 扩展性:关系型数据库在处理海量数据时可能会面临性能瓶颈。而非关系型数据库设计用于处理大规模、高并发的数据,能够更好地水平扩展,可以通过添加更多的节点来提高系统的处理能力。

  3. 灵活性:关系型数据库需要在设计阶段定义表结构,并且需要遵循预设的模式。一旦定义后,数据的修改可能会变得复杂。而非关系型数据库更加灵活,可以随着应用需求的变化进行数据结构的调整和扩展。

  4. 事务支持:关系型数据库支持事务,可以保证数据的一致性和可靠性。非关系型数据库根据不同的类型和实现方式,事务支持程度可能有所不同。

  5. 查询语言:关系型数据库使用结构化查询语言SQL来查询和操作数据。非关系型数据库则使用不同的查询语言或接口,如键值对数据库使用键来访问值,文档数据库使用类似JSON的查询语法。

注:关系型数据库和非关系型数据库并没有绝对的优劣之分,而是根据应用场景和需求选择适当的数据库类型。关系型数据库适用于复杂的事务处理,非关系型数据库则适用于需要高可扩展性和灵活性的大数据处理。

非关系型数据库你还了解哪些?

除了Redis之外,常见的非关系型数据库还有以下几种:

  1. 文档数据库(Document Database):文档数据库使用类似JSON的文档格式来存储数据,每个文档都可以包含不同的字段和值。MongoDB是一种著名的文档数据库,它适用于存储半结构化和动态模式的数据。

  2. 列族数据库(Column-family Database):列族数据库以列族为单位存储数据,每个列族包含多个列。列族数据库适用于大数据量的高吞吐量场景,例如日志分析和时间序列数据存储。HBase是一种常见的列族数据库。

  3. 搜索引擎(Search Engine):搜索引擎是一种特殊类型的非关系型数据库,用于支持全文搜索和复杂的查询。Elasticsearch和Solr是两个常用的搜索引擎,它们广泛应用于日志分析、数据搜索和实时数据分析等领域。

Memcached与Redis的区别都有哪些?

Memcached和Redis都是流行的内存缓存系统,但它们在某些方面有一些区别,适用于不同的应用场景。

  1. 数据结构:Memcached只支持键值对的存储,而Redis支持多种数据结构(字符串、哈希、列表、集合、有序集合等),使得Redis可以更灵活地应对不同的数据需求。

  2. 持久化:Redis支持数据持久化,可以将数据写入磁盘,从而保证数据的持久性。而Memcached没有持久化功能,重启后数据会丢失。

  3. 数据查询和处理:Redis提供了更多的数据查询和处理功能,例如按范围获取数据、排序、异步操作等。Memcached则主要关注于高性能的读取和写入操作。

  4. 内存管理和性能:Redis通过使用更复杂的数据结构以及多线程模式来提高内存使用效率和性能。Memcached则更加简单,更专注于高速缓存。

根据这些区别,对于适合的应用场景来说:

  • 如果只需要简单的键值缓存和高速写入读取操作,可以选择Memcached。它常用于缓存数据库查询结果、减轻数据库压力,或存储临时、短暂、快速失效的数据。

  • 如果需要更复杂的数据结构和功能,或者需要持久化数据,更好地支持数据分析和实时处理,可以选择Redis。它适用于具有实时计数、排行榜、发布/订阅消息等需求的应用,也可用作分布式锁等高级应用。

需要注意的是,由于Redis提供的功能更多且更复杂,相对来说也消耗更多的内存资源和处理能力。因此,在选择缓存系统时,根据具体的需求和资源限制,权衡Memcached和Redis的优劣非常重要。

Redis 一般都有哪些使用场景?

Redis一般有以下几种使用场景:

  1. 缓存:Redis最常见的使用场景是作为内存职业键值存储来构建缓存。由于Redis的性能非常高,可以处理大量的读写操作,因此非常适合用于缓存场景。

    例如,可以缓存从数据库查询出来的数据,后面再需要这些数据时,可以直接从Redis中读取,而不需要再次进行数据库查询,从而提高性能。

  2. 消息队列系统:Redis也可以作为消息队列使用。其PUB/SUB模型可以用来创建实时的消息系统。

    例如,一个电商网站,用户下订单后,可以把订单任务放入Redis的消息队列,然后有专门的工作线程负责处理这些订单任务。

  3. 计数器:Redis可以非常方便地实现计数器功能。比如用来记录网站的点击次数,或者用户的行为次数。

    例如,社交网络网站可以用Redis来记录用户发布的消息数量,或者用户被赞的次数。

  4. 实时系统:由于Redis的高性能特性,也经常被用于构建实时系统。比如实时统计用户的行为、游戏的实时排行榜等。

    例如,一个在线游戏,可以使用Redis来存储用户的分数,然后使用Redis的排序功能,实时生成用户的排行榜。

以上就是Redis的一些典型应用场景。

那 Redis 不适合什么应用场景呢?

虽然Redis非常强大和灵活,但并非适合所有的应用场景。特定的场景下可能需要慎用Redis:

  1. 大数据存储:Redis将所有数据存储在内存中,虽然这可以提供非常快的读写速度,但也限制了其数据存储量。如果需要存储的数据超过了机器的内存,或者你需要一个长期存储大量数据的方案,如历史数据分析,那么你可能需要考虑硬盘存储的数据库系统,比如MySQL或者Hadoop。

  2. 关系型数据处理:如果你的应用需要处理复杂的关系型数据,并且需要执行复杂的SQL查询,那么使用关系数据库可能是更好的选择。因为Redis不支持执行SQL查询,而你可能需要使用例如MySQL这样的关系数据库。

  3. 需要ACID事务的应用:虽然Redis有一定的事务处理能力,但没有提供像传统关系数据库那样的ACID(原子性、一致性、隔离性和持久性)事务支持。因此,对数据一致性有严格要求的应用,比如银行转账等,可能会倾向于使用支持ACID事务的数据库。

Redis 常见的数据类型有哪些?

  • 1. string 字符串

字符串类型是 Redis 最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的。字符串类型实际上可以是字符串:简单的字符串、XML、JSON;数字:整数、浮点数;二进制:图片、音频、视频。

使用场景:缓存、计数器、共享 Session、限速。

  • 2. Hash(哈希)

在 Redis中哈希类型是指键本身是一种键值对结构,如 value={{field1,value1},…{fieldN,valueN}}

使用场景:哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便捷。所以常常用于用户信息等管理,但是哈希类型和关系型数据库有所不同,哈希类型是稀疏的,而关系型数据库是完全结构化的,关系型数据库可以做复杂的关系查询,而 Redis 去模拟关系型复杂查询开发困难且维护成本高。

  • 3. List(列表)

列表类型是用来储存多个有序的字符串,列表中的每个字符串成为元素,一个列表最多可以储存 2 ^ 32 - 1 个元素,在 Redis 中,可以队列表两端插入和弹出,还可以获取指定范围的元素列表、获取指定索引下的元素等,列表是一种比较灵活的数据结构,它可以充当栈和队列的角色。

使用场景:Redis 的 lpush + brpop 命令组合即可实现阻塞队列,生产者客户端是用 lpush 从列表左侧插入元素,多个消费者客户端使用 brpop 命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。

image-20210608011814007

  • 4. Set(集合)

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过索引下标获取元素,Redis 除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。合理的使用好集合类型,能在实际开发中解决很多实际问题。

使用场景:如:一个用户对娱乐、体育比较感兴趣,另一个可能对新闻感兴趣,这些兴趣就是标签,有了这些数据就可以得到同一标签的人,以及用户的共同爱好的标签,这些数据对于用户体验以及曾强用户粘度比较重要。

  • 5. zset(sorted set:有序集合)

有序集合和集合有着必然的联系,它保留了集合不能有重复成员的特性,但不同得是,有序集合中的元素是可以排序的,但是它和列表的使用索引下标作为排序依据不同的是:它给每个元素设置一个分数,作为排序的依据。

使用场景:排行榜是有序集合经典的使用场景。例如:视频网站需要对用户上传的文件做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。

Zset 的底层是如何实现的?

Redis的有序集合(Zset)是一种既可以看作是Set,又可以看作是Hash的数据结构,其底层实现主要使用了哈希表和跳跃表。

  1. 哈希表:在Redis的Zset中,每个元素是唯一的,同时与每个元素关联的还有一个分数(Score)。元素的唯一性保证可以由哈希表来实现。即Redis的Zset将元素作为哈希表的键,将对应的分数作为哈希表的值。

  2. 跳跃表:Redis的Zset还需要依据分数来对元素进行排序,这个特性是通过跳跃表来实现的。跳跃表是一种可以进行快速查找的数据结构。由于跳跃表的特性,对于分数的查找、插入、删除都具有较好的时间复杂度。

所以,Zset的基本形状就是:哈希表确保了成员的唯一性和查找的速度,跳跃表确保了有序性以及区间查找。

以上就是Redis的Zset底层实现简述。

什么是跳跃表?

跳跃表(Skip List)是一种可以替代平衡树的数据结构。在它的简单形式中,跳跃表和链表是一致的,只不过在跳跃表中,链表的每个节点可能有多个指向其后继的指针,这样可以实现快速查找等操作。跳跃表最主要的特点是它的查找,插入,删除操作的时间复杂度都是O(logn)。

基本思想:
假设我们有一个有序链表,我们想要查找一个元素,需要从头开始,一步一步的查找,这种情况下查找的时间复杂度是O(n)。

现在,我们对链表做一些增强,我们抽取出部分数据在上一级创建一个新的链表,上级链表的元素个数是下级链表的1/2,同理,我们再在上级链表的基础上抽取出数据在更高级别创建链表,这样就构成了多级索引。

level3:  ---------------63
level2:  ----31---------63
level1:  ----31----47---63
level0:  15--31--47--63

如上,我们有一个包含4个元素{15,31,47,63}的链表,我们在这个链表的基础上创建了三个更高级别的链表,最高级别的链表只包含一个元素。这样构成的数据结构就是跳跃表。

现在,如果我们想要查找47,我们可以从最高级别的链表开始,63>47,所以我们到第二级别的链表查找,31<47,再向右走,到达63,63>47,所以我们进入下一级链表,47就在这里。在跳跃表中,47这样的查找就是logn的复杂度。

跳跃表不仅能提供较快的查找速度,而且插入和删除元素也相对简单,主要是调整索引,改变指针的指向即可。因此,跳跃表在很多场景下,例如Redis的Sorted Set,都有被广泛应用。

PS:如果要详细了解,建议自己找文章看

Redis 为什么这么快?

Redis之所以能够具有高速的性能,主要是由于以下几个原因:

  1. 数据存储在内存:Redis将数据存储在内存中,而内存的读写速度比磁盘快几个数量级。这使得Redis可以快速响应读写操作,适合于对延迟要求较高的应用场景。

  2. 单线程模型:Redis采用单线程的方式来处理客户端请求。通过避免多线程之间的锁竞争和上下文切换,可以减少了不必要的开销,提高了处理效率。

  3. 精简的数据结构和高效算法:Redis提供了多种数据结构(如哈希、集合、有序集合等),这些数据结构在内部经过精心优化,使用了高效的算法,以提高执行效率。

  4. 高效的网络通信:Redis使用自己的协议进行网络通信(IO多路复用模型),协议简单且紧凑,减少了网络开销。此外,Redis还支持连接复用和连接池等机制,提高了网络通信的效率。

需要指出的是,虽然Redis在内存存储和单线程上具有高性能,但在数据量较大或复杂计算场景下,其性能仍然会受到一定限制。因此,在选择使用Redis时,需要考虑具体的应用需求和数据规模,综合评估其性能与可伸缩性。

什么是缓存穿透?怎么解决?

缓存穿透是指在使用缓存系统时,恶意请求或者不存在的数据频繁地被发送到缓存中,导致缓存无法命中,最终请求会直接落到后端数据库,造成数据库压力过大。

缓存穿透可能出现的原因包括:

  1. 恶意攻击:攻击者有意发送不存在的数据请求,试图使缓存失效,以达到影响系统性能或者触发系统错误的目的。
  2. 随机查询:大量并发的随机查询请求,其中大部分请求的数据都不存在于缓存中。
  3. 存在但很少访问的数据:一些数据很少被访问,经常被请求但却不存在于缓存中,导致缓存穿透。

为了解决缓存穿透问题,可以采取以下措施:

  1. 布隆过滤器(Bloom Filter):布隆过滤器是一种高效的数据结构,用于判断某个元素是否存在于集合中。在请求到来时,先使用布隆过滤器进行判断,如果被拦截则不再继续访问缓存和数据库,减轻了数据库的压力。

  2. 缓存空对象(Cache Null Object):当某个请求查询的数据不存在时,将空对象或者null放入缓存,以防止相同的请求频繁查询数据库。在一定时间内,如果有相同的请求再次到来,则直接从缓存中获取到空对象,避免了对数据库的重复查询。

  3. 数据预热(Cache Pre-warming):在系统启动时,将一些常用或重要的数据预先加载到缓存中,提前热身缓存,避免了对这部分数据的缓存穿透问题。

  4. 异步加载(Asynchronous Loading):对于即将过期的缓存数据,可以在后台异步地进行数据加载和缓存的更新,避免了数据过期期间的缓存穿透。

  5. 限流和防护机制:通过对请求进行限流、IP白名单校验和请求验证等手段,防止恶意攻击和异常流量对缓存系统造成压力。

综合采取上述措施可以有效应对缓存穿透问题,提高系统的性能和稳定性。

什么是缓存雪崩?该如何解决?

缓存雪崩是指在缓存中大量的缓存数据同时过期或者缓存服务器宕机,导致大量请求直接访问后端数据库,造成数据库压力过大,甚至引发系统崩溃。

缓存雪崩可能出现的原因包括:

  1. 缓存数据同时过期:在某个时间点,大量的缓存数据同时过期,导致大量请求落到后端数据库。
  2. 缓存服务器宕机:缓存服务器突然宕机或者故障,导致所有请求无法访问缓存,直接访问后端数据库。

为了解决缓存雪崩问题,可以采取以下措施:

  1. 设置缓存失效时间的随机性:在设置缓存失效时间时,可以为不同的缓存设置不同的失效时间,以避免大量数据在同一时间内同时失效。可以在原有失效时间的基础上加上一个随机的时间,使得失效时间分散化。

  2. 使用热点数据永不过期:对于一些热点数据,可以将其缓存设置为永不过期,以保证热点数据在任何时候都可以快速访问,避免因过期导致的缓存雪崩。

  3. 实时监控和预警:监控缓存系统的状态和数据过期情况,及时发现异常并采取相应的措施,例如提前进行缓存的更新操作,或者在缓存失效前主动将其刷新。

  4. 备份缓存服务:部署多个独立的缓存服务器,以充分利用缓存的高可用性。如果一个缓存服务器出现故障,其他服务器仍然可以继续提供缓存服务。

  5. 数据预热:在系统启动时,将一些常用或重要的数据预先加载到缓存中,提前热身缓存,减少冷启动时缓存雪崩的风险。

  6. 限流和熔断机制:对缓存系统进行限流控制,可以设置最大并发数、最大请求时间等,以及在缓存故障时启用熔断机制,防止大量请求直接落到后端数据库。

综合采取上述措施可以有效应对缓存雪崩问题,保证系统的稳定性和可靠性。

什么是缓存击穿?如何解决?

缓存击穿是指当缓存中没有某个key的数据,这当然会导致缓存无法命中,然后请求就会穿透缓存层,直接访问数据库。如果这个不命中的请求不止一个,而是成千上万个同时发生,那么就会对数据库形成巨大的访问压力,可能会导致数据库访问瞬间崩溃。

最常见的缓存击穿场景就是有大量请求同时查询一个热点key,但是此时缓存中该key的数据刚好过期,于是大量的请求就会直接穿透到数据库。

针对缓存击穿问题,常见的解决方案有:

  1. 设置热点数据永不过期:这种方法适用于某些更新不频繁但是访问非常频繁的热点数据。

  2. 缓存数据过期时间设置随机,防止同一时间大量数据过期现象发生。

  3. 使用互斥锁(Mutex key):对于同一个key,只允许一个线程去加载数据,其他线程等待加载完成直接使用即可。

  4. 服务降级与熔断:如果数据库压力过大,可以暂时拒绝部分请求,让系统在承受的压力范围内运行。

每种解决方案都各有优势,可以根据实际情况选择。

布隆过滤器的原理是什么?它的优点是什么?缺陷是什么?

布隆过滤器(Bloom Filter)是一种数据结构,用于快速判断一个元素是否属于一个集合,它的原理、优点和缺陷如下:

原理

  1. 哈希函数:布隆过滤器使用多个哈希函数(通常是非加密哈希函数),将输入元素映射成多个不同的位数组索引。
  2. 位数组:布隆过滤器内部维护一个位数组,所有位的初始值都为0。
  3. 添加元素:当要将一个元素添加到布隆过滤器中时,对该元素应用多个哈希函数,然后将相应位数组索引位置的位设置为1。
  4. 查询元素:当要查询一个元素是否存在于布隆过滤器中时,同样对该元素应用多个哈希函数,检查相应位数组索引位置的位是否都为1。如果所有位都为1,则可能存在;如果有任何一位为0,则一定不存在。

优点

  1. 节省内存:相比于使用散列表或集合等数据结构,布隆过滤器占用的内存较少,因为它只需要维护位数组。
  2. 快速查询:布隆过滤器的查询操作非常快速,通常只需要几个哈希函数的计算和位的检查。
  3. 可用于大规模数据:适用于处理大规模数据集,尤其是在内存有限的情况下,可以快速过滤掉大部分不可能存在的元素,减轻后续查询的压力。

缺陷

  1. 误判率:布隆过滤器可能会产生误判,即判断一个元素存在时,实际上它可能不存在。这是因为多个元素可能映射到相同的位数组索引,导致冲突。
  2. 不支持删除:由于布隆过滤器的位数组只能设置为1,不能删除元素。如果需要删除元素,需要重新构建布隆过滤器。
  3. 容量不可扩展:一旦位数组的大小确定,就不能动态扩展,因此需要在设计时估计好位数组的大小以应对数据规模的增长。

总之,布隆过滤器是一种高效的数据结构,适用于需要快速过滤数据的场景,但要注意其误判率和不支持删除的特点。在实际应用中,通常需要根据具体需求权衡其优点和缺陷。

由于内容太多,更多内容以链接形势给大家,点击进去就是答案了

16. 在生成 RDB 期间,Redis 可以同时处理写请求么?

17. 如何实现数据尽可能少丢失又能兼顾性能呢?

18. 哈希槽又是如何映射到 Redis 实例上呢?

19. Redis如何做内存优化?

20. Redis线程模型

21. Redis事务及其相关面试题

22. Redis是单线程的,如何提高多核CPU的利用率?

23. 为什么要做Redis分区?

24. 你知道有哪些Redis分区实现方案?

25. Redis分区有什么缺点?

26. 如何解决 Redis 的并发竞争 Key 问题

27. 分布式Redis是前期做还是后期规模上来了再做好?为什么?

28. Redis相比Memcached有哪些优势?

29. 为什么要用 Redis 而不用 map/guava 做缓存?

30. 如何选择合适的持久化方式

31. Redis key的过期时间和永久有效分别怎么设置?

32. 双写一致性方案一:先删除缓存,后更新数据库

33. 双写一致性方案二:先更新数据库,后删除缓存

34. 什么是缓存预热?

35. 什么是缓存降级?

36. Redis真的是单线程?

37. Redis 6.0为何引入多线程?

38. Redis 6.0 多线程的实现机制?

39. Redis 6.0 采用多线程后,性能的提升效果如何?

40. Redis 6.0开启多线程后,是否会存在线程并发安全问题?

41. Redis 6.0 与 Memcached 多线程模型的对比

42. 介绍下Redis单副本

43. 介绍下Redis多副本(主从)

44. 介绍下Redis Sentinel(哨兵)

45. 介绍下Redis Cluster

46. 介绍下Redis自研

47. Redis高可用方案具体怎么实施?

48. 了解主从复制的原理吗?

49. 由于主从延迟导致读取到过期数据怎么处理?

50. 主从复制的过程中如果因为网络原因停止复制了会怎么样?

51. Redis主从架构数据会丢失吗,为什么?

52. 如何解决主从架构数据丢失的问题?

53. Redis哨兵是怎么工作的?

54. 故障转移时会从剩下的slave选举一个新的master,被选举为master的标准是什么?

55. 同步配置的时候其他哨兵根据什么更新自己的配置呢?

56. 为什么Redis哨兵集群只有2个节点无法正常工作?

57. Redis cluster中是如何实现数据分布的?这种方式有什么优点?

58. Redis cluster节点间通信是什么机制?

59. 什么是分布式锁?为什么用分布式锁?

60. 常见的分布式锁有哪些解决方案?

61. Redis实现分布式锁

62. RedLock的原理

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

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

相关文章

Chromium 开发指南2024 Mac篇-Chromium项目编译小技巧(六)

1. 前言 在编译大型项目如 Chromium 时&#xff0c;优化编译速度是非常重要的。本文将介绍一些编译优化的小技巧&#xff0c;尤其是如何使用 ccache 来加速 C/C 代码的重新编译。ccache 是一个编译器缓存&#xff0c;通过缓存之前的编译并检测何时再次进行相同的编译&#xff…

无引擎游戏开发(3):数据结构设计|功能函数完善

为了简单起见&#xff0c;我们将棋盘的二维数组定义为全局变量。除此之外还要定义一个char类型的全局变量来识别当前的落子类型&#xff0c;我们将其初始化为‘O’。 char Board_data[3][3] {{-, -, -},{-, -, -},{-, -, -}, };char Cur_piece O; 现在回到“读取操作”部分…

保护模式下的内存访问(笔记)

;代码清单12-1;文件名&#xff1a;c12_mbr.asm;文件说明&#xff1a;硬盘主引导扇区代码;创建日期&#xff1a;2011-5-16 19:54&#xff1b;修改于2022-02-16 11:15;设置堆栈段和栈指针mov ax, csmov ss, axmov sp, 0x7c00;计算GDT所在的逻辑段地址mov ax, [cs: gdt_base 0x7c…

树(数据结构篇)

数据结构之树 树 本篇讲的树也就是多叉树 普通树(多叉树) 概念&#xff1a; 树就是由根节点(父亲)分出多个分支节点(儿子)&#xff0c;然后分支又分出多个分支&#xff0c;我们将这种结构称为树,树也可以这么定义&#xff1a;一棵树由称作根的节点r以及0个或多个非空的(子…

滴漏智能监测报警摄像机

智能监测摄像机在现代城市安全管理中扮演着关键角色。这些先进设备利用高度精确的图像识别技术&#xff0c;实时监测各类安全隐患&#xff0c;特别是在防疫措施中的应用日益显著。滴漏智能监测报警摄像机作为其中的一种&#xff0c;具备了多重功能&#xff0c;极大地增强了公共…

【Golang - 90天从新手到大师】Day06 - 数组

系列文章合集 Golang - 90天从新手到大师 数组是golang中最常用的一种数据结构,数组就是同一类型数据的有序集合 定义一个数组 格式: var name [n]type n为数组长度,n>0 且无法修改,type为数组的元素类型如: var a [2]int上面的例子定义了一个长度为2,元素类型为int的数组…

SpringBoot的配置文件和YAML文件的语法

1.SpringBoot的有两种格式的全局配置文件&#xff0c;使用任何一个功能都是一样的 注意&#xff1a;SpringBoot的全局配置文件名都是固定的application.xxx ① application.properties&#xff0c; 这个是默认Spring initializr默认自动生成的配置文件&#xff0c;也是我们属…

机器学习参数寻优:方法、实例与分析

机器学习参数寻优:方法、实例与分析 机器学习模型的性能很大程度上依赖于其参数的选择。参数寻优(Hyperparameter Tuning)是提升模型表现的关键步骤之一。本文将详细介绍主流的参数寻优方法,包括网格搜索(Grid Search)、随机搜索(Random Search)、贝叶斯优化(Bayesia…

Java中的do-while循环及其示例

Java中的do-while循环及其示例 在上一个教程中&#xff0c;我们讨论了while循环。在本教程中&#xff0c;我们将讨论java中的do-while循环。do-while循环类似于while循环&#xff0c;但它们之间有区别&#xff1a;在while循环中&#xff0c;条件是在执行循环体之前求值的&am…

1分钟带你部署本地Llama3大模型

介绍 LLaMa 3由Meta于2024年4月18日正式发布&#xff0c;这一版本是对先前LLaMa系列的重大升级。新发布的模型包括8B&#xff08;80亿参数&#xff09;和70B&#xff08;700亿参数&#xff09;两个版本&#xff0c;这两个版本在一系列行业标准基准测试中展示了最先进的性能。 从…

Jenkins 发测试邮件报错 553 Mail from must equal authorized user

Jenkins 发测试邮件报错 553 Mail from must equal authorized user 报错信息报错原因解决办法 报错信息 org.eclipse.angus.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user at org.eclipse.angus.mail.smtp.SMTPTransport.mailFrom(SMTPTra…

EasyRecovery软件帮你轻松找回丢失的信息!即使是电脑小白也能轻松上手。

&#x1f389;【数据恢复&#xff0c;EasyRecovery帮你轻松找回丢失的信息&#xff01;】&#x1f389; 大家好&#xff5e;&#x1f44b;今天我要来安利一款超级实用的软件——EasyRecovery数据恢复工具&#xff01;作为经常跟各种数据打交道的你们&#xff0c;是不是也有过误…

【Windows Server】设置远程连接数量

打开运行&#xff08;快捷键WinR&#xff09;输入gpedit.msc打开“本地组策略编辑器” 依次点选【计算机配置】——【管理模板】——【Windows组件】——【远程桌面服务】——【远程桌面会话主机】——【连接】 双击“限制连接的数量”选择“已启用”&#xff0c;允许的RD最…

0.4 隔行扫描(Interlaced Scan)简介

0.4 隔行扫描简介 隔行扫描&#xff08;Interlaced Scan&#xff09;是一种将图像显示在扫描式的显示设备上的方法&#xff0c;例如阴极射线管&#xff08;CRT&#xff09;。 隔行扫描设备交替扫描图像的奇场&#xff08;图像的所有奇数行&#xff0c;1、3、5&#xff09;和偶…

SpringMVC框架学习笔记(八):自定义拦截器和异常处理

1 自定义拦截器 1.1 什么是拦截器 1.1.1 说明 &#xff08;1&#xff09;Spring MVC 也可以使用拦截器对请求进行拦截处理&#xff0c;用户可以自定义拦截器来实现特定 的功能. &#xff08;2&#xff09;自定义的拦截器必须实现 HandlerInterceptor 接口 1.1.2 自定义拦截…

[创业之路-118] :制造业企业的必备管理神器-ERP-主要功能模块说明与系统架构

目录 一、ERP功能的标准化 二、常见的ERP标准化功能 2.1 基础档案 2.2 供应链 2.3 人力资源管理 2.4 资产管理 2.5 生产制造 2.6 财务会计 2.7 管理会计 2.8 CRM客户管理管理 2.9 商业智能分析 三、常见的ERP软件供应商 国内ERP软件供应商 国外ERP软件供应商 四…

Flutter框架高阶——Window应用程序设置窗体窗口背景完全透明

文章目录 1.修改 main.cpp1&#xff09;C 与 Win32 API2&#xff09;EnableTransparency()3&#xff09;中文注释 2.编写 Flutter 代码1&#xff09;bitsdojo_window2&#xff09;window_manager3&#xff09;区别对比4&#xff09;同时使用&#xff08;1&#xff09;设置初始化…

做金蝶BI数据分析?后悔没早遇到这套方案

金蝶ERP是企业信息化管理的核心平台&#xff0c;在企业管理上有着十分重要的地位&#xff1b;而BI数据可视化工具同样在企业管理中扮演着至关重要的角色&#xff0c;通过将复杂数据转化为直观、易懂的图形和报表&#xff0c;推动企业高效、精准科学化决策。金蝶、BI两者结合&am…

使用二进制安装安装docker

在一些情况下无法使用yum安装docker下面写了一个使用二进制安装docker的文档 官网下载地址https://download.docker.com/linux/static/stable/x86_64/ 可以按需求下载 wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.10.tgz 下载包 tar xf dcker…

JAVA小知识27:异常与异常处理全解

一、异常 异常就是代表程序出现了问题&#xff0c;像我们之前学数组的时候碰到的数组越界异常&#xff0c;以及空指针异常等等都属于开发中经常能碰到的异常。 我们学习异常不是为了在以后中避免异常&#xff0c;而是学习碰到了异常以后该如何的处理。 1.1、异常的分类 Java…