常見的軟件工程知識點

1.軟件版本命名java

軟件版本號由四部分組成:web

第一部分            軟件架構或軟件界面變化數據庫

第二部分            軟件功能新增編程

第三部分            軟件bug修復c#

第四部分           1.編譯版本號加日期版本號 它是編譯時的版本標記,通常序號都是遞增的。(如windows系統版本號)
windows

                          2.日期版本號加希臘字母版本號 用於記錄修改項目的當前日期,天天對項目的修改都須要更改日期版本號。設計模式

                         希臘字母版本號常見有3種,分別爲:alpha(內測版)、beta(公測版)、release(正式版)。緩存

                         例如:1.1.1.20160101_beta安全

 

2.軟件開發模型服務器

邊作邊改型

瀑布模型---->敏捷開發(演變)          

快速原型模型          

增量模型            

迭代(演化)模型        

螺旋模型

極限編程模式

 

3.web軟件結構模式

B/S模式

C/S模式

 

4.軟件編程設計模式

mvc模式

mvp模式

mvvm(mvvc)模式

 

5.單例與原型(屬於軟件設計模式)

單例只有一個實例。(世界上只有獨一無二的我)                

原型根據一個原型建立N個對象。(根據「人」,創造「男人」與「女人」)

 

6.軟件編程範式(思想)

面向過程編程 / 過程式編程(POP)

面向過程編程按照函數步驟一步步往下執行。

以功能函數(funtion)爲中心編程。

 

面向對象編程(OOP)

面向對象編程把事物拆分紅各類對象,在各類對象裏面封裝了一些方法,對象之間相互調用並執行。

以對象數據(data)爲中心編程。

 

面向切面編程(面向側面)

函數式編程

函數響應式編程

邏輯編程

 

7.軟件架構風格 

rest風格:經過url來定義資源位置與操做。

如:http://example.com/resources/    或者    http://example.com/order

 

8.軟件設計架構

面向服務架構

微服務架構

 

9.軟件設計範式

約定優於配置 (慣例重於配置),目的按照約定的規範編程(約定軟件目錄結構,代碼命名),減小軟件開發人員需作決定的數量(大幅度減小配置的工做量),提升開發效率。

PS:並不是一切都是積極的。任何結構化軟件項目都存在兩個基本問題。

        會增長學習成本,學習軟件編程規則,強迫軟件開發人員必須遵照此規則。(代碼文件必定要這樣子命名,代碼文件必定要放在這裏)

        會讓軟件開發人員忽略一些軟件實現的基本原理。(不知道爲何要這樣作,是怎麼實現的)

   

10.UML基本模型圖

結構UML圖

類圖                面向對象編程中類與類之間關係、屬性。例如:User class 與 vendor Class關係
組件圖            描述系統軟件之間交互關係,接口。例如:Apache+Tomcat+webApp1+webApp2+dataBase結構
複合結構圖     面向對象編程中類與結構化分類器、部件、端口、鏈接器和協做。例如,user類經過login接口登錄user界面
部署圖            描述系統軟件部署的節點。例如:數據庫服務器集羣。
對象圖            面向對象編程中類具體某個實例。例如:user類中若是common user角色就進入common user界面。若是admin user角色就進入admin user界面。
包裝圖            面向對象包名(命名空間)的關係。例如:Dao包裏面包含UserDao類。

行爲UML圖(交互UML圖)

活動圖           描述系統軟件的業務功能,流程圖。例如:用戶第一步作什麼,第二步作什麼。
通信圖           描述用戶對象之間的協做,而不是時間序列,相似於序列圖,只是新增人物角色在序列圖裏面。
交互概覽圖    序列圖與活動圖的混合圖。
狀態圖           系統軟件的不一樣狀況下,執行什麼樣的動做。例如:用戶登錄失敗狀態,用戶登錄成功狀態,用戶登錄過時狀態會出現什麼的操做。
序列圖           面向開發人員介紹用戶在一個時間軸(生命線)上操做行爲。例如:用戶進入登錄頁面,未註冊用戶點擊「註冊」按鈕註冊頁面,填寫信息後提交表單,再進入登錄頁面進行登錄。
定時圖           描述多條生命線上的操做行爲。相似於序列圖。
用例圖           面向普通人員介紹用戶與系統軟件的交互。例如:登錄用戶擁有什麼操做權限,未登錄用戶擁有什麼權限。

PS:這是UML 2.x的13種圖表。
        在實際建模中,結構圖是必需,但行爲圖(交互圖)只需序列圖用例圖活動圖

 

