
C++ interview guide
wangicter
金融产品研发
展开
-
Linux环境下Protobuf完整安装和使用教程
Linux环境下Protobuf完整安装和使用教程目标下载和安装环境配置一个例子1、报文定义2、报文生成3、使用报文4、编译程序5、常见问题:目标本文将教会一个完全的新手如何搭建自己的protobuf Linux环境,并配置好编程环境,并使用一个例子帮助你学会使用protobuf.下载和安装1、下载protobuf安装包$ git clone https://github.com/protocolbuffers/protobuf.git2、安装依赖库$ cd protobuf/$ ./au原创 2020-08-30 20:58:35 · 21303 阅读 · 5 评论 -
计算点在哪些四边形内
题目:一个平面中,有很多正四边形,大小不一,任意四边形之间可以有重叠部分,如下图所示现在有2000个点,如何快速定位这些点分别属于哪些四边形区域? 解决方案:采用区域分割+hash查找的方法。1. 预处理阶段:X将四边形按照左边进行排序,然后逐一按照X轴划分区域,如图:然后,将每一个区域的左边界和右边界作为key,所包含的四边形作为value,存入哈希表中。原创 2012-08-24 10:24:34 · 1295 阅读 · 0 评论 -
【程序员面试宝典】强制类型转换之面试例题2
题目:void main() { unsigned int a = 0xFFFFFFF7; unsigned char i = (unsigned char)a; char* b = (char*)&a; printf("%08x, %08x\n", i, *b); } 输出:000000f7, fffff原创 2012-08-26 11:12:17 · 1624 阅读 · 1 评论 -
如何查找完全二叉树最后一层的最右边的结点
题目:如何查找完全二叉树最后一层的最右边的结点。 解决方案:需要分两种情况考虑。(1)如果完全二叉树是用数组表示的,则直接取数组的最后一个元素。(2)如果完全二叉树是用指针表示的:可以如下解决:a. 从根节点开始,如果右子树存在,则每次先遍历右子树,如果右子树不存在,则访问左子树;b. 如果右子树是叶子节点(即当前节点没有孩子节点),则该节点即所求节点;如果原创 2012-08-28 22:36:38 · 3484 阅读 · 0 评论 -
【程序员面试宝典】递归之两个字符串连接次序问题(P83)
题目:输入两个字符串,比如abdbcc和abc,输出第二个字符串在第一个字符串中的连接次序。即输出125、126、145、146. 解决方案:此处仅考虑第一个字符串中的字符在第二个字符串中的相对位置不变的情况。此时,可以按照递归的思路思考如下:(1)递归过程中:采用两个指针分别指向两个字符串,对应字符相同,则同时后移,然后继续递归查找后面的相同的字符;(2)边界:原创 2012-08-28 22:09:34 · 1640 阅读 · 0 评论 -
单例模式
题目:什么是单例模式?请写一段单例模式的程序? 解决方案:单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。转载 2012-08-28 22:43:56 · 790 阅读 · 0 评论 -
TCP协议三次握手过程分析
TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急转载 2012-08-28 22:50:53 · 810 阅读 · 0 评论 -
利用动态规划求连续数组最大和以及最大子矩阵的和
题目一:给定一个整型数组,数组中有正有负,求最大连续子序列的和。 解法:利用动态规划的思想。设f(n)表示以a[n]为子序列最后一个元素的最大和,则可以有下面的规则:(1)当f(n-1)(2)当n!=0且f(n-1)>0时,f(n)=f(n-1)+a[n]。用一个nGreatestNum来记录最大值,每次与f(n)进行比较,不断更新即可。 题目二:给定一原创 2012-09-08 16:07:43 · 3954 阅读 · 0 评论 -
有36匹马,六个跑道。没有记时器等设备,用最少的比赛次数算出跑的最快的前3匹马
36匹马分6个组,分别为A、B、C、D、E、F组。第一轮,每个组各跑一次,取每组前三名,标识为A1、A2、A3,B1、B2、B3,以此类推。第二轮,每个组的第一名(A1——F1)拉出来跑一次,假设名次是:A1第一名,B1第二名,C1第三名。则:1.后三名及其所在组的其余组员均被淘汰(小组头名都没能进前三,当然是全部淘汰啦)2.两战全胜的A1已经提前夺冠了。3.由于A1已经占去了原创 2012-09-26 23:25:41 · 5147 阅读 · 0 评论 -
智力题集锦【一】
一,现在小明一家过一座桥,过桥的时候是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会熄灭。问小明一家如何过桥?正解:这类智力题目,其实是考察应聘者在限制条件下解决问题的能力。具体到这道题目来说,很多人往往认为应该转载 2012-09-29 14:48:42 · 1471 阅读 · 0 评论 -
C++的多态原理和实现
面试时经常被问到一连串的问题:1、什么是多态性?2、多态性的原理(多态是怎么实现的)?3、用C语言实现多态(写代码)。首先,我们来研究一下C++面向对象的内存模型,也就是实现虚函数时类的存储结构。1. 用 virtual 关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始转载 2012-08-27 23:12:26 · 782 阅读 · 0 评论 -
判断一个图是否有环(有向图,无向图)
无向图:法1:如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。 n算法: 中 第一步:删除所有度 第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。 如果最后还有未删除顶点,则存在环,否则没有环。 n算法分析: 由于有m条边,n个顶点。如果m>=n,则根据图论转载 2012-08-27 23:11:35 · 2691 阅读 · 0 评论 -
《算法导论》之 Problem 5.1-3(随机函数发生器的设计)
问题叙述:*5.1-3 假设你希望以各1/2的概率输出0和1.你可以自由使用一个输出0或1的过程BIASED-RANDOM。它以概率p输出1,以概率1 - p输出0,其中 0 算法分析: 已知BIASED-RANDOM可产生0和1,那么 1 - BIASED-RANDOM也产生1和0,且以1 - p的概率输出1,以p的概率输出0。 如果我们将1 - BIAS转载 2012-08-24 00:20:46 · 2563 阅读 · 0 评论 -
memcpy与memmove的区别
memmove 和 memcopy1.memmove函数原型:void *memmove(void *dest, const void *source, size_t count)返回值说明:返回指向dest的void *指针参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数函数说明:memmove用于从source拷贝c转载 2012-08-24 13:58:32 · 537 阅读 · 0 评论 -
sizeof与strlen的区别
功能区别:sizeof用来求所占内存大小,而strlen用来求字符串长度。区别:(1)sizeof是一个操作符,它的结果类型为size_t(无符号整型数据),而strlen是一个函数,其结果类型也是size_t;(2)sizeof的参数可以是变量,也可以是类型,为变量的时候可以不加括号(sizeof a);而strlen的参数只能是变量;例如,int a = 3;sizeo原创 2012-08-24 14:40:24 · 660 阅读 · 0 评论 -
左右法则 来解析指针问题
首先将“左右法则”的原文搬出来吧:The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. On转载 2012-08-24 16:48:52 · 645 阅读 · 0 评论 -
求一个有序整数数组中和为K的数的对数
题目:求一个有序整数数组中和为K的数的对数。解决方案:两个指针,一个在头,一个在尾;大则-,小则加。 延伸题目:(1)求整数数组中和为K的对数。先排序,O(N*logN),在按照以上算法查找O(N)。(2)求一个整数数组差为K的数的对数。先排序,O(N*logN),然后,用两个指针均从头部开始,一个先走一个后走,差过小则前指针++,差过大则后指针++。这原创 2012-09-03 18:32:32 · 2672 阅读 · 2 评论 -
腾讯面试题
一,设计一个魔方(六面)的程序。 P194 思路:魔方总数9 + 9 + 8 = 26 魔方有六个面,需要定义六个结构体,内容为一个9个点和一个编号,其中每个点包含一个颜色标识;在魔方展开图中根据正方形的相邻关系编号,每个正方形都有四个函数:左翻、右翻、上翻、下翻 根据相邻关系,每个操原创 2012-08-24 23:41:14 · 1205 阅读 · 0 评论 -
sizeof(class)分析
There are many factors that decide the size of an object of a class in C++. These factors are:Size of all non-static data members //静态数据成员的大小Order of data members转载 2012-08-26 17:34:29 · 707 阅读 · 0 评论 -
C语言实现封装、继承和多态
原文参见如下网址:原创文章,转载请注明: 转载自董的博客本文链接地址: http://dongxicheng.org/cpp/ooc/转载 2012-08-24 17:27:35 · 913 阅读 · 0 评论 -
再谈 宝洁经典八大问
1. Describe an instance where you set your sights on a high/demanding goal and saw it through completion. 举例说明,你如何制定了一个很高的目标,并且最终实现了它。 2. Summarize a situation where you took the initiative to转载 2012-08-24 17:45:54 · 2255 阅读 · 0 评论 -
一个字符串中包含另一个字符串所有字符的最短子串长度?——《编程之美》最短摘要的生成的简化
题目:给定一个字符串及一个字符串集合A,求该字符串中包含A中所有字符的最短子串长度。 解决方案一:最直接的方法就是,直接开始遍历:查找任意两个子串之间是否包含str2,如果包含,记录下长度,求得最小值即可。str1 = "daebfacba";str2 = "abc";minLen = len(str1);for i = 0:len(str1) for j原创 2012-08-25 15:32:55 · 6898 阅读 · 1 评论 -
智力题集锦【二】
智力题目集锦1.你有5瓶药,每个药丸重10克,只有一瓶受到污染的药丸重量发生了变化,每个药丸重9克。给你一个天平,你怎样一次就能测出哪一瓶是受到污染的药呢?—— 1给5个瓶子标上1、2、3、4、5。 2从1号瓶中取1个药丸,2号瓶中取2个药丸,3号瓶中取3个药丸,4号瓶中取4个药丸,5号瓶中取5个药丸。 3把它们全部放在天平上称一下重量。 4现在用1×10+转载 2012-09-29 14:52:15 · 1841 阅读 · 0 评论 -
sizeof()与_countof()用法
sizeof() :返回所查询目标所占用字节数_countof() :返回所查询目标所含有元素个数先看程序:#include using namespace std;int main(int argc, char* argv[]){ char *a = "abcde"; char sz1[] = "abc"; char转载 2012-10-01 21:08:21 · 14931 阅读 · 0 评论 -
《编程之美》蚂蚁爬杆问题的扩展【1】
有一根长为L的平行于x轴的细木杆,其左端点的x坐标为0(故右端点的x坐标为L)。刚开始时,上面有N只蚂蚁,第i(1≤i≤N)只蚂蚁的横坐标为xi(假设xi已经按照递增顺序排列),方向为di(0表示向左,1表示向右),每个蚂蚁都以速度v向前走,当任意两只蚂蚁碰头时,它们会同时调头朝相反方向走,速度不变。编写程序求所有蚂蚁都离开木杆需要多长时间。该问题是经典问题了,有O(N)的解法。昨天和赵牛同学原创 2012-10-20 22:03:25 · 4143 阅读 · 1 评论 -
数组的连续子数组最大和(首尾相连)
题目:求一个循环数组的连续子数组的最大和。解法:《编程之美》上给出一种方法:1)求[0, n-1]的最大和;2)如果跨过了n-1,则计算以n-1为尾部的最大子数组[i, n-1],以0为开始的最大子数组[0 , j];如果i否则,M= a[0]+...+a[j] + a[i]+...a[n-1].该方法有问题:例如,1 7 -3 6 2以2结束的为全串,以1原创 2012-10-20 23:42:52 · 1943 阅读 · 0 评论 -
如何将一棵树转换成二叉树
题目:如何将一棵树转换成二叉树? 解答:1. 将 节点的孩子 放在左子树;2. 将 节点的兄弟 放在右子树。 延伸:任何一棵树都可以表示成二叉树,并不是任何一棵二叉树都可以表示成树。那么树多还是二叉树多? 1. 任何一棵树都可以表示成二叉树,结合以上题目很容易理解。2.不是任何一棵二叉树都可以表示成树:当根节点包含右子树的时候,就无法表示成树了。原创 2012-09-29 14:34:26 · 14604 阅读 · 5 评论 -
Google面试题——蓄水问题
问题:有一块矩形土地被划分成 N×M 个正方形小块,每块是一平方米。这些小块高低不平,每一小块地都有自己的高度H(i, j)米。水可以由任意一块地流向周围四个方向的四块地中,但不能直接流入对角相连的小块中。一场大雨后,许多低洼地方都积存了不少降水,求出它最多能积存多少立方米的降水么?思路:先看一维的情况如何处理:预处理: 对每个格子求左边和右边的最高高度。 遍历每个格子: 找到左右原创 2012-12-11 16:23:11 · 2197 阅读 · 0 评论 -
股市买入卖出时间点选择问题
题目:给你一个股价序列,告诉你每个时间点的股价,问你什么时候买什么时候卖获利最大。时间复杂度越低越好。 解答:方法一:只需要从左往右遍历一遍序列Sequence[N],获得每一个元素对应的左边的最小值即可。例如,设为min[N]。再次遍历序列时,通过计算Sequence[i] - min[i],并获得最大值即可。当然,本题还要求给出买入卖出位置,因此可以再加入一个loc原创 2012-12-11 16:30:32 · 2851 阅读 · 0 评论 -
字符串匹配算法总结
KMP虽然经典,但是理解起来极其复杂,好不容易理解好了,便起码来巨麻烦!其实,比KMP算法速度快的算法大把大把,而且理解起来更简单,为何非要抓住KMP呢?笔试出现字符串模式匹配时直接上sunday算法,既简单又高效,何乐而不为?说实话,想到sunday算法的那个人,绝对是发散思维,绝对牛。当我在被KMP折磨的够呛的时候,我就琢磨,有没有别的好算法呢??琢磨了半天也没想出个所以然来。笨啊转载 2012-12-13 10:02:12 · 1314 阅读 · 0 评论 -
什么时候会用到拷贝构造函数?
1-什么时候会用到拷贝构造函数? 2-什么时候有必要手动写拷贝构造函数?1-什么时候会用到拷贝构造函数? 当任何你想复印东西的时候,而不管东西被复印成什么样子。即任何你想利用一个已有的类实例给另一个类实例赋值时,这种赋值可能是显式的,也可能是隐式的显式:classa_1=class_2;隐式:函数的形参有用到类对象却没有用引用或传址技术时转载 2012-12-13 10:12:01 · 1149 阅读 · 0 评论 -
如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
题目:写一个函数判断一个int类型的数组是否是有效的。 所谓有效是指:假设数组大小为n,那么这个int数组里的值为0~n-1之间的数,并且每个数只能出现一次,否则就是无效数组。 例如[5,3,1,4,2,0]是有效的,[5,3,5,1,2,0]是无效的,[5,3,6,1,2,0]是无效的。 解法思路一:置换的思想用一个temp来存储被置换出来的值,例如数组a:5原创 2012-08-23 17:56:40 · 8024 阅读 · 15 评论 -
快排的两种写法
快排及其优化原创 2017-07-24 16:11:55 · 1973 阅读 · 0 评论 -
计算字符串的相似度(编辑距离)
问题许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:1.修改一个字符(如把“a”替换为“b”)。2.增加一个字符(如把“abdd”变为“aebdd”)。3.删除一个字符(如把“travelling”变为“traveling”)。比如,对于“abcdefg”和“abcdef”转载 2012-10-13 12:24:23 · 1075 阅读 · 0 评论 -
数据库增加列或删除列操作
sql 的alert命令是用来修改数据表名,增加列,删除列,修改字段数据类型等.好了下面我们来一个个看实例吧.数据库ALTER TABLE语法要添加一列在一个表中,使用下列语法:ALTER TABLE table_name ADD column_name datatype来看个增加例的实例:ALTER TABLE tname ALTER COLUMN data ye转载 2012-09-17 11:22:48 · 42783 阅读 · 0 评论 -
进程线程与栈、堆的关系
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.一个线程可以创建和撤销另一个线程原创 2012-09-16 17:11:28 · 2674 阅读 · 1 评论 -
MFC中从一个类向其他类发送消息的方法
假设准备从A类向B类发送一个消息WM_MSG首先:在B类中定义这个用户自定义消息,消息响应函数,并关联消息和消息响应函数然后:在A类头文件中包含B类的头文件,并定义一个B类类型的指针成员变量,假设为*memB;之后就可以使用memB->PostMessage()或者PostThreadMessage()或者SendMessage()向B类发送消息即可转载 2012-09-15 12:11:24 · 1580 阅读 · 1 评论 -
VC中char,TCHAR,WCHAR总结
char,TCHAR,WCHAR区别#ifdef UNICODEtypedef wchar_t TCHAR;#elsetypedef unsigned char TCHAR;#endiftypedef unsigned char CHAR;typedef unsigned wchar_t WCHAR;由此可以看出,CHAR实施上就是unsigned char,WCH转载 2012-09-15 13:04:33 · 1165 阅读 · 0 评论 -
趋势科技笔试【6】
题目:请问下面的程序输出是什么? // test3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;class CA{public: CA(){cout << "ca ....."<<endl;f();}; virtual ~CA(){f();}; v原创 2012-10-05 21:22:13 · 2245 阅读 · 0 评论 -
趋势科技笔试【7】
题目:下列程序的输出是什么?class C{public: int a; ~C(){cout <<"~C"<<endl;} void f(){std::cout << "foo C" <<std::endl;}};int _tmain(int argc, _TCHAR* argv[]){ C *p = NULL; if(!p) { C原创 2012-10-05 22:02:46 · 1463 阅读 · 0 评论