自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++11 数据结构7 队列的链式存储,实现,测试

队列是两边都有开口,那么在链式情况下,线性表的链式那一边作为对头好呢?从线性表的核心的插入和删除算法来看,如果在线性表链表的头部插入,每次循环都不会走,但是删除的时候,要删除线性表的尾部,要遍历整个 线性表。都差不多。我们考虑到在插入的时候,可能是批量插入,删除只是在某些条件成立的情况下才会删除,因此会将 线性表的头部做为 队列的头部,将线性表的尾部做为队列的尾部。

2024-04-22 20:40:19 98

原创 C++11 数据结构6 栈的链式存储,实现,测试

需要栈 是特殊的线性表,那么我们回忆一下 线性表的链式存储的插入和删除的写法,就应该能理清线性表的头部做为栈顶 合适 还是 线性表的尾部 作为栈顶合适。从这两个算法都能看出,如果要在pos 位置插入元素 或者 删除元素,那么先。,因此我们在线性表的头部做为 栈顶比较合理。

2024-04-21 21:48:21 161

原创 C++11 数据结构5 队列的概念,队列的顺序存储,实现,测试

队列是一种特殊的受限制的线性表。队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的t(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。

2024-04-20 14:00:45 179

原创 C++11 数据结构4 栈的基本概念,栈的顺序存储,实现,测试

它的特殊之处在于限制了这个线性表的插入和删除的位置,它始终只在栈顶进行。这也就使得:栈底是固定的,最先进栈的只能在栈底。定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底。首先它是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系。栈的顺序存储结构简称顺序栈,它是运算受限制的顺序表。因为栈是一种特殊的线性表,所以栈的顺序存储可以通过顺序线性表来实现。,同时附设指针top只是栈顶元素在顺序表中的位置。数组的首地址端做栈顶 还是 做栈底?它是一种特殊的线性表。

2024-04-15 20:22:45 259

原创 C++11 数据结构3 线性表的循环链式存储,实现,测试

概念上:1、任何数据元素都有一个前驱和一个后继2、所有的数据元素的关系构成一个逻辑的环— 实现上:1、循环链表是一种特殊的单链表2、尾结点的指针域保存了首结点的地址。

2024-04-14 13:35:55 129

原创 C++11 数据结构2 线性表的链式存储,实现,测试

线性表的链式存储

2024-04-13 17:18:42 110

原创 C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

线性结构是一种最简单且常用的数据结构。线性结构的基本特点是节点之间满足线性关系。本章讨论的动态数组、链表、栈、队列都属于线性结构。他们的共同之处,是节点中有且只有一个开始节点和终端节点。按这种关系,可以把它们的所有节点排列成一个线性序列。但是,他们分别属于几种不同的抽象数据类型实现,它们之间的区别,主要就是操作的不同。线性表是零个或者多个数据元素的有限序列。

2024-04-12 19:43:13 180

原创 C++11 设计模式4. 抽象工厂(Abstract Factory)模式

/所有工厂类的父类。

2024-04-12 13:56:33 520

原创 C++11 设计模式3. 工厂方法模式

/从上面的代码可以看到,简单工厂模式确实实现了new 出来具体对象, 和 业务逻辑的分离,//但是不符合 "开闭原则"//"开闭原则"说的是代码扩展性问题——对扩展开放,对修改关闭(封闭);//假设过了两天,策划找到我们说:加一种怪物,新怪物类型:M_Beast(野兽类)//那我们要怎么改呢?首先肯定是加一个 M_Beast类了,继承Monster//然后MonsterFactory 中改动 createMonster方法完成。

2024-04-12 11:58:06 377

原创 C++11 设计模式2. 简单工厂模式

/Monster作为父类,M_Undead(亡灵类),M_Element(元素类怪物),M_Mechanic(机械类怪物)。//策划:亡灵类怪物,元素类怪物,机械类怪物:都有生命值,魔法值,攻击力三个属性。我们从实际例子出发,来看在什么情况下,应用简单工厂模式。

2024-04-11 19:55:35 425

原创 C++11 数据结构0 什么是 “数据结构“?数据,数据对象,数据元素,数据项 概念。算法的基本概念 和 算法的度量,大O表示法,空间换时间的代码

/有一个数组,统计这个数组中的数组都是由1-999 组成的,统计这个数组中那个 数字出现的最多,并打印出现的次数。树的知识点是以学好前面的知识为基础的,因此要先学好前面的线性表 相关的。tea[0],tea[1],arr[2],这些都是。性质相同的 "数据元素" 的集合。之间关系的,注意这门课研究的位置和方向。4.一般线性表的链式存储 --循环链表。数据元素中的每一项。2.一般线性表的链式存储 --单链表。3.一般线性表的链式存储 --双链表。特定问题的求解步骤的描述。那么具体要学些啥呢?

2024-04-10 19:01:11 356

原创 C++11 设计模式1. 模板方法(Template Method)模式学习。UML图

在固定步骤确定的情况下,通过多态机制在多个子类中对每个步骤的细节进行差异化实现,这就是模板方法模式能够达到的效果。模板方法模式属于:行为型模式。

2024-04-10 15:51:26 669

原创 C++11 设计模式0. 设计模式的基本概念,设计模式的准则,如何学习设计模式,24种设计模式的分为3大类

模式:指事物的标准样式 或者 理解成 针对特定问题的可重用解决方案。设计模式,是在特定问题发生时的可重用解决方案。设计模式一般用于大型项目中。,设计模式保证所设计的模块之间代码的灵活性和可复用性但是设计模式 : 都需要以增加代码的复杂性为代价。

2024-04-10 11:22:55 335

原创 163 Linux C++ 通讯架构实战17,本地套接字整理对比,IPC:pipe,fifo,mmap,信号,本地套

Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。

2024-04-07 18:09:19 1001

原创 162 Linux C++ 通讯架构实战16,UDP/TCP协议的优缺点,使用环境对比。UDP 服务器开发

所以,通常情况下,使用。UDP则不同,有可能第一次和后面的每次的通路都不同,发包后就不管了,因此可能会丢包,也是因为每次通路都不同,因此顺序可能会发生变化。如下是TCP 在第一次连接成功后的网络,使用蓝色标识,那么后面的数据都是会以蓝色的这条路发送,因此保证了数据的顺序。UDP:无连接的,不可靠的数据包传递,对于不稳定的网络层,采取完全不弥补的通信方式。一些大的公司:腾讯,华为,阿里---都会在应用层使用数据效验,来弥补UDP的不足。由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,

2024-04-07 12:38:06 892

原创 161 Linux C++ 通讯架构实战15,线程池代码分析

1.先是将参数 threadpool 取出来,因为pthread_create使用的时候,会将整个线程池poll做为参数传递过来。2.这里使用的 do while实现的好处是,如果哪里有问题,则可以直接break出来,这里要学习的是这种技巧,实际上是为了避免使用goto 语句。//Tencent8888 start threadpool_create函数的目的初始化线程池,对应的struct是 threadpool_t。pthread_create的第一个参数为传输参数,保存系统给我们分配好的线程ID。

2024-04-06 22:47:19 477 2

原创 160 Linux C++ 通讯架构实战14,epoll 反应堆模型

到这里,我们需要整理一下之前学习的epoll模型,并根据之前的epoll模型,提出弊端,进而整理epoll反应堆模型,进一步深刻理解,这是因为epoll实在是太重要了。

2024-04-05 13:29:57 872

原创 160 音视频开发,主要流媒体协议一览,rtmp 服务器搭建

RTMP(Real Time Messaging Protocol)实时消息传输协议是Adobe公司提出得一种媒体流传输协议,其提供了一个双向得通道消息服务,意图在通信端之间传递带有时间信息得视频、音频和数据消息流,其通过对不同类型得消息分配不同得优先级,进而在网传能力限制下确定各种消息得传输次序。

2024-04-02 21:25:19 876

原创 159 Linux C++ 通讯架构实战14,epoll 函数代码实战

/(3.2)ngx_epoll_init函数的调用(要在子进程中执行)//四章,四节 project1.cpp:nginx中创建worker子进程;//nginx中创建worker子进程//官方nginx ,一个master进程,创建了多个worker子进程;//(i)ngx_master_process_cycle() //创建子进程等一系列动作//(i) ngx_setproctitle() //设置进程标题。

2024-04-02 20:41:04 1027 1

原创 158 Linux C++ 通讯架构实战13,epoll 原理和函数介绍,epoll_create,epoll_ctl ,epoll_wait

掌握这个三个函数的使用,并结合网上一些大神关于如何自己实现这个三个函数的源码分析,epoll的三个关键函数都干了什么。大神源码://a)c1000k_test这里,测试百万并发的一些测试程序;一般以main();//c)总结:建议学习完老师的epoll实战代码之后,再来学习 这里提到的课件代码,事半功倍;

2024-04-02 13:56:07 984

原创 157 Linux C++ 通讯架构实战12,监听端口代码添加。

【代码】157 Linux C++ 通讯架构实战12,监听端口代码添加。

2024-04-02 11:58:32 103

原创 156 Linux C++ 通讯架构实战11,listen函数剖析,监听套接字,accept函数,sync攻击,阻塞和非阻塞I/O,同步和异步I/O

要理解好backlog这个参数,我们需要先谈一谈 “监听套接字 队列”的话题;

2024-04-01 22:40:31 249

原创 155 Linux C++ 通讯架构实战10,工具telent 和 wireshark的使用

/是一款命令行方式运行的客户端TCP通讯工具,可以连接到服务器端,往服务器端发送数据,也可以接收从服务器端发送过来的信息;//类似nginx5_1_1_client.c//该工具能够方便的测试服务器端的某个TCP端口是否通,是否能够正常收发数据,所以是一个非常实用,重要,常用的工具,老师要求大家都会;//telnet ip地址 端口号。

2024-03-31 21:25:13 395 1

原创 154 Linux C++ 通讯架构实战9 ,信号功能添加,信号使用sa_sigaction 回调,子进程添加,文件IO详谈,守护进程添加

在nginx.cxx中的位置如下。

2024-03-30 09:46:48 236

原创 153 Linux C++ 通讯架构实战8 ,日志打印实战,设置时区,main函数中顺序调整

/日志的重要性:供日后运行维护人员去查看、定位和解决问题;//新文件:ngx_printf.cxx以及ngx_log.cxx。//ngx_printf.cxx:放和打印格式相关的函数;//ngx_log.cxx:放和日志相关的函数;实际上这一节的主要内容是实现一个类似printf的函数,以及如何在代码有问题的时候保存日志。这部分将老师的笔记记录在这里,需要消化一下,应该需要花费的时间在1天以上,才能看个7788。

2024-03-29 18:08:29 259

原创 152 Linux C++ 通讯架构实战7 ,makefile编写改成for cpp,读配置文件,内存泄漏查找,设置标题实战

一个项目要启动,需要配置很多信息,第一项就是学习如何配置一个项目。

2024-03-29 12:09:48 717

原创 Makefile中: -g、-o、-c、-C、-f 、-D、-Wall、-L、-nostdlib 参数的含义。。。makefile中$< , $@ , $? , $$ , 和“四个$” 的区别

Makefile中-C是递归调用子目录中的Makefile,-C选项后跟目录,表示到子目录下执行子目录的Makefile,顶层Makefile中的export的变量还有make默认的变量是可以传递给子目录中的Makefile的。

2024-03-29 08:54:27 191

原创 VS Code (visual studio code )中文乱码及编码格式问题全解

VS Code 中文乱码及编码格式问题全解_设置vscode 编码-CSDN博客

2024-03-28 13:00:05 492

原创 linux 常用命令整理

可以通过 man ps 查看ps的说明。ps是最基本也是最强大的进程查看命令aux都是参数a = show processes for all users 显示所有用户的进程u = display the process's user/owner 显示用户x = also show processes not attached to a terminal 显示无控制终端的进程。

2024-03-28 11:38:17 507

原创 151 shell编程,正则表达式,在C语言中如何使用正则表达式

这意味着,如果可执行程序date 在/home/hunandede/bin 中有,在 /usr/local/bin中也有,那么会使用 /home/hunandede/bin中的可执行程序date。当我们将date 写入里面并回车的时候,shell解析器会date这个命令从PATH 的路径中挨个去找date这个命令,找到后执行date命令。可以使用echo $PATH 查看当前的PATH有哪些。从下图可以看到,一个一个的PATH 是通过:分隔的。当前终端窗口就是 黑屏幕。

2024-03-24 21:30:55 521

原创 150 Linux C++ 通讯架构实战6 服务器程序目录规划,通过vs2017实现文件夹的创建,makefile编写

从无到有产生这套 通讯架构源代码【项目/工程】

2024-03-24 13:04:19 367 1

原创 150 Linux C++ 通讯架构实战5 nginx源码学习方法,终端和进程的关系,信号的复习,fork复习,守护进程复习

nginx源码学习方法

2024-03-22 20:54:11 248

原创 149 Linux 网络编程5 ,netstat -apn 命令,改动文件描述符的上限,高并发服务器 --多路I/O转接服务器 - epoll ,ET/LT,epoll反应堆

其中8000为端口号。

2024-03-21 22:43:10 895

原创 148 Linux 网络编程4 ,高并发服务器 --多路I/O转接服务器 - poll 这个非重点,

如果不再监控某个文件描述符时,可以把pollfd中,fd设置为-1,poll不再监控此pollfd,下次返回时,把revents设置为0。2. 文件描述符上限,可突破1024限制。能监控的最大上限数可使用配置文件调整。实际上poll 的核心就是我们select的优化版本,加入了一个数组,无法直接定位满足监听事件的文件描述符,和select 一样 也需要轮询。1. 传入、传出事件分离。无需每次调用时,重新设定监听事件。Poll 的实现和 select 很像。无法跨平台,只能在linux 上使用,

2024-03-21 15:33:21 320

原创 147 Linux 网络编程3 ,高并发服务器 --多路I/O转接服务器 - select

从前面的知识学习了如何通过socket ,多进程,多线程创建一个高并发服务器,但是在实际工作中,我们并不会用到前面的方法 去弄一个高并发服务器,有更加好用的方法,就是多路I/O转接器多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。主要使用的方法有三种 select , poll , epoll其中select 可以跨平台poll 和 epoll不能跨平台,只能在linux上使用。重点是epoll。

2024-03-20 21:39:46 439

原创 146 Linux 网络编程2,创建服务器端客户端,socket,bind,listen,accept,connect,C/S模型-TCP,出错封装函数,TCP状态转换图,端口复用setsockopt

例如上一节的UDP段格式,地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8),则地址0是0x03,地址1是0xe8,也就是先发0x03,再发0xe8,这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址存0xe8。发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址。本质为内核借助缓冲区形成的伪文件。

