intel——笔试题2

 
发信人: commonman (问号), 信区: job
标 题: intel 考试感想(附题目回忆)
发信站: 饮水思源 (2002 110710:56:46 星期四), 站内信件
 
 
今天考完,暴受打击,好些题目根本就看不懂。感觉intel考题很专业,
考试分cs与ee试卷,我考的是cs试卷。
全部考c语言知识,而且都是很专门的,譬如说编译器优化。
只有平时确实对计算机编译以及c语言本身有很深入了解的,才能有比较
好的笔试成绩。
一共三部分
第一部分是选择题
第二部分是问答题
第三部分是智力题
选择题暴奇怪,很多题目都看不明白,记不大明白了。从略。
问答题一共三道,
第一道是一个编译器优化的题目。条件大致说在ZF
为0或者不为0的情况下,分别有两条移位指令可以移进去。然后出了
两个小题,要你优化。
第二道是N个人围成一圈报数,报到某一个数的就出局,问你最后剩下
来的那个人的号码。编程题。
约瑟夫环
第三道大致如下:
以下两个程序哪个的performance高,并解释为什么。
a)
extern int foo(void);
int main()
{
int i;
for(i=0;i<10000;i++) foo();
return i;
}
b)
extern int foo(void);
int i;
int main()
{
for(i=0;i<10000;i++) foo();
return i;
}
智力题
将如下图形(边长相等,即突出的都是正方形)割成几块,再拼成一个正方形,
要求最少最少。
 
 
 
       ---
       |     |
 ---      ---
 |                 |
 ---      ---
       |     |
       ---
 
以下两个程序哪个的performance高,并解释为什么。
extern int foo(void);
int main()
{
 int i;
 for(i=0;i<10000;i++) foo();
 return i;
}
b)
extern int foo(void);
int i;
int main()
{
 for(i=0;i<10000;i++) foo();
 return i;
}
 
我也看到编译原理书里说函数调用的时候局部变量要被作为
现场被保存,返回时要恢复的,导致效率较低。
 
发信人: bright (FTPScout最新版本1.16), 信区: Job
标 题: Intel今年在电子科技大学的笔试题
发信站: 一网深情 (2002 111516:35:20 星期五), 站内信件
 
Intel笔试题目并没有想象的那么变态,还是一些基本的东西,
下面是我记下的一些题,希望对下届的ddmm有所帮助。
 
试题分CS和EE两套,做EE题的同学必须做CS题(但其中关于编译的题不用做)
 
EE的题目
 
1、电路设计时,什么情况下需要进行信号完整性分析?
2、用一个欧姆表怎么判断出三极管的e、b、c极?
3、简述Nyquist带通采样定理
4、你能想到的最大的影子是什么?
太阳
5、 24 个人要求排成 6 排,每排 5 人,如何排?
正六边形,一边站 5
5*6 -6 =24
6、将1~9填入下图所示的圆圈中,使3边和相等,有多少种填法?
阐述你的思路,并用伪代码实现
   o
 o o
 o    o
o o o o
7、简述TCP三次握手过程,并说明为什么要3次握手
TCP 三次握手
TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
1. 客户端向服务器发送一个 SYN 置位的 TCP 报文,其中包含连接的初始序列号 x 和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2. 服务器收到客户端发送过来的 SYN 报文后,向客户端发送一个 SYN ACK 都置位的 TCP 报文,其中包含它选择的初始序列号 y 、对客户端的序列号的确认 x+1 和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3. . 客户端接收到服务器端返回的 SYN+ACK 报文后,向服务器端返回一个确认号 y+1 和序号 x+1 ACK 报文,一个标准的 TCP 连接完成。
TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收
TCP Client
Flags
TCP Server
1 Send SYN (seq=x)
----SYN--->
SYN Received
2 SYN/ACK Received
<---SYN/ACK----
Send SYN (seq=y) ACK (x+1)
3 Send ACK (y+1)
----ACK--->
ACK Received Connection Established
w: ISN (Initial Sequence Number) of the Client
x: ISN of the Server
 
8、 局域网被网桥或路由器分割成子网有什么好处?
 
CS的题目
 
1、一个有符号数与无符号数的转换问题
2、有数组a[M][N],问下面 那种算法效率高
(a)for(int i=0;i<M;i++)
        for(int j=0;j<N;j++)
                xxx=a[i][j].........
(b)for(int i=0;i<N;i++)
        for(int j=0;j<M;j++)
                xxx=a[j][i].........
