2024年 Java 面试八股文——Redis篇

目录

1、介绍下Redis Redis有哪些数据类型    难度系数:⭐

2、Redis提供了哪几种持久化方式    难度系数:⭐  

3、Redis为什么快    难度系数:⭐  

4、Redis为什么是单线程的    难度系数:⭐  

5、Redis服务器的的内存是多大    难度系数:⭐  

6、为什么Redis的操作是原子性的,怎么保证原子性的    难度系数:⭐  

7、Redis有事务吗    难度系数:⭐

8、Redis数据和MySQL数据库的一致性如何实现    难度系数:⭐⭐

9、缓存击穿,缓存穿透,缓存雪崩的原因和解决方案(或者说使用缓存的过程中有没有遇到什么问题,怎么解决的)    难度系数:⭐ 

10、哨兵模式是什么样的    难度系数:⭐⭐

11、Redis常见性能问题和解决方案    难度系数:⭐

12、MySQL里有大量数据,如何保证Redis中的数据都是热点数据    难度系数:⭐⭐


Redis(Remote Dictionary Server) 是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(string)、哈希(Hash)、列表(list)、集合(sets)、有序集合(sorted sets)等类型。

1、介绍下Redis Redis有哪些数据类型    难度系数:⭐

 Redis 支持多种数据类型,每种数据类型都有其特定的使用场景和优势。以下是 Redis 的主要数据类型:

  1. 字符串(String):(一个字符串类型最大存储容量为512M)
    • 字符串是 Redis 最基础的数据类型,你可以将任何数据存入字符串中,比如 JSON、XML 等。它不仅仅是简单的 key-value 存储,而且可以对 value 进行各种操作。
    • 常用的命令包括:SET、GET、MSET、MGET、INCR、DECR 等。
  2. 哈希(Hash):(类似于Map<string,string>)
    • Redis hash 是一个键值对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
    • 常用的命令包括:HSET、HGET、HMGET、HGETALL、HDEL 等。
  3. 列表(List):(可以重复的集合)
    • Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
    • 常用的命令包括:LPUSH、RPUSH、LPOP、RPOP、LRANGE 等。
  4. 集合(Set):(不可以重复的集合)
    • Redis 的集合是 string 类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中不允许出现重复的元素。
    • 常用的命令包括:SADD、SMEMBERS、SISMEMBER、SDIFF、SINTER、SUNION 等。
  5. 有序集合(Sorted Set):(带分数的set)
    • Redis 有序集合和集合一样也是 string 类型元素的集合, 并且集合内的元素不重复。不同的是每个元素都会关联一个 double 类型的分数。Redis 正是通过分数来为集合中的元素进行从小到大的排序。有序集合的成员是唯一的,但分数(score)可以重复。
    • 常用的命令包括:ZADD、ZRANGE、ZREM、ZCARD 等。

这些数据类型使得 Redis 能够灵活地处理各种应用场景,无论是简单的缓存需求还是复杂的数据结构处理,Redis 都能提供高效且强大的支持。

2、Redis提供了哪几种持久化方式    难度系数:⭐  

  1. Redis 提供了两种持久化的方式,分别是 RDB(Redis DataBase)和 AOF(AppendOnly File)。
  2. RDB,简而言之,就是在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上。
  3. AOF,则是换了一个角度来实现持久化,那就是将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
  4. RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 redis 重启的话,则会优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高。

3、Redis为什么快    难度系数:⭐  

