当前位置: 首页 > news >正文

杭州网站建设很棒/手机百度提交入口

杭州网站建设很棒,手机百度提交入口,微信推送在哪个网站做,英文网站一般用什么字体目录 1.Redis中什么是Big Key(大key) 2.Big Key会导致什么问题 3.如何发现 bigkey? 4.为什么redis生产环境慎用keys *命令 5.如何处理大量 key 集中过期问题 6.使用批量操作减少网络传输 7.缓存穿透 8.缓存击穿 9.缓存雪崩 10.缓存污染(或满了…

目录

1.Redis中什么是Big Key(大key)

2.Big Key会导致什么问题

3.如何发现 bigkey?

4.为什么redis生产环境慎用keys *命令

5.如何处理大量 key 集中过期问题

6.使用批量操作减少网络传输

7.缓存穿透

8.缓存击穿

9.缓存雪崩

10.缓存污染(或满了)

11.Redis共支持八种淘汰策略

12.数据库和缓存一致性


1.Redis中什么是Big Key(大key)

Redis中的Big Key(大key)指的是占用大量内存的键值对。在Redis中,内存是一种宝贵的资源,如果有些键值对占用过多的内存,会导致Redis服务器的性能下降,甚至可能导致内存溢出。

具体来说,Redis中的Big Key通常是指占用内存超过一定阈值(例如10KB)的键值对。这些键值对可能包括大量的文本或二进制数据,或者包括大量的哈希字段或集合元素等。对于这些Big Key,需要进行特殊的处理和优化,以减少内存占用,并提高Redis服务器的性能和可靠性。

出现Redis Big Key的原因可能是存储了大量的文本或二进制数据,或者存储了大量的哈希字段或集合元素等。

2.Big Key会导致什么问题

Big Key(大key)是Redis中占用大量内存的键值对,如果存在过多的Big Key,会对Redis服务器的性能和可靠性产生负面影响,具体包括以下几个方面的危害:

  1. 内存占用:Big Key占用大量内存,如果Redis服务器的内存不足,就会导致Redis服务器的性能下降,甚至可能导致Redis服务器崩溃。

  2. 操作延迟:对Big Key进行读写操作时,会占用大量CPU资源和IO资源,从而导致操作延迟增加。如果有多个客户端同时操作Big Key,就会出现大量的等待,从而导致Redis服务器的性能下降。

  3. 持久化延迟:如果需要对Big Key进行持久化,例如写入到RDB文件或AOF文件中,就会占用大量CPU资源和IO资源,从而导致持久化延迟增加。如果Redis服务器的负载过高,就可能导致持久化失败或延迟过高,从而影响数据的可靠性和一致性。

  4. 数据丢失:如果Redis服务器的内存不足,就可能出现内存溢出的情况,从而导致Big Key数据丢失。如果Big Key包含重要的数据,就可能导致数据丢失或数据不一致的问题。

综上所述,Big Key的存在会对Redis服务器的性能和可靠性产生负面影响,可能导致内存占用、操作延迟、持久化延迟、数据丢失等问题。因此,需要对Big Key进行特殊处理和优化,以减少内存占用,并提高Redis服务器的性能和可靠性。

3.如何发现 bigkey?

1.使用Redis自带的--bigkeys参数可以快速地查找Big Key,具体步骤如下:

  1. 启动Redis客户端时,添加--bigkeys参数,例如:
    redis-cli --bigkeys
    
  2. Redis客户端连接到Redis服务器后,执行命令,例如:
    bigkeys
  3. Redis服务器会扫描所有的键值,找出占用内存较大的键值,并返回其信息,例如:
    bigkeys
    # Scanning the entire keyspace to find biggest keys as well as
    # average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
    # per 100 SCAN commands (not usually needed).
    [00.00%] Biggest string found so far 'my_big_string' with 100 bytes
    [00.00%] Biggest list found so far 'my_big_list' with 10 elements
    [00.00%] Biggest set found so far 'my_big_set' with 5 members
    [99.99%] Biggest zset found so far 'my_big_zset' with 1000 members
    [99.99%] Biggest hash found so far 'my_big_hash' with 10 fields
    -------- summary --------
    Sampled 10000 keys in the keyspace!
    Total key length in bytes is 51451 (avg len 5.15)
    Biggest string found 'my_big_string' has 100 bytes
    Biggest list found 'my_big_list' has 10 items
    Biggest set found 'my_big_set' has 5 members
    Biggest zset found 'my_big_zset' has 1000 members
    Biggest hash found 'my_big_hash' has 10 fields

    通过上述方法,可以快速地找出所有的Big Key,并了解其大小和类型,从而进行进一步的优化和处理。需要注意的是,使用--bigkeys参数会扫描整个Redis数据库,可能会对Redis服务器的性能造成一定的影响,因此应该在合适的时机进行使用。

2.使用Redis命令(生产环境慎用):Redis提供了一些命令可以查看所有键的信息和大小,例如KEYS命令可以列出所有键名,TYPE命令可以查看键值的类型,STRLEN命令可以查看字符串键值的长度,LLEN命令可以查看列表键值的长度等。通过这些命令可以发现Big Key,例如字符串键值长度超过阈值,列表键值长度超过阈值等。

3.使用Redis工具:Redis提供了一些工具可以帮助发现Big Key,例如redis-rdb-tools工具可以解析RDB文件,列出所有键值的信息和大小,redis-cli工具可以连接到Redis服务器,并执行一些命令,例如查看所有键值的信息和大小等。通过这些工具可以更方便地发现Big Key。

4.使用第三方工具:除了Redis自带的工具外,还有一些第三方工具可以帮助发现Big Key,例如Redis官方推荐的bigkeys工具可以扫描Redis数据库,发现所有的Big Key,并按照大小排序。

4.为什么redis生产环境慎用keys *命令

在Redis中,keys命令是用于模式匹配键名的命令,它可以根据指定的模式查找匹配的键名,从而实现对数据的快速检索。在实际开发中,我们可能需要使用keys命令来查询所有的键名。然而,在Redis的生产环境中,我们需要慎用keys *命令,原因如下:

  1. 性能问题:keys *命令会遍历整个Redis数据库,将所有的键名加载到内存中,这可能会耗费大量的系统资源,导致Redis服务器的性能下降,甚至引起Redis服务器的宕机。

  2. 阻塞问题:在Redis执行keys *命令时,会阻塞所有其他客户端的命令请求,直到keys *命令执行完成,这可能会导致其他客户端的请求被阻塞,从而影响系统的响应速度和稳定性。

如果你需要查询某个特定前缀的键名,可以使用Redis的SCAN命令,它可以分批次地迭代数据库中的键名,避免一次性加载全部键名,从而提高了性能和稳定性。例如,可以使用如下命令来查询所有以user:为前缀的键名:

SCAN 0 MATCH user:*

这个命令会返回一个游标和一批匹配的键名,你可以根据游标的值来获取下一批匹配的键名。需要注意的是,使用SCAN命令查询键名时,可能会出现重复或漏掉某些键名的情况,因此需要进行一定的处理和去重操作。

除了使用SCAN命令外,还可以在Redis的数据结构中设置索引或使用适当的命令来查询数据,以提高检索的效率和精度。例如,在使用Redis的Hash数据结构时,可以使用HGETALL命令来查询所有的字段和值,而不需要查询所有的键名。

5.如何处理大量 key 集中过期问题

在Redis中,当一个键过期时,Redis会自动将其从数据库中删除。如果一个Redis数据库中存在大量的键,且这些键的过期时间相近,当这些键过期时,可能会引发一些问题,例如:

  1. 内存使用问题:当大量键集中过期时,这些键占用的内存可能无法及时释放,从而导致Redis服务器的内存使用量持续升高,直到Redis服务器内存耗尽而崩溃。

  2. 性能问题:当大量键集中过期时,Redis服务器需要花费大量的CPU时间来处理这些过期键的删除操作,这可能会导致Redis服务器的性能下降,从而影响Redis服务器的响应速度和稳定性。

为了避免这些问题,我们可以采取一些措施来减轻过期键集中带来的影响,例如:

  1. 合理设置键的过期时间:在使用Redis时,需要根据业务需求和系统资源情况,合理设置键的过期时间,避免大量键集中过期。可以根据数据访问模式、业务需求等因素来调整过期时间。

  2. 分散过期时间:可以通过将键的过期时间随机分散开,避免过期键集中带来的问题。可以在设置键的过期时间时,加入一定的随机因素,使得过期时间不完全相同。

  3. 使用Redis的lazy-free特性,可以让Redis采用异步方式延迟释放键使用的内存,从而避免阻塞主线程,提高Redis服务器的性能和稳定性。

6.使用批量操作减少网络传输

Redis支持批量操作命令,通过一次性向Redis服务器发送多个命令请求,可以减少网络传输次数,从而提高Redis服务器的性能和效率。常见的批量操作命令有:

  1. MGET和MSET命令:MGET命令可以一次性获取多个键的值,而MSET命令可以一次性设置多个键的值。例如,下面的命令可以一次性获取键a、b、c的值:
    MGET a b c
    
  2. DEL命令:DEL命令可以一次性删除多个键。例如,下面的命令可以一次性删除键a、b、c:
    DEL a b c
    
  3. PIPES命令:PIPELINE命令可以将多个命令打包发送到Redis服务器,减少网络传输次数,并且可以通过一次性获取多个命令的返回结果,提高Redis服务器的性能。例如,下面的命令可以同时执行多个命令:
    REDISCLI> PIPELINE
    REDISCLI> SET a 1
    REDISCLI> INCR b
    REDISCLI> GET c
    REDISCLI> EXEC
    

    需要注意的是,使用批量操作命令时,需要根据实际情况,合理设置命令参数和调整Redis服务器的配置和参数,以达到最佳性能和稳定性。

7.缓存穿透

缓存穿透是指查询一个不存在的数据,由于缓存中没有数据,导致查询请求绕过缓存直接查询数据库,从而造成数据库压力过大的问题。缓存穿透问题是由于恶意攻击、缓存数据过期时间不合理、业务数据分布不均等因素造成的。

恶意攻击是缓存穿透的一种常见形式,攻击者故意发送不存在的查询请求,以达到消耗数据库资源的目的。例如,攻击者可以通过在查询参数中添加特殊字符或者构造恶意请求来绕过缓存查询数据库。

缓存数据过期时间不合理是缓存穿透的另一个常见原因。如果缓存中的数据过期时间设置得过短或者根本不设置,那么在数据过期后查询请求就会绕过缓存查询数据库。

业务数据分布不均也会导致缓存穿透的问题。例如,如果一些热点数据的访问频率非常高,而其他数据的访问频率很低,那么缓存中可能只存储了部分热点数据,而其他数据则没有被缓存。当查询请求访问的是缓存中没有的数据时,就会绕过缓存查询数据库,从而造成数据库压力过大。

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

  1. 布隆过滤器(Bloom Filter):使用布隆过滤器来过滤查询请求,可以有效地识别查询请求是否合法。布隆过滤器是一种基于哈希的数据结构,可以快速地判断一个元素是否在集合中,具有高效、快速、低存储等特点。

  2. 缓存空对象:在缓存中缓存一些空对象,当查询请求访问不存在的数据时,返回缓存中的空对象,避免查询请求绕过缓存直接访问数据库。

  3. 设置合理的缓存过期时间:设置合理的缓存过期时间,可以减少缓存穿透的问题。一般来说,缓存过期时间应该与业务数据的访问频率相匹配,以确保缓存中存储的数据都是热点数据。

  4. 限制恶意请求:限制查询请求的访问频率和查询参数,可以有效地防止恶意攻击和缓存穿透的问题。

8.缓存击穿

缓存击穿是指在高并发访问下,某个热点数据的缓存过期失效后,大量的请求涌入数据库,导致数据库瞬间压力激增,严重影响系统的稳定性和性能。缓存击穿通常是由于热点数据的访问频率非常高,导致缓存中的数据过期时间很短,同时查询请求也非常多,从而导致缓存中的数据被同时查询失效,造成大量请求绕过缓存直接查询数据库。

缓存击穿的解决方案一般有以下几种:

  1. 加锁:当缓存失效时,可以使用分布式锁的方式,将请求串行化,只允许一个请求访问数据库,其他请求等待结果返回。

  2. 限流:在热点数据的访问频率非常高的情况下,可以采用限流的方式,控制并发请求的数量,避免瞬间涌入大量的请求。

  3. 数据预热:将热点数据预先加载到缓存中,缓存失效时可以快速地从缓存中获取数据,避免大量请求绕过缓存直接查询数据库。

  4. 延迟缓存加载:当缓存失效时,不立即去数据库查询数据,而是等待一段时间后再去查询,期间如果有相同的查询请求,直接返回缓存中的数据。

  5. 使用二级缓存:将数据同时存储在多级缓存中,例如将热点数据存储在内存缓存和分布式缓存中,当内存缓存失效时,可以从分布式缓存中获取数据,避免大量请求绕过缓存直接查询数据库。

  6. 设置热点数据永远不过期。

9.缓存雪崩

缓存雪崩指的是在高并发访问下,缓存中大量的数据同时失效或者缓存服务不可用,导致大量请求涌入数据库,导致数据库瞬间压力激增,严重影响系统的稳定性和性能。缓存雪崩通常是由于缓存服务器宕机、缓存数据同一时间到期等因素造成的。

与缓存击穿不同,缓存雪崩是由于缓存中大量的数据同时失效或者缓存服务不可用造成的,而不是由某个热点数据的访问频率非常高导致的。

缓存雪崩的解决方案一般有以下几种:

  1. 数据分布:将缓存中的数据均匀地分布到不同的服务器上,避免某个缓存服务器宕机或者数据同时失效导致的问题。

  2. 限流:在缓存失效的情况下,采用限流的方式,控制并发请求的数量,避免瞬间涌入大量的请求。

  3. 备份缓存:将缓存中的数据备份到另一个缓存服务器或者本地文件系统中,当缓存失效或者服务不可用时,可以快速地从备份中恢复数据,避免大量请求绕过缓存直接查询数据库。

  4. 服务降级:当缓存失效或者服务不可用时,可以通过服务降级的方式,暂时屏蔽某些功能或者接口,保证核心功能的正常运行。

  5. 增加缓存有效期的随机性:在缓存中增加随机有效期,避免大量缓存同时失效,导致缓存雪崩的问题。

10.缓存污染(或满了)

缓存污染问题说的是缓存中一些只会被访问一次或者几次的的数据,被访问完后,再也不会被访问到,但这部分数据依然留存在缓存中,消耗缓存空间。

缓存污染会随着数据的持续增加而逐渐显露,随着服务的不断运行,缓存中会存在大量的永远不会再次被访问的数据。缓存空间是有限的,如果缓存空间满了,再往缓存里写数据时就会有额外开销,影响Redis性能。这部分额外开销主要是指写的时候判断淘汰策略,根据淘汰策略去选择要淘汰的数据,然后进行删除操作。

解决方案一般有以下几种:

1.设置多大最大缓存

系统的设计选择是一个权衡的过程:大容量缓存是能带来性能加速的收益,但是成本也会更高,而小容量缓存不一定就起不到加速访问的效果。一般来说,我会建议把缓存容量设置为总数据量的 15% 到 30%,兼顾访问性能和内存空间开销。

对于 Redis 来说,一旦确定了缓存最大容量,比如 4GB,你就可以使用下面这个命令来设定缓存的大小了:

不过,缓存被写满是不可避免的, 所以需要数据淘汰策略。

CONFIG SET maxmemory 4gb

 2.使用缓存淘汰策略

11.Redis共支持八种淘汰策略

Redis共支持八种淘汰策略,分别是noeviction、volatile-random、volatile-ttl、volatile-lru、volatile-lfu、allkeys-lru、allkeys-random 和 allkeys-lfu 策略。

怎么理解呢?主要看分三类看:

不淘汰

  • noeviction (v4.0后默认的)不进行淘汰,当内存不足时,新的写入操作会报错。

对设置了过期时间的数据中进行淘汰

  • 随机:volatile-random,从所有的键中,随机淘汰一部分键。这种策略适合用于 Redis 所存储的数据没有重要性区分的情况,随机淘汰一部分键不会对数据产生太大影响。
  • ttl:volatile-ttl,从设置了过期时间的键中,淘汰剩余时间最短的键。这种策略适合用于 Redis 所存储的数据有重要性区分的情况,对于过期时间短的数据优先淘汰。
  • lru:volatile-lru,从所有的键中,使用 LRU 算法进行淘汰,即淘汰最近最少使用的键。这种策略适合用于 Redis 所存储的数据没有重要性区分的情况。
  • lfu:volatile-lfu,从设置了过期时间的键中,使用 LFU 算法进行淘汰,即淘汰使用频率最少的键。这种策略适合用于 Redis 所存储的数据有重要性区分的情况,对于使用频率少的数据优先淘汰。

全部数据进行淘汰

  • 随机:allkeys-random,从所有的键中,随机淘汰一部分键。这种策略适合用于 Redis 所存储的数据没有重要性区分的情况,随机淘汰一部分键不会对数据产生太大影响。
  • lru:allkeys-lru,从所有的键中,使用 LRU 算法进行淘汰,即淘汰最近最少使用的键。这种策略适合用于 Redis 所存储的数据没有重要性区分的情况。
  • lfu:allkeys-lfu,从所有的键中,使用 LFU 算法进行淘汰,即淘汰使用频率最少的键。这种策略适合用于 Redis 所存储的数据没有重要性区分的情况。

12.数据库和缓存一致性

在使用缓存时,最常见的问题之一就是缓存和数据库之间的一致性问题。由于缓存和数据库是两个独立的系统,所以当数据被更新或删除时,缓存中的数据可能会过期或失效,导致缓存中的数据和数据库中的数据不一致。这可能会导致一些问题,例如:

  1. 脏数据的问题:缓存中的数据已经失效或过期,但是客户端仍然从缓存中获取了这些数据。这可能会导致错误或不正确的结果。

  2. 数据丢失的问题:当数据库中的数据被删除时,缓存中的数据仍然存在,这会导致缓存中的数据变得不一致。

为了解决这些问题,需要确保在更新或删除数据库中的数据时,相应的缓存数据也被更新或删除。可以使用以下策略来确保数据库和缓存之间的一致性:

1.延时双删方案

这是一种简单有效的方案,其核心思想是在更新数据库时,先删除缓存中的数据,再更新数据库,最后再次删除缓存中的数据。这样做可以保证当缓存失效时,不会从数据库中读取旧数据。

但是,由于删除缓存和更新数据库都需要时间,因此需要在代码中增加适当的等待时间,保证在缓存失效之前完成数据库的更新。此外,如果在等待时间内缓存已经被其他操作重新写入,这种方案就可能失效。

2.更新缓存方案

这种方案的核心思想是在更新数据库时,先更新数据库,再更新缓存中的数据。这样可以确保在缓存中的数据始终是最新的。

但是,这种方案会面临一个问题:当多个请求同时更新同一个数据时,缓存中可能会出现脏数据。为了解决这个问题,可以引入分布式锁或者乐观锁来避免并发更新。

3.双写一致性方案

这种方案的核心思想是在更新数据库时,同时更新缓存中的数据,确保缓存中的数据和数据库中的数据始终一致。

但是,这种方案会面临一个问题:如果更新数据库失败,而缓存中的数据已经被更新,那么缓存中的数据就会变成脏数据。为了解决这个问题,可以采用事务来保证数据的一致性,如果更新数据库失败,则回滚事务,同时将缓存中的数据也进行回滚。此外,还可以采用写后读一致性的方案,先更新数据库,再更新缓存,确保缓存中的数据一定是最新的。如果读取到的缓存数据已经过期,则重新从数据库中读取数据。

4.利用消息队列

通过将数据更新操作放入消息队列中,先更新数据库,再通过消息队列异步更新缓存,确保缓存和数据库数据一致。通过消息队列可以实现高可靠、高性能的异步更新,同时避免了缓存和数据库之间的直接交互。需要注意的是,使用消息队列会增加系统的复杂度和延迟,需要在实际情况中进行权衡。

相关文章:

Redis高频面试题汇总(下)

目录 1.Redis中什么是Big Key(大key) 2.Big Key会导致什么问题 3.如何发现 bigkey? 4.为什么redis生产环境慎用keys *命令 5.如何处理大量 key 集中过期问题 6.使用批量操作减少网络传输 7.缓存穿透 8.缓存击穿 9.缓存雪崩 10.缓存污染(或满了…...

Windows修改Docker安装目录修改Docker镜像目录,镜像默认存储位置存放到其它盘

Windows安装Docker,默认是安装在C盘,下载镜像后会占用大量空间,这时需要调整镜像目录;场景:不想连服务器或者没有服务器,想在本地调试服务,该需求就非常重要。基于WSL2安装docker后,…...

376. 摆动序列——【Leetcode每日刷题】

376. 摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个…...

mgre实验

实验思路 1、首先根据拓扑结构合理分配IP地址,并对各个路由器的IP地址和R5环回接口的IP地址进行配置。 2、让私网中的边界路由器对ISP路由器做缺省路由。 3、根据实验要求,对需要配置不同类型认证的路由器进行认证配置,和需要不同封装的协议…...

一文彻底了解Zookeeper(介绍篇)

zookeeper 是什么? zookeeper是一个分布式协作框架,提供高可用,高性能,强一致等特性 zookeeper 有哪些应用场景? 分布式锁:分布式锁是指在分布式环境中,多个进程或线程需要互斥地访问某个共享…...

1. ELK Stack 理论篇之什么是ELK Stack?

ELK Stack 理论篇之什么是ELK Stack?1.1 什么是 ELK Stack?1.2 ELK Stack的发展史1.2.1 Elasticsearch1.2.2 引入 Logstash 和 Kibana,产品更强大1.2.3 社区越来越壮大,用例越来越丰富1.2.4 然后我们向 ELK 中加入了 Beats1.2.5 那么&#x…...

两道有关链表的练习

目录 一、分割链表 二、奇偶链表 一、分割链表 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1: 输…...

Python uiautomator2安卓自动化测试

一、前言 uiautomator2是Python对Android设备进行UI自动化的库,支持USB和WIFI链接,可以实现获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作。 重点是它可以实现安卓自动化采集,甚至是群控采集,且安装和…...

Leetcode. 160相交链表

文章目录指针解法指针解法 核心思路 : 先 分别求两个链表的长度 然后长的链表先走 差距步(长-短) 最后长链表和短链表同时走 ,第一地址相同的就是交点 ,注意一定是地址相同 不可能出现上图这种情况 ,因为C1…...

MDPs —— 马尔可夫决策定义与算法

文章目录MDPs 定义——由实例开始时序决策问题给游戏增点乐子*为什么要有折扣游戏的解——原则所以,什么是 MDPs?MDPs 的基本原理、表示光环原理效用的求解是反向传播的原则不变条件MDPs 的表示MDPs 求解效用迭代法缺点原则迭代法MDPs 定义——由实例开始…...

【C++】图

本文包含了图的基本概念 1.相关概念 1.1 无/有向 无向图&#xff1a;每一个顶点之间的连线没有方向 有向图&#xff1a;连线有方向&#xff08;类似离散数学的二元关系 <A,B>代表从A到B的边&#xff0c;有方向&#xff09; <A,B>中A为始点&#xff0c;B为终点在…...

尾递归优化

文章目录1. 前言2. 什么尾调用&#xff08;Tail Call&#xff09;&#xff1f;3. 尾调用优化4. Linux内核下的尾递归优化使用5. 参考资料1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;对此给读者带来的损失&#xff0c;作者不错任何承诺。 2. 什么尾调用…...

P1120 小木棍(搜索+剪枝)

题目链接&#xff1a;P1120 小木棍 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入&#xff1a; 9 5 2 1 5 2 1 5 2 1 样例输出&#xff1a; 6 分析&#xff1a;这道题一看数据范围就知道是搜索&#xff0c;但关键是需要剪枝。 首先我们求出所有木棍的长度和&am…...

【专项训练】动态规划-3

动态规划:状态转移方程、找重复性和最优子结构 分治 + 记忆化搜索,可以过度到动态规划(动态递推) function DP():# DP状态定义# 需要经验,需把现实问题定义为一个数组,一维、二维、三维……dp =[][] # 二维情况for i = 0...M:...

【Linux】信号+再谈进程地址空间

目录 一、Linux中的信号 1、Linux中的信号 2、进程对信号的处理 3、信号的释义 二、信号的捕捉 1、信号的捕捉signal() 2、信号的捕捉sigaction() 三、信号如何产生&#xff1f; 1、kill()用户调用kill向操作系统发送信号 通过命令行参数模仿写一个kill命令 2、rais…...

C++回顾(二十一)—— list容器

21.1 list概述 list是一个双向链表容器&#xff0c;可高效地进行插入删除元素。list不可以随机存取元素&#xff0c;所以不支持at.(pos)函数与[]操作符。It(ok) it5(err)需要添加头文件&#xff1a;#include <list> 21.2 list构造 &#xff08;1&#xff09;默认构造…...

爱国者一体机电脑蓝屏怎么U盘重装系统教学?

爱国者一体机电脑蓝屏怎么U盘重装系统教学&#xff1f;有用户使用的爱国者一体机电脑开机了之后突然变成了蓝屏的了。而且无法继续使用了&#xff0c;那么遇到这样的蓝屏问题怎么去进行系统的重装呢&#xff1f;一起来看看以下的U盘重装系统教学吧。 准备工作&#xff1a; 1、U…...

Vue学习笔记(9)

9.1 axios 9.1.1 概述 Axios是一个流行的基于Promise的HTTP客户端&#xff0c;用于在浏览器和Node中发送HTTP请求。它可以用于处理各种请求类型&#xff0c;例如GET&#xff0c;POST等。Axios可以很容易地与现代前端框架和库集成&#xff0c;例如React&#xff0c;Vue等。 A…...

中值滤波+Matlab仿真+频域响应分析

中值滤波 文章目录中值滤波理解中值滤波的过程Matlab 实现实际应用频域分析中值滤波是一种滤波算法&#xff0c;其目的是去除信号中的噪声&#xff0c;而不会对信号本身造成太大的影响。它的原理非常简单&#xff1a;对于一个给定的窗口大小&#xff0c;将窗口内的数值排序&…...

自然语言处理中数据增强(Data Augmentation)技术最全盘点

与“计算机视觉”中使用图像数据增强的标准做法不同&#xff0c;在NLP中&#xff0c;文本数据的增强非常少见。这是因为对图像的琐碎操作&#xff08;例如将图像旋转几度或将其转换为灰度&#xff09;不会改变其语义。语义上不变的转换的存在是使增强成为Computer Vision研究中…...

PINN解偏微分方程实例1

PINN解偏微分方程实例11. PINN简介2. 偏微分方程实例3. 基于pytorch实现代码4. 数值解参考资料1. PINN简介 PINN是一种利用神经网络求解偏微分方程的方法&#xff0c;其计算流程图如下图所示&#xff0c;这里以偏微分方程(1)为例。 ∂u∂tu∂u∂xv∂2u∂x2\begin{align} \frac{…...

【python 基础篇 十二】python的函数-------函数生成器

目录1.生成器基本概念2.生成器的创建方式3.生成器的输出方式4.send()方法5.关闭生成器6.注意事项1.生成器基本概念 是一个特色的迭代器&#xff08;迭代器的抽象层级更高&#xff09;所以拥有迭代器的特性 惰性计算数据 节省内存 ----就是不是立马生成所有数据&#xff0c;而是…...

elasticsearch全解 (待续)

目录elasticsearchELK技术栈Lucene与Elasticsearch关系为什么不是其他搜索技术&#xff1f;Elasticsearch核心概念Cluster&#xff1a;集群Node&#xff1a;节点Shard&#xff1a;分片Replia&#xff1a;副本全文检索倒排索引正向和倒排es的一些概念文档和字段索引和映射mysql与…...

springboot2集成knife4j

springboot2集成knife4j springboot2集成knife4j 环境说明集成knife4j 第一步&#xff1a;引入依赖第二步&#xff1a;编写配置类第三步&#xff1a;测试一下 第一小步&#xff1a;编写controller第二小步&#xff1a;启动项目&#xff0c;访问api文档 相关资料 环境说明 …...

Qt 性能优化:CPU占有率高的现象和解决办法

一、前言 在最近的项目中&#xff0c;发现执行 Qt 程序时&#xff0c;有些情况下的 CPU 占用率奇高&#xff0c;最高高达 100%。项目跑在嵌入式板子上&#xff0c;最开始使用 EGLFS 插件&#xff0c;但是由于板子没有单独的鼠标层&#xff0c;导致鼠标移动起来卡顿&#xff0c…...

MySQL专题(学会就毕业)

MySQL专题0.准备sql设计一张员工信息表&#xff0c;要求如下&#xff1a;编号&#xff08;纯数字&#xff09;员工工号 (字符串类型&#xff0c;长度不超过10位)员工姓名&#xff08;字符串类型&#xff0c;长度不超过10位&#xff09;性别&#xff08;男/女&#xff0c;存储一…...

Java高级技术:单元测试、反射、注解

目录 单元测试 单元测试概述 单元测试快速入门 单元测试常用注解 反射 反射概述 反射获取类对象 反射获取构造器对象 反射获取成员变量对象 反射获取方法对象 反射的作用-绕过编译阶段为集合添加数据 反射的作用-通用框架的底层原理 注解 注解概述 自定义注解 …...

C语言初识

#include <stdio.h>//这种写法是过时的写法 void main() {}//int是整型的意思 //main前面的int表示main函数调用后返回一个整型值 int main() {return 0; }int main() { //主函数--程序的入口--main函数有且仅有一个//在这里完成任务//在屏幕伤输出hello world//函数-pri…...

Cadence Allegro 导出Etch Length by Layer Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Etch Length by Layer Report作用3,Etch Length by Layer Report示例4,Etch Length by Layer Report导出方法4.2,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...

无监督对比学习(CL)最新必读经典论文整理分享

对比自监督学习技术是一种很有前途的方法&#xff0c;它通过学习对使两种事物相似或不同的东西进行编码来构建表示。Contrastive learning有很多文章介绍&#xff0c;区别于生成式的自监督方法&#xff0c;如AutoEncoder通过重建输入信号获取中间表示&#xff0c;Contrastive M…...