redis持久化 之 反面面试官

  • 给新观众老爷的开场
  • redis 持久化
    • 面试官: "你了解redis的持久化吗?"
    • RDB
      • 面试官: "你能说说rdb具体是怎么备份数据的吗?"
      • 面试官: "那具体rdb的文件是如何生成的呢?"
      • 面试官: (难道这小子要反面我 😂)
      • 面试官: "redis是如何通过rdb文件恢复数据的呢?"
    • AOF
      • 面试官: "AOF是怎么备份数据的?"
      • 面试官: "AOF文件有什么可以优化的地方吗?"
      • 面试官: "AOF重写的逻辑你了解吗?"
    • 面试官: "最后一个问题"
  • 小结
  • 往期博客回顾

给新观众老爷的开场

大家好,我是弟弟!
最近读了一遍 黄健宏大佬的 <<Redis 设计与实现>>,对Redis 3.0版本有了一些认识
该书作者有一版添加了注释的 redis 3.0源码
👉官方redis的github传送门。
👉黄健宏大佬添加了注释的 redis 3.0源码传送门

网上说Redis代码写得很好,为了加深印象和学习redis大佬的代码写作艺术,了解工作中使用的redis 命令背后的源码逻辑,便有了写博客记录学习redis源码过程的想法。

redis 持久化

面试官: “你了解redis的持久化吗?”

候选人: "

  1. redis有两种持久化机制,一种是rdb,一种是aof
  2. rdb可以理解为"全量备份",将当前全量的k/v键值对全部写到文件中。
  3. aof可以理解为"增量备份",每当收到 部分相关的redis命令,将命令以文本字符串的形式追加写入文件中。
  4. 如果启用rdb机制,在redis挂掉的时候,会丢失上一次rdb备份到现在之间的数据
  5. 如果启用aof机制,在redis挂掉的时候,使用aof重放命令不如一份完整的rdb文件速度来得快。
  6. 于是在redis4.0及以后aof重写时,可配置 aof与rdb混合的方式。
    aof重写时,先保存当前全量rdb文件数据,保存期间新的命令以aof的形式追加写入,这样redis挂掉重启时,大部分数据可以快速恢复,之后的增量数据由aof记录,rdb与aof优势互补,真正的又快又稳😂 “

面试官: (嗯,这小子回答得还不错)

RDB

面试官: “你能说说rdb具体是怎么备份数据的吗?”

候选人: "

  1. 备份rdb文件有两种方式
  2. 一种是命令主动触发 save, bgsave
    2.1 save将阻塞redis主线程,
    2.2 bgsave 使用 fork+copy on write 开子进程来备份数据
    不会阻塞主线程,使用的内存也不会突然翻倍
  3. 一种是通过配置文件配置自动备份rdb条件 比如 60秒内 >= 10000个k/v 有变化,5分钟内 >= 10个k/v有变化 将触发bgsave"

面试官: “那具体rdb的文件是如何生成的呢?”

候选人:(不好意思,我刚好看过一点)
写入rdb文件中的数据包括

  1. 当前redis的所有k/v键值对,以及过期key的过期时间
  2. 上述k/v分别属于哪一个db,也就是dbid,(因为恢复数据的时候需要使用)
  3. 当前rdb文件格式的版本号

至于生成rdb文件的代码逻辑,拿bgsave命令来举例吧。

  1. 判断 server.rdb_child_pid 是否等于 -1.
    1.1 等于-1表示当前没有子进程进行bgsave操作,本次bgsave可以正常执行
    1.2 不等于-1,表示正在进行bgsave的子进程的pid,本次bgsave不会真正执行。
  2. childpid = fork() 创建子进程
    2.1 父进程会记录fork耗时,子进程pid,关闭自动rehash,标记 dict_can_resize = 0
    2.2 子进程将关闭网络连接套接字,然后开始执行真正的rdbSave函数,在该函数中会生成一个完整的rdb文件