Redis之所以快,主要归因于以下几个关键因素:

  1. 内存存储:Redis将数据主要存储在内存中,而内存读写速度远快于硬盘。因此,Redis能够快速地读取和写入数据,实现高性能的响应。

  2. 数据结构优化:Redis支持多种数据类型,每种数据类型都经过精心设计,以实现高效的操作。例如,Redis的字符串类型采用了SDS(简单动态字符串)实现,不仅支持修改字符串长度,还避免了C语言字符串操作中的频繁内存分配和释放。此外,Redis还针对每种数据类型提供了丰富的操作命令,这些命令都经过优化,以最小化时间复杂度。

  3. 单线程模型:Redis采用单线程模型来处理客户端请求。虽然这看似限制了Redis的并发性能,但实际上由于Redis的操作大多是基于内存的,且避免了多线程的上下文切换和锁竞争,使得Redis在处理单个请求时非常高效。此外,Redis通过IO多路复用技术(如epoll)来同时处理多个客户端连接,进一步提高了并发性能。

  4. 高效的数据编码:Redis对不同的数据类型采用不同的编码方式,以最大化性能和空间利用率。例如,对于小整数,Redis使用共享对象来减少内存占用;对于字符串,Redis会根据长度选择不同的编码方式;对于哈希、列表等复杂数据类型,Redis也采用了紧凑的存储结构和高效的操作算法。

  5. 持久化机制:虽然Redis主要关注性能,但它也提供了持久化机制,以防止数据丢失。Redis支持RDB快照和AOF日志两种持久化方式,可以根据实际需求选择。这些持久化方式都经过优化,以最小化对性能的影响。

4、Redis为什么是单线程的    难度系数:⭐  

官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了Redis利用队列技术将并发访问变为串行访问

1)绝大部分请求是纯粹的内存操作

2)采用单线程,避免了不必要的上下文切换和竞争条件

5、Redis服务器的的内存是多大    难度系数:⭐  

在Redis的配置文件中,通过maxmemory参数来指定Redis实例能够使用的最大内存量。参数的值是以字节为单位的。

例如,在Redis的配置文件redis.conf中,你可以这样设置最大内存限制:

maxmemory 1gb

或者,如果你想要设置为500MB,可以这样写:

maxmemory 524288000

一旦设置了maxmemory,当Redis使用的内存接近或达到这个限制时,它会根据配置的淘汰策略(eviction policy)来自动移除一些键,以确保不会超出内存限制。淘汰策略可以通过maxmemory-policy参数来配置,常见的策略包括:

  • noeviction:不删除任何数据,拒绝写入操作并返回一个错误。
  • allkeys-lru:根据LRU(Least Recently Used)算法删除键。
  • volatile-lru:只删除设置了过期时间的键,使用LRU算法。
  • allkeys-random:随机删除键。
  • volatile-random:只随机删除设置了过期时间的键。
  • volatile-ttl:只删除设置了过期时间的键,并且优先删除剩余时间(TTL)较短的键。

6、为什么Redis的操作是原子性的,怎么保证原子性的    难度系数:⭐  

对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。

Redis的操作之所以是原子性的,是因为Redis是单线程的。

Redis本身提供的所有API都是原子操作,Redis中的事务其实是要保证批量操作的原子性。

多个命令在并发中也是原子性的吗?

不一定, 将get和set改成单命令操作,incr 。使用Redis的事务,或者使用Redis+Lua==的方式实现.

7、Redis有事务吗    难度系数:⭐

Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis事务的实现需要用到 MULTI  EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送需要在本次事务中处理的命令,最后再发送 EXEC 命令表示事务命令结束。

8、Redis数据和MySQL数据库的一致性如何实现    难度系数:⭐⭐

Redis数据和MySQL数据库的一致性可以通过以下几种方式实现:

  1. 事务支持:MySQL支持事务,通过事务可以保证数据库操作要么全部执行成功,要么全部失败回滚,从而确保数据的一致性。在事务中,所有的修改必须符合相关约束,这样才能保证一致性。
  2. 唯一约束和外键约束:MySQL可以通过设置唯一约束和外键约束来保证数据一致性。唯一约束保证某列或者几列的取值都是唯一的,外键约束可以保证参照完整性,确保关联表之间的数据一致性。
  3. 使用消息队列:一种常见的做法是先更新MySQL数据库,然后通过发送操作缓存的消息到消息队列,进行更新Redis缓存操作。这里还需要利用消息队列的重试机制,保证缓存能够更新成功。如果多次消费失败,可能是由于网络原因或者Redis服务挂了,此时可以添加告警处理。
  4. 延时双删策略:这是在使用Redis时保持数据一致性的流行解决方案之一。其主要思想是,在更新数据库后,等待一段时间再删除Redis中的旧数据。这样做的目的是确保在更新数据库和删除Redis数据之间,如果有新的读请求,它仍然会读取到旧的但已经过时的Redis数据,而不是直接从数据库中读取新的数据。然后,当延时时间过去后,再删除Redis中的旧数据,此时新的读请求就会直接从数据库中读取新的数据。需要注意的是,经常修改的数据表不适合使用Redis,因为双删策略执行的结果是把Redis中保存的那条数据删除了,以后的查询就都会去查询数据库。

