【学习日记2023.5.23】 之 Redis入门未入坑

news2025/1/12 1:32:14

文章目录

  • 1. Redis入门
    • 1.1 Redis简介
    • 1.2 Redis下载与安装
      • 1.2.1 Redis下载
      • 1.2.2 Redis安装
    • 1.3 Redis服务启动与停止
      • 1.3.1 服务启动命令
      • 1.3.2 客户端连接命令
      • 1.3.3 修改Redis配置文件
      • 1.3.4 Redis客户端图形工具
  • 2. Redis数据类型
    • 2.1 五种常用数据类型介绍
    • 2.2 各种数据类型特点
  • 3. Redis常用命令
    • 3.1 字符串操作命令
    • 3.2 哈希操作命令
    • 3.3 列表操作命令
    • 3.4 集合操作命令
    • 3.5 有序集合操作命令
    • 3.6 通用命令
  • 4. 在Java中操作Redis
    • 4.1 Redis的Java客户端
    • 4.2 Spring Data Redis使用方式
      • 4.2.1 介绍
      • 4.2.2 环境搭建
      • 4.2.3 操作常见类型数据

1. Redis入门

1.1 Redis简介

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件

**官网:**https://redis.io
**中文网:**https://www.redis.net.cn/

key-value结构存储:
请添加图片描述

主要特点:

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品、资讯、新闻)
  • 企业应用广泛

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

关系型数据库(RDBMS):

  • Mysql
  • Oracle
  • DB2
  • SQLServer

非关系型数据库(NoSql):

  • Redis
  • Mongo db
  • MemCached

1.2 Redis下载与安装

1.2.1 Redis下载

Redis安装包分为windows版和Linux版:

  • Windows版下载地址:https://github.com/microsoftarchive/redis/releases
  • Linux版下载地址: https://download.redis.io/releases/

1.2.2 Redis安装

1)在Windows中安装Redis(项目中使用)

Redis的Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:
请添加图片描述

2)在Linux中安装Redis(简单了解)

在Linux系统安装Redis步骤:

  1. 将Redis安装包上传到Linux
  2. 解压安装包,命令:tar -zxvf redis-4.0.0.tar.gz -C /usr/local
  3. 安装Redis的依赖环境gcc,命令:yum install gcc-c++
  4. 进入/usr/local/redis-4.0.0,进行编译,命令:make
  5. 进入redis的src目录进行安装,命令:make install

安装后重点文件说明:

  • /usr/local/redis-4.0.0/src/redis-server:Redis服务启动脚本
  • /usr/local/redis-4.0.0/src/redis-cli:Redis客户端脚本
  • /usr/local/redis-4.0.0/redis.conf:Redis配置文件

1.3 Redis服务启动与停止

以window版Redis进行演示:

1.3.1 服务启动命令

redis-server.exe redis.windows.conf
请添加图片描述

Redis服务默认端口号为 6379 ,通过快捷键Ctrl + C 即可停止Redis服务

当Redis服务启动成功后,可通过客户端进行连接。

1.3.2 客户端连接命令

redis-cli.exe
请添加图片描述

通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:

  • -h ip地址
  • -p 端口号
  • -a 密码(如果需要)

1.3.3 修改Redis配置文件

设置Redis服务密码,修改redis.windows.conf

requirepass 123456

注意:

  • 修改密码后需要重启Redis服务才能生效
  • Redis配置文件中 # 表示注释

重启Redis后,再次连接Redis时,需加上密码,否则连接失败。

redis-cli.exe -h localhost -p 6379 -a 123456

请添加图片描述

此时,-h 和 -p 参数可省略不写。

1.3.4 Redis客户端图形工具

默认提供的客户端连接工具界面不太友好,同时操作也较为麻烦,可以使用Redis客户端图形工具。
请添加图片描述

安装完毕后,直接双击启动

新建连接
请添加图片描述

连接成功
请添加图片描述

2. Redis数据类型

2.1 五种常用数据类型介绍

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set / zset

2.2 各种数据类型特点

请添加图片描述

解释说明:

  • 字符串(string):普通字符串,Redis中最简单的数据类型
  • 哈希(hash):也叫散列,类似于Java中的HashMap结构
  • 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
  • 集合(set):无序集合,没有重复元素,类似于Java中的HashSet
  • 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素

3. Redis常用命令

3.1 字符串操作命令

Redis 中字符串类型常用命令:

  • SET key value 设置指定key的值
  • GET key 获取指定key的值
  • SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒
  • SETNX key value 只有在 key 不存在时设置 key 的值
  • DEL key 删除值

