计算机专业面试题集计算机随笔2008-05-05 19:28:18 阅读2083 评论0 ??字号:大中小?订阅一些面试准备题(包括高质量c++题)const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。
事实上这个概念谁都有只是三种声明方式非常相似很容易记混。
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。
char * const cp; ( * 读成pointer to )const cp指向字符串;即指向字符串的常指针;const char * p;p指向字符串常量,即指向字符串常量的指针;char const * p;这个和上面的事一样的,表达的意思也是指向字符串常量的指针同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。
---------------------------------下面这个程序执行后会有什么错误或者效果:#define MAX 255int main(){unsigned char A[MAX],i;for (i=0;i<=MAX;i++)A[i]=i;}解答:MAX=255数组A的下标范围为:0..MAX-1,这是其一..其二.当i循环到255时,循环内执行:A[255]=255;这句本身没有问题..但是返回for (i=0;i<=MAX;i++)语句时,由于unsigned char的取值范围在(0..255),i++以后i又为0了..无限循环下去.注:char类型为一个字节,取值范围是[-128,127],unsigned char [0 ,255]---------------------------------编写用C语言实现的求n阶阶乘问题的递归算法:*******仅仅只要是一个算法就ok,不用管那么多,能用就行。
long int fact(int n){int x;long int y;if(n<0){printf("error!");if(n==0)return 1;x=n-1;y=fact(x); //这是一个递归调用过程,return (n*y);}Long int fact(int n){If(n<0){Printf(“error”);}If(n==0)Return 1;ElseReturn n*fact(n-1);}--------------------------------二分查找算法://已经在排好序的情况下进行查找1、递归方法实现:int BSearch(elemtype a[],elemtype x,int low,int high)/*在下届为low,上界为high的数组a中折半查找数据元素x*/{int mid;if(low>high) return -1;//errormid=(low+high)/2;if(x==a[mid]) return mid;if(x<a[mid]) return(BSearch(a,x,low,mid-1));else return(BSearch(a,x,mid+1,high));}Int base(elemtype a[],elemtype x,int low,int high){Int mid;If(low>high)Return -1;Mid=(low+high)/2;If(x==a[mid])Return mid;If(x<mid) return base(a,x,low,mid-1);Elae return base(a,x,mid+1,high);}2、非递归方法实现:int BSearch(elemtype a[],keytype key,int n)int low,high,mid;low=0;high=n-1;while(low<=high){mid=(low+high)/2;if(a[mid].key==key) return mid;else if(a[mid].key<key) low=mid+1;else high=mid-1;}return -1;}--------------------------------非递归计算如下递归函数的值(斐波拉契):f(1)=1f(2)=1f(n)=f(n-1)+f(n-2) n>2解:int f(int n){int i,s,s1,s2;s1=1;/*s1用于保存f(n-1)的值*/s2=1;/*s2用于保存f(n-2)的值*/s=1;for(i=3;i<=n;i++){s=s1+s2;s2=s1;s1=s;}return(s);}------------------------------交换两个数,不用第三块儿内存:int a = ……;int b = ……;a = a + b;b = a - b;a = a - b;-------------------------------Q1:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?1、OSI每层功能及特点a 物理层为数据链路层提供物理连接,在其上串行传送比特流,即所传送数据的单位是比特。
此外,该层中还具有确定连接设备的电气特性和物理特性等功能。
b 数据链路层负责在网络节点间的线路上通过检测、流量控制和重发等手段,无差错地传送以帧为单位的数据。
为做到这一点,在每一帧中必须同时带有同步、地址、差错控制及流量控制等控制信息。
c 网络层为了将数据分组从源(源端系统)送到目的地(目标端系统),网络层的任务就是选择合适的路由和交换节点,使源的传输层传下来的分组信息能够正确无误地按照地址找到目的地,并交付给相应的传输层,即完成网络的寻址功能。
d 传输层传输层是高低层之间衔接的接口层。
数据传输的单位是报文,当报文较长时将它分割成若干分组,然后交给网络层进行传输。
传输层是计算机网络协议分层中的最关键一层,该层以上各层将不再管理信息传输问题。
e 会话层该层对传输的报文提供同步管理服务。
在两个不同系统的互相通信的应用进程之间建立、组织和协调交互。
例如,确定是双工还是半双工工作。
f 表示层该层的主要任务是把所传送的数据的抽象语法变换为传送语法,即把不同计算机内部的不同表示形式转换成网络通信中的标准表示形式。
此外,对传送的数据加密(或解密)、正文压缩(或还原)也是表示层的任务。
g 应用层该层直接面向用户,是OSI中的最高层。
它的主要任务是为用户提供应用的接口,即提供不同计算机间的文件传送、访问与管理,电子邮件的内容处理,不同计算机通过网络交互访问的虚拟终端功能等。
2、TCP/IPa 网络接口层这是TCP/IP协议的最低一层,包括有多种逻辑链路控制和媒体访问协议。
网络接口层的功能是接收IP数据报并通过特定的网络进行传输,或从网络上接收物理帧,抽取出IP数据报并转交给网际层。
b 网际网层(IP层)该层包括以下协议:IP(网际协议)、ICMP(Internet Control Message Protocol,因特网控制报文协议)、ARP(Address Resolution Protocol,地址解析协议)、RARP(Reverse Address Resolution Protocol,反向地址解析协议)。
该层负责相同或不同网络中计算机之间的通信,主要处理数据报和路由。
在IP层中,ARP协议用于将IP地址转换成物理地址,RARP协议用于将物理地址转换成IP地址,ICMP协议用于报告差错和传送控制信息。
IP协议在TCP/IP协议组中处于核心地位。
c 传输层该层提供TCP(传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)两个协议,它们都建立在IP协议的基础上,其中TCP提供可靠的面向连接服务,UDP提供简单的无连接服务。
传输层提供端到端,即应用程序之间的通信,主要功能是数据格式化、数据确认和丢失重传等。
d 应用层TCP/IP协议的应用层相当于OSI模型的会话层、表示层和应用层,它向用户提供一组常用的应用层协议,其中包括:Telnet、SMTP、DNS等。
此外,在应用层中还包含有用户应用程序,它们均是建立在TCP/IP协议组之上的专用程序。
3、OSI参考模型和TCP/IP参考模型的区别:a OSI模型有7层,TCP/IP只有4层;b OSI先于协议出现,因此不会偏向于任何一组特定的协议,通用性更强,但有些功能不知该放哪一层上,因此不得不加入一些子层;TCP/IP后于协议出现,仅是将已有协议的一个描述,因此两者配合的非常好;但他不适合其他的协议栈,不容易描述其他非TCP/IP的网络;c OSI中网络层同时支持无连接和面向连接的通信,但在传输层上只支持面向连接的通信;TCP/IP中网络层只支持无连接通信,传输层同时支持两种通信;d 在技术发生变化时,OSI模型比TCP/IP模型中的协议更容易被替换。
----------------------------------------Q2:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用?TCP与UDP呢?解:与IP协议配套使用的还有三个协议:ARP-地址解析协议RARP-逆地址解析协议ICMP-因特网控制报文协议ICMPIP协议-网际协议IP地址、IP包头----------------------------------------Q3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?将网络互相连接起来要使用一些中间设备(或中间系统),ISO的术语称之为中继(relay)系统。
根据中继系统所在的层次,可以有以下五种中继系统:1.物理层(即常说的第一层、层L1)中继系统,即转发器(repeater)。
2.数据链路层(即第二层,层L2),即网桥或桥接器(bridge)。
3.网络层(第三层,层L3)中继系统,即路由器(router)。
4.网桥和路由器的混合物桥路器(brouter)兼有网桥和路由器的功能。
5.在网络层以上的中继系统,即网关(gateway).当中继系统是转发器时,一般不称之为网络互联,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。
高层网关由于比较复杂,目前使用得较少。
因此一般讨论网络互连时都是指用交换机和路由器进行互联的网络。
本文主要阐述交换机和路由器及其区别。
第二层交换机和路由器的区别:传统交换机从网桥发展而来,属于OSI第二层即数据链路层设备。
它根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。