自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux网络编程】IO多种转接之Reactor

基于上一篇epoll的学习,现在我们也知道epoll的工作模式有两种,一种默认LT工作模式,另一种是ET模式。关于epoll的LT工作模式我们已经写过了。接下来我们写一份基于ET模式下的Reator,处理所有的IO。Reactor = 如何正确的处理IO+协议定制+业务逻辑处理下面我们写一个简洁版的Reactor,它是一个半同步半异步IO,具体它什么原理,怎么做的,有什么特征。我们在代码层面上解开它的面纱。代码写完总结就理解了。并且在这么彻底解决读,写的问题!

2024-05-23 09:28:40 805 29

原创 【基础算法总结】前缀和一

前缀和

2024-05-23 09:25:44 645 18

原创 【MySQL】MySQL在 Linux下环境安装

mysql有5.7 和8.0 我们采用最常用的5.7,el代表CentOS,虽然这里没有7.6的但是我们可以选这个,如果有和自己对应的版本7.7、7.8、7.9就选择对应的。安全强度,默认为中,即1,要求必须包含 数字、符号、大小写字母,长度至少为8位。这个是上一个mysql残留下来的数据,mysql卸载时默认没把数据删掉,这个也是清理之中的,不影响后面的操作。如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码。如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码。

2024-05-21 09:44:17 1091 82

原创 【Linux网络编程】IO多路转接之epoll

无论select还是poll都只有一个接口,就叫做select和poll,而epoll要正常工作起来要三个系统调用。但无论epoll有多少系统调用,epoll核心工作只有一个,就是想办法我们进行等!IO = 等 + 数据拷贝,epoll只负责等!epoll有三个系统调用接口虽然多但是写起代码很简单,并且epoll比select和poll都高效,为什么这么说呢,我们了解epoll实现原理就知道了。

2024-05-21 09:42:02 378 34

原创 【基础算法总结】二分查找二

二分查找

2024-05-15 16:27:06 1026 122

原创 【Linux网络编程】IO多路转接之poll

poll也是一种linux中多路转接的方案。它所对应的多路转接方案主要是解决select两个问题。select的文件描述符有上限的问题,select每次都要重新设置关心的fd*。当我们把接口学习完就知道poll是如何接究select的两个问题。把poll代码写完也会发现poll比select写着更简单一些。但是poll还是有个问题。就是要遍历的问题。这个问题放到epoll中解决。

2024-05-15 16:25:57 458 66

原创 【基础算法总结】二分查找一

二分查找

2024-05-11 10:02:50 766 92

原创 【Linux网络编程】I/O多路转接之select

我们曾经说过 IO = 等 +数据拷贝。select是多路转接的一种,它只负责等待,可以一次等待多次fd,更为重要的是select本身没有数据拷贝的能力,拷贝要read、write来完成。系统提供select函数来实现多路复用输入/输出模型。关于select接口我们有很多疑问,它怎么做到一次等待多个fd,如果关心fd的读、写、异常,然后又如何通知我们的等。接口学完,我们编写select服务器,进一步掌握它里面各种细节。

2024-05-11 10:00:14 1071 61

原创 【基础算法总结】滑动窗口二

👍👍🌟🌟💖💖。

2024-05-07 10:46:57 838 110

原创 【Linux网络编程】高级IO——五种IO模型

什么是IO呢?在冯诺依曼体系角度我们知道从外设把数据搬到内存这不就是Input吗,把数据从内存拷贝到外设中这不就是output吗。这不就是传说中的IO吗。没错,但是这种理解还不够深刻!那什么是高效IO呢?解决上面问题,我们在学习五种IO模型,五种IO模型那一种最高效?以及非阻塞IO的编写

2024-05-07 10:45:58 1171 85

原创 【Linux网络编程】DNS、ICMP、NAT技术、代理服务器+网络通信各层协议总结

前面文章已经把网络通信用到的主要协议都说过了,这篇文章是网络通信整个拓扑结构细节的的补充,其中我们重点就是在NAT技术、代理服务器,NAT在IP我们简单了解直到它在路由器上是做源IP和WAN口IP的转换,那发出现的问题解决了,服务器给响应如何返回呢?经过学习我们直到服务器给我们维护了一张NAT转换表,这个表是KV结构,IP+port一起保证了从左到右,从右到左转换的唯一性,因此就可以正确返回主机。代理服务器看着和NAT类似,其实它们不是一个东西,代理服务器分正向代理和反向代理。最后总结整个网络通信协议。

2024-05-01 10:07:24 1235 134

原创 【基础算法总结】滑动窗口一

本质上是 “同向双指针”,

2024-05-01 10:07:04 1199 74

原创 【Linux网络编程】数据链路层

