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

中国营销传播网官网/苏州首页关键词优化

中国营销传播网官网,苏州首页关键词优化,wordpress 商城 插件,百度站长平台链接Redis 数据类型及其应用场景 Redis 是什么? Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库,基于Key/Value结构存储数据,通常用来 缓解高并发场景下对某一资源的频繁请求 ,减轻数据库的压力。它支持多种数据类型,如字符串、…

Redis 数据类型及其应用场景

Redis 是什么?

Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库,基于Key/Value结构存储数据,通常用来 缓解高并发场景下对某一资源的频繁请求 ,减轻数据库的压力。它支持多种数据类型,如字符串、哈希、列表、集合、有序集合等。Redis以其高性能、高可靠性和丰富的特性而闻名,被广泛应用于缓存、消息队列、实时分析等领域。

Redis 的优势

  1. 高性能:Redis的所有数据都存储在内存中,支持每秒处理上百万的读写操作。
  2. 丰富的数据类型:Redis支持多种数据类型,可以灵活地满足不同的业务需求。
  3. 原子性操作:Redis提供了许多原子性操作,如INCR、DECR、RPOP等,可以避免并发问题。
  4. 持久化:Redis支持RDB和AOF两种持久化方式,可以保证数据的安全性。

Redis 数据类型详解以及应用场景

具体的业务场景下的代码参考(点这里噢🌹🌹🌹)

Redis数据类型简单描述结合Java理解
StringValue 是String类型Map<String,String> JSON
SetValue 是Set类型Map套SetSet放的是不重复的valueMap<String,Set>
ZsetValue 是Set类型Map套SetSet放的是不重复的value能排序Map<String,TreeSet>
ListMap套ListList可以重复的value Index 下标Map<String,List>
HashMap套MapMap<String,Map<String,Object>>

1. String(字符串)

String是Redis最基本的数据类型,它可以存储任何形式的字符串,包括二进制数据。在Redis中,String类型的值最大可以达到512MB。

String的常用命令
  • SET:设置一个键值对
  • GET:获取一个键对应的值
  • INCR:对一个整数类型的键进行自增操作
  • DECR:对一个整数类型的键进行自减操作
  • SETEX:设置一个键值对,同时指定过期时间
String的应用场景
  1. 缓存:String类型可以用于缓存用户信息、商品详情等常用数据,提高系统的查询效率。
// 将用户信息缓存到Redis中
String userId = "1001";
String userInfo = "{\"id\":\"1001\",\"name\":\"Tom\",\"age\":25}";
jedis.set("user:" + userId, userInfo);// 从Redis中获取用户信息
String cachedUserInfo = jedis.get("user:" + userId);
  1. 计数器:利用INCR、DECR等命令,可以实现计数器功能,如统计网站的访问量、文章的点赞数等。
// 文章点赞数+1
String articleId = "1001";
jedis.incr("article:" + articleId + ":likes");// 获取文章点赞数
String likesStr = jedis.get("article:" + articleId + ":likes");
int likes = Integer.parseInt(likesStr);
  1. 分布式锁:利用SET命令的NX选项(只在键不存在时才设置值)和EX选项(设置过期时间),可以实现简单的分布式锁功能。
String lockKey = "lock:1001";
String lockValue = UUID.randomUUID().toString();// 获取锁,过期时间30秒
String result = jedis.set(lockKey, lockValue, "NX", "EX", 30);if ("OK".equals(result)) {// 获取锁成功,执行业务逻辑// ...// 释放锁if (lockValue.equals(jedis.get(lockKey))) {jedis.del(lockKey);}
} else {// 获取锁失败,处理异常情况// ...
}

2. List(列表)

Redis的List类型是一个双向链表,支持从头部或尾部进行插入和删除操作。一个List类型的键可以存储多个字符串值。

List的常用命令
  • LPUSH:从列表左端插入一个或多个值
  • RPUSH:从列表右端插入一个或多个值
  • LPOP:移除并返回列表左端的第一个元素
  • RPOP:移除并返回列表右端的第一个元素
  • LRANGE:获取列表在给定范围上的所有值
List的应用场景
  1. 消息队列:List类型可以用作简单的消息队列,生产者使用LPUSH命令插入消息,消费者使用RPOP命令获取消息。