更多命令可以参考Redis中文网:https://www.redis.net.cn

3.2 哈希操作命令

Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适合用于存储对象,常用命令:

  • HSET key field value 将哈希表 key 中的字段 field 的值设为 value
  • HGET key field 获取存储在哈希表中指定字段的值
  • HDEL key field 删除存储在哈希表中的指定字段
  • HKEYS key 获取哈希表中所有字段
  • HVALS key 获取哈希表中所有值
  • HGETALL key 获取所有的field和value值
    请添加图片描述

3.3 列表操作命令

Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令:

  • LPUSH key value1 [value2] 将一个或多个值插入到列表头部
  • RPUSH key value1 [value2] 将一个或多个值插入到列表尾部
  • LRANGE key start stop 获取列表指定范围内的元素
  • LPOP key 移除并获取列表起始一个元素
  • RPOP key 移除并获取列表最后一个元素
  • LLEN key 获取列表长度
  • BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止
    请添加图片描述

3.4 集合操作命令

Redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:

  • SADD key member1 [member2] 向集合添加一个或多个成员
  • SMEMBERS key 返回集合中的所有成员
  • SCARD key 获取集合的成员数
  • SINTER key1 [key2] 返回给定所有集合的交集
  • SUNION key1 [key2] 返回所有给定集合的并集
  • SDIFF key1 [key2] 返回所有给定集合的差集
  • SREM key member1 [member2] 移除集合中一个或多个成员
    请添加图片描述

3.5 有序集合操作命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:

常用命令:

  • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
  • ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员(升序排列)
  • ZREVRANGE key start stop [withscores] 通过索引区间返回有序集合中指定区间内的成员(降序排列)
  • ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment
  • ZREM key member [member …] 移除有序集合中的一个或多个成员
    请添加图片描述

3.6 通用命令

Redis的通用命令是不分数据类型的,都可以使用的命令:

  • KEYS pattern 查找所有符合给定模式( pattern)的 key
  • EXISTS key 检查给定 key 是否存在
  • TYPE key 返回 key 所储存的值的类型
  • DEL key 该命令用于在 key 存在是删除 key
  • select index 切换redis数据库索引
  • flushdb 删除当前数据库所有数据
  • flushall 删除全部数据库所有数据

4. 在Java中操作Redis

4.1 Redis的Java客户端

Redis 的 Java 客户端很多,常用的几种:

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即 spring-boot-starter-data-redis。重点学习Spring Data Redis

4.2 Spring Data Redis使用方式

4.2.1 介绍

Spring Data Redis 是 Spring 的一部分,提供了在 Spring 应用中通过简单的配置就可以访问 Redis 服务,对 Redis 底层开发包进行了高度封装。在 Spring 项目中,可以使用Spring Data Redis来简化 Redis 操作。

网址:https://spring.io/projects/spring-data-redis
请添加图片描述

Spring Boot提供了对应的Starter,maven坐标:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:string数据操作
  • SetOperations:set类型数据操作
  • ZSetOperations:zset类型数据操作
  • HashOperations:hash类型的数据操作
  • ListOperations:list类型的数据操作

4.2.2 环境搭建

进入到sky-server模块

1). 导入Spring Data Redis的maven坐标

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2). 配置Redis数据源

在application-dev.yml中添加

sky:
redis:
 host: localhost
 port: 6379
 password: 123456
 database: 10

解释说明:

database:指定使用Redis的哪个数据库,Redis服务启动后默认有16个数据库,编号分别是从0到15。

可以通过修改Redis配置文件来指定数据库的数量。

在application.yml中添加读取application-dev.yml中的相关Redis配置

spring:
profiles:
 active: dev
redis:
 host: ${sky.redis.host}
 port: ${sky.redis.port}
 password: ${sky.redis.password}
 database: ${sky.redis.database}

3). 编写配置类,创建RedisTemplate对象

package com.sky.config;

import lombok.extern.slf4j.Slf4j;
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.StringRedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {

 @Bean
 public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
     log.info("开始创建redis模板对象...");
     RedisTemplate redisTemplate = new RedisTemplate();
     //设置redis的连接工厂对象
     redisTemplate.setConnectionFactory(redisConnectionFactory);
     //设置redis key的序列化器
     redisTemplate.setKeySerializer(new StringRedisSerializer());
     return redisTemplate;
 }
}

解释说明:

当前配置类不是必须的,因为 Spring Boot 框架会自动装配 RedisTemplate 对象,但是默认的key序列化器为JdkSerializationRedisSerializer,导致我们存到Redis中后的数据和原始数据有差别,故设置为StringRedisSerializer序列化器。

