- 博客(95)
- 收藏
- 关注
原创 【Redis】Set 集合
集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中元素之间是⽆序的 元素不允许重复。⼀个集合中最多可以存储2^31 -1 个元素。Redis 除了支持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集。
2025-12-23 17:24:26
415
原创 【Linux】内网穿透(实操)/打洞
我这里没有记录",于是,直接将该报文丢弃了,这就是防火墙策略。现在B可以直接去找A:B到A小区保安处说“我找54321号保安亭的A”,保安查登记簿发现8765号保安亭的B在允许名单里,于是放行。利用一台具有公网IP的服务器作为“桥梁”或“中继站”,通过由内网设备主动发起的、持续的连接,在公网与内网之间建立一条虚拟的数据隧道,从而绕过NAT/防火墙的限制。最后,如何验证你的云服务器上的端口是否是可达的,可以被公网访问的,我们可以在cmd使用telnet,如果没有telnet,可以在powershell执行。
2025-12-20 15:12:19
1637
原创 【Redis】Hash 哈希
而redis中的哈希,就是把key这一层组织完了,到了value,value本身也是一种哈希类型,是指值本⾝⼜是⼀个键值对结构,形如 key = "key",value = { { field1, value1 }, ..., {fieldN, valueN } }哈希类型中的映射关系通常称为 field-value,⽤于区分 Redis 整体的键值对(key-value),注意这⾥的 value 是指 field 对应的值,不是键(key)对应的值,请注意 value 在不同上下⽂的作⽤。
2025-12-19 21:06:00
976
1
原创 【Linux】正/反向代理
代理服务器(Proxy Server)是一种位于客户端(如您的电脑或手机)和目标服务器(如网站或在线服务)之间的中间服务器。它充当“中介”的角色,转发客户端的请求,并返回服务器的响应。它本质上也是个服务器!✅。
2025-12-18 08:29:54
1370
4
原创 【Redis】列表List类型
redis中的列表有点像C++中的deque,我们暂且把它当做顺序表/链表来使用就行。假设现在有a、b、c、d、e 五个元素从左到右组成了⼀个有序的列表,列表中的每个字符串称为元素(element),⼀个列表最多可以存储 2 - 32^1个元素。在 Redis 中,可以对列表两端插⼊(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。如图所示列表中可以有重复元素。
2025-12-17 12:06:26
706
1
原创 【Redis】String 字符串
总结一下,以上redis的使用都是根据具体的业务场景,不再直接访问数据库,而是增加一份缓存,提高了效率,也减小了数据库的压力,将常常被使用到的数据构建键值对放到redis中。可是具体什么是业务?业务重要吗?业务其实就是一个公司/产品,要解决一系列过程,这个解决过程,就可以叫做业务。而技术就是为了满足业务所诞生的,所有技术都要围绕业务展开,以后在考虑问题时,要先考虑到业务,业务是具体干嘛的,再去想想这个技术行不行,根据业务来开展,做一些技术的调整。
2025-12-16 18:00:55
1300
1
原创 【Linux】网络层IP
为什么要有网络层?什么是网络层?网络层如何做的?网络层的定位这些问题需要我们一一来解决我们学习网络的本质是什么嘞?就是一个报文完整的生命周期!
2025-12-13 16:48:35
1463
1
原创 【Linux】TCP机制
我们一直说,TCP三次握手,三次握手,可是为什么是三次啊?少一次可以吗?多一次可以吗?答案是不可以!举个例子:在现实生活中男女朋友结婚,要满足什么条件?1.双方的愿意--征得双方的同意2.双方父母要愿意---征得双方父母的同意,三次握手也如次~三次握手为什么是三次,原因有两点:1.验证全双工首先client发送一个SYN给server,能验证client有发的能力吗?不能,因为还没有收到server的应答,一旦收到server的应答ACK,client就知道,自已100%有发的能力!
2025-12-09 15:04:20
1079
原创 【Redis】浅谈数据结构和内部编码和单线程架构
type 命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合),但这些只是 Redis 对外的数据结构,当然Redis可不只这5种数据结构,大概有10种。我们介绍最常用的,如图所示:实际上 Redis 针对每种数据结构都有自已的底层内部编码实现,而且是多种实现,这样 Redis 会在合适的场景选择合适的内部编码,目的就是为了达到节省时间/空间的效果!
2025-12-06 13:03:51
738
原创 【Linux】UDP报头和TCP报头
传输层,负责数据能够从发送端传输接收端,是两个进程间的通信,通过源端口号和目的端口号就能标明是哪两个进程在通信。
2025-12-01 15:09:28
1022
1
原创 【Linux】HTTPS协议原理
客户端使用CA机构的公钥(这个公钥通常预装在浏览器或操作系统的根证书库中) 去解密证书中的签名(Sig)由于这个证书是CA机构使用它的私钥加密的,所以浏览器拿着内置的CA机构的公钥去解密,得到的值D_pem,因为是同一套解密算法,所以得到的D_cal应该还D_pem相等才对,才说明是可信的。第⼆组(非对称加密): 用于协商生成对称加密的密钥. 客户端用收到的 CA 证书中的公钥 (是可被信任的)给随机生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解 密获取到对称加密密钥.
2025-11-24 15:05:25
830
原创 【Redis】服务端高并发分布式结构演进之路
我们来想一想关于服务器的高并发问题,如果我们做一个服务器,假如我们自已实现了一台服务器,部署到了我的机器上,发现,如果访问量是1w以内,机器还勉强能跑,但是如果访问量再多,机器就宕机了,思考一下,我们的服务器和像腾讯,百度,这样的大厂能够完成功能的服务器,最本质的区别是什么?解决人的问题,你能够被一个人访问你的服务器,完成功能,这不值得骄傲,但是如果你的服务器能够服务几千万乃至上亿的用户,并且保定稳定性,又谈何容易。
2025-11-23 08:30:16
1318
原创 【Redis】初识Redis及其安装
应用(Application)/ 系统(System)为了完成⼀整套服务的⼀个程序或者⼀组相互配合的程序群。模块(Module)/ 组件(Component)当应⽤较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解。⽣活例⼦类⽐:军队中为了进⾏某据点的攻克,将⼈员分为突击⼩组、爆破⼩组、掩护⼩组、通信⼩组等。分布式(Distributed)系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。是物理上的多个主机。集群(Cluster)
2025-11-21 08:50:48
431
原创 【Linux】Cookie和Session
我们已经提到了,HTTP 协议是一个无连接、 无状态的协议, 即每次请求都需要建立新的连接http底层虽然使用tcp,Tcp是有连接的,但是关我http啥事,http是无连接的。这个我能理解。但是无状态?也就是对用户的请求,历史行为不做保存。但是,这不是和我们的常识背道相驰吗?比如我们登录B站的大会员看视频,是不是意味着我们每看一个视频就需要登录一次大会员?
2025-11-20 08:27:03
1163
原创 【C++11】异常
C语言主要通过错误码的形式处理错误,错误码本质就是对错误信息进行分类编号,拿到错误码以后还要去查询错误信息,比较麻烦。C++11通过异常时抛出⼀个对象,这个对象可以函数更全面的各种信息。异常并不是坏的,反而,它会让我们知道程序中哪里有错误,方便我们快速定位错误,并且不会导致我们的程序直接挂掉。
2025-11-14 18:39:06
882
原创 【Linux】自定义协议+序列和反序列化
也就是Tcp也不知道这条报文给你发完整没,那如果这一次报文中只给你发了"ls -" , 下一次报文开头再给你发"l -a ...",也就是报文的交付可能是不完整的,那此时我们将"ls -" 交给上层处理,我们如果只取了这次报文,这显然是错误的。所以,我们采取了一种温柔的处理方式,我们的服务器可以输出内容,但是都输出到/dev/null中,它就像个无底洞,可以吞噬我们的所有输入,所以,这种方式的好处就是,不是不让你输出,而是保证你不会因为关闭输出而导致的意外错误。当我们的会话退出时,我们的服务就会挂掉?
2025-11-10 15:10:07
1046
1
原创 【Linux】TCP
✅socket和Udp类似socket()打开一个网络通讯端口,如果成功的话,就像 open()一样返回一个文件描述符;应用程序可以像读写文件一样用 read/write 在网络上收发数据;如果 socket()调用出错则返回-1;对于 IPv4, family 参数指定为 AF_INET;对于 TCP 协议,type 参数指定为 SOCK_STREAM, 表示面向流的传输协议protocol 参数的介绍从略,指定为 0 即可✅bind和Udp类似。
2025-11-09 18:31:03
738
原创 【Linux】Socket编程预备及UDP
刚开始,我们的服务器(主线程)不仅负责接受客户端的请求,也要负责将其转发给所有用户,这就是强耦合了,转发消息是一个很复杂的过程,主要是一些用户逻辑,比如增删查改,再转发,时间较长。IP+Port 就能表示互联网中唯一的一个进程所以, 通信的时候, 本质是两个互联网进程代表人来进行通信, {srcIp,srcPort, dstIp, dstPort}这样的 4 元组就能标识互联网中唯二的两个进程,我们已经有了IP地址来表示全网内唯一的主机,并且我们知道,网络通信,本质上是进程在通信,谁要求做的?
2025-11-06 21:13:51
1064
原创 【Linux】网络基础概念
因为计算机是人的工具, 人要协同工作, 注定了网络的产生是必然的,为了解决长距离的通信,就有了网络这种解决方案。如何进行解包,如何分离有效载荷,分用交给上层协议。IP 网络层存在的意义: 提供网络虚拟层, 让世界的所有网络都是 IP 网络, 屏蔽最底层网络的差异。
2025-10-28 17:21:19
817
1
原创 【Linux】线程池
线程池是一种多线程处理形式,它预先创建好一组线程,并放入一个“池子”中进行统一管理。当有新的任务需要处理时,它不需要临时去创建线程(这很耗时),而是直接从池子中分配一个空闲的线程来执行任务。任务执行完毕后,线程不会被销毁,而是返回池中等待下一个任务。可以把它想象成一个“共享出租车队”:传统方式:每次有乘客(任务)要打车,就现造一辆出租车(线程),送到目的地后就把车销毁。效率极低,成本极高。线程池方式:公司(线程池)提前维护好一个出租车队(一组线程)。
2025-10-07 23:22:14
979
1
原创 【Linux】生产者消费者模型
sem_wait()(P操作):尝试获取信号量,如果信号量值 > 0,则减 1 并继续执行;否则阻塞,直到信号量变为正数。sem_post()(V操作):释放信号量,信号量值 +1,并唤醒可能正在等待的线程。
2025-10-06 14:02:51
1195
1
原创 【Linux】线程控制
如果不关心线程的返回值,join是⼀种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线程资源,我们可以使用pthread_detach()来分离某个线程,表示该线程如果无异常运行完会自动退出,不需要主线程再join,和SIGCHLD原理有点类似。✅首先我们要很清楚,既然线程有不同的工作状态,这么多线程,os一定要有一个struct tcb{}来管理这些线程,由于pthread库是共享库,并且每一个线程都会维护自已的栈,上下文,而我们创建线程,pthread_join是如何获取到线程的返回值的。
2025-10-04 19:00:00
1135
原创 每日一练【约瑟夫环问题】
约瑟夫环问题,解法有很多,比如环形链表,数组。递归,递推,动态规划。不过整体其实就分为两类,模拟和重复子问题类的问题。我们发现dp[i]和dp[i-1]所表示的含义是一样的。最后无非就是下标映射的关系,可以自行推导一下。使用链表,构造环形链表。计数,当每取到m时,删除该节点。最后,剩下的就是最后一个孩子。使用数组,通过%完成数组的环形遍历,通过令加一个Bool数组完成对已删除孩子的标记。dp[i]:表示从前i个孩子中围成一圈,最后获胜孩子的编号。为了保证+m编号不会超过n,这里%n。
2025-10-02 23:01:20
246
原创 【Linux】线程概念
进程是一个运行起来的执行流,一个加载到内存中的程序,进程=内核数据结构+代码和数据。线程同样如此,不过,线程是进程内一个更轻量化的执行流,他的执行粒度比进程更细。
2025-10-01 11:06:45
1184
原创 【C++11】包装器和bind
arg_list中的参数可能包含形如_n的名字,其中n是⼀个整数,这些参数是占位符,表示newCallable的参数,它们占据了传递给newCallable的参数的位置。数值n表示生成的可调用对象中参数的位置:_1为newCallable的第⼀个参数,_2为第二个参数,以此类推。函数指针、仿函数、 lambda 等可调用对象的类型各不相同, std::function 的优势就是统⼀类型,对他们都可以进行包装,这样在很多地方就方便声明可调用对象的类型。表达式中的占位符决定的,一般用auto接受。
2025-09-26 11:20:32
633
2
原创 【C++11】智能指针
避免内存泄露。可是有人说,我申请了资源,就释放。那么就不会造成内存泄露了啊?可是,内存泄露在实际开发项目中防不胜防,比如下面这段情景。当Func中的divede函数抛出异常,直接跳到了主函数的catch,这就跳过了Func中的归还资源。正是由于这样由于代码发生逻辑的跳转,可能很不容易看出来没有释放资源。
2025-09-18 20:04:21
489
原创 【C++11】引用折叠&&完美转发&&可变参数
这一节因为有了需求(万能引用),才有了引用折叠,为了保持参数的原来属性,才有了完美转发,后面又增加了函数参数的泛型,才有了可变参数模版。在这一套的基础上,搞出来了emplace系列。并且注意emplace系列把参数包不断往下传递,最终在结点的构造中直接去匹配容器存储的数据类型T的构造,所以达到了前面说的empalce支持直接插⼊构造T对象的参数,这样有些场景会更⾼效⼀些,可以直接在容器空间上构造T对象。
2025-09-15 17:49:04
945
原创 【C++11】右值引用和移动语义
右值变量表达式都是左值属性,也就意味着⼀个右值被右值引用绑定后,右值引⽤变量表达式的属性是左值,这样才能说的通,只有左值才能交换资源嘛。
2025-09-14 17:24:13
748
原创 【贪心算法】加油站
观察三:如果从当前加油站出发,能走到终点,并且totalsum还是>0的,那么该加油站就是能环绕一圈的起点(答案唯一),因为该加油站前面的total已经计算了,该加油站再把剩下几站走完整个total还能>0。看到这个题目,由于数组是定长的,每一个加油站都可能作为起点,我们只需要暴力遍历每个加油站,再尝试从每个加油站出发,遍历一周,看是否能环绕一圈。由于a最多能走到f,所以a+b+c+e+f<0,由于a>0(因为a能走到b),所以b+c+e一定是<0。我们从 2 号加油站出发,可以获得 4 升汽油。
2025-08-13 11:55:34
986
原创 【Linux】动静态库制作
假设今天你有一位舍友。你需要帮助他完成老师的作业。而他写的代码依赖两个文件(mymath.h,mystdio.h)。但是这两个文件的功能他不会写,他只会调用。但是你会这两个文件具体功能的实现啊。出于热心肠的你现在要帮助他。你会怎么帮助他呢?
2025-08-05 09:42:35
1176
2
原创 【Linux】进程控制(下)---程序替换宝藏岛
在上一节,我们学习了进程退出,进程退出无非就是两个数字,退出信号和退出码,以及相关场景,并给出最佳实践。我们同时分享了进程等待的相关话题解决"僵尸"问题,包括wait,waitpid相关的使用方式,以及非阻塞等待。这一节我们来谈一谈进程控制的下一个话题,进程程序替换,如果把进程比作一个“小工人”,那么原来用fork()创建的子进程,就像是“小工人”复制了一个“小分身”,它们做一样的工作,代码共享,数据各用各的。
2025-06-11 11:00:40
948
原创 【Linux】进程控制-上
上一篇文章我们认识了进程优先级,进程优先级其实主要由NI值决定的。然后我们又谈论了进程O(1)调度算法,通过活跃队列和过期队列,让每个进程都能够合理的享有CPU资源。本节内容将对进程进一步补充,包括进程创建,进程终止os会做什么,进程等待等等话题,话不多说,直接开冲!
2025-06-02 11:29:14
880
原创 【Linux】基础IO
我们在C语言阶段学习过对文件的操作,比如打开文件,向文件中写入,追加等等...在学习权限时,我们也天天谈文件,今天让我们来揭开文件大厦的神秘面纱吧!
2025-05-26 14:55:42
973
原创 【Linux】就该这么学---程序地址空间一
正是有了虚拟地址空间的存在,保护了物理内存的合法数据,同时也保护了各个进程和操作系统数据的正确性,有了虚拟地址空间的存在,就让我们的可执行程序可以在物理内存的任意位置加载,让物理内存管理模块和进程管理模块之间互不牵连,实现解耦合。并且通过页表的映射,让每个进程都看自已的地址空间是有序的,同时,在我们语言级别所学的malloc,new等向内存申请空间的函数,是给进程画了张大饼,并不是立即申请,而是当进程真正需要时,操作系统才会申请物理内存,构建页表的映射关系,而这一切,对用户是透明的,不过确大大提高了物理内存
2025-05-24 10:10:05
712
原创 【Linux】命令行参数和环境变量
通过今天的探索,我们看到了参数君和环境变量侠的默契配合。参数君在前台忙碌,传递着用户的指令;环境变量侠在幕后默默支持,为系统提供稳定的配置。正是他们的共同努力,让命令行成为了程序员和系统管理员手中不可或缺的利器。下次当你在命令行中输入命令时,不妨想想这两位英雄,感谢他们的付出,让我们的工作变得更加高效和便捷。
2025-05-13 12:00:00
943
原创 【Linux】进程优先级&&进程切换&&进程调度
在Linux的世界里,CPU调度员就像是一位超级能干的“指挥官”👮,它管理着一个繁忙的“工作车间”——runqueue(运行队列)。这个车间里有一个神奇的工具:prio_array(优先级数组),它就像是一个智能的“任务分配器”。
2025-05-06 10:59:20
1120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