test

理解c++语言中一些概念以及它们之间的区别(需要深刻理解):


(1)局部变量 全局变量 静态变量 const常量 寄存器变量 宏定义的常量 (注:包括它们的内存分配区域,作用域,初始化等等)

局部变量:分配内存在栈上,由系统进行内存的分配和释放,作用域为所在的函数或者模块内,最好创建时进行初始化操作。

全局变量:分配在全局存储区,由系统进行内存的分配和释放,作用域为整个项目内,一般初始化后不再修改,或者修改时使用critical_Section变量来进行访问保护。

静态变量:保存在静态存储区



(2)理解malloc与new之间的区别,以及free与delete之间区别


(3)内联函数与宏定义的区别,它们各有什么优点


(4)内存分配有哪几种形式?分别为何?区别是什么?对编译速度影响是何





(4)理解什么是重载、覆盖、隐藏,区别是何?可否举例?


(5)什么是多态?举个例子试试


(6)struct 和class有什么区别?c语言中的struct 和c++中的struct一样


么?有什么区别?


(7)说说什么是野指针?野指针什么情况下出现?(没有初始化,delete后


没有赋值为NULL)


(8)你熟悉预编译指令么?条件编译是用来做什么的?你会写么?


(9)sizeof()这个函数你理解么?你能说出各种变量类型在win 32 下的值


么?


(10)关于string这个类你理解么?会写它的构造函数,析构函数,拷贝构造


函数,赋值函数么?会写strcpy吗?


(11)知道断言ASSERT()怎么样么?一定要常用。它是函数还是宏?为什么


不能是函数?


(12)懂什么是链表么?会链表的一些基本操作么?


(13)明白队列,双链表,循环链表,栈是怎么回事?会写这些类。


(14)一定要知道二叉树的遍历有几种,一定要会写用递归的方式来遍历它们





(15)在一个字符串中,你能计算里边“数字字符”的个数么?


(16)知道sizeof(Type*)=4吗?注:win32下


(17)int array[5]= {}; sizeof(array)=?


int Fuction(int a[])


{


return sizeof(a);


}


Fuction(array)=?


(18)你知道函数不能返回栈指针么?


(19)知道局部变量为什么比全局变量快么?


(20)知道为什么要人为写拷贝构造函数么?


××××××××××××××××××××××××××××××××××


×××××××××××××××××


从21条开始属于难点


(21)会用c语言实现重载与继承么?


(22)能说出几种排序方法?它们的区别和各自的优点是什么?知道什么是内


排序什么是外排序么?


(23)知道什么是struct中的对齐么?


(24)extern c‘ 是干什么的?


(25)内存管理你懂多少?(包括内存泄漏,野指针知识,非法调用,内存溢


出等)


(26)malloc返回什么?怎么用?


(27)待续……
3 .上次说了说关于c、c++的一些重点,现在说一些关于MFC中经常考的东西


(有些也不是专属于MFC,但我们现在经常在MFC中用到,像ActiveX ,COM,


动态链接库的东西),其实在笔试考试中,MFC的东西考的很少,单位都注重c


的基础是否扎实,面向对象思想是否理解的深刻。


1)说说mfc中的类继承图的基本框架,这个题我被考过。


2)说说CView类的子类都有什么。


3)DLL的三种调用形式。


4)说说onpaint()和ondraw()的关系。


5)说说CView类与CDocument的关系(重要)。


6)说SendMessage()与PostMessage()的区别。


7)简述COM技术。


8)说说读写一个文件怎么来完成,分别用c,c++,MFC三种库函数来编写代


码。


9)说说二进制文件和文本文件之间区别,举例子,会吗?


10).net的技术优点是何?






宝宝找工作以来,大大小小的面试经历了不少,总结出一些software必定会被


问到的问题,供大家参考(这些问题很多都非常基础,出现在华为、中兴、


intel、上海群硕、深圳正阳、腾讯、惠普、微软等公司,如果栽在这上面谁


都不会甘心):
C、C++部分:
1、排序。这种题目几乎是必问的,一般是问你排序有几种,各种排序的比较


啊等等。还有哪些排序是稳定的等,这些还是要记住的。末了,必定会问你快


