自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

上道的程序员

不喜勿喷~

  • 博客(79)
  • 资源 (3)
  • 收藏
  • 关注

原创 简洁好用的~/.vimrc配置

【代码】简洁好用的~/.vimrc配置。

2024-01-09 15:33:18 368

原创 二三层转发原理

二层即数据链路层的转发是以数据帧的格式进行转发,数据帧的格式如下:目的地址(Destination Address,DA) :可以是单独的地址,或者是广播或组播MAC地址。源地址(Source Address,SA) :用来识别发送没备,在SA字段中,广播和组播地址格式是非法的。类型(Type) :用类型字段来识别网络层的协议。数据(Data) :这是从网络层传送到数据链路层的数据包。它的大小可以在46~1500字节之间变化。

2023-01-14 16:04:51 1001

原创 ARP Header

ARP报文以太网帧ARP帧如下图所示,他就是在ARP报文前面加了一个以太网帧头

2021-08-28 15:20:05 353

原创 ICMP报文

ICMP报文ICMP报文头ICMP首部TYPE和CODE对应表

2021-08-28 14:48:09 158

原创 C语言程序设计第二版学习笔记

一、基本概念1、字符输入输出一次读写一个字符putchar、getcharvoid main() { int c; while ((c = getchar()) != EOF) { putchar(c); }}注意的点(c = getchar()) != EOF-------运算符的优先级问题(c = getchar()) != EOF与c = getchar() != EOF的区别由于不等运算符的优先级高于复制运算符,c = getchar() != EOF等价于c = (get

2020-11-14 17:18:18 566

原创 C#程序设计

详见本人上传资源,免费下载,零积分。

2020-03-04 12:54:57 369

原创 动态规划——编辑距离问题

目录1.题目描述:2.示例:3.问题分析4.绘图分析5.代码设计6.结果展示 7.题目扩展1.题目描述:给定两个单词word1和 word2,计算出将word1转换成word2所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 题目中隐含...

2019-09-03 21:09:39 911

原创 联合体的妙用——判断系统大小端——打印IP地址

目录利用联合体打印IP地址利用联合体判断大小端利用联合体打印IP地址一般处理void PrintIP(unsigned int ip){ int i = 0; int a =0; for(i = 0;i<4;++i) { a = ip & 0x0ff; printf("%d",a); ip>>= 8; i...

2019-08-30 13:54:47 375

原创 写时拷贝——string类

浅拷贝使多个对象共用一块内存地址,调用析构函数时导致一块内存被多次释放,导致程序奔溃。实现string类的时候通常显示的定义拷贝构造函数和运算符重载函数。在我们在不需要写,只是读的时候就可以不用新开辟内存空间,就用浅拷贝的方式创建对象,当我们需要写的时候才去新开辟内存空间。这种就是写时拷贝。在构造函数中开辟新的空间时多开辟4个字节的空间,放在内存单元首部,用来存放引用计数器,记录这快空间的引用...

2019-08-18 20:00:42 183

原创 值传递问题——GetMemory

指针的错误使用往往造成意想不到的错误,导致程序崩溃、数组越界、野指针的产生,一般都是因为: (1)野指针的使用,不使用了未置空; (2)动态内存申请未释放; (3)指针的值传递导致访问出错; (4)malloc申请内存后未进行出错检查; ...

2019-08-18 10:36:35 420

原创 libevent_定时器集成

目录1.集成策略2.timer小根堆1.集成策略1)系统的 I/O 机制像 select()和 epoll_wait()都允许程序制定一个最大等待时间(也称为最大超时时间)timeout,即使没有 I/O 事件发生,它们也保证能在 timeout 时间内返回。那么根据所有 Timer 事件的最小超时时间来设置系统 I/O 的 timeout 时间;当系统 I/O返回时,再激活...

2019-08-16 18:56:03 162

原创 libevent_信号集成

目录1.集成策略2.socket pair创建过程3.Signal 事件的管理4.注册、注销 signal 事件1.集成策略1) 当 Signal 发生时,并不立即调用 event 的 callback ()函数处理信号,而是设法通知系统的 I/O 机制,让其返回,然后再统一和 I/O 事件以及 Timer事件 一起处理。2) 关键在于如何通知系统的I/O多路...

2019-08-16 18:22:23 150

原创 libevent_事件处理框架event_base

