【軟體設計師】下午題
阿新 • • 發佈:2018-12-17
資料庫系統
資料流圖
考查內容
- 補充資料流圖的缺失部分
- 補充資料流【考査父圖與子圖的平衡問題】
- 補充外部實體
- 補充資料儲存【資料儲存一般叫做xx表或xx檔案】
- 資料流圖的改錯
- 資料流與錯誤的加工相連線
- 資料流方向錯誤
- 刪除多餘資料流
- 資料流圖相關的概念簡答題
答題技巧
- 詳細分析試題說明
- 主要是細心,細心,再細心,業務邏輯不能分析錯誤
- 看清楚所有出現的業務名詞以及儲存的讀寫,不能有一個遺漏
- 識別出那些不受系統控制,但又影響系統執行的外部環境,這就是系統資料輸入的來源和輸出的去處,即外部實體。一般是人(某職位),組織,其他軟硬體系統
- 利用資料平衡原則
- 父圖與子圖的平衡。子圖對父圖中加工和資料流同時進行分解,也屬於父圖與子圖的平衡。
- 每個加工必須有輸入資料流和輸出資料流。加工的輸出資料流僅由它的輸入資料流確定,這個規則絕不能違背。資料不守恆的錯誤有兩種,一是漏掉某些輸入資料流;二是某些輸入資料流在加工環節內部沒有被使用。
- 每個儲存必須要有寫入和讀取。儲存檔案與加工之間資料流的方向應按規定標註,一個不產生任何輸出流的檔案是沒有意義的。
簡答題
- 在繪製資料流圖的加工時,可能出現的輸入、輸出錯誤:
- 只有輸入而無輸出或者黑洞
- 只有輸出而無輸入或者奇蹟
- 輸入的資料流無法通過加工產生輸出流或者灰洞
- 輸入的資料流與輸出的資料流名稱相同
- 說明實體之間可否有資料流,並解釋其原因
實體之間不可以有資料流,因為資料流的起點和終點中必須有一個是加工
-** 如果採用“第三方Email系統”,那麼需要進行哪些修改?用150字以內文字加以說明**
圖1-1中:增加外部實體“第三方Email系統”,將所有傳送給客戶的訊息資料流,終點均修改至“第三方Email系統”。
圖1-2中:增加外部實體“第三方Email系統”,增加加工“傳送郵件”,將臨時預訂/預訂/變更確認資訊終點均修改至“傳送郵件”加工,並增加從D2到“傳送郵件”加工的資料流“電子郵件地址”,再從傳送郵件加工引出資料流(臨時預訂/預訂/變更確認資訊)終點為第三方Email系統 - 簡要說明面向資料結構設計方法的基本思想及其適用場合
面向資料結構的設計方法(如Jackson方法)就是用資料結構作為程式設計的基礎,最終目標是得出對程式處理過程的描述,適合在詳細設計時使用。即在完成了軟體結構設計之後,可以使用面向資料結構的方法來設計每個模組的處理過程,常用於規模不大的資料處理系統。使用面向資料結構的設計方法,當然首先需要分析確定資料結構,並且用適當的工具清晰地描述資料結構。 - 簡要說明程式流程圖的適用場合與作用
程式流程圖通常在進行詳細設計時使用,用來描述程式的邏輯結構 - 用 200 字以內文字,說明建模圖 1-1 和圖 1-2 時如何保持資料流圖平衡
父圖中某個加工的輸入輸出資料流必須與其子圖的輸入輸出資料流在數量上和名字上相同。父圖的一個輸入(或輸出)資料流對應於子圖中幾個輸入(或輸出)資料流,而子圖中組成的這些資料流的資料項全體正好是父圖中的這一個資料流
資料庫設計
考查內容
- ER模型
- 關係模式
- 主外來鍵
- SQL語言
考試套路
- 補全ER圖
- 補全關係模式指明主外來鍵
- 新增一個實體,或修改關係模式,或優化
資料庫系統術語
1. 弱實體與強實體
一個實體的存在必須以另一實體的存在為前提。前者就稱為“弱實體”,後者稱為“強實體”。
2.關係模式的主鍵為全碼
關係模式的所有屬性組組成該關係模式的候選碼,稱為全碼。即所有屬性都是主屬性
UML建模
考查內容
- 用例圖
- 類圖與物件圖
- 順序圖
- 活動圖
- 狀態圖
考試套路
- 第一題:讀懂題目,搞定邏輯和業務流程,填補類圖,填多重度等(類模型看引數及關聯推斷類名和關係(特殊的:聚合,泛化),切記不能隨便填類名)
- 第二題:填流程圖,用例圖(突破口:特殊關係:泛化,組合),等
- 第三題:優化,分析,模式優化,新增功能,模式等(概念題)
- 注意 書寫規範,看清題意
- 候選類的選擇 使用了良性原則:
- 不會在實際中造成危害的依賴關係,都是良性依賴
- 候選類的刪除 使用了介面隔離原則(ISP):
- 不應該強迫類實現依賴於他們不同的方法(不需要的方法不實現)
用例圖
【概念】
描述使用者需求,從使用者的角度描述系統的功能。展現了一組用例、參與者(actor)以及它們之間的關係。
【描述方式】
橢圓表示用例;人形符號表示參與者(參與者不一定是人,也可能是系統);
【目的】
幫組開發團隊以一種視覺化的方式理解系統的功能需求
【考點】
填用例名,參與者對應的角色名,兩個用例之間的關係。
【答題技巧】
構建用例圖時,常用的方式是先識別參與者,然後確定用例以及用例之間的關係。
- 識別參與者時,考查和系統互動的人員和外部系統。
- 考查用例及其和參與者之間的關係時,通過判斷哪一個特定參與者發起或者觸發了與系統的哪些互動,來識別用例並建立和參與者之間的關聯。
- 考查用例之間的關係時,《include>>(包含)定義了用例之間的包含關係,用於一個用例包含另一個用例的行為的建模;如果可以從一個用例的執行中,在需要時轉向執行另一個用例,執行完返回之前的用例繼續執行,用例間即存在《extend》(擴充套件)關係。
- 用例之間的繼承關係:其中父型別通常是一個抽象泛化用例,具有子型別共有的屬性和行為,每個具體的子型別繼承它,並實現適合自己的特定的操作。
【關係】
包含關係<<include>>是用例之間的關係。若用例A包含用例B,則箭頭指向被包含的用例B。既要執行用例A,必須先執行用例B。
擴充套件關係<<extend>>是用例之間的關係。若用例A中需要擴充套件用例B,則箭頭指向基礎用例A。既要執行用例A,不一定需要執行用例B。
泛化關係是參與者之間的關係。描述了一個參與者可以完成另一個參與者同樣的任務,並可補充額外的角色功能。
類圖
【概念】
顯示系統的靜態結構,表示不同的實體是如何相關聯的。展現了一組物件、介面、協作和它們之間的關係。
【描述方式】
三個矩形,從上往下排列,分別是名字,屬性,操作
【目的】
表示一個邏輯類或實現類,邏輯類通常是使用者的業務所涉及的事物;實現類是程式設計師處理的實體
【考點】
填類名,方法名,屬性名、填多重度、填關係
【多重度】
[1]:表示一個集合中的一個物件對應另一個集合中的1個物件。
[0..*]:表示一個集合中的一個物件對應另一個集合中的0個或多個物件。
[1..*]:表示一個集合中的一個物件對應另一個集合中的1個或多個物件。
[*]:表示一個集合中的一個物件對應另一個集合中的多個物件。
【關係】
依賴關係:虛線箭頭,箭頭指向被使用者
關聯關係
聚合:實線空心菱形,頭部指向整體,部分離開整體可以單獨存在
組合:實線實心菱形,頭部指向整體,部分不能脫離整體存在
泛化關係(繼承):實線空心三角箭頭,箭頭指向父類
實現關係:虛線空心箭頭,箭頭指向介面
物件圖
【概念】
展現了一組物件以及它們之間的關係。物件圖是類圖的例項,幾乎使用與類圖完全相同的標示。
順序圖
【概念】
順序圖是場景的圖形化表示,描述了以時間順序組織的物件之間的互動活動。
構造順序圖時遵循如下指導原則:
- 確定順序圖的範圍,描述這個用例場景或一個步驟;
- 繪製參與者和介面類,如果範圍包括這些內容的話;
- 沿左手邊列出用例步驟;
- 對控制器類及必須在順序中協作的每個實體類,基於它擁有的屬性或已經分配給它的行為繪製框;
- 為持續類和系統類繪製框;
- 繪製所需訊息,並把每條訊息指到將實現響應訊息的責任的類上;
- 新增活動條指示每個物件例項的生命期;
- 為清晰起見,新增所需的返回訊息;
- 如果需要,為迴圈、可選步驟和替代步驟等新增框架。
【描述方式】
橫跨圖的頂部,每個框表示每個類的例項或物件;類例項名稱和類名稱使用冒號分開
【目的】
顯示流程中不同物件之間的呼叫關係,還可以顯示不同物件的不同調用。
【考點】
填物件名、填訊息
狀態圖
【概念】
描述物件的所有狀態以及事件發生而引起的狀態之間的轉移
【描述方式】
起始點:實心圓
狀態之間的轉換:使用開箭頭的線段
狀態:圓角矩形
判斷點:空心圓
一個或多個終止點:內部包含實心圓的圓
【目的】
表示某個類所處的不同狀態以及該類在這些狀態中的轉換過程
活動圖
【概念】
描述滿足用例要求所要進行的活動以及活動時間的約束關係
【描述方式】
起始點:實心圓
活動:圓角矩形
終止點:內部包含實心圓的圓
泳道:實際執行活動的物件
【目的】
表示兩個或多個物件之間在處理某個活動時的過程控制流程
資料結構及演算法
分治法
分解、解決、合併
遞迴技術
二分查詢
回溯法
一種選優搜尋法,當搜尋到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇。
貪心法
總是做出在當前來說是最好的選擇,而並不從整體上加以考慮,區域性最優,整體不一定最優。
動態規劃
在求解問題中,對於每一步決策,列出各種可能的區域性解,再依據某種判定條件,捨棄那些肯定不能得到最優解的區域性解,在每一步都經過篩選,以每一步都是最優解來保證全域性是最優解
面向物件程式設計
Java
【interface與implements】
interface //定義介面的關鍵字
implements //類實現介面的關鍵字
//如果出現了interface,後面必然要有implements。反之,亦然。
//宣告介面
interface 介面名 {
//抽象方法
public void ClassName();
};
//類實現介面
class 類名 implements 介面名{
//重寫介面方法
public void ClassName(){
System.out.println("abc");
}
};
【類與物件】
//引入包中的類
import 包
//類宣告
[類修飾符] class [類名] extends [基類]〔implements 介面〕 //類修飾符:public、private、abstract(抽象類,不能被new)、final(不能繼承此類,成員方法不能被覆蓋)
{
//從這裡開始為類體部分
// 成員變數〔(類變數:用static修飾的變數)、(例項變數:沒有用static修飾的變數)、(最終變數:用final修飾的變數)〕
[修飾符] 資料型別 變數名
// 成員方法〔類方法:用static修飾的方法、例項方法:沒有用static修飾的方法〕
// 如果要在類方法中使用例項變數或者例項方法,就需要使用〔物件〕.〔資料〕的方式
//構造方法:構造方法名必須與其類名相同,而且大小寫都要一致,構造方法沒有返回值,不用void修飾
// 建構函式
[修飾符] 類名([引數行])
{
//建構函式主體(初始化操作)
}
//類體部分結束
}
//類的繼承
[修飾符] class 子類名 extends [父類名]{
……… //類體
}
//定義抽象類
abstract class 類名
{
成員變數;
方法();//定義一般成員方法
abstract 方法(); //定義抽象方法
}
//異常處理
try{
//可能出現的異常的程式程式碼
}catch( ExceptionName1 e ){
//處理例外事件1
}catch( ExceptionName2 e ){
//處理例外事件2
}
......
}finally{
......
}
【介面】
//宣告介面
interface 介面名 {
//抽象方法
public void 方法名();
};
//類實現介面
class 類名 implements 介面名{
//重寫介面方法
public void 方法名(){
System.out.println("abc");
}
};
//定義抽象類
abstract class AirCraft {
//成員變數
protected 介面名 介面名1;
//實現方法
public void 方法名(){
介面名1.方法名();
};
};
//繼承父類
class Helicopter extends AirCraft{
public Helicopter (){
//例項化父類的成員變數
介面名1 = new 類名;
}
};
【關鍵字】
型別 | 關鍵字 | 含義 |
宣告 | ||
import | 表明要訪問指定的類或包 | |
public | 共用模式 | |
private | 私用模式 | |
protected | 保護模式 | |
package | 包 | |
class | 類 | |
interface | 介面 | |
enum | 列舉 | |
implements | 表明一個類實現了給定的介面 | |
void | 聲明當前成員方法沒有返回值 | |
static | 表明具有靜態屬性 | |
abstract | 表明類或者成員方法具有抽象屬性 | |
final | 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變,用來定義常量 | |
extends | 表明一個型別是另一個型別的子型別,這裡常見的型別有類和介面 | |
strictfp | 宣告FP_strict(單精度或雙精度浮點數) | |
native | 宣告一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的 | |
transient | 宣告不用序列化的成員域 | |
volatile | 表明兩個或者多個變數必須同步地發生變化 | |
synchronized | 表明一段程式碼需要同步執行 | |
- | const | 保留關鍵字,沒有具體含義 |
goto | 保留關鍵字,沒有具體含義 | |
new | 用來建立新例項物件 | |
return | 從成員方法中返回資料 | |
break | 提前跳出一個塊 | |
continue | 回到一個塊的開始處 | |
super | 表明當前物件的父型別的引用或者父型別的構造方法 | |
this | 指向當前例項物件的引用 | |
instanceof | 用來測試一個物件是否是指定型別的例項物件 | |
assert | 斷言,用來進行程式除錯 | |
異常處理 | catch | 用在異常處理中,用來捕捉異常 |
try | 嘗試一個可能丟擲異常的程式塊 | |
throw | 丟擲一個異常 | |
throws | 宣告在當前定義的成員方法中所有需要丟擲的異常 | |
finally | 用於處理異常情況,用來宣告一個基本肯定會被執行到的語句塊 | |
基本資料型別 | boolean | 布林型別 |
int | 整數型別 | |
long | 長整數型別 | |
short | 短整數型別 | |
float | 單精度浮點數型別 | |
double | 雙精度浮點數型別 | |
byte | 位元組型別 | |
char | 字元型別 | |
邏輯結構 | if | 條件語句的引導詞 |
else | 用在條件語句中,表明當條件不成立時的分支 | |
switch | 分支語句結構的引導詞 | |
case | 用在switch語句之中,表示其中的一個分支 | |
default | 預設,例如,用在switch語句中,表明一個預設的分支 | |
for | 一種迴圈結構的引導詞 | |
while | 用在迴圈結構中 | |
do | 用在do-while迴圈結構中 |
考試規律
年份 | 時間 | 型別 | 模式 | 關鍵字 |
---|---|---|---|---|
2018 | 上 | 建立型 | 生成器 | 關鍵字 |
2017 | 下 | 結構型 | 橋接 | 關鍵字 |
2017 | 上 | 建立型 | 生成器 | 關鍵字 |
2016 | 下 | 結構型 | 裝飾 | 關鍵字 |
2016 | 上 | 結構型 | 介面卡 | 關鍵字 |
2015 | 下 | 行為型 | 策略 | 關鍵字 |
2015 | 上 | 行為型 | 訪問者 | 關鍵字 |
2014 | 下 | 行為型 | 命令 | 關鍵字 |
2014 | 上 | 行為型 | 觀察者 | 關鍵字 |
2013 | 下 | 結構型 | 橋接 | 關鍵字 |
2013 | 上 | 建立型 | 原型 | 關鍵字 |
2012 | 下 | 建立型 | 抽象工廠 | 關鍵字 |
2012 | 上 | 結構型 | 裝飾 | 關鍵字 |
2011 | 下 | 行為型 | 狀態 | 關鍵字 |
2011 | 上 | 結構型 | 組合 | 關鍵字 |
2010 | 下 | 結構型 | 組合 | 關鍵字 |
2010 | 上 | 行為型 | 策略設計 | 關鍵字 |