// 生产者代码
String taskQueue = "queue:tasks";
String task = "...";
jedis.lpush(taskQueue, task);// 消费者代码
String taskQueue = "queue:tasks";
String task = jedis.rpop(taskQueue);
if (task != null) {// 处理任务// ...
}
  1. 最新列表:使用LPUSH命令可以将最新的数据插入到列表头部,使用LTRIM命令可以限制列表的长度,实现最新N个元素的列表。
String latestNewsKey = "latest:news";
String news = "...";// 将最新新闻插入到列表头部
jedis.lpush(latestNewsKey, news);// 只保留最新的100条新闻
jedis.ltrim(latestNewsKey, 0, 99);// 获取最新的10条新闻
List<String> latestNews = jedis.lrange(latestNewsKey, 0, 9);

3. Set(集合)

Redis的Set类型是一个无序且不重复的字符串集合。可以对Set执行交集、并集、差集等操作。

Set的常用命令
  • SADD:向集合中添加一个或多个成员
  • SMEMBERS:返回集合中的所有成员
  • SISMEMBER:判断成员是否存在于集合中
  • SINTER:返回给定所有集合的交集
  • SUNION:返回给定所有集合的并集
  • SDIFF:返回给定所有集合的差集
Set的应用场景
  1. 标签系统:Set类型可以用于实现标签功能,一个用户可以对应多个标签,多个用户也可以对应同一个标签。
String user1Tags = "user:1001:tags";
String user2Tags = "user:1002:tags";// 给用户添加标签
jedis.sadd(user1Tags, "music", "travel");
jedis.sadd(user2Tags, "music", "sports");// 获取用户共同感兴趣的标签
Set<String> commonTags = jedis.sinter(user1Tags, user2Tags);
  1. 抽奖活动:Set类型可以用于实现抽奖功能,将所有参与用户加入到一个Set中,然后随机抽取若干个用户作为中奖者。
String lotteryKey = "lottery:users";// 将用户加入抽奖活动
jedis.sadd(lotteryKey, "user:1001", "user:1002", "user:1003");// 随机抽取2名中奖者
List<String> winners = jedis.srandmember(lotteryKey, 2);

4. Zset(有序集合)

Zset类型(Sorted Set)是一个有序的,不重复的字符串集合。与Set类型不同,Zset中的每个成员都关联了一个评分(score),评分用于对成员进行排序。

Zset的常用命令
  • ZADD:向有序集合中添加一个或多个成员,或者更新已存在成员的评分
  • ZRANGE:返回有序集合中,指定区间内的成员,成员按评分值递增排序
  • ZREVRANGE:返回有序集合中,指定区间内的成员,成员按评分值递减排序
  • ZRANGEBYSCORE:返回有序集合中,所有评分介于min和max之间(包括等于min或max)的成员
  • ZRANK:返回有序集合中指定成员的排名
Zset的应用场景
  1. 排行榜:Zset类型可以用于实现各种排行榜功能,如商品销量排行、游戏玩家积分排名等。
String rankingKey = "sales:ranking";// 添加商品销量数据
jedis.zadd(rankingKey, 100, "product:1001");
jedis.zadd(rankingKey, 80, "product:1002");
jedis.zadd(rankingKey, 120, "product:1003");// 获取销量前3名的商品
Set<String> topProducts = jedis.zrevrange(rankingKey, 0, 2);
  1. 延时队列:利用Zset的评分值代表任务的执行时间,可以实现延时队列的功能。
String delayQueueKey = "delay:queue";// 添加延时任务
long now = System.currentTimeMillis();
jedis.zadd(delayQueueKey, now + 60000, "task:1"); // 1分钟后执行
jedis.zadd(delayQueueKey, now + 300000, "task:2"); // 5分钟后执行// 获取当前需要执行的任务
Set<String> tasks = jedis.zrangeByScore(delayQueueKey, 0, now);

5. Hash(哈希)

Redis的Hash类型可以看作是一个字符串字段(field)和字符串值(value)的映射表,特别适合用于存储对象。每个哈希可以存储多达232-1个键值对。