目录1.event_base 结构体2.创建和初始化3.主要的接口函数4.事件的统一1.event_base 结构体 Reactor 框架组件在 libevent中,表现为 event_base 结构体:struct event_base { const struct eventop *evsel; void *evbase; i...

2019-08-16 14:14:19 645

原创 libevent_核心event

Libevent 是基于事件驱动的,从名字也可以看到 event 是整个库的核心。event 就是 Reactor 框架中的事件处理程序组件;它提供了函数接口,供 Reactor 在事件发生时调用,以执行相应的事件处理,通常它会绑定一个有效的句柄。1.event结构体:/*事件类型宏定义*/#define EV_TIMEOUT 0x01 #define EV_READ 0x02...

2019-08-16 12:05:15 118

原创 libevent_事件处理流程

1.当应用程序向libevent注册一个事件后,其内部处理事件的基本流程如下:1) 首先应用程序准备并初始化 event,设置好事件类型和回调函数;这对应于前面第步骤2 )和 3);2) 向 libevent 添加该事件 event。对于定时事件,libevent 使用一个小根堆管理,key 为超时时间;对于 Signal 和 I/O 事件,libevent 将其放入到等待链表(双向链表wa...

2019-08-16 10:24:22 363

原创 libevent_事件注册流程

1.以定时事件的注册(设置定时器)为例来进行libevent事件注册:1)首先初始化 libevent 库,并保存返回的指针 struct event_base * base = event_init();实际上这一步相当于初始化一个 Reactor 实例;在初始化 libevent 后,就可以注册事件了。2)初始化事件 event,设置回调函数和关注的事件 ev...

2019-08-16 10:10:11 416

原创 libevent_Rector模式

1.Reactor 模式是编写高性能网络服务器的必备技术之一,它具有如下的优点:响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的; 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销; 可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源; 可复用性,reactor 框架本身与具体事件处理逻辑...

2019-08-16 09:25:19 177

原创 libebent_简介

Libevent 是一个轻量级的开源高性能网络库,使用者众多,研究者更甚;Libevent 是用 c 语言编写的,而且几乎是无处不函数指针,Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、Vomit、Nylon、Netchat等等。Libevent 简介:优点:事件驱动(event-driven),高性能; 轻量级,专注于网络,不如 ACE 那么臃肿庞...

2019-08-16 08:57:25 201

原创 线程同步机制的封装

syn_pthread.h#ifndef _SYN_PTHREAD_H_#define _SYN_PTHREAD_H_#include <exception>#include <pthread.h>#include <semaphore.h>/*封装信号量*/class sem{public: sem()//创建并初始化信号量 { ...

2019-08-15 16:52:21 200

原创 Template 模式和Strategy 模式

应用场景:在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现) 在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。 Template 提供了这种情况的一个实现框架。Template模式是采用继承的方式作为强制约束实现这一点:将逻辑(算法)框架放在抽象基类中, 并定义好细节的接口,子类中实现细节。Strategy 模式解决的...

2019-08-14 19:36:36 248

原创 Observer模式

Observer 模式应该可以说是应用最多、影响最广的模式之一,因为 Observer 的一个实例 Model/View/Control( MVC) 结构在系统开发架构设计中有着很重要的地位和意义, MVC实现了业务逻辑和表示层的解耦。设计Observer 模式要解决的问题为: 建立一个Subject对多个Observer的依赖关系, 并且做到当“一” 变化的时候, 依赖这个“一”的多也能...

2019-08-14 14:17:03 583

原创 工厂模式/抽象工厂模式

工厂模式:该模式的设计思路是简化类名和屏蔽对象的生成细节简化一个事物有很多种方法,也就是换一个容易记住的称呼,最简单的当然就是数字作为代号,但需要使用某个具体类的功能时就指出它的代号,让它生产对象并调用它的成员方法,这样使用者就不必关心对象的生成细节。生成的对象一般以指针的形式返回(方便对对象内部成员方法的调用)。这就和工厂生产产品很像,机器都有编号,一个机器生产一种产品,使用者只用找对机器编号...

2019-08-14 11:43:22 123

原创 单例模式

单例模式的设计思路就是一个类只产生一个对象具体只如何只产生一个对象,自然要从对象如何生成说起,新对象的生成一般通过类的构造函数/拷贝构造函数生成,所以应该将这两个函数屏蔽起来,具体的操作就是将这两个函数的声明写在该类的私有访问限定符下。此外只有指针和引用不生成对象,所以接口生成的对象我们用引用或者指针返回,避免静态成员方法(不依赖对象调动)生成对象或返回一个类类型,为了方便唯一对象对静态方法的调...

