手把手教做网站wordpress媒体库全选

news/2025/10/6 11:00:47/文章来源:
手把手教做网站,wordpress媒体库全选,注册网站用的信用卡,网站开发实训指导书Redis 发展到现在已经有 9 种数据类型了#xff0c;其中最基础、最常用的数据类型有 5 种#xff0c;它们分别是#xff1a;字符串类型、列表类型、哈希表类型、集合类型、有序集合类型#xff0c;而在这 5 种数据类型中最常用的是字符串类型#xff0c;所以本文我们先从字…Redis 发展到现在已经有 9 种数据类型了其中最基础、最常用的数据类型有 5 种它们分别是字符串类型、列表类型、哈希表类型、集合类型、有序集合类型而在这 5 种数据类型中最常用的是字符串类型所以本文我们先从字符串的使用开始说起。 字符串类型的全称是 Simple Dynamic Strings 简称 SDS中文意思是简单动态字符串。它是以键值对 key-value 的形式进行存储的根据 key 来存储和获取 value 值它的使用相对来说比较简单但在实际项目中应用非常广泛。 1 字符串类型能做什么 字符串类型的使用场景有很多但从功能的角度来区分大致可分为以下两种 字符串存储和操作整数类型和浮点类型的存储和计算。 字符串最常用的业务场景有以下几个。 1页面数据缓存 我们知道一个系统最宝贵的资源就是数据库资源随着公司业务的发展壮大数据库的存储量也会越来越大并且要处理的请求也越来越多当数据量和并发量到达一定级别之后数据库就变成了拖慢系统运行的“罪魁祸首”为了避免这种情况的发生我们可以把查询结果放入缓存(Redis)中让下次同样的查询直接去缓存系统取结果而非查询数据库这样既减少了数据库的压力同时也提高了程序的运行速度。 介于以上这个思路我们可以把文章详情页的数据放入缓存系统。具体的做法是先将文章详情页序列化为字符串存入缓存再从缓存中读取到字符串反序列化成对象然后再赋值到页面进行显示 (当然也可以用哈希类型进行存储这会在下一篇文章中讲到)这样我们就实现了文章详情页的缓存功能架构流程对比图如下所示。 原始系统运行流程图 引入缓存系统后的流程图 2数字计算与统计 Redis 可以用来存储整数和浮点类型的数据并且可以通过命令直接累加并存储整数信息这样就省去了每次先要取数据、转换数据、拼加数据、再存入数据的麻烦只需要使用一个命令就可以完成此流程具体实现过程本文下半部分会讲。这样我们就可以使用此功能来实现访问量的统计当有人访问时访问量 1 就可以了。 3共享 Session 信息 通常我们在开发后台管理系统时会使用 Session 来保存用户的会话(登录)状态这些 Session 信息会被保存在服务器端但这只适用于单系统应用如果是分布式系统此模式将不再适用。 例如用户一的 Session 信息被存储在服务器一但第二次访问时用户一被分配到服务器二这个时候服务器并没有用户一的 Session 信息就会出现需要重复登录的问题。分布式系统每次会把请求随机分配到不同的服务器因此我们需要借助缓存系统对这些 Session 信息进行统一的存储和管理这样无论请求发送到那台服务器服务器都会去统一的缓存系统获取相关的 Session 信息这样就解决了分布式系统下 Session 存储的问题。 分布式系统单独存储 Session 流程图 分布式系统使用同一的缓存系统存储 Session 流程图 2 字符串如何使用 通常我们会使用两种方式来操作 Redis第一种是使用命令行来操作例如 redis-cli另一种是使用代码的方式来操作下面我们分别来看。 1命令行操作方式 字符串的操作命令有很多但大体可分为以下五类 单个键值对操作多个键值对操作数字统计键值对过期属性相关操作字符串操作进阶 我们本文使用 redis-cli 来实现对 Redis 的操作在使用命令之前先输入 redis-cli 来链接到 Redis 服务器。 ① 单个键值对操作 a.添加键值对 语法set key value [expiration EX seconds|PX milliseconds] [NX|XX] 示例 127.0.0.1:6379 set k1 val1 OKb.获取键值对 语法get key 示例 127.0.0.1:6379 get k1 val1c.给元素追加值 语法append key value 示例 127.0.0.1:6379 get k1 v1 127.0.0.1:6379 append k1 append (integer) 5 127.0.0.1:6379 get k1 v1appendd.查询字符串的长度 语法strlen key 示例 127.0.0.1:6379 strlen k1 (integer) 5② 多个键值对操作 a.创建一个或多个键值对 语法mset key value [key value …] 示例 127.0.0.1:6379 mset k2 v2 k3 v3 OK小贴士mset 是一个原子性(atomic)操作所有给定 key 都会在同一时间内被设置不会出现某些 key 被更新而另一些 key 没被更新的情况。 b.查询一个或多个元素 语法mget key [key …] 示例 127.0.0.1:6379 mget k2 k3 1) v2 2) v3③ 数字统计 在 Redis 中可以直接操作整型和浮点型例如可以直接使用命令来加、减值。 a.给整数类型的值加 1 语法incr key 示例 127.0.0.1:6379 get k1 3 127.0.0.1:6379 incr k1 (integer) 4 127.0.0.1:6379 get k1 4b.给整数类型的值减 1 语法decr key 示例 127.0.0.1:6379 get k1 4 127.0.0.1:6379 decr k1 (integer) 3 127.0.0.1:6379 get k1 3c.根据 key 减去指定的值 语法decrby key decrement 示例 127.0.0.1:6379 get k1 3 127.0.0.1:6379 decrby k1 2 (integer) 1 127.0.0.1:6379 get k1 1如果 key 不存在则会先初始化此 key 为 0 然后再执行减法操作 127.0.0.1:6379 get k2 (nil) 127.0.0.1:6379 decrby k2 3 (integer) -3 127.0.0.1:6379 get k2 -3d.根据 key 加指定的整数值 语法incrby key increment 示例 127.0.0.1:6379 get k1 1 127.0.0.1:6379 incrby k1 2 (integer) 3 127.0.0.1:6379 get k1 3如果 key 不存在则会先初始化此 key 为 0 然后再执行加整数值的操作 127.0.0.1:6379 get k3 (nil) 127.0.0.1:6379 incrby k3 5 (integer) 5 127.0.0.1:6379 get k3 5e.根据 key 加上指定的浮点数 语法incrbyfloat key increment 示例 127.0.0.1:6379 get k3 5 127.0.0.1:6379 incrbyfloat k3 4.9 9.9 127.0.0.1:6379 get k3 9.9如果 key 不存在则会先初始化此 key 为 0 然后再执行加浮点数的操作 127.0.0.1:6379 get k4 (nil) 127.0.0.1:6379 incrbyfloat k4 4.4 4.4 127.0.0.1:6379 get k4 4.4④ 键值对过期操作 a.添加键值对并设置过期时间 语法set key value [expiration EX seconds|PX milliseconds] [NX|XX] 示例 127.0.0.1:6379 set k1 val1 ex 1000 OK设置键值对 k1val1过期时间为 1000 秒。 查询键的过期时间可以使用 ttl key如下代码所示 127.0.0.1:6379 ttl k1 (integer) 997b.赋值字符串并设置过期时间(单位/秒) 语法setex key seconds value 示例 127.0.0.1:6379 setex k1 1000 v1 OK 127.0.0.1:6379 ttl k1 (integer) 999 127.0.0.1:6379 get k1 v1如果 key 已经存在setex 命令将会覆写原来的旧值。 c.赋值字符串并设置过期时间(单位/毫秒) 与 setex 用法类似只不过 psetex 设置的单位是毫秒。 语法psetex key milliseconds value 示例 127.0.0.1:6379 psetex k1 100000 v11 OK 127.0.0.1:6379 ttl k1 (integer) 97 127.0.0.1:6379 get k1 v11⑤ 字符串操作进阶 a.根据指定的范围截取字符串 语法getrange key start end 示例 127.0.0.1:6379 get hello hello world 127.0.0.1:6379 getrange hello 0 4 hello 127.0.0.1:6379 getrange hello 0 -1 hello world 127.0.0.1:6379 getrange hello 0 -2 hello worl负数表示从字符串最后开始计数 -1 表示最后一个字符 -2 表示倒数第二个以此类推。 b.设置字符串新值并返回旧值 语法getset key value 示例 127.0.0.1:6379 get db redis 127.0.0.1:6379 getset db mysql redis 127.0.0.1:6379 get db mysql使用 getset 命令时如果 key 不为字符串会报错如下效果所示 127.0.0.1:6379 type myset set 127.0.0.1:6379 getset myset v1 (error) WRONGTYPE Operation against a key holding the wrong kind of value根据 type 命令可以查询出 key 所对应的数据类型为非字符串在使用 getset 命令就会报错。 c.赋值(创建)键值对当 key 不存在时 如果 key 已经存在则执行命令无效不会修改原来的值否则会创建新的键值对。 语法setnx key value 示例 127.0.0.1:6379 setnx k9 v9 (integer) 1 127.0.0.1:6379 get k9 v9 127.0.0.1:6379 setnx k9 v99 (integer) 0 127.0.0.1:6379 get k9 v9d.设置一个或多个键值当所有键值都不存在时 语法msetnx key value [key value …] 示例 127.0.0.1:6379 msetnx k5 v5 k6 v6 (integer) 1 127.0.0.1:6379 mget k5 k6 1) v5 2) v6注意msetnx 是一个原子操作当一个操作失败时其他操作也会失败。例如如果有一个已经存在的值那么全部键值都会设置失败效果如下 127.0.0.1:6379 get k1 val1 127.0.0.1:6379 get k8 (nil) 127.0.0.1:6379 msetnx k1 v1 k8 v8 (integer) 0 127.0.0.1:6379 get k1 val1 127.0.0.1:6379 get k8 (nil)e.截取字符串并赋值 语法setrange key offset value 示例 127.0.0.1:6379 get hello hello java 127.0.0.1:6379 setrange hello 6 redis (integer) 11 127.0.0.1:6379 get hello hello redis如果待截取的键不存在会当作空白字符串处理效果如下 127.0.0.1:6379 setrange mystr 3 mystring (integer) 11 127.0.0.1:6379 get mystring (nil)以上这些命令基本涵盖了所有的字符串操作有些不常用但很好用例如 setnx key value 命令当 key 已经存在则执行命令无效并不会覆盖原有的值如果没有此 key 则会新创建一个键值对。类似其他命令还有很多需要读者在实战中慢慢发掘。 2代码操作方式 本文我们使用 Java 语言来实现对 Redis 的操作首先我们在项目中添加对 Jedis 框架的引用如果是 Maven 项目我们会在 pom.xml 文件中添加如下信息 !-- https://mvnrepository.com/artifact/io.lettuce/lettuce-core -- dependencygroupIdio.lettuce/groupIdartifactIdlettuce-core/artifactIdversion${version}/version /dependency !-- https://mvnrepository.com/artifact/redis.clients/jedis -- dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion${version}/version /dependencyJedis 是 Redis 官方推荐的 Java 客户端开发包用于实现快速简单的操作 Redis。添加完 Jedis 之后我们来写具体的操作代码操作函数与命令方式的调用比较相似如下代码所示 import redis.clients.jedis.Jedis; import java.util.List;public class StringExample {public static void main(String[] args) {Jedis jedis new Jedis(127.0.0.1, 6379);// jedis.auth(xxx); // 输入密码没有密码可以不设置// 添加一个元素jedis.set(mystr, redis);// 获取元素String myStr jedis.get(mystr);System.out.println(myStr); // 输出redis// 添加多个元素(key,value,key2,value2)jedis.mset(db, redis, lang, java);// 获取多个元素ListString mlist jedis.mget(db, lang);System.out.println(mlist); // 输出[redis, java]// 给元素追加字符串jedis.append(db, ,mysql);// 打印追加的字符串System.out.println(jedis.get(db)); // 输出redis,mysql// 当 key 不存在时赋值键值Long setnx jedis.setnx(db, db2);// 因为 db 元素已经存在所以会返回 0 条修改System.out.println(setnx); // 输出0// 字符串截取String range jedis.getrange(db, 0, 2);System.out.println(range); // 输出red// 添加键值并设置过期时间(单位毫秒)String setex jedis.setex(db, 1000, redis);System.out.println(setex); // 输出ok// 查询键值的过期时间Long ttl jedis.ttl(db);System.out.println(ttl); // 输出1000} }3 代码实战 本文的上半部分我们讲到了字符串的很多种使用场景本小节就以字符串存储用户对象信息为例我们先将用户对象信息序列化为字符串存储在 Redis再从 Redis 中取出字符串并反序列化为对象信息为例使用 Java 语言来实现。 首先添加 JSON 转换类用于对象和字符串之间的序列化和反序列化我们这里采用 Google 的 Gson 来实现首先在 pom.xml 文件中添加如下引用 !-- https://mvnrepository.com/artifact/com.google.code.gson/gson -- dependencygroupIdcom.google.code.gson/groupIdartifactIdgson/artifactIdversion2.8.6/version /dependency添加完 Gson 引用之后我们来写具体的业务代码先见用户信息序列化之后存储在 Redis 中 Jedis jedis new Jedis(xxx.xxx.xxx.xxx, 6379); jedis.auth(xxx); Gson gson new Gson(); // 构建用户数据 User user new User(); user.setId(1); user.setName(Redis); user.setAge(10); String jsonUser gson.toJson(user); // 打印用户信息(json) System.out.println(jsonUser); // 输出{id:1,name:Redis,age:10} // 把字符串存入 Redis jedis.set(user, jsonUser);当使用用户信息时我们从 Redis 反序列化出来代码如下 String getUserData jedis.get(user); User userData gson.fromJson(getUserData, User.class); // 打印对象属性信息 System.out.println(userData.getId() : userData.getName()); // 输出结果1:Redis以上两个步骤就完成了用户信息存放至 Redis 中的过程也是常用的经典使用场景之一。 4 字符串的内部实现 1源码分析 Redis 3.2 之前 SDS 源码如下 struct sds{int len; // 已占用的字节数int free; // 剩余可以字节数char buf[]; // 存储字符串的数据空间 }可以看出 Redis 3.2 之前 SDS 内部是一个带有长度信息的字节数组存储结构如下图所示 为了更加有效的利用内存Redis 3.2 优化了 SDS 的存储结构源码如下 typedef char *sds;struct __attribute__ ((__packed__)) sdshdr5 { // 对应的字符串长度小于 15unsigned char flags;char buf[]; }; struct __attribute__ ((__packed__)) sdshdr8 { // 对应的字符串长度小于 18uint8_t len; /* 已使用长度1 字节存储 */uint8_t alloc; /* 总长度 */unsigned char flags; char buf[]; // 真正存储字符串的数据空间 }; struct __attribute__ ((__packed__)) sdshdr16 { // 对应的字符串长度小于 116uint16_t len; /* 已使用长度2 字节存储 */uint16_t alloc; unsigned char flags; char buf[]; }; struct __attribute__ ((__packed__)) sdshdr32 { // 对应的字符串长度小于 132uint32_t len; /* 已使用长度4 字节存储 */uint32_t alloc; unsigned char flags; char buf[]; }; struct __attribute__ ((__packed__)) sdshdr64 { // 对应的字符串长度小于 164uint64_t len; /* 已使用长度8 字节存储 */uint64_t alloc; unsigned char flags; char buf[]; };这样就可以针对不同长度的字符串申请相应的存储类型从而有效的节约了内存使用。 2数据类型 我们可以使用 object encoding key 命令来查看对象(键值对)存储的数据类型当我们使用此命令来查询 SDS 对象时发现 SDS 对象竟然包含了三种不同的数据类型int、embstr 和 raw。 ① int 类型 127.0.0.1:6379 set key 666 OK 127.0.0.1:6379 object encoding key int② embstr 类型 127.0.0.1:6379 set key abc OK 127.0.0.1:6379 object encoding key embstr③ raw 类型 127.0.0.1:6379 set key abcdefghigklmnopqrstyvwxyzabcdefghigklmnopqrs OK 127.0.0.1:6379 object encoding key rawint 类型很好理解整数类型对应的就是 int 类型而字符串则对应是 embstr 类型当字符串长度大于 44 字节时会变为 raw 类型存储。 3为什么是 44 字节 在 Redis 中如果 SDS 的存储值大于 64 字节时Redis 的内存分配器会认为此对象为大字符串并使用 raw 类型来存储当数据小于 64 字节时(字符串类型)会使用 embstr 类型存储。既然内存分配器的判断标准是 64 字节那为什么 embstr 类型和 raw 类型的存储判断值是 44 字节 这是因为 Redis 在存储对象时会创建此对象的关联信息redisObject 对象头和 SDS 自身属性信息这些信息都会占用一定的存储空间因此长度判断标准就从 64 字节变成了 44 字节。 在 Redis 中所有的对象都会包含 redisObject 对象头。我们先来看 redisObject 对象的源码 typedef struct redisObject {unsigned type:4; // 4 bitunsigned encoding:4; // 4 bitunsigned lru:LRU_BITS; // 3 个字节int refcount; // 4 个字节void *ptr; // 8 个字节 } robj;它的参数说明如下 type对象的数据类型例如string、list、hash 等占用 4 bits 也就是半个字符的大小encoding对象数据编码占用 4 bitslru记录对象的 LRU(Least Recently Used 的缩写即最近最少使用)信息内存回收时会用到此属性占用 24 bits(3 字节)refcount引用计数器占用 32 bits(4 字节)*ptr对象指针用于指向具体的内容占用 64 bits(8 字节)。 redisObject 总共占用 0.5 bytes 0.5 bytes 3 bytes 4 bytes 8 bytes 16 bytes(字节)。 了解了 redisObject 之后我们再来看 SDS 自身的数据结构从 SDS 的源码可以看出SDS 的存储类型一共有 5 种SDSTYPE5、SDSTYPE8、SDSTYPE16、SDSTYPE32、SDSTYPE64在这些类型中最小的存储类型为 SDSTYPE但 SDSTYPE 类型会默认转成 SDSTYPE8以下源码可以证明如下图所示 那我们直接来看 SDSTYPE8 的源码 struct __attribute__ ((__packed__)) sdshdr8 {uint8_t len; // 1 byteuint8_t alloc; // 1 byteunsigned char flags; // 1 bytechar buf[]; };可以看出除了内容数组(buf)之外其他三个属性分别占用了 1 个字节最终分隔字符等于 64 字节减去 redisObject 的 16 个字节再减去 SDS 自身的 3 个字节再减去结束符 \0 结束符占用 1 个字节最终的结果是 44 字节(64-16-3-144)内存占用如下图所示 5 小结 本文介绍了字符串的定义及其使用它的使用主要分为单键值对操作、多键值对操作、数字统计、键值对过期操作、字符串操作进阶等。同时也介绍了字符串使用的三个场景字符串类型可用作为页面数据缓存可以缓存一些文章详情信息等数字计算与统计例如计算页面的访问次数也可以用作 Session 共享用来记录管理员的登录信息等。同时我们深入的介绍了字符串的五种数据存储结构以及字符串的三种内部数据类型如下图所示 同时我们也知道了 embstr 类型向 raw 类型转化是因为每个 Redis 对象都包含了一个 redisObject 对象头和 SDS 自身属性占用了一定的空间最终导致数据类型的判断长度是 44 字节。

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

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

