自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python集合

元素被大括号包围,每个元素间用逗号隔开,就是集合。它和字典的区别在于,字典是键值对,而集合只是单个元素,如下就是一个集合。集合的特点在于,里面的元素不能是重复的,并且不支持下标访问。

2025-03-17 22:45:31 223

原创 Python元组和字典

元素由小括号包围,每个元素之间用逗号隔开。

2025-03-17 19:23:33 745

原创 Python列表

中括号包围所有的元素,每个元素间用逗号隔开。

2025-03-17 08:58:10 416

原创 Python字符串类型

m的下标是6,因此起始位置就是6,c的下标是10,结束索引是不包含自己的,因此是11,步长是1,也就是一个个取,如果步长是2,那就表示依次跳2步,m取完跳到s在跳到c。如果步长是负数,表示从右往左取。我们取出一个字符串的子串,如果通过下标的方式,然后用+拼接起来,比如下面代码中我们要取出music,只能下标一个个获取然后拼接,这样其实很麻烦,我们可以通过切片的方式获取。删除字符串左侧的空白字符,不会修改原字符串,返回修改后的字符串。删除字符串右侧的空白字符,不会修改原字符串,返回修改后的字符串。

2025-03-16 21:56:23 1045

原创 Python循环

我现在如果要打印一千遍:"I Love Music!",我该怎么做呢?我难道要写1000条print吗?我们可以使用循环语句完成。

2025-03-16 18:38:58 392

原创 Python条件语句

如果有钱大于1块钱,可以上车,否则不能上车,上车后如果有空座,可以坐下,没有空座,就站这。and是并且的意思,当多个条件同时成立才为真,or是或者的意思,只要有一个为真就是真。我们用0代表石头,1代表剪刀,2代表布,然后让电脑随机生成一个0-2之间的数。2.安检时,需要检查是否有违禁物品,如果有,不允许上车,否则安检通过。我们先来考虑一下我们胜利的条件,如果是下面的情况,那么我们会胜利。我们输入的年龄是19,大于18,因此会执行if代码块里的语句。输入的年龄是9,条件不成立,因此不会执行代码块里的语句。

2025-03-16 17:38:09 1004

原创 Python初识

任何一门语言都是要对数据进行操作的,比如说要对两个数进行加法操作,我们可以直接使用数据进行操作,比如说10 + 1,结果是11,但是它的结果总要保存起来吧?我们怎么保存呢?我们要使用一个空间把这个数据装进去,就如同我们要下载一首音乐,我们总要把这首音乐存储在哪一个盘的那一个文件夹里,这个存储的位置就是空间。变量实际上就是一个空间,它里面可以存储数据,但是,我们如何使用这个空间?我们要给它起一个名字,方便我们后续使用。

2025-03-16 16:27:17 555

原创 C++编写Redis客户端

打开github后往下面翻,可以看到下载,要下载redis-plus-plus要先安装hiredis。C++操作redis的库有很多,这里使用redis-plus-plus,我们需要在githb上下载。当一个函数,返回值需要表示多个数据的时候,往往也会借助插入迭代器,来实现往一个容器中添加元素的效果。那有没有合法的方式打开呢?当一个函数,参数需要传递多个值的时候,往往都是支持初始化列表或者是一对迭代器的方式来进行实现。安装完毕后,头文件会装到 /usr/local/include/sw/的redis++。

2025-03-07 23:07:30 794

原创 Redis主从复制

主从复制解决的问题:单点问题1.单个redis节点,可用性不高。2.单个redis节点,性能有限。1.复制分为全量复制、部分复制、实时复制。2.redis通过复制功能实现主节点的多个副本。3.复制支持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。4.主节点用来写,从节点用来读,这样做可以降低主节点的访问压力。5.主从节点之间通过心跳机制保证主从节点通信正常和数据一致性。1.主节点配置不需要改动2.从节点在配置文件中加入slaveof主节点ip主节点端口的形式即可。

2025-03-07 23:01:08 1029

原创 Redis事务

