2015年系統架構師軟考案例分析考點

  • 2019 年 10 月 27 日
  • 筆記

1.軟體的品質屬性

品質屬性效用包括:性能、安全性、可用性、可修改性。

2.系統架構風險、敏感點和權衡點
  • 2.1 系統架構風險:架構設計中潛在的、存在問題的架構決策所帶來的隱患。
  • 2.2 系統架構敏感點:為了實現某種特定的品質屬性,一個或多個構件所具有的特性。
  • 2.3 系統架構權衡點:影響多個品質屬性的特徵,是多個品質屬性的敏感點。
3.狀態圖和活動圖
  • 3.1 狀態圖主要用於描述一個對象在其生存期間的動態行為,表現一個對象所經歷的狀態序 列,引起狀態轉移的事件(event),以及因狀態轉移而伴隨的動作(action)。
  • 3.2 活動圖可以用於描述系統的工作流程和並發行為。活動圖其實可看作狀態圖的特殊形式,活動圖中一個活動結束後將立即進入下一個活動(在狀態圖中狀態的轉移可能需要事件的觸發)。

兩者最大的區別是:狀態圖側重於描述行為的結果,而活動圖側重描述行為的動作。其 次活動圖可描述並發行為,而狀態圖不能。

3.系統可靠性

可靠性(Reliability)是指產品在規定的條件下和規定的時間內完成規定功能的能力。子特性:成熟性,容錯性,易恢復性,可靠性的依從性。

3.1 提高可靠性的技術

  • (1) N 版本程式設計
  • (2) 恢復塊方法
  • (3) 防衛式程式設計
  • (4) 雙機熱備或集群系統
  • (5) 冗餘設計
4.影響SQL查詢效率的設計
  • 4.1 查詢時盡量不要返回不需要的行、列;
  • 4.2 需要進行多表連接查詢時,盡量使用連接查詢,
  • 4.3 避免使用子查詢結構;
  • 4.4 盡量避免採用 NOT IN、NOT EXIST、LIKE 等使用全表查詢的操作;
  • 4.5 盡量避免使用 DISTINCT 關鍵字
5.數據持久層

數據持久層是一組軟體服務,將應用程式與該程式所使用的數據源分離,為整個項目提供一個統一、安全、並發的數據持久機制。

5.1 優點

  • 1、程式程式碼重用性強,即使更換資料庫,只需要更改配置文件,不必重寫程式程式碼.
  • 2、業務邏輯程式碼可讀性強,在程式碼中不會有大量的 SQL 語言,提高程式的可讀性。
  • 3、持久化技術可以自動優化,以減少對資料庫的訪問量,提高程式運行效率。
  • 4、簡化開發工作,讓開發人員更關注於業務邏輯的開發。
  • 5、通過對象/關係映射向業務邏輯提供面向對象的數據訪問。
6.Hibernate比Mybatis的優點
  • (1) 從移植的角度來看使用 Hibernate 更容易移植到其它資料庫平台。Hibernate 與具體資料庫的關聯只需在 XML 文件中配置即可,所有的 HQL 語句與具體使用的資料庫無關,移植性很好。MyBatis 項目中所有的 SQL 語句都是依賴所用的資料庫的,所以不同資料庫類型的支援不好。
  • (2) 使用 Hibernate 能降低或者消除 SQL 語句開發工作量,Hibernate 提供了方法完成持久層操作,程式設計師不需要對 SQL 的熟練掌握,便可完成任務。
  • (3) Hibernate 提供了對象狀態管理的功能,使開發者不再需要理會底層資料庫系統的細 節,而 MyBatis 在這一塊沒有文檔說明,用戶需要對對象自己進行詳細的管理。
6.JDBC封裝BMP, CMP
7.SQL Mapping封裝iBatis/MyBatis
8.O/R Mapping封裝SprmgJdbcTemplate
9.TopLink,JDO,Hibernate

iBatis 是 apache 的一個開源項目,一個 O/R Mapping 解決方案,iBatis 最大的特點就 是小巧,上手很快。如果不需要太多複雜的功能,iBatis 是能夠滿足你的要求又足夠靈活的 最簡單的解決方案,現在的 iBatis 已經改名為 Mybatis 了。