9、缓存击穿,缓存穿透,缓存雪崩的原因和解决方案(或者说使用缓存的过程中有没有遇到什么问题,怎么解决的)    难度系数:⭐ 

1. 缓存穿透

问题描述:查询一个不存在的数据,由于缓存和数据库都未命中,导致每次请求都要查询数据库,失去了缓存的意义。

解决方案

  • 空结果缓存:将查询结果为空的对象也进行缓存,并设置一个较短的过期时间(例如几分钟)。
  • 布隆过滤器:使用布隆过滤器快速判断一个元素是否存在于集合中,对于不存在的数据直接返回,不查询数据库。Redisson等框架提供了布隆过滤器的实现。
  • 应用层限流:对于频繁查询不存在的数据,可以在应用层进行限流,防止恶意攻击。

2. 缓存雪崩

问题描述:由于大量缓存同时失效,导致所有请求都转发到数据库,数据库瞬时压力过大。

解决方案

  • 随机过期时间:在设置缓存过期时间时,增加一个随机值,降低缓存集体失效的概率。
  • 预热缓存:在系统上线前或低峰时段,预先加载一些热点数据到缓存中,避免上线时大量请求导致缓存失效。
  • 熔断降级:当数据库压力过大时,可以暂时关闭缓存的更新功能,或者将部分请求降级处理,减轻数据库压力。

3. 缓存击穿

问题描述:对于设置了过期时间的热点数据,如果这些数据在过期时刻被大量并发请求访问,会导致所有请求都转发到数据库。

解决方案

  • 分布式锁:使用Redis的setnx命令、RedLock算法、Zookeeper的临时顺序节点等方式实现分布式锁,确保同一时刻只有一个请求去查询数据库并更新缓存。
  • 本地缓存:对于热点数据,可以在应用层使用本地缓存(如Guava Cache、Caffeine等)进行缓存,减少对远程缓存和数据库的访问。
  • 异步更新:当缓存失效时,可以启动一个异步任务去更新缓存,而不是等待同步查询数据库的结果。

10、哨兵模式是什么样的    难度系数:⭐⭐

redis一共有3中集群模式,1、主从模式。2、哨兵模式。3、Cluster模式

哨兵模式是为了解决主从复制模式的缺点的,即哨兵模式还是基于主从复制模式,只不过多了一个“哨兵”,当master挂掉之后,哨兵就会在在所有的从节点竞选出新的主节点

 当master挂掉之后,哨兵会自动从slave中选一个作为master,若master重新启动,master则会转化为现有的master下的一个slave,当slave切换时,会通过发布订阅方式,将slave所对应的master更改。

哨兵本身也有单点故障的问题,所以在一个一主多从的Redis系统中,可以使用多个哨兵进行监控,哨兵不仅会监控主数据库和从数据库,哨兵之间也会相互监控。每一个哨兵都是一个独立的进程,作为进程,它会独立运行

11、Redis常见性能问题和解决方案    难度系数:⭐

1. 内存占用过高

问题描述:Redis使用了过多的内存,可能导致系统资源紧张,影响性能。

解决方案

  • 优化数据结构和存储:使用更节省内存的数据结构,例如使用哈希表代替列表或集合。
  • 配置maxmemory:设置Redis实例的最大内存使用量,防止无限制地占用内存。
  • 使用LRU算法:当内存达到上限时,Redis会使用LRU(Least Recently Used)算法自动删除一些不常用的键。

2. 读写性能下降

问题描述:Redis的读写操作变得缓慢,响应时间增加。

