motorola摩托罗拉笔试题2

来源:互联网 发布:如何开淘宝直通车 编辑:程序博客网 时间:2024/05/17 08:27
 
摩托罗拉部分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)
发信站: 武汉白云黄鹤站 (2005102415: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);
输出结果:
725
4。下面那个for循环是无限循环
for(int i=010;i==10;i+=0)
i8,故只循环一次
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家族的一员,RAMRandom 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上运行结果
xPC机上的内存存放顺序为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()函数
stringc
标 题: 南京MOTO昨天笔试的题型
发信站: 饮水思源 (2005102215: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:   "<<human_num<<endl;  
    }  
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;  
}  
写出程序的输出结果
因为没有拷贝构造函数和赋值运算符,  
 
所以临时对象xh2时使用的位拷贝,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