軟件工程筆試題及答案
職場軟件工程筆試題及答案
從小學(xué)、初中、高中到大學(xué)乃至工作,我們最不陌生的就是試題了,筆試題是學(xué)校或各主辦方考核某種知識才能的標(biāo)準(zhǔn)。你知道什么樣的試題才算得上好試題嗎?這里小編給大家分享一些關(guān)于軟件工程筆試題及答案,方便大家學(xué)習(xí)了解。
軟件工程師面試筆試題及答案
一、填空(10__1分=10);(1)產(chǎn)品設(shè)想是產(chǎn)品用途和形式的概括描述,可以通;(2)項(xiàng)目范圍是項(xiàng)目中要完成的工作;(3)產(chǎn)品設(shè)計(jì)過程的特點(diǎn)可以概括為自頂向下和以用;(4)備選需求的思想可以來自設(shè)計(jì)團(tuán)隊(duì)的內(nèi)部或外部;(5)工程設(shè)計(jì)的第一步是工程設(shè)計(jì)分析;(6)體系結(jié)構(gòu)設(shè)計(jì)必須既考慮功能需求,又考慮非功;(7)設(shè)計(jì)模式出現(xiàn)在幾個(gè)不同的抽象級別上,包括體;(8)
一、填空(10 __1分=10)
(1)產(chǎn)品設(shè)想是產(chǎn)品用途和形式的概括描述,可以通過主要產(chǎn)品功能列表的形式詳細(xì)闡明。
(2)項(xiàng)目范圍是項(xiàng)目中要完成的工作。風(fēng)險(xiǎn)承擔(dān)者是受產(chǎn)品影響或參與。影響產(chǎn)品開發(fā)的任何人。
(3)產(chǎn)品設(shè)計(jì)過程的特點(diǎn)可以概括為自頂向下和以用戶為中心。前者意味著設(shè)計(jì)人員首先要在高抽象級別上引出需要并生成、改進(jìn)、評估和選擇需求,然后再依次在更低的級別上引出需要并生成、改進(jìn)、評估和選擇需求。后者意味著設(shè)計(jì)過程是以風(fēng)險(xiǎn)承擔(dān)者為焦點(diǎn),使用實(shí)驗(yàn)評估,而且高度重復(fù)。
(4)備選需求的思想可以來自設(shè)計(jì)團(tuán)隊(duì)的內(nèi)部或外部。前一種來源包括用戶和其他風(fēng)險(xiǎn)承擔(dān)者、專家、現(xiàn)實(shí)物品和比喻、競爭產(chǎn)品和相似產(chǎn)品。后一種來源包括團(tuán)隊(duì)集體討論、個(gè)人獨(dú)立思考和建模。
(5)工程設(shè)計(jì)的第一步是工程設(shè)計(jì)分析。這項(xiàng)活動(dòng)的輸入包括可能以各種模型和原型作為其補(bǔ)充的SRS,它們都是在產(chǎn)品設(shè)計(jì)過程中產(chǎn)生的。從軟件的生命周期的觀點(diǎn)來說,工程設(shè)計(jì)發(fā)生在設(shè)計(jì)階段。在這項(xiàng)活動(dòng)中分析問題的好方法是建模,這將產(chǎn)生該活動(dòng)的主要輸出。
(6)體系結(jié)構(gòu)設(shè)計(jì)必須既考慮功能需求,又考慮非功能需求。使程序能夠滿足其功能需求的體系結(jié)構(gòu)可能有任意多個(gè),但其中只有質(zhì)量特性能夠同時(shí)使程序滿足其非功能需求。軟件體系結(jié)構(gòu)設(shè)計(jì)者必須考慮多種程序以找出那些所能指定的程序既能滿足功能需求,又能滿足非功能需求的結(jié)構(gòu)。
(7)設(shè)計(jì)模式出現(xiàn)在幾個(gè)不同的抽象級別上,包括體系結(jié)構(gòu)風(fēng)格,它是處于體系結(jié)構(gòu)級別的模式;中級設(shè)計(jì)模型它是設(shè)計(jì)類及其交互作用的模式;數(shù)據(jù)結(jié)構(gòu)和算法它是實(shí)現(xiàn)抽象數(shù)據(jù)類型和有效操作的模式;編程慣用法,它是能夠有效使用特定編程語言的模式。
(8)在應(yīng)用樹中,樹根以utility加以標(biāo)記,根的子樹是概貌的名稱,樹葉表示場景。這些樹幫助生成用來評估體系結(jié)構(gòu)方案的場景的集合。
(9)正確使用表示方法的SAD是結(jié)構(gòu)良好的SAD,全部可以由一個(gè)程滿足的一組設(shè)計(jì)說明是一致的。所指定的程序能夠滿足其所有需求的軟件體系結(jié)構(gòu)是完整的。如果SAD易于理解,則是清晰的。
(10)詳細(xì)設(shè)計(jì)解析非常類似于體系結(jié)構(gòu)設(shè)計(jì)解析??捎糜谏珊透倪M(jìn)設(shè)計(jì)方案的技術(shù)包括基于程序功能的分解、基于質(zhì)量特性的分解、從概念模型中復(fù)制設(shè)計(jì)、根據(jù)類似程序的設(shè)計(jì)模型創(chuàng)建設(shè)計(jì)以及使設(shè)計(jì)基于設(shè)計(jì)模式之上。
二、名詞解釋(5__3分=15)
1. 模型
模型是用來表示另一個(gè)實(shí)體(目標(biāo))的實(shí)體,建立模型要確定目標(biāo)的部件或元素與模型的部件或元素之間的對應(yīng)關(guān)系,還要確定目標(biāo)的部件或元素間相互關(guān)系與模型的部件或元素間相互關(guān)系之間的對應(yīng)關(guān)系。
2. 靜態(tài)設(shè)計(jì)模型
靜態(tài)設(shè)計(jì)模型表示不會(huì)在程序執(zhí)行過程中發(fā)生變化的程序方面。
3. 動(dòng)態(tài)設(shè)計(jì)模型
動(dòng)態(tài)設(shè)計(jì)模型表示在程序執(zhí)行過程中所發(fā)生的事情。
4. 用例
用例是產(chǎn)品與環(huán)境之間完整交互作用的類型。
5. 場景
場景是產(chǎn)品與特定個(gè)人之間的交互作用。
6. 類模型
問題或軟件解決方案中類的表示。
7. 抽象類
它是一個(gè)不能被實(shí)例化的類,任何至少有一個(gè)抽象操作的類都必定是抽象類,因?yàn)槿绻麑?shí)例化這樣的類,那么客戶并不能調(diào)用其包含的抽象操作,不是抽象類的類是具體類。
8. UML接口
是公有的屬性和抽象操作的有名集合。
9. 虛擬設(shè)備
真實(shí)硬件設(shè)備或系統(tǒng)的軟件模擬或接口。
10. 同步消息
從一個(gè)對象到另一個(gè)對象的通信,而這個(gè)發(fā)送個(gè)體在發(fā)送信息之后暫停執(zhí)行。
11. 異步消息
從一個(gè)對象到另一個(gè)對象的通信,而這個(gè)發(fā)送個(gè)體在發(fā)送信息之后繼續(xù)執(zhí)行。
12. 嚴(yán)格分層體系結(jié)構(gòu)
允許每層只使用緊鄰其下的那一層的分層體系結(jié)構(gòu)
13. 松弛分層體系結(jié)構(gòu)
允許每層都可以使用其下的所有層的分層體系結(jié)構(gòu)
14. 黑板體系結(jié)構(gòu)風(fēng)格
當(dāng)共享數(shù)據(jù)庫改變時(shí),共享數(shù)據(jù)庫將激活存取器。這種變體稱為黑板體系結(jié)構(gòu)風(fēng)格,共享數(shù)據(jù)庫稱為黑板
15. 倉庫體系結(jié)構(gòu)風(fēng)格
共享數(shù)據(jù)庫是被動(dòng)的,由存取器對其進(jìn)行查詢,這些存取器可以繼續(xù)運(yùn)行,或者由其他某個(gè)組件控制,這種變體稱為倉庫體系結(jié)構(gòu)風(fēng)格,共享數(shù)據(jù)庫稱為倉庫
16. 異構(gòu)體系結(jié)構(gòu)
采用兩種或多種體系結(jié)構(gòu)風(fēng)格的體系結(jié)構(gòu)
三、簡答題(30分)
1. 說出設(shè)計(jì)當(dāng)作問題解決方案來考慮的3個(gè)優(yōu)點(diǎn)。
第一:這意味著信息在問題和解決方案之間可能是隔離的
第二:由此產(chǎn)生的看待設(shè)計(jì)的觀點(diǎn)
第三:意味著要在設(shè)計(jì)中使用歷史悠久的一般的問題解決技術(shù)
2. 為什么說抽象化是重要的問題解決技術(shù)?說出3點(diǎn)理由。
a) 使問題簡化——真實(shí)的問題總是有許多與其解決方案無關(guān)的細(xì)節(jié)
b) 使問題的解決結(jié)構(gòu)化——許多設(shè)計(jì)問題都太大太復(fù)雜,以致不能完全解決
c) 有助于以自頂向下的方式構(gòu)成問題解決過程
3. 例舉建模的好處和危險(xiǎn)。
好處:可以簡化要表示的目標(biāo),從而使我們更容易理解,記錄和研究目標(biāo)。研究模型還可能比直接研究目標(biāo)更省成本,更安全。
危險(xiǎn):模型永遠(yuǎn)不能精確再現(xiàn)所表示的目標(biāo),因此研究模型得出的結(jié)論有可能不正確。
4. 例舉軟件的產(chǎn)品設(shè)計(jì)人員和工程設(shè)計(jì)人員所關(guān)注的具體方面。
部分具體的軟件產(chǎn)品設(shè)計(jì):屏幕布局——包括用戶界面組件的布置以及這些組件的大小,字體顏色和外觀;用戶與程序之間的交互順序;消息的編寫;圖像的使用和外觀;
程序?qū)?zhí)行的功能;程序所需的輸入和產(chǎn)生的輸出;程序的質(zhì)量和可靠性;用戶使用該程序達(dá)到其目標(biāo)的易用性;程序是如何適應(yīng)和改變用戶工作方式
部分具體的軟件工程設(shè)計(jì):構(gòu)成程序的主要部件或子系統(tǒng),包括它們的接口,功能,交互作用,速度等;程序中的模塊以及這些模塊的接口;程序中模塊之間的交互作用;模塊的內(nèi)部細(xì)節(jié),包括它們的數(shù)據(jù)和行為;程序中使用的數(shù)據(jù)結(jié)構(gòu)和算法;程序中異常和錯(cuò)誤處理機(jī)制;程序中的進(jìn)程和線程。
5. 為了核實(shí)某個(gè)用例圖是否包括所有應(yīng)該包括的用例,設(shè)計(jì)人員應(yīng)該怎樣做?
通過檢查產(chǎn)品需要清單來確保所有需要都已得到滿足,或者確保所有未被滿足的需要都是故意為之的,設(shè)計(jì)人員可以檢查用例圖的完整性
6. 給出3個(gè)因太小而不應(yīng)成為用例的活動(dòng)示例。
某些因太小而不宜作為用例的活動(dòng)示例是:給設(shè)備或另一個(gè)系統(tǒng)發(fā)送信號或消息,接收來自設(shè)備或另一個(gè)系統(tǒng)的信號或消息,向用戶顯示消息。
7. 哪些表示法可用于用例描述?
任何能夠說明交互作用中活動(dòng)流程的表示法都可以用于用例描述,其中包括uml活動(dòng)圖,uml交互作用圖,流程圖,編程語言和自然語言。
8. 為什么至少必須有一個(gè)風(fēng)險(xiǎn)承擔(dān)者的需要與用例有關(guān)?
如果某種產(chǎn)品的任何風(fēng)險(xiǎn)承擔(dān)者都沒有與某個(gè)用例相關(guān)的需要,則該產(chǎn)品就沒有理由支持這個(gè)用例。產(chǎn)品應(yīng)該滿足風(fēng)險(xiǎn)承擔(dān)者的需要和要求,產(chǎn)品的所有特點(diǎn)和功能都應(yīng)該服務(wù)于這個(gè)目標(biāo)。
9. 如果在開始工作時(shí)沒有完整、正確和一致的產(chǎn)品設(shè)計(jì),那么工程設(shè)計(jì)人員必須做什么?
如果工程設(shè)計(jì)人員沒有得到由產(chǎn)品設(shè)計(jì)人員提供的完整,正確和一致的產(chǎn)品設(shè)計(jì),則除了親自完成產(chǎn)品設(shè)計(jì)以外別無選擇,如果完全不知道產(chǎn)品是什么,就不可能想出如何來實(shí)現(xiàn)產(chǎn)品。
10.對工程設(shè)計(jì)分析最有用的靜態(tài)和動(dòng)態(tài)模型是什么?
對面向?qū)ο蟮墓こ谭治鲎钣杏玫撵o態(tài)模型是分析類模型,最有用的動(dòng)態(tài)模型是用例模型
11.給出一些不應(yīng)該出現(xiàn)在概念模型中但應(yīng)該出現(xiàn)在設(shè)計(jì)類模型中的實(shí)例。
不應(yīng)該出現(xiàn)在概念模型中但應(yīng)當(dāng)出現(xiàn)在設(shè)計(jì)類模型中的示例是那些與軟件系統(tǒng)有關(guān)而問題無關(guān)的實(shí)體,具體例子包括只與實(shí)現(xiàn)有關(guān)的類屬性,比如:計(jì)數(shù)器,引用以及僅僅為了方便的變量;還有只與實(shí)現(xiàn)有關(guān)的屬性的特征,比如屬性是公有還是私有,屬性的數(shù)據(jù)結(jié)構(gòu)是什么;以及只與實(shí)現(xiàn)有關(guān)的操作,比如構(gòu)造函數(shù),析構(gòu)函數(shù),結(jié)束函數(shù),獲取惡化設(shè)置屬性的方法;或者是只與實(shí)現(xiàn)有關(guān)的操作的特征,比如操作是公有還是私有,它們支持哪種并發(fā)性。
12.給出一些不應(yīng)該出現(xiàn)在設(shè)計(jì)類模型中但應(yīng)該出現(xiàn)在實(shí)現(xiàn)類模型中的實(shí)例。
不應(yīng)該出現(xiàn)在設(shè)計(jì)類模型中但應(yīng)當(dāng)出現(xiàn)在實(shí)現(xiàn)類模型中的示例是那些與特定環(huán)境和語言中的程序?qū)崿F(xiàn)有關(guān)的實(shí)體。具體的例子有來自類庫的具體類,比如Java.lang.integer;還有哪些為語言所特有的數(shù)據(jù)類型,比如unsinged long;以及操作和初始化表達(dá)式
13.在軟件體系結(jié)構(gòu)文檔中應(yīng)該包括什么信息?
軟件體系結(jié)構(gòu)文檔應(yīng)該包括產(chǎn)品概述,給出體系結(jié)構(gòu)模型,提供模型之間的`映射,解釋設(shè)計(jì)的理論依據(jù),并包括詞匯表
14.什么圖可以用來模擬程序部件之間的協(xié)作?說出五種。
Uml順序圖,通信圖,活動(dòng)圖,用例模型,數(shù)據(jù)流程圖
15.描述用于生成中級設(shè)計(jì)模型的兩種創(chuàng)建技術(shù)和兩種轉(zhuǎn)換技術(shù)。
兩種創(chuàng)建技術(shù)是功能分解和基于主題的分解。在功能分解技術(shù)中,為得到低級別的組件而分解高級別組件的功能。在基于主題的分解技術(shù)中,設(shè)計(jì)主題從設(shè)計(jì)故事中被吸取出來,然后用來生成解決各個(gè)主題的模式。
兩種轉(zhuǎn)換技術(shù)是把概念模型轉(zhuǎn)換為設(shè)計(jì)模型以及轉(zhuǎn)換類似程序的設(shè)計(jì),轉(zhuǎn)換概念模型從概念模型著手,將其元素從問題實(shí)體轉(zhuǎn)換為設(shè)計(jì)組件,修改這些組件并添加必要的新組件,。轉(zhuǎn)換類似的設(shè)計(jì)需要修改原來的設(shè)計(jì),以滿足新產(chǎn)品的需求。
16.職責(zé)是如何幫助做出模塊中應(yīng)該放入哪些操作和數(shù)據(jù)的決策?
某個(gè)模塊為履行其職能所需的全部數(shù)據(jù)和操作都應(yīng)該被放入該模塊中,也只有這樣的數(shù)據(jù)和操作才應(yīng)該被放入該模塊之中。這將增強(qiáng)模塊的內(nèi)聚性,并降低模塊的耦合性。
17.解釋操作何時(shí)活動(dòng)、暫?;驁?zhí)行。對象可以暫停嗎?為什么?
操作當(dāng)某個(gè)進(jìn)程在運(yùn)行其代碼時(shí)處于執(zhí)行狀態(tài),當(dāng)?shù)却较⒎祷貢r(shí)處于暫停狀態(tài),當(dāng)執(zhí)行或暫停時(shí)屬于活動(dòng)狀態(tài),對象可以是活動(dòng)的,因?yàn)閷ο罂梢杂幸粋€(gè)或多個(gè)活動(dòng)的操作,但對象不能被暫停,。有人可能會(huì)說,如果某個(gè)對象的一個(gè)或多個(gè)操作被暫停,則該對象就處于暫停狀態(tài),但是,一個(gè)或多個(gè)操作被暫停的對象卻可能有一個(gè)或多個(gè)操作正在執(zhí)行,因?yàn)榭赡苡卸鄠€(gè)進(jìn)程在運(yùn)行該對象的代碼,因此說一個(gè)或多個(gè)操作被暫停的對象處于暫停狀態(tài)是沒有意義的。
18.可選、選擇、中斷和循環(huán)片斷分別可以有多少個(gè)操作數(shù)?
可選,中斷和循環(huán)片段只能有一個(gè)操作數(shù),選擇片段可以有一個(gè)或多個(gè)操作數(shù)。
19.解釋分層風(fēng)格如何支持重用的?
在分層體系結(jié)構(gòu)中,每一層都應(yīng)當(dāng)包含內(nèi)聚元素,并只和它下面的那個(gè)模塊耦合,這樣可以比較容易的提取有一個(gè)層并在另一個(gè)程序中使用它,此外,類似的程序可能需要類似的層,所以層的重用也將更加容易。
20.解釋分層風(fēng)格的程序難以調(diào)試的原因。
在具有分層體系結(jié)構(gòu)的程序中實(shí)現(xiàn)許多程序特性將跨越幾個(gè)層,也許是大部分層,如果出現(xiàn)bug,則難以確定發(fā)生故障的層,從而使程序難以調(diào)試。
10. 下面的UML序列圖是對一個(gè)自動(dòng)氣象站中對象的交互行為建模。在圖中直接圈出所有
錯(cuò)誤,并重新繪制順序圖。(10分)
(1) 根據(jù)上圖中,什么消息被發(fā)送Weathervane對象?
cheeckDirection() checkSpeed()
(2)創(chuàng)建了多少個(gè)Observation 對象?
1個(gè)
(3)record( )操作在其參數(shù)設(shè)置前是否能被調(diào)用?
否
(4)self對象的類型是什么?
整型
(5)Weathervane對象的名稱是什么?
W
11. 下面兩張圖中,哪一張圖是框線圖,并簡述框線圖的用途。(5分)
第一張圖是
框線圖的用途:因?yàn)殛P(guān)于框線圖的規(guī)定非常松散,所以它們不僅可用于靜態(tài)建模,也可用于動(dòng)態(tài)建模,還能表示體系結(jié)構(gòu)設(shè)計(jì)者想要表示的任何程序方面。在實(shí)踐中,框線圖的最常見用途是表示把系統(tǒng)分解為主要構(gòu)件或子系統(tǒng),并表明其交互作用關(guān)系的靜態(tài)模型。
12. 下面兩張圖中,哪一張圖是部署圖,并簡述部署圖的用途。(5分)
?device?ServerPC;?artifact?GameServer;TCP/IPRMI?device?GameDat;?device?ClientPC?deploy?;第二張圖是;部署圖的用途:部署圖顯示了系統(tǒng)中使用的實(shí)際和虛擬;
13.下面兩張圖中,哪一張圖描述的管道過濾器風(fēng)格;(10分);第一張圖是;管道過濾器風(fēng)格的特征:a:以數(shù)據(jù)流向的過程為核心
?device?ServerPC
?artifact?GameServer
1
TCP/IPRMI?device?GameDataServer?DB?GameDataRulesBoardImageTokenImage
?device?ClientPC?deploy??artifact?GameClient
第二張圖是
部署圖的用途:部署圖顯示了系統(tǒng)中使用的實(shí)際和虛擬的機(jī)器,這些機(jī)器的通信路徑、實(shí)現(xiàn)該系統(tǒng)的程序和數(shù)據(jù)文件以及程序運(yùn)行和數(shù)據(jù)主流所在的位置。因此,部署圖為模擬物理體系結(jié)構(gòu)提供了功能豐富的表示方法。部署圖在體系結(jié)構(gòu)(特別是分布式系統(tǒng))的設(shè)計(jì)過程中是有用的,在詳細(xì)設(shè)計(jì)過程中亦可用于模擬物理的部署。
13. 下面兩張圖中,哪一張圖描述的管道過濾器風(fēng)格。簡述管道過濾器風(fēng)格的特征和優(yōu)缺點(diǎn)。
(10分)
第一張圖是
管道過濾器風(fēng)格的特征:a:以數(shù)據(jù)流向的過程為核心,因此也被稱為:數(shù)據(jù)流風(fēng)格。
b:過濾器自身功能獨(dú)立而完整,不需要知道其他過濾器的存在與否,相互之間無狀態(tài)交互。 c:過濾器對輸入的數(shù)據(jù)流有限制,并必須保證輸出流的正確性。
d:系統(tǒng) 優(yōu)點(diǎn)
(1)過濾器易于修改或替換,這樣在解決問題或修改程序的行為時(shí),程序的修改將非常簡單。
(2)過濾器的重新排列幾乎毫不費(fèi)力,這便于開發(fā)幾個(gè)完成類似任務(wù)的程序。
(3)過濾器具有高可重用性。
(4)假設(shè)可以使用同步管道,那么這種風(fēng)格支持并執(zhí)行,而且相對容易實(shí)現(xiàn)。
缺點(diǎn)
(1)過濾器只能通過管道進(jìn)行通行,所以它們的活動(dòng)難以協(xié)調(diào)。
(2)過濾器通產(chǎn)使用和生成非常簡單的數(shù)據(jù)流,如字符流,這意味著,在把輸入轉(zhuǎn)換成有用的格式,然后再把結(jié)果轉(zhuǎn)換成輸出時(shí)使用的簡單格式時(shí),過濾器可能必須完成大量的操作。
(3)錯(cuò)誤處理非常困難,錯(cuò)誤信息只能通過管道輸出或傳送。當(dāng)可靠性和安全性很重要時(shí),由于錯(cuò)誤檢測和恢復(fù)難以完成,所以不適合使用這種風(fēng)格。
(4)并行執(zhí)行的好處可能并不牢靠。管線也許不能有效地同步過濾器,一些過濾器在進(jìn)行輸出之前可能需要等待所有的輸入。
14. 下面兩張圖中,哪一張圖描述的事件驅(qū)動(dòng)風(fēng)格。簡述事件驅(qū)動(dòng)風(fēng)格的特征和優(yōu)缺點(diǎn)。(10分)
第二張圖是
事件驅(qū)動(dòng)風(fēng)格的特征:事件驅(qū)動(dòng)系統(tǒng)的基本觀點(diǎn)是一個(gè)系統(tǒng)對外部的表現(xiàn)可以從它對事件的處理表現(xiàn)出來。
優(yōu)點(diǎn):(1)易于添加、刪除和修改組件,所以利用這種風(fēng)格編寫的程序具有可變性和可維護(hù)性(2)程序組件的獨(dú)立性支持可重用性、健壯性和容錯(cuò)性。
缺點(diǎn):(1)盡管時(shí)間可以攜帶數(shù)據(jù),但是在由事件分配器進(jìn)行中介時(shí),組件的交互作用將難以到達(dá)。為了解決這個(gè)問題,事件驅(qū)動(dòng)的系統(tǒng)通常還支持顯示的調(diào)用操作,盡管這將耦合組件。(2)宣布事件的組件不能保證有組件對他們進(jìn)行相應(yīng),也不能對組件相應(yīng)他們的順序寄予任何期望。有時(shí),這會(huì)造成難以編寫出正確的程序。(3)事件通信量往往有很大的變化:事件分配器經(jīng)常處于空閑狀態(tài),而在其他時(shí)間,它則會(huì)收到大量事件,這樣將難以達(dá)到性能目標(biāo)。
四、綜合設(shè)計(jì)題(每小題14分,共35分)
1. 繪制活動(dòng)圖,說明一般設(shè)計(jì)的步驟,并說明活動(dòng)圖的用途。(7分)
一般設(shè)計(jì)的步驟:一般設(shè)計(jì)過程遵循一般的問題解決策略。首先是理解設(shè)計(jì)問題。尋找設(shè)計(jì)問題解決方案的過程是重復(fù)生成新候選解決方案或細(xì)化現(xiàn)有候選解決方案,然后依據(jù)設(shè)計(jì)問題對它們進(jìn)行評估。最終應(yīng)該有一個(gè)或多個(gè)令人滿意的解決方案出現(xiàn),然后即可把最好的一個(gè)以文檔形式記錄下來并交付。
活動(dòng)圖的用途:一般設(shè)計(jì)過程分析和解析之間的重復(fù)。表示任何在問題解析過程中發(fā)現(xiàn)的對問題的誤解都將導(dǎo)致返回到分析活動(dòng)。
2. 繪制活動(dòng)圖,模擬洗衣過程。該模型中應(yīng)包括并發(fā)動(dòng)作,并說明活動(dòng)圖的用途。(7分) 活動(dòng)圖的用途:簡化描述了洗衣過程:包括對系統(tǒng)的工作流建?;蛘邔唧w的操作建模。
3. 繪制自助洗車系統(tǒng)的用例圖,并說明用例圖的用途。(7分)
4. 繪制自動(dòng)取款機(jī)的用例圖,并說明用例圖的用途。(7分)
5. 使用狀態(tài)機(jī)圖繪制交通路口紅綠燈的并發(fā)行為模型,并說明狀態(tài)機(jī)圖的用途。(7分)
軟件工程師面試題小練
一、JAVA編程基礎(chǔ)部分 1. "=="和equals方法究竟有什么區(qū)別?
答:==操作符專門用來比較兩個(gè)變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲的數(shù)值是否相同,要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)引用變量是否相等,只能用==操作符。
Equals()方法是用于比較兩個(gè)獨(dú)立對象的內(nèi)容是否相同,就好比去比較兩個(gè)人的長相是否相同,它比較的兩個(gè)對象是獨(dú)立的。 2. 作用域(訪問修飾符)public,private,protected,以及不寫時(shí)的區(qū)別?
答:如果在修飾的元素上面沒有寫任何訪問修飾符,則表示friendly。(C#中是internal) 訪問修飾符
public
protected
friendly
private 當(dāng)前類 √ √ √ √ 同一個(gè)包 √ √ √ × 子孫類 √ √ × × 其他包 √ × × ×
3. 請簡述面向?qū)ο笥心乃膫€(gè)方面的特征?
答:
1).封裝:即將對象封裝成一個(gè)高度自治和相對封閉的個(gè)體,對象狀態(tài)(屬性)由這個(gè)對象自己的行為(方法)來讀取和改變;
2).抽象:抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個(gè)類,這個(gè)類只考慮這些事物的相似和共性之處
3). 繼承:繼承是子類自動(dòng)共享父類數(shù)據(jù)和方法的機(jī)制,這是類之間的一種關(guān)系,提高了軟件的可重用性和可擴(kuò)展性。
4).多態(tài): 多態(tài)性增強(qiáng)了軟件的靈活性和擴(kuò)展性。
4. 請簡述abstract class和interface的區(qū)別。
答:含有abstract修飾符的class即為抽象類,接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。
兩者的語法區(qū)別:
1).抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。
2).抽象類中可以包含非抽象的普通方法,接口不能。
3). 抽象類中可以包含靜態(tài)方法,接口中不能
4). 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。
兩者的應(yīng)用上的區(qū)別:
1).接口更多在系統(tǒng)框架設(shè)計(jì)方法發(fā)揮作用。
2).抽象類在代碼實(shí)現(xiàn)方面發(fā)揮作用,實(shí)現(xiàn)代碼的重用。
5.下面代碼有錯(cuò)嗎?有何錯(cuò)誤呢?
①. abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
答:大俠們,這有何錯(cuò)誤?
答案: 錯(cuò)。abstract method(抽象方法)必須以分號結(jié)尾,且不帶花括號。(沒有方法體)
②. abstract class Something {private abstract String doSomething (); }
答:這好像沒什么錯(cuò)吧?
答案: 錯(cuò)。abstract的methods(方法)不能以private修飾。abstract的methods(方法)就是讓子類implement(實(shí)現(xiàn))具體細(xì)節(jié)的,怎么可以用private把a(bǔ)bstract私有化呢
③. class Something {int i;public void doSomething() {System.out.println("i = " + i);}}
答:有什么錯(cuò)呢? 看不出來啊。
答案: 正確。輸出的是"i = 0"。int i屬於instant variable (實(shí)例變量,或叫成員變量)。instant variable有默認(rèn)值。int的默認(rèn)值是0。
二、SQL Server部分 1. 可以用什么來確保表格里的字段只接受特定范圍里的值?
答:這個(gè)問題可以用多種方式來回答,但是只有一個(gè)答案是“好”答案:Check約束,它在數(shù)據(jù)庫表格里被定義,用來限制輸入該列的值。觸發(fā)器也可以被用來限制數(shù)據(jù)庫表格里的字段能夠接受的值,但是這種辦法要求觸發(fā)器在表格里被定義,這可能會(huì)在某些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的'方式來限制域的完整性。 2.什么是主鍵?什么是外鍵?
答:主鍵是表格里的(一個(gè)或多個(gè))字段,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個(gè)用來建立兩個(gè)表格之間關(guān)系的約束。這種關(guān)系一般都涉及一個(gè)表格里的主鍵字段與另外一個(gè)表格(盡管可能是同一個(gè)表格)里的一系列相連的字段。那么這些相連的字段就是外鍵。
3.什么是事務(wù)?有哪四個(gè)屬性(原則)?
答:事務(wù)是作為一個(gè)邏輯單元執(zhí)行的一系列操作,要么全都執(zhí)行,要么全都不執(zhí)行。一個(gè)邏輯工作單元必須有四個(gè)屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個(gè)事務(wù)。
附:
原子性:事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改,
一致性:事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)。
隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。
持久性:事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。
4.觸發(fā)器和存儲過程有何區(qū)別?(講解時(shí)回顧觸發(fā)器和存儲過程分別是什么)
答:只有一個(gè)區(qū)別:存儲過程,你調(diào)用的時(shí)候才會(huì)執(zhí)行
觸發(fā)器就是你設(shè)定了數(shù)據(jù)庫里比如刪除,修改,插入時(shí),就會(huì)自動(dòng)觸發(fā)執(zhí)行
軟件工程師面試題目
1. 用預(yù)處理指令#define 聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問題)
#define SECONDS_PER_YEAR (60 __ 60 __ 24 __ 365)UL
我在這想看到幾件事情:
1). #define 語法的基本知識(例如:不能以分號結(jié)束,括號的使用,等等)
2). 懂得預(yù)處理器將為你計(jì)算常數(shù)表達(dá)式的值,因此,直接寫出你是如何計(jì)算一年中有多少秒而不是計(jì)算出實(shí)際的值,是更清晰而沒有代價(jià)的。
3). 意識到這個(gè)表達(dá)式將使一個(gè)16位機(jī)的整型數(shù)溢出-因此要用到長整型符號L,告訴編譯器這個(gè)常數(shù)是的長整型數(shù)。
4). 如果你在你的表達(dá)式中用到UL(表示無符號長整型),那么你有了一個(gè)好的起點(diǎn)。記住,第一印象很重要。
2. 寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。
#define MIN(A,B) ((A) <= (B) (A) : ))
C/C++試題集 C/C++ Development這個(gè)測試是為下面的目的而設(shè)的:
1). 標(biāo)識#define在宏中應(yīng)用的基本知識。這是很重要的,因?yàn)橹钡角度?inline)操作符變?yōu)闃?biāo)準(zhǔn)C的一部分,宏是方便產(chǎn)生嵌入代碼的唯一方法,對于嵌入式系統(tǒng)來說,為了能達(dá)到要求的性能,嵌入代碼經(jīng)常是必須的方法。
2). 三重條件操作符的知識。這個(gè)操作符存在C語言中的原因是它使得編譯器能產(chǎn)生比if-then-else更優(yōu)化的'代碼,了解這個(gè)用法是很重要的。
3). 懂得在宏中小心地把參數(shù)用括號括起來
4). 我也用這個(gè)問題開始討論宏的副作用,例如:當(dāng)你寫下面的代碼時(shí)會(huì)發(fā)生什么事?
Least = MIN(__p++, b);
3. 預(yù)處理器標(biāo)識#error的目的是什么?
如果你不知道答案,請看參考文獻(xiàn)1。這問題對區(qū)分一個(gè)正常的伙計(jì)和一個(gè)書呆子是很有用的。只有書呆子才會(huì)讀C語言課本的附錄去找出象這種
問題的答案。當(dāng)然如果你不是在找一個(gè)書呆子,那么應(yīng)試者最好希望自己不要知道答案。