程序员面试宝典题
搬砖小能手lp
这个作者很懒,什么都没留下…
展开
-
面试题——a、b交换与比较
面试题1:有两个变量a和b,不用“if”,"?"、"switch"或其他判断语句,找出两个数中间比较大的方案一:int max = ((a+b)+abs(a-b))/2注:abs()--求绝对值方案二:int c = a-b;char * strs[2] = {"a large","b large"};c = unsigned(c)>>(sizeof(int)*8原创 2015-11-19 00:08:06 · 432 阅读 · 0 评论 -
一个空类占多少空间?多重继承的空类呢
解析:我们用程序来实现一个空类和一个多重继承的空类。看看它们的输出结果:#include#include#includeusing namespace std;class A{};class A2{};class B:public A{};class C:public virtual B{};cla原创 2015-11-24 23:18:51 · 1172 阅读 · 0 评论 -
不同类型的指针加减(就是向前或向后移动)
和机器字长及编译器有关系:所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int)<=sizeof(int) 2 sizeof(int)<=sizeof(long int) 3 short int至少应为16位(2字节) 4 long int至少应为32位。 unsigned 是原创 2015-11-16 23:00:24 · 1676 阅读 · 0 评论 -
指针的基本问题
面试题1:指针与引用的差别?答案:1.非空区别。在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某写对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也不可能不指向任何对象,这时你就应该把变量声明为指针,因为这样你可以付空值给变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你可以把变量声明为引用,不存在指向空值的引用这个事实意味着使用引原创 2015-11-25 22:40:31 · 349 阅读 · 0 评论 -
一道考察函数参数传递、值传递、指针传递(地址传递)、引用传递
#includeusing namespace std;void swap1(int p, int q){int temp;temp =p;p =q;q = temp;}void swap2(int*p,int*q){int * temp;*temp = *p;*p =*q;*q =*temp;}void swap3(原创 2015-11-26 23:27:22 · 1067 阅读 · 0 评论 -
struct和Union的区别
一、Struct 和 Union有下列区别:1.在存储多个成员信息时,编译器会自动给struct第个成员分配存储空间,struct 可以存储多个成员信息,而Union每个成员会用同一个存储空间,只能存储最后一个成员的信息。2.都是由多个不同的数据类型成员组成,但在任何同一时刻,Union只存放了一个被先选中的成员,而结构体的所有成员都存在。3.对于Union的不同成员赋值,转载 2015-12-27 15:11:12 · 617 阅读 · 0 评论 -
【面试中关于死锁的四个条件以及如何解决死锁的记录】
概念:一、死锁:如果一个进程集合里面的每个进程都在等待这个集合的其他一个进程才能继续下去,若无外力它们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程二、死锁产生的原因1、因竞争资源发生的死锁现象:系统中供多个进程共享的资源的数目不足以满足全部的需要时,就会引起请求资源的竞争,而发生死锁现象;2、可剥夺资源:某进程在获得该类资源时,该资源同样可以被其他进程或系统剥夺;原创 2017-09-14 19:58:43 · 696 阅读 · 0 评论 -
C++面试中经常会让手写String类的实现
主要是完成String类的构造函数、拷贝构造函数、赋值构造函数和析构函数。这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载构造函数、赋值函数、析构函数;下面是具体的实现:class String{public: String(const char* str=NULL);//普通的构造函数 String(const String& other); //原创 2017-09-07 09:21:36 · 7178 阅读 · 9 评论 -
比较详细的讲01背包问题(值得看)
面试笔试经常碰到01背包问题,头疼。这里来详细讲解下;01背包问题:一个背包总容量为V,现在有N个物品,第i个物品体积为weight[i],价值为value[i],现在往背包里面装东西,怎么实现物品价值最大?看到这个问题,可能会想到贪心算法;但是贪心算法其实是不对,例如最少硬币找零问题,要用动态规划。动态规划思想就是解决子问题并记录子问题的解,这样就不用重复解决子问题了。转载 2017-09-10 08:36:32 · 344 阅读 · 0 评论 -
面试笔试题约瑟夫问题详解
约瑟夫环问题:一圈共有N个人,开始报数,报道M的人自杀,然后重新开始报数,问到最后自杀的人是谁?如图:内环表示人的排列的环,外环表示自杀顺序;上面N=41;M=3最普通的办法就是模拟整个过程:建一个bool数组,true表示此人还活着,false表示已经自杀,可以模拟整个实现int main(){ int N;//人的总数 int M;//间隔多少人 cin >> N转载 2017-09-10 08:42:22 · 680 阅读 · 0 评论 -
深拷贝和浅拷贝的理解
对深拷贝与浅拷贝的再次理解 记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再次遇到深拷贝与浅拷贝,认真分析了,写写自己的心得吧。 先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1转载 2015-11-24 22:31:02 · 318 阅读 · 0 评论 -
默认构造函数和默认复制构造函数
各种构造函数的区别 构造函数(包括拷贝构造函数)的基本功能:分配空间,初始化数据.一.默认构造函数. 与用户自定义构造函数相比,默认构造函数有功能缺陷:只能分配空间,完成不了初始化数据的任务(类的数据成员都是基本类型数据类型时的默认拷贝构造函数是个例外).1.一般的默认构造函数 若用户没有定义任何构造函数(包括拷贝构造函数),则编译器转载 2015-11-24 22:31:55 · 1512 阅读 · 0 评论 -
关于运算符问题的两道面试题
面试题1:下面程序的结果是多少:#include using namespace std;int main(){unsigned char a = 0xA5;unsigned char b = ~a>>4+1;cout// printf("b = % d\n ", b);return 0;}A: 245B: 246C: 250D: 2原创 2015-11-16 23:13:25 · 647 阅读 · 0 评论 -
程序设计的其他问题
面试题1:下面的switch语句输出什么?代码: int n= 'C'; switch(n++) { default:printf("error"); break; case‘a’: case' A':原创 2015-11-20 23:25:35 · 365 阅读 · 0 评论 -
宏定义
预处理问题、const问题和sizeof问题是C++设计语言中的三大难点,也是各大企业面试中反复出现的问题。就sizeof问题而言,我们曾在十几家公司、几十套题目中发现它的存在。 面试题1:下面代码输出结果是什么? #define SUB(x,y) x-y #define ACCESS_BEFORE(element, offset, value) *SUB(&el原创 2015-11-21 22:45:17 · 394 阅读 · 0 评论 -
关于const的详解
面试题1:下面那个const应该被移除?代码如下:const bufsize = 100;#include#include#include BUF_SIZE 30using namespace std;class A{ public:A();~A(){};public:intlie const[A] BYTE * GetBuffer() cons原创 2015-11-21 23:26:22 · 2707 阅读 · 0 评论 -
关于delet和析构函数
例有一个类AA{public;~A(){}int *p;};A *a = new A();delete a;解析:1.delete是用来释放用new分配的空间,他会调用类的析构,delete完毕后,指针为悬垂指针,访问它可能引起意想不到的结果,也可能正确访问,所以建议delete后,把指针置为NULL,这样后面可以根据NULL来判转载 2015-11-23 23:15:19 · 1983 阅读 · 0 评论 -
sizeof()和strlen()的不同
答案:通过对sizeof与strlen的深入理解,得出两者区别如下:(1)sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。(2)sizeof是运算符,strlen是函数。(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。原创 2015-11-23 23:48:58 · 287 阅读 · 0 评论 -
栈和堆的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的转载 2015-11-23 23:08:27 · 234 阅读 · 0 评论 -
内联函数和宏定义
1.内联函数和宏的差别是什么? 内联函数和普通函数相比可以加快程序运行的 速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。 内联函数要做参数类型检查,这是内联函数跟宏相比的优势。 inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到哪里去, 对于短小的代码来说inline增加了空间消耗换来的是效率原创 2015-11-24 23:20:18 · 397 阅读 · 0 评论 -
C和C++的关系
面试题1:在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?//extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。答案:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。 假设某个函数的原型vo原创 2015-11-20 22:36:58 · 369 阅读 · 0 评论 -
n位数,去除m位,获得最大的值
/*这道题是2017年某游戏公司测试开发工程师笔试的题目,当是在考场上并没有做出来。特意在网上找到了相应的解答,在这里记录下;n位整数,去除m位后,返回的最大值:贪心算法:每一次寻找局部最优,最后达到全局最优思路:1.首先要明白,在一串数中,我们如果要去掉之中n位后还剩下m位,那么剩余的最大数的最高位的位置就不可能在倒数的第m-1位到最后一位里面,不然就凑不齐m原创 2017-09-18 16:43:30 · 2613 阅读 · 1 评论