Hash的常用命令
  • HSET:将哈希表中的字段设置为指定值
  • HGET:获取存储在哈希表中指定字段的值
  • HMSET:同时将多个field-value对设置到哈希表中
  • HGETALL:获取在哈希表中指定key的所有字段和值
  • HINCRBY:为哈希表中的字段值加上指定增量值
Hash的应用场景
  1. 用户信息存储:Hash类型可以用于存储用户信息,每个用户对应一个Hash,包含用户的各种属性。
String userKey = "user:1001";// 存储用户信息
jedis.hset(userKey, "name", "Tom");
jedis.hset(userKey, "age", "25");
jedis.hset(userKey, "city", "New York");// 获取用户信息
Map<String, String> userInfo = jedis.hgetAll(userKey);
  1. 购物车:Hash类型可以用于实现购物车功能,每个用户的购物车对应一个Hash,商品ID作为field,商品数量作为value。
String cartKey = "cart:1001";// 添加商品到购物车
jedis.hset(cartKey, "product:1001", "2");
jedis.hset(cartKey, "product:1002", "1");// 增加商品数量
jedis.hincrBy(cartKey, "product:1001", 1);// 获取购物车信息
Map<String, String> cart = jedis.hgetAll(cartKey);

缓存预热、雪崩 、穿透 、击穿

在这里插入图片描述

缓存预热

缓存预热是指在应用启动时,提前将一些热点数据加载到Redis缓存中,避免请求直接访问数据库,提高系统的响应速度。常见的缓存预热方式包括:

  • 使用@PostConstruct注解(Bean对象的生命周期第三阶段)
  • 第二种则是实现applicationRunner接口,重写run方法

推荐第二种 按照业务逻辑,我们需要加载完对应依赖,其他的Bean对象,再进行业务逻辑的处理

@Slf4j
@Component
public class StationDataInit implements ApplicationRunner {/*** 在项目启动前执行一些业务* 可以使用@PostConstruct注解  速度很快  但是不推荐* 推荐使用  实现 applicationRunner接口*/// @PostConstruct@PostConstructpublic void init() {log.debug("使用@PostConstruct注解实现在服务启动前去数据库里面获取信息");}@Overridepublic void run(ApplicationArguments args) throws Exception {log.debug("使用实现 applicationRunner接口实现在服务启动前去数据库里面获取信息");log.debug("从数据库里面获取所有的场站信息");List<StationPO> stationPOList = stationRepository.getAllStation();log.debug("获取数据存入到redis中");}

缓存雪崩

缓存雪崩是指在同一时段内大量的缓存key同时失效或Redis服务不可用,导致大量请求直接访问数据库,引起数据库压力骤增,甚至宕机。常见的解决方案包括:

  1. 给不同的Key设置不同的过期时间,避免同时失效。
  2. 利用Redis集群提高可用性。
  3. 给缓存的访问加上超时限制,避免数据库过载。
  4. 提前演练,确保数据库能够承受缓存全部失效的压力。
// 给不同的Key设置不同的过期时间
jedis.setex("key1", 3600, "value1");
jedis.setex("key2", 7200, "value2");
jedis.setex("key3", 10800, "value3");// 利用Redis哨兵或集群提高可用性
JedisPoolConfig poolConfig = new JedisPoolConfig();
// ...
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration().master("mymaster").sentinel("127.0.0.1", 26379).sentinel("127.0.0.1", 26380);
JedisConnectionFactory connectionFactory = new JedisConnectionFactory(sentinelConfig, poolConfig);

缓存穿透

缓存穿透是指查询一个不存在的数据,因为不存在则不会写到缓存中,所以每次都会去请求数据库。如果大量的请求查询不存在的数据,就会给数据库带来很大的压力。常见的解决方案包括:

  1. 对不存在的key也缓存其value为null,设置较短的过期时间。
  2. 利用布隆过滤器快速判断key是否存在,避免缓存和数据库的查询。
// 缓存空值
String key = "non_existent_key";
String value = jedis.get(key);if (value == null) {// 从数据库查询value = db.get(key);if (value == null) {// 数据库中也不存在,缓存空值,过期时间设置较短jedis.setex(key, 60, "");} else {// 数据库中存在,写入缓存jedis.setex(key, 3600, value);}
}// 利用布隆过滤器判断key是否存在
BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.forName("UTF-8")), 1000000);if (!bloomFilter.mightContain(key)) {// key不存在,直接返回return null;
} else {// key可能存在,查询缓存String value = jedis.get(key);if (value != null) {return value;} else {// 缓存未命中,查询数据库// ...}
}

