再帖 几道面试题(据说是INTEL公司的)
1\ 编译中的问题:全局变量如int i=5; int*(pf)()=foo; 分别在何时被初始化?设计时候如何具体的实现。
2\ 解释例如mov ax,100H 这样一条指令的cpu, os, memory等都完成了什么样的工作。
3\ Strlen()的C语言实现,不能使用任何变量。
4\ C语言参数的入栈顺序?为什么这么实现?
5\ C语言中字符串的翻转,最高效率(时间和空间)的实现?
6\ 4. 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统
(300M的CPU,50M的SDRAM)中运行,还需要优化吗?
7 \有两个线程
void producer()
{
while(1)
{
GeneratePacket();
PutPacketIntoBuffer();
Signal(customer);
}
}
void customer()
{
while(1)
{
WaitForSignal();
if(PacketInBuffer>10)
{
ReadAllPackets();
ProcessPackets();
}
}
}
(1)有没有其他方法可以提高程序的性能
(2)可不可以不使用信号之类的机制来实现上述的功能
大家挑着答吧
问题点数:20、回复次数:36Top
1 楼zhjg136(天星)回复于 2006-08-25 19:19:09 得分 1
沙发~Top
2 楼zenny_chen(ACE Intercessor)回复于 2006-08-25 21:12:41 得分 3
1、int i = 5;在编译时初始化;int (*fp)(void) = &foo;在连接时初始化。
3、
size_t strlen(const char *s)
{
if(!s)
return -1;
return (*s)? 1 + strlen(++s) : 0;
}
4、参数从右往左依次压入堆栈。
Top
3 楼OOPhaisky(异化$渴望成功~~)回复于 2006-08-25 21:31:59 得分 0
intel的东西真是够底层的。Top
4 楼zenny_chen(ACE Intercessor)回复于 2006-08-25 21:33:28 得分 3
6、需要。因为对于嵌入式系统,优化往往是指令集层的。如果另一个系统提供了更高效的指令集系统(如超标量、多核等),那么还是有很大可能对原来系统进行进一步优化的,并且该优化是值得的。
7、有。可以不使用semaphore等通信原语来完成该实现,不过还是要看customer运行的优先级等。
Top
5 楼i_noname(晚九朝五)回复于 2006-08-25 21:43:09 得分 0
现在想入intel可以死心了,intel的招聘计划已经freezing好几个月了,裁员行动还在继续...Top
6 楼sabcdefg(胖胖)回复于 2006-08-25 22:36:38 得分 0
markTop
7 楼colcn88((散花)只想让家里人过得更好)回复于 2006-08-25 23:45:02 得分 0
看Top
8 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-08-26 09:04:33 得分 3
4\ C语言参数的入栈顺序?为什么这么实现?
应该是从右向左的入栈顺序。因为C语言支持变参数函数,例如wsprintf(), 在编译的时候函数并不能确定参数的个数,所以函数不能完成"栈清空"的操作.Top
9 楼zdl1016(【不要给我分,以免影响我性欲】)回复于 2006-08-26 09:31:24 得分 0
to houdy(致力于图像/图形领域,成为有思想的程序员)
对第4题的解答我不太明白,能解释得更详细点吗?Top
10 楼petertangpei(双腿夹着灵魂赶路)回复于 2006-08-26 10:46:18 得分 0
MARKTop
11 楼zenny_chen(ACE Intercessor)回复于 2006-08-26 15:19:12 得分 2
To 楼主:
其实这很好理解。
参数从左往右依次压栈对于被调用的函数来说,对实参的处理将变得非常容易。
调用者(Caller)将参数从右往左压栈,那么对于最左边的函数,即第一个参数是在栈顶。那么被调用的函数(Callee)就可以直接用bp去取该参数,bp+4则指向第二个实参,依此类推。这是C调用协定。这样做的好处还有就是可以处理不定参数个数的函数调用,如:int printf(const char*, ...);
下面举个例子:
int sum(int a, int b, int c)
{
return a + b + c;
}
void main(void)
{
cout << "The value is: " << sum(1, 2, 3) << endl;
}
在main()函数中调用了sum,VC++.NET2003的处理为:
main:
cout << "The value is: " << sum(1, 2, 3) << endl;
0041B26E push offset std::endl (4194BFh)
0041B273 push 3 // 压第三个参数
0041B275 push 2 // 压第二个参数
0041B277 push 1 // 压第一个参数
0041B279 call sum (419A82h) // 调用sum函数
//////////////////////////////////////////////////////////////////////
0041B27E add esp,0Ch
0041B281 push eax
0041B282 push offset string "The value is: " (44F0C8h)
0041B287 push offset std::cout (458688h)
0041B28C call std::operator<<<std::char_traits<char> > (419AB4h)
0041B291 add esp,8
0041B294 mov ecx,eax
0041B296 call std::basic_ostream<char,std::char_traits<char> >::operator<< (4195E1h)
0041B29B mov ecx,eax
0041B29D call std::basic_ostream<char,std::char_traits<char> >::operator<< (419AE1h)
////////////////////////////////////////////////////////////////////////////
sum:
int sum(int a, int b, int c)
{
0041B210 push ebp
0041B211 mov ebp,esp
0041B213 sub esp,0C0h
0041B219 push ebx
0041B21A push esi
0041B21B push edi
0041B21C lea edi,[ebp-0C0h]
0041B222 mov ecx,30h
0041B227 mov eax,0CCCCCCCCh
0041B22C rep stos dword ptr [edi]
return a + b + c;
0041B22E mov eax,dword ptr [a] // a = bp + 8
0041B231 add eax,dword ptr [b] // b = bp + 12
0041B234 add eax,dword ptr [c] // c = bp + 16
// eax作为返回值
}
Top
12 楼zdl1016(【不要给我分,以免影响我性欲】)回复于 2006-08-26 16:14:29 得分 0
哇噻,谢谢楼上,懂了,全懂了..
zenny_chen(ACE Intercessor)Top
13 楼ilovechao1314(有点晕了)回复于 2006-08-26 16:31:50 得分 0
markTop
14 楼universee(吾乃太极语言之父)回复于 2006-08-26 16:49:02 得分 0
这个呢?
5\ C语言中字符串的翻转,最高效率(时间和空间)的实现?
Top
15 楼zdl1016(【不要给我分,以免影响我性欲】)回复于 2006-08-26 17:56:08 得分 0
还有几个问题没搞定,大家加油呀Top
16 楼property1(lubiao)回复于 2006-08-26 21:48:58 得分 1
6 int StrLen(char* p)
7 {
8 if (*p == '\0')
9 return 0;
10 return StrLen(p+1) + 1;
11 }
Top
17 楼lingboli(凌波丽)回复于 2006-08-26 22:20:56 得分 0
都是高手啊,学习学习...Top
18 楼zenny_chen(ACE Intercessor)回复于 2006-08-26 22:53:10 得分 2
5、可能还不算最高:
#include <assert.h>
void reverse_string(char *dest, const char *src)
{
const char *temp = src - 1;
assert(dest && src);
while(*src++);
src -= 2;
while(src != temp)
*dest++ = *src--;
*dest = '\0';
}Top
19 楼wshuangminlg(这里有你想要的 http://31767702.qzone.qq.com/)回复于 2006-08-26 23:44:00 得分 0
ASP。NET 2.0 新技术讨论群:20810637(群主)Top
20 楼jaycsu(jaycsu)回复于 2006-08-27 00:10:22 得分 0
mark
Top
21 楼wanghi(海海)回复于 2006-08-27 10:22:40 得分 0
markTop
22 楼kingtoo010()回复于 2006-08-27 10:44:59 得分 0
帮顶..接分...
------------------------------------------------------------------------------------
100M.Net空间+50M企业邮局=60元/年
100M.Net空间+国际顶级域名=100元/年
国际顶级域名.com.net.cn=50元/年
本站申请域名可绑定免费10M Asp.Net空间
1000M.Net空间 + 100M MsSql数据库 + 1000M企业邮局 + 顶级域名=600元/年
数据库 企业邮局 网站推广 整机租用 美国空间 网站建设 均有售
还有很多优惠套餐提供给各个用户层.
有意者可联系电话:021-64802212 传真:021-64802212
咨询信箱:info@kingtoo.com 咨询OICQ:68311305,379620139 81778640Top
23 楼yifeng123(Bater Late Than Never)回复于 2006-08-27 12:04:15 得分 1
mov ax ,100h
首先os从mem中取出指令,解释后,由cpu把100h存入axTop
24 楼zenny_chen(ACE Intercessor)回复于 2006-08-27 15:19:32 得分 2
To yifeng123(Bater Late Than Never) :
指令是由操作系统取的吗?那么CPU做什么事啊?
解释是指什么?
只能说操作系统在系统态或用户态去执行该指令。在执行该指令过程中由CPU去取指令,执行指令功能。Top
25 楼Juchiyufei(三更半夜我送你回家.总统也许我做不到.今生难得的遇见你,我们就应该在一起.....)回复于 2006-08-27 15:32:18 得分 0
size_t strlen(const char *s)
{
if(!s)
return -1;
return (*s)? 1 + strlen(++s) : 0;
}
用递归来实现,真是聪明呀Top
26 楼laiwusheng(风清扬)回复于 2006-08-27 16:12:14 得分 0
markTop
27 楼tomtom123(abc)回复于 2006-08-27 17:36:08 得分 0
size_t strlen(const char *s)
{
if(!s)
return -1;
return (*s)? 1 + strlen(++s) : 0;
}
======
UPTop
28 楼songlife33(美女,偶们结婚吧)回复于 2006-08-28 09:11:15 得分 1
建议
zenny_chen(ACE Intercessor)
成立我们中国的intel公司,嘿嘿,厉害Top
29 楼zenny_chen(ACE Intercessor)回复于 2006-08-28 20:34:32 得分 0
呵呵,还差远了。
Intel以芯片设计为其特色,在这方面,我只能跟着它的编程手册走。Top
30 楼hot305(hot305)回复于 2006-08-29 09:55:08 得分 0
好好学习Top
31 楼zdl1016(【不要给我分,以免影响我性欲】)回复于 2006-08-29 10:16:10 得分 0
帖子快到结了时候了 问题还没有全部搞定..不过也差不多了...Top
32 楼wb19822002()回复于 2006-08-29 11:08:34 得分 1
"初始化"只能说是在加载时、还是运行时,不能说编译时还是连接时吧Top
33 楼kagomelee(卡通fans)回复于 2006-09-07 09:07:35 得分 0
markTop
34 楼Golfen()回复于 2006-09-12 12:10:24 得分 0
第7题:
1.可以提高,让producer产生10个package再notify customer
2.可以用一个glaobal variable,但是效率不高Top
35 楼brouse130()回复于 2006-11-05 17:52:02 得分 0
顶!!!!!Top
36 楼Fantasy_mysky()回复于 2006-11-13 19:32:13 得分 0
新手学习ing...Top



