自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 WebBench----简洁优美的网站压力测试工具

WebBench是Linux下的一款网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。    WebBench能测试相同的服务在不同的硬件的性能和不同服务在相同硬件下的性能。WebBench的下载安装1.下载命令:wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz2.

2017-07-26 00:17:25 4646

原创 进程间通信---管道

一、进程间通信的实质      每个进程都有各自不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到。所以进程之间要交换数据必须要通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间考到内核缓冲区,进程2载从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。如图:二、管道管道是一种最基本的IPC机制,由pipe函数创建。调用pipe函数,在内核中开辟一

2017-05-18 18:04:11 767

原创 IPC之消息队列

一、什么是消息队列?消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。二、在Lin

2017-05-17 00:20:12 739

原创 浅析HTTP协议

一、http的特点1.支持客户/服务器模式2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET,POST,HEAD。每种方法规定了客户与服务器的联系不同。由于http协议简单,使得http服务器的程序规模小,所以通信很快。3.灵活:http允许传输任意类型的数据对象。4.无连接:无连接的含义是含义是限制每次连接只处理一个请求。服务器处理完客户的请求,

2017-04-23 23:40:13 743

原创 三种I/O复用函数的比较总结

下列情况下可以用到I/O多路转接技术:1.客户端程序要同时处理多个socket。(比如非阻塞的connect技术)2.客户端程序要同时处理用户输入和网络连接。3.TCP服务器要同时处理监听socket和连接socket。(I/O复用使用最多的场合)4.服务器要同时处理TCP请求和UDP请求。5.服务器要同时监听多个端口,或者处理多种服务。(xinetd服务)I/O复用虽然可

2017-03-30 23:10:19 1319

原创 I/O复用(三)---epoll机制

epoll实现机制分析:epoll是Linux特有的I/O复用函数。它在实现和使用上与select和poll有很大的差异。首先,epoll使用一组函数来完成任务,而不是单个的函数。其次,epoll把用户关心的文件描述符上的事件放在内核的一个时间表中,从而无需像select和epoll那样每次调用都要重复传入文件描述符和集或事件集。但epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个

2017-03-21 13:34:15 784

原创 I/O复用(二)

Linux下实现I/O多路复用的系统调用主要有select、poll和epoll。

2017-03-21 00:03:51 575

原创 高级I/O

非阻塞I/O,记录锁,I/O多路转接(select/poll),readv和writev函数以及存储映射I/O,这些tong'cheng

2017-03-20 12:18:28 508

原创 I/O复用(一)

I/O复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要。通常,网络程序在下列情况下需要使用I/O复用技术。   1.客户端程序要同时处理多个socket。   2.客户端程序要同时处理用户输入和网络连接。   3.TCP服务器要同时处理监听socket和连接socket。   4.服务器要同时监听多个端口,或者处理多种服务。I/O复用虽然能同时监听多个文件描述符

2017-03-17 10:52:13 510

原创 Linux网络编程基础API(多线程实现)