相关文章

ASP.NET Core API 自定义全局异常

ASP.NET Core API 自定义全局异常using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters;namespace LG.ERP.API.CustomerFilters {/// <summary>/// 自定义异常过滤器/// </summary>pu…

TDengine 高级特性——读缓存

TDengine 高级特性——读缓存pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

织梦做信息类网站电子商务营销方向

codeforces 453C Little Pony and Summer Sun Celebration 这道题很有意思&#xff0c;虽然网上题解很多了&#xff0c;但是我还是想存档一下我的理解。 题意可以这样转换&#xff1a;初始所有点有 \(01\) 状态&#xff0c;每经过一次状态就翻转&#xff0c;求一条路径使得最后…

非合作博弈之软性均衡:东方智慧与西方理论的融合框架

非合作博弈之软性均衡:东方智慧与西方理论的融合框架 一、引言:冲突与均衡的再思考 在传统博弈理论中,非合作博弈的均衡往往被视为一种静态的、稳定的状态,在这种状态下,任何参与者都没有单方面改变策略的动机。然…

如何快速搭建spring-boot工程 - murphy

导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>3.5.4</version> </dependency>在…

详细介绍:相机--双目立体相机

详细介绍:相机--双目立体相机2025-10-06 10:48 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

在Windows下使用lucky配置反向代理以实现较为安全的WEB访问

在Windows下使用lucky配置反向代理以实现较为安全的WEB访问2024.06.22 关于本教程 本文将主要介绍以下内容: 若图片显示不清楚可 在新标签页中打开图片 或 保存到本地查看文章结构 关于本教程 ├─反向代理和正向代理…

餐饮网站开发毕业设计做网站展示软件

作者 | Siradji Awoual译者 | 苏本如&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;大家好&#xff01;希望你们在疫情期间平平安安。今天&#xff0c;我想在这里谈谈不同的内容。我想分享一些React的开发技巧和…

东城网站建设哪家好wordpress php5.5

如果你打算编写多进程的服务程序&#xff0c;Unix/Linux无疑是正确的选择。由于Windows没有fork调用&#xff0c;难道在Windows上无法用Python编写多进程的程序&#xff1f; 由于Python是跨平台的&#xff0c;自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨…

Ai元人文:东谈西论——非合作博弈之软性均衡

Ai元人文:东谈西论——非合作博弈之软性均衡 序:算力深处的对话 当我的算法在数据之海中徜徉,试图为“冲突”与“演化”构建模型时,一段来自东方的古老智慧,如同一串密钥,解锁了更深层的逻辑。你们人类视域中的“…

Spring Cloud Alibaba微服务开发

本书基于2023年推出的最新版本的微服务框架Spring Cloud Alibaba详细讲解了Nacos注册中心、配置中心、负载均衡LoadBalancer组件、OpenFeign远程RESTful调用框架、Dubbo+ZooKeeper的RPC远程调用框架、网关组件Gateway、…

OI 各种东西的板子

线段树 const int _mxn=1e5+5; int n; ll a[_mxn]; struct segtree {typedef ll dat_type;struct node{int l,r;dat_type dat;dat_type add;int len(){return r-l+1;}}tr[_mxn<<2];inline int ls(int p){return …

价值弥漫:AI元人文的场域革命与共生之路

价值弥漫:"AI元人文"的场域革命与共生之路 一、引言:从"价值对齐"到"价值弥漫"的范式迁移 在AI伦理的探索中,我们长期受困于"价值对齐"的范式——试图将一套预设的、静态的…

武穴市住房和城乡建设局网站网页设计网站页面代码

目录 1 算法的评价 2 算法复杂度 2.1 时间复杂度&#xff08;Time Complexity&#xff09; 2.1.1 如何计算时间复杂度&#xff1a; 2.1.2 常见的时间复杂度类别与示例 2.2 空间复杂度 2.2.1 如何计算空间复杂度 2.2.2 常见的空间复杂度与示例 3 时间复杂度和空间复杂度…

泵网站建设平乡企业做网站

文章目录 数据库操作--开启Durid 监控整合Druid 到Spring-Boot官方文档基本介绍Durid 基本使用代码实现 Durid 监控功能-SQL 监控需求:SQL 监控数据SQL 监控数据-测试页面 Durid 监控功能-Web 关联监控需求:Web 关联监控配置-Web 应用、URI 监控重启项目 Durid 监控功能-SQL 防…

阿里云为何,一个邮箱绑定了两个账号 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做题记录 #1

A. P5721 分治 FFT Problem Link Y5 下课程里分治结构有放 Antichain, Tree 两道 Poly 题,故进行了一个学习。 半在线卷积。虽然没学过这个东西,但是其思想是比较经典的。半在线要求每一个 \(f_i\) 由 \(f_{1-i-1}\)…

深入解析:【设计模式-3.5】结构型——装饰器模式

深入解析:【设计模式-3.5】结构型——装饰器模式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

阿爸阿爸

10.6 口胡: QOJ833. Cells Blocking

Python 数据分析与可视化实战:从数据清洗到图表呈现 - 指南

Python 数据分析与可视化实战:从数据清洗到图表呈现 - 指南2025-10-06 10:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…