缓存击穿

缓存击穿是指一个热点Key在某个时间点过期,而恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端数据库加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端数据库压垮。常见的解决方案包括:

  1. 使用互斥锁,只让一个线程构建缓存,其他线程等待缓存构建完毕后从缓存中读取数据。
  2. 不同的Key设置不同的过期时间,避免同时失效。
String lockKey = "lock:key";
String lockValue = UUID.randomUUID().toString();String value = jedis.get(key);
if (value == null) {// 获取分布式锁if ("OK".equals(jedis.set(lockKey, lockValue, "NX", "EX", 30))) {// 获取锁成功,查询数据库value = db.get(key);// 写入缓存jedis.setex(key, 3600, value);// 释放锁if (lockValue.equals(jedis.get(lockKey))) {jedis.del(lockKey);}} else {// 获取锁失败,等待一段时间后重试Thread.sleep(100);value = jedis.get(key);}
}

总结

Redis凭借其出色的性能和丰富的数据类型,已经成为现代互联网应用不可或缺的利器。深入理解Redis的各种数据类型及其适用场景,并结合Java客户端进行开发,可以帮助我们设计出更加高效、可靠的系统。同时,在使用Redis时也要注意一些高级主题,如缓存预热、缓存雪崩、缓存穿透和缓存击穿等,这些都是保证系统稳定运行的关键。

相关文章:

Redis 五大基本数据类型及其应用场景进阶(缓存预热、雪崩 、穿透 、击穿)

Redis 数据类型及其应用场景 Redis 是什么? Redis是一个使用C语言编写的高性能的基于内存的非关系型数据库&#xff0c;基于Key/Value结构存储数据&#xff0c;通常用来 缓解高并发场景下对某一资源的频繁请求 &#xff0c;减轻数据库的压力。它支持多种数据类型,如字符串、…...

如何在ChatGPT的帮助下,使用“逻辑回归”技巧完成论文写作?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 逻辑回归作为一种统计分析工具广泛应用&#xff0c;以解决研究中的分类问题。其主要作用在于探讨和量化自变量对因变量的影响&#xff0c;从而揭示潜在的因果关系。 在论文写作中&…...

MySQL 临时表

MySQL 临时表 引言 在数据库管理中,临时表是一种非常有用的工具,尤其是在进行复杂的数据处理和查询时。MySQL 作为一种流行的关系型数据库管理系统,提供了对临时表的支持。本文将详细介绍 MySQL 临时表的概念、用途、创建方法以及管理技巧。 什么是 MySQL 临时表? MySQ…...

个人文章汇总(算法原理算法题)

算法&#xff1a;算法概述 算法&#xff1a;浅谈常见的限流算法 算法&#xff1a;常见hash算法的原理 算法&#xff1a;二分查找法 算法&#xff1a;浅谈约瑟夫算法 算法&#xff1a;费波纳茨数列1 1 2 3 5 8 13 21 算法&#xff1a;快速排序 算法&#xff1a;插入排序 算法&am…...

基于Hive和Hadoop的图书分析系统

本项目是一个基于大数据技术的图书分析系统&#xff0c;旨在为用户提供全面的图书信息和深入的图书销售及阅读行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以…...

阿里rtc云端录制TypeScript版NODE运行

阿里云音视频服务云端录制typescript版本; 编译后可以使用 node index.js运行 package.json 版本 // npm install --save alicloud/rtc201801112.3.0 "alicloud/rtc20180111": "^2.3.0",引入 import Client, { StartCloudRecordRequest, StopCloudRecord…...

Web后端开发原理!!!什么是自动配置???什么是起动依赖???

引言&#xff1a; 当然&#xff0c;在我们学习的过程中&#xff0c;得知其然&#xff0c;还得知其所以然。So理解了其原理&#xff0c;更能让我们对其开发的理解&#xff0c;遇到问题&#xff0c;也更能快速找到解决办法&#xff01;&#xff01;&#xff01; 1. SprngBoot-配…...