解决方案

  • 优化数据结构:选择合适的数据结构来存储数据,避免不必要的转换和计算。
  • 管道技术:使用管道(pipelining)技术将多个命令打包发送,减少网络往返时间。
  • 关闭持久化:对于写密集型的场景,可以考虑关闭或优化Redis的持久化配置,以减少写操作的开销。

3. 阻塞操作

问题描述:Redis的某些操作(如大键值的操作、长时间的Lua脚本等)可能导致阻塞,影响整体性能。

解决方案

  • 避免大键值操作:尽量拆分大键值操作,减少阻塞时间。
  • 优化Lua脚本:减少Lua脚本的执行时间,避免长时间占用Redis资源。
  • 使用监控工具:使用监控工具(如Redis-stat、Redis-cli等)监控Redis的性能指标,及时发现并处理潜在的阻塞问题。

4. 主从复制延迟

问题描述:在Redis主从复制的场景下,从库可能存在延迟,导致读取不一致。

解决方案

  • 优化复制策略:调整复制参数(如repl-backlog-size、repl-timeout等),优化复制性能。
  • 读写分离读写:使用读写分离读写的架构,将读请求分散到多个从库上,减轻主库压力。
  • 监控复制状态:使用监控工具监控主从复制的状态和延迟情况,及时发现并处理问题。

5. 网络问题

问题描述:网络延迟或不稳定可能导致Redis性能下降。

解决方案

  • 优化网络连接:确保Redis服务器与客户端之间的网络连接稳定且延迟低。
  • 使用连接池:使用连接池技术来管理Redis连接,减少连接建立和断开的开销。

12、MySQL里有大量数据,如何保证Redis中的数据都是热点数据    难度系数:⭐⭐

要实现MySQL中的大量数据只保证Redis中存储热点数据,可以结合多种策略和技术。以下是一些具体的实现方式:

1. 基于访问频率的热点数据识别

  • 使用Redis的ZSET(有序集合): 利用Redis的有序集合(Sorted Set)结构,每个元素都会关联一个分数,可以用来表示访问频率或最近访问时间。
  • 实时更新访问频率: 当MySQL中的数据被访问时,更新Redis中对应元素的分数。分数可以是访问次数或时间戳。
  • 定期清理非热点数据: 通过设置较低的分数阈值,定期清理ZSET中分数较低(即访问频率较低)的元素。

2. 缓存预热

  • 分析历史数据: 分析MySQL的历史访问记录,识别出常规的热点数据。
  • 预加载热点数据: 在系统启动或低峰期,将这些热点数据预先加载到Redis中。

3. 使用消息队列实现数据同步

  • 设置数据库触发器: 在MySQL中设置触发器,当数据发生变化(如INSERT、UPDATE、DELETE)时,将变化的信息发送到消息队列(如Kafka、RabbitMQ)。
  • 消费队列消息: Redis的消费者服务订阅消息队列,当接收到消息时,根据消息内容判断是否为热点数据,并同步到Redis中。

4. 定期审查和优化

  • 监控和分析: 使用监控工具(如Redis监控插件、Prometheus等)实时监控Redis中数据的访问情况。
  • 定期调整: 根据监控数据,定期调整缓存策略,如修改淘汰策略、调整分数阈值等。

5. 结合LRU和LFU策略

  • 使用Redis的LRU策略: Redis默认使用LRU作为内存淘汰策略,可以确保长时间未使用的数据被优先淘汰。
  • 自定义LFU策略: 如果需要更精细的控制,可以结合Redis的TTL(Time To Live)和自定义脚本实现LFU策略。例如,每次访问时更新TTL并增加访问计数器。

6. 限制Redis存储大小

  • 配置maxmemory: 在Redis配置中设置maxmemory参数,限制Redis使用的最大内存。
  • 选择合适的淘汰策略: 根据业务需求选择合适的淘汰策略,如volatile-lru(仅淘汰带有过期时间的键中使用最少的)、allkeys-lru(淘汰所有键中使用最少的)等。

7. 分布式缓存

  • 使用Redis集群: 如果热点数据量非常大,可以考虑使用Redis集群来扩展缓存容量和性能。
  • 数据分片: 通过合理的数据分片策略,将热点数据分布到多个Redis节点上,提高系统的并发处理能力。

