自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深信服软件测试笔试题

输入一行字符串,将其中的数字转换成由英文组成的字符串,每个英文单词用空格进行间隔,字符串长度小于等于10; 输入描述:一个字符串。 输出描述:数字对应的英文字符串。 示例: 输入:1230-abc 输出:one two three zero - a b c#include<iostream>#include<string.h>using namespace std;int main()

2017-09-22 11:05:42 9616

转载 内联函数--讲的真好

转载自:http://blog.csdn.net/u011327981/article/details/50601800 1. 内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: 复制代码 代码如下:int max(int a, int b) { return a > b ? a : b; } 为这么一个小的操作定义一个函数的好处有: ① 阅读和理解函数 max 的调

2017-09-18 16:48:47 437

转载 TCP三次握手四次挥手

转载自: http://img.blog.csdn.net/20170316150615037?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYml0Ym9zcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast建立链接: 请求发起方主动打开链接,接收

2017-09-17 21:49:45 274

转载 进程间通讯的几种手段

转载自:http://blog.csdn.net/u014774781/article/details/45485735 进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在

2017-09-16 15:28:04 255

转载 DLL的动态加载方法

原地址:http://blog.csdn.net/freebot/article/details/4312191动态调用动态库步骤:1、创建一个函数指针,其指针数据类型要与调用的DLL引出函数相吻合。 2、通过Win32 API函数LoadLibrary()显式的调用DLL,此函数返回DLL的实例句柄。 3、通过Win32 API函数GetProcAddress()获取要调用的DLL的函数地址,

2017-09-16 07:23:17 1388

转载 链表是否有环

转载自:http://blog.csdn.net/wangshihui512/article/details/9034157。 有环的链表指的是链表有环路,例如下面:A->B->C->D->B,这样遍历的时候B->C->D->B就形成一个环路一直循环。#include <cstdio> typedef struct list { int data; struct li

2017-09-15 23:23:27 161

原创 西山居_2018校招笔试(判断IP地址的合法性)

函数原型: bool IsValidIP(const char* szIP) 举例说明: “not is ip string”的判断结果为false; “1.2.34”的判断结果为false; “111.222.333.444”的判断结果为false; “1.2.3.4”的判断结果是true。 要求:尽量不使用库函数,尽可能提高函数健壮性。#include<iostream>#incl

2017-09-15 21:44:38 1232

原创 用两个stack实现queue

stack和queue都是一种线性结构。要用stack实现queue的push和pop方法,我们首先需要了解下这两种结构的特点。 stack:数据先进后出。 queue:数据先进先出。 我们记两个stack分别是head、tail。我们的想法是这样的,既然是要保证queue的push和pop方法,就是准确得到queue的队头和队尾,我们拥有两个栈,我们只要在head里面push,到pop的时候

2017-09-06 09:53:36 1287

转载 笔试题

转载自:http://blog.csdn.net/fly__chen/article/details/52741473 今天做到一题面试题如下, 读到第9行的时候发现和自己理解的有出入。个人理解函数名是函数的入口地址就是一个人指针,那为什么还要取地址再赋值给p呢?带着疑惑百度了一番,发现网上没人发现程序中的问题,所以就记录一下,希望以后做到这题的同学不再被误解。错误//代码为网上复制的,存在许多问

2017-09-05 09:52:28 136

转载 经典算法_求数组中出现1次的数

转载自:http://blog.csdn.net/morewindows/article/details/12684497 首先看看题目要求:数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法找到x。这个题目非常有意思,在本人博客中有《位操作基础篇之位操作全面总结》这篇文章介绍了使用位操作的异或来解决——数组中其他数字出现二次,而x出现一次,找出x。有《【白话经

2017-08-25 15:28:37 227

原创 输出数组中奇数次出现的数