3、关于递归调用的一个题:
   int foo(int i)
   {
     if(i==0)
       return 0;
     reurn foo(i/2)+1
   }
   问foo(4)=?
4、一个结构体定义的问题
5、一个编译的问题,关于什么跳转表的(我是EE的,这个题不用作)
6、构造函数都不定义返回类型,对吗?
 
7、拷贝构造函数在什么情况下被调用?
 
8、说明带参数的宏和内联函数的区别
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。
内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。
 
 
先说宏和函数的区别:
1. 宏做的是简单的字符串替换 ( 注意是字符串的替换 , 不是其他类型参数的替换 ), 而函数的参数的传递 , 参数是有数据类型的 , 可以是各种各样的类型 .
2. 宏的参数替换是不经计算而直接处理的 , 而函数调用是将实参的值传递给形参 , 既然说是值 , 自然是计算得来的 .
3. 宏在编译之前进行 , 即先用宏体替换宏名 , 然后再编译的 , 而函数显然是编译之后 , 在执行时 , 才调用的 . 因此 , 宏占用的是编译的时间 , 而函数占用的是执行时的时间 .
4. 宏的参数是不占内存空间的 , 因为只是做字符串的替换 , 而函数调用时的参数传递则是具体变量之间的信息传递 , 形参作为函数的局部变量 , 显然是占用内存的 .
5. 函数的调用是需要付出一定的时空开销的 , 因为系统在调用函数时 , 要保留现场 , 然后转入被调用函数去执行 , 调用完 , 再返回主调函数 , 此时再恢复现场 , 这些操作 , 显然在宏中是没有的 .
 
 
  现在来看内联函数 :
所谓 " 内联函数 " 就是将很简单的函数 " 内嵌 " 到调用他的程序代码中 , 只样做的目的是为了避免上面说到的第 5 , 目的旨在节约下原本函数调用时的时空开销 . 但必须注意的是 : 作为内联函数 , 函数体必须十分简单 , 不能含有循环、条件、选择等复杂的结构,否则就不能做为内联函数了。事实上,即便你没有指定函数为内联函数,有的编译系统也会自动将很简单的函数作为内联函数处理;而对于复杂的函数,即便你指定他为内联函数,系统也不会理会的。
 
CS的题比较琐碎,所以记不了那么多了。希望其它兄弟补充!
struct A{
    int i;
    char j;
    char * ptr;
    long Array[100];
    char b[2];
    char * c;
};
#define PRINT_ME (char *)&(((struct A *)0)->c)
void main()
{
    printf("%d/n", PRINT_ME);
}
输出 416 ,也就是 c 在结构体 A 中的位移
 
class CBase
{
public :
    virtual void foo()
    {         
       cout<<"foo in base"<<endl;
    }
    virtual void bar()
    {
       cout<<"bar in base"<<endl;
    }
};
class CChild : public CBase
{
public :
    virtual void foo()
    {       
       cout<<"foo in child"<<endl;
    }
    virtual void bar()
    {
       cout<<"bar in child"<<endl;
    }
};
int * get(void);
void main()
{       
    void (CBase::* pVirtualPointer)(void);
    CBase base;
    CChild child;
    pVirtualPointer = CBase::foo;
    (base.*pVirtualPointer)();
    (child.*pVirtualPointer)();
    pVirtualPointer = CBase::bar;
    (base.*pVirtualPointer)();
    (child.*pVirtualPointer)();
 
}
 
输出:
foo in base
foo in child
bar in base
bar in child
 
1、 何时调用拷贝构造函数 (根据一个object创建另一个object,clone)
2、构造函数是否有返回类型
3、一个4word(word=4bytes)的cache,问以下程序段cache命中率
(a)for( int i=0; i<M; i++)
for(int j=0; j< N; j++)
sum+= a[i][j];
(b)for( int i=0; i<M; i++)
for(int j=0; j< N; j++)
sum+= a[j][i];
4、以下结构是否正确,why?
u8应该是无符号8位的意思吧
struct{
u8 a;
u16 b;
u8 c;
u8 d;
u16 e;
u8 f;        
};
5、一个4×4矩阵,已知每列的和(缺第一列)和每行的和,问第一列的和。
6、用伪汇编代码说明Switch语句的jump table的原理。
7、STDCALL的含义。(sigh,记反了,应该是从右到左调用)  
 
发信人 : OKMatrix ( 线性空间 ),  信区 : Job
   今天 Intel 笔试 ——Faint !!!!
发信站 红果园  (2002110416:30:42  星期一 ),  站内信件

    
今天上午有幸参加 Intel CS 笔试,题目不多,一共 10 道,可是涉
及到很多领域,时间也比较紧张,一共 45 分钟。很多题目还是很复杂的
,现在也记不清了,能回忆多少算多少吧!
    