8. 避免大值缓存

  • 拆分大值对象: 对于过大的对象,考虑将其拆分成多个小对象进行缓存。
  • 使用压缩算法: 对缓存的数据进行压缩,减少存储空间的占用。

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

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

相关文章

pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx 文件读取漏洞复现

0x01 产品简介 pkpmbs 建设工程质量监督系统是湖南建研信息技术股份有限公司一个与工程质量检测管理系统相结合的,B/S架构的检测信息监管系统。 0x02 漏洞概述 pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx接口处存在文件读取漏洞,未经身份认证的攻击者可以利用漏洞读…

助力企业部署国产云原生数据库 XSKY星辰天合与云猿生完成产品互兼容认证

近日&#xff0c;北京星辰天合科技股份有限公司&#xff08;简称&#xff1a;XSKY 星辰天合&#xff09;与杭州云猿生数据有限公司&#xff08;简称“云猿生”&#xff09;完成了产品互兼容认证&#xff0c;星辰天合企业级分布式统一数据平台 XEDP 与云猿生的开源数据库管控平台…

机器学习:逻辑回归

概念 首先&#xff0c;逻辑回归属于分类算法&#xff0c;是线性分类器。我们可以认为逻辑回归是在多元线性回归的基础上把结果给映射到0-1的区间内&#xff0c;hθ&#xff08;x&#xff09;越接近1越有可能是正例&#xff0c;反之&#xff0c;越接近0越有可能是负例。那么&am…

C# wpf 运行时替换方法实现mvvm自动触发刷新

文章目录 前言一、如何实现&#xff1f;1、反射获取属性2、定义替换方法3、交换属性的setter方法 二、完整代码1、接口2、项目 三、使用示例1、倒计时&#xff08;1&#xff09;、继承ViewModelBase&#xff08;2&#xff09;、定义属性&#xff08;3&#xff09;、属性赋值&am…

iOS 创建依赖其他开源库的开源库

参考文章&#xff08;感激各位大神前路的明灯&#xff09; 参考文章一 参考项目 整体流程 流程简介 1&#xff09;使用pod命令行创建本地项目和git仓库并回答终端里的四个问题 2&#xff09;编辑podspec文件 3&#xff09;将需要开源的代码添加到Development Pods文件夹中&am…

iOS 实现类似抖音翻页滚动效果

这里是效果图 参考抖音的滚动效果&#xff0c;需要我们在结束拖动的时候&#xff0c;动画设置偏移量 这里有一个注意点&#xff0c;由于我们是在拖动结束的时候&#xff0c;手动改变tableview的偏移量&#xff0c; 改变了tableView 自身原有的的滚动效果&#xff0c;所以我们…

近几年视频取证、视频篡改检测技术发展现状及挑战

前言 本文主要搜集了视频取证各个子领域近几年的高影响因子/引用数的文章及其主要思想和做法&#xff0c;旨在分析目前视频篡改检测的发展现状与热点领域&#xff0c;文章中也融合了自己的一点看法和展望&#xff0c;欢迎感兴趣的同学和我多多沟通。 本文无论是文献搜集还是方…

Linux网络抓包工具tcpdump是如何实现抓包的,在哪个位置抓包的?

Linux网络抓包工具tcpdump是如何实现抓包的&#xff0c;在哪个位置抓包的&#xff1f; 1. tcpdump抓包架构2. BPF介绍3. 从内核层面看tcpdump抓包流程3.1. 创建socket套接字3.2. 挂载BPF程序 4. 网络收包抓取5. 网络发包抓取6. 疑问和思考6.1 tcpdump抓包跟网卡、内核之间的顺序…

【MySQL | 第八篇】在MySQL中,如何定位慢查询以及对应解决方法?

文章目录 8.在MySQL中&#xff0c;如何定位慢查询以及对应解决方法&#xff1f;8.1MySQL慢查询日志8.1.1开启慢查询&#xff08;1&#xff09;修改配置文件&#xff08;2&#xff09;设置全局变量 8.1.2日志记录在表上&#xff08;实践&#xff09;8.1.3日志记录在文件上&#…

