一套程式設計題 問答題61 80

2021-10-16 12:56:35 字數 4546 閱讀 5788

61. windows程式的入口是**?寫出windows訊息機制的流程。

入口在winmain()函式。

windows應用程式訊息處理機制:

a. 作業系統接收應用程式的視窗訊息,將訊息投遞到該應用程式的訊息佇列中

b. 應用程式在訊息迴圈中呼叫getmessage函式從訊息佇列中取出一條一條的訊息,取出訊息後,應用程式可以對訊息進行一些預處理。

c. 應用程式呼叫dispatchmessage,將訊息回傳給作業系統。

d. 系統利用wndclass結構體的lpfnwndproc成員儲存的視窗過程函式的指標呼叫視窗過程,對訊息進行處理。

62.函式assert的用法?

斷言assert是僅在debug版本起作用的巨集,用於檢查「不應該「發生的情況。程式設計師可以把assert看成乙個在任何系統狀態下都可以安全使用的無害測試手段。

63. windows程式設計執行緒同步的幾種方式?(重要)

原子鎖、臨界區(段)、事件、互斥(體)、訊號量、可等候定時器

64.關鍵字volatile有什麼含意?並給出三個不同的例子。(嵌入式常考,了解)

乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子:

1) 並行裝置的硬體暫存器(如:狀態暫存器)

2) 乙個中斷服務子程式中會訪問到的非自動變數

3) 多執行緒應用中被幾個任務共享的變數

補充問題:

乙個引數既可以是const還可以是volatile嗎?解釋為什麼。

可以。乙個例子是唯讀的狀態暫存器。它是volatile因為它可能被意想不到地改變。它是const因為程式不應該試圖去修改它。

乙個指標可以是volatile 嗎?解釋為什麼。

可以。儘管這並不很常見。乙個例子是當乙個中服務子程式修該乙個指向乙個buffer的指標時。

65.對幾種同步機制的總結

1.critical section(臨界區)

a.速度快

b.不能用於不同程序

c.不能進行資源統計(每次只可以有乙個執行緒對共享資源進行訪問)

2.mutex(互斥量)

a.速度慢

b.可用於不同程序

c.不能進行資源統計

3.semaphore(訊號量)

a.速度慢

b.可用於不同程序

c.可進行資源統計(可以讓乙個或超過乙個執行緒對共享資源進行訪問)

4.event

a.速度慢

b.可用於不同程序

c.可進行資源統計

66.引數傳遞有幾種方式;實現多型引數傳遞採用什麼方式,如果沒有使用某種方式原因是什麼;

傳值,傳指標或者引用

採用引用的方式在多型中進行傳參

原因:使用引用可以節省空間和時間,用於物件時不用呼叫拷貝建構函式產生引數副本,可以調高效

率,直觀,安全。

67. c++和c定義結構的分別是什麼。

c 語言的結構僅僅是資料的結合,不可以定義方法。

c++的struct 和 class 其實具備幾乎一樣的功能,只是預設的訪問屬性不一樣而已。

68.建構函式可否是虛函式,為什麼?析構函式呢,可否是純虛的呢?

建構函式不能為虛函式,要構造乙個物件,必須清楚地知道要構造什麼,否則無法構造乙個物件。

析構函式可以為純虛函式。

69.分別寫出bool,int,float,指標型別的變數a 與「零」的比較語句。

規範寫法

bool :    if ( !a ) or if(a)

int :     if ( a == 0)

float :   const expression exp = 0.000001

if ( a < exp && a >-exp)

pointer : if ( a != null) or if(a == null)

70.純虛函式如何定義?使用時應注意什麼?

virtual void f()=0;

是介面,子類必須要實現

71.死鎖的處理

鴕鳥策略、預防策略、避免策略、檢測與解除死鎖

72. tcp/ip建立連線的過程

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

第一次握手:建立連線時,客戶端傳送連線請求到伺服器,並進入syn_send狀態,等待伺服器確認;

第二次握手:伺服器收到客戶端連線請求,向客戶端傳送允許連線應答,此時伺服器進入syn_recv狀態;