排的算法~呵呵,狠一些的就让你写出来。(至于堆排序桶排序啊什么的,倒


是从来没有听说有人被问过——我们觉得这么麻烦的算法面试官自己估计也不


会记得……呵呵)
2、查找。哈希、二叉树、折半等对比。哈希映射和哈希表的区别。
3、链表和数组的区别。在什么情况下用链表什么情况下用数组。
4、栈和队列的区别。
5、多态。overload 和 override的区别。
6、字符串有关的函数。比如让你写一个拷贝字符串的函数啊,或者字符串反


转啊什么的。strcpy和memcpy。
7、继承、多继承。
8、面向对象有什么好处
9、说说static的与众不同之处。如果一个变量被声明为static,它会被分配


在哪里。在什么时候分配空间等。
10、软件开发的几个过程。如果说到测试,一定会问测试分哪几种,有什么区


别等。
11、什么是虚函数、纯虚函数、虚的析构函数,用途。
12、还没想起来,欢迎大家补充CharlieBrown补充
1、Java的特性,垃圾回收,让你想一个大概的实现垃圾回收的架够。
2、Java和C/C++的区别
3、虚函数,纯虚函数、重栽函数,他们之间的区别,什么时候用,重载什么


时候用虚函数。虚函数的实现机理。
4、现场编写程序的考点:指针越界、基本类型数据的字长、字符串、数组


面试常见问题解答1:CObject类中的析构函数为什么是虚函数ZZ
面试SE时,很多公司喜欢问到虚函数相关。宝宝有一次被问到,CObject类中


的析构函数为什么是虚函数,不懂。后来上网查到了答案,特贴上来与大家分


享面试常见问题解答2:几种查找方式的比较




1. 求二个集合A、B交集的补集:
以整型集合为例。
set<int> f(set<int> A, set<int> B)
{
set<int>C(A);
pair<set<int>::iterator, bool> ele;
for (set<int>::iterator iter=B.begin(); iter!=B.end(); iter++)
{
ele = C.insert(*iter);
if (!ele.second)
C.erase(*iter);
}
return C;
}
这个不够高效,要做参数的复制,及返回时的临时对象,下面的更加好:
void f(const set<int>& A, const set<int>& B, set<int>& C)
{
C = A;
pair<set<int>::iterator, bool> ele;//用于存放插入元素是否成功
for (set<int>::const_iterator iter=B.begin(); iter!=B.end(); iter++)
{
ele = C.insert(*iter);
if (!ele.second)//如果插入失败,说明是交集元素,将它删除
C.erase(*iter);
}
}


2. 输入一行字符,求英文字母,数字,空格,其它字符的个数.
一 个有用的string IO操作:getling。这个函数接受两个参数:一个输入流


对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的


内容到 string中,但不包括换行符。和输入操作符不一样的是,getline并不


忽略行开头的换行符。只要getline遇到换行符,即便它是输入的第一个 字符


,getline也将停止读入并返回。如果第一个字符就是换行符,则string参数


将被置为空string。
getline函数将istream参数作为返回值,和输入操作符一样也把它用作判断条


件。


#include <iostream>
#include <string>
using namespace std;
int main()
{
int letter = 0;
int number = 0;
int space = 0;
int other = 0;
string line;
getline(cin, line);
int len = line.length();
for (int i=0; i<len; i++)
{
if ((line<=’z’ && line >=’a') || (line<=’Z’ && line>=’A') )
letter++;
else if (line<=’9′ && line>=’0′)
number++;
else if (line == ‘ ‘)
space++;
else
other++;
}
cout << “letter: ” << letter << endl;
cout << “number: ” << number << endl;
cout << “space: ” << space << endl;
cout << “other: ” << other << endl;
}


3. 判断一个数是否是2的乘方.
可以用移位运算.如果是2的乘方,那应该只有最左的一个是1.从右向左找,


找到第一个1时停止,记录下移了多少位n,那2的n次方如果和原来的数相等,


那么这个数就是2的乘方,否则不是.
之前以为移位是直接到数本身的操作,原来不是,它操作是给出一个移位后的


返回值,而操作数本身没有改变.
bool judge(int number)
{
if (number == 0)//这里不能少,否则输入0的话,会进入死循环
return false;
int n = 0;
int copy = number;
while ((copy&1) == 0)//如果copy&1 == 1,说明找到了最靠右的1
{
cout << copy << endl;
n++;
copy = copy >> 1;//这里不能用copy>>1,这样copy没有变化,死循环
}
return !(number&~(1<<n)); //如果1左移n位与原数不相等,说明原数不止一


个1,不是2的n次方


}
4. 判断一个数是不是奇数
return number&1;
5. 求数组数字的全排列.
转自:http://tieba.baidu.com/f?kz=478333827
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为


