motorola摩托罗拉笔试题2

 
摩托罗拉部分 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:   "<<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;  
}  
写出程序的输出结果
因为没有拷贝构造函数和赋值运算符 ,  
 
所以临时对象 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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值