自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 stty命令

stty命令修改终端命令行的相关设置。 语法 stty(选项)(参数)选项 -a:以容易阅读的方式打印当前的所有配置;        -g:以stty可读方式打印当前的所有配置。 参数 终端设置:指定终端命令行的设置选项。 实例 在命令行下,禁止输出大写的方法: stty iuclc #开启 stty -iuclc #恢复 在命令行下禁止输出小写: 

2017-10-08 21:24:44 1501

转载 什么是C/S结构,什么是B/S结构,两者的区别与联系

一、什么是C/S和B/S要想对“C/S”和“B/S”技术发展变化有所了解,首先必须搞清楚三个问题。第一、什么是C/S结构。C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式

2017-09-13 22:31:01 6764

转载 Shell脚本实现俄罗斯方块流程

一、方块的表示         由于shell不能定义二维数组,所以只能用一维数组表示方块,俄罗斯方块主要可以分为7类,每一类方块都是由四类小方块构成,表示方法如下。Box=(x1,y1,x2,y2,x3,y3,x4,y4,x,y)         xi、yi是各个小方块在俄罗斯方块表示区域中的坐标,最后的两个,x、y是在方块出现时,该表示区域相对于棋盘的坐标,7类方块的表示如下:

2017-09-06 16:36:56 908

转载 Shell脚本实现俄罗斯方块

#!/bin/bash#Pargram tetris game#History Walker 2015-07-27 version:firstAPP_NAME="${0##*[\\/]}"APP_VERSION="1.0"#颜色定义iSumColor=7 #颜色总数cRed=1 #红色cGreen=2cYellow=3cBlue=4cFuchSi

2017-09-06 16:18:57 851

转载 如何有效开展性能测试

一、性能测试类型  性能测试是一种广义上的说法,包括了以下各种不同的性能测试类型,每种测试类型都带着明确的测试目的。  1.性能测试(Performance Testing)  性能测试的方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产的性能要求。即在特定的运行条件下验证系统的能力状况。  主要强调在特定的软硬件环境、特定的测试业务场景下

2017-09-05 12:37:33 1131

转载 软件压力测试工具Webbench源码分析

网站压测工具Webbench源码分析原文链接:点击打开链接Webbench是一个在Linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能。Webbench使用C语言编写,下面是其下载链接:http://home.tiscali.cz/~cz210552/webbench.htmlWebb

2017-08-23 17:51:16 474

原创 Linux系统下的shutdown和reboot

在linux命令中reboot是重新启动,shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的。一、shutdown命令       shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。

2017-08-23 10:28:21 290

原创 虚函数在构造函数和析构函数中的应用

一、不要将构造函数定义为虚函数1、从存储空间角度每一个虚函数都对应一个vtable(虚函数表),这个vtable就是存储在对象的内存空间的,那么如果构造函数是虚的,就需要通过vtable来调用,可是对象还没有实例化,即内存空间还没有,无法找到vtable,所以构造函数不能是虚的。2、从对象类型角度构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的,是

2017-08-21 17:15:01 261

原创 容器中reserve()函数与resize()函数

一、基本概念        reverse()和resize()是用来给容器vector、list和string预留空间或调整他们的大小:reserve()用来保留(扩充)容量,他并不改变容器的有限元素个数;resize()则调整容器大小(size,有效元素的个数),而且有时候会增大容器的容量。        首先我们得搞清楚“容量”和“容器”以及“有效元素”的概念。        容

2017-08-17 14:32:09 2948

原创 模拟实现C库里的itoa()函数和atoi()函数

一、函数原型int atoi(const char *nptr);将字符串转换为整型值char* itoa(int value,char* str,int base);将整形转为字符串。这个函数有3个参数,第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转换数字时所用的技基数,比如10代表十进制,2代表二进制。两个函数都在C语言里的库函数里。二、模拟实

2017-08-09 10:58:20 502

原创 实现一个线程安全的单例模式

一、单例模式       单例模式也叫单件模式。Singleton是一个非常常用的设计模式,几乎所有稍微大一些的程序都会使用它,所以构建一个高效的Singleton很重要。1、单例类保证全局只有一个唯一实例对象2、单例类提供获取这个唯一实例的接口。        我们都能想到一个简单的单例模式该怎样实现:构造函数声明为private或protec防止被外部函数实例化,内部保存一个p

2017-08-02 22:28:09 6382

原创 memcpy函数实现

memcpy()函数原型:         void* memcpy(void* dest,const void* src,size_t count);        说到memcpy(),就得提一下memmove(),memcpy()和memve()都是进行n字节内存内容的拷贝,它们的参数列表和函数返回值都一样,可是这两个函数在内部实现是有区别的,主要是因为dest内存区域和src内存区

2017-08-02 16:13:29 889

原创 STL之Vector实现原理

Vector的基本知识        在C++中,我们使用信息隐藏技术和封装技术把数据隐藏在类内部不许外部直接操作,同时提供访问器(如get_xxx成员函数)和修改器(如set_xxx成员函数)。STL容器的设计原理如出一辙,只是它们在实现时考虑的问题更多,更加复杂而已。容器不仅把元素对象隐藏起来了,而且把元素对象的内存申请和释放操作也全部隐藏起来了(通过存储分配器),这就使程序员彻底摆脱了直