rdbSave函数将按照rdb文件格式写入数据,逻辑如下

  1. 创建一个临时文件,用于写入数据
    snprintf(tmpfile,256,"temp-%d.rdb", (int) getpid());
    fp = fopen(tmpfile,"w");
    
  2. 写入 rdb版本号
     //The current RDB version. When the format changes in a way that is no longer//backward compatible this number gets incremented.//RDB 的版本,当新版本不向旧版本兼容时,增一#define REDIS_RDB_VERSION 6
    ... 
    snprintf(magic,sizeof(magic),"REDIS%04d",REDIS_RDB_VERSION);
    if (rdbWriteRaw(&rdb,magic,9) == -1) goto werr;
    ...
    
  3. 跳过空的db字典
    写入db选择码 254 以及dbid, 记录接下来的数据,原来属于哪个db
  4. 遍历当前db字典,取出key,value,以及key的过期时间
    如果key过期了,那么这个k/v不会写入rdb文件
    如果key没过期,写入过期时间,key,value 相关的值
    如果key没有过期时间,仅写入 key, value 相关的值
  5. 所有k/v写入之后,最后写入EOF码 255
  6. 在写入 8个字节的 crc校验码
  7. fflush、fsync、fclose 三连同步到文件并关闭fd
  8. 子进程以一个退出码结束退出,表示 bgsave 执行 成功 or 失败
  9. 主进程在每次 serverCron 时,会使用wait3()来获取结束子进程的信息
    若获取到rdb子进程的结束信息 ,会将 server.rdb_child_pid 置为-1,并更新相关的信息。

面试官: “嗯,不错,回答得很详细”
候选人: “嗯,这个还没说完”

面试官: (难道这小子要反面我 😂)

候选人: "
对于具体的 key/value/过期时间 如何保存还没说,实际上这也是 保存rdb文件中骚操作最多的地方,应该需要重点讲一下。

实际上对于读/写文件来说,写入的内容生前到底是什么数据结构是不关心的。
读/写文件只关心,要从哪个地址开始,要操作多少个字节,完事。
什么跳跃表,哈希表, 站在读/写文件的角度来看实际上都一样。
当我看到这里的时候,才第一次体会到了什么叫 文件流

  1. 要在文件中保存 各种数据结构变量 是比较麻烦的,因为恢复的时候还要对从文件流里读出来的数据进行识别,哪一坨是什么结构。
    为了简化问题,redis写入rdb文件的变量类型, 大概有三类

  2. 直接写入的 1字节 标识码,比如 选择db的操作码 254, 结束标记EOF 255

  3. 整数变量,因变量大小不同,为了节省空间一共分为了 6位/14位/32位 三种数字,并且在低字节用额外2位 表示 类型码 也就是表示数字类型,这样恢复的时候才能读出正确的数字

  4. 字符串变量
    4.1 一类是可以表示为数字的字符串变量,使用的表示方法跟整数变量类似。
    4.2 一类是不能表示为数字且不能被压缩的字符串变量,会将 字符串长度 以整形变量的形式保存下来,然后再写入字符串。
    4.3 一类是可以被压缩的字符串变量,会写入被压缩标识码,压缩后字符串长度,压缩钱字符串长度,压缩后字符串。

