linux C經典面試題六

2021-06-08 01:22:30 字數 3514 閱讀 4697

11.windows是核心級執行緒麼。

12.linux有核心級執行緒麼。

答:執行緒通常被定義為乙個程序中**的不同執行路線。從實現方式上劃分,執行緒有兩

種型別:「使用者級執行緒」和「核心級執行緒」。 使用者執行緒指不需要核心支援而在使用者程式

中實現的執行緒,其不依賴於作業系統核心,應用程序利用執行緒庫提供建立、同步、排程

和管理執行緒的函式來控制使用者執行緒。這種執行緒甚至在象 dos 這樣的作業系統中也可實現

,但執行緒的排程需要使用者程式完成,這有些類似 windows 3.x 的協作式多工。另外一

種則需要核心的參與,由核心完成執行緒的排程。其依賴於作業系統核心,由核心的內部

需求進行建立和撤銷,這兩種模型各有其好處和缺點。使用者執行緒不需要額外的核心開支

,並且使用者態執行緒的實現方式可以被定製或修改以適應特殊應用的要求,但是當乙個線

程因 i/o 而處於等待狀態時,整個程序就會被排程程式切換為等待狀態,其他執行緒得不

到執行的機會;而核心執行緒則沒有各個限制,有利於發揮多處理器的併發優勢,但卻佔

用了更多的系統開支。

windows nt和os/2支援核心執行緒。linux 支援核心級的多執行緒

13.c++中什麼資料分配在棧或堆中,new分配資料是在近堆還是遠堆中?

堆: 程式執行時動態申請,new 和 malloc申請的記憶體就在堆上

14.使用執行緒是如何防止出現大的波峰。

答:意思是如何防止同時產生大量的執行緒,方法是使用執行緒池,執行緒池具有可以同時提

高排程效率和限制資源使用的好處,執行緒池中的執行緒達到最大數時,其他執行緒就會排隊

等候。15函式模板與類模板有什麼區別?

答:函式模板的例項化是由編譯程式在處理函式呼叫時自動完成的,而類模板的例項化

必須由程式設計師在程式中顯式地指定。

16一般資料庫若出現日誌滿了,會出現什麼情況,是否還能使用?

答:只能執行查詢等讀操作,不能執行更改,備份等寫操作,原因是任何寫操作都要記

錄日誌。也就是說基本上處於不能使用的狀態。

17 sql server是否支援行級鎖,有什麼好處?

答:支援,設立封鎖機制主要是為了對併發操作進行控制,對干擾進行封鎖,保證資料

的一致性和準確性,行級封鎖確保在使用者取得被更新的行到該行進行更新這段時間內不

被其它使用者所修改。因而行級鎖即可保證資料的一致性又能提高資料操作的迸發性。

18如果資料庫滿了會出現什麼情況,是否還能使用?

答:見16

19 關於記憶體對齊的問題以及sizof()的輸出

答:編譯器自動對齊的原因:為了提高程式的效能,資料結構(尤其是棧)應該盡可能

地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問

;然而,對齊的記憶體訪問僅需要一次訪問。

20 int i=10, j=10, k=3; k*=i+j; k最後的值是?

答:60,此題考察優先順序,實際寫成: k*=(i+j);,賦值運算子優先順序最低

21.對資料庫的一張表進行操作,同時要對另一張表進行操作,如何實現?

答:將操作多個表的操作放入到事務中進行處理

22.tcp/ip 建立連線的過程?(3-way shake)

答:在tcp/ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀

態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個

syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;

第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1)

,此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。

23.icmp是什麼協議,處於哪一層?

答:internet控制報文協議,處於網路層(ip層)

24.觸發器怎麼工作的?

答:觸發器主要是通過事件進行觸發而被執行的,當對某一表進行諸如update、 insert

、 delete 這些操作時,資料庫就會自動執行觸發器所定義的sql 語句,從而確保對數

據的處理必須符合由這些sql 語句所定義的規則。

25.winsock建立連線的主要實現步驟?

答:伺服器端:socker()建立套接字,繫結(bind)並監聽(listen),用accept()

等待客戶端連線。

客戶端:socker()建立套接字,連線(connect)伺服器,連線上後使用send()和recv(

),在套接字上寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

伺服器端:accept()發現有客戶端連線,建立乙個新的套接字,自身重新開始等待連

接。該新產生的套接字使用send()和recv()寫讀資料,直至資料交換完畢,closesock

et()關閉套接字。

26.動態連線庫的兩種方式?

答:呼叫乙個dll中的函式有兩種方法:

1.載入時動態鏈結(load-time dynamic linking),模組非常明確呼叫某個匯出函式

,使得他們就像本地函式一樣。這需要鏈結時鏈結那些函式所在dll的導入庫,導入庫向

系統提供了載入dll時所需的資訊及dll函式定位。

2.執行時動態鏈結(run-time dynamic linking),執行時可以通過loadlibrary或loa

dlibraryex函式載入dll。dll載入後,模組可以通過呼叫getprocaddress獲取dll函式的

出口位址,然後就可以通過返回的函式指標呼叫dll函式了。如此即可避免導入庫檔案了

。27.ip組播有那些好處?

答:internet上產生的許多新的應用,特別是高頻寬的多**應用,帶來了頻寬的急劇

消耗和網路擁擠問題。組播是一種允許乙個或多個傳送者(組播源)傳送單一的資料報

到多個接收者(一次的,同時的)的網路技術。組播可以大大的節省網路頻寬,因為無

論有多少個目標位址,在整個網路的任何一條鏈路上只傳送單一的資料報。所以說組播

技術的核心就是針對如何節約網路資源的前提下保證服務質量。

1.static有什麼用途?(請至少說明兩種)

1)在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。

2) 在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。

3) 在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用

2.引用與指標有什麼區別?

1) 引用必須被初始化,指標不必。

2) 引用初始化以後不能被改變,指標可以改變所指的物件。

3) 不存在指向空值的引用,但是存在指向空值的指標。

3.描述實時系統的基本特性

在特定時間內完成特定的任務,實時性與可靠性。

4.全域性變數和區域性變數在記憶體中是否有區別?如果有,是什麼區別?

全域性變數儲存在靜態資料庫,區域性變數在堆疊。

linux C經典面試題 四

例子 code examples 12 下面的 輸出是什麼,為什麼?void foo void 這個問題測試你是否懂得c語言中的整數自動轉換原則,我發現有些開發者懂得極少這些東西。不管如何,這無符號整型問題的答案是輸出是 6 原因是當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號...

linux C經典面試題十

1.請問以下 有什麼問題 int main 沒有為str分配記憶體空間,將會發生異常 問題出在將乙個字串複製進乙個字元變數指標所指位址。雖然可以正確輸出結果,但因為越界進行內在讀寫而導致程式崩潰。char s aaa printf s s s 0 b printf s s 有什麼錯?aaa 是字串常...

linux C經典面試題九

思科 1.用巨集定義寫出swap x,y define swap x,y x x y y x y x x y 2.陣列a n 存放了1至n 1個數,其中某個數重複一次。寫乙個函式,找出被重複的數字.時間複雜度必須為o n 函式原型 int do dup int a,int n 3 一語句實現x是否為...