1.原子性redis的事务到底有没有原子性,存在争议。原子性最原本的含义是把多个操作打包成一起,要么全都执行,要么全都不执行,原子这个词表示的意思就是不可拆分的最小单元,redis做到了这个含义。但是相比之下MySQL这里的原子性走的更远一些,也是把多个操作打包到一起,要么全都执行成功,要么全都不执行。对于redis来说,如果事务中有若干操作,存在有失败的,那就失败吧,不会有回滚操作。对于MySQL来说,如果事务中有操作执行失败,要进行回滚,把中间执行的操作全都回退了。

2025-03-06 07:09:39 4743

原创 Redis持久化

重启进程或者重启主机之后,数据是否存在,存在就是持久,不存在就是不持久。redis是一个内存数据库,把数据存储在内存中,因此只要关机或者重启进程,数据就没了,因此redis要想做到持久就需要把数据存硬盘上,但是如果存储在硬盘上那它就失去了它快的优势。为了保证速度快,数据肯定还得在内存中,但是为了持久,数据还要想办法存储在硬盘上,小孩子才做选择,我全都要,redis决定,内存和硬盘上都存数据,这两份数据理论上是完全相同的,但实际上小概率会存在差异。

2025-03-06 06:53:24 1311

原创 Redis渐进式遍历&数据库

keys*可以一次性的把整个redis中所有key都获取到,这个操作是非常危险的,因为可能一下获取到太多的key,阻塞redis服务器。要想很好的获取到所有的key,又不想出现卡死的情况,就可以使用渐进式遍历。渐进式遍历:不是一个命令把所有的key全都拿到,而是每执行一次命令,只获取到其中一小部分,这样的话保证当前的这一次操作不会太卡,要想得到所有的key就需要多次遍历了。渐进式遍历其实是一组命令,但是这一组命令的使用方法是一样的,其中代码性命令是。

2025-03-06 05:59:07 635

原创 Redis数据结构——zset

命令作用给集合添加元素zcard key获取元素的长度获取到member的分数获取元素下标删除集合中元素修改元素分数查看一段区间元素返回在一个分数区间里的元素个数。根据分数划分区间获取指定元素删除start到end之间的元素。根据下标删除指定一个删除的区间,这个区间是通过分数来描述的区间。对多个集合求交集对多个集合求并集。

2025-03-06 05:50:01 1010

原创 Redis数据结构——list

操作类型命令时间复杂度添加O(k),k是元素个数O(k),k是元素个数O(n), n是pivot距离头尾的距离查找O(s + n),s是start偏移量 n是start到endO(n), n是索引的偏移量len keyO(1)删除lpop keyO(1)rpop keyO(1)O(k),k是元素个数O(k),k是元素个数修改O(n), n是索引的偏移量阻塞操作O(1)

2025-03-05 19:14:39 740

原创 Redis数据结构——set

命令功能添加元素随机删除元素判断元素是否在集合中随机返回一个元素scard key返回集合长度随机删除key获取集合所有元素求交集求并集求差集。

2025-03-05 18:56:36 612

原创 Redis数据结构——hash

命令执行效果时间复杂度设置值O(1)获取值O(1)删除fieldO(1)hlen key计算field个数O(1)获取所有的field-valueO(K)批量获取field-valueO(K)判断field是否存在O(1)hkeys key获取所有的fieldO(K)hvals key获取所有的valueO(K)设置值,但必须field不存在时才可以设置成功O(1)对应field的value + nO(1)对应field的value + nO(1)

2025-03-03 18:34:01 862

原创 Redis数据类型——string

命令执行效果时间复杂度设置key的值是valueO(1)get key获取key的值O(1)删除指定的keyO(k)批量设置指定的key和valueO(k)批量获取key的值O(k)incr key指定的key值+1O(1)decr key指定的key值-1O(1)incrby key n(可以为负数)指定的key值+nO(1)decrby key n(可以为负数)指定的key值-nO(1)incrbyfloat key n(可以为负数)

2025-03-03 08:59:48 650

原创 Redis数据类型