有了上述的三类基本结构,拿 保存相对复杂一些的 zset 数据类型的操作,来讲讲一讲redis的键值对,最后是怎么保存在rdb中的

  1. 如果key有过期时间,写入 过期时间标识码 252,且后面紧跟一个8字节的过期时间戳

  2. 写入1个value的类型标识码 (实际上这个标识码 同时表示了 value的数据类型,编码类型 以及表示后面跟着的是一对 key/value ,因为key都是字符串类型,所以只记value的就好了)

     /* Dup object types to RDB object types. Only reason is readability (are we* dealing with RDB types or with in-memory object types?).** 对象类型在 RDB 文件中的类型*/#define REDIS_RDB_TYPE_STRING 0#define REDIS_RDB_TYPE_LIST   1 //默认的双向链表实现的链表#define REDIS_RDB_TYPE_SET    2 //默认的哈希表实现的集合#define REDIS_RDB_TYPE_ZSET   3 //默认的跳跃表实现的有序集合#define REDIS_RDB_TYPE_HASH   4 //默认的哈希表实现的哈希数据类型/* Object types for encoded objects.** 对象的编码方式*/#define REDIS_RDB_TYPE_HASH_ZIPMAP    9 #define REDIS_RDB_TYPE_LIST_ZIPLIST  10 //压缩列表实现的链表#define REDIS_RDB_TYPE_SET_INTSET    11 //整数集合实现的集合#define REDIS_RDB_TYPE_ZSET_ZIPLIST  12 //压缩列表实现的有序集合#define REDIS_RDB_TYPE_HASH_ZIPLIST  13 //压缩列表实现的哈希表
    
  3. 写入key对应的字符串

  4. 根据value的类型,处理有序集合(这里拿有序集合来举例子)
    4.1 如果是压缩列表实现的,直接将 压缩列表占用的空间字节数作为字符串的长度,整个压缩列表 当作一个字符串,写入rdb文件。

    因为压缩列表本身就是紧凑的一串内存空间

    4.2 如果是跳跃表实现的,写入元素个数, 遍历跳跃表中的字典,将所有的 value/score
    分别以 value 字符串形式, scroe 特殊标识码/或者字符串形式 写入rdb文件中

    因为 score是浮点数 正无穷,负无穷,或者不是一个数 可以用特殊标识符来表示,如果是正儿八经的浮点数,将转换成字符串来表示

    为什么这里只是遍历了 跳跃表中的字典取出所有 value/score 写入rdb呢?那这个跳跃表的层高呢,各个value的顺序,不存了吗?
    是的,不存了。这些信息,其实在恢复rdb文件的时候 根据value/score是可以重建这个跳跃表的,而且减少这些冗余的信息,可以减少rdb文件的体积,提高rdb文件生成的速度。

"
候选人: "

  1. 除了上述的这些为了节省rdb文件空间的骚操作以外,对字符串在一定情况下也是会进行压缩的,redis中使用了 lzf 压缩算法。可以通过配置启用该算法。"

  2. 该算法具有 o(1xn)的时间复杂度,比较适合redis这种对性能有点要求的软件使用。 但快和高压缩率 这两者比较难兼得,该算法的压缩率是不稳定的。
    不能保证一定能压缩,该算法无法对一些字符串进行压缩的情况也是有的。

    具体的原因在于
    2.1 该算法会从头到尾遍历需要压缩的字符串,
    2.2 并采样统计 “第一次出现的子串”
    2.3 如果后面该子串重复出现,
    2.4 记录该子串距离前面被重复的子串的偏移量,以及重复的长度就ok了
    2.5 显然该算法在字符串中存在大量重复子串的情况下,压缩率高
    2.6 该算法在字符串中不存在大量重复子串的情况下,压缩率低

    对比测试了 一个长度为100万的字符串,在不同情况下的压缩率
    如果每个字符是在26个不同的字母中随机产生的 压缩后大小为原串的 91.5%
    如果每个字符是在10个不同的字母中随机产生的 压缩后大小为原串的 64.3%
    如果是100万个相同的字母,压缩后大小为原串的 1.13%
    lzf算法,压缩/解压代码带注释不超过500行,可以说是很轻量了
    lzf压缩算法网站
    lzf压缩算法源码下载

"
面试官: (嗯,不错不错,这小子有点东西)

面试官: “redis是如何通过rdb文件恢复数据的呢?”

