範文齋

位置:首頁 > 職場範文 > 面試

計算機面試題

面試1.08W

一些面試準備題(包括高質量c++題)

計算機面試題

const char*, char const*, char*const的區別問題幾乎是C++面試中每次都會有的題目。

事實上這個概念誰都有隻是三種聲明方式非常相似很容易記混。

Bjarne在他的The C++ programming Language裏面給出過一個助記的方法:

把一個聲明從右向左讀。

char * const cp; ( * 讀成 pointer to )

cp is a const pointer to char

const char * p;

p is a pointer to const char;

char const * p;

同上因爲C++裏面沒有const*的運算符,所以const只能屬於前面的類型。

---------------------------------

下面這個程序執行後會有什麼錯誤或者效果:

#define MAX 255

int main()

{

unsigned char A[MAX],i;

for (i=0;i<=max;i++)

A[i]=i;

}

解答:

MAX=255

數組A的下標範圍爲:-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階階乘問題的遞歸算法:

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);

}

--------------------------------

二分查找算法:

1、遞歸方法實現:

int BSearch(elemtype a[],elemtype x,int low,int high)

/*在下屆爲low,上界爲high的數組a中折半查找數據元素x*/

{

int mid;

if(low>high) return -1;

mid=(low+high)/2;

if(x==a[mid]) return mid;

if(x

else return(BSearch(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) return mid;

else if(a[mid]

else high=mid-1;

}

return -1;

}

--------------------------------

非遞歸計算如下遞歸函數的值(斐波拉契):

f(1)=1

f(2)=1

f(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/Ip

a 網絡接口層 這是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-因特網控制報文協議ICMp

Ip協議-網際協議

Ip地址、Ip包頭

----------------------------------------

Q3:請問交換機和路由器分別的實現原理是什麼?分別在哪個層次上面實現的?

將網絡互相連接起來要使用一些中間設備(或中間系統),ISO的術語稱之爲中繼(relay)系統。根據中繼系統所在的層次,可以有以下五種中繼系統:

1.物理層(即常說的第一層、層L1)中繼系統,即轉發器(repeater)。

2.數據鏈路層(即第二層,層L2),即網橋或橋接器(bridge)。

3.網絡層(第三層,層L3)中繼系統,即路由器(router)。

4.網橋和路由器的混合物橋路器(brouter)兼有網橋和路由器的功能。

5.在網絡層以上的中繼系統,即網關(gateway).

當中繼系統是轉發器時,一般不稱之爲網絡互聯,因爲這僅僅是把一個網絡擴大了,而這仍然是一個網絡。高層網關由於比較複雜,目前使用得較少。因此一般討論網絡互連時都是指用交換機和路由器進行互聯的網絡。本文主要闡述交換機和路由器及其區別。

第二層交換機和路由器的區別:

傳統交換機從網橋發展而來,屬於OSI第二層即數據鏈路層設備。它根據MAC地址尋址,通過站表選擇路由,站表的建立和維護由交換機自動進行。路由器屬於 OSI第三層即網絡層設備,它根據IP地址進行尋址,通過路由表路由協議產生。因特網的路由選擇協議:內部網關協議IGp和外部網關協議EGp

第三層交換機和路由器的區別:

在第三層交換技術出現之前,幾乎沒有必要將路由功能器件和路由器區別開來,他們完全是相同的:提供路由功能正在路由器的工作,然而,現在第三層交換機完全能夠執行傳統路由器的大多數功能。

綜上所述,交換機一般用於LAN-WAN的連接,交換機歸於網橋,是數據鏈路層的設備,有些交換機也可實現第三層的交換。路由器用於WAN-WAN 之間的連接,可以解決異性網絡之間轉發分組,作用於網絡層。他們只是從一條線路上接受輸入分組,然後向另一條線路轉發。這兩條線路可能分屬於不同的網絡, 並採用不同協議。相比較而言,路由器的功能較交換機要強大,但速度相對也慢,價格昂貴,第三層交換機既有交換機線速轉發報文能力,又有路由器良好的控制功 能,因此得以廣播應用。

-----------------------------------------------

Q4:請問C++的類和C裏面的struct有什麼區別?

c++中的類具有成員保護功

標籤:面試題 計算機