當前位置:學問谷 >

行業範例 >互聯網 >

linux網絡編程面試題

linux網絡編程面試題

1.下列程序在32位linux或unix中的結果是什麼?

linux網絡編程面試題

func(char *str)

{

printf("%d",sizeof(str));

printf("%d",strlen(str));

}

main()

{

char a[]="123456789";

printf("%d",sizeof(a));

func(a);

}

答: 10 4 9

網絡/網絡編程部份:

1、connect方法會阻塞,請問有什麼方法可以避免其長時間阻塞?

答:最通常的方法最有效的是加定時器;也可以採用非阻塞模式

2、網絡中,如果客户端突然掉線或者重啟,服務器端怎麼樣才能立刻知道?

答:若客户端掉線或者重新啟動,服務器端會收到復位信號,每一種tcp/ip得實現不一樣,控制機制也不一樣。

3.在子網種有多少個可用地址?分別是什麼?

答:

簡:

30表示的是網絡號(network number)是30位,剩下2位中11是廣播(broadcast)地址,00是multicast地址,只有01和10可以作為host address。

詳:

代表的子網的網絡號是30位,即網絡號是 &

=,此子網的地址空間是2位,即可以有4個地址:,

, , 。第一個地址的主機號(host

number/id)是0,而主機號0代表的是multicast地址。最後一個地址的最後兩位是11,主機號每一位都為1代表的是廣播

(broadcast)地址。所以只有中間兩個地址可以給host使用。其實那個問題本身不準確,廣播或multicast地止也是可以使用的地址,所以

回答4也應該正確,當然問的人也可能是想要你回答2。我個人覺得最好的回答是一個廣播地址,一個multicast地址,2個unicast地址。

是什麼?有什麼用處,通常那些工具會用到它?(ping? traceroute? ifconfig? netstat?)

答:

簡:TTL是Time To Live,一般是hup count,每經過一個路由就會被減去一,如果它變成0,包會被丟掉。它的主要目的是防止包在有迴路的網絡上死轉,浪費網絡資源。ping和traceroute用到它。

詳:

TTL是Time To Live,目前是hup

count,當包每經過一個路由器它就會被減去一,如果它變成0,路由器就會把包丟掉。IP網絡往往帶有環(loop),比如子網A和子網B有兩個路由器

相連,它就是一個loop。TTL的主要目的是防止包在有迴路的網絡上死轉,因為包的TTL最終後變成0而使得此包從網上消失(此時往往路由器會送一個

ICMP包回來,traceroute就是根據這個做的)。ping會送包出去,所以裏面有它,但是ping不一定非要不可它。traceroute則是

完全因為有它才能成的。ifconfig是用來配置網卡的,netstat -rn 是用來列路由表的,所以都用不着它

5.路由表示做什麼用的?在linux環境中怎麼來配置一條默認路由?

答:

簡:路由表是用來決定如何將包從一個子網傳送到另一個子網的,換局話説就是用來決定從一個網卡接收到的包應該送的哪一張網卡上的。在Linux上可以用“route add default gw ”來配置一條默認路由。

詳:

路由表是用來決定如何將包從一個子網傳送到另一個子網的,換局話説就是用來決定從一個網卡接收到的包應該送的哪一張網卡上的。路由表的每一行至少有目標網

絡號、netmask、到這個子網應該使用的網卡。當路由器從一個網卡接收到一個包時,它掃描路由表的每一行,用裏面的netmask和包裏的.目標IP地

址做並邏輯運算(&)找出目標網絡號,如果此網絡號和這一行裏的網絡號相同就將這條路由保留下來做為備用路由,如果已經有備用路由了就在這兩條路

由裏將網絡號最長的留下來,另一條丟掉,如此接着掃描下一行直到結束。如果掃描結束任沒有找到任何路由,就用默認路由。確定路由後,直接將包送到對應的網

卡上去。在具體的實現中,路由表可能包含更多的信息為選路由算法的細節所用。題外話:路由算法其實效率很差,而且不scalable,解決辦法是使用IP

交換機,比如MPLS。

在Linux上可以用“route add default gw ”來配置一條默認路由。

6.在網絡中有兩台主機A和B,並通過路由器和其他交換設備連接起來,已經確認物理連接正確無誤,怎麼來測試這兩台機器是否連通?如果不通,怎麼來判斷故障點?怎麼排除故障?

答:測試這兩台機器是否連通:從一台機器ping另一台機器

如果ping不通,用traceroute可以確定是哪個路由器不能連通,然後再找問題是在交換設備/hup/cable等。

7.網絡編程中設計併發服務器,使用多進程 與 多線程 ,請問有什麼區別?

答案一:

1,進程:子進程是父進程的複製品。子進程獲得父進程數據空間、堆和棧的複製品。

2,線程:相對與進程而言,線程是一個更加接近與執行體的概念,它可以與同進程的其他線程共享數據,但擁有自己的棧空間,擁有獨立的執行序列。

兩者都可以提高程序的併發度,提高程序運行效率和響應時間。

線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。

答案二:

根本區別就一點:用多進程每個進程有自己的地址空間(address space),線程則共享地址空間。所有其它區別都是由此而來的:

1。速度:線程產生的速度快,線程間的通訊快、切換快等,因為他們在同一個地址空間內。

2。資源利用率:線程的資源利用率比較好也是因為他們在同一個地址空間內。

3。同步問題:線程使用公共變量/內存時需要使用同步機制還是因為他們在同一個地址空間內。

標籤: 面試題 linux 編程
  • 文章版權屬於文章作者所有,轉載請註明 https://xuewengu.com/flhy/hulian/l32n5q.html