- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 设计模式之观察者模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、定义二、要点三、结构图四、使用步骤1.一个不怎样的代码2.一个稍微较好的代码总结一、定义定义在对象间一种一对多的依赖关系,以便当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。二、要点观察者模式使得我们可以独立的改变目标与观察者,从而使二者之间的关系松耦合。观察者自己决定是否订阅通知,目标对象并不关注谁订阅了。观察者不要依赖通知顺序,目标对象也不应该知道通知顺序。常用在基于事件的ui框架中,也是
2021-12-25 17:52:46 707 1
原创 Reactor模式的实际使用
文章目录前言前言前面两篇文章讲述了reactor高并发模型,以及如何实现百万并发,这篇文章我们会将Reactor百万并发的模型上实现http服务器以及websocket服务器。其实说到底,就是如何在recv_cb中读协议的数据和send_cb中如何组协议的数据废话不多说,直接上代码1、对于http协议// GET / HTTP/1.1// Host: 192.168.31.131:8888// User-Agent: Mozilla/5.0 (Windows NT 10.0; Win
2021-12-25 17:22:21 1911
原创 百万并发服务器设计
文章目录前言1、改造ntyreactor2、如何管理eventblock创建一个eventblock查找对应fd在那个eventblock上具体使用3、总结前言本文的基础以及使用的代码模型都继承自上一篇文章。所以请先详细阅读上篇文章。提示:以下是本篇文章正文内容如何在上篇文章的基础上使其支持百万并发。主要就是neyreactor结构体如何支持一百万个连接。上篇文章出现的 MAX_EPOLL_EVENTS 宏定义是1024,也就是上篇文章只支持1024个连接,这篇文章我们会将它改造成可以支持到百万
2021-12-25 17:08:28 562
原创 reactor模型实现
文章目录前言一、什么是reactor模型二、使用步骤1.声明一个reactor结构体2.事件的设置,添加,以及删除2.read,write,accept的事件的处理回调函数3.初始化reactor4.将监听fd加入到reactor5.等待事件6.主函数三、代码解读总结前言对于一个服务器而言:网络 IO通常会涉及到两个系统对象,一个是用户空间的调用IO的进程或者线程,另一个是内核空间。比如发生IO操作的read时,通常会经历两个阶段:等待数据准备就绪,将数据从内核空间拷贝到用户的进程或者线程中。所以多种
2021-12-25 16:10:53 873
原创 网络io与select,poll,epoll
文章目录前言一、什么是IO二、IO模型1. 阻塞 IO2.非阻塞 IO3.多路复用 IO4.异步IO5.信号驱动 IO`前言本文介绍网络io模型,以及select,poll,epoll三种IO多路复用的机制。提示:以下是本篇文章正文内容一、什么是IOIO是input与output的首字母缩写,所以在计算机系统中,一切具有输入输出类型的交互系统都可以认为是I/O系统。如:网络IO,磁盘IO,等等。下面我们重点介绍网络IO。二、IO模型 网路IO,一般会涉及到两个系统对象,一个是用户空间调用I
2021-12-18 15:21:00 345
原创 C++基础之智能指针
文章目录前言一、智能指针有哪些二、shared_ptr1.特性2.初始化3.关于shared_ptr的成员函数reset4.引用计数的例子5.获取原始指针6.构造时指定删除器7.注意事项三、unique_ptr1.特性2.初始化3.shared_ptr 和unique_ptr的区别四、weak_ptr1.特性2.基本用法3.weak_ptr使用注意事项五、智能指针安全性问题前言C++程序设计中会频繁的操作堆内存,堆内存的申请和释放都是由程序员自己管理,使用普通指针,容易造成内存泄露,二次释放等问题,使
2021-11-26 00:58:47 1341
原创 C++基础之注释
文章目录前言一、注释的语法二、注意三、优美的注释四、总结前言注释在程序编写中很重要,一个良好的注释在编写注释时更重要一、注释的语法注释有两种风格的语法:c风格或者说“多行”注释:/**只是一个c风格的注释 *或者说是多行注释*/c++风格 或者说“单行”注释:// 这是单行注释注释实际上在编译过程中会被编译器忽略。每段注释都会被替换成空白字符,从程序中移除。二、注意c风格的注释块是不能被嵌套的,但是c风格和c++风格的注释是可以互相嵌套的。注释会在预处理阶段
2021-11-22 22:37:57 4579
原创 设计模式之模板方法
文章目录前言一、模板方法的定义二、模板方法的使用1.背景2.分析3.程序总结前言这篇文章介绍一下设计模式中的一种模式,模板方法。为什么要先介绍模板方法呢?而不是单例模式或者什么工厂方法呢?因为模板方法更能体现出设计模式的精髓:先满足设计原则,再迭代出设计模式。如果还不了解的朋友,可以先看上一章基础理论。以下是本篇文章正文内容一、模板方法的定义模板方法定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。它是属于一种行为
2021-11-22 21:03:44 560
原创 设计模式之理论知识
文章目录前言一、设计模式二、设计原则1.依赖倒置例子1例子22.开放封闭3.单一职责4.里式替换5.接口隔离6.迪米特法则三、一些小tips前言本文先从理论知识的角度介绍一下设计模式和设计原则。设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。设计原则:是指在软件开发中,想要写出一手好代码,就得在设计原则的框架下书写代码。提示:以下是本篇文章正文内容一、设计模式强力推荐:《设计模式-可复用的面向对象的基础》根据书中描述,总共有23种设计模式,它
2021-11-21 22:41:22 385
原创 数据结构之二叉树
这篇开始讲述二叉树和二叉搜索树,对于树的概念还不熟的朋友们可以看上一篇文章:树结构的介绍文章目录前言一、二叉树的概念1.定义2.特点二、二叉树的实现(C++)1.定义一个二叉树的节点2.写入数据3.测试输出4.二叉树小结三、一些特殊的二叉树1.满二叉树2.完全二叉树四、二叉树的遍历1.前序遍历2.中序遍历3.后序遍历4.层次遍历5.常见考题:前言上一篇文章中可以得知,一个树的节点,它的度的取值范围在0~n,当度为0的时候是叶子节点,而n可以是无穷大,即没有对子节点的数量进行限制。那么二叉树是什么
2021-11-21 00:33:29 647
原创 数据结构之树结构介绍
接下来几篇文章总结一下树结构,从树开始,到二叉树,二叉搜索树,再到AVL树,红黑树和B树/B+树,由浅如深文章目录前言一、树的概念定义分析二、树的应用(模拟文件系统)1.定义一个树的节点2.定义一个文件系统的树结构3.实现树结构的功能4.测试代码总结附加tips前言此篇文章先简单的介绍一下最基本的树结构和一些树的基本术语利用树结构来模拟一个linux的文件目录管理一、树的概念这是一颗大自然的树这是数据结构中的树二者看起来是如此的相像,现实中的树是根在地上,枝干往上长,叶子在整颗树的
2021-11-20 14:27:10 353
原创 排序算法之冒泡排序
冒泡排序何为冒泡:犹如在水底吐泡泡,泡泡不断的浮到水面一样,通过一遍一遍的对数组中的元素进行两两比较,把数值大(升序)或者数值小(降序)的值不断的"浮"到数组的后面,形成一个有序的数组。如何冒泡:每一轮两两比较,如果比后面的数大,则交换两个数,如图1:第一轮比较完,最大的数值9会"浮"到最后一个元素的位置上往后每一轮都从0(头位置)到 n-i(n为数组长度, i 为轮次)挨个两两比较并在符合条件的时候交换,最终乱序的数组会依次按顺序排好序,如图二。实现冒泡:int bubble_sort(
2021-11-14 12:28:25 395
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人