2019-08-14 11:13:47 104

原创 两种高效的并发模式

并发编程的目的就是让程序“同时”执行多个任务。如果程序是计算密集型的,并发编程并没有优势,反而由于任务的切换使效率降低。但是对于I/O密集型(比如经常读写文件、访问数据库等),I/O操作速度远远低于CPU计算速度。如果程序阻塞在I/O操作会浪费CPU时间,如果是执行多个线程,阻塞的执行线程会主动放弃CPU(或由操作系统调度 ),将执行权转移到其他线程,由此大大提高CPU的利用率;实现上主要有多进程...

2019-08-13 22:52:02 167

原创 STL之关联容器

1.set单重集合:不允许key重复 set作为一个容器,也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据;C++ STL中标准关联容器set, multiset, map,multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树自动排序:在set中每个元素的值都唯一,而且系统默认的比较函数(小于函数)能根据元素的值自动进行排序(也可以自定义)。 ...

2019-08-13 16:08:40 152

原创 STL之顺序容器

顺序容器vector#include <iostream>using namespace std;#include <vector>template<typename container>void show(container &rhs){ container::iterator it = rhs.begin(); while(i...

2019-08-13 15:21:25 192

原创 STL

标准模板库(Standard Template Library,STL)是一些“容器”的集合,这些“容器”有list,vector,set,map等,也是算法和其他一些组件的集合。STL的代码广义上分为algorithm算法,container容器,iterator迭代器;几乎所有代码采用模板类和模板函数的方式,为的是更好的代码重用。在C++标准中,STL被组织为下面的13个头文件:<a...

2019-08-13 14:12:02 144 3

原创 两种高效的事件处理模式

服务器程序通常处理三类事件:I/O事件、信号以及定时事件,由此诞生了两种高效的事件处理模式:Reactor模式和Proactor模式。Reactor模式:通常由同步I/O模型实现;它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话立即将改时间通知工作线程(逻辑单元)。主线程不做任何其它的工作,读写数据、接受新的连接、处理客户请求均在工作线程中完成。 由同步...

2019-08-11 22:00:43 878

原创 线程间通信、线程同步机制

线程间通信针对的是同一个进程的若干子线程之间的通信,由于所有线程共用进程的资源,所以就存在线程安全的问题,多个线程可能同时利用同一段代码,也就是执行结果是不是和预期结果相同的问题。线程安全指的就是多线程访问同一段代码不会产生不确定的结果。下面是单个进程下多线程地址空间分布情况:所以,多线程通信方式一般采用线程安全的通信方式,也就是必须做到线程同步:如果变量是只读的,多个线程同时读取该...

2019-08-10 18:15:24 627

原创 Socket网络编程

本地的进程间通讯方式有管道、消息队列、共享内存、信号量,而网络中的进程间通信则是由socket方式搞定。还是本着一切皆文件的思想,该编程模式大概流程为 open------------>read/write-------------->close; 命名空间的元素都可称为套接字接口。一个套接字接口构成一个连接的一端,而一个连接可完全由一对套接字接口规定。相关函数:...

2019-08-10 16:50:42 134

原创 智能指针

针对C++没有实现自己的内存回收机制,所以它引入了智能指针进行内存回收,力求做到内存由用户开辟,系统回收这样就能最大程度避免内存泄漏的发生。具体做法是以智能指针(类)生成一个对象(栈上生成)对开辟的内存(堆上)进行自主回收管理。C ++ 98 中引入了auto_ptr智能指针,其宗旨是维护内存所有权的唯一性,具体的做法就是对一个已经开辟内存块只能有一个智能指针指向,如果有新的智能指针对象指向该...

2019-08-09 21:09:56 206

原创 进程间通讯

通讯方式管道:借助文件系统在多个进程之间建立一条数据通讯信道,各进程通过自己打开的文件描述符操作同一块内存空间,从而进行数据传递。管道的数据都是通过内存空间缓存的,属于半双工通讯,数据只能是单向传输。特点: 面向字节流, 生命周期随内核 自带同步互斥机制。 半双工,单向通信,两个管...

2019-08-08 16:33:37 95

原创 单链表

链表与顺序表的区别以及应用场景:两者都是线性结构,链表是逻辑上连续,但是物理地址上不一定连续的一种数据结构;而顺序表则是逻辑上连续且物理地址上也连续的一种数据结构(一维数组); 对于频繁的插入或者删除建议使用链表这种数据结构,因为顺序表存在一个元素移动的问题,增加时间复杂度; 对于索引查找或者定点插入建议使用顺序表,直接可以利用数组下标定位;而链表的每次查找都会进行一次遍历;链表的数据结构...