4). 通过RedisTemplate对象操作Redis

在test下新建测试类

package com.sky.test;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;

@SpringBootTest
public class SpringDataRedisTest {
 @Autowired
 private RedisTemplate redisTemplate;

 @Test
 public void testRedisTemplate(){
     System.out.println(redisTemplate);
     //string数据操作
     ValueOperations valueOperations = redisTemplate.opsForValue();
     //hash类型的数据操作
     HashOperations hashOperations = redisTemplate.opsForHash();
     //list类型的数据操作
     ListOperations listOperations = redisTemplate.opsForList();
     //set类型数据操作
     SetOperations setOperations = redisTemplate.opsForSet();
     //zset类型数据操作
     ZSetOperations zSetOperations = redisTemplate.opsForZSet();
 }
}

测试:
请添加图片描述

说明RedisTemplate对象注入成功,并且通过该RedisTemplate对象获取操作5种数据类型相关对象。

4.2.3 操作常见类型数据

1). 操作字符串类型数据

	/**
     * 操作字符串类型的数据
     */
    @Test
    public void testString(){
        // set get setex setnx
        redisTemplate.opsForValue().set("name","小明");
        String city = (String) redisTemplate.opsForValue().get("name");
        System.out.println(city);
        redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("lock","1");
        redisTemplate.opsForValue().setIfAbsent("lock","2");
    }

2). 操作哈希类型数据

    /**
     * 操作哈希类型的数据
     * @throws Exception
     */
    @Test
    public void testHash() throws Exception{
        //获取操作hash的操作器对象
        HashOperations hashOperations = redisTemplate.opsForHash();
        //hset
        hashOperations.put("student","name","tom");
        hashOperations.put("student","age","26");
        //hget
        String name = (String) hashOperations.get("student", "name");
        System.out.println(name);
        //hkeys
        Set keys = hashOperations.keys("student");
        System.out.println(keys);
        //hvals
        List values = hashOperations.values("student");
        System.out.println(values);
        //hgetall
        Map entries = hashOperations.entries("student");
        System.out.println(entries);
        //hdel
        hashOperations.delete("student","age");
    }

3). 操作列表类型数据

	/**
     * 操作列表类型的数据
     * @throws Exception
     */
    @Test
    public void testList() throws Exception{
        //获取操作list的操作器对象
        ListOperations listOperations = redisTemplate.opsForList();
        //lpush
        listOperations.leftPushAll("list","a","b","c");
        listOperations.leftPush("list","d");
        listOperations.rightPushAll("list","e","f","g");
        //lrange
        List list = listOperations.range("list", 0, -1);
        System.out.println(list);
        //rpop
        listOperations.rightPop("list");
        //lpop
        listOperations.leftPop("list");
        //llen
        Long size = listOperations.size("list");
        System.out.println(size);
    }

4). 操作集合类型数据

	/**
     * 操作集合类型的数据
     * @throws Exception
     */
    @Test
    public void testSet() throws Exception{
        //获取操作set的操作器对象
        SetOperations setOperations = redisTemplate.opsForSet();
        //sadd
        setOperations.add("set1","a","b","c","d","e");
        setOperations.add("set1","a");
        setOperations.add("set2","d","e","f","g");
        //smembers
        Set members = setOperations.members("set1");
        System.out.println("members" + members);
        //scard
        Long size = setOperations.size("set1");
        System.out.println(size);
        //srem
        setOperations.remove("set1","a","b");
        //sinter
        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println("intersect" + intersect);
        //sunion
        Set union = setOperations.union("set1", "set2");
        System.out.println("union" + union);
        //sdiff
        Set difference = setOperations.difference("set1", "set2");
        System.out.println("difference" + difference);
    }

5). 操作有序集合类型数据

	@Test
    public void testZset() throws Exception{
        //获取操作zset的操作器对象
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        //zadd
        zSetOperations.add("王者荣耀","张飞",10.0);
        zSetOperations.add("王者荣耀","赵云",18.5);
        zSetOperations.add("王者荣耀","关羽",15.3);
        zSetOperations.add("王者荣耀","刘备",12.5);
        //zrange
        Set wzry = zSetOperations.range("王者荣耀", 0, -1);
        System.out.println(wzry);
        //zrange withscores
        System.out.println("----------------zrange withscores----------------");
        Set<DefaultTypedTuple> wzry1 = zSetOperations.rangeWithScores("王者荣耀", 0, -1);
        for (DefaultTypedTuple tuple : wzry1) {
            System.out.println(tuple.getValue() + ":" + tuple.getScore());
        }
        //zincrby
        System.out.println("----------------zincrby----------------");
        zSetOperations.incrementScore("王者荣耀","刘备",10);
        wzry1 = zSetOperations.rangeWithScores("王者荣耀", 0, -1);
        for (DefaultTypedTuple tuple : wzry1) {
            System.out.println(tuple.getValue() + ":" + tuple.getScore());
        }
        //zrem
        System.out.println("----------------zrem----------------");
        zSetOperations.remove("王者荣耀","张飞");
        wzry1 = zSetOperations.rangeWithScores("王者荣耀", 0, -1);
        for (DefaultTypedTuple tuple : wzry1) {
            System.out.println(tuple.getValue() + ":" + tuple.getScore());
        }
    }

