自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (1)
  • 收藏
  • 关注

原创 博客搬家通知

此刻起本人无限期停止在CSDN博客中更新文章,搬家到我的个人页面上欢迎访问~

2022-10-09 11:48:55 150 1

原创 公司员工管理系统(C++继承、多态)

公司员工信息管理系统:(使用C++实现)1、输入:txt文本,包含员工信息、性别、年龄、工号、部门、职位(职员、部门经理、总经理)等信息。2、要求功能: 添加、删除、修改员工信息;    员工显示排序(能够根据任意信息排序)。    根据某员工查询其上下级员工;    能够输出所有信息。3、需要使用知识点:类继承、多态、vector/map容器。源代码:1、头文件:...

2018-03-25 16:59:15 11119 7

原创 XSI IPC(消息队列、信号量、共享内存)

XSI IPC(消息队列、信号量、共享内存)IPC我们很清楚它是指进程间的通信,其中有三种我们称之为XSI IPC即消息队列、信号量以及共享存储器,他们之间有好多相似之处。System V(“系统五”)系统上发明了三种IPC机制(消息队列、信号量和共享内存),通常称为System V IPC。又因为后来被收录到Unix的XSI标准之中故又称为XSI IPC。所以当你看到System

2017-09-06 10:39:50 1322

原创 linux进程间通信之管道

linux进程间通信之管道1、匿名管道管道是一种最基本的进程间通信机制,管道由pipe函数来创建:调用pipe函数,会在内核中开辟出一块缓冲区用来进行进程间通信,这块缓冲区称为管道,它有一个读端和一个写端。pipe函数接受一个参数,是包含两个整数的数组,如果调用成功,会通过pipefd[2]传出给用户程序两个文件描述符,需要注意pipefd [0]指向管道的读端, pipefd...

2017-09-05 11:28:06 476

原创 【剑指offer】替换空格问题

