自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)
  • 收藏
  • 关注

原创 CS336视觉伺服

笔记动力学模型机械臂动力学的研究方法:拉格朗日,牛顿-欧拉,高斯,凯恩方法。机械臂的动力学主要是两个问题:正向运动学和逆向运动学。视觉伺服视觉伺服的基本思想基于视觉的伺服控制方法的目的是最小化一个图像误差,该误差可以定义为:e(t)=s(m(t),a)−s∗e(t)=s(m(t), a)-s^{*}e(t)=s(m(t),a)−s∗其中m(t)m(t)m(t)是一系列的图像特征,如图像点特征、形状特征、位姿特征或频域特征等。s(m(t),a)s(m(t),a)s(m(t),a)表示通过特征m(

2021-10-19 16:38:31 477 1

原创 设计模式总结

概述创建型设计模式单例模式工厂模式建造者模式设计模式总结创建型设计模式创建型设计模式包括:单例模式、工厂模式、建造者模式、原型模式。它主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。单例模式单例模式用来创建全局唯一的对象。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例模式。单例有几种经典的实现方式,它们分别是:饿汉式、懒汉式、双重检测、静态内部类、枚举。尽管单例是一个很常用的设计模式,在实际的开发中,我们也确实经常用到它

2021-09-10 10:19:02 182

原创 数据结构与算法【整理版】

目录数据结构支持动态插入数据的动态数据结构有哪些图有几种存储方式?邻接矩阵与邻接表存储结构的优缺点?什么时候用什么结构?堆的实现和创建过程二叉树相关概念二叉查找树红黑树的性质以及插入删除解决hash冲突的方法map和set的实现原理算法手撕算法题图相关的算法字符串匹配算法常见排序算法的实现以及稳定性(快排跟归并考的很多)快排的递归及非递归实现归并排序以及应用二者的比较数据结构支持动态插入数据的动态数据结构有哪些散列表:插入删除查找都是O(1), 是最常用的,但其缺点是不能顺序遍历以及扩容缩容的性能损耗

2021-08-08 21:18:05 413

原创 C++基础【整理版】

C++基础【整理版】内存管理内存对齐malloc/free与new/delete的区别描述内存分配方式以及它们的区别内存泄漏内存分配、管理、RAIIRAII内存分布C++如何申请释放内存malloc和free关于malloc申请内存问题new和delete二者的对比堆和栈的区别STL内存分配构造函数与析构函数基类的析构函数不是虚函数,会带来什么问题?为什么构造函数不能是虚函数必须在构造函数初始化列表里进行初始化的数据成员有哪些?C++中构造函数发生异常会怎样?其它构造时抛出的异常C++中构造函数中this指

2021-08-08 21:17:26 648

原创 Linux操作系统【整理版】

Linux问题整理2021年7月27日操作系统综述Linux的运行级别内核态与用户态的区别?进程管理进程与线程的区别进程的创建:fork()内存管理零拷贝技术Linux如何优化 CPU 占用率?CPU优化进程间通信进程间通信机制文件系统软链接与硬链接操作系统综述Linux的运行级别0: 系统停机(关机)模式,系统默认运行级别不能设置为0,否则不能正常启动,一开机就自动关机。1:单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。2:多用户模式,没有NFS网络支

2021-08-08 21:17:00 536

原创 计算机网络【整理版】

复习及面试题总结——计算机网络TCP三次握手和四次挥手在浏览器中输入url地址->>显示主页的过程HTTP和HTTPS的区别TCP、UDP协议的区别常见的状态码TCP三次握手和四次挥手在浏览器中输入url地址->>显示主页的过程HTTP和HTTPS的区别TCP、UDP协议的区别常见的状态码...

2021-08-08 21:15:34 129

原创 C++容器中常用的API函数

公共部分的APIsize()Return Value返回类型为无符号整型,容器大小empty()Return Value如果容器大小为零,则返回true,否则返回false1.vector关于初始化 vector<int> v = {5,10,15}; // 初始化元素 vector<int> v(10, 0); // 初始大小及初始值 sort(vector.begin(), vector.end()); // 排序push_back()//

2021-03-25 16:26:53 579

原创 ACM模式下C++的输入输出格式模板

ACM模式下C++的输入输出格式模板读取字符读取字符串读取整数读取数组转换为链表转换为二叉树读取字符代码int main() { char ch = getchar(); while (ch) { cout << ch; ch = getchar(); } return 0;}输出cchhaarr读取字符串代码int main() { string line; while (get

2021-03-19 21:55:39 2365

原创 Linux常用的命令行

目录浏览文件安装软件运行程序命令行运行后台运行服务方式运行关机与重启Linux 现在常用的有两大体系,一个是 CentOS 体系,一个是 Ubuntu 体系。浏览文件cd就是 change directory,就是切换目录;cd . 表示切换到当前目录;cd … 表示切换到上一级目录;dir,可以列出当前目录下的文件。ls 列出当前目录下的文件,意思是 list。ls -l,也就是用列表的方式列出文件ll 用列表的方式列出文件,包含隐藏文件列表文件说明:# ls -ldrwxr-x

2020-12-29 11:31:03 125

原创 C++的宏定义和条件编译

目录预处理编程包含文件(#include)宏定义(#define)条件编译(#if/#else/#endif)预处理编程“预处理编程”到底能干什么呢?你一定要记住:预处理阶段编程的操作目标是“源码”,用各种指令控制预处理器,把源码改造成另一种形式,就像是捏橡皮泥一样。首先,预处理指令都以符号“#”开头,这个你应该很熟悉了。但同时你也应该意识到,虽然都在一个源文件里,但它不属于 C++ 语言,它走的是预处理器,不受 C++ 语法规则的约束。包含文件(#include)先来说说最常用的预处理指令“#

2020-12-18 09:47:12 833

原创 C++的生命周期和编程范式

目录C++程序的四个阶段编码(coding)预处理(pre-processing)编译(compiling)运行(running)C++语言的五种编程范式面向过程面向对象泛型编程模板元编程函数式编程C++程序的四个阶段编码(coding)、预处理(pre-processing)、编译(compiling)和运行(running)。编码(coding)编码应该是你很熟悉的一个阶段了,这也是我们“明面”上的开发任务最集中的地方。在这个阶段,我们的主要工作就是在编辑器里“敲代码”:定义变量,写语句,实现各

2020-12-17 20:06:22 213

原创 VS2019安装、创建工程、实用的插件以及常用快捷键

持续更新。安装VS2019官网下载地址:https://www.microsoft.com/zh-cn/.选择对应版本下载下载后安装:参照下面这个大牛的博客https://nickhuang1996.blog.csdn.net/article/details/88603729.创建第一个工程步骤一:按下图操作进入创建项目选项框步骤二: All languages下选择C++,All platform下选择Windows,All project types下选择Console。

2020-12-16 21:02:11 1022

原创 悲观锁与乐观锁的原理和应用场景

至于悲观锁和乐观锁,也并不是 MySQL 或者数据库中独有的概念,而是并发编程的基本概念。主要区别在于,操作共享数据时,“悲观锁”即认为数据出现冲突的可能性更大,而“乐观锁”则是认为大部分情况不会出现冲突,进而决定是否采取排他性措施。反映到 MySQL 数据库应用开发中,悲观锁一般就是利用类似 SELECT … FOR UPDATE 这样的语句,对数据加锁,避免其他事务意外修改数据。乐观锁则与 Java 并发包中的 AtomicFieldUpdater 类似,也是利用 CAS 机制,并不会对数据加锁,而是

2020-12-15 16:10:05 159

原创 接口和抽象类有什么区别?

接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到 API 定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。Java 标准类库中,定义了非常多的接口,比如 java.util.List。抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码重用。除了不能实例化,形式上和一般的 Java 类并没有太大区别,可以有

2020-12-15 16:03:38 237

原创 根据Java 反射机制,动态代理是基于什么原理?

反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似机制做到的,比如用来包装 RPC 调用、面向切面的编程(AOP)。实现动态代理的方式很多,比如 JDK 自身提供的动态代理,就是主要利用了上面提到的反射机制。还有其他的实现方式,比

2020-12-15 15:44:44 79

原创 Arrays.sort()、Collections.sort()的排序方式及设计思路

数据类型对于原始数据类型,目前使用的是所谓双轴快速排序(Dual-PivotQuickSort),是一种改进的快速排序算法,早期版本是相对传统的快速排序,你可以阅读源码。而对于对象数据类型,目前则是使用TimSort,思想上也是一种归并和二分插入排序(binarySort)结合的优化排序算法。TimSort 并不是 Java 的独创,简单说它的思路是查找数据集中已经排好序的分区(这里叫 run),然后合并这些分区来达到排序的目的。数据集大小太小的数据集,复杂排序是没必要的,Java 会直接进行

2020-12-15 15:38:24 143

原创 集合框架与线程安全

CollectionJava 的集合框架,Collection 接口是所有集合的根,然后扩展开提供了三大类集合。(下图中没有java.util.concurrent线程安全的容器,也没有map集合)List,也就是我们前面介绍最多的有序集合,它提供了方便的访问、插入、删除等操作。Set,Set 是不允许重复元素的,这是和 List 最明显的区别,也就是不存在两个对象 equals 返回true。我们在日常开发中有很多需要保证元素唯一性的场合。Queue/Deque,则是 Java 提供的标准队列

2020-12-15 15:15:23 123

原创 ConcurrentHashMap源码分析——如何实现高效地线程安全?

ConcurrentHashMap 如何实现高效地线程安全?为什么需要ConcurrentHashMap?Hashtable 本身比较低效,因为它的实现基本就是将 put、get、size 等各种方法加上“synchronized”。简单来说,这就导致了所有并发操作都要竞争同一把锁,一个线程在进行同步操作时,其他线程只能等待,大大降低了并发操作的效率。前面已经提过 HashMap 不是线程安全的,并发情况会导致类似 CPU 占用 100% 等一些问题,那么能不能利用 Collections 提供的同步包

2020-12-15 15:14:12 98

原创 HashMap 源码分析

主要围绕以下三点展开分析:HashMap 内部实现基本点分析。容量(capacity)和负载系数(load factor)。树化 。首先,我们来一起看看 HashMap 内部的结构,它可以看作是数组(Node<K,V>[] table)和链表结合组成的复合结构,数组被分为一个个桶(bucket),通过哈希值决定了键值对在这个数组的寻址;哈希值相同的键值对,则以链表形式存储,你可以参考下面的示意图。这里需要注意的是,如果链表大小超过阈值(TREEIFY_THRESHOLD, 8),图中的链

2020-12-15 10:57:27 80

原创 设计模式的类型总结

大致按照模式的应用目标分类,设计模式可以分为创建型模式、结构型模式和行为型模式。创建型模式,是对对象创建过程的各种问题和解决方案的总结,包括各种工厂模式(Factory、AbstractFactory)、单例模式(Singleton)、构建器模式(Builder)、原型模式(ProtoType)。结构型模式,是针对软件设计结构的总结,关注于类、对象继承、组合方式的实践经验。常见的结构型模式,包括桥接模式(Bridge)、适配器模式(Adapter)、装饰者模式(Decorator)、代理模式(Pro

2020-12-15 10:25:46 81

原创 RDB和AOF持久化

目录REB文件的创建和载入RDB文件结构重点总结AOF持久化AOF持久化实现命令追加AOF文件的写入和同步AOF持久化的效率和安全AOF重点总结Redis是内存数据库,若不将数据存储在磁盘中,一旦服务器退出进程,服务器中数据库的状态也会消失。RDB持久化功能将生成的RDB文件是经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。REB文件的创建和载入两个生成RDB文件的命令:SAVE和BGSAVESAVE命令: 会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器

2020-12-08 15:48:45 171

原创 Hashtable、HashMap、TreeMap 有什么不同?

Hashtable、HashMap、TreeMap 都是最常见的一些 Map 实现,是以键值对的形式存储和操作数据的容器类型。Hashtable 是早期 Java 类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。HashMap 是应用更加广泛的哈希表实现,行为上大致上与 HashTable 一致,主要区别在于 HashMap 不是同步的,支持 null 键和值等。通常情况下,HashMap 进行 put 或者 get 操作,可以达到常数时间的

2020-12-08 15:47:56 150

原创 对比 Vector、ArrayList、LinkedList 有何区别?

这三者都是实现集合框架中的 List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。Vector 是 Java 早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector 内部是使用对象数组来保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的数组,并拷贝原有数组数据。ArrayList 是应用更加广泛的动态数组

2020-12-08 15:47:20 96

原创 力扣深度优先算法经典题型

目录深度优先题型分类解题代码130. 被围绕的区域79. 单词搜索529.扫雷游戏784. 字母大小写全排列剑指 Offer 38. 字符串的排列22.括号生成60.排列序列17. 电话号码的字母组合93. 复原IP地址77.组合39.组合总和40.组合总和II46. 全排列46. 全排列II深度优先题型分类解题代码130. 被围绕的区域/** * 130. 被围绕的区域 */class Solution130 { private int len; private int

2020-12-08 15:46:42 244

原创 MySQL数据库语句、事务和索引调优

目录SQL语句调优慢SQL语句的诱因优化SQL语句的步骤常用的SQL优化索引调优事务调优并发事务带来的问题事务隔离解决并发问题锁具体实现算法优化高并发任务ACIDSQL语句调优慢SQL语句的诱因无索引、索引失效导致慢查询锁等待(MDL锁、行锁)等flush不恰当的SQL语句使用不恰当的 SQL 语句也是慢 SQL 最常见的诱因之一。例如,习惯使用 <SELECT >,<SELECT COUNT()> SQL 语句,在大数据表中使用 <LIMIT M,N>

2020-11-21 15:54:28 127

原创 通过 Show Profile 分析 SQL 执行性能

MySQL 是在 5.0.37 版本之后才支持 Show Profile 功能的,如果你不太确定的话,可以通过 select @@have_profiling 查询是否支持该功能。mysql> select @@have_profiling;+------------------+| @@have_profiling |+------------------+| YES |+------------------+查看是否开启此功能mysql> sele

2020-11-21 11:27:47 109

原创 Git指令(自己专用)

克隆远程仓库: git clone 仓库地址创建自己的分支并且切换到自己的分支下: git checkout -b lixingqiang上面这条指令就相当于两条指令:git branch lixingqiang & git checkout lixingqiang查看当前分支: git branchgit branch命令会列出所有分支,当前分支前面会标一个*号。将自己所需上传的文件放置在自己命名的文件夹下,将自己的分支提交到码云上: 提交的三步指令切换到主分支下,将自己的分支合并到主

2020-11-16 16:42:55 52

原创 数据结构与算法——红黑树

目录平衡二叉查找树红黑树平衡二叉查找树平衡二叉查找树中“平衡”的意思,其实就是让整棵树左右看起来比较“对称”、比较“平衡”,不要出现左子树很高、右子树很矮的情况。这样就能让整棵树的高度相对来说低一些,相应的插入、删除、查找等操作的效率高一些。红黑树红黑树的英文是“Red-Black Tree”红黑树的定义:根节点是黑色的;每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;每个节点,从该节点到达其可达

2020-11-10 14:49:44 104

原创 数据结构与算法——二叉树

目录树的概念二叉树二叉树遍历树的概念父节点、子节点、兄弟节点、根节点、叶子节点、叶节点。高度、深度、层二叉树满二叉树: 编号 2 的二叉树中,叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树就叫做满二叉树。完全二叉树: 叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大,这种二叉树叫做完全二叉树。二叉树的储存方式:一种是基于指针或者引用的二叉链式存储法,一种是基于数组的顺序存储法。二叉树遍历前序遍历、中

2020-11-10 14:49:20 112

原创 数据结构与算法——哈希算法

目录什么是hash算法应用一:安全加密应用二:唯一标识应用三:数据校验应用四:散列函数应用五:负载均衡应用五:数据分片如何统计“搜索关键词”出现的次数?如何快速判断图片是否在图库中?应用七:分布式存储什么是hash算法将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。hash算法满足以下几点要求从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到

2020-11-10 14:48:56 191

原创 数据结构与算法——散列表

这里写目录标题散列表散列函数散列冲突开放寻址法链表法动态扩容如何避免低效扩容Java 中的 HashMap初始大小装载因子和动态扩容散列冲突的解决办法散列函数散列表散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。把编号转化为数组下标的映射方法就叫作散列函数(或“Hash 函数”“哈希函数”),而散列函数计算得到的值就叫作散列值(或“Hash 值”“哈希值”)。散列表两个核心问题是散列函数设计和散列冲突解决散列函

2020-11-10 14:48:21 127

原创 数据结构与算法——跳表

目录如何理解“跳表”用跳表查询到底有多快跳表是不是很浪费内存高效的插入和删除跳表索引的动态更新如何理解“跳表”单链表对链表建立一级“索引”比如 16。我们可以先在索引层遍历,当遍历到索引层中值为 13 的结点时,我们发现下一个结点是 17,那要查找的结点 16 肯定就在这两个结点之间。然后我们通过索引层结点的 down 指针,下降到原始链表这一层,继续遍历。这个时候,我们只需要再遍历 2 个结点,就可以找到值等于 16 的这个结点了。这样,原来如果要查找 16,需要遍历 10 个结点,现在只需要

2020-11-10 14:48:03 87

原创 数据结构与算法——排序(桶排序、计数和基数)

目录桶排序时间复杂度分析桶排序首先,我们来看桶排序。桶排序,顾名思义,会用到“桶”,核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。 桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。时间复杂度分析如果要排序的数据有 n 个,我们把它们均匀地划分到 m 个桶内,每个桶里就有 k=n/m 个元素。每个桶内部使用快速排序,时间复杂度为 O(k * logk)。m 个桶排序的时间复杂度就是 O(m * k * logk),因为 k=n/m,所以整个桶排

2020-11-10 14:47:44 220

原创 数据结构与算法——排序(归并和快排)

目录归并排序原理归并排序的代码实现归并排序性能分析快速排序原理快速排序的代码实现快速排序的性能分析归并排序和快速排序的区别归并排序原理归并排序的核心思想还是蛮简单的。如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。归并排序使用的就是分治思想。 分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。归并排序的代码实现递推公式:merge_sort(p…r) = m

2020-11-10 14:47:24 148

原创 MQTT讲解

目录MQTT简介客户端、中间件和建立连接客户端中间件MQTT的连接发布和订阅发布topicpayloadqosretain订阅退订心跳遗嘱MQTT简介MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)。MQTT是一个基于客户端和服务端的发布/订阅模式的消息传输协议。客户端、中间件和建立连接客户端我们所说的客户端泛指MQTT的客户端,包含发布者和订阅者,分别负责发布消息和订阅消息。注意:客户端的ID必须是唯一的。通常的做法是将时间字符串作为客

2020-10-31 15:40:25 452

原创 MySQL重启后event_scheduler自动关闭的解决办法

问题描述: 在项目中需要用到event_scheduler定时器来实现每天更新前一天的统计总量,今天突然发现event_scheduler=OFF, 定时器event_scheduler被关闭了,后来查看了找到了原因:因为重启MySQL后event_scheduler自动设置为OFF,网上查阅了资料,收集以下两种方法,并且验证通过。1.手动开启‘event_scheduler’1.查看event_scheduler状态mysql> show variables like '%sch%';+--

2020-10-31 10:51:49 2300

原创 数据结构与算法——排序(冒泡、插入和选择)

目录如何分析一个排序算法算法的执行效率排序算法的内存消耗排序的稳定性冒泡排序插入排序选择排序总结如何分析一个排序算法算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数 、低阶比较次数和交换(或移动)次数排序算法的内存消耗我们前面讲过,算法的内存消耗可以通过空间复杂度来衡量,排序算法也不例外。不过,针对排序算法的空间复杂度,我们还引入了一个新的概念,原地排序(Sorted in place)。原地排序算法,就是特指空间复杂度是 O(1) 的排序算法。我们今天讲的三种

2020-10-20 14:20:55 81

原创 数据结构与算法——队列

目录什么是队列队列的实现基于数组的队列实现基于链表的队列实现循环链表阻塞队列和并发队列问题什么是队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。先进者先出,这就是典型的“队列”。队列的实现基于数组的队列实现跟栈一样,队列可以用数组来实现,也可以用链表来实现。用数组实现的栈叫作顺序栈,用链表实现的栈叫作链式栈。同样,用数组实现的队列

2020-10-19 09:59:46 289

原创 String、StringBuffer、StringBuilder有什么区别?

典型回答**String是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。**它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。 由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。StringBuffer 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append 或者 add 方法,把字符串添加到已有

2020-10-19 09:23:28 91 1

原创 Redis数据结构——键值的关系

目录数据类型与底层数据结构键和值的关系hash冲突数据类型与底层数据结构键和值的关系一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。所以,我们常说,一个哈希表是由多个哈希桶组成的,每个哈希桶中保存了键值对数据。因为这个哈希表保存了所有的键值对,所以,我也把它称为全局哈希表。如果你只是了解了哈希表的 O(1) 复杂度和快速查找特性,那么,当你往 Redis 中写入大量数据后,就可能发现操作有时候会突然变慢了。这其实是因为你忽略了一个潜在的风险点,那就是哈希表的冲突问题和 rehash

2020-10-17 19:29:28 339

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除