第三次握手:客戶端收到伺服器的允許連線應答,向伺服器傳送確認,客戶端和伺服器進入通訊狀態,完成三次握手

74.流操作符過載返回值申明為「引用」的作用:

流操作符《和》,這兩個操作符常常希望被連續使用,例如:cout << "hello" << endl; 因此這兩個操作符的返回值應該是乙個仍然支援這兩個操作符的流引用。可選的其它方案包括:返回乙個流物件和返回乙個流物件指標。但是對於返回乙個流物件,程式必須重新(拷貝)構造乙個新的流物件,也就是說,連續的兩個《操作符實際上是針對不同物件的!這無法讓人接受。對於返回乙個流指標則不能連續使用《操作符。因此,返回乙個流物件引用是惟一選擇。這個唯一選擇很關鍵,它說明了引用的重要性以及無可替代性,也許這就是c++語言中引入引用這個概念的原因吧。 賦值操作符=。這個操作符象流操作符一樣,是可以連續使用的,例如:x = j = 10;或者(x=10)=100;賦值操作符的返回值必須是乙個左值,以便可以被繼續賦值。因此引用成了這個操作符的惟一返回值選擇。

75.觸發器的作用?

觸發器是一中特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的

完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某錶上的觸發器上包含對另乙個表的資料操作,而該操作又會導致該錶觸發器被觸發。

觸發器: 當滿足觸發器條件,則系統自動執行觸發器的觸發體。

觸發76.什麼是儲存過程?用什麼來呼叫?

儲存過程是乙個預編譯的sql語句,優點是允許模組化的設計,就是說只需建立一次,以後在該程式中就可以呼叫多次。如果某次操作需要執行多次sql,使用儲存過程比單純sql語句執行要快。可以用乙個命令物件來呼叫儲存過程。

77.索引的作用?和它的優點缺點是什麼?

索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。

78.什麼是記憶體洩漏?

一般我們所說的記憶體洩漏指的是堆記憶體的洩漏。堆記憶體是程式從堆中為其分配的,大小任意的,使用

完後要顯示釋放記憶體。當應用程式用關鍵字new等建立物件時,就從堆中為它分配一塊記憶體,使用完

後程式呼叫free或者delete釋放該記憶體,否則就說該記憶體就不能被使用,我們就說該記憶體被洩漏了。

79.維護資料庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?為什麼?

我是這樣做的,盡可能使用約束,如check,主鍵,外來鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問資料庫都可以保證資料的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣做麻煩,程式設計複雜,效率低下。

80.什麼是事務?什麼是鎖?

事務就是被繫結在一起作為乙個邏輯工作單元的sql語句分組,如果任何乙個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過acid測試,即原子性,一致性,隔離性和永續性。

鎖:在所以的dbms中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一樣,它可以使某些資料的擁有者,在某段時間內不能使用某些資料或資料結構。當然鎖還分級別的。

乙個問答題

小弟目前有乙個模擬訊號需要處理,一直沒有什麼好的頭緒,希望大家幫幫忙,輸入訊號是乙個交流電流感測器輸出訊號,訊號是乙個50hz的交流訊號,訊號幅度是變化的 最小為0 最大為1.5v 且訊號偏移值為2.5v 也就是2.5 1.5sin x 這樣乙個訊號,現在為了後面的微控制器好處理,需要將這個訊號處理...

一套 程式設計題 程式設計1 10

1.寫出程式把乙個鍊錶中的接點順序倒排 typedef struct linknode node 將乙個鍊錶逆置 node reverse node head head next null head p return head 2.寫出程式刪除鍊錶中的所有接點 void del all node h...

第一章問答題

二 問答題 1 linux採用什麼版權方式發行?這種版權與通常的商業軟體有何區別?答 linux 採用的發行方式是gpl,開源協議的發行方式。商業軟體指被作為商品進行交易的軟體,這種版權卻是可以被公眾使用的,修改和分發也不受許可證的限制。2 簡述linux的技術特點。答 完全開放原始碼,使用者可以定...