题目:实现一个函数,把字符串中每个空格都替换成%20,例如输入“we are happy!!!”,输出“we%20are%20happy!!!”思路:1、若内存够多,可另开辟一足够大字符串,在新字符串上做替换,实现思路简单。2、在原来字符串上修改,并保证后面有足够空间。代码:void ReplaceBlank(char* str,int strsize){ if (str == NULL

2017-08-28 18:35:46 450

原创 模拟c库函数atoi和itoa

模拟c库函数atoi和itoaatoi模拟://字符串转整数int my_atoi(char* str){assert(str);int s = 0;int flag = 1;while ((*str) == ' ') //去掉空格{ str++;}if (*str == '-'){ flag = -1; str++;}while (*str !=

2017-08-09 09:05:23 480

原创 c语言的关键字

c语言的关键字auto、 break、 case、 char、 const、 continue 、default、 do 、double 、else、 enum 、extern、 float、 for、 goto 、if、 int、 long、 register 、return 、short、 signed、 sizeof、 static、 struct、 switch 、typedef 、unio

2017-08-07 15:58:11 2994

原创 IO多路转接之select

深入理解select模型原理,实现一个简单的select服务器。

2017-08-03 10:38:46 963

原创 IO多路转接之epoll

I/O多路转接之epollepoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。epoll接口#include <sys/epoll.h>int epoll_crea

2017-08-02 22:18:41 752

原创 c++STL内存池和空间配置器

c++STL内存池和空间配置器为什么需要空间配置器?内存碎片问题:在软件开发,程序设计中,我们不免因为程序需求,使用很多的小块内存(基本类型以及小内存的自定义类型)。在程序中不断动态申请,释放。这个过程过程并不是一定能够控制好的,于是乎,问题1:就出现了内存碎片问题。(外碎片问题)问题2:一直在因为小块内存而进行内存申请,调用malloc,由于内存空间是由操作系统管理的,当我们要去开辟时,必然要进行

2017-07-29 23:47:11 2149

原创 TCP套接字通信

TCP套接字通信网络中进程之间如何通信?我们知道在本地进程间通信有很多种方式:比如管道、消息队列、共享内存、同步与互斥等,这些方法都要求通信的两个进程位于同一个主机那么网络之间该如何通信呢?在本地可以用进程PID来唯一的标识一个进程,但是在网络中是不行的,通过以前所学TCP/IP等知识,我们清楚网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“端口号”又可以唯一标识主机中的应用程序。这样,我

2017-07-26 22:55:42 2515

原创 网络端口的调研

网络端口的调研什么是端口#### 在 Internet上,各主机间通过TCP/UDP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。但是大多数操作系统都支持多程序(进程)同时运行,端口号就保证了目的主机将数据传送给指定的进程。#### 本地操作系统会给那些有需求的进程分配协议端口 (protocal port,即我们常说的端口),每个

2017-07-17 10:52:56 442

原创 调研TCP的定时器

调研TCP的定时器#### TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据。但是数据和确认都可能会丢失。TCP通过在发送时设置一个定时器来解决这个问题。如果当定时器溢出时还没收到确认,它就会重传该数据。关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率。因此对于每个连接,TCP 管理着四个不同的定时器:重传定时器、坚持定时器、保活定时器 以及 2MSL 定时

2017-07-17 10:26:34 376

原创 路由生产算法调研

路由生产算法调研路由是指路由器从一个接口上接收数据报,根据数据报的目的地址进行定向并转发到另一个接口的过程。路由结点一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向那个接口发送数据报。 接口路由结点与某个网络相连的网卡接口。 路由表由很多路由条目组成,每个条目都指明去往哪个网络的数据报应该经由那个接口发送。其中最后一条是缺省路由条目。 路由条目路由表中的每一行,每个条目主要由

2017-07-15 13:15:06 471

原创 链表的带环问题

判断链表是否带环?用快慢指针法:若带环必然相遇bool IsExitLoop(ListNode* list){ ListNode* fast = list; ListNode* slow = list; while (fast && fast->_next) { fast = fast->_next->_next; slow = sl

2017-07-15 12:37:56 374

原创 设计一个类不能被继承

1.设计一个类不能被继承我们知道,一个类不能被继承,即构造不出来对象,在继承体系中:public继承:基类的public成员在派生类中仍为public成员;基类的protected成员在派生类中为protected成员;基类的私有成员,派生类不可见;protected继承:基类的public成员在派生类中变为protected成员;基类的protected成员在派生类中为protected成员;基类

2017-07-15 09:51:11 879

原创 逆置单链表/求倒数第k个结点

定义并创建链表:#include using namespace std;#include typedef struct ListNode{ int _data; struct ListNode* _next; ListNode(int data) :_data(data) ,_next(NULL) {}}ListNode;void Push(ListNode

2017-07-15 08:51:17 449

原创 NAT技术与代理服务器调研

1. 什么NAT技术?        NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(

2017-07-14 12:30:11 981

原创 浅析地址解析协议ARP

地址解析协议(ARP):    在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求

2017-07-13 22:14:59 1023

原创 各种排序算法总结

1、【冒泡排序法】        又称交换排序法,即在排序过程中,让较大的元素向下沉,较小的元素向上浮,其处理程序从元素的开始位置起,相邻的元素进行比较,若第i个数大于第i+1个数,则互相交换,比较过所有的元素后,最大的元素将会被排到最后面;重复每一趟均会将最大值放在当前的最后面。void bubble_sort(int* a,int sz){ int i = 0; in

2017-07-13 21:37:47 266

原创 合并两个有序链表

1.合并两个有序链表,合并以后的链表依旧有序。合并两个有序链表,可以分为以下几种情况:a)当要合并的两条链表都为空,返回空;b)当一个链表为空;此时我们直接返回好另一条链表即可;c)都不为空,两个链表进行合并;在此中由于我们不知道链表1和链表2应该以谁为头,因此.我们自己定义新链表的头;然后注意进行比较,逐次向表头链接;当其中一个链接完成后,由于其有序,直接将后一个没有连完挂在后面即可.下面为代码:

2017-07-13 21:12:38 633

原创 浅谈CRC效验

浅谈CRC效验在网络的信息的传输中,现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能变为0,而0也可能变为1.这就是比特差错。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前在数据链路层广泛使用了循环冗余检验CRC的检错技术。CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种

2017-07-12 18:22:01 3276 1

原创 快速排序总结

快速排序快速排序是一种经常使用应用最广泛的一种排序算法,它可以算是冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;排序流程为先选取一个key(一般选取最左或最右)将数据分割两部分,再运用递归直到递归到只有一个元素。

2017-07-08 14:15:45 419

原创 数据结构map与set

map与set基本使用

2017-06-28 11:44:18 494

原创 生产者、消费者模型

linux中当两个线程要访问同一块临界区域时,比如一个读进程,一个写进程,一个在临界区域写数据,另一个在临界区域读数据,被访问的这块临界区域通常叫缓冲区,而往这块缓冲区里写数据的叫生产者,在这块缓冲区里读数据的叫消费者。要实现消费者与生产者的关系,要满足一个原则,就是“321“原则。3代表的是有三个关系:3种关系:生产者与生产者的关系、消费者与消费者的关系、生产者与消费 者的关系2代表的是两种角色:

2017-06-14 13:52:07 398

原创 线程之互斥锁与死锁

互斥锁:1、互斥锁基本原理: 互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁在逻辑上绑定(要申请该资源必须先获取锁)。 (1)访问公共资源前,必须申请该互斥锁,若处于开锁状态,则申请到锁对象,并立即占有该锁,以防止其他线程访问该资源;如果该互斥锁处于锁定状态,则阻塞当前线程。 (2)只有锁定该互斥锁的进程才能释放

2017-06-05 14:00:31 13516 5

原创 线程初识

线程的概念1、在进程中,进程承担资源分配,而线程是调度的基本单位,线程在进程内部运行,那么,什么是线程呢?简单来说一个线程是进程的一个顺序执行流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此,线程也被称为轻负荷进程。一个进程中可以包含多个线程。linux中线程又称为轻量级进程。线程的特点:我们已经知道进程主要是独占系统资源,独享系统地址空间

2017-06-03 23:08:51 544

原创 堆知识总结

堆是一种完全二叉树,堆结构的二叉树存储方式分为大堆和小堆。大堆:每个父节点都大于孩子节点小堆:每个父节点都小于孩子节点创建一个大堆:向下调整算法思路:我们知道堆均是完全二叉树,因此一个父节点的子节点即child = parent*2+1;因此在向下调整算法中从根节点开始逐一与它的孩子进行比较,每次保证一棵树最大数据是根节点。例如:int a [] = {10,11, 13, 12, 16, 18,

2017-06-03 16:09:00 373

原创 二叉树的三种遍历递归法和非递归法(前序、中序、后续)

二叉树的前序遍历:根->左->右1、递归方法:思路:我们知道递归就是将一个大问题不断分成子问题进行处理,当达到递归终止条件时,跳出。因此在前序遍历中我们把每一个节点分成三部分,即:根节点、左子树、右子树。例如下面这个二叉树递归过程:转化成代码代码:void PrevOrder() //1、递归法 { Node* root = _Root; _PrevOrder(roo

2017-05-29 12:51:16 543

原创 走迷宫问题:回溯法和递归法

问题描述:给一迷宫表个和入口位置,找出并打印出从入口到出口的路径注意:迷宫表格我们可以用一个二维数组来表示,但是如果用二维数组表示,将唯一固定,迷宫趣味性大大降低并代码长度增大;因此,我们最好是将迷宫表格存储在一文件中,在实现时再从文件中读取;采用模板来实现可实现复用性;设计分析:1、我们可沿着入口逐一方向进行试探,若有通则继续前进,全不通,回溯法则回溯,递归法则到达递归终止条件。2、采用栈来记录走

2017-05-25 15:44:48 4782

原创 树与二叉树初识

树相关的一些概念。树是n(n>=0)个有限个数据的元素集合,形状像一颗倒过来的树。节点:结点包含数据和指向其它节点的指针。根节点:树第一个结点称为根节点。结点的度:结点拥有的子节点个数。叶节点:没有子节点的节点(度为0)。父子节点:一个节点father指向另一个节点child,则child为孩子节点,father为父亲节点 。兄弟节点:具有相同父节点的节点互

2017-05-25 12:13:08 379

原创 fork()函数和linux进程号

pid_t 类型——定义进程号类型;实际类型:我们可找到其定义:1、在centos6.5的/usr/include/sys/type.h中可找到其定义:总结:pid_t 就是 int 型2、fork()函数创建子进程      需要的头文件:#include和#include      功能:从一个已经存在的进程中创建新进程,原进程称父进程,新进程称子进程

2017-05-25 10:08:06 629

原创 模拟实现队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。模拟代码:#include using namespace std;#include templatestruct QueueNode{ T _Data;

2017-05-24 11:09:25 706

原创 队列和栈相关面试题总结

1、实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)??分析:     出栈和入栈根据栈自身提供的接口不难实现,而返回最小值,我们知道遍历一次栈即可找到最小值,但是对栈的操作只能在栈顶,因此,要遍历势必要改变栈的状态,而且还要求时间复杂度为O(1),即更不能遍历栈。我们可以利用两个栈同时进行操作,一个是我们放数据的栈,而另一个栈顶专门放

2017-05-23 23:49:51 560

原创 栈的模拟实现

#include using namespace std;#includetemplateclass Stack{public: Stack() :_arr(NULL) ,_size(0) , _capacity(0) {} void Push(const T& x) { _checkcapacity(); _arr[_size] = x; _size

2017-05-23 20:44:22 462

原创 智能指针发展

智能指针就是智能/自动化的管理指针所指向的动态资源的释放。并且可以向指针一样使用。1、早期auto_ptr—是一种失败的设计,有设计缺陷为了解决对象中指针的重复释放,采用管理权转移的方式。即在解决对象的赋值、拷贝构造时,比如:a = b;将a的地址空间释放,然后将b.ptr的指针赋给a.ptr,最后将地址空间的管理权交付于a.ptr,并将b.ptr致null。因此,在赋值过后,将不能使用原来指针,缺

2017-05-11 20:03:06 358

原创 c++模板之萃取

假如,我们要设计一个_Copy的模板函数。我们为了提高效率采用memcpy,可以这样写:template<typename T>T* _Copy(T* dest, T* src, size_t n){ memcpy(dest, src, sizeof(T)*n); return dest;}我们知道一般的类型(比如int,float,double,char等)进

2017-05-04 11:28:36 1005

原创 进程之task_struct

进程可以把进程当成一组元素组成的实体,进程的两个基本元素程序代码和与代码相关的数据集。假设处理器开始执行这个程序代码,且我们把这个执行实体称为进程。那么,在程序执行时,任意给定一个时间,进程都可以唯一的被表征为以下元素:1、标识符:跟这个进程相关的唯一标识符,用来区别其他进程2、状态:进程此时的状态3、优先级:相对于其他进程的优先级4、程序计数器:程序中即将被执行的下一跳指令的地址5、内存指针:包括

2017-05-03 19:12:36 593

原创 模板的分离编译

有下面两代码:1、普通类函数:我们把类的声明和定义分开:array.h:#pragma once#include <iostream>using namespace std;class ArrayNonT{public: ArrayNonT();//构造函数 void PushBack(int x);protected: int _a[100]; size_t _

2017-04-23 21:06:22 544

原创 模板实现双向链表

c++模板实现双向链表:#include <iostream>using namespace std;template<typename T>struct ListNode { T _data; ListNode<T>* _prev; ListNode<T>* _next;};template<typename T>class List{ typedef

2017-04-23 08:46:10 591

Linux C一站式学习

学习linux必看书籍,本书有两条线索,一条线索是以Linux平台为载体全面深入地介绍c语言的语法和程序的工作原理,另一条线索是介绍程序设计的基本思想和开发调试方法

2018-08-13

空空如也

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

TA关注的人

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