6). 通用命令操作

	@Test
    public void testCommon() throws Exception{
        //keys pattern
        Set keys = redisTemplate.keys("set*");
        System.out.println(keys);
        //type key
        DataType dataType = redisTemplate.type("王者荣耀");
        System.out.println(dataType.name() + ":" + dataType.code());
        //exists key
        Boolean flag = redisTemplate.hasKey("set");
        System.out.println(flag);
        //del key
        redisTemplate.delete(keys);
    }

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

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

相关文章

shell sed命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 sed 命令sed 编辑器sed 的工作流程的三个过程命定格式常用选项常用操作 实验操作打印内容使用地址删除行替换插入 sed 命令 sed 编辑器 sed是一种流编辑器&#x…

什么是 Java 中的数据库连接池?为什么使用连接池来管理数据库连接?

文章目录 1. 数据库连接池的好处1.1 提高性能1.2 连接的重用1.3 连接管理和监控 2. 代码演示2.1 新建maven项目2.2 配置maven地址2.3 配置 Druid 数据源2.4 编写测试代码2.4.1 创建一个 Druid 数据源连接池和获取连接2.4.2 编写测试类2.4.3 新建数据库表2.4.4 运行截图 3. 完整…

进程控制-进程的替换

回顾 对于进程&#xff0c;我们已经有了初步的了解&#xff0c;我们学会了进程的终止&#xff0c;进程的等待&#xff0c;还有如果创建子进程。 这次&#xff0c;我们来学习如何把一个进程运行的代码和数据替换成其他的代码和数据。 进程的替换 为什么要进程替换&#xff0…

Spark大数据处理讲课笔记----Spark任务调度

零、本节学习目标 理解DAG概念了解Stage划分了解RDD在Spark中的运行流程 一、有向无环图 &#xff08;一&#xff09;DAG概念 DAG&#xff08;Directed Acyclic Graph&#xff09;叫做有向无环图&#xff0c;Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个…

进程控制--进程的等待

回顾 之前我们已经学习了进程的状态和进程的退出如果你没有这些基础知识&#xff0c;应先去了解进程的相关基础知识。 这次我们主要来学习如何让进程等待子进程的退出。 为什么要等待子进程&#xff1f; 之前我们在学习进程的状态的时候&#xff0c;我们知道了进程有一种状态…

JavaEE——阻塞式队列

文章目录 一、阻塞式队列二、生产者消费者模型1.发送方和接受方之间的 “解耦合”2. “削峰填谷”保证系统稳定性3、代码实现阻塞式队列 一、阻塞式队列 阻塞式队列&#xff0c;顾名思义也是一个队列&#xff0c;这个队列遵循的是先进先出的原则。 这里简单提一个特殊的队列&…

chatgpt赋能Python-python_output用法

Python Output 用法介绍 Python 是一种非常流行的编程语言&#xff0c;其简单而有效的语法和丰富的功能集使其成为了各种应用程序和数据分析项目的首选工具。 Python 在输出方面有非常灵活的方式&#xff0c;本文将介绍 Python Output 的用法。 使用 print 函数输出 Python …

python爬虫之request库的使用(友好版)

以下所有爬取的网站都是可以爬取的&#xff0c;爬取时请先学学法律哦~ 如有侵权&#xff0c;私信删除~ 本章目录~。~ 一&#xff0c;request库简介&#xff1a; 二&#xff0c;requests使用方法 1.GET请求 1.1&#xff0c;发起一个get请求 1.2&#xff0c;利用GET请求发…

三、数据仓库实践-拉链表设计

1 写在开头的话 拉链表&#xff0c;学名叫缓慢变化维&#xff08;Slowly Changing Dimensions&#xff09;&#xff0c;简称渐变维&#xff08;SCD&#xff09;&#xff0c;俗称拉链表&#xff0c;是为了记录关键字段的历史变化而设计出来的一种数据存储模型&#xff0c;常见于…

