自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 N*N顺时针螺旋递增数组(多益网络)

#include #define MAX 100int main(){ int i = 0; int j = 0; int a[MAX][MAX] = { 0 }; int n = 0; int k = 1; printf("please input a number n:"); while (scanf("%d", &n) != EOF) { k = 1;

2017-08-29 16:20:49 629

原创 文件压缩

//HuffmanTree.h#include #include #include "Heap.h"using namespace std;templatestruct HuffmanNode{ HuffmanNode* _parent; HuffmanNode* _left; HuffmanNode* _right; T _weight; HuffmanNod

2017-08-14 16:43:38 349

原创 排序算法

#include#include #include #include#includeusing namespace std;#define RADIX_10 10 //整形排序 #define KEYNUM_31 10 //关键字个数,这里为整形位数 void Swap(int* a, int* b){ int temp; temp = *a; *a = *

2017-08-13 21:09:58 1466 10

原创 tcp_server

//server.c//version1server和clien#include#include#include#include#include#include#include#includevoid Usage(char* proc){ printf("Uasge:%s[local_ip][local_port]\n",proc); exit(2);}in

2017-08-04 22:40:54 643

原创 shell版本的彩色进度条

1 #! /bin/bash                  2 i=0           3 str=""        4 index=0       5 array=("|" "/" "-" "\\")      6 for i in {0..100}             7 do            8     let index=i%4

2017-08-03 22:09:15 494

原创 TCP握手与挥手

TCP握手与挥手(1)三次握手:      TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小(mss)信息。根据上面的图讲解通常情况下客户端计算机联系服务器计算机的过程:      1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号1000(一个网络通讯中⽤用作临时的地址)和一个窗口大

2017-07-23 19:22:00 516 2

原创 生产者消费者模型

生产者消费者生产者消费者模型的描述:两个进程共享一个缓冲区,一个进程称为生产者向缓冲区中放数据,另一个称为消费者从缓冲取中取数据,当缓冲区中被放时,生产者进程就必须进入挂起状态,直到消费者从缓冲中取走数据时,生产者才能继续向缓冲区中存放数据,同样当缓冲中取没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能被唤醒继续从缓冲区中取走数据。 生产者和消费者模

2017-07-11 14:27:39 909 4

原创 路由生产算法调研

