自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 软件测试常见面试题

1、软件测试的定义  ·  软件测试是为了发现错误而执行程序的过程。    ·  一个好的测试能够在第一时间发现程序中存在的错误。    ·  一个好的测试是发现了至今尚未发现的错误的测试。2、软件缺陷的定义         软件缺陷(bug),即计算机系统或者程序中存在的任何一种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷、瑕疵。缺陷会导致软件产品在某种程度上不能满足

2016-08-15 13:50:46 797

原创 STL迭代器(iterator)

迭代器定义迭代器(iterator):扮演容器与算法之间的胶合剂,是所谓的“泛型指针”。共有5种类型迭代器模式:提供一种方法,使之能够依序寻访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表达方式。STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶着剂(iterator)将它们撮合在一起。STL的迭代器是一个可遍历STL容器全部或者部分数据。

2016-07-15 20:45:41 2794

原创 STL空间配置器

一、STL为什么需要空间配置器?(内存有关) 1、解决内存碎片(外碎片) 外碎片:堆区域频繁分配小块内存导致内存不连续,分配不出大块内存。  空间配置器解决外碎片,引入内碎片 内碎片:比如需要5个字节,向上对齐取整new了8个字节,那么这3个未使用的为内碎片。 比如list、map、set、hashtable等push(new)或pop(delete)操作都有小空间。

2016-07-14 23:35:19 622

原创 进程和线程区别

1、定义进程定义:OS:程序的一个执行实例。         正在执行的程序。         能分配处理器并由处理器执行的实体。内核观点:担当分配系统资源(CPU时间,内存)的实体。概括说,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程定义:线程是进程的一个实体,是CPU调度和分派的基本单位,它

2016-07-10 21:30:24 494

原创 二叉树详解及二叉树的前序、中序、后序遍历(递归和非递归)

介绍二叉树之前先介绍一下树相关的概念。树的定义:树是n(n>=0)个有限个数据的元素集合,形状像一颗倒过来的树。 树的概念:节点:结点包含数据和指向其它节点的指针。根节点:树第一个结点称为根节点。结点的度:结点拥有的子节点个数。叶节点:没有子节点的节点(度为0)。父子节点:一个节点father指向另一个节点child,则child为孩子节点,father为父

2016-07-09 20:27:50 1891

原创 红黑树

红黑树介绍: 红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。红黑树和AVL树的区别在于它使用颜色来标识结点的高度

2016-07-08 22:52:22 663

原创 AVL树详解

AVL树定义:AVL树又称为高度平衡的二叉搜索树。它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。AVL树性质:左子树和右子树的高度之差的绝对值不超过1树中的每个左子树和右子树都是AVL树每个节点都有一个平衡因子(balance factor--bf),任一节点的平衡因子是-1,0,1。(每个节点的平衡因子等于右子树的高度减去左子树的高度 )   AV

2016-07-08 20:28:27 13792 5

原创 100w个数中找出最大的前K个数

100w个数中找出最大的前K个数这个题是堆应用。首先100万个数大约占4M内存,可以加载到内存中。我们可以采用排序解决这个问题,比如堆排序、快排等,但排序不是最优解。我们可以利用最小堆来解决这个问题。堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储是最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩子节点。思路:1、开辟大小为k的空

2016-06-21 23:30:31 1411 1

原创 调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于该数组的前半部分,所有偶数位于该数组的后半部分。思路:1、定义两个指针,第一个指针指向数组的第一个数字,第二个指针指向数组的最后一个数字,第一个指针位于第二个指针前面           2、第一个指针向后移动找偶数,第二个指针向前移动找奇数,找到后交换两个指针指向的数字           3、重复第2步,

2016-06-18 14:22:04 344

原创 打印1到最大的n位数

题目:输入数字n,按顺序打印出从1到最大的n位十进制数。例如,输入3,打印1、2、3......999。首先我们要考虑大数问题,接下来我们可以用字符串解决大数问题。解法一:在字符串上模拟数字加法思路:1、因为数字最大是n位,所以new一个长度为n+1的字符串,字符串最后一位是'\0'。数字不够n位,在字符串前面补0。           2、把字符串中的每一个数字都初始化为'0',

2016-06-17 22:06:47 311

原创 数值的整数次方

题目:实现函数double Power(double base,int exponent),求base的exponent次方,不得使用库函数,同时不考虑大数问题。思路:例如,我们要求一个数的16次方,可以先求这个数的平方,然后在平方的基础上再求这个数的4次方,在4次方的基础上求8次方,在8次方的基础上求16次方。           我们可以用如下公式求a的n次方#include

2016-06-17 13:07:36 626

原创 斐波那契数列

斐波那契数列的定义如下:我们可以通过递归和非递归实现。递归实现代码如下:#includeint Fibonacci(unsigned int n){ if (n <= 0) { return 0; } else if (n == 1|| n == 2) { return 1; } else { return Fibonacci(n-1) + Fib

2016-06-16 23:48:52 522

原创 旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们成为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转。旋转数组可以分为两个排序的子数组,前面子数组的元素都大于或者等于后面子数组的元素。最小的子数组刚好是这两个子数组的分界线。可以用二分查找实现排序数组的查找。思路:1、定义两个指针,一个指向数组的第