n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。


1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排


列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结


果。


2、 再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3


、 5 3 4、 5 4 3 六组数。即以3开头的和4,5的全排列的组合、以4开头的和


3,5的全排列的组合和以5开头的和3,4的全排列的组合.从而可以推断,设一组


数p = {r1, r2, r3, … ,rn}, 全排列为perm(p),pn = p – {rn}。因此


perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), … , rnperm(pn)。当n = 


1时perm(p} = r1。


为了更容易理解,将整组数中的所有的数分别与第一个数交换,这样就总是在


处理后n-1个数的全排列。


算法如下:


#include <stdio.h>


int n = 0;


void swap(int *a, int *b) // 交换
{
int m;
m = *a;
*a = *b;
*b = m;
}


void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf(“%d “, list);
printf(“\n”);
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list);
perm(list, k + 1, m);
swap(&list[k], &list);
}
}
}


int main()
{
int list[] = {1, 2, 3, 4, 5};
perm(list, 0, 4);
printf(“total:%d\n”, n);
return 0;
}


同类其他面


今天面试一家网络游戏公司的游戏开发工程师的笔试题,整个测试时间三个小


时,不够还可以加….汗


c++程序问题:(thinking in c++ not c,可以使用stl)
1 请写代码打印100之内的素数,讲求效率(请做你的解法的效率分析)
2 求m,n的最大公约数
3 输入10个字符串,打印出其中重复的字符串以及重复的次数
4 请画图例(UML最好),给出windows下的文件目录的设计模式
5 用OO表示狼吃羊羊吃草
问答题:1 什么是subversion?它与vss,cvs的区别在哪?或者有什么优势?
2 什么是wiki,关于程序项目的wiki你使用过哪些?wiki对你有什么帮助吗?


wiki与程序文挡的差别在哪?
3 什么是tdd?你使用过吗?tdd的关键在哪?跟传统的单元测试相比,有什么


优越性?
4 什么是单元测试?你用过哪些单元测试工具?他们的区别和好处各有哪些?


你主要倾向于哪一种?
5 什么是编程规范?你倾向于什么样的规范?他的好处在哪?
6 什么是mfc?你经常使用那些mfc类?那么为什么很多人不主张使用mfc?
7 什么是头文件依赖?你注意过这些问题吗?你注意过编译的时间吗?你怎么


改进编译时间?
8 什么是面向对象?你在哪些方面用过面向对象?带来了什么好处?又有什么


弊端?
9 什么是接口编程.com,他带来了什么好处?适用于什么地方?
10 什么是设计模式?使用设计模式有什么好处?列举你使用过的设计模式知


识:
1 一寸山河一寸血,___________。是_____说的。
2 抗战历时____年,最多百分之____的土地沦陷,军民伤亡____。


逻辑:
1 村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)


。于是人们就要找出病狗。每个人可以观察其他的49条狗,以判断它们是否生


病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主


人。主人一旦推算出自己家的是病狗就要枪毙自己的狗,而且每个人只有权利


枪毙自己的狗,没有权利打死其他人的狗。第一天,第二天都没有枪响。到了


第三天传来一阵枪声,问有几条病狗,如何推算得出?
2 P先生、Q先生都具有足够的推理能力。这天,他们正在接受推理面试。
他们知道桌子的抽屉里有如下16张扑克牌:
红桃 A、Q、4
黑桃 J、8、4、2、7、3
草花 K、Q、5、4、6
方块 A、5
约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张


牌的花色告诉Q先生。
这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是


什么牌吗?
P先生:“我不知道这张牌。”
Q先生:“我知道你不知道这张牌。”
P先生:“现在我知道这张牌了。”
Q先生:“我也知道了。”3 楼高100层,你有2个玻璃球,在某一层n层扔下玻


璃球会碎,而低于n层则玻璃球不会碎。
1)你会选择在第几层扔第一个玻璃球来得到最少的尝试次数?
2)假如没有电梯,每次都要上楼下楼,你会选择第几层扔第一个玻璃球来得


到最短的路程(爬上爬下的楼层)?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值