候选人: "

  1. redis作为缓存服务器启动时,如果开启了rdb,会根据配置查找的rdb文件
  2. 找到了的话,其实按照写入rdb文件的顺序和格式解出数据就行了。
  3. 但是仅靠rdb中读出来的数据还不能完整的还原对应的数据结构,
  4. 比如上面所说的zset,当发现要读一个zset时,
    redis会像平时创建zset一样,创建一个zset数据结构,
    并将各个value/score 模拟添加进去,以此还原出正确的数据结构
    "

AOF

面试官: “AOF是怎么备份数据的?”

候选人: "
如果 配置文件中 appendonly 设置为yes 启动redis的话,AOF功能将被开启。

  1. 当redis处理一个命令后,计算dirty值(该命令有没有修改内存数据)

  2. 如果该命令修改了内存数据,用该命令 RESP协议格式的字符串先写入全局的AOF缓冲区,也就是server.aof_buf。
    如果有必要指明命令是写到哪个db的话,还会写入一个选择db号的命令

    比如 “SET mykey myvalue” 命令, 实际写入的字符串是 “*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n”
    实际上redis客户端发到redis服务器的命令就是长这个样子的。
    以原命令字符串的形式记录AOF文件,在使用AOF文件恢复数据时比较方便。在内部起一个伪客户端,直接重放命令恢复数据

  3. 在redis主线程的循环逻辑里,每轮事件轮训前都会执行 beforeSleep 函数,该函数中会将 server.aof_buf的内容尝试写入aof文件并同步
    3.1 如果后台线程还有同步到文件的任务没完成,就会等一会儿再写
    3.2 如bgsave,bgrewrite没执行完,也等一会儿再同步

  4. 写入aof_buf到文件之后,就是AOF的同步策略了,同步策略是可配置的。

    /* Append only defines */
    #define AOF_FSYNC_NO 0          //不主动触发同步,依赖系统自己同步
    #define AOF_FSYNC_ALWAYS 1      //总是同步
    #define AOF_FSYNC_EVERYSEC 2    //超过1秒同步一次
    #define REDIS_DEFAULT_AOF_FSYNC AOF_FSYNC_EVERYSEC //默认同步策略
    

    4.1 对于 AOF_FSYNC_ALWAYS 策略,每次将aof_buf写入aof文件后,就在当前的主线程中调用fsync函数同步。
    4.2 对于 AOF_FSYNC_EVERYSEC 策略,若超过1秒后,会将本次同步任务,使用锁的方式,写入全局任务队列。在别的线程中取出该任务调用 fsync函数同步到文件。

    没错,这里会用到锁。redis内部,对于文件同步是有另外的线程来单独处理的,所以这里会有一点点 使用锁来解决多线程的共享变量读写问题。

面试官: “AOF文件有什么可以优化的地方吗?”

候选人: (这不就是 AOF文件重写吗,还好我看过 😂)
"

  1. 像上述的AOF文件,会存下来一些冗余的命令。

    比如设置了一个过期key/value,一定时间之后,这个key/value实际已经不需要了。
    又比如设置了一个key/value,后面这个key/value 被删掉了,那AOF文件里,该key/value的设置/删除命令,实际上就是冗余的。

  2. 这个时候就需要AOF文件重写了,将原本文件里的冗余命令全部删掉,只保留恢复数据需要的最少的信息就可以了,这样AOF的文件大小会缩小,包含的命令数也会减少,自然使用AOF文件恢复数据是,也会更快一些。

  3. 当然AOF重写命令,上面也说了。
    在4.0之后 AOF重写是可以先保存一份完整的rdb文件,然后再rdb文件之后再追加写入增量的AOF文件内容。

  4. 在4.0之前AOF重写实际上跟rdb文件逻辑类似,会遍历各个db,并且将现存的key/value/过期时间这些信息取出来,然后转换成 “设置命令” 存入新的AOF文件中,老的AOF文件就可以直接删除了,这样使用AOF文件恢复时,就可以直接重放命令恢复数据。
    "

