
程序员面试宝典
zz198808
这个作者很懒,什么都没留下…
展开
-
const与#define相比有什么不同
答:C++中可以使用const定义常量,也可以用#define定义常量,但是前者比后者有更多的优点①const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只是进行字符替换,没有做类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应)②有些集成化的调试工具可以对const常量进行调试,但是不能对宏进行调试即在C++中 const可以完全替换宏常原创 2012-07-29 16:24:15 · 711 阅读 · 0 评论 -
几个重要的概念
1.单循环链表指的是:收尾相连的,如果不是收尾相连那么称为带环的单链表2.关系型数据库中的记录是可以重复的。3.主键要求既是唯一的,也是非空的,数据库为每个主键默认建立索引,但用户可以通过CREATE INDEX另建其他索引4.所以索引个数不唯一,非主键亦可有索引5.正确处理分页中断的过程: 缺页中断-->决定淘汰页--》页面调出--》页面调入(好比上地铁,旧的人先下来,新原创 2012-09-06 23:06:22 · 821 阅读 · 1 评论 -
C++中的枚举
int _tmain(int argc, _TCHAR* argv[]){ //枚举。第一个从0开始,后面的从前面一个数的下一个开始。 enum {a, b=5, c, d=4, e}; enum {h,x, y, z, v=120, w, r=99,s,t}; cout<< a << b<<c<<d<<e<<endl ; cout<<h<<x<<y<<z<<v<<原创 2012-09-05 23:17:05 · 494 阅读 · 0 评论 -
二叉树对应的树林包括多少棵树
二叉树对应的树林包括多少棵树,这个主要看根节点的右子树有多少个节点原创 2012-09-06 22:49:53 · 2384 阅读 · 0 评论 -
一致性哈希算法(腾讯笔试题附加题)
问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与ServerIPIndex[QQNUM%(n-1)]原创 2012-09-07 20:49:53 · 2994 阅读 · 0 评论 -
hash冲突时候的解决方法
1)、开放地址法 2)、再哈希法 3)、链地址法 4)、建立一个公共溢出区原创 2012-09-09 10:14:55 · 686 阅读 · 0 评论 -
KMP 算法真的很简单
KMP 算法真的很简单 KMP 是字符串匹配的经典算法,曾经一度对其敬而远之,感觉很难写出来正确的 KMP 算法,这都是拜那些“教科书”所赐,在它们的教授下,不禁感觉 KMP 很难!其实理解 KMP 算法很简单,今天就来看个究竟,我的目标就是从几个简单的数学等式推导出 KMP 算法,简单但严谨。 串匹配 先来回忆一下串匹配场景,不外乎是给定两个字符串 S 和 T ,然后在 S原创 2012-09-07 20:55:23 · 1097 阅读 · 0 评论 -
关于left和right的判断条件要不要判断是否相等
1.二分查找为例,那么一定是要判断left=right相等的2.两个指针前后夹逼,那么这个是不需要去判断是否相等。以上两个原则,memory原创 2012-09-09 22:30:17 · 789 阅读 · 0 评论 -
判断一个自然数是否是某个数的平方
(什么意思呢?就是这个数一定是奇数相加的)方法3:由于(n+1)^2=n^2 + 2n + 1,= ...= 1 + (2*1 + 1) + (2*2 + 1) + ... + (2*n + 1)注意到这些项构成了等差数列(每项之间相差2)。所以我们可以比较 N-1, N - 1 - 3, N - 1 - 3 - 5 ... 和0的关系。如果大于0,则继续减;如原创 2012-09-09 10:45:40 · 1874 阅读 · 1 评论 -
旋转数组中的最小元素
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 分析:这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性,我们应该原创 2012-09-12 18:58:17 · 842 阅读 · 0 评论 -
Dijkstra算法
代码:// Dijkstra.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#include#include#include#define MAX pow(2.0,20.0)#define NUM 6using namespace std;/*using std::cin原创 2012-09-13 19:12:57 · 777 阅读 · 0 评论 -
在序列基本有序的情况下,选择冒泡法时间复杂度还是比较好的
在序列基本有序的情况下,选择冒泡法时间复杂度还是比较好的原创 2012-09-05 22:58:11 · 1048 阅读 · 0 评论 -
Linux下权限问题
进入目录都要x权限(执行权限),查看目录下的文件需要r权限(读权限)和x权限,因为相当于进入了目录。执行目录下某个可执行文件,需要进入目录的x权限,以及对该执行文件的x权限。原创 2012-09-05 22:50:57 · 537 阅读 · 0 评论 -
int** a[3][4]这个数组占多大空间
sizeof的问题:3*4*4=48原创 2012-07-29 16:50:40 · 3347 阅读 · 0 评论 -
用预处理指令#define声明一个常数,用以表明一年中有多少秒
分析:通过这道面试题目,面试官想考察如下几个知识点:①#define语法的基本常识(例如:不能以分号结束,括号的使用等等)②写出你是如何计算一年中有多少秒而不是计算实际的值,会更有价值③意识到这个表达式将使一个int数溢出,因此最好用的长整形,那么你就会为自己加分了#define SECOND_PER_YEAR (60*60*24*365)UL原创 2012-07-29 16:05:59 · 4239 阅读 · 1 评论 -
一个空类所占空间为1,多重继承的空类所占的空间还是1,但是虚继承涉及虚表(虚指针)所以所占的字节是4
一个空类所占空间为1,多重继承的空类所占的空间还是1,但是虚继承涉及虚表(虚指针)所以所占的字节是4原创 2012-07-29 16:54:16 · 3004 阅读 · 1 评论 -
指针和引用的区别
答案:①非空区别。任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象②合法性区别。在使用引用之前不需要测试它的合法性,相反,指针则应该总是被测试,防止其为NULL③可修改性区别:指针与引用的另一个重要的区别就是指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象的值是可以改变的④应用区别:总的来说,在一下情况原创 2012-07-29 17:01:53 · 655 阅读 · 0 评论 -
头文件中的ifndef/define/endif是干什么的?
是为了防止该头文件被重复引用原创 2012-07-29 16:19:23 · 1610 阅读 · 0 评论 -
说明sizeof和strlen的区别
由以下几个例子来说明sizeof和strlen的区别①char* ss="0123456789"sizeof(ss)的结果是4,ss指向字符串常量的字符指针sizeof(*ss)的结果是1,*ss是第一个字符②char ss[]="0123445678";sizeof(ss)的结果是11,ss是数组,计算到'\0'的位置,因此是10+1;sizeof(*ss)的结果是1,*原创 2012-07-29 16:48:25 · 743 阅读 · 0 评论 -
操作系统面试题总结
首先申明这篇博客转自我的师傅,他的博客:http://blog.youkuaiyun.com/qitian0008/article/details/7887168,一路走来谢谢他老人家,O(∩_∩)O哈哈~,谢谢你。 1.什么是进程(Process)和线程(Thread)?有何区别?进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是原创 2012-08-20 18:35:56 · 4139 阅读 · 0 评论 -
顺序表和链表的区别
线性表是以整体存在的,就像一根竹竿,一节接一节。所以它在存储时也是整体存储,也就是地址相连,一个接一个。而链表相对来说就比较自由,存储起来就不必相连。因为链表的指针域会指明下一个元素的存储单元,这样就可以一级一级的访问。所以访问第i个节点和第i个节点的直接前驱都可以做到O(n)原创 2012-09-05 22:35:07 · 1140 阅读 · 0 评论 -
计算循环队列元素个数
队列头指针为front,队列尾指针为rear,队列容量为M,则元素个数为|rear-front+M|%M,注意,这个%是求余运算。整理如下:队空:front==rear队满: (rear+1) mod maxsize ==front队中元素个数n=(rear-front+maxsize )mod maxsize 入队:rear=(rear+1) % maxsize ;出队:原创 2012-09-05 22:18:55 · 7103 阅读 · 2 评论 -
注意二叉查找树的定义
1.若左子树不为空,那么左子树上所以节点的值都小于他的根节点的值2.若他的右子树不为空,,那么右子树上所以节点的值都大于他的根节点的值3.他的左子树和右子树也是都分别为二叉查找树(腾讯笔试题目)原创 2012-09-05 22:47:31 · 588 阅读 · 0 评论 -
各种排序算法的总结和比较
各种排序算法的总结和比较1 快速排序(QuickSort) 快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。 (1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。(4) 对两边利用递归排序数列。原创 2012-09-23 18:55:02 · 1456 阅读 · 2 评论