路由生产算法调研 路由算法及分类:1、非自适应算法,静态路由算法不能根据网络流量和拓扑结构的变化更新路由表,使用静态路由表,也称为固定式路由选择算法。特点:简单,开销少;灵活性差。2、自适应算法,动态路由算法可根据网络流量和拓扑结构的变化更新路由表。特点:开销大;健壮性和灵活性好。3、最优化原则(optimality principl

2017-07-10 14:39:58 1250

原创 URG--PSH

TCP--URG和PSHTCP的段格式如下图所⽰: 在TCP层,FLAGS字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:URG:  紧急指针标志位SYN:  同位标志位 FIN:  关闭连接ACK:  确认标志位 PSH:  推送标志位 RST:  连

2017-07-10 12:32:58 752

原创 调研tcp定时器

调研tcp定时器      定时器在TCP可靠传输的过程中起着十分重要的作用。TCP在建立连接之后可能(保活keep-alive定时器是可选的)会启动四个定时器。      TCP使用四种定时器(Timer,也称为“计时器”):      重传计时器:Retransmission Timer      坚持计时器:Persistent Timer      保活计时器:Keep

2017-07-10 11:22:22 494

原创 端口分类调研

端口分类调研计算机共有65535个端口, 但是一般使到的也就是十几个。逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类:1. 按端口号分布划分(1)知名端口(Well-Known Ports)知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配

2017-07-10 10:40:34 762

原创 NAT和代理服务器的调研

NAT和代理服务器调研NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的

2017-07-10 10:15:29 578

原创 arp脚本

arp脚本ARP协议: 地址解析协议,(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各

2017-07-09 16:06:19 876

原创 CRC校验

CRC校验       CRC:循环冗余校验码(Cyclic Redundancy Check),是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。循环冗余校验码(CRC)的基本原理是:在K

2017-07-09 11:24:06 2838

原创 信号量

信号量       信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。       为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代

2017-07-08 12:45:13 540

原创 线程安全和可重入函数

线程安全1.线程安全      就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。2.线程不安全      就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据受到污染。(解决方法:基本上所有的并发模式在解决线程安全问题上,都采用“序列化访问临界资源”

2017-07-07 10:42:03 425

原创 mysleep

mysleep普通版本的mysleep:1、 main函数调用mysleep函数,后者调用sigaction注册了SIGALRM信号的处理函数handler。 2、调用alarm(time)设定闹钟。 3、调用pause等待,内核切换到别的进程运行。 4、time秒之后,闹钟超时,内核发SIGALRM给这个进程。 5、从内核态返回这个进程的用户态之前

2017-07-05 16:55:59 518

原创 创建守护进程

守护进程守护进程是一个在后台运行并且不受任何终端控制的进程,也称精灵进程(Daemon),它独⽴立于控制终端并且周期性地执⾏行某种任务或等待处理某些发⽣生的事件。守护进程是⼀一种很有用的进程。Linux的大多数服务器就是⽤守护进程实现的。⽐如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。⽐如,作业规划进程crond等Linux系统启动时会启动

2017-07-04 09:49:48 541

原创 crond和crontab

crond 与crontab       crond 和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。而crond正是它的守护进程。       用 servic

2017-07-02 16:50:37 3058

原创 线程死锁

线程死锁      死锁的概念:两个或多个线程发生永久堵塞(等待),每个线程都在等待被其他线程占用并堵塞了的资源。显然,如果没有外力的作用,那么死锁涉及到的各个进程都将永远处于封锁状态。计算机系统产生死锁的根本原因就是资源有限且操作不当。即:一种原因是系统提供的资源太少了,远不能满足并发进程对资源的需求。这种竞争资源引起的死锁是我们要讨论的核心。例如:消息是一种临时性资源。某一时刻,进

2017-06-08 18:35:05 762

原创 RBTree(红黑树)

红黑树红黑树(Red Black Tree)和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡。红黑树是一颗二叉搜索树,它的每一个节点增加了一个存储位用来表示颜色,可以是Red也可以是Black,通过对任意一条根到叶子节点的颜色来约束,红黑树保证最长路径是最短路径的两倍,因此近似平衡;红黑树的性质:1:每个节点不是红色就是黑色2:根节点是黑色3:

2017-06-05 13:33:04 954

原创 AVLTree

AVLTree搜索树AVL树本质上是一棵二叉搜索树,它的特点是:1.本身首先是一棵二叉搜索树。2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。调整平衡的方法如下:实现代码如下:#include #include us

2017-06-05 13:26:26 484

原创 二叉搜索树

Binary  search Tree(二叉搜索树)二叉搜索树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若任意节点的右子树不空,则右子树上所有结点的

2017-06-05 13:17:02 395

原创 堆排序

#include #include using namespace std;template class Heap{public: Heap() {} Heap(const T* array, size_t size){ for (size_t i = 0; i < size; i++){ _array.push_back(array[i]); for (int

2017-05-22 16:10:12 384

原创 A^B中最后三位(百度2011研发工程师笔试卷)

给定两个数A,B(0,10000),求A^B中最后三位数是多少#define _CRT_SECURE_NO_WARNINGS 1#include int main(){ int num = 0; int b = 0; long long s = 1; int c = 0; scanf("%d",&num);//底数 scanf("%d",&b);//指数 if (b==1) {

2017-05-22 15:49:49 784

原创 进程替换(exec函数)

1 # include 2 #include 3 #include 4 #include 5 #include 6 #include 7

2017-05-21 21:37:18 789

原创 模拟实现shell

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 void GetPwd() 11 { 12 char pwd[256]={0}; 13 getcwd(p

2017-05-21 18:58:30 1860

原创 二叉树的递归与非递归

#include #include #include #include using namespace std;templatestruct BinaryTreeNode{ BinaryTreeNode* _left; BinaryTreeNode* _right; T _data; BinaryTreeNode(const T& x) :_left(NULL) ,

2017-05-06 17:44:20 442

原创 模拟实现list(迭代器)

#pragma once;#include #include#include using namespace std;templatestruct __ListNode{ T _data; __ListNode* _next; __ListNode* _prev; __ListNode(const T& x) :_data(x) ,_nex

2017-04-23 10:44:35 403

原创 STL标准库中的list接口

list接口在标准STL库中list接口如下:list是C++标准模版库(STL,Standard Template Library)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。使用list容器之前必须加上头文件:#include;list属于std命名域的内容,因此需要通过命名限定:using std::list;也可以直接使用

2017-04-23 10:37:52 642

原创 c++异常处理

异常处理C++语言本身或标准程序库所抛出的所有异常,都派生自基类exception。这是其他数个标准异常类别的基类,它们共同构成一个类体系:传统错误处理办法1. 终止程序。(如段错误等)2. 返回错误码。3. 返回合法值,让程序处于某种⾮法的状态。(误导人,不可用)4. 调一个预先设置的出现错误时调⽤的函数。(回调函数)5.使用abort()

2017-04-20 17:49:11 310

原创 mm_struct

mm_struct      无论是内核线程还是用户进程,对于内核来说,无非都是task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process descriptor),因为它记录了这个进程所有的context。其中有一个被称为'内存描述符‘(memory descriptor)的数据结构mm_struct,抽象并描述了Linux视角下管理进程地

2017-04-20 14:29:38 1130

原创 task_struct

什么是进程?            内核观点:担当分配系统资源(CPU时间,内存)的实体。进程的两个基本元素是程序代码(可能被执⾏相同程序的其他进程共享)和代码相关联的数据集。进程是⼀种动态描述,但是并不代表所有的进程都在运行。(进程在内存中因策略或调度需求,会处于各种状态)⼴义上,所有的进程信息被放在⼀个叫做进程控制块的数据结构中,可以理解为进程属性的集合

2017-04-17 19:40:01 510

原创 浅析shared_ptr 和weak_ptr、定制删除器

shared_ptr的作用如同指针,但又比指针更加安全,甚至还能提供基本的线程安全保证。记录了有多少个shared_ptrs共同指向一个对象(即引用计数),它基本上解决了在使用c++开发过程中不可避免的使用指针而遇到的许多问题,例如:内存泄漏和内存的提前释放,还有由于指针内存申请而产生的异常问题等。shared_ptr指针解决了auto_ptr和一旦最后一个这样的指针被销毁,也就是一旦某个对象的引

2017-04-17 17:16:20 4366

原创 僵尸进程和孤儿进程

僵尸进程和孤儿进程  在Unix系统编程中,常常会碰到两个概念:僵死进程和孤儿进程    僵死进程 :在Unix进程模型中,进程是按照父进程产生子进程,子进程产生子子进程这样的方式创建出完成各项相互协作功能的进程的。当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。子进程虽然已经退出了,但是在系统进程表中还为它保留了一些退

2017-04-16 14:26:31 738

原创 进度条

源代码:#include #include int main(){ char buffer[52] = {'\0'}; char ch[] = {'|', '/', '-' }; printf("\033[46m"); fflush(stdout); printf("\033[0m"); int i = 0; while(i <= 50) { printf("\

2017-04-15 16:01:42 417

原创 atexit函数用法

atexit函数的用法首先先看一个实例:       根据上方例图就会发现:atexit函数先注册四个fun函数,然后等待2秒,再打印"this is fun(n)"(如果main函数中输出部分不加\n,则main函数要输出的内容会先放到标准输出缓冲区中,当main中调用exit函数的时候,会做一些自身清理工作,同时刷新标准输出缓冲区中的内容),当执行到exit(0)时

2017-04-15 15:18:09 827

原创 智能指针(auto_ptr scoped_ptr)

auto_ptr用法: 用法一: std::auto_ptrm_example(new ClassName ()); 用法二: std::auto_ptrm_example; m_example.reset(new ClassName()); 用法三(指针的赋值操作): std::aut

2017-04-12 22:01:23 400

原创 c++(模板类)实现顺序表

#pragma once#include #include #include using namespace std;templateclass SeqList{public: SeqList() :_a(NULL) ,_capacity(0) ,_size(0) {} SeqList(const SeqList& s) :_size(s._size)

2017-04-09 16:14:30 613

原创 模板实现链表队列

#pragma once#include #include using namespace std;templatestruct ListNode{ ListNode* _next; ListNode* _prev; T _data; ListNode(const T& x) :_data(x) ,_next(NULL) ,_prev(NULL) {}};

2017-04-09 10:41:41 340

空空如也

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

TA关注的人

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