2019-08-08 13:34:03 279

原创 TCP连接建立与终止

目录TCPTCP连接建立--------三次握手TCP连接终止--------四次挥手TCP的状态变迁图 TCP TCP是一个全双工的、面向连接的、可靠地传输协议,所以无论哪一方向另一方发送数据之前,都需要先在两者之间建立一个连接;基于全双工通讯所以存在TCP的半关闭状态,也就是说断开连接必须是双方都关闭,否则就说这种状态为半关闭状态(比如说客户端请...

2019-08-05 14:40:21 327

原创 Http协议、Https协议

目录http协议(超文本传输协议)请求报文请求方法状态码特点:Https协议:https接收请求和响应的过程:网址解析过程各种协议与HTTP协议之间的关系HTTP长连接、短连接HTTPS和HTTP的区别 http协议(超文本传输协议) 用于从WWW服务器传输超文本到本地浏览器,Http协议由请求和响应组成,当在浏览器中输入网址访问某个网站时...

2019-08-04 16:48:14 277

原创 常用端口号

端口;端口的作用是让应用层的各种应用进程都能将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层的进程。 端口号:存在于UDP和TCP报文的首部,而IP数据报则是将UDP或者TCP报文做为其数据部分,再加上IP数据报首部,封装成IP数据报。而协议号则存在于这个IP数据报的首部。协议:网络交互规则协议号:TCP--------6 ...

2019-08-04 15:57:10 760

原创 TCP协议的可靠性

保证数据能到达对端: 超时重传和确认应答机制、滑动窗口(发送方发送速率与接收端的接收缓冲区空间匹配) 、拥塞控制(发送方发送速率与网络环境匹配)保证数据不乱序,不重复:TCP报头中的32位序号,序号值为随机值ISN+报文段所携带数据的第一个字节在整个字节流中的偏移量。保证数据不失真: TCP报头中的16位冗余校验码,接收端对TCP的头部和数据部分通过CRC算法进行冗余校验1.检验和冗...

2019-08-04 15:45:21 758

原创 TCP Header、UDP Header、IP Header

TCP首部16位端口号:源端口和目的端口各占16位,2的16次方等于65536,看端口的命令:netstat。 序列号:字段长32位,表示发送数据的位置,每发送一次数据,就累加一次该数据字节数的大小。序列号不会从0或1开始,而是在建立连接时生成的随机数作为其初始值,通过SYN包传给接收端。然后再将每次转发过去的字节数累加到初始值上表示数据的位置。此外,在建立连接和断开连接时发送的SYN包和...

2019-08-04 15:16:56 1674

原创 基本命令

Linux内核引导时,从文件/etc/fstab中读取要加载的文件系统. Linux文件系统中每个文件用i节点来标识. 全部磁盘块由四个部分组成,分别为引导块 、专用块 、 i节点表块 和数据存储块. 链接分为:硬链接 和 符号链接(软连接),建立软链接(快捷方式),以及硬链接的命令。 软链接: ln -s slink source 硬链接: ln l...

2019-08-03 23:09:14 103

原创 进程创建详解

进程的创建进程程序是指储存在外部存储(如硬盘)的一个可执行文件, 而进程是指处于执行期间的程序, 进程包括代码段(text section)和 数据段(data section), 除了代码段和数据段外, 进程一般还包含打开的文件, 要处理的信号和CPU上下文等.Linux把所有的进程使用双向链表连接起来,Linux内核为了加快获取当前进程的的task_struct结构, 使用了一个技巧...

2019-08-03 17:31:45 1863 1

C#程序设计.pdf

C#程序设计基础知识、重点整理,适合入门语言的学习;推荐学习过c/c++的同志学习,上手快。学习之后可配合开发工具vs、结合wpf做windows窗体应用程序的开发,制作一些运行于windows平台下的小游戏更是不在话下。

2020-03-04

(windows)OfficeSuiteInstaller1.zip

安装OfficeSuite1时同时打开OfficeSuite.xpatch2点击patch,打开.dll文件

2019-07-23

(windows)OfficeSuite.xpatch2.zip

安装OfficeSuite1时同时打开OfficeSuite.xpatch2点击patch,打开.dll文件

2019-07-23

空空如也

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

TA关注的人

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