2-105 基于matlab的GA-WNN预测算法

基于matlab的GA-WNN预测算法。遗传算法优化小波神经网络的步骤&#xff1a;1设种群规模为M。随机生成初始种群N , 采用实数编码对个体Ni编码。2、用1中的种群N训练, WNN参数由初始化获得。3、计算种群N中个体适应度值。满足终止条件则跳至6, 不满足执行4。4、适应度大的个体, 选…...

GPT-o1模型实测:论文选题没思路,ChatGPT-o1带你飞!

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 ChatGPT的最新版本GPT-o1模型&#xff0c;不少博主已经测评并展示了其在处理数学、物理以及代码生成等复杂任务时的独特优势。 和之前的版本相比&#xff0c;它在回答问题的时…...

OpenCV视频I/O(2)视频采集类VideoCapture之检索视频流的各种属性函数get()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 返回指定的 VideoCapture 属性。 VideoCapture 的 get() 函数用于检索视频流的各种属性。这个函数允许你查询视频源的状态和配置&#xff0c;例如…...

基于SpringBoot的学生宿舍管理系统【附源码】

基于SpringBoot的高校社团管理系统&#xff08;源码L文说明文档&#xff09; 4 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xf…...

【开源免费】基于SpringBoot+Vue.JS新闻推荐系统(JAVA毕业设计)

本文项目编号 T 056 &#xff0c;文末自助获取源码 \color{red}{T056&#xff0c;文末自助获取源码} T056&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

【每天学个新注解】Day 8 Lombok注解简解(七)—@Getter(lazy=true)

Getter(lazytrue) 生成懒加载的 getter 方法。 1、如何使用 Getter(lazytrue)注解加在一个被private final修饰的属性上&#xff0c;并且为其准备一个初始化方法。 2、代码示例 例&#xff1a; public class LazyGetterExample {Getter(lazy true)private final int exp…...

打造备份一体机,群晖科技平台化战略再进阶

数字经济时代&#xff0c;海量数据不断涌现&#xff0c;并成为核心生产要素&#xff0c;驱动着企业生产方式和商业模式发生深刻变革。 与其他生产要素不同&#xff0c;数据要素具有非稀缺性、非竞争性等特征&#xff0c;且只有在具体业务场景中才能充分释放其价值。尤其是近年…...

Sharding-JDBC笔记03-分库分表代码示例

文章目录 一、水平分库1. 将原有order_db库拆分为order_db_1、order_db_22. 分片规则修改分片策略standardcomplexinlinehintnone 3. 插入测试4. 查询测试5. 使用分库分片键查询测试总结 二、公共表1. 创建数据库2. 在Sharding-JDBC规则中修改3. 数据操作4. 字典操作测试5. 字典…...

气膜健身馆:提升运动体验与健康的理想选择—轻空间

近年来&#xff0c;气膜健身馆作为一种新兴的运动场所&#xff0c;正逐渐受到越来越多健身爱好者的青睐。这种独特的建筑形式不仅提供了良好的运动环境&#xff0c;更在健康和运动表现上展现出诸多优势。 优越的空气质量 气膜结构的核心技术通过内外气压差形成稳定的气膜&#…...

选择更轻松:山海鲸可视化与PowerBI的深度对比

在数据分析与可视化的时代&#xff0c;选择合适的报表工具显得尤为重要。山海鲸可视化和PowerBI是市场上颇受欢迎的两款免费报表软件&#xff0c;各有特色。接下来&#xff0c;我们将从功能、优缺点等方面进行对比&#xff0c;帮助你找到最适合的工具。 山海鲸可视化 山海鲸可…...

Python Daphne库:ASGI服务的高效Web服务器

更多Python学习内容&#xff1a;ipengtao.com 随着 Web 开发技术的不断发展&#xff0c;异步编程逐渐成为构建高性能 Web 应用的主流方式。传统的 WSGI 接口已经不能满足现代异步 Web 应用的需求。ASGI&#xff08;Asynchronous Server Gateway Interface&#xff09;作为 WSGI…...

