自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QT实现简单计算器

一、模块图二、核心算法 —– 中缀表达式转化为后缀表达式1、将中缀表达式转换为后缀表达式的算法思想: 1)计算机实现转换: ·开始扫描; ·数字时,加入后缀表达式; ·运算符: a. 若为 ‘(‘,入栈; b. 若为 ‘)’,则依次把栈中的的运算符加入后缀表达式中,直到出现’(‘,从栈中删除’(’ ; c. 若为 除括号外的其他运算符, 当其优先级高于除’(‘以外的栈

2018-01-29 10:22:50 14509 3

原创 智能指针再解剖

智能指针模拟实现: http://blog.csdn.net/snow_5288/article/details/53262810在以上文章中,我们对库里的某些智能指针进行了模拟实现,今天就来学习解剖一下库里的智能指针的实现和使用。一、总括对于编译器来说,智能指针实际上是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智能指针通过析构函数释放有它管理的堆内存。 接口: - - 所有智能指针都

2017-09-21 13:07:45 791

原创 Web bench源码剖析

一、Web bench是什么?首先提一个概念—-压力测试。 在运维工作中,压力测试是一项很重要的工作。比如在一个网站上线之前,能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验。但是,在压力测试中存在一个共性,那就是压力测试的结果与实际负载结果不会完全相同,就算压力测试工作做的再好,也不能保证100%和线上性能指标相同。面对这些问题,我们只能尽量去想方设法去模拟

2017-09-11 22:10:01 1590

原创 C/C++容易混淆的小知识点

1、函数传指针和传引用的区别? 1>指针定义时可以不初始化,但引用不行; 2>引用只能和一个实体结合,而指针可和多个实体结合; 3>自加减意义不同。指针的++表示指针向后偏移类型个字节,而引用则是+1,–类似; 4>sizeof求值的意义不同。Sizeof(指针)是指针所占的字节数,32位平台下为4,64位平台下为8(数组名除外),sizeof(引用)是指引用所指实体类型的大小; 5>没有

2017-08-12 19:27:57 2804 4

原创 快速排序的三种实现及两种优化

一、快速排序的概念快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、快排的三种实现方式实现方式一:左右指针法 算法思想:

2017-08-05 20:52:05 6845

原创 单例模式详解

一、什么是单例模式1、定义 官方定义是这样的,单例模式是一种常用的软件设计模式,也叫单件模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。通俗点来说,就是一个类只允许实例化一个对象。2、动机 对于系统中的某些类来说,只

2017-07-31 01:33:13 1638

原创 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字(for、while、if、else、switch、case)。

解法1:利用递归(&&的短路特性)&&的短路特性:即A&&B中,加入A为假,那么B就不会被运算,因此我们只要将递归放在B中,而将终止条件放在A中即可解决该问题。。。 1 /************************************** 2 *文件说明:recursion.cpp 3 *作者:段晓雪 4 *创建时间:2017年07月15日 星期六 09时54分25秒 5

2017-07-15 13:59:12 1832 14

原创 网络基础(一)

一、网络分层1、OSI网络分层 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类

2017-07-07 15:04:40 975

原创 循环冗余校验(CRC校验)

一、循环冗余校验的作用在网络传输过程中,我们可能会遇到或多或少的差错,所谓差错,是指接收端收到的数据和发送端实际发送的数据出现不一致的现象,凡是出现差错的地方,我们都应对其进行差错控制。差错控制的作用与机制: 差错控制是采用可靠、有效的编码以减少或消除计算机通信系统中传输差错的方法,其目的在于提高传输质量。主要作用是通过发现数据传输过程中的错误,采取相应的措施减少数据传输错误。差错控制的核心是对传

2017-06-19 20:02:43 8275 3

原创 端口

一、端口是什么“端口”是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。二、端口的基本术语1、硬件端口 CPU通过接口寄存器或

2017-06-19 18:19:08 1385 4

原创 Linux下的系统编程总结

1、基本指令,5个背景知识(OS,环境变量,文件类型,shell运行原理,文件权限) linux常见指令以及权限理解 Linux下的权限管理与相关时间概念 Linux下的find指令 Linux下的黏滞位(Sticky bit)2、开发环境(vim、gcc,g++,gdb,ctags,make,makefile) Linux环境搭建(vim,makefile,gdb…)3、进程1—–进程的

2017-06-18 15:40:29 1413 1

原创 Linux下的终端和作业控制

一、进程间的关系进程间的三种关系:进程组、作业和会话。 1、进程组 每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程(该组进程的第一个,组成员ID等于组长ID)。组长进程的标识是,其进程组ID等于其进程ID。组长进程可以创建一个进程组,创建该

2017-06-18 15:21:35 2449 1

原创 Linux下的守护进程

一、什么是守护进程1、守护进程的引入 在现实生活中, 许多大型的软件或服务器必须保证7*24小时(一周7天,一天24小时)无障碍的运行,例如淘宝网、百度搜索引擎、支付宝等等,那么像这样一种要一直运行的程序怎么实现呢?究其本质其实就是我们的守护进程。2、守护进程的定义 守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事

2017-06-18 11:06:56 8987

原创 Linux下的进程概论与编程三(进程间通信的5种方式)

Linux下的进程概论与编程一(进程概念与编程)Linux下的进程概论与编程二(进程控制)一、进程间通信1、IPC—-InterProcess Communication 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称

2017-06-15 22:37:36 4698

原创 Linux下的进程概论与编程二(进程控制)

Linux下的进程概论与编程一(进程概念与编程)一、进程标识符1、每个进程都有非负的整形表示唯一的进程ID。 几个典型进程的ID及其功能: 2、除了进程ID,每个进程还有一些其他的标识符。 下列函数返回这些标识符:#include <sys/types.h>#include <unistd.h>pid_t getpid(void); //返回值:调用进程的进程IDpid_t getppi

2017-06-14 21:06:10 698

原创 Linux下的进程概论与编程一(进程概念与编程)

一、典型的Linux结构最简单也是最复杂的操作: 二、进程的概念1、进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。OS: 程序的一个执行实例。

2017-06-14 18:04:02 925

原创 Linux下的多线程编程二(线程的同步与互斥)

一、什么叫做线程的同步与互斥?为什么需要同步与互斥?二、互斥量三、条件变量四、信号量五、读写锁

2017-06-14 14:53:47 4465

原创 Linux下的多线程编程一(系统编程)

一,线程的基本概念 1,线程的定义: 线程也被称为轻量进程(LWP)计算机科学术语,指运行中的程序的调度单位。线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。 在多中央处理器的系统里,不

2017-06-11 21:30:29 8141

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

一,基础知识1,进程的各种状态 S:浅度睡眠,可以中断,可以杀死,暂停,修改等; D:深度睡眠,不可中断,永远不可变;2,僵死状态(Zombies)一个比较特殊的状态。 指子进程结束运行(exit(0))后,系统将会保留子进程的描述符信息(没有被回收,其他进程不可以重用该描述符),当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终

2017-06-11 11:45:02 1105

原创 gdb调试多进程与多线程

一,gdb的基础知识1>介绍: gdb是Linux环境下的代码调试工具。 2>使用:需要在源代码生成的时候加上 -g 选项. 3>开始使用: gdb binFile 4>退出:ctrl + d 或 quit 5>调试过程中的常用命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。 r或run:

2017-06-10 16:32:25 24658 10

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

一,什么是线程安全?1,线程安全就是说多线程访问同一代码,不会产生不确定的结果。换句话说,线程安全就是多线程访问时,采用加锁机制,当一个线程访问该类的某个数据时,用锁对数据进行保护,其他线程不能访问该数据直到该线程读取完,其他线程才可使用,线程安全不会出现数据不一致或者数据污染。反之, 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。2,举个例子: 比如说

2017-06-09 20:20:48 1457

原创 Linux下的信号(三)----捕捉信号与sleep模拟

Linux下的信号(一):信号的基本概念与产生 Linux下的信号(二):阻塞信号一,什么是捕捉信号?1,捕捉信号:信号处理方式三种方式中的一种,意思是既不忽略该信号,又不执行信号默认的动作,而是让信号执行自定义动作。捕捉信号要使用signal函数,为了做到这一点要通知内核在某种信号发生时,调用一个用户函数handler。在用户函数中,可执行用户希望对这种事件进行的处理。注意,不能捕捉SIGKIL

2017-06-09 19:34:34 1168

原创 Linux下的信号(二)----阻塞信号

一,信号在内核中的表示1,在此之前,必须先了解几个概念: 信号递达(Delivery):实际执行信号处理的动作。 信号未决(Pending):信号从产生到递达之间的状态。 信号阻塞(Block):被阻塞的信号产生时将保持在未决状态,直到 进程解除对此信号的阻塞,才 执行递达的动作。注意:信号阻塞和信号忽略是不同的。只要信号被阻塞就不会递达,除非解除阻塞,而忽略是在递达之后 可选的一种处

2017-06-05 00:11:20 1707

原创 Linux下的信号(一)----信号的基本概念与产生

一,信号的基本概念1,什么是信号? 日常生活中,当我们走到马路上时,看到的绿灯是一种信号,它能提示我们怎样安全的过马路。又比如,新学期开始学校给每个班发的课表也是一种信号,它能提示同学们在适当的时间地点去上相应的课程而不是虚度光阴……生活中其实我们忽略了很多信号,正是由于这些信号的存在,才使得我们的生活方便而有序。 总结一下你会发现信号是什么,信号就是当你看到它是知道

2017-06-04 18:24:37 1857 4

原创 死锁概述与总结

一、死锁的引入顾名思义,死锁死锁肯定与锁有关,我们知道引入锁又是为了解决多进程或多线程之间的同步与互斥问题,那么到底怎样的情形才会产生死锁呢? 典型的两种死锁情形: (一)线程自己将自己锁住 一般情况下,如果同一个线程先后两次调用lock,在第二次调⽤用时,由于锁已经被占用,该线程会挂起等待占用锁的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁,因此 就永远处于挂起等待状

2017-05-30 13:34:14 6386 1

原创 生产者消费者模型

一、概念引入日常生活中,每当我们缺少某些生活用品时,我们都会去超市进行购买,那么,你有没有想过,你是以什么身份去的超市呢?相信大部分人都会说自己是消费者,确实如此,那么既然我们是消费者,又是谁替我们生产各种各样的商品呢?当然是超市的各大供货商,自然而然地也就成了我们的生产者。如此一来,生产者有了,消费者也有了,那么将二者联系起来的超市又该作何理解呢?诚然,它本身是作为一座交易场所而诞生。将上述场景例

2017-05-28 21:02:50 9027

原创 Linux环境搭建(vim,makefile,gdb...)

1、vim(编辑器)的使用 vim是vi的升级版本,二者都是多模式编辑器,vim兼容了vi的所有指令,同时还增加了一些新的特性在里面。 vi的三种基本模式:(vi有很多种模式,目前仅需掌握这三种) 1》命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入其他两种模式的中间模式。 2》插入模式:进行文字的输入,按【ESC】回到命令模式。 3》底行模式:将文件保存或退出vim

2017-05-22 15:44:09 1981

原创 linux常见指令以及权限理解

1、计算机的五大单元: 输入单元:包括键盘,鼠标,扫描仪,手写板等。 中央处理器(CPU):含有算术逻辑,控制,记忆等单元。 输出单元:显示器,打印机。 注意:存储器☞内存,CPU只能与内存打交道2、环境变量的概念 PATH指定命令的搜索路径 HOME:指定用户的主工作目录 LOGNAME:☞当前用户的登录名 SHELL:☞当前用户用的哪种shell修改和查看环境变量的命令:

2017-05-18 13:56:43 1702

原创 Linux下的文件描述符与文件指针

文件描述符通常说,在Linux系统中一切皆文件。当然,设备也不例外,如果要对某个设备进行操作,就不得不打开此设备文件,打开文件就会获得该文件的文件描述符fd(file discriptor),它是一个很小的整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。 图中,文件描述符即为文件描述

2017-05-07 13:30:01 1303 1

原创 二叉树的经典面试题总结

1、二叉树的构造 2、遍历二叉树 3、求二叉树的高度(深度) 4、求二叉树中节点的个数 5、求二叉树中叶子节点的个数 6、求二叉树第K层的节点个数7、判断一个节点是否在二叉树中 8、求两个节点的最近公共祖先9、判断一棵二叉树是否是平衡二叉树10、求二叉树中最远的两个节点的距离 11、由前序遍历和中序遍历重建二叉树12、判断一棵树是否是完全二叉树13、求二叉树的镜像14、二叉搜索树->有序双链表

2017-05-04 16:20:45 9098 1

原创 栈和队列的常见面试题

1、两个队列实现一个栈 两个队列实现一个栈2、两个栈实现一个队列 【算法思想】 1>设计类 成员变量:给两个栈s1和s2来模拟实现一个队列 成员函数:入队Push()和出队Pop() 2>给两个指向栈对象s1、s2的指针input和output,分别用来入队和出队 3>按照先进先出的方式模拟入队和出队操作 Push:将input指向不空的栈,然后在input中入队 Pop:将inp

2017-05-04 14:06:43 3793

原创 大数运算(加减乘除)

大数运算的实现方法主要有以下几种: 1) 用字符串表示大数。将大数用十进制字符数组表示,然后按照“竖式计算”的思想进行计算。这种方法比较容易理解,但是计算效率比较低。 2) 将大数看成二进制流进行处理。使用各种位运算和逻辑操作来实现打算的运算。该方法设计复杂,可读性较差,而且难以调试。 3) 将大数表示成一个n进制数组。n的取值越大,数组的大小越小,这

2017-05-02 14:38:48 23427 3

原创 简易内存池

【内存池的引入】 一般的,我们要动态申请内存时,都会调用malloc或new,由于需要申请的内存大小可能预先不知道,所以有时文门会频繁的调用malloc或new,这就大大降低了程序的运行速率,同时还有可能引进内碎片问题。基于上述原因,引入了内存池的概念。 【什么是内存池】 内存池是一种内存分配方式。通俗一点说,内存池就是存放内存的池子。它可以不有效的减少内存碎

2017-04-17 21:21:21 785

原创 C语言模拟实现C++的继承与多态

一、面向过程编程与面向对象编程的区别 众所周知,C语言是一种典型的面向过程编程语言,而C++确实在它的基础上改进的一款面向对象编程语言,那么,面向过程与面向对象到底有什么样的区别呢?【从设计方法角度看】 面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来。 面向对象程序设计方法是将数据和对象的操作封装在一起,作为一个整体来处理。【从维护角

2017-04-16 21:28:27 4559

原创 Linux下的进程描述

进程: OS:程序的一个执行实例。 正在执重点内容行的程序。 能分配处理器并由处理器执行的实体。 内核观点:担当分配系统资源(CPU时间,内存)的实体。 进程的两个基本元素是程序代码(可能被执行相同程序的其他进程共享)和代码相关联的数据集。进程是一种动态描述,但是并不代表所有的进程都在运⾏行。(进程在内存中因策略或调度需求,会处于各种状态)进程控制块(PCB

2017-04-13 18:05:18 904

原创 求两个节点的最近公共祖先多种解法&&判断一个节点是否在二叉树中

#pragma once#include <iostream>#include <cassert>#include <stack>#include <vector>using namespace std;template <typename T>struct TreeNode{ T _data; //节点的数据 TreeNode<T>* _l

2017-04-12 19:26:46 828

原创 二维数组中查找数据(该数组每行从左至右递增,每列从上至下递增)

/*二维数组中查找(该数组每行从左至右递增,每列从上至下递增)*/#pragma once#include using namespace std;const int ROW = 4;const int COL = 4;bool Find(int a[ROW][COL],int key){ if (a && COL>0 && ROW>0) { int col = COL-1

2017-04-12 19:12:45 895

原创 数据结构之用两个队列实现一个栈

一、了解栈和队列的基本结构1、栈定义:栈是一种只能在一端进行插入或删除操作的线性表。允许插入和删除的一端被称为栈顶(动态变化),另一端被称为栈底(固定不变),栈的插入和删除被分别称作入栈和出栈。特点:先进后出(FILO)。存储结构:顺序栈和链式栈。2、队列定义:队列为一种只允许在表的一端进行插入,在一端进行删除的受限制的线性表。允许插入的一端叫做队尾,允许删

2017-04-10 11:33:06 1074

原创 【面试题一】:string类的深浅拷贝

#pragma once#include using namespace std;//浅拷贝(析构对象时会出错)class CMyString{public: //构造函数 CMyString(char* pData = "") :m_pData(new char[strlen(pData)+1]) { if (*pData) { strcpy(m_pData

2017-04-06 22:38:34 434

原创 Linux下的黏滞位(Sticky bit)

1、什么是黏滞位?为什么需要黏滞位?        一般的,在Linux系统中用户只要对某个目录具备w写入权限,便可以删除该目录中的任何文件,而不论这个文件的权限是什么。比如我们进行一下操作:1>创建/test目录,并赋予777权限。2>以root用户的身份在/test目录中创建文件file1,并查看其默认权限。3>以普通用户snow

2017-03-27 20:30:58 1012

Effective C++第三版及详细笔记

内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。

2018-10-16

空空如也

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

TA关注的人

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