面试官: “AOF重写的逻辑你了解吗?”

候选人: "

  1. AOF重写逻辑跟RDB其实有点类似,也是fork+copy on write开子进程来完成AOF文件的重写,并将子进程的pid记录到 全局变量 server.aof_child_pid 中。

  2. 与RDB不太一样的地方
    一个是上面说的,AOF会将当前DB数据以 "设置命令"的方式写入AOF文件。

  3. 另外一个就是,AOF文件写入期间,发生的新的需要写入AOF文件的命令,会被记录到主线程的server.aof_rewrite_buf_blocks 中,该变量实际上是一个list,每一个list节点会有一块儿buffer来存放增量命令,默认每块是10MB。

  4. 当AOF重写的子进程结束后返回一个退出码,主进程在serverCron的轮询中调用 wait3()来接收子进程的相关信息。收到后,会将 server.aof_rewrite_buf_blocks中的内容在主线程中写入AOF文件。并将 server.aof_rewrite_buf_blocks, server.aof_buf清空,将server.aof_child_pid 置为-1

    这个操作会阻塞主进程,但如果不这么操作再开子进程来写,这会不会陷入一个死循环

  5. 4.0之后的AOF重写,如果开了AOF-RDB混合持久化,全量文件保存那里换成了保存rdb文件,另外恢复的时候也是用RDB恢复,在用AOF增量恢复,其余逻辑倒是差不太多。
    "

面试官: “最后一个问题”

面试官: “你明天能来上班吗?”
候选人: “😏”

小结

  1. 从全局来看,redis的数据备份实际上就是 全量 + 增量 两种方式。
  2. 但毕竟这是程序,在实际实现的时候,涉及到的细节数量还是比较多的。
  3. redis的数据备份与恢复 一方面可以用来给自己这个进程用,另一方面主从复制的似乎也是有点用的,这个等写主从复制的时候再看看。

