AMD笔试真题及答案

以下内容来自于应聘者回忆整理

很多同学都想得到AMD的实习或者校招机会。那从过来人的角度谈谈,要通过AMD的实习、校招面试,都有哪些经验和注意事项呢?今天就跟大家分享一下。      

1、RISC 和 CISC 等其他指令集相比有哪些优点,请至少举出 5 个。

答案: (1)寻址方式少且简单,一般为 2—3 种,最多不超过 4 种,绝不出现存储器间接寻址方式。 (2)指令集中的指令数目一般少于 100 种,指令格式一般少于 4 种。 (3)指令功能简单,控制器多采用硬布线方式,以期更快的执行速度。 (4)平均而言,所有指令的执行时间为一个处理时钟周期。 (5)指令格式中用于指派整数寄存器的个数不少于 32 个,用于指派浮点数寄存器的个数不少于 16 个。 (6)强调通用寄存器资源的优化使用。 (7)支持指令流水并强调指令流水的优化使用。  

2、 windows 内核内存分为 paged memory 和 nonpaged memory,请问有什么区别? 

答案: paged memory:是指可以分页的内存,可以交换到硬盘文件上。 Nonpaged memory:不可分页,也就是不能交换到硬盘文件上。有些内存,比如驱动程序,内核代码是不 允许交换出去的,应该常驻内存,就使用 nonpaged memory。 

3、请问什么情况下,cache 中只放指令(数据直接从存储器存取)比 cache 中放数据和指令的效率高? 

答案:计算密集型 cache 中只放指令(数据直接从存储器存取)比 cache 中放数据和指令的效率高,可以充分利 用指令的局部原理。

4、windows API 里面用于线程同步的有哪些? 答案:共有 12 个 API

1) 临界区共有五个 API (1)InitializeCriticalSection 此函数用于设置临界区对象,即对临界区对象初始化。该函数必须在执行 EnterCriticalSection 前调用。单个 进 程 的 线程 可以 为 互斥 同 步 使用 临界 区 对象 。 进 程负 责分 配 临界 区 对 象使 用的 内 存, 可 以 通过对 CRITICAL_SECTION 类型变量的定义和使用来实现。

(2)EnterCriticalSection 此函数用于等待指定的临界区对象的所有权。授予调用线程所有权后,该函数返回,临界区对象在单个进程 的各线程内强制互斥同步。在线程拥有临界区对象以后,对同一个临界区对象应调用 EnterCriticalSection 函数, 防止发生死锁。在退出临界区后用 LeaveCriticalSe- ction 函数使其他线程可以进入临界区。 (3)TryEnterCriticalSection 此函数用没有阻塞的方式试图进入一个临界区。若函数调用成功,则进行调用的线程拥有对临界区的所有权, 否则立即返回。 (4)LeaveCriticalSection 此函数用于释放对临界区对象的所有权。每次线程对同一个对象执行 EnterCriticalSection 或 TryEnterCriticalSection 都必须调用 LeaveCriticalSection 函数。

(5)DeleteCriticalSection 此函数用于删除一个临界区对象,释放所有与不再为自己所控制的临界区对象有关的资源。一个临界区对象 被删除,就不能再对其调用函数 EnterCriticalSection,函数 TryEnterCriticalSection 和函数 LeaveCriticalSection 了。 

2) 互斥和信号量共有 7 个 API

(1) CreateMutex 此函数用于创建命名或未命名的互斥对象。这些互斥对象用于进程同步,当互斥对象不为任何线程拥有时才 处于信号态,否则将处于非信号态。若要线程释放其所有权,则线程在每次互斥对象处于非信号态时都调用函数 ReleaseMutex。当不再需要互斥对象时可以使用函数 CloseHandle 来关闭互斥对象。当所有互斥对象的打开句柄都 关闭时,就删除互斥对象。

(2)OpenMutex 用于返回存在的已命名互斥对象的句柄。该函数允许多个进程打开同一个互斥对象的句柄。该函数的调用一 定要在函数 CreateMutex 创建互斥对象之后,当不需要句柄时可以调用 CloseHandle 函数。