大数据开发工作中的数仓设计(Hadoop,hive ,mysql )

1.HUE工具介绍使用 HUE是CDH提供一个hive和hdfs的操作工具&#xff0c;在hue中编写了hiveSQl也可以操作hdfs的文件 http://主机名字:端口号 hdfs的web访问端口 http://主机名字:端口号 hdfs的程序访问端口 进入后确保hdfs hive yarn 开启 在点击hue开启 在这里面也可以进行h…

Xinlinx FPGA如何降低Block RAM的功耗

FPGA中降低Block RAM的功耗有两种方式&#xff0c;分别是选择合适的写操作模式以及Block RAM的实现算法及综合设置。我们知道对于采用IP核生成对应的RAM时&#xff0c;会有最小面积算法、低功耗算法以及固定原语&#xff0c;但是采用最小功耗算法有时由于级联长度导致无法实现&…

币圈Cryptosquare论坛

Cryptosquare综合性资讯论坛汇集了币圈新闻、空投信息、社会热点以及与Web3相关的工作信息。让我们一起解锁加密世界的种种可能性&#xff0c;探索Cryptosquare论坛带来的精彩&#xff01; 币圈新闻板块&#xff1a; Cryptosquare论坛的币圈新闻板块是用户获取最新加密货币行业…

Elasticsearch中【文档查询】DSL语句以及对应的Java实现

目录 全文检索查询 精准查询 布尔查询 排序、分页查询 高亮 地理查询 复合查询 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一般测…

全新突破:「Paraverse平行云」实现3D/XR企业级应用全面接入Apple Vision Pro

在前不久举行的GTC开发者大会上&#xff0c;英伟达引领行业风向&#xff0c;宣布其Omniverse平台能够助力企业将3D/XR应用流畅传输至Apple Vision Pro混合现实头显。在英伟达与苹果这两大科技巨头的合作下,此举标志着3D/XR技术迈向新纪元的关键一步。「Paraverse平行云」实时云…

《HCIP-openEuler实验指导手册》1.6 Apache静态资源配置

知识点 常用用途&#xff1a; 软件仓库镜像及提供下载服务&#xff1a; 配置步骤 删除网站主目录中的文件&#xff08;本实验机目录为/home/source ip为192.168.12.137 端口为81&#xff09; cd /home/source rm -rf *在主目录中新建6个文件夹如下图 mkdir test{1..6}新建…

将本地.mp4推流成rtsp流?(windows)

概述 如何在本地机器上进行rtsp推流整个操作&#xff1f; 1.软件安装 1. 推流-ffmpeg下载 从官网下载windows版本&#xff0c;该版本已经编译好了 放到C&#xff1a;下找一个目录解压&#xff0c;我放到C:\ffmpeg-7.0-essentials_build\进入系统环境变量设置&#xff1a;将…

使用nodejs和python脚本实现爬虫程序,并将抓取数据生成词云图看板

创建项目&#xff0c;初始化目录结构。 创建项目名称为pachong。运行 npm init -y 初始化项目。修改package.json文件中的type属性为module。安装 npm 包&#xff1a;npm install puppeteer #爬虫 | 自动化UI测试首先确保你的电脑上有python3环境安装两个python包 pip instal…

c#数据库: 8.在窗体上显示学生信息

以上一章学生信息表为例&#xff0c;首先将查询的学生信息存储到数据集中&#xff0c;然后将数据集与数据显示控件绑定&#xff0c;从而实现学生信息在窗体上的显示 &#xff08;1&#xff09;创建一个名为StudentGridView的窗体应用程序&#xff0c;为窗体添加一个DataGridVi…

Stable Diffusion 模型分享:Counterfeit-V3.0(动漫)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 高质量动漫风格模型。 条目内容类型大模型基础模…

Java进阶-JINQ详解与使用

本文详细介绍了JINQ&#xff08;Java Integrated Query&#xff09;&#xff0c;一种强化Java中数据查询能力的库&#xff0c;提供类SQL的查询语法和类型安全的操作。文章首先解释了JINQ的基本功能和应用&#xff0c;随后通过具体示例展示了如何使用JINQ进行数据过滤、投影、连…