EJB 有 兩 種 主 要 類 型 BMP(Bean managed persistence ) 和 CMP(Container managed persistence ),這兩種類型各有優缺點。

BMP 是在 Bean 中完成對資料庫 JDBC 的各種調用,也就是說,在你的實體 bean(entity bean)中,明確寫入了 SQL 語句,如"insert … 「或"select …」,並且使用 Datasource 獲得一個資料庫資源以及連接(connection)從而對資料庫直接進行增加刪除修改。

CMP 是由 EJB 容器自動完成對資料庫的操作,你所有做的,就是在實體 bean 重寫入 SetXXX 或 getXXX 方法,然後在 ejb-jar.xml 中定義 cmp-field 就可以。

Hibernate 對資料庫結構提供了較為完整的封裝,Hibernate 的 O/R Mapping 實現了 POJO和資料庫表之間的映射,以及 SQL 的自動生成和執行。程式設計師往往只需定義好了 POJO 到資料庫表的映射關係,即可通過 Hibernate提供的方法完成持久層操作。程式設計師甚至不需要對 SQL 的熟練掌握, Hibernate/OJB 會根據制定的存儲邏輯,自動生成對應的 SQL 並調用 JDBC 介面加以執行。

iBATIS 的著力點,則在於 POJO 與 SQL 之間的映射關係。然後通過映射配置文件, 將 SQL 所需的參數,以及返回的結果欄位映射到指定 POJO。相對 Hibernate「O/R」而言,iBATIS 是一種「Sql Mapping」的 ORM 實現。

10.Hibernate 的調優方案
  • 10.1 制定合理的快取策略
  • 10.2 盡量使用延遲載入特性
  • 10.3 採用合理的 Session 管理機制
  • 10.4 使用批量抓取,設定合理的批處理參數(batch_size)
  • 10.5 進行合理的 O/R 映射設計
11.Mybatis 調優方案

MyBatis 在 Session 方面和 Hibernate 的 Session 生命周期是一致的,同樣需要合理 的 Session 管理機制。MyBatis 同樣具有二級快取機制。 MyBatis 可以進行詳細的 SQL 優化設計。

12.SQL 優化方面

Hibernate 的查詢會將表中的所有欄位查詢出來,這一點會有性能消耗。Hibernate 也可 以自己寫 SQL 來指定需要查詢的欄位,但這樣就破壞了 Hibernate 開發的簡潔性。而 Mybatis 的 SQL 是手動編寫的,所以可以按需求指定查詢的欄位。 Hibernate HQL 語句的調優需要將 SQL 列印出來,而 Hibernate 的 SQL 被很多人嫌棄因 為太丑了。MyBatis 的 SQL 是自己手動寫的所以調整方便。但 Hibernate具有自己的日誌統計。Mybatis 本身不帶日誌統計,使用 Log4j 進行日誌記錄。

13.擴展性方面

Hibernate 與具體資料庫的關聯只需在 XML 文件中配置即可,所有的 HQL 語句與具體 使用的資料庫無關,移植性很好。MyBatis 項目中所有的 SQL 語句都是依賴所用的資料庫 的,所以不同資料庫類型的支援不好。

14.對象管理

Hibernate 是完整的對象/關係映射解決方案,它提供了對象狀態管理(state management)的功能,使開發者不再需要理會底層資料庫系統的細節。也就是說,相對於常見的JDBC/SQL 持久層方案中需要管理 SQL 語句,Hibernate採用了更自然的面向對象的視角來持久化 Java 應用中的數據。 換句話說,使用 Hibernate 的開發者應該總是關注對象的狀態(state),不必考慮 SQL 語句的執行。這部分細節已經由 Hibernate 掌管妥當,只有開發者在進行系統性能調優的時 候才需要進行了解。 而 MyBatis 在這一塊沒有文檔說明,用戶需要對對象自己進行詳細的管理。

15.抓取策略

Hibernate 對實體關聯對象的抓取有著良好的機制。對於每一個關聯關係都可以詳細地 設置是否延遲載入,並且提供關聯抓取、查詢抓取、子查詢抓取、批量抓取四種模式。它是 詳細配置和處理的。 而 Mybatis 的延遲載入是全局配置的。