摩托罗拉部分
C++
面试题,交流
1.介绍一下STL,详细说明STL如何实现vector。
2.如果用VC开发程序,常见这么几个错误,C2001,c2005,c2011,这些错误的原因是什么。
3.
继承和委派有什么分别,在决定使用继承或者委派的时候需要考虑什么。
继承和委派差别主要是语义不同。详见《高质量
C++
编程》和《设计模式》第一章。
作为组合理解
4.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?
指针:可空
引用:必须初始化
如果指针为空的话,那么就可能访问出错。常量指针也可以为空,
int *const p = NULL;
5.参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么;
传值,传引用,传指针,后两种,
6.结合一个项目说明你怎样应用设计模式的理念。
7.介绍一下你对设计模式的理解。(这个过程中有很多很细节的问题随机问的)
8.C++
和
C
定义结构的分别是什么。
C++
数据可以封装?
9.构造函数可否是虚汗数,为什么?析构函数呢,可否是纯虚的呢?
不能,虚表还没有构造。能,能。纯虚只要自己实现就够了。见《
thinking in c++
》第
14
章
10,拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。
11.结合1个你认为比较能体现OOP思想的项目,用UML来描述。(最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会被问住)。
12。基类的有1个虚函数,子类还需要申明为virtual吗?为什么。
不用,直接继承虚表
13.C也可以通过精心封装某些函数功能实现重用,那C++的类有什么优点吗,难道仅仅是为实现重用。
14.C++特点是什么,
如何实现多态?画出基类和子类在内存中的相互关系。
动态绑定,虚函数表
特点封装,继承,重载,多态;多态是通过虚函数和滞后联编实现。那个著名的图就不画了。他们可能会让你写几个类来说明,或者给你几个,让你描述。
15.为什么要引入抽象基类和纯虚函数?
提供接口
16.介绍一下模板和包容器。如何实现?(也许会让你当场举例实现)
17.你如何理解MVC。简单举例来说明其应用。
18,多重继承如何消除向上继承的二义性。
如果在两个或多个基类中都找到了声明
,
则调用是二义的
.
解决二义的方法是采用虚拟继承
.
发信人: HerrWu (奥古斯都·朝花夕拾), 信区: Job
标 题: Moto笔试题(zz)
发信站: 武汉白云黄鹤站 (2005
年10月24日15:45:55 星期一), 站内信件
1.
打印如下图案,共
19
行,只能有一个
for
循环(题目已经提供)
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*
char str[20];
memset((void*)str, ' ',20);
str[19] = '/0';
for (int i=0; i<19; i++)
{
if(i<=9)
{
str[9-i] = '*';
str[9+i] = '*';
}
else
{
str[i-10] = ' ';
str[18+10-i] = ' ';
}
printf("%s/n",str);
}
2.void fun(int x)
{
if(x/2>0)fun(x/2);
printf("%d",x);
}
求fun(10)的输出结果
1 2 5 10
3。
#define f1(n) (n)*(n)
int i=5;
int k=0;
k=f1(i++);
printf("%d %d",i,k);
输出结果:
7
,
25
4。下面那个for循环是无限循环
for(int i=010;i==10;i+=0)
i
为
8
,故只循环一次
for(int i=10;(i++^--i)==0;i+=0)
i++^--i
始终为
0
,故无限循环
还有几个忘了
5.Email relay 和Email access分别用了什么协议?(其他还有很多,略)
SMTP,POP3
6。in a mobile phone,软件运行期,stack data 存在于
a.rom,b.flash c.eeprom d.ram e.none of the above
D.ram
。这题稍微涉及到一点硬件知识,
ROM
的全称是
Read Only Memory
,即只读存储器,
flash
,
eeprom
都是
ROM
家族的一员,
RAM
是
Random Access Memory
的简称,意为随机存取存储器,也就是内存了。不管是堆还是栈都是放在内存里的。
7.
int i;
int x=0x12345678;
unsigned char *p=(unsigned char *)&x;
for(i=0;i < 4; i++) printf("%2x",*(p+i));
在80x86pc机器上运行结果
Sun Sparc Unix上运行结果
x
在
PC
机上的内存存放顺序为
78 56 34 12
,高字节在前,低字节在后,因此输出
78563412
也就是
little endian,
高字节放高内存区,符合人的习惯。网络字节是
big endian
,
8.
char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}} };
for(int i=0;i<12;i++)
printf("%d ",_______);
空格处填上合适的语句,顺序打印出a中的数字
*(&a[0][0][0]+i)
9。void fun(char *a,char *b)
{
a=b;
(*a)++;
}
void main()
{
char s1='A',s2='a';
char *p1=&s1;
char *p2=&s2;
fun(p1,p2);
printf("%c%c",s1,s2);
输出结果:
Fun
的功能是使得
b
指向的内容增
1
,故结果为
Ab
10。写一个strstr()函数
见
string
。
c
标 题: 南京MOTO昨天笔试的题型
发信站: 饮水思源 (2005
年10月22日15:21:12 星期六)
两小时的笔试眨眼就过去了,总算积累了一点笔经,分享一下。
题型:选择,程序填空,智力题,编程题
题目主要有:
1.数字电路中的与非门等问题;
2.网络基本知识;
3.移动通讯网络基本知识;
4.JAVA虚拟机垃圾收信问题;
5.JAVA程序分析题;
6.C/C++基本问题;
7.Little-ending, Big-ending问题, 及Intel和Sun处理器各自采用的ENDING问题;
8.指针, 数组问题;
9.逻辑/离散题;
...
11.程序填空题(C/C++)
12.智力题;
13.C/C++编程题
A.
输出19行的棱形
B.
查找字符串
发信人: szws (克米帅*努力找工作中c&mfc&asp), 信区: Jobs
标 题: [转载] 今天摩托罗拉笔试的智力题
发信站: 紫金飞鸿 (Fri Oct 21 22:24:30 2005)
【 以下文字转载自 Riddle 讨论区 】
【 原文由 szws 所发表 】
说是甲,乙,丙,丁四个人得罪了皇帝,皇帝要惩罚他们,手段比较委婉,他是这么做的
有一座高墙,甲站在墙的一边,面朝墙,乙,丙,丁站在墙的另一边,面朝墙站成一条
线,乙最前,丙在中间,丁在最后,他们都面向墙的。
将甲,乙,丙,丁四个人的眼睛蒙上,给他们各自戴上一顶帽子,帽子的颜色分别是红
,红,蓝,蓝。将他们眼睛上的纱布拿开,他们不能看自己头上帽子的颜色,站在前面的
人看不到后面人头上帽子的颜色,站在后面的人可以看到前面人头上帽子的颜色。他们中
只要有人正确说出自己头上帽子的颜色,四个人都释放,一旦说错,四人都处死。注意,
只有一次开口说话的机会。他们都很聪明,问:谁最后会开口说话?
首先,四个人都是聪明人
1
、皇帝是要惩罚他们的,不是要放水,所以决不会让丁看到两顶同样颜色的帽子
2
、丙会等丁,他发现丁闭口不言,即可判断自己与前面的乙的帽子颜色不同
所以,丙会说话
class
human
{
public
:
human() { human_num++;};
static int human_num;
~human(){
human_num--;
print();
}
void print()
{
cout<<"human nun is: "<
}
protected
:
private
:
};
int
human::human_num = 0;
human f1(human x)
{
x.print();
return x;
}
int
main(int argc, char* argv[])
{
human h1;
h1.print();
human h2 = f1(h1);
h2.print();
return 0;
}
写出程序的输出结果
因为没有拷贝构造函数和赋值运算符
,
所以临时对象
x
和
h2
时使用的位拷贝
,hum_num
不增
,而析构函数要减
hum_num
所以
最后
hum_num
的值为
-2
human h1; // hum_num = 1
h1.print(); // print 1
human h2 = f1(h1);
human f1(human x)
{
xcopy = x; // hum_num = 1
xcopy.print(); // print 1
return xcopy; //
返回给
h2,hum_num = 1
//
析构
xcopy,hum_num = 0, print 0
}
h2.print(); // hum_num = 0, print 0
析构
h2,hum_num = -1, print -1
析构
h1,hum_num = -2, print -2
------------------------------
human nun is: 1
human nun is: 1
human nun is: 0
human nun is: 0
human nun is: -1
human nun is: -2