2016-06-15 22:14:26 660

原创 用两个栈实现一个队列

栈的定义--Stack栈只允许在末端进行插入和删除的线性表。栈具有后进先出的特性(LIFO,Last In First Out)。 队列的定义--Queue队列值允许在表的队尾进行插入,在表对头进行删除。队列具有先进先出的特性(FIFO,first In First Out)。思路:1、栈_s1为空时,给_s1依次插入a、b、c。           2、把_s1中的元素逐

2016-06-15 14:16:19 396

原创 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。

假设输入的前序遍历和中序遍历的结果中都不含有重复的数字。 例如,前序遍历序列:{1,2,4,5,6},中序遍历序列:{3,2,4,1,6,5}在二叉树的前序遍历序列中,第一个数字总是根节点的值。在中序遍历序列中,根节点的值在中间,左子树的值在根节点值的左边,右子树的值在根节点的值的右边。#includeusing namespace std;templatestruct Bin

2016-06-14 14:43:19 2709

原创 输入一个链表的头结点,从尾到头反过来打印出每个节点的值

可以通过递归或非递归实现从尾到头打印链表。非递归采用栈来实现,因为栈是“先进后出”,每遍历一个节点的时候,把该节点压入栈中,当遍历完整个链表后,再从栈顶逐个输出节点的值,即出栈。这样输出的节点的顺序已经反过来了。void PrintfTailToHead() { stack* > nodes; ListNode* head = _head; //遍历每一个节点 入栈 wh

2016-06-12 22:13:53 2171

原创 请实现一个函数,把字符串中的每个空格替换成“20%”。

思路:我们从字符串的末尾开始复制和替换。          1、定义两个指针,p1和p2。p1指向原始字符串的末尾,p2指向替换后字符串的末尾。          2、向前移动指针p1,逐个把它指向的字符复制到p2指向的位置,直到碰到第一个空格为止。碰到第一个空格后,p1向前移动一格,然后在p2之前插入字符串“20%”。同时也要把p2向前移动3格。          3、重复第2步,直

2016-06-12 19:57:24 3909

原创 二维数组中的查找

题目:在一个二维数组中,每一行都按从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行、每列都递增的数组。如果在这个数组中查找数字7,则返回true;如果在这个数组中查找数字13,则返回false。思路:1、选取数组右上角的数字4。由于9大于7,并且9是第4列第一个数字#i

2016-06-12 15:57:41 298

原创 实现memcpy、memcpy的优化、memmove、memset、strcpy、strncpy

memcpy函数原型:函数功能:memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。函数返回值指向dest的指针。不考虑内存重叠#include#include#includevoid* Memcpy(void* dst, const void* src, size_t size){ assert(dst);

2016-06-08 23:34:00 1602 1

原创 sed的模式空间和保持空间

sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“保持空间(hold space)这2个空间的使用。sed在正常情况下,将处理的行读入模式空间,脚本中的“sed command(sed命令)”就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式被清空;接着,在重复执行刚才的动作,文件中的

2016-06-06 17:15:07 7185

原创 实现二叉搜索树--查找、插入、删除

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。左子树上所有节点的关键码(key)都小于根节点的关键码(key)。右子树上所有节点的关键码(key)都大于根节点的关键码(key)。左右子树都是二叉搜索树。下图就是一棵二叉搜索树

2016-06-04 22:39:29 753

原创 shell脚本---grep、awk、sed工具

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep是一种查找过滤工具,正则表达式在grep中用来查找符合模式的字符串。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示 一个模式,这就是正则表达式(Regular Expression)。格式grep [options]主要参数[o

2016-05-28 19:59:34 6156

原创 shell脚本--语法

条件测试:test/[命令test/[ 可以测试一个条件是否成立,如果测试条件为真,则该命令的ExitStatus为0,反之,ExitStatus为1。注意:命令[ 各参数之间应该用空格隔开,以]结尾。但是 ] 不是命令。测试命令:[ -d dir ] :如果dir存在并且是一个目录则为真[ -f file ]:如果file存在并且是一个普通文件则为真[ -z stri

2016-05-12 11:17:47 547

原创 各种排序算法(冒泡、选择、快排、插入、希尔、堆排、归并、计数、基数)

各种排序算法

2016-05-07 22:42:55 7648 1

原创 I/O多路复用---select、poll、epoll

select,poll,epoll都是I/O多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。select:系统提供select函数来实现多路复⽤用输⼊入/输出模型。select系统调⽤用是⽤用来让我们的程序监视多个⽂文件句柄的状态变化的。程序会停在select这⾥里等待,直到被监视的⽂文件句柄有一个

2016-04-29 19:30:05 406

原创 C++实现栈

栈只允许在末端进行插入和删除的线性表。栈具有后进先出的特性(LIFO,Last In First Out)。#pragma once#includetemplateclass Stack{public: Stack() :_array(NULL) , _capicity(0) , _topIndex(-1) {} ~Stack() { delete[]_arra

2016-04-26 21:23:53 379

原创 C++ String写时拷贝(Copy On Write)

Copy On Write(写时拷贝)使用了“引用计数”,开辟空间时会多开4个字节用于保存引用计数的值。当第一个对象构造时,string的构造函数会根据传入的参数从堆上分配内存,当有其它对象需要这块内存时,这个计数为自动累加,当有对象析构时,引用计数会减一,直到最后一个对象析构,此时的引用计数为0,此时,程序才会真正的Free这块从堆上分配的内存。引用计数就是string类中写时拷贝的原理!#

2016-04-18 20:50:07 2371 1

原创 String深拷贝+String增删改查

#include#include#includeusing namespace std;#define DEFAULT_CAPACITY 5class String{public: String() :_str(new char[DEFAULT_CAPACITY]) ,_size(0) ,_capacity(DEFAULT_CAPACITY) { _str[0]

2016-04-17 10:22:37 315

原创 注释转换

《注释转换》 项目简介:将所有以C语言格式的注释转换成C++注释格式 开发环境:VS2013、 Windows 所用技术:文件指针、枚举、结构体指针 项目特点:     ● C语言注释格式/**/转换为C++注释//     ● 利用文件指针打开文件并读写文件,input、output导入导出文件     ● 定义七个环境(一般情况、换行转换、多行注释、连续注释、匹配问

2016-04-16 15:24:27 318

原创 String浅拷贝---引用计数

当类里面有指针对象时,进行简单赋值的浅拷贝,两个对象指向同一块内存,存在崩溃的问题!为了解决这个问题,我们可以采用引用计数。在引用计数中,每一个对象负责维护对象所有引用的计数值。当一个新的引用指向对象时,引用计数器就递增,当去掉一个引用时,引用计数就递减。当引用计数到零时,该对象就将释放占有的资源。#include#include#includeusing namespace std

2016-04-16 14:41:36 706

原创 String深拷贝

当类里面有指针对象时,进行简单赋值的浅拷贝,两个对象指向同一块内存,存在崩溃的问题!这里我们要进行深拷贝。 简单的赋值浅拷贝 String S1("hello world");       String s2=s1;    s1和s2中包含的指针对象同时指向一块内存hello world,析构时delete调用两次这块内存析构两次,崩溃。因此要深拷贝 深拷贝构造s2 时

2016-04-16 14:20:21 373

原创 带有空格的字符串逆置(如:i am a student 逆置为 student a am i)

#include #include void reverse_string(char *l, char *r){ while (l < r) { char tmp = *l; *l = *r; *r = tmp; l++; r--; }}void reverse(char ch[], int len){ int i = 0; char *ctmpl = c

2016-04-15 18:16:11 756

原创 模拟实现auto_ptr、scoped_ptr、shared_ptr等智能指针

智能指针:所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。auto_ptr 有缺陷,自己赋值给自己,会失效置空scoped_ptr 解决了auto_ptr缺陷,防拷贝shared_ptr 含有引用计数  weak_ptr打破循环引用,不增加引用计数#includeusing namespace std;//模拟auto_ptrtemplateclass Sm

2016-04-15 13:59:58 412

原创 C++实现顺序表

#includeusing namespace std;typedef struct FindRet{ bool isFind;//是否找到的标示 size_t index;//找到数据的下标}Findret;typedef int DataType;class SeqList{public: SeqList() :_array(NULL) ,_siz

2015-09-10 21:03:40 398

原创 C++实现单向循环链表

#include#includeusing namespace std;typedef int DataType;struct LinkNode{ DataType _data; LinkNode* _next; LinkNode(const DataType& x) :_data(x) ,_next(NULL) {}};class Slist{publi

2015-09-10 20:59:47 425

原创 万年历

#includeusing namespace std;class Date{public: Date(int year=1900,int month=1,int day=1) :_year(year) ,_month(month) ,_day(day) { //检查日期是否合法 if(year<1900 ||month>12||month<1 ||d

2015-09-10 20:47:29 430

原创 字符串右循环移位

#include#includevoid swap(char *l,char *r){ while(l<r) { char tmp=*l; *l=*r; *r=tmp; l++; r--; }}void RightLoopMove(char *pStr,unsigned short steps){ int len=s

2015-06-26 13:36:12 296

原创 字符串右循环移位

#include#includevoid RightLoopMove(char *pStr,unsigned short steps){ int len=strlen(pStr); while(steps) { char tmp=pStr[len-1]; int i=0; for(i=len-1;i>0;i--) { pStr[i]=pStr[i-1

2015-06-26 13:32:11 724

原创 实现对一个8bit数据的指定位置0或置1操作,其他位不变

#includevoid bit_set(unsigned char *p_data,unsigned char position,int flag){ if(flag)//置1 { *p_data |=(1<<(position-1)); } else//置0 { *p_data &=~(1<<(position-1)); }

2015-06-26 12:42:54 707

原创 指针实现通讯录

#ifndef __CONTACT_H__#define __CONTACT_H__#include#include#includetypedef struct peole{ char *name; char *sex; int age; char *tele; char *addr;}peo ;typedef struct Contact{ peo *dhb;

2015-06-05 17:26:14 428

空空如也

空空如也

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

TA关注的人

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