这篇文章是整个网络通信的最后一层数据链路层,我们主要学习MAC帧,虽然IP具有将数据跨网络送到目标主机的能力,但是在跨网络送之前是如何解决同一个局域网内送到下一跳路由器呢?我们要了解局域网通信的原理,以及通信的细节问题。还要站在上帝视角我们知道下一跳路由器的MAC地址,但是在网络中一台主机是如何知道路由器的MAC地址呢?所以这需要一个过程,从而引出ARP协议。学完这些我们把之前学到的所有协议结合起来拉通整个网络通信的过程!从而数据跨网络转发有非常清晰的认识!

2024-04-27 10:06:31 1733 110

原创 【基础算法总结】双指针算法二

利用单调性,使用双指针算法解决问题。

2024-04-27 10:06:03 1258 56

原创 【Linux网络编程】IP协议

本篇文章我们深刻理解I网络层IP协议的相关知识,从IP协议报头格式我们发现和TCP协议报头相似,学习一个协议首先还是先考虑如何将报头和有效载荷分开,如何向上交付。这些都可以从IP报头协议中了解,接下来学习网络划分,网络划分是什么?为什么要网络划分,网络划分怎么做?子网掩码有什么用。了解路由器功能,1.转发 、2.DHCP | 组建局域网 3、NAT。然后我们学习私有IP和公网IP。结合前面知识画一个图对网络拓扑有一个深刻的认识。接着我们学习路由器是如何路由的,最后根据IP报头剩下的字段学习IP分片和组装!

2024-04-23 09:40:43 1128 70

原创 【基础算法总结】双指针算法一

两个指针分三个区间:【0,dest】已处理区间都是非0元素【dest+1,cur-1】已处理区间都是0元素【cur,n-1】待处理元素初始时,cur在下标1的位置,dest位-1,可能初始时没有非0元素。

2024-04-23 09:40:22 712 40

原创 【Linux网络编程】TCP协议

TCP协议难学、TCP协议细节复杂,别怕学完这一篇文章保证解决你对TCP协议的所有问题!!!首先重点理解TCP报头各个字段知道是干嘛的有什么用。tcp不是可靠的吗,那客户端给服务器发信息怎么确保对方收到了呢?对方必须给我确认我才知道我发的信息对方收到了,然后我们了解tcp的工作模式。万一客户端发的信息对方真没收到怎么办也不给我响应或者响应丢了怎么办?超时重传!但tcp双方通信之前必须建立连接?如何理解连接,如何理解三次挥手,四次握手。什么是流量控制有什么用?滑动窗口是干什么的?重点学习设计特别优雅的拥塞控制

2024-04-15 09:32:52 1050 84

原创 我的创作纪念日

以后知识忘记了就翻一翻写的笔记,记在CSDN上面比在纸质上面的方便,就这样慢慢开始把博客写起来。现在每天都汲取知识目前来说已成为习惯,充实自己,给自己未来找工作打下坚实地基,然后把学到的知识记录下来。希望我的博客能给正在处于学习中的人提供帮助!而且我也想成为未来的IT大牛!这是我认真系统学c语言,第一次独立解决问题 "杨辉三角",觉得很有成就感。

2024-04-15 09:31:51 201 11

原创 【Linux网络编程】UDP协议

本篇文章我们首先再谈端口号,学习两个命令。然后我学习UDP协议,不管我们未来学习什么协议都必须先解决两个问题,如何封装解包,如何分用,我们带着问题请学习。重点我们放在报头到底什么,报头其实是一种协议,Linux内核是由C语言写的,协议是一个结构化的数据,所以报头其实是结构化数据对象,然后我们以伪代码角度学习解包和封装的过程,如何分用呢?是由目的端口号决定的。UDP面向数据报,TCP是面向字节流的,那到底是什么意思呢?还有缓冲区问题,最后UDP使用注意事项!

2024-04-12 10:00:07 1016 42

原创 【Linux网络编程】HTTPS协议

本文主要介绍应用层https的协议,https是在http到传输层之间加了一层加密层,http协议信息在网络中是明文传送的容易被中间人监听和篡改,所以需要https协议,因为协议有对应的端口所以双方知道对方用的什么协议,有了https信息在两端是明文,在网络中传输是密文,那https是如何实现的呢?我们先了解对称密钥,非对称密钥、数据摘要,数字签名,然后我们在依次递进学习5种方案,前四种方案每种都有问题,最后我们结合前四种方案+证书,终于解决https安全通信的问题!

2024-04-08 10:13:41 1284 64

原创 【Linux网络编程】HTTP协议