如何保护自己电脑以及服务器的ip地址

保护你的电脑和服务器的IP地址&#xff0c;可以采取以下措施&#xff1a; 1. 使用代理服务器 HTTP/HTTPS代理&#xff1a;通过代理服务器访问网络&#xff0c;隐藏真实IP地址。SOCKS代理&#xff1a;提供更高级的网络流量转发&#xff0c;可以更好地处理各种网络协议。 2. 配…...

我的创作纪念日---256days

机缘 1.总结自己的学习过程面遇到的困难的解决方案&#xff1b; 2.总结自己日常学习过程中的知识&#xff0c;以及自己的理解和看法&#xff1b; 3.帮助需要的小伙伴在自己的文章里面找到想要的答案&#xff1b; 4.共同推进CSDN社区建设&#xff1b; 5.让自己每天都去写博…...

前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革

除了调用别人的api接口使用transformer技术&#xff0c;你是否想过将大模型在浏览器中运行呢&#xff1f;尤其是WebGPU的出现&#xff0c;性能比WebGL高不少&#xff0c;很多小任务真的不再需要在一个中心运行了。 不少同学买课学python了&#xff0c;但我还是在坚持用js尝试&a…...

计算机性能指标之MFLOPS

1. MFLOPS的定义与计算方式 定义&#xff1a;MFLOPS&#xff0c;全称Million Floating-point Operations Per Second&#xff0c;即每秒百万次浮点运算&#xff0c;是衡量计算机系统浮点运算能力的一个重要技术指标。 计算方式&#xff1a;MFLOPS的计算公式为“浮点操作次数 /…...

Sharp.js:简单而又实用的图像处理库

前言 在现代Web开发中&#xff0c;图像处理是一个不可或缺的部分。 前端开发者经常需要处理图像&#xff0c;以确保它们在不同的设备和分辨率上都能保持良好的显示效果。 sharp.js是一个高性能的Node.js模块&#xff0c;它利用了libvips库&#xff0c;提供了快速且高效的图像…...

Rust环境安装配置

要加速安装 Rust 和 git-cliff&#xff0c;可以配置国内的镜像源。特别是在国内访问 Rust 官方的安装源时&#xff0c;可能会遇到速度较慢的问题。通过配置 TUNA&#xff08;清华大学开源软件镜像站&#xff09;的镜像源&#xff0c;可以大幅提升安装速度。 1. 配置国内镜像加…...

衡石分析平台系统管理手册-功能配置之全局 JS 设置

全局 JS 设置​ 衡石系统提供了全局 JS 设置功能&#xff0c;用户可以通过自定义 JS 代码实现系统的个性化需求&#xff0c;如使用第三方统计工具对系统平台的 PV 、UV 进行监测。 使用场景​ 场景1&#xff1a;增加百度统计​ 下图示例中使用 js 代码引用了百度网站统计功…...

OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI DSI】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 DSI&#xff08;Display Serial Interface&#x…...

C++_一篇文章让你弄懂各类(运算符)

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和…...

顺序表算法题 —— 移除元素、删除有序数组中的重复项、合并两个有序数组

目录 一、顺序表算法题 1、移除元素 2、删除有序数组中的重复项 3、 合并两个有序数组 二、顺序表问题与思考 一、顺序表算法题 1、移除元素 移除元素 - 力扣&#xff08;LeetCode&#xff09; 思路分析&#xff1a; 思路一&#xff1a;创建一个新数组&#xff0c;开辟…...

配置ssh后又报错git@github.com: Permission denied (publickey)

再添加一次ssh有用 ssh-add ~/.ssh/你的id_rsa的名字可以先运行 eval "$(ssh-agent -s)"再添加&#xff0c;Jesus每次重启terminal都要输入一遍 报错 gitgithub.com: Permission denied (publickey) 通常是由于 SSH 公钥没有正确配置或者 GitHub 上未能识别你的公钥…...

yolov10安装体验

按照官网 conda create -n yolov10 python=3.9 conda activate yolov10 pip install -r requirements.txt pip install -e . 一路安装,运行yolov10的问题,初次接触的同学可以注意。 Set arbitrary_types_allowed=True in the model_config to ignore this error f you got th…...