2017-08-01 23:24:31 8217 3

原创 TCP定时器

一、TCP的7种定时器1、建立连接定时器(connection-establishment timer)2、重传定时器(retransmission timer)3、延迟应答定时器(delayed ACK timer)4、坚持定时器(persist timer)5、保活定时器(keepalive timer)6、FIN_WAIT_2定时器(FIN_WAIT_2 timer)

2017-07-21 22:44:56 358

原创 TCP握手与挥手

一、为什么需要三次握手刚开始学习TCP三次握手的时候,搞不懂为什么要三次握手,两次为什么会有问题。但如果client发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间滞留着,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文后,就误认为是client再次发出的新的连接请求。于是就向client发出确认报文

2017-07-21 17:54:02 205

原创 判断元素出栈入栈顺序的合法性

思路:假设入栈序列{1,2,3,4,5},出栈序列{4,5,3,2,1};首先我们将入栈序列的第一个元素入栈,这是设置一个指针只想出栈序列的第一个元素,如果出入栈以后,栈顶元素和出栈指针所指向的元素相等,那么就让栈顶元素出栈,让指针++,最后判断栈为空就好,若为空,就说明是合法的,如果不是就是不合法。     代码如下:#include#include#includeusing

2017-07-21 15:55:49 562

原创 Shell实现数字互换和字母大小写互换

文件内容如下:123abc456456def123567adc789789def567要求输出:456ABC123123DEF456789ADC567567DEF789实现代码如下: #!/bin/bash while read line do part1=`echo $line | cut -c 1-3` part2

2017-07-15 19:30:11 1580

原创 Shell实现菲波那切数列