11.字節流與字符流
以InputStream(輸入)/OutputStream(輸出)爲後綴的是字節流。
以Reader(輸入)/Writer(輸出)爲後綴的是字符流。

字節流:程序-直接操做文件-文件
字符流:程序-放入緩存-寫入文件-文件

PS:優先使用字節流。

 

12.heap(堆)和stack(棧)

堆是操做系統動態分配內存空間的。訪問速度慢,全局訪問變量,先進先出。

棧是編程語言固定分配內存空間的。訪問速度快,局部訪問變量,先進後出。

 

 

13.接口與抽象類

接口就是指一些行爲或動做。(有沒有這種行爲或動做)

抽象類就是指一些事物的本質。(是否是這種東西)

 

14.阻塞與非阻塞

阻塞就是一直等待消息,不等到消息不離開,一直擋道。

非阻塞就是每隔一段時間去看看消息到了沒,沒到就回去,不擋道。

 

15.異步與同步

異步就是作完一件過後,不須要等待結果,接着幹另外一件事。

同步就是作完一件過後,等待結果,拿到結果才能幹另外一件的事。

 

16.線程與進程

關係:線程是進程的一部分,線程做爲進程的子集存在。

區別:線程相似於一棵樹的全部枝幹。

          線程共享同一個進程地址空間。(包括內存和其餘資源)

          線程之間數據交互快,線程之間切換快。

          進程相似於獨立的一棵樹。

          進程具備單獨的地址空間。

          進程之間數據交互慢,只能經過操做系統提供的機制交互。

 

17.多線程與單線程

     多線程優勢:應用程序保持對輸入的響應,充分發揮硬件的優點(CPU、內存、硬盤),充分利用空閒資源,並行處理任務。(同步處理任務)

               缺點: 同步處理任務偶爾會發生衝突。(同一個時間線程之間操做相同的數據)

                           線程之間會相互佔硬件資源,線程過多,會致使軟件性能會降低。

                           線程中某一個線程崩潰就會致使當前整個進程崩潰。

          應用例子:Tomcat、Apache。

       單線程優勢: 應用程序不損耗硬件資源,相對線程安全。

                  缺點: 容易發生程序阻塞,若是其中一個任務操做時間過長,就會凍結整個程序。

           應用例子:Nodejs、Nginx、Redis 。

PS:Nodejs是多線程,Nodejs應用程序是單線程。

 

補充:軟件應用進程類型

         CPU Bound (國內翻譯爲CPU密集型): 軟件依賴 CPU計算速度

         I/O Bound (國內翻譯爲I /O密集型) :軟件依賴 I /O 計算速度

         以上兩種應用進程類型都受 Memory Bound (內存限制)。

 

18.並行和併發

並行指應用程序同一時間把多個任務拆分紅子任務而且同時執行任務。(多核CPU執行任務)

併發指應用程序同一時間出現多個任務而且執行任務。(單核CPU執行任務)

並行是併發的一個子集,一個應用程序能夠是併發的,也能夠是並行的。

 

19.數據持久化
將一些臨時產生的數據永久保存到硬盤上,不隨系統,內存,時間變化而變化。
 

19.錯誤與異常

錯誤表示軟件正常狀況下,出現不可控制的問題。 好比說內存泄露。

PS: 內存泄漏是一種特殊的編程錯誤。內存泄漏並不是指內存在物理上的消失,而是應用程序分配某段內存後,因爲設計錯誤,致使在釋放該段內存以前就失去了對該段內存的控制,從而形成了

          內存的浪費。有很多人習慣於把任何不須要的內存使用的增長描述爲內存泄漏,即便嚴格意義上來講這是不許確的。     

 

20. 垃圾收集(垃圾回收)

      垃圾收集機制分爲兩種,一種是硬盤垃圾收集機制,另外一種是內存垃圾收集機制。

      硬盤垃圾收集機制,存在於一些高端固態硬盤(ssd),針對一些有效數據進行讀取與重寫操做。(相似與硬盤碎片整理機制)

      內存垃圾收集機制,存在於一些編程語言的編譯器,幾乎全部的編譯器都具有這樣的機制(c語言編譯器除外),這種機制有效的保證程序運行中,可以必定程度避免出現內存泄漏,達到內

存空間循環利用的目的。

 

21.腳本語言與編程語言

腳本語言/直譯語言(解釋語言驅動)  

運行原理:         解釋---運行(每次都要(解釋---運行)這兩步)

通俗易懂的例子:說一句,翻譯一句。

編譯語言(機器語言驅動)     

