(1.4.10)SXF笔试题汇总

来源:互联网 发布:建筑优化 编辑:程序博客网 时间:2024/06/15 07:36

(二)主要内容:

1、题目概述

(1)C方面:

这一部分比较简单,主要是类似指针空间分配、strcpy(主要是考第一个参数是否有空间,结合指针空间分配考)、二重指针、++及――(先加后加,先减后减)等,还有就是volatile及register修饰符的意思。

(2)其他方面:

这一部分比较杂,什么都可以考你,多半都是基础知识,尤其是硬件方面,华为的主要题目为:(主要列出C以外的题目,我认为C是非常简单的,^_^)

2、具体题目

(1)选择题部分:

1、255.255.254.0网段最多能支持多少主机?(大概有5个备选项)
256 
2、10M网卡传输过程中物理层采用什么编码?(SNAP?)(大概有4个备选项)

曼彻斯特编码
3、栈与队列的特点?(备选大概只有两个,A为FIFO,B为LIFO)

4、Cache的工作方式划分?(大概也有4个答案,大概是:write-none,write-all,write-through,write-back)。
 write-none,write-all,write-through( 写通 cache ,执行写操作时同时写入主存与cache)  write-back (写回 cache ,执行写操作时不写入主存,除非需要替换)
5、什么叫NMI中断?(四个备选项)
不可屏蔽中断
6、RISC主要性能及特性?(大概有6个备选项)

精简指令集, RISC 微处理器不仅精简了指令系统,采用超标量和超流水线结构;它们的指令数目只有几十条,却大大增强了并行处理能力  性能特点一:由于指令集简化后,流水线以及常用指令均可用硬件执行;

性能特点二:采用大量的寄存器,使大部分指令操作都在寄存器之间进行,提高了处理速度;

性能特点三:采用缓存— 主机—外存三级存储结构,使取数与存数指令分开执行,使处理器可以完成尽可能多的工作,且不因从存储器存取信息而放慢处理速度。