菲波那切数列大家一定也不陌生,我在这也就不多做解释了,下面我用三种方式实现菲波那切数列:1、递归方式: 28 if [ $# -ne 1 ];then 29 exit 1 30 fi 31 function fib() 32 { 33 local num=$1 34 [ $num -le 2 ] && 35 { 36 echo

2017-07-15 19:26:49 833

原创 Shell实现求最大值、最小值和平均数

实现代码如下: 1 #!/bin/bash 2 3 proc=`basename $0` 4 usage() 5 { 6 printf "usage: %s data1 ,,, datan\n" "proc" 7 } 8 if [ $# -lt 3 ];then 9 usage 10 exit 1 11 fi 12 13 max

2017-07-15 19:10:21 10084

原创 命令代换‘’和$()和eval命令

一、基本概念         由反引号括起来的也是一条命令,Shell先执行该命令,然后将输出结果立即带环岛当前命令行中。$DATE='data'$echo $DATA例如定义一个变量存放data命令的输出命令代换也可以用$()表示:DATA=$(data)测试代码: #!/bin/bash 2 3 DATE1=`date1` 4 DATE2=(date2

2017-07-14 21:18:19 389

原创 Linux下的shell进度条

一、关于ShellShell的作用是解释执行用户的命令,它有两种执行命令的方式:交互式和批处理。Shell脚本和编程语言很相似,也有变量和流控制语句,但Shell脚本是解释执行,不需要编译,Shell程序从脚本中逐行读取并执行命令,相当于一个用户把脚本中的命令逐行敲到Shell提示符下执行。二、进度条1、概念进度条即计算机在处理文件时,实时的,以图片方式显示处理的速度,完成度。

2017-07-14 20:22:55 604

原创 TCP协议字段中的URG和PSH

一、基本概念        URG紧急指针,当URG=1时,表明分段中有紧急数据应当加速传送。URG=0时,紧急指针没有意义。        PSH紧急位,当PSH=1时,要求发送方马上发送该分段,而接收方尽快将报文交给应用层,不做队列处理。二、两者区别:        URG=1,表示紧急指针指向包内数据段的某个字节(数据从第一个到指针所指字节就是紧急数据),不进入接收缓存(一般

2017-07-08 20:01:44 667

原创 Linux下的crond和crontab

一、基本概念1、crondcrond的概念和crontab是不可分割的。crond是一个命令,常见于Linux/Unix系统之中,用于设置周期性被执行的命令。crontab命令常用于从标准输入设备中读取指令,并将其存放于“crontab”文件中,方便今后的读取和查询。crond则正是crontab的守护进程。二、功能crontab在一定的时间间隔调度一些命令执行。cro

2017-07-02 13:19:32 232

原创 网络端口分类

一、网络端口        在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口等等;二是逻辑意义上的端口,一般指TCP/IP协议中的端口,端口号的范围从0到65535,比如,用于浏览器网页服务的80端口,用于FTP服务的21端口等等。二、端口分类(1)公认端口:从0到10

2017-07-01 12:14:04 351

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

一、NAT技术1、基本概念         NAT(Network Address Translation)网络地址转换,当在专用网内部的一些主机本来已经分配到了本地的IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,他至少有一

2017-07-01 12:05:57 265

原创 CRC校验

一、什么是CRC校验       CRC即循环荣誉校验码(Cyclic Redundancy Check):是数据通讯领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC的基本原理:       在K位信息码后拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G

2017-07-01 11:46:09 330

原创 子进程的异步等待方式

我们知道可以用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作的同时还要记得时不时地轮询一下,程序实现复杂。

2017-06-28 20:19:34 223

原创 守护进程

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

2017-06-28 19:20:56 196

原创 生产者消费者模型

生产者消费者模型:                两个进程共享一个缓冲区,一个进程称为生产者,它向缓冲区里放数据,另一个进程称为消费者,他向缓冲区里取数据,当生产者向缓冲区里放数据是就必须进入挂起状态,知道消费者从缓冲区中取走数据后生产者才能继续向缓冲区里放数据,同样当缓冲区中没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能唤醒继续从缓冲区中取数

2017-06-15 17:44:27 383

原创 使用gdb调试多进程多线程程序

一、gdb基础知识1、gdb是Linux环境下的一种调试工具,使用时在源程序生成是加上-g选项。2、开始使用:gdb binFile;退出使用:cttl+d或quit。3、调试过程中常用的命令有:(1)list命令         list linenum                       显示程序第linenum行周围的程序         list funct

2017-06-11 19:47:47 296

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

一、什么是线程安全     一个函数被称为线程安全,当且仅当它被多个并发的进程反复调用时,它会一直产生正确的结果。反之,如果一个函数不是线程安全的,我们就称它是不安全的。     线程安全主要是针对数据竞争来说的,就是说,如果数据不需要共享,那就让每个数据私有,如果需要共享,就得加锁

2017-06-09 22:04:57 159

原创 进程通信之管道

在谈管道之前我们先了解一下什么是进程间通信。        每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所示

2017-05-19 18:06:10 194

原创 二叉树

在介绍二叉树之前大家一定要对树有一定的了解,二叉树是一种特殊的树结构,二叉树每个节点最多有两个孩子节点,分别为左孩子和右孩子。  *满二叉树:高度为N的满二叉树有2^n-1个节点的二叉树。  *完全二叉树:若设二叉树的深度为h,除第h层外,其他各层(1~h-1)的节点数都达到最大个数,第h层所有的节点都连续集中在最左边,这就是完全二叉树。*链表存储表示        根据二叉树定义

2017-05-07 13:43:31 187

原创 栈&队列&栈帧&递归

*栈的定义——Stack栈是只允许在末端进行插入和删除的线性表,栈具有后进先出的特征(LIFO,Last In First Out).         *栈的应用栈很大意义上模拟了压栈,实现了递归转非递归。还有算术表达式求值,波兰表达式(后缀表达式),迷宫问题等。   *队列的定义队列值允许在表的队尾进行插入,在表对头进行删除。队列具有先进先出的特性(FIFO,First

2017-05-07 11:47:49 436

原创 C++中的对象模型

多态,即度“多种形态“。C++中虚函数的主要作用就是实现多态。简单地说

2017-05-07 11:27:39 167

原创 Linux中文件指针和文件描述符的区

文件描述符       在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,其实就是文件数组下标,文件描述符是系统调用层次上的,每个表项都有一个指向已打开文件的指针。文件指针       C语言中使用的是文件指针而不是文件描述符做为I/O的句柄。文件指针指向

2017-05-05 20:12:30 299

原创 Linux中exit()函数和atexit函数

main函数当内核使用一个exec函数执行C程序时,在调用main函数之前先调用一个特殊的启动例程,可执行程序将此例程指定为起始地址。启动例程从内核获取命令行参数和环境变量,然后为调用main函数做好准备。进程终止进程终止的方式有8种,前5种为正常终止,后3种为异常终止:1.从main函数返回;2.调用exit函数;3.调用_exit或_Exit;4.最后一个线程从启动

2017-04-23 14:03:16 522

原创 Linux进程描述

广义上,所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。进程控制块每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是tack_struct.结构体。下面我们将全面了解一下其中都有那些信息。在Linux中,这个结构叫做task_struct.task_struct是Linux内核的一种数据结构,他会被装载到PA

2017-04-22 19:45:04 330

原创 C++异常

对于每位编程人员来说,程序的编译或运行错误是很常见的,今天我在这里粗略的总结一下C++中的异常1、错误处理技术:传统的错误处理办法:(1)终止程序(如段错误等)(2)返回错误码(3)返回和法值,让程序出于某种非法的状态。(太坑了)(4)调用一个预先设置的出现错误是调用的函数。——回调函数2、异常的处理当一个函数发现自己无法处理的错误是抛出异常,让函数的调用者直接或间

2017-04-19 13:45:55 232

原创 浅析智能指针

1、什么是智能指针所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。2、为什么需要智能指针代码中经常会忘记释放动态开辟的资源,这样就不知不觉的造成内存泄漏3、什么是RAII技术       RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源的简单计数。它定义了一个类来封装资源的分配和释放,在构

2017-04-16 13:42:55 221

空空如也

空空如也

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

TA关注的人

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