本篇文章主要是介绍http协议,首先从宏观角度认识http协议请求和响应的结构,http协议请求和响应如何拿到完整的报文呢?序列化和反序列化怎么做?我们以写代码的方式具体认识http协议的基本工作流程加深对它的理解,代码写完我们在看http协议的报头、状态码、方法等等才更容易一些,然后我们在学习长连接,和session会话保持,最后我们在介绍两个学习http的工具。

2024-04-06 10:04:54 1139 63

原创 【Linux网络编程】自定义协议+序列化+反序列化

本篇博客主要是对自定义协议、序列化、反序列化的学习,在前面我们只是从父亲儿子打电话的例子感性认识协议是一个约定。今天从网络版计算器的代码学习协议,序列化和反序列化如何编写,不过对于序列化和反序列化我们还有现成的,这里我们主要学习Json的使用,以后再也不用自己序列化和反序列化了,但是并没有说不能自定义协议。没有人规定我们网络通信的时候,只能有一种协议!!那如何让系统知道用的是那种协议呢?

2024-04-02 10:32:49 1421 70

原创 【Linux网络编程】网络编程套接字二

本篇文章,主要用于介绍TCP客户端和服务端的写法,其中我们做了一个日志函数的设计,日志函数中我们多可变参数列表进行使用并且把日志信息可以打印到文件中。TCP服务端我们写了5个版本,第一版本主要细说客户端服务端的写法但是服务器只能为单客户端服务,服务器应该有能力为多客户端服务,因此有了第二版本多进程,第三版本多进程+信号,第四版本多线程,第五版本线程池。但是真实的服务器终端推出了它也一直在运行,因此我们把服务器进程改成了守护进程,这样符合了真实服务器的写法!最后我们对TCP通信过程做一个感性的认识。

2024-03-29 09:52:43 2099 113

原创 【Linux网络编程】网络编程套接字一

本篇博客首先对IP地址、端口号、 TCP协议、UDP协议、网络字节序等网络编程中的基本概念的学习,其中着重介绍了端口号,一台主机有很多进程,如何知道从一台主机的某一进程发送的消息就是给另一台主机对应的进程的? 知道了网络通信的本质就是进程间的通信!以及为什么要有端口号?然后学习socket api的基本用法,能够实现一个简单的udp客户端/服务器,并且对udpp客户端和服务端做了三个设计,最后实现windows客户端和linux服务端之间的交汇。

2024-03-25 09:59:47 1558 58

原创 【Linux网络编程】网络基础一

本篇博文重点 : 1. 了解网络发展背景, 对局域网/广域网的概念有基本认识; 2.了解网络协议的意义, 重点理解TCP/IP五层结构模型; 3. 学习网络传输的基本流程, 理解封装和分用;

2024-03-20 09:39:04 1345 69

原创 【C++】C++的IO流

本篇博客主要介绍的是C++的IO流。的那套东西是面向过程的,C++这套东西是面向过程的。我们可以使用一个类来进行文件的读写,其中最重要的就是把C++对于文本文件读写的方法学一学,用着很方便。其他的作为了解知识学一学。

2024-03-15 09:23:26 1149 50

原创 【C++】C++的类型转换

本文主要介绍的C++类型转换,C有两种类型转换方式隐式类型转换和显示类型转换但是C++觉得C的类型转换方式不好,因此而C++规范了四种类型转换。这里就每种类型转换都做了详细介绍,以及每种类型转换适合什么场景。

2024-03-12 10:54:21 1055 62

原创 【C++】特殊类设计

本篇文章详细解决C++中特殊类设计,设计一个不能拷贝的类、设计一个只能在堆上创建对象的类、设计一个只能在栈上创建对象的类、设计一个不能被继承的类。其中一个我们可以在实际上运用的单例模式,单例模式实现有两种方式,饿汉模式,懒汉模式,其中懒汉模式实现需要考虑的问题更多!但是还有一种更为简单的懒汉模式实现方式,但是又条件限制!

2024-03-06 10:15:21 1195 62

原创 【C++】智能指针

为什么需要智能指针呢?有了智能指针带来了什么问题?库里是如何解决的?就不得不说智能指针发展的历史。auto_ptr的解决方法、unique_ptr解决方法、shared_ptr解决方法。shared_ptr线程安全问题、循环引用问题。还有定制删除器。

2024-03-02 10:38:14 1074 55

原创 【C++】异常

实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。

2024-02-23 11:00:32 1202 46

原创 【C++】C++11下线程库

本文就C++11线程库做详细的解读,C++11线程库本质就是对不同平台线程库的封装!给线程传可调用对象可以是函数指针、函数对象、lambda。多个线程共享同一份共享资源就会涉及线程安全的问题,因此使用mutex锁,还有可以不加锁的原子操作,并且可能因为一个线程竞争锁的能力太强会导致一直在加锁解锁,因此又有了condition_variable.