显然不是吧,很多情况下每个客户端和服务器之间的通信也没那么频繁,当然也看具体场景,下载文件啥的就需要不断通信,但如果你看web网站就可能不是那么频繁,此时这么多socket大部分时间都是静默的,上面是没有数据需要传输的,也就意味着同一时刻只有少数socket是活跃的,这是使用IO多路复用的前提,此时通过IO多路复用就可以用一个线程处理多个socket,这是操作系统给程序员提供的机制,提供了一套API,内部的功能都是操作系统内核实现的。redis就不一样了,就是简单的插入删除,当然就快呀。

2025-03-02 10:00:00 521

原创 数据结构——布隆过滤器

布隆过滤器也是一种位图结构,它可以快速的判断字符串在不在位图中。它的优点是节省空间。我们首先要解决的问题就是如何把字符串映射到为图中,比如现在有"凡人修仙传"、"古典音乐入门"、"音乐剧"这三个字符串,我们怎么把这三个字符串映射到位图中呢?我们需要用字符串哈希算法把这三个字符串转成整形,然后%上空间大小,比如"凡人修仙传"映射到52,"古典音乐入门"映射到17,"音乐剧"映射到79,然后把该位置设置位1,如果要查找就判断映射到的位置是0还是1。但是最大的问题是啥呢?

2025-03-01 22:59:23 936

原创 Redis通用命令

Redis客户端可以和服务器在同一台主机上,也可以在不同主机上,目前我们一般只有一台机器,此时客户端和服务器就是在同一个机器上的。客户端服务器模式是客户端通过网络给服务器发送一条请求,服务器收到请求后通过网络响应给客户端,一个服务器是可以接受多个客户端的请求的。Redis也是一个基于客户端-服务器结构的程序,为什么说也呢?因为MySQL也是一个基于客户端服务器的结构。1.自带的名命令行客户端: redis-cli。Redis的客户端有很多种形态。

2025-03-01 16:17:14 165

原创 数据结构——位图

位图可以用来快速判断某个数在不在,它的本质也是一种哈希结构,不过位图更节省空间。位图是用比特位来存储数据的。我们知道一个整形有32个比特位,我们可以用1个整形存储32个数据,如果我们要查找15这个数在不在,只用判定这个整形的第15个比特位是0还是1,是0,说明不在,是1说明在,如果我们要插入17,只用把这个整形的第17个比特位置设置为1即可。因为C++没有一个比特的数据类型,因此这个地方我们用char或者int都是可以的,区别在于不同类型存储的比特位个数不同,这个地方我们就用整形了。

2025-02-28 18:04:19 980

原创 Ubuntu20.04安装Redis

6379是Redis的默认端口,但IP是127.0.0.1本地回环IP,我们需要修改配置文件把ip改了,改成让其它主机也能访问到的IP,当前127.0.0.1这个IP只能由主机上的客户端访问,跨主机就访问不了了。很多软件都是有配置文件的,一个大的软件里面包含很多的功能,而且有很多可以定制化的操作,我们可以通过配置文件选择开启/关闭/设定某些功能。我们可以使用ping命令来测试连通性,如同显示PONG说明是没事问题的。如果没有切换到root用户的,切换到root用户。修改了配置之后需要重新启动服务器。

2025-02-27 22:58:01 422

原创 Redis初识

我们使用MySQL存数据大,但是慢,我们有没有办法让它又大又快,很多场景都是遵循二八原则的,我们可以把热点数据拎出来存储在Redis中,20%的热点数据可以满足80%的请求,我们只用在Redis上存储这20%的数据,让大部分的请求直接读取Redis,避免直接访问数据库,这样速度就上去了,如果请求的数据Redis上不存在,再去访问数据库,这样整体的返回时间会更快。它的工作机制是这样的。Redis也提供了消息队列的功能,Redis的初衷是作为消息队列的,但是它的消息队列功能用到的是很少的,反而是它的存储功能。

2025-02-27 22:27:31 753

原创 C++11线程

C++11提供了线程库,下面我们来看一下如何使用。

2025-01-25 16:41:24 1019

原创 数据结构——哈希表

在顺序表、链表、二叉树等数据结构中,如果要找一个值,要遍历一遍才可以找到,因此,这些数据结构查找的效率都是O(N)的。我们之所以要遍历,原因就在于不知道这个值在哪个位置放着,因此我们要遍历,找到该值所在的位置,如果我们知道这个值在哪里放着,那我们直接去访问那个位置,不就以O(1)的时间复杂度找到了。那我们怎么知道一个值在哪个位置放着?