往期博客回顾

  1. redis服务器的部分启动过程
  2. GET命令背后的源码逻辑
  3. redis的基础数据结构之 sds
  4. redis的基础数据结构之 list
  5. redis的基础数据结构 之 ziplist
  6. redis 基础数据结构之 hash表
  7. redis不稳定字典的遍历
  8. redis 基础数据结构 之 集合
  9. redis 基础数据结构 之 有序集合
  10. redisObject 以及 对抽象的理解
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 背包DP详解

    目录1.01背包 2.完全背包 3.多重背包 4.混合背包 5.分组背包 6.二维费用背包1.01背包 题目简介: 有n个物品和一个容量为v的背包,每个物品的价值为c[i],体积为w[i],要求选择一些物品放入背包中,使物品总体积不超过m的前提下,物品的总价值最大,求最大总价值。 基本思路: …...

    2024/4/15 3:11:56
  2. count(*)、count(主键id)、count(字段)、count(1)实现原理和性能比较

    在工作中我们或多或少都会遇到统计数据的需求,那么问题来了,count(*)、count(主键id)、count(字段)、count(1) 这些操作,我们到底用哪个比较合适呢。count() 的语义count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,…...

    2024/4/15 3:11:55
  3. C指针6:指针变量作为函数参数

    在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。像数组、字符串、动态分配的内存等都是一…...

    2024/4/23 18:25:39
  4. Python之Matplotlib数据可视化(八):HOG实现简单人脸识别

    真实世界的数据集通常都充满噪音和杂质,有的可能是缺少特征,有的可能是数据形式很难转换成整齐的 [n_samples, n_features] 特征矩阵。怎么提取特征这件事情并没有万灵药,只能靠数据科学家不断地磨炼直觉、积累经验。 机器学习中最有趣、也是最具挑战性的任务就是图像识别,…...

    2024/4/15 3:11:52
  5. ARTS 打卡第五周

    ARTS 打卡week05每周完成一个 ARTS: Algorithm: 每周至少做一个 LeetCode 的算法题 Review: 阅读并点评至少一篇英文技术文章 Tips: 学习至少一个技术技巧 Share: 分享一篇有观点和思考的技术文章Algorithm 4. 寻找两个正序数组的中位数 给定两个大小为 m 和 n 的正序(从小到…...

    2024/4/20 12:34:36
  6. Vue 源码深入解析之 生命周期、组件注册和异步组件 两万字长文总结

    一、生命周期每个 Vue 实例在被创建之前都要经过一系列的初始化过程。例如需要设置数据监听、编译模板、挂载实例到 DOM、在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,给予用户机会在一些特定的场景下添加他们自己的代码。在我们实际项目开…...

    2024/5/4 4:33:13
  7. Command PhaseScriptExecution failed with a nonzero exit code问题

    这是因为Xcode10以后的都是默认选中的最新的New Build System(Default),在这个编译系统的环境下,打包的CI脚本一直会报错。换成Legacy Build System 这个就好。Legacy是遗留的意思,也就是之前的编译系统。Xcode菜单栏选择File-- Workspace Setting...

    2024/4/24 14:30:21
  8. 安装Kubernetes集群

    在fedora32/centos8上安装Kubernetes集群 Repository: Author: GitHub Introduction: Author:杭州电子科技大学 唐涛 CreateTime:2020-6-21 09:11:19 UpdateTime:2020-6-21 17:39:16 Copyright: 唐涛 HOME | 首页 © 2020 Email: tangtao2099@outlook.com Link: 知…...

    2024/4/24 14:30:20
  9. Ubuntu下使用终端命令直接打开图形化文件资源浏览器方法

    在Ubuntu下一般我们都是利用终端来与各种文件打交道,但是有时候cd到某个目录下时,会想打开图形化界面方便查看各种文件,这个时候有什么办法吗? 难道还要我一层一层依次打开到指定的路径吗?有没有方便快捷的方法呢?答案是肯定的! Ubuntu提供了nautilus命令可以用来直接以…...

    2024/4/24 14:30:22
  10. Gradle系列之Android-Plugin Task(一)

    这里写自定义目录标题Android-Plugin Task(一)apk 构建流程参考文献 Android-Plugin Task(一) 大家平时开发Android项目时一般都是点击AS run按钮,这样apk会自动安装到手机上,这整个过程到底发生来什么呢? 今天就来梳理下整个流程gradle做了什么,讲解前先来熟悉下apk整体构…...

    2024/5/4 12:20:02
  11. js常见简单的优化总结

    前言 一般在做项目时,要考虑js性能方面的问题,所以就来了解并掌握js编写代码的优化 1. 巧用|| 和&&布尔运算符 function eventHandler(e) {if(!e) {e = window.event} } //可优化替换为 function eventHandler(e) {e = e || window.event; }2. 减少重绘和重排(回流)…...

    2024/5/4 6:20:07
  12. 单链表反转

    链表初始化 public class ListNode {int value;ListNode next;public ListNode(int value){this.value = value;}}递归实现 /*** 递归实现* @param head* @return*/public static ListNode invertList(ListNode head){if(head == null || head.getNext() == null){return head;…...

    2024/4/24 14:30:19
  13. socket-多人聊天室 Linux

    实验内容 本系统实现一个基于Linux的模拟即时通信系统,要求实现以下功能: 1、模拟即时通信系统可以实现多人同时在线聊天功能; 2、在线聊天用户登录本系统需输入用户名和密码; 3、本系统需能够查询历史聊天记录; 4、本系统运行后,需启动一个守护进程,该守护进程记录本系…...

    2024/4/24 14:30:16
  14. 怎么把报表模块从应用里拆出来单独维护?

    如果报表通过报表工具开发,且报表中只涉及 SQL/ 存储过程,拆分相对容易些,只需要整理好报表模块需要的数据库资源即可,比如:会涉及到哪些数据源、数据库连接数需要分配多少等,然后将报表模块单独作为报表应用部署维护即可。如果报表中涉及 JAVA 编写的内容(通常是为报表…...

    2024/4/24 14:30:14
  15. 场效应管(场效晶体管),绝缘栅型、结型。内部载流子的运动是怎么样的,控制过程、主要参数、特性曲线

    前导 对比前面讲的三极管。 1.晶体三极管,双极性的,多子少子都参与导电,因为有少子参与,所以受温度影响比较大。而场效应管导电只有多子参与导电,所以受温度影响比较小。 2.三极管是电流IB控制IC,有电流IB的控制,控制端就有功率的损耗,整体上增加的了损耗。而场效应管管…...

    2024/5/4 10:37:45
  16. Go的RPC

    RPC是远程过程调用(remote procedure call),是用于分布式系统中节点之间互相通信。 本文章参考Go语言高级编程,对这本书进行了比较详细的演示。我们先从Go原生的RPC讲起。 RPC 节点间通信,其中有一个节点是作为服务的提供方,我们称之为服务端,另外一个节点为服务的调用方,…...

    2024/4/24 14:30:12
  17. OpenCv3编程学习三

    1.首先知道了源码的存放位置: xx位置/opencv/sources/samples/cpp 2.修改对应的彩色目标追踪,把对应的cpp文件放入到一个新建的项目中,开始运行。 代码如下: #include <opencv2/core/utility.hpp> #include "opencv2/video/tracking.hpp" #include "o…...

    2024/4/24 14:30:11
  18. 【Java语言】剑指office系列之字符串----左旋转字符串

    题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单…...

    2024/4/24 14:30:10
  19. R语言数据可视化案例(世界杯球员信息数据可视化)

    R语言数据可视化案例(世界杯球员信息数据可视化)世界杯球员案例数据预处理 世界杯球员案例 在 faraway 包中包含一个名为 worldcup 的数据集(加载 faraway 包后,可通过代码“head(worldcup)”查看数据的前 5 行,该数据集是 2010 年世界杯上球员的信息数据,每个变量所表示…...

    2024/4/20 12:39:49
  20. 高并发线程池(二、什么是线程池)

    JAVA线程池 JAVA线程池分两种: 1.ThreadPoolExecutor 2.ForiJoinPool (也有人说分为什么single,cache,workstealing等,他们底层其实都是new的这两种线程池) ThreadPoolExecutor ThreadPoolExecutor线程池内部维护了一个线程池集合(HashSet),和一个任务队列(queue)。多个线…...

    2024/4/15 3:12:04

最新文章

  1. 【面试经典 150 | 图】除法求值

    文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;广度优先搜索 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容…...

    2024/5/6 9:07:08
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Java项目:基于SSM+vue框架实现的人力资源管理系统设计与实现(源码+数据库+毕业论文+任务书)

    一、项目简介 本项目是一套基于SSM框架实现的人力资源管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…...

    2024/5/3 23:35:34
  4. composer常见错误解决

    在Java中&#xff0c;常见的问题和解决方法包括&#xff1a; 内存不足错误&#xff1a;Java应用程序在运行时可能会遇到内存不足的错误。可以通过增加JVM的堆内存大小来解决&#xff0c;可以通过设置-Xms和-Xmx参数来指定初始堆大小和最大堆大小。 java -Xms2G -Xmx4G YourAppl…...

    2024/5/5 8:38:08
  5. vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持

    文章目录 一、v-model是什么二、什么是语法糖三、v-model常见的用法1、对于输入框&#xff08;input&#xff09;&#xff1a;2、对于复选框&#xff08;checkbox&#xff09;&#xff1a;3、对于选择框&#xff08;select&#xff09;&#xff1a;4、对于组件&#xff08;comp…...

    2024/5/4 20:45:28
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57