2024-03-17 21:39:36 960

原创 145 Linux 网络编程1 ,协议,C/S B/S ,OSI 7层模型,TCP/IP 4层模型,

从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。传输层 常见协议有TCP/UDP协议。应用层 常见的协议有HTTP协议,FTP协议。网络层 常见协议有IP协议、ICMP协议、IGMP协议。网络接口层 常见协议有ARP协议、RARP协议。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的通信协议。UDP用户数据报协议(User Datagram Protocol)是参考模型中一种无连接的。

2024-03-16 22:36:13 1300 1

原创 144 Linux 系统编程21 ,线程同步,互斥锁mutex,读写锁pthread_rwlock_t,死锁问题,条件变量,生产者消费者条件变量模型,信号量,生产者消费者信号量模型

共享资源1. 资源共享(独享资源则不会)2. 调度随机(意味着数据访问会出现竞争)3. 线程间缺乏必要的同步机制。以上3点中,前两点不能改变,欲提高效率,传递数据,资源必须共享。只要共享资源,就一定会出现竞争。只要存在竞争关系,数据就很容易出现混乱。所以只能从第三点着手解决。使多个线程在访问共享资源的时候,出现互斥。

2024-03-13 17:34:32 890

原创 143 Linux 系统编程20,stack smashing detected ./main terminated Aborted (core dumped) error 分析和处理