蓝奏云软件库源码分享下载(后端源码)

正文&#xff1a; FreePlus后台管理系统是一个基于[Thinkphp]的后台管理系统&#xff0c;提供了基本的应用管理、用户管理 、卡密管理 、笔记管理 、邮箱管理 、商城管理 、论坛管理 、附件管理、软件库、工具箱等功能。#### 软件架构thinkphp5.1mysql实现#### 安装教程(php必…

Spark大数据处理讲课笔记--- RDD持久化机制

零、本讲学习目标 理解RDD持久化的必要性了解RDD的存储级别学会如何查看RDD缓存 一、RDD持久化 &#xff08;一&#xff09;引入持久化的必要性 Spark中的RDD是懒加载的&#xff0c;只有当遇到行动算子时才会从头计算所有RDD&#xff0c;而且当同一个RDD被多次使用时&#…

基于SpringBoot的家乡特色推荐系统的设计与实现

背景 设计一个家乡特色推荐系统&#xff0c;通过这个系统能够满足家乡特色文章的管理功能。系统的主要功能包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;文章分类管理&#xff0c;文章分享管理&#xff0c;系统管理等。 管理员可以根据系统给定的账号进行登…

堪比ChatGPT,Claude注册和使用教程

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT资源 Claude简介 Claude是一款人工智能聊天机器人。主要有以下特征: 使用自己的模型与训练方法,而不是基于GPT-3等开源框架。模型采用Transformer编码器与解码器的结构,并使用对话上下文的双向…

Spark大数据处理讲课笔记---RDD容错机制

零、本讲学习目标 了解RDD容错机制理解RDD检查点机制的特点与用处理解共享变量的类别、特点与使用 一、RDD容错机制 当Spark集群中的某一个节点由于宕机导致数据丢失&#xff0c;则可以通过Spark中的RDD进行容错恢复已经丢失的数据。RDD提供了两种故障恢复的方式&#xff0c…

全国大学生数据统计与分析竞赛2021年【研究生组】-B题:“互联网+教育”用户消费行为分析预测模型(附获奖论文和python代码实现)

目录 摘要 1 问题重述 2 问题分析 3 符号说明 4 模型建立与求解 4.1 问题一 4.1.1 数据预处理 4.1.2 处理结果 4.2 问题二 4.2.1 城市分布情况 4.2.2 用户登录情况 4.3 问题三 4.3.1 模型建立 4.3.2 模型求解 4.3.3 模型优化 4.4 问题四 4.4.1 模型建立 4.4.…

Windows 编译 OpenCV 头疼 ? 已编译好的,你要不要吧

一、使用官方编译好的 【Qt】opencv源码&官方编译好的opencv在windows下使用的区别_外来务工人员徐某的博客-CSDN博客 官方替我们编译好了&#xff0c;可以直接拿来用&#xff0c;但是看到下面这两个文件夹就知道&#xff0c;官方是用msvc编译器编译的&#xff0c;所以还是…

2天搞定-从零开始搞-量化交易-Python 【案例A股量化交易】第一节

搭建windows电脑开发环境 一,下载并搭建python 环境 1:python 安装过程教程:https://blog.csdn.net/weixin_44727274/article/details/126017386 2:python 下载地址官网:https://www.python.org/downloads/windows/ (过程较慢耐心等待,多版本选择) 3:python 本人放…

chatgpt赋能Python-python_noj

Python NOJ - 一款适合Python学习者的在线编程环境 Python NOJ是一款在线的Python编程环境&#xff0c;其全称为Python Online Judge&#xff0c;是一款适合Python学习者使用的编程工具。接下来&#xff0c;我们将介绍其主要特点和优势&#xff0c;并探讨其与其他在线编程环境…

chatgpt赋能Python-python_nmpy

Python NumPy&#xff1a;提高数据科学和数学计算的效率 在数据科学和数学计算领域&#xff0c;Python一直是最受欢迎的语言之一。NumPy是一个优秀的Python库&#xff0c;它通过提供一个强大的多维数组对象和与之相关的各种函数&#xff0c;极大地提高了Python在数据科学和数学…

2022下半年上午题

2022下半年上午题 b b d a c d 在做加法前先用补码表示 c a d c a c b b 专利权需要申请&#xff0c;题目中没说公司申请了专利 c c 前向传播取大值 d 反向传播求关键路径 b b b d a c 先在前驱图中把信号量定义下去 然后定义p,v操作 然后直接看图 1:从p1出来…