题目是英文的,为了方便,我就用中文写了,好像回答也要用英文。
选择题的选项记不清,有的就不写选择项了,自己当作填空吧
交大一共去了 9 个人,那位兄弟补充一下? Thx
Section I
1.
P4 的机器上,下段代码的输出结果是什么:
#include <stdio.h>
struct{
        int a:3;
        int b:2;
        int c:3;
}s;
void main(void)
{
   char *p;
   p=(char*)&s;
   *p=0x99;
   printf("%d/n",*p);
   printf("%d,%d,%d",s.a,s.b,s.c);
}
2.
巨复杂的一道题,已经记不清了,在我了解的范围内还没有人做出来。
3.
Linux 操作系统中,假设一个进程 A file1 进行操作,然后一个进程
B
file1 改名为 file2 ,在改名的同时, A 进程对 file1 进行写操作,请问
进程 A,B 的执行情况。
4.
判断下面的系统哪个 / 些是软实时的?
四个选择项: IPVoice MP3Player 、?、?
5.
记不清了,好像有一个什么瓶颈什么的
6.
一个关于多 CPU 的系统问题,给了一大堆条件,最后问单个 CPU 的功耗,
条件太复杂记不清了,不好意思 !
Section II
7.
根据条件,写出 C 编程中的一个常用宏定义(常用于求偏移量)
#include <stdio.h>
#define offsizeof(Filed,Struction) ???????????
struct{
    int a;
    int b;
}s;
void main(void){
void main(void){
    ....
    printf("%d:%d",offsizeof(a,s),offsizeof(b,s));
}
输出结果是: 0 4
问完整的宏定义是什么?
8.
用伪代码实现如何监测 Struct 中是否含有循环?(题目
记不清了,大意如此)
9.
IP Voice 中,使用 UDP 协议还是是用 TCP 协议?为什么?
Section III
10.
智力测验:一共 9 个硬币,分三行排列,第一行 2 个,第二
3 个,第三行 4 个。有两个 Player 进行比赛,每次可以从一行
中取 1~n 个硬币 (2<=n<=4) ,直到取完为止,规则是谁最后一次
取谁输,如果你是第一个 Player ,问:如何取第一次才能保证
你必胜。
并请说明原因。 
 
发信人 : wisher ( 幻想家 ),  信区 : Career
   去年  intel 的题目
发信站 未来花园  (2002110320:13:23  星期天 ),  站内信件

听朋友说的。
1
。先是给一个 100 行左右的 c 程序,有 3 句删了,让你补上
2
。计算机的基本组成
3
。一些硬件配置的问题
4
。数据结构的问题。
大体是这样了
 
  
关于字符串搜索 :  
      搜索字符串时常常使用 ? %, 例如 "abc?de%f" 的形式 , 其中 ? 代表某一个字符 ,% 代表任意长度 (>=0) 的一个字符串 , 可以搜索到的字符串可以有以下形式 :"abcydef","abchdeuioyewf" 等形式 , 请实现该算法 .  
      提示 : 一种可能可行的算法 : 类似与 kmp, 但要修改失败函数 ; 其他办法也可 . 要求效率高 .
int   MatchPattern(   char   *String,   char   *Pattern)  
 {   
        if   (*Pattern   ==   '/0')  
            {  
                cout<<"Find   "<<endl;  
                return   1;  
            }  
            else   if   ((*String   !=   '/0')   &&   (*Pattern   !=   '/0'))    
                {  
 if   (   *Pattern   ==   *String   ||   *Pattern   ==   '?'   )       // 相等或者 '?'  
      {  
        if   (MatchPattern(String+1,Pattern+1))    
              return   1;  
        else  
              return   0;  
        }  
 else   if   (*Pattern   ==   '*')                                             //'*'  
      {  
          if   (MatchPattern(String,Pattern+1))  
                                {  
                                    return   1;        
              }  
          else  
            {  
                if   (MatchPattern(String+1,Pattern))  
 return   1;  
                else  
                                      return   0;  
              }  
          return   0;  
      }  
 else                                                                               // 不相等的情况   
    {  
      if   (MatchPattern(String+1,Pattern))    
            return   1;  
      else  
            return   0;  
    }  
                  }  
                else  
                {  
    cout<<"Not   Find   "<<endl;  
    return   0;  
                }  
 }  

你可能感兴趣的:(String,tcp,struct,服务器,performance,编译器)