(3)ReleaseMutex 此函数用于释放互斥对象。若函数调用成功,互斥对象处于信号态。 (4)CreateSemaphore 此函数用于创建已命名或未命名的信号量对象,信号量用计数器实现同步。每次取信号量时(可利用函数 WaitForSingleObject 来取),信号量计数器递减;每次 ReleaseSemaphore 释放信号量值时,信号量计数器递增。计 数永远不会小于 0 或大于在 lSemMaxCount 参数中定义的值。

(5)OpenSemaphore 用于打开一个已经存在的命名的信号量对象。该信号量必须是函数 CreateSemaphore 创建的。如果不再需要 时,可以用函数 CloseHandle 关闭返回的句柄。

(6)WaitForSingleObject 此函数仅当在参数列表中指定的对象处于信号态或超过了超时间隔时,该函数才返回。

(7)ReleaseSemaphore 用来递增信号量的计数。对于 CreateSemaphore 函数创建的对象使用,计数可以达到设定的最大计数值。

5、有编号 1-50 的人,依次排列,然后单号出列,然后剩下的人重新编号,单号出列,依次类推,最后剩下一个 人,请问这个人原来编号是多少号?如果是每一次双号出列,请问这个人原来编号是多少? 

答案:单号出列:32 号 双号出列:1 号   

6、请问下面程序如果运行会出现什么结果?如果有错误请指出并改正。 include include class mystring{ public: mystring(){ m_str=NULL; } mystring(mystring& str){ if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str.m_str)]; strcpy(m_str,str.m_str); } mystring & operator=(const char *str){ if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str)+1]; strcpy(m_str,str); } ~mystring(){ if(m_str!=NULL){ delete m_str; } } private: char *m_str; }; int main(){ mystring str1; str1="hello world"; mystring str2; str2=str1; mystring str3=str2; return 0; }

答案: 程序运行会出现内存释放错误 错误共有四处,分别在下面改正的代码中标出。 include include class mystring{ public: mystring(){ m_str=NULL; } mystring(mystring& str){ /*if(m_str!=NULL){ delete []m_str; }*/ //错误 1,因为 m_str 没有被初始化,所以此处可能为 NULL,也可能不为 NULL,如果不为 null,则会出错,因 为 m_str 是一个随机的值。 m_str=new char[strlen(str.m_str)+1]; //错误 2:长度应该+1 strcpy(m_str,str.m_str); } mystring & operator=(mystring& str){ //错误 3:缺少赋值重载函数 if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str.m_str)+1]; //错误 2:长度应该+1 strcpy(m_str,str.m_str); } mystring & operator=(const char *str){ if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str)+1]; strcpy(m_str,str); } ~mystring(){ if(m_str!=NULL){ delete []m_str; //错误 4:析构函数中,应该析构数组 } } private: char *m_str; }; int main(){ mystring str1; str1="hello world"; mystring str2; str2=str1; mystring str3=str2; return 0; } ~

7、100 个乒乓球取胜之道,A,B 两个人轮流拿,A 先拿,一次只能拿[1,5]个,获胜者为拿到最后一个球的人。 请问 A 第一次该拿几个?以后又该怎么拿,才能够确保获胜?

 答案:A 先拿 4 个,然后 B 拿,设 B 拿 x 个,则每次 A 拿 6-x 个即可。

8、选择题:如果两个节点 x,y,preorder 遍历,x 在 y 之前,postorder 遍历,x 在 y 之后,请问 x,y 的关系为: A x 是 y 的左兄弟 B x 是 y 的右兄弟 C x 是 y 的祖先 D x 是 y 的后裔

答案:C

更多信息技术类岗位,请点击这里

  • 1、刺猬实习遵循行业规范,任何转载的稿件都会明确标注作者和来源
  • 2、刺猬实习的原创文章,请转载时务必注明"来源:刺猬实习",不尊重原创的行为刺猬实习或将追究责任
  • 3、作者投稿可能会经刺猬实习编辑修改或补充。

相关推荐