给定一个整数数组ar, 其中只有一个数出现了奇数次数,其他的数都是偶数词,打印这个数。 我们可以利用异或来解决这个问题。异或只有当两个数字二进制不相同时,对应二进制才是1。同时异或满足交换律。 所以我们可以利用每个数字进行异或,最后得到的就是要求的数字。void main(){ int ar[11] = {1,4,6,4,8,8,4,2,1,6,2}; int n = size

2017-08-25 11:32:06 1582

原创 剑指offer_数值的整数次方

实现函数double Power(double base , int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。bool g_InvalidInput = false;bool equal(double num1,double num2){ if((num1 - num2 > -0.0000001) && (num1 - num2 < 0

2017-08-24 21:04:45 219

转载 正则表达式

正则表达式中的特殊字符,就是一些有特殊含义的字符,如“.txt”中的,简单的说就是表示任何字符串的意思 如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls *.txt。正则表达式有以下特殊字符。需要转义 特别字符说明$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 也匹配‘\n′或‘\r′。要匹配 也匹配 ‘\n' 或 ‘\r'。要匹

2017-08-23 09:08:22 194

原创 -0的存储在计算机中到底代表啥?

我们都知道计算机的世界里面只有0和1,所有的数字在计算机中都是按照二进制存储。那么问题来了,我们咋样区分正数和负数。伟大的科学家发明了原反补码来区分。并且把最高位置0代表正数,正数的原反补码都相同;负数我们把它的最高位置1代表它是负数,负数的反码是把原数除符号位取反,求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1 。计算机中都存的补码。现在我们举个例子:以一个8

2017-08-22 17:03:10 4166 3

原创 二进制数中的1的个数

实现一个函数,输入一个整数,输出该整数二进制表示中1的个数。 我们的思路是:找一个中间变量1,与整数进行&操作,每次向左移一位,就能判断下一位是不是1… 这样反复左移就能每次判断其中一位是不是1。int Numberof1(int n){ int count = 0; unsigned int flag = 1; while(flag)//循环32次 {

2017-08-22 12:14:02 187

原创 Fibonacci的递归及非递归实现

斐波那契数列:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)#include<iostream>#include<string.h>using namespace std;int Fibonacci(int n){ if(n==0 || n==1) return 1; /*非递归的方法 int Fibn = 1;

2017-08-20 22:54:07 1614

转载 singleton的饿汉式,懒汉式及关于双检锁的线程安全模式

关键字: singleton 单例 写法 双锁 线程安全饿汉式单例类 Java代码 复制代码public class Singleton { private Singleton(){ } private static Singleton instance = new Singleton(); private static Singleton

2017-08-20 17:01:24 348

原创 剑指offer_重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的谦虚遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的头结点。struct ListNode{ int data; ListNode* pLeft; ListNode* pRigth;

2017-08-18 16:16:45 202

原创 剑指offer_替换空格

题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“we are happy”,则输出为”we%20are%20happy”。 遇到这道题目时,我首先应该向面试官问清楚是可以自己申请空间,还是原有空间足够多在原有空间上操作。自己申请空间这种方法比较简单:我们只要先计算字符串中的空格个数,算出所需空间的大小,然后比较字符串与空格,用%20替换即可。如果不允许申请空间,需要对字符串进

2017-08-18 10:08:52 274

转载 gdb如何查看内存

GDB查看内存命令(x命令) 可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:x/nfun、f、u是可选的参数。n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。 f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。 u 表示从当前地址往后请求的字节数,如果不指定的话,GD

2017-08-16 16:37:32 642

原创 笔试题:利用素数定理计算100以内素数的个数

这是一道笔试填空题,空是比较好填的。但是思想很多非数学出身的新手程序员可能不太清楚。 他们代码的想法是这样的: 首先把我们直观看到的2肯定是素数存进去,后遍历3-100,看数字是否能整除链表中的数字,如果可以就不是,不可以就继续直到遍历完链表,则该数是素数。这种计算素数的思想来自素数定理: 每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积,最小的素数是2

2017-08-16 16:28:16 903

原创 迅雷2015笔试:hash_table

现在有一个用来存放整数的Hash表,Hash表的存储单位称为桶,每个桶能放3个整数,当一个桶中要放的元素超过3个时,则要将新的元素存放在溢出桶中,每个溢出桶也能放3个元素,多个溢出桶使用链表串起来。此Hash表的基桶数目为素数P,Hash表的hash函数对P取模。#define P 7#define NULL_DATA -1struct bucket_node{ int data[3]

2017-08-16 12:06:10 444

原创 纯虚函数

编程是要符合实际生活的,假如我们现在要实现一个观察动物生活的软件。我们要定义许多的动物类来具体记录它们的生活习性。假如我们要调用某一动物的资料,很简单我们可以通过实例化对象通过访问函数来得到。但是有一天领导要来检查,需要我们把所有动物的资料全部调出来,这时候通过定义对象,就显得佷麻烦。这样我们想通过调用一个公有函数来得到所有资料。函数参数要接受所有动物类,前边博文中提到的赋值兼容规则恰好符合我们的要

2017-08-14 15:24:17 495

原创 多态原理实现分析及重载,隐藏,覆盖的辨析

上一篇文章我讲到关于多态的使用,我们是不是感到非常神奇,为啥就是简单的加个virtual就能访问到子类的函数。无疑C++底层帮我们做很多的工作,C++的前辈们在底层加入__vfptr这样一个虚函数表,用来存我们申明为virtual的函数。加virtual之后访问子类函数的门道就在这里,我们以一个简单的程序来讲解: 我们在父类base中申明三个函数,两个虚函数,一个普通函数。在子类D中我们重写v

2017-08-14 11:07:07 208

原创 多态和虚函数的使用

上一篇博文我提到virtual用法,同时谈到它在多态的实现中有至关重要的位置。现在我们来学习多态到底是什么及其是如何实现的。 在C++中有两种多态性: 1>编译时的多态:通过函数的重载和运算符的重载来实现。 2>运行时的多态:无法根据函数名和参数来确定该调用哪个函数,必须在程序执行过程中,根据执行的具体情况来动态地确定。它是通过类继承关系和虚函数来实现的。在类继承中我们的父类对象,指针或引用只

2017-08-12 23:44:37 289

原创 同名隐藏与赋值兼容规则

在继承体系中我们的编写派生类一般可分四个步骤: 1>吸收基类成员(除构造函数和析构函数外全部接收) 2>改造基类成员(声明一个和某基类成员的新成员,派生类中的新成员就屏蔽了基类同名成员称为同名隐藏) 3>发展新成员(派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展) 4>重写构造函数和析构函数同名隐藏:只要子类新成员的函数名与父类函数名相同,子类写的函数将会隐藏所有父类和

2017-08-11 22:44:19 462

原创 钻石继承和虚基类

当我们一个类去继承的两个父类有相同的数据成员时,我们想给这个成员赋值就要遇到问题了,我们必须用类名去驱动它,不然我们就不知道到底是给哪个成员赋值,下面举个例子。 这样看来是很好的解决我们的问题,但是当我们的父类继承它自己的父类,而我们想从子类中访问父类的父类数据时,我们通过加类名去驱动也可以实现。但是我们明明是修改的同一个数据但是却给的不同的值,和我们现实情况不同。语言可能生涩难懂,我们举个例

2017-08-11 17:22:54 238

原创 Singleton模式

Singleton模式:即一个类只能实例化出一个对象。因此我们必须把构造函数设为私有函数以禁止他人通过类名随便创建实例。只能通过我们给定的方法创建。 下面我们给出最简单的Singleton实现方法:

2017-08-11 16:08:03 117

原创 考虑异常安全性的赋值语句

前边写过关于赋值语句的博客(http://blog.csdn.net/f15829107089/article/details/75453192), 但是实现的方法存在异常安全性。当我们赋值的对象原本有指向内存时,释放内存后,重新给对象申请空间,如果内存不足导致导致new char抛出异常,但是被赋值的对象已经被赋值为空,非常容易导致程序崩溃。 1>我们可以先申请空间再释放原有内容,这样保证分配

2017-08-10 10:45:53 310

原创 求字符串的子序列是回文串的动态规划算法

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子1: abcda google 输出例子1: 2 2 这是腾讯2017暑期实习

2017-08-09 19:48:40 512

原创 最大乘积

这是拼多多的一道笔试题 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 。 我们分析一下:有两种情况可能是最大结果。 1>两个负数与与一个正数相乘。 2>3个全为最大正数。 想法是:我们遍历一遍数组,每次进行比较把数组中最大的三个数和最小的两个数取出来,输出最大乘积。

2017-08-07 16:42:45 717

原创 继承访问属性

我们都知道当实例化一个对象时我们的对象只能访问类里的公有数据或者函数。这样看来保护属性和私有属性似乎没有什么区别。这就要引出我们的主角继承。当我们的一个类D(子类)继承另一个类Base(父类)时,我们有公有,保护,私有三种继承方式。不能继承父类的构造和析构。那么我们的子类能访问父类的那些数据呢。 站的子类的角度,子类只能访问父类的公有和保护方法。继承也分别有公有,保护,私有三种方式。继承相当于给子

2017-08-01 00:16:26 349

原创 I/O复用之poll模型

poll系统调用和select的类似,也是利用轮询文件描述符来寻找就绪者。 函数原型: int poll(struct pollfd *fds,nfds_t nfds,int timeout); fds参数是一个pollfd结构类型的数组,它指定所有我们感兴趣的文件描述符上发生的可读,可写和异常事件。 struct pollfd { int fd

2017-07-31 15:58:11 233

原创 深浅拷贝

深浅拷贝问题的由来:在C++使用过程中我们会用到类,当我们用类定义一个对象,然后用类拷贝构造一个对象时,会调用拷贝构造函数。当然,如果我们的数据成员都是基本数据类型时我们不用担心,但当我们的数据成员指向一定的内存空间,仅仅进行赋值是远远不够的,应为这样当析构时会对同一空间多次释放。 这样做能解决问题,但是占用内存,我们可以采用引用计数的方法,当计数为0时才释放空间。保证在最后换一个对象释放

2017-07-21 00:45:24 169

原创 拷贝构造和赋值语句

拷贝构造函数:用于对象初始化对象。函数名是类名。参数必须是对象的引用。 如果不采用引用传递会产生临时变量,要开辟空间并且要拿原有的对象初始化临时对象,继续调用拷贝构造函数,产生无限递归,这些对象都存储在栈里面,造成栈溢出。 拷贝构造函数三种调动情况: 1>对象初始化对象 2>如果函数的参数以对象A作为参数时,要创建对象A,要拿原有对象初始化对象A。 3>函数返回值是类对象时,在函数内部

2017-07-20 00:16:36 385

原创 构造函数和析构函数

C++的学习我们不免要从构造函数和析构函数开始。 构造函数:数据成员多为私有,要对他们进行初始化,必须有一个公有函数来进行。同时这个函数应该仅在定义对象时自动执行一次,称为构造函数。 主要有以下特征: 1>函数名与类名相同。 2>无返回值类型(即使是void也没有) 3>新的对象在被创建时,该对象所属类的构造函数被自动调用一次,且在该对象的生命周期内仅被调用一次。 4>构造函数可以被重

2017-07-19 22:45:26 190

原创 字符串操作函数的使用及其实现

字符串操作函数包括strlen(),strcat(),strcpy(),strcmp()四个函数。 strlen()是求字符串的长度。 出于程序的安全性考虑,程序要进行判空操作。不然,在传入空字符串时会发生崩溃。 这里我们借助一个辅助空间变量sum来记录长度,我们也可以不借助辅助变量通过递归来实现。return my_strlen(*str) + 1;当*str=’\0’时返回0; st

2017-07-16 21:28:26 285

原创 RBTree的插入算法

红黑树是具有这样特性的一颗二叉搜索树。 1>每个结点不是红色就是黑色。 2>根结点是黑色。 3>如果结点为红色,其子结点必须为黑色。 4>任以结点至NULL的任何路径,所含黑结点数必须相同。 我的想法是这样的:我们要插入结点则必须找到插入的位置,然后调整平衡。只有当我们插入的结点的父结点是是红色的时候才会出现要调整的问题。 插入算法的难点主要是调整平衡的问题。我以插入结点的父结点是插入结

2017-07-13 18:33:45 277

原创 AVL树的插入算法

AVL树是一颗空树或者是左右子树都是AVL树,且左右子树的高度之差绝对值不超过1,我们记为bf。 我们可以有如下的结构定义: template class AVLNode { private: Type data; AVLNode* leftChild; AVLNode* rightChild; int bf

2017-07-11 01:17:19 1170

原创 单链表<二>关于链表的算法

链表的排序 链表的按值删除 尾删 头删

2017-07-10 20:06:37 143

空空如也

空空如也

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

TA关注的人

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