本意用於考研復試,以下是博主自己整理,博主是大四本科生,不能保證內容完全正確,請辯證地看,如果有問題可以在評論區指出我再修改。 整理不易,我就不掛個二維碼請游客付費了,如果可以的話,麻煩高抬貴手,點一下右下角的推薦吧!
面向對象與面向過程的區別
1)面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用
2)面向對象是把構成問題事務分解成各個對象,描述某一個事物做某件事情的行為,以功能來划分問題。
例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最后結果。把上面每個步驟用分別的函數來實現,問題就解決了。
而面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。
面向對象的三個特征
三大特性是:封裝,繼承,多態
現實世界中任何實體都可以看作是對象,對象之間通過消息互相作用。
l 封裝:把客觀事物封裝成抽象的類,對外界實現接口調用,可以隱藏內部方法實現細節。比如:計算機語言加減乘除,我們只需提供數字與符號即可得出結果。具體怎么計算我們不知道底層實現。
l 繼承:讓一個對象在無需重新編寫原來的類的情況下擁有另一個對象的屬性和方法,同時該對象可以擁有自己獨有的屬性和方法。例如:狗和人都繼承自動物類,都有身高和體重等屬性,都會吃飯、走路、睡覺等方法,但是人還可以說話。
l 多態:讓一個方法面對不同類型的對象做出不同的響應。例如:狗和人--->吃飯 ,狗吃飯不用工具,人吃飯要用筷子等工具。
B/S和C/S的優缺點
C/S(Client/Server):客戶端/服務器結構。界面表示、事務處理邏輯放在客戶端,服務端主要負責數據的存儲管理,
B/S(Browser/Server):瀏覽器/服務器結構,界面顯示邏輯放在瀏覽器,事務處理邏輯則在Web Server。通常由Browser、Web Server、數據存儲Server形成三層架構。
1. C/S優缺點
(1) 優點:
l 能充分發揮客戶端PC的處理能力,具有較強的事務處理能力,能實現復雜的業務流程
l 操作界面漂亮、形式多樣,可以充分滿足客戶自身的個性化要求
l 容易保證安全性,程序更注重流程
(2) 缺點:
l 需要專門的客戶端安裝程序,分布功能弱,快速部署安裝和配置困難
l 兼容性差,需要考慮運行平台,如操作系統版本
l 開發、維護成本較高, 發生一次升級,則所有客戶端的程序都需要更新。
2. B/S優缺點
(1)優點:
l 分布性強,客戶端零維護,只要有網絡、瀏覽器,就可以隨時隨地進行查詢、瀏覽等業務處理。
l 業務擴展簡單方便,通過增加網頁即可增加服務器功能
l 維護簡單方便,只需要改變網頁,即可實現所有用戶的同步更新
(2)缺點:
l 個性化特點明顯降低,無法實現具有個性化的功能要求
l 在跨瀏覽器上,BS架構不盡如人意
l 在速度和安全性上需要花費巨大的設計成本
l 功能弱化,難以實現傳統模式下的特殊功能要求
5. Java和C的區別
1)內存管理
在Java中,基本不用考慮內存的問題,如果想用一個對象,new一個就可以,這個過程的背后則是JRE為對象分類的一定內存,當JRE發現你不再使用這個對象的時候,他就會自動回收內存,也就是說只管借東西,不用管歸還
但是C則不同,如果你想用,你可以用malloc之類的方法申請內存,當你使用完了,需要自己把這塊內存歸還回去,也就是調用free方法來完成這個任務。由於需要顯式的歸還內存,因此當一個函數需要將一塊內存返回給調用者的時候,問題就比較復雜了,不如面向對象和具有內存回收功能的Java那么直觀了。
2)面向對象
Java的面向對象的特點很明顯,而C則是一個地道的結構化語言。 Java中有一個字符串類String, 通過調用 String.length()就可以知道字符串的長度,但是在C語言中,則需要調用函數strlen(str)來得到字符串(字符數組)的長度。由於C不是面向對象的語言,也就沒有this的概念,因此當使用一個與某個“東西”相關的函數時,就需要不厭其煩的將代表這個“東西”的變量作為參數傳遞進去。
3)Java里面沒有指針,不支持全局變量和結構體
6、簡述C語言中指針及其作用
一個變量的地址稱為該變量的指針
一個專門用來存放另一個變量的指針的變量稱為指針變量
指針直接指向目標的存儲地址,實現直接訪問對象存儲空間的功能。
7、什么是預處理
程序設計中的預處理(Preprocess)是在程序源代碼被編譯之前,由預處理器(Preprocessor)對程序源代碼進行的處理。這個過程並不對程序的源代碼進行解析,但它把源代碼分割或處理成為特定的符號用來支持宏調用。
預處理器的主要作用就是把通過預處理的內建功能對一個資源進行等價替換,最常見的預處理有:文件包含,條件編譯、布局控制和宏替換4種。
8、堆和棧
l 棧內存:存儲的是定義在方法中的都是局部變量,要先加載函數才能進行局部變量的定義,所以函數先進棧,然后再定義變量,變量有自己的作用域,一旦離開作用域,變量就會被釋放。棧內存的更新速度很快,因為局部變量的生命周期都很短。
l 堆內存:存放的是實體(對象),如果一個數據消失,這個實體也沒有消失,還可以用,所以堆是不會隨時釋放的。堆里的實體雖然不會被釋放,但是會被當成垃圾,Java有垃圾回收機制不定時的收取。
9、Java的特點
- 面向對象
- 分布式:Java包括一個支持HTTP和FTP等基於TCP/IP協議的子庫。因此,Java應用程序可憑借URL打開並訪問網絡上的對象
- 可移植的 最大的功臣就是JVM的技術。大多數編譯器產生的目標代碼只能運行在一種CPU上(如Intel的x86系列) 但JAVA編譯器就不同了。JAVA編譯器產生的目標代碼(J-Code) 是針對一種並不存在的CPU--JAVA虛擬機(JAVA Virtual Machine),而不是某一實際的CPU。JAVA虛擬機能掩蓋不同CPU之間的差別,同體系結構無關的特性使得Java應用程序可以在配備了Java解釋器和運行環境的任何計算機系統上運行,
- 多線程 多線程功能使得在一個程序里可同時執行多個小任務。
- Java使用Unicode作為它的標准字符,這項特性使得Java的程序能在不同語言的平台上都能撰寫和執行
10、軟件生命周期
可行性研究->需求分析->軟件設計(概要設計和詳細設計)->編碼->軟件測試->軟件維護
11、軟件過程模型
1) 瀑布模型:瀑布模型把軟件開發過程划分成若干階段,每個階段的任務相對獨立,在軟件生存期的每個階段都采用科學的管理技術和良好的方法與技術,而且每個階段結束之前,都從技術和管理兩個角度進行嚴格的審查,經確認之后才開始下一階段的工作。是一種線性開發模型,具有不可回溯性。適用於需求發送變化少,並且開發人員可以一次性獲取全部需求的開發。
優點:模型簡單,執行容易
缺點:無法適應變更
2) 快速原型:快速建立一個能反映用戶主要需求的原型系統,讓用戶在計算機上試用它,用戶試用原型系統后提出修改意見,開發人員按照用戶的意見快速修改原型系統。直到原型系統滿足用戶要求。適用於已有產品或產品原型(樣品),只需客戶化的工程項目。
3) 增量模型:把待開發的軟件系統模塊化,將每個模塊作為一個增量組件,從而分批次地分析、設計、編碼和測試這些增量組件。開發人員不需要一次性地把整個軟件產品提交給用戶,而是可以分批次地進行提交,是一個遞增式的過程。
優點:降低了軟件開發的風險,開發順序靈活。
4) 螺旋模型:兼顧了快速原型的迭代特征以及瀑布模型的系統化與嚴格監控,強調了其他模型所忽視的風險分析。螺旋模型采用一種周期性的方法來進行系統開發。在每個項目階段使用瀑布模型法。這種模型的每一個周期都包括需求定義、風險分析、工程實現和評審4個階段,由這4個階段進行迭代。軟件開發過程每迭代一次,軟件開發又前進一個層次。適用於風險較大的大型軟件項目開發
12、黑盒測試
黑盒測試是在已知產品所應具有的功能,通過測試來檢測每個功能是否都能正常使用,在測試時,在完全不考慮程序內部結構和內部特性的情況下,測試者在程序接口進行測試,它只檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數鋸而產生正確的輸出信息,
13、白盒測試
白盒測試是知道產品內部工作過程,可通過測試來檢測產品內部動作是否按照規格說明書的規定正常進行,按照程序內部的結構測試程序,檢驗程序中的每條通路是否都有能按預定要求正確工作.