7、在嵌入式系统中,所谓的北桥指的是什么?
 南北桥  主要适用于 INTEL  X86 结构体系,和嵌入式系统没有直接的关联。  北桥  主要指母板上 CPU 和内存等高速核心部分的控制和通讯桥接芯片,而 南桥  则指和扩展总线和 IO 的控制和通讯桥接芯片。所谓南北的涵义主要体现在其芯片组在母板上的位置(相对于 CPU  —— 上北下南。在嵌入式系统中通常叫AHB/APB 
实际上就是高速总线和低速总线

(2)填空题


1 变量和值的存储位置(堆/栈/代码段/数据段等)?

2 sizeof
struct
{
   short a;
   long b;
   char c;
}d;
sizeof(d)? 为什么在不同的平台上得到的值不一样?

3 找规律
2
1 2
1 1 1 2
3 1 1 2
1 3 1 1 2
————— 问下一行应该填什么?为什么?

4、Main函数中两个参数的作用

第一个形参argc是一个整型变量,用于指出命令行中字符串的个数,第二个形参argv是一个指针数组,其元素指向字符型数据。用带参数的main函数可以直接从命令行得到参数值(这些值是字符串),在程序运行时,可以根据输入的命令行中的不同情况进行相应的处理。利用main函数中的参数可以使程序从系统得到所需的数据,增加了处理问题的灵活性。

4 linux(Redhat)的启动顺序?

当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导 Linux,Linux首先进行内核的引导,接下来执行init程序,init程序调用了rc.sysinit和rc等程序,rc.sysinit和rc 当完成系统初始化和运行服务的任务后,返回init;init启动了mingetty后,打开了终端供用户登录系统,用户登录成功后进入了Shell,这 样就完成了从开机到登录的整个启动过程。

第一步:通过/boot/vm进行启动 vmlinuz
第二步:init /etc/inittab
第三步:启动相应的脚本,并且打开终端
rc.sysinit
rc.d(里面的脚本)
rc.local
第四步:启动login登录界面 login
第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的


5 c++中虚函数如何定义,使用时应该注意什么?


6 从1-100的数中取出10个数的不同种取法,打印所有的取法。


7 如何用最简单的程序实现大端小端的判断。

int checkEnd(){int i=0x12345678;char *c=(char *)&i; return(*c==0x12)}

8 如何判断两个单向链表是否有相交,并找出交点。

9 有1000个球和10个箱子,将所有的球装入10箱子中,问如何装球,使得你可以取出不同箱子的组合便可 得到1-1000球。

10 八皇后问题,堆栈很少,要求不能用递归。

11 订票系统

12 用一个程序示意常见的错误能够导致栈破坏,如何检查?

#include "string.h"int main(){    char str[5];    strcpy(str, "123456789");    return 0;}


13 用锁效率低,有那些方法可以避免或减少锁的使用?

将表建立表级锁,减少锁数量的使用


14 如何在Release版本中查找以下问题,
a 内存泄漏 b 段错误导致非法操作
c 程序CPU占用100%

检查window (release)下的内存泄漏
1、 放置关键字 assert()
2、 生成map 文件。它并不往可执行文件exe 中添加任何东西,只是在编译的时候将各个函数入口地址记录在后缀为.map的文件中,程序崩溃的时候可以得到一个EIP地址,通过地址知道崩溃所在函数
3、 可以设置断点,在希望设置断点的地方加入 _ASM int 3
4、 可以通过编译时的汇编程序看出
5、 采用第三方工具
查找段错误导致的非法操作用
ptrace系统调用跟踪调试运行中的进程(truss、strace或ltrace的原理都是根据ptrace系统调用跟踪调试运行中的进程)
用truss跟踪clint的系统调用来找出错误,clint是c++静态源码分析工具。通过ports安装好之后利用调试工具truss即可。 


15 、C++拷贝构造函数和赋值运算符有那些不同和相同点。

同:都可以对对象的成员进行赋值
异:
拷贝构造函数首先是一个构造函数,它调用的时候产生一个对象,是通过参数传进来的那个对象来初始化,产生的对象。
赋值是把一个对象赋值给一个原有的对象,而且还要检查一下两个对象是不是同一个对象,如果是的话就不做任何操作。

16 比较哈希表和平衡二叉树的特点,它们分别如用那些场合。

17 spinlock,mutex,semaphore,vitical section的作用与区别?

1.spinlock:自旋锁。是专为防止多处理器并发而引入的一种锁。
2.mutex:互斥量。只有拥有互斥对象的线程才有访问公共资源的权限。保证了资源不会同时被多个线程访问。
3.semaphore:信号量。允许多个线程同时访问资源,限制访问资源的最大线程数。
4.critical section:临界区。任意时刻只允许一个线程对共享资源进行访问。

18 正则表达式

grep  egrep命令

19 字符串匹配问题。要求在s1中删除所有s2的字符,要用最快的算法

20 函数前的static和volatile变量中关键字的作用

21、软件开发过程包含哪些阶段?各阶段质量保证措施是什么?

需求分析 系统设计 实现 文档管理 

22、使用C++赋值运算符应注意什么地方?

如果函数的返回值是一个对象,有些场合用引用传递替换值传递可以提高效率。而有些场合只能用值传递而不能用引用传递,否则会出错。

对于赋值函数,应当用引用传递的方式返回String对象。如果用值传递的方式,虽然功能仍然正确,但由于return语句要把 *this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率。

对于相加函数,应当用值传递的方式返回String对象。如果改用引用传递,那么函数返回值是一个指向局部对象temp引用。由于temp在函数结束时被自动销毁,将导致返回的引用无效

23、exit()和_exit() 的区别。

exit()’与‘_exit()’的基本区别在于前一个调用实施与调用库里用户状态结构(user-mode constructs)有关的清除工作(clean-up)而且调用用户自定义的清除程序,在退出程序前,关闭文件,清除缓存。后一个函数只为进程实施内核清除工作。不关闭文件,不清楚缓存。

24、哪些方法可让一个进程仅有一个实例运行?

设置临界区

静态模式

使用Microsoft提供的互斥类Mutex

使用API函数,获取当前进程,遍历正在有相同名字运行的进程。

25、红黑树比AVL树的优势在哪

红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。 红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高
26、阻塞模式的recv在没受到数据的情况下如何返回?

将recv()函数的标志位设为停止等待 或者设置一个延时退出,超时返回什么的  
    recv(fd, buf, sizeof(buf), MSG_DONTWAIT);
  这里采用了MSG_DONTWAIT标志,它的作用是告诉recv()函数如果有数据到来的话就接受全部数据并立刻返回,没有数据的话也是立刻返回,而不进行任何的等待。这里的MSG_DONTWAIT 是我们自己定义的一个标志。

27、strcpy()为什么会造成缓冲区溢出?可用哪个函数替代?

造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数,可用strncpy() 函数替代。

28、给定一个int型数n,写一个尽可能简单的函数判断n是否为2的幂,不能用循环。

bool foo(int n)         

{               

int a=n; 

 if(n<=0) return false;   

a=((a&0xAAAAAAAA)>>1)+(a&0x55555555);       

a=((a&0xCCCCCCCC)>>2)+(a&0x33333333);       

a=((a&0xF0F0F0F0)>>4)+(a&0x0F0F0F0F);        

a=((a&0xFF00FF00)>>8)+(a&0x00FF00FF);              

a=((a&0xFFFF0000)>>16)+(a&0x0000FFFF);              

if(a==1) return true;              

else return false;         

 }

29.VC中有哪些方法避免C编译头文件重复。
#ifndef   #define    #endif  #pragma once

30、异步IO和同步IO有什么区别?举例说明有几种(如read)?
异步IO当函数返回时不一定就完成了IO操作,而同步IO已经完成了。所以异步IO需要有一个事件,当IO完成时会设置此事件,调用者在事件上等待。一般说来,异步I/O是和同步I/O相比较来说的,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完. 相反,异步I/O操作在后台运行,I/O操作和应用程序可以同时运行,提高了系统性能; 使用异步I/O会提高I/O流量,如果应用是对裸设备进行操作,这种优势更加明显
, 因此象数据库,文件服务器等应用往往会利用异步I/O,使得多个I/O操作同时执行.


31、Linux命令

1、在linux下,查看目录大小的命令是:du $ du -sm
2、修改文件属性的命令是:chmod [options] mode files
3、切换为其他用户身份的命令是:su-filemane



(一)主要题型:


选择题(每题3分,约20题吧,具体什么题都有,包括网络、C以及其他硬件方面的基础知识);

简答题(总分约40分,主要包括读C程序给出结果同时给出适当的解释及其他一些硬件方面的问题);


(2)简答题:

1、说说轮巡任务调度与抢占式任务调度的区别?(大概为8分吧,记不清了)


轮询任务调度与抢占式任务调度的区别在于抢占式调度可以因为优先级高的任务抢占cpu,而轮询的不能。 轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。


2、什么叫存储器高速缓存技术,其主要目的?(大概6分)

Cache即高速缓冲存储器,是位于CPU与主存间的一种容量较小但是速度很高的存储器.采用Cache的理由是由于CPU的速度远高于主存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率.

3、画出计算机组成的最小逻辑框图。(哼,这道题竟然10分)

http://wenku.baidu.com/link?url=namG_kabrICQX_ZNhASQFcYaMzu0Qy6i83KsJ-ysyT_eoLPXwR8I9D-U3nKPKvV1dF00nF-gJNiWYuQ_fy_twA7hBuWqPc0_G-PbG9F8d73




4、谈谈Volatile与Register修饰符的作用?

extern 意为“外来的”。它的作用在于告诉编译器:这个变量或者函数的定义在别的地方,当遇到此变量或函数时应到其他模块中寻找其定义。
(PS:这个变量,它可能不存在于当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个Dll的输出中。)

extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的

egister修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中(而不是栈或堆),以加快其存储速度。然而,编译器不见得会这么做,因此效果一般般。

它是被设计用来修饰被不同线程访问和修改的变量。直接从地址中读取,从而保证了可见性。

auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。

Const用了定义一个常量,
1、用在变量前面的时候可以避免变量被修改
2、用在函数声明部分允许const 的类对象成员访问const 成员函数,如果类的成员函数不会对数据成员进行修改的话最好把该函数定义为const类型,这样无论是const的类对象还是非const 的类对象都可以访问该函数
3、可以用来代替define ,define 只是简单的代替,但是const 还会进行类型检查。


5、release版本的可执行程序为什么非常大?

release版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。


6、有红、绿、蓝三色球分别3,2,1个。取任意两个不同颜色的球都会使它们变成第三种颜色的两个球。问最少取多少次,可使这些球都变成同一种颜色? 

无论多少次,都不可以使这些球变成同一种颜色,
分析:       
 一、对于(R,R,R,G,G,B)即(3,2,1),有:             
  i.  (R,G) ---> (B,B,B,R,R,G)即(3,2,1)              
 ii. (R,B)  ---> (G,G,G,G,R,R)即(4,2)              
 iii. (G,B) ---> (R,R,R,R,R,G)即(5,1)        
对于(G,G,G,G,R,R)即(4,2),有 :             
  i. (R,G) ---> (G,G,G,B,B,R)即(3,2,1)         
对于(R,R,R,R,R,G)即(5,1)有 :              
 i. (R,G) ---> (R,R,R,R,B,B)即(4,2)        
 因此,只有三种状态(3,2,1), (4,2)和(5,1),不可能出现(6,0)这种情况。


7、

 
0 0
原创粉丝点击