发信人: commonman (问号), 信区: job
标 题: intel 考试感想(附题目回忆)
发信站: 饮水思源 (2002
年11月07日10: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
年11月15日16: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
!!!!
发信站
:
红果园
(2002年11月04日16: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
的题目
发信站
:
未来花园
(2002年11月03日20: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;
}
}