intel今年刚大裁员,所以没有大规模的校园招聘。笔试题目又白准备了。
标 题: Re: 往年的intel试题zz
发信站: BBS 水木清华站 (Mon Nov 4 17:27:31 2002), 站内信件
我来做一下
【 在 Yean (我真的不懂 ) 的大作中提到: 】
: 标 题: 往年的intel试题zz
: 发信站: BBS 水木清华站 (Sun Nov 3 18:21:52 2002)
: 1. 三个float:a,b,c
: 问值
: (a+b)+c==(b+a)+c
: (a+b)+c==(a+c)+b
这个问题主要是考虑浮点运算的精度问题,在指令级的运算中,
a+b
和
b+a
的精度是等效的,而
(a+b)
作为一个整体,相对于
a
和
b
会丢失精度。
从而,
(a+b)+c==(b+a)+c
的值是
1
,而第二问的值极大的概率是
0
另外,需要提醒的是,浮点数在程序设计中一般不应该用来做
==
的比较。
: 2. 把一个链表反向填空
简单的做法是把每个节点的Next指针指向改为指向Forward
: 3. 设计一个重采样系统,说明如何anti-alias
这个东西俺不明白,但是直觉应该是用sinc函数作为中间的桥梁
: 4.
y1(n)=x(2n), y2(n)=x(n/2),
问:
: 如果y1为周期函数,那么x是否为周期函数
: 如果x为周期函数,那么y1是否为周期函数
: 如果y2为周期函数,那么x是否为周期函数
: 如果x为周期函数,那么y2是否为周期函数
这个就不做了,信号与系统的基本概念
: 5. 如果模拟信号的带宽为5KHZ,要用8K的采样率,怎么办。
用双通道就可以了,两个通道的夹角不超过2*arccos(5/8)
: 4. 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一
: 个系统: (300M的CPU,50M的SDRAM)中运行,还需要优化吗?
需要重新优化,因为最优的程序通常考虑了CPU的运算能力和
存储介质传输速度之间的匹配。当CPU频率提高,传输速度不
变时,可是适当增加流水线负荷来提高CPU利用率。
: 5. x^4+a*x^3+x^2+c*x+d最少需要作几次乘法
3
次。
第一次:
y=x*x,
第二次:
z=y*x
,第三次:
t=y*y
: 7. 下面哪种排序法对12354最快
: a quick sort
: b.buble sort
: c.merge sort
选
b
: 8. 哪种结构,平均来讲,获取一个值最快
: a. binary tree
: b. hash table
: c. stack
选
b
: 大家讨论一下答案吧
#include "stdafx.h"
#include <iostream.h>
struct bit
{
int a:3;
int b:2;
int c:3;
};
int main(int argc, char* argv[])
{
bit s;
char *c = (char*)&s;
*c = 0x99;
cout << s.a <<endl <<s.b<<endl<<s.c<<endl;
return 0;
}
Output:
1
-1
-4
个人解释:
int
是有符号的,
这里的冒号代表这个
int
数的
bit
位数,
另外
a,b,c
应该是
little-endian
,
a
是最低
3
位,
b
是中间
2
位,
c
是最高三位
0x99
的二进制是
10011001
所以
a=001
,
b=11
,
c=100
因为
int
是有符号的,所以
a=1,b
的符号位是
1
,所以是补码,
-1
取反得原码就是
1
,所以是
-1
,
c
的符号位也是
1
,但是补码是
00
,所以代表
-4
。。。
发信人: legenderic (eric), 信区: job
标 题: intel lab 复旦的笔试题
发信站: 饮水思源 (2003
年11月07日20:54:25 星期五), 站内信件
大题
1。写出下列信号的
奈亏斯特频率
(1)f(t)=1+cos(2000pait)+sin(4000pait)
(2)f(t)=sin(4000pait)/pait
(3)f(t)=(sin(4000pait)的平方)/pait
2.填程序
把一个计算m^n的程序填充完整
大概的意思是:
有一个全局数组char s[BUFSIZE]
利用这个数组计算,就是每个单元存放计算结果的一位,index小的存放低位,index大
的存放高位
3。有两个线程
void producer()
{
while(1)
{
GeneratePacket();
PutPacketIntoBuffer();
Signal(customer);
}
}
void customer()
{
while(1)
{
WaitForSignal();
if(PacketInBuffer>10)
{
ReadAllPackets();
ProcessPackets();
}
}
}
(1)有没有其他方法可以提高程序的性能
Producer
检查
PacketInBuffer>10
才发信号给
customer
(2)可不可以不使用信号之类的机制来实现上述的功能
Samephore
?
4。优化下面的程序
(0)sum=0
(1)I=1
(2)T1=4*I
(3)T2=address(A)-4
(4)T3=T2[T1]
(5)T4=address(B)-4
(6)T5=4*I
(7)T6=T4[T5]
(8)T7=T3*T5
(9)sum=sum+T6
(10)I=I+1
(10)IF I<20 GOTO (2
(
3
)和(
5
)可以放到(
2
)前面,因为
T2
和
T4
的值是确定的
(
8
)可以去掉,
T7
没有用到
考的题目大致上是这样的:
CS考题:大约三四题涉及体系结构,诸如pipeline,缓存的hit-ratio之类
考了一些C/C++的知识
有一题类似IQ题
最最恶心的是有个写的很烂的程序,让你填空,反正我在15分钟内
没作出来,可能我比较弱吧。
EE考题:一题关于恒比码,是一种纠错码。
一题是FFT
一题枚举类型定义的(似乎应该放在CS里面)
又一题IQ
1/ 编译中的问题:全局变量如int i=5; int*(pf)()=foo; 分别在何时被初始化?设计时候如何具体的实现。
int i = 5;
在编译时初始化;
int (*fp)(void) = &foo;
在连接时初始化。
2/ 解释例如mov ax,100H 这样一条指令的cpu, os, memory等都完成了什么样的工作。
只能说操作系统在系统态或用户态去执行该指令。在执行该指令过程中由
CPU
去取指令,执行指令功能。
3/ Strlen()的C语言实现,不能使用任何变量。
int StrLen(char* p)
{
if (*p == '/0')
return 0;
return StrLen(p+1) + 1;
}
4/ C语言参数的入栈顺序?为什么这么实现?
应该是从右向左的入栈顺序。因为
C
语言支持变参数函数,例如
wsprintf(),
在编译的时候函数并不能确定参数的个数,所以函数不能完成
"
栈清空
"
的操作
.
参数从左往右依次压栈对于被调用的函数来说,对实参的处理将变得非常容易。
调用者(
Caller
)将参数从右往左压栈,那么对于最左边的函数,即第一个参数是在栈顶。那么被调用的函数(
Callee
)就可以直接用
bp
去取该参数,
bp+4
则指向第二个实参,依此类推。这是
C
调用协定。这样做的好处还有就是可以处理不定参数个数的函数调用,如
:int printf(const char*, ...);
5/ C语言中字符串的翻转,最高效率(时间和空间)的实现?
6/ 4. 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗?
需要。因为对于嵌入式系统,优化往往是指令集层的。如果另一个系统提供了更高效的指令集系统(如超标量、多核等),那么还是有很大可能对原来系统进行进一步优化的,并且该优化是值得的。
应该不需要
因为优化与
cpu
的频率无关,而是与指令集和内存、
cache
有关优化时有不同的指令集,优化后的结果(程序指令集合)不同,这点应该容易理解
。而与内存和
cache
(缓存)有关是因为
内存和
cache
的存储管理方面(假如是页面管理)、
初始的程序(分页)有多少页面已经存储在内存或
cache
中,这对优化很重要。
具体到存储管理系统有关
7 /有两个线程
void producer()
{
while(1)
{
GeneratePacket();
PutPacketIntoBuffer();
Signal(customer);
}
}
void customer()
{
while(1)
{
WaitForSignal();
if(PacketInBuffer>10)
{
ReadAllPackets();
ProcessPackets();
}
}
}
(1)有没有其他方法可以提高程序的性能
(2)可不可以不使用信号之类的机制来实现上述的功能
有。可以不使用
semaphore
等通信原语来完成该实现,不过还是要看
customer
运行的优先级等。