用到知识点:1.套接字的创建、绑定、监听、接收、链接2.多线程编程:线程创建、线程等待、线程分离、3.字符串和IP地址的转化等server.c实现多个客户端连接服务器的功能/************************************************************************* > File Name: tserver.c

2017-03-14 13:02:21 422

原创 套接字socket实现UDP

TCP/UDP都是运输层协议,他们之间的最大区别就是TCP是面向连接的可靠传输协议,而UDP是不可靠的。UDP的主要特点:1.UDP是无连接的,发送数据不需要建立连接,因此,减少了开销和发送数据之前的时延。2.UDP使用最大努力交付,不保证可靠交付。3.UDP是面向报文的,而TCP是面向字节流的。4.UDP没有拥塞控制。5.UDP支持一对一,一对多,多对一和多对多的交互通信

2017-03-11 22:26:50 730

原创 网络套接字

Socket(套接字)一、什么是Socket?     在TCP/IP协议中,“IP地址+TCP/UDP端口号”可以唯一标识网络中的一个进程。IP地址+TCP/UDP端口号就是Socket。     在TCP协议中,建立连接的两个进程各自有一个socket来标识。这样,这两个进程组成了一个socket pair就唯一标识一个连接。网络连接是一对一的。二、网络数据流的大小端

2017-03-10 22:37:39 890

原创 浅析TCP的四种内部计时器

TCP有四种内部计时器1.时间等待计时器2.保活计时器3.重传计时器4.持久计时器一、时间等待计时器     时间等待计时器常用于链接终止时,当TCP关闭一个链接时,它并不认为这个链接马上就真正地终止了,在时间等待期间,链接还处于一种中间过渡状态。时间等待计时器的值通常设置为一个报文段寿命期待值的2倍。     设置时间计时器的目的:1.如果最后一个ACK报文丢失了

2017-03-07 15:42:40 831

原创 task_struck结构体成员注释

task_struct结构注释  ==========================  long state 任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。  long counter 任务运行时间计数(递减)(滴答数),运行时间片。  long priority 运行优先数。任务开始运行时counter = priority,越大运行越长。

2017-01-08 16:33:58 1562

原创 Linux中的粘滞位

本文内容:一、前言二、粘滞位的概念三、粘滞位的作用四、粘滞位的简单分析五、粘滞位的设置前言    最近在学习Linux的过程中发现了一个问题,用户A与用户B同属一个组,且一个文件对该组成员具有可写和可执行的权限,但是用A创建的文件,B却无法删除。原来是该文件位置的上层目录的权限是drwxrwxrwt。    我们都直到,Linux下每一个文件或目录都有自己的访问权限

2017-01-05 11:14:33 493

原创 进度条所引发的问题

本文主要概述的问题:一、进度条的实现原理二、缓冲区的问题三、回车和换行的问题四、进度条的实现五、Makefile文件的编写        我们要实现一个简单的进度条,完成后如下图所示:那么这个建议的进度条的实现原理是什么呢?

2017-01-03 17:44:53 442

原创 浅析Linux下的三个时间

前言:windows打开一个文本文件的设置,我们会看到有三个时间:这三个时间分别标识了windows系统中,这个文件的创建时间、修改时间和访问时间。          那么,对于“一切皆文件的”Linux系统呢?查看Linux下时间:Linux下有一条查看时间的指令---statLinux系统下也有三个主要的时间参数,分别是Access,Modify,Change

2017-01-01 11:30:12 658

原创 Linux下的软硬链接

一、LInux链接概念        Linux链接分为符号链接(Symbolic Link)也叫软链接和硬链接(Hard Link)两种,默认情况下,ln命令会产生硬链接。二、软链接        1.创建软链接的命令:ln -s sourcefile newfile        2. 简介:             软链接又叫做符号链接,软链接文件有类似于Wondow

2016-12-30 17:18:59 885

原创 Linux的五个查找命令

每一种操作系统都由成千上万的文件组成,Linux系统更是一切皆文件,我们都能很轻松使用windows下的文件查找功能,(Everything也是一款很好用的文件查找软件),但是对linux这一功能可能并不是很熟悉,因为linux系统下文件没有固定的文件名后缀,而且一个相同的文件在不同的发行版,可能会有不同,所以牢牢掌握linux系统的查找命令就会显得十分重要,学习起来也会更加顺利,而且在学习的过程

2016-12-29 22:50:12 5635

原创

图是一种非线性数据结构,由顶点集合(vertex)和边的集合组成的一种数据结构。Graph=(V,W);V={x|x是顶点集合}; V是顶点的集合E={|x,y属于V}; E是边的集合图分为有向图和无向图1.有向图2.无向图 完全图在由n个顶点组成的无向图中,若有N(N-1)/2条边,则称为无向完全图。(也就是说任意

2016-12-04 00:26:33 398

原创 网易---跳石板

小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6-

2016-11-28 17:41:45 326

原创 网易---优雅的点

小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。例如:半径的平方如果为25优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。 输入描述:输入为一个整数,即为圆半径的平方,范围在32位int范围内

2016-11-28 17:38:23 311

原创 操作系统---进程调度算法

调度类型---OS的三级调度1.作业调度---高级调度(用于决定将外存上处于后备队列中的哪些作业调入内存,处于内存就绪队列,准备执行)2.进程调度---低级调度(决定就绪队列中哪个进程将获得处理机)3.交换调度---中级调度(目的是提高内存的利用率和系统吞吐量)吞吐量指单位时间内处理工作量的总和进程调度的方式:1.非剥夺方式(非抢占方式)一旦占有cpu,直至完成后阻

2016-11-27 00:37:17 696

原创 小米面试题---朋友圈问题(并查集)

假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写出程序求出这n个人里一共有多少朋友圈。   例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友。则1,2,3属于一个朋友圈,4,5属于另一个朋友圈,结果为两个朋友圈。    这

2016-11-26 09:48:08 1654

原创 如何创建一个类只能在堆(栈)上建立对象

在C++中,类对象的建立方式有两种,一种是静态建立类对象,如A a;另一种是动态建立类对象,如A* p = new A;这两种方式是有区别的:    静态建立类对象:是指全局对象,静态对象,以及分配在栈区域内的对象,编译器对它们的内存分配是在编译阶段就完成的,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。

2016-11-08 15:13:00 2665

原创 广义表

广义表是非线性的结构,是线性表的一种扩展,是一个有限序列。广义表是一种递归定义的结构,表中又嵌套着表。eg: A = ()      B = (a,b)      C = ((a,b),(c,d))      D = ((c),a,((e,f),d),b)广义表的结构定义:节点类型有三种:表头节点、值节点、子表节点还有指向下一个节点的指针enum Type

2016-10-26 22:40:52 505

原创 堆排序

堆数据结构是一种数组对象,是一棵完全二叉树,堆结构的二叉树存储结构是:最大堆:每个父节点数据都大于孩子节点 最小堆:每个父节点数据都小于孩子节点

2016-10-13 09:45:27 300

原创 高度平衡的二叉搜索树-----AVL树

AVL树是高度平衡的二叉搜索树,它能保持二叉树的高度平衡,尽可能降低二叉树的高度,减少数的平均搜索长度AVL树的几个特点:1.左右子树高度绝对值不超过12.树的每左右子树都是AVL树3.每个节点的平衡因子是-1,0,1(平衡因子 = 右子树高度-左子树高度)一棵AVL树有N个节点,其高度可以保持在log2N,插入/删除/查找的复杂度也在log2N(log2N就是以2为底N的对数

2016-09-22 15:18:53 1209

原创 面试热门题C与C++的区别-------指针和引用

在面试过程中,C语言和C++的区别总是面试官的侧重点,而指针和引用更是容易被问到,指针和引用的区别很简单,但很少有人能有全面的,有层次有条理的回答这个问题,所以有条理的总结归纳就显得尤为重要。先来了解什么是指针,什么是引用指针:存储内存中某一块空间地址的变量。引用:引用不是定义一个新变量,而是给一个已经定义的变量起一个新的别名。定义的格式:指针:类型 *变量名 = 已有变量地址

2016-09-11 21:34:29 2019

原创 栈和队列面试题(四)

5.一个数组实现两个栈有两种方法:(1),数组单号下标为一个栈,双号下标为一个栈(2)开辟一个数组,从0号下标往右为1号栈,从N号下标网左为2号栈下面先来实现第一种方法:#include #include using namespace std;templateclass DoubleStack2{public: DoubleStack2() :_a

2016-08-24 15:23:38 579

原创 栈和队列面试题(三)

4.元素出栈入栈的合法性,如入栈的序列(1,2,3,4,5),出栈的序列为(4,5,3,2,1).思想:先入栈一个元素,将出栈序列的第一个元素和该栈的栈顶元素比较,如果相同,那就让该元素出栈且出栈序列往后走一个,如果不相同,就按照入栈序列再把下一个元素入栈,再接着把栈顶元素和出栈元素进行比较,就这样循环比较,直到出栈序列为空,如果栈也为空,说明该出栈序列是合法的,否则就是不合法的。例如:入

2016-08-24 14:59:03 4131

原创 栈和队列面试题(二)

2.使用两个栈实现一个队列。思想:栈是先进后出的数据结构,队列是先进先出的数据结构,要用两个栈实现一个队列,就必须让两个栈实现元素的先进先出。入栈时,让需要入栈的元素全都进入S1栈中,出栈时,再把S1中的元素依次出栈,入S2栈,再把S2的栈顶元素弹出。如下图所示:当然,这个过程过于繁琐,有可以优化的方法如下图所示:代码实现://两个栈实现一个队列#include

2016-08-20 11:19:28 646

原创 栈和队列面试题(一)

1.实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)。思想:创建两个栈,一个为正常栈S,一个为最小元素栈Minstack,按元素入栈顺序将第一个元素入S和Minstack栈,然后将元素依次入栈,入栈时,将每个元素与Minstack栈的栈顶元素进行比较,如果该元素小于Minstack栈栈顶元素,就把该元素也放进Minstck栈,出栈时,判断出栈元

2016-08-20 10:42:53 1588

原创 两种方法实现队列---顺序表和链表

队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列主要有push()(尾插),pop()(头删),size()(求队列大小),empty()(是否为空队列)几个基本的操作函数。顺序表实现队列:顺序表代码

2016-08-07 21:03:17 2130 5

原创 用两种方法实现栈---顺序表和链表

栈是一种先进后出的数据结构,栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。栈里面常用的函数有push()(增),pop()(删),size()(求大小),top()(顶部)和empty()(空

2016-08-06 11:37:06 1978

原创 多种方法实现费波纳契数列

费波纳契数描述的问题:兔子的生长情况:1.第一个月有一对刚诞生的兔子                             2.第二个月之后(第三个月初)就可以生育                             3.每月每对可生育的兔子都会诞生下一对新的兔子                             4.兔子不会死去

2016-07-23 00:36:05 1142

原创 简单的小游戏---代码实现三子棋

大家都玩过五子棋吧,在这里,我就来实现一个比五子棋低版本的小游戏,三子棋,仅供娱乐哦!!

2016-07-22 17:41:55 793

原创 字符数组的翻转

eg:将“student a am i”翻转变为"i am a student"思路:将整个数组翻转,再把每个单词都翻转过来就可以了#define _CRT_SECURE_NO_WARNINGS 1#include #include //student a am i --> i am a studentvoid MyReverse(char* start, ch

2016-07-21 01:23:38 758

原创 模拟实现String类---->写时拷贝

之前分享了模拟实现String类的传统写法和现代写法,今天再来分享一下写时拷贝的方法,写时拷贝主要用在一下场景中需要大量拷贝构造,析构同样的空间,这样,传统写法和现代写法中国不断的开辟空间,析构空间,效率太低void Test(){ String s1("s1"); for (int i = 0; i < 1000; i++) { String s2(s1); }}写时

2016-07-08 14:04:01 447

原创 模拟实现String类--->现代写法

已经介绍过模拟实现一个String类的传统写法,现在,我们在来讨论一下使用现代写法模拟实现一个String类,现代写法能够更好更方便的管理代码,在有些地方也更高效下面是实现的代码:class String{public: /*String(const char* str) :_str(new char[strlen(str)+1]) { strcpy(_str, str);

2016-07-08 13:42:03 546

空空如也

空空如也

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

TA关注的人

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