程序中能明确看到某个变量的值被篡改,这种情况一般定位思路:使用watch命令观察该变量;执行c继续运行,程序会停在观察点发生变化的地方;执行where命令,查看当前的位置,即定位到哪行语句篡改了被观察的变量。即先看堆栈,大致确定是哪个函数。然后进到该函数中,逐条语句执行、查看堆栈信息,直到看到栈被破坏。遇到函数调用层次比较多时,效率会比较低,但也算有效。

2024-03-12 13:16:57 421

原创 142 Linux 系统编程19,pthread_self,pthread_create,pthread_exit,pthread_join,pthread_detach,pthread_cancel

获取线程ID。其作用对应进程中 getpid() 函数。返回值:成功:0;失败:无!线程ID:pthread_t类型,本质:在Linux下为无符号整数(%lu),其他系统中可能是结构体实现线程ID是进程内部,识别标志。(两个进程间,线程ID允许相同)注意:不应使用全局变量 pthread_t tid,在子线程中通过pthread_create传出参数来获取线程ID,而应使用pthread_self。创建一个新线程。其作用,对应进程中fork() 函数。返回值:成功:0;

2024-03-11 21:01:20 834

epoll反应堆 libevent.c核心源码

epoll反应堆 libevent.c核心源码

2024-03-22

socket高并发多线程多进程代码

socket高并发多线程多进程代码

2024-03-19

空空如也

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

TA关注的人

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