2024-02-21 09:30:44 1340 31

原创 【C++】C++11中

本篇博客就C++11继续介绍,主要介绍的有lambda表达式、可变参数模板、function包装器以及绑定。

2024-02-19 09:53:06 969 25

原创 【C++】C++11上

C++11新增了很多东西,比如列表初始化、initializer_list、auto、范围for、STL容器的变化、其中这篇博客最重要的就是右值引用,什么是右值?右值引用有什么用,右值引用解决了什么问题给我带来了什么方便,还有新增的移动构造、以及移动赋值,我们就主要的一些东西进行介绍总结。

2024-02-16 09:57:13 930 30

原创 【C++】位图+布隆过滤器

本文着重介绍哈希表最后一些内容位图和布隆过滤器,我们已经见识到哈希表查找效率了,但是如果让你在40亿个不重复的整数找一个数,你还能用常规方法,如排序+二分、红黑树、哈希表这些去找吗?40亿个整数大约16G内存根本放不下!那该怎么做呢,因此就有了接下来的位图和布隆过滤器!

2024-01-24 11:02:53 1146 40

原创 【C++】unordered_map,unordered_set模拟实现

前面的文章我们已经学过哈希桶了,现在就根据哈希桶模拟实现unordered_map和unordered_set,并且在这篇文章我们第一次把普通迭代器和const迭代器分开写。分开写的原因是什么?如何实现哈希桶迭代器的++?以及unordered_map和unordered_set模拟实现都有那些需要注意的细节问题。

2024-01-20 10:44:19 1284 34

原创 【C++】哈希表

这是一篇超2万字的文章,详细介绍了unordered系列关联式容器,为什么会有unordered_maph和unordered_set它们和map和set的区别是什么,它们的效率与map和set做了对比。接下来详细介绍了哈希表,哈希映射:key值跟存储位置建立关联关系。对于范围比较集中的选择直接定址法,每个值都有唯一位置不会发生冲突,范围分散的选择除留余数法,但是余数相同的会发生冲突,处理冲突有闭散列--开发地址法:1、线性探测 2、二次探测。开散列--拉链法/哈希桶。每块都详细把写代码要注意的问题说清楚

2024-01-20 10:42:46 1837 18

原创 【liunx系统编程】线程池+单例模式+STL,智能指针和线程安全+其他常见的各种锁+读者写者问题

本文就目前为止所学的线程知识总体运用写了一个线程池,顺便把线程池改成单例模式,那什么是单例呢,单例实现的有什么方式呢?在见一见其他常见的各种锁,其中对自旋锁我们举个例子帮助理解,并学会它的使用!最后我们学了读写锁,同样举个例子帮助理解,读写锁为什么读加锁和写加锁用的接口不一样?读者写者天然会造成写者饥饿问题等等。同样这也是linux系统编程最后一篇博客,下一篇进入网络编程!

2024-01-09 16:59:25 1672 40

原创 【linux系统编程】POSIX信号量+基于环形队列的生产消费模型

本文主要就信号量和基于环形队列的生产消费模式为主要内容,我们从上篇文章遗留下来的问题为切入口对我们所写的代码有没有优化的地方。引出什么是信号量,为什么要信号量,怎么办信号量,然后讲解环形队列生产消费模型从而把我们所学的信号量给用上。帮我们深刻理解这个知识!

2024-01-09 10:59:02 1035 19

原创 【linux系统编程】线程同步+基于BlockingQueue的生产者消费者模型

在线程互斥写了一份抢票的代码,我们发现虽然加锁解决了抢到负数票的问题,但是一直都是一个线程在抢票,它错了吗,它没错但是不合理。那我们应该如何安全合理的抢票呢?引出来了线程同步,然后在学习生产者消费者模型,从多方面讲解什么是生产者消费者模型,生产者消费者的关系,到后来321原则。现在左手拿着生产者消费者模型,右手拿着互斥和同步,由此写了一份基于BlockQueue生产者消费者模型。并引出生产者消费者凭什么就是高效的,高效在哪里?它的意义在哪里?并且提出一个问题下一篇文章来解释!

2024-01-04 17:15:17 1502 50

原创 【linux系统编程】线程互斥

本篇文章着重讲的是线程互斥的内容,我们知道线程创建处理几乎大部分资源都是共享的,那多线程访问同一份共享资源有没有什么问题,本文从这里开始引入,并开始介绍互斥锁,使用互斥锁的函数,并对互斥锁进行了简单的封装, 有了锁会不会产生问题?由此引出死锁的问题,以及解决方法!

2024-01-03 11:02:49 1268 24

空空如也

空空如也

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

TA关注的人

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