2025-01-24 14:42:05 1053

原创 mysql客户端命令

这个命令是很危险的,如果黑客拿到了你的mysql密码,登录你的客户端,就可以使用system查看你xshell上的一些文件,比如说/etc/passwd文件,这个文件下记录的是用户和用户组对应的权限。下面我们准备了一些SQL语句,大家可以把下面的SQL语句赋值到本地的一个.sql文件里,然后导入到xshell里执行。这个列表里就展示了mysql所有的指令,前面表示完整的指令,后面表示的是短指令的格式,是等价的关系。,直接使用这个命令即可,不用退出再连了,我们可以看到每次连接的id是不同的。

2024-12-16 20:12:49 1035

原创 linux文件缓冲区

本文介绍了文件缓冲区,缓冲区的刷新策略,和实现C文件接口

2024-11-16 10:27:36 1169

原创 linux文件与重定向

linux文件系统调用及重定向。

2024-11-13 19:14:25 1010

原创 【C++】内存池

本文介绍了池化技术,以及内存池的实现方式。

2024-11-11 23:38:54 1815

原创 linux进程控制

介绍了进程退出、进程等待和进程替换

2024-11-10 16:52:05 872

原创 linux环境变量

本文介绍了环境变量是什么,见了见linux都有哪些环境变量,如何修改某个环境变量,如何查看一个环境变量的值,如何查看所有的环境变量,命令行参数是什么?如何新增环境变量?什么是本地变量?如何查看本地变量和环境变量,如何取消环境变量,什么是内建命令?什么是普通命令

2024-11-08 20:48:17 1048

原创 进程地址空间

本文介绍了地址空间的划分以及地址空间是什么,以及虚拟地址和物理地址之间通过页表是如何转化的,以及为什么要有地址空间。

2024-11-06 16:40:34 834

原创 linux进程状态&优先级

本文介绍了进程常见的状态,以及linux中进程的状态,又谈了谈进程的优先级,优先级是什么为什么又怎么修改优先级,以及操作系统是如何根据优先级展开调度的,介绍了优先级调度的大O(1)调度算法。

2024-11-04 19:24:44 683

原创 linux进程

本文介绍了进程的相关概念以及进程的属性和linux创建进程的系统调用。

2024-11-04 13:05:33 741

原创 线程的互斥与同步

本文介绍了线程高并发情况下所带来的问题,由此引入了互斥和同步等机制。在互斥中介绍了锁以及锁的原理和死锁问题,在同步中,介绍了条件变量和CP问题以及信号量等

2024-10-26 07:51:13 1261 1

原创 linux线程

当我们创建一个线程的时候,是将进程的一部分资源分配给线程,让线程去执行,因此,说线程是进程内部执行就是在进程地址空间执行。执行粒度更细的意思是,线程执行进程的一小部分代码,而进程执行所有代码,因此比进程更细。

2024-10-23 15:31:24 588

原创 数据结构——队列

本文介绍了队列是什么,以及队列的实现

2024-10-16 16:01:35 893 1

原创 栈相关OJ

本文介绍了栈相关的算法题目,对于加深栈的理解很有帮助

2024-10-15 23:35:01 845

原创 数据结构——栈

简单介绍了栈是什么,以及如何用C语言实现一个栈

2024-10-14 19:54:07 857 1

原创 链表相关OJ

203. 移除链表元素 - 力扣(LeetCode)解法一:尾插到新链表当我们看到这道题的时候,我相信大多数人脑海中的第一个想法就是直接尾插到一个新链表当中。因此,我们可以遍历这个链表,如果当前节点的val不是要删除的数,就将它尾插到新链表 ,最后返回新链表的头。代码:这个地方还是有细节需要注意的, 在最后需要把tail的next置为空。这里tail是有可能为空的,如果为空的话就会报错。因此需要特判一下。比如说题目给的示例3,链表里的数全是7,要删除的也全是7,此时就不会进入尾插的逻辑,tail就是空

2024-09-11 19:02:08 762 1

空空如也

空空如也

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

TA关注的人

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