運行原理:         編譯---二進制文件---運行(第一次運行須要編譯,以後每次運行只走(二進制文件---運行)這兩步)

通俗易懂的例子:整理全部的翻譯內容,而後再把全部內容翻譯出來。            

編譯語言性能與能力都優於腳本語言。

補充: Java,c#等兼具編譯型語言與解釋型語言的特色的。

 

PS:解釋器與編譯器區別

      

      高級編程語言與低級編程語言

      高級編程語言就是接近天然語言(人類語言),見其名知其義。

      好比:java,c#,Python。 

      低級編程語言就是接近彙編語言或者機器語言,語言精練,不易閱讀與理解。

      好比:彙編語言。

 

22.軟件位數(32位與64位)

位數越高意味着數據能夠在更大的塊進行處理,這也意味着更準確。

位數越高意味着系統能夠指向或地址的物理內存位置的更大的數字。

以windows系統爲例:

 

PS:MAC OS X/MACOS 是64位操做系統。

        電腦主機內存超過4G以上的建議安裝64位操做系統,更能發揮內存的做用。(如今大多數的cpu都是64位的)

 

23.bit(位)、(byte)字節、字符區別

bit是計算機存儲設備的最小單位。

byte是計算機處理數據的基本單位。

字符是人使用的符號,抽象的,如,a,b,1,2。

 

PS:1byte=8bit,一個漢字兩個字節,一個英文一個字節。

 

24.gb(Gigabyte)與gib (Gibibyte) 區別

gb是一種十進制的信息計量單位。

1GB = 1,000(103)MB

gib是一種二進制的信息計量單位。

1GiB = 1,024(210)MiB

 

PS:由於windows系統把這兩個單位搞混,致使外存儲設備顯示的容量與標示的容量不符。windows操做系統顯示的gib,不是gb。

      外存儲設備的實際容量與標示容量相符,是正確的,並無小。

      硬件廠商採起十進制的換算方法計算。緣由是1k=1000,1k!=1024。

 

25.編碼

ASCII(美國信息交換標準代碼)是美國製定的,基於26個基本拉丁字母的一種語言編碼。(英文語言編碼)

Unicode(中文:萬國碼、國際碼、統一碼、單一碼)是Unicode聯盟制定的,擁有全世界的語言的一種語言編碼(世界標準編碼)

如:UTF-8,UTF-16

GB 2312 或 GB 2312–80 是中華人民共和國國家標準簡體中文字符集(中國標準編碼)。

如:GBK 是中文字符擴展集(已過期),GB 18030是國內目前最新的中文字符集。

Big5是針對中國使用繁體中文(正體中文)地區的中文字符集(中國港澳、臺灣地區標準編碼)。

 

26.硬編碼與軟編碼。

硬編碼就是使用固定值。

如:

var a, b = 2;
if (a == 2) {
    alert('正確')
}

軟編碼就是使用變量去代替固定值。

如:

var a, b = 2;
if (a == b) {
    alert('正確')
}

 

27.軟件開源協議

GPL協議:GNU General Public License是指GNU通用公共許可協議。開發者必須保證源碼的做者或團隊能收到或獲得源碼,而且將這些條款給他們看,使他們知道他們有這樣的權利。強制公開全部的代碼。

LGPL協議: GNU Lesser General Public License 是指GNU 寬通用公共許可協議。開發者在不修改源碼的前提,只引用源碼的功能,無需強制開源本身的代碼。

BSD協議: Berkly Software Distribution 是指BSD許可證。開發者不能夠用原做者或 機構名字和原來產品的名字作市場推廣,並且還要開發者的軟件帶上BSD協議,並在軟件文檔中聲明BSD協議。此協議能夠控制。第三方的代碼並能夠加以修改。

Apache License協議:非盈利開源組織Apache 採用的協議,與BSD相似。

MPL協議:The Mozilla Public License是指非盈利開源組織Mozilla採用的協議,開發者不受專利限制。

EPL協議:Eclipse Public License是指非盈利開源組織Eclipse採用的協議,商業軟件可使用,也能夠修改EPL協議的代碼,但要承擔代碼產生的侵權責任,與BSD相似。

MIT協議:源自美國麻省理工學院命名,開發者有權利使用、複製、修改、合併、出版發行、散佈、再受權及販售軟件,並能夠修改協議條款。但必須聲明其原做者版權與許可聲明。

CDDL協議:Common Development and Distribution License是指通用開發與銷售許可協議,實爲MPL的拓展協議,容許公共版權使用,無專利費,並提供專利保護,可集成於商業軟件中,容許自行發佈許可。

相關文章
相關標籤/搜索