華為筆試題六

2021-04-28 17:55:03 字數 2828 閱讀 1681

1.請你分別畫出osi的七層網路結構圖和tcp/ip的五層結構圖。

osi 七層網路模型

應用層表示層

會話層傳輸層

網路層資料鏈路層

物理層

tcp五層模型

應用層傳輸層

網路層鏈路層

物理層 

2.請你詳細地解釋一下ip協議的定義,在哪個層上面?主要有什麼作用?tcp與udp呢?

ip協議(internet protocol)又稱網際網路協議,是支援網間互連的資料報協議,它與tcp協議(傳輸控制協議)一起構成了tcp/ip協議族的核心。它提供網間連線的完善功能, 包括ip資料報規定互連網路範圍內的ip位址格式。

ip是網路層協議,工作在資料鏈路層的上面。

ip協議的作用就是向傳輸層(tcp層)提供統一的ip包,即將各種不同型別的mac幀轉換為統一的ip包,並將mac幀的物理位址變換為全網統一的邏輯位址(ip位址)。這樣,這些不同物理網路mac幀的差異對上層而言就不復存在了。正因為這一轉換,才實現了不同型別物理網路的互聯。

tcp和udp都是傳輸層協議.

tcp(transmission control protocol,傳輸控制協議)是面向連線的協議,在收發資料前,必須和對方建立連線。

udp(user data protocol,使用者資料報協議)是與tcp相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料報傳送過去。

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

交換機擁有一條高頻寬的背部匯流排和內部交換矩陣。交換機的所有的埠都掛接在這條背部匯流排上,當控制電路收到資料報以後,處理埠會查詢記憶體中的位址對照表以確定目的mac(網絡卡的硬體位址)的nic(網絡卡)掛接在哪個埠上,通過內部交換矩陣迅速將資料報傳送到目的埠。目的mac若不存在,交換機才廣播到所有的埠,接收埠回應後交換機會「學習」新的位址,並把它新增入內部位址表中。

所謂路由就是指通過相互連線的網路把資訊從源地點移動到目標地點的活動。那麼路由器具體是如何進行「翻譯」工作的呢?我們平時在學習、翻譯英語時,肯定會準備一本英漢字典,通過它來實現英文與中文之間的互現轉換。而對於路由器而言,它也有這種用於翻譯的字典--路徑表。路徑表(routing table)儲存著各種傳輸路徑的相關資料,如子網的標誌資訊、網上路由器的個數和下乙個路由器的名字等內容。路徑表可以是由系統管理員固定設定好的,也可以由系統動態修改,可以由路由器自動調整,也可以由主機控制。

4.請問c++的類和c裡面的struct有什麼區別?

c++中的類有建構函式,析構函式,繼承等等。

c中的struct中,沒有建構函式等c++類才有的元素。

然而,c++中的class和c++的struct基本上是等同的,除了一點

它們資料成員的預設訪問許可權是不同的。

class的預設訪問許可權為private,而struct為public.

ps:

1.c語言的struct和c++的struct有什麼區別?

答:c的struct裡面只能有成員資料,不能有函式,如:

//c的struct

struct strstr1;//c語言經常在這裡加上乙個struct的例項(在c++裡面可以稱為物件)

//c++

struct str;//一般不直接產生乙個物件,你想產生也行,但是習慣還是應該養成否則別人會覺得彆扭的

2.c++的struct和c++的class有什麼區別?

答:唯一的區別是預設的許可權不一樣,上面的例子同時給出了說明了

3.c語言的struct和c++的class有什麼區別?

答:前面的兩個問題解決了,這個就自然明白了。

前面c++的那個struct寫出class的形式如下:

class str;

5.請講一講析構函式和虛函式的用法和作用。

假設有乙個名為a的類,那麼a的析構函式為如下形式

a::~a(){}, 沒有引數也無返回值。

析構函式主要作用是在物件銷毀前釋放其占用的資源。

要將類的成員函式定義為虛函式,只需在函式宣告前加上關鍵字virtual.

虛函式的作用是為了實現多型,可以在執行時決定具體呼叫哪個函式(動態繫結)。

6.全域性變數和區域性變數有什麼區別?是怎麼實現的?作業系統和編譯器是怎麼知道的?

全域性變數和區域性變數的區別主要在於它們的作用域和生存期不同。

全域性變數對於整個程式均可見,而區域性變數只對它所在的函式或者語句塊可見。

全域性變數的生存期與程式的生存期相同,而區域性變數的生存期在退出函式或語句塊後便結束。

通過將全域性變數和區域性變數置於記憶體中不同的段來實現的,全部變數存放與全域性資料區,區域性變數位於棧內。

全域性變數是在所有函式之外宣告的變數,區域性變數則是在函式體內宣告的變數。全域性變數放在記憶體的全程資料區,區域性變數在棧上申請。全域性資料區(靜態資料區),靜態資料區專門存放static變數。static的全域性變數只在該檔案範圍內可見,不能用extern宣告為外部變數。 編譯器會自動初始化全域性變數。

全域性變數的記憶體分配是靜態的,位於pe檔案在資料區,在main()前由c、c++執行期函式初始化,如果沒有初值,會被初始化為0。區域性變數的記憶體分配是動態的,位於執行緒堆疊中。如果沒有初始化的,初值視當前記憶體內的值而定。

區域性變數是在棧中,外部變數是放在資料段,手動分配malloc的才是放在堆中。

7.8086是多少位的系統?在資料匯流排上是怎麼實現的?

8086是16位的系統。

8086位址匯流排有20位,cpu有1m的定址空間,然而8086只有16位,為了能夠定址1m記憶體空間,必須通過分段來完成,即:實體地址=16位的段基址左移4位 + 16位的段內偏移量, 這樣就可以定址全部的位址空間了。

華為筆試題

int a nsize 其中隱藏著若干 0,其餘非 0整數,寫乙個函式 int func int a,int nsize 使a 把0移至後面,非 0整數移至 陣列前面並保持有序,返回值為原資料中第乙個元素為0 的下標。盡可能不使用輔助空間且考慮效率及異常問題,注釋規範且給出設計思路 include ...

華為筆試題

某軟體需要實現建議的cd key演算法,輸入3個正整數,以空格隔開,根據這3個整數生成cd key字串,輸出格式 x x x xxyy,包括16個字元,以短劃線分開,其中,cd key最後兩個yy是用於cd key的自校驗,確保cd key本身是合法的。cdkey使用的字元表23456789abcd...

華為筆試題

輸入描述 輸入乙個字串,字串中包含了全量字符集和已占用字符集,兩個字符集用 相連。前的字符集合為全量字符集,後的字符集為已占用字元集合。已占用字符集中的字元一定是全量字符集中的字元。字符集中的字元跟字元之間使用英文逗號分隔。字符集中的字元表示為字元加數字,字元跟數字使用英文冒號分隔,比如a 1,表示...