计算机专业术语简单释义
計算機專業術語簡單釋義
先簡單聲明兩個基本概念
客戶端 :是為客戶提供本地服務的程序,最常見的有我們電腦上的瀏覽器
服務器 :就是指運行著服務軟件的高性能計算機或計算機系統,用以存儲數據,為客戶提供信息(一般也把服務軟件直接稱為服務器如nginx,uWSGI)
ftp/http/https/http2.0
ftp :指文本傳輸協議,性質類似與我們平常所見的http,但解決了http協議中傳輸文件較慢的特點。打開瀏覽器,在地址欄直接輸入ftp://…..就可以進行訪問相應的服務器,既可以把文件傳送上存放,也可以從上面把文件下載到本地
http :指超文本傳輸協議,是客戶端和服務器之間請求和應答的標準,二者之間采用http協議進行通信(數據傳遞),一般傳遞的數據是指超文本文檔(HTML文檔)
https :簡單來講就是http的安全版,是一種加密的超文本傳輸協議,由http+ssh(為建立在應用層和傳輸層基礎上的安全協議)組合而成,使客戶多個并發的端與服務器之間加密通信,即在通信過程中要身份認證,像一些網上銀行,安全性比較重要的網站都會使用https
http2.0 :是下一代的http協議,在http基礎上增加了一些新的功能,如增加加密技術,引入二進制框架(以前的http所不兼容),支持多個并發的http請求等等
TCP/IP
先簡單介紹一下協議的的四個層次
連接層:負責電路的鏈接
網絡層:負責為聯網機器分配地址和傳輸二進制數據
傳輸層:負責傳輸文本數據
應用層:負責傳輸最終態數據,直接和用戶打交道(常見的協議有http,ftp)
后一層協議都是以前一層為基礎
TCP :是傳輸層的主要協議,負責發現傳輸問題,一有問題就發出信號,要求重新傳輸
IP :是網絡層的主要協議,負責給每臺聯網機器規定一個IP地址
TCP/IP都是英特網上基礎的協議
gzip壓縮
gzip壓縮 :用于壓縮文件,通常我們在Linux系統下見到的以gz為后綴名的文件就是gzip格式的,它是一種文件壓縮格式。在Linux下可以直接用gzip命令來壓縮文件(或解壓文件),如 gzip test.tar 就可以把test.tar文件壓縮成test.tar.gz
nginx/uwsgi/cgi/php-fpm/fastcgi
nginx :是一款輕量級的http服務器,反向代理器,說它是一個服務器,更準確的說它應該是一款服務程序(由C語言編寫),運行在服務器上。我們自己的電腦運行nginx,可以作為一個簡單的服務器
uWSGI :區別WSGI和uwsgi,WSGI和uwsgi都是一種協議,uWSGI是實現了這兩種協議的web服務器,性質類同nginx,是運行在服務器上的一款服務軟件,可直接稱為服務器,一般與nginx配合使用,因為nginx有很好的靜態文件處理能力,將動態內容發給uWSGI,二者結合可以達到很好的服務效果
cgi :cgi是一種協議,規定服務器與cgi程序程序之間的通信(即應該傳那些東西,那些東西不傳),區別cgi與cgi程序,cgi是協議,而cgi程序是實體(也就是程序),cgi程序一般是指php解釋器(如php-cgi)。
fastcgi :fastcgi也是一種協議,用于對進程管理,提高cgi程序(php-cgi)的性能。php-cgi只是一個cgi程序,并不會進程管理,所以就要一些調節php-cgi的進程的程序
php-fpm :其實php-fpm就是上面所說的那些調節php-cgi進程的管理器之一,即它是cgi程序進程管理器,實現了fastcgi協議
高階函數/函數柯里化
高階函數 :函數想必大家都知道,在C語言中經常用到這一概念,那什么是高階函數呢?只要一個函數的參數能夠接收函數或者函數能夠返回函數,我們就稱這樣的函數為高階函數
函數柯里化 :就是把接收多個參數的函數變換成為接收單一參數的函數的過程,這個接收單一參數的函數返回值為一個新函數,這個新函數又可以接收原函數余下的參數。舉個例子(JavaScript)
function add(n)
{ return function(m)
{ rerurn m+n
}
add1=add(2)
print(add1(1))
輸出的結果就是3
函數式編程
函數式編程 :函數式編程,如同面向過程,面向對象的編程方式一樣,是一種編程思想和編程模式,模塊化是成功編程的關鍵,而函數式編程可以極大地改進模塊化。函數式編程有很多特性,支持高階函數,用遞歸作為控制流程的機制
前置條件/后置條件/循環不變量/代碼正確性檢驗
前置條件 :前置條件就是把條件放在前面,先檢查,如果條件不符合,則后面的程序就沒有機會執行(類似while模型)
后置條件 :后置條件是把條件放在后面,程序至少要被執行一次,然后再檢查條件是否通過,如果通過則接著執行,反之就不執行(類似do…while模型)
循環不變量 :顧名思義,就是要在循環中保持不變的量,一個循環不變量是指在循環開始和循環中每一次迭代時永遠為真的量,可以幫助我們在寫循環時不至因細節而出問題,用于檢驗循環的正確性。代碼實例可參見http://www.douban.com/group/topic/11516372/
代碼正確性檢驗 :在寫代碼的過程中出現錯誤是在所難免的,代碼正確性檢驗就是用來測試程序,將測試過程中的結果和預期結果比較,分析出錯原因,然后加以改正
hash函數/曼哈希/加密算法
hash函數 :是一個將一種任意長度的消息壓縮到到某一固定長度的消息的函數,主要應用于信息加密,他把一些不同長度的信息轉化成雜亂的128位的編碼
慢哈希 :讓哈希函數變慢,使那些想破解的人認為破解這個沒有多大意義
加密算法 : 是一種把原來是明文的文件或數據處理成一種不可讀的代碼
線程/進程/協程/并行算法
進程 :簡單來講就是某個獨立功能的程序的一次動態執行過程,多個進程可以同時包含同一個程序,程序執行完畢,進程就消亡了,進程的組成包括正在執行的程序,以及其對應的數據等,進程是是系統進行資源分配和調度的基本單位
線程 :線程是進程的子集,一個進程可以包含多個線程,每一個線程都共享進程中的資源,所以線程占用的資源比較少。可以把線程理解為輕量級的進程
協程 :進程和線程都是由系統控制的,而協程是用戶層面的,有用戶自己承擔起調度責任,這樣就避免了無意義的調度,但同時也失去了使用CPU的能力
并行算法 :是把一個簡單的問題分成若干個相互獨立的自問題,然后使用多個機器去處理,同時求解每一個子問題,最終獲得原問題的解,這種算法可以提高運算速度
文件系統
文件系統 :文件系統是操作系統中專門負責管理和存儲文件信息的軟件機構,我們平時對文件的修改,刪除,移動等操作都屬于文件系統的范疇。文件系統的體系結構可用樹狀圖表示
html/css/js
這是一套做網頁,前端設計的標準套裝
html :超文本標記語言,所謂超文本,就是指頁面內不僅僅只有純文本,還有圖片,鏈接,視頻,音樂等。平時在瀏覽器上瀏覽的網頁基本上都是用html所寫
css :css是用來美化頁面的,控制頁面的布局,比如一段文字應該放在頁面的什么位置,用什么顏色顯示等。
js :JavaScript的簡寫,是一種增強表現力的腳本語言,可以為html頁面增加許多動態性效果,如在一個網頁上點擊“登錄”,頁面就會彈出一個登錄的小窗口
bcd/mit licenses
bcd :BCD碼,也稱二碼十進數,是一種二進制的數字編碼形式,這種編碼形式能夠是二進制和十進制數得以快速的轉換。它常用于會計系統
mit licenses :是一種非常寬松的許可證,使用該許可證的軟件有以下權限:免費,任何人使用,經營這種軟件不受任何限制,包括修改,出版,發行等
cocoa
cocoa :是mac os x系統上一種應用程序環境(運行環境和開發環境),和Java一樣
mvc模式
mvc :mvc是一種框架模式,m代表模型(是程序的核心,處理核心程序),v代表視圖(顯示數據),c代表控制器(處理輸入,調用模型),這種模式使這三者分離開來,有利于開發人員專注于其中一個方面,可以對這三塊同時進行開發
裝飾者/裝飾器模式
裝飾者 :可以動態地給一個對象添加一些額外的功能,與繼承類似(當有些問題不適合用子類來進行拓展的話可以考慮使用裝飾者),但比繼承中生成子類的方式要更加靈活,更加方便,它避免了繼承體系的臃腫。
裝飾器模式 :就是使用裝飾者為對象添加新功能的模式,在為一個對象添加新功能時有有三種方式:直接修改對象,用子類來拓展,使用對象組合,裝飾器模式就是基于第三種方式,很靈活地為對象添加新功能
socket/websocket
socket :通常稱之為套接字,可以理解把它為是一種“打開——讀/寫——關閉”模式的實現,在服務器與客戶端通訊時,服務器與客戶端各自創建一個“文件”(即創建一個socket),在建立連接后,可以向自己建立的文件中寫入內容,供對方讀取,通訊完畢則關閉文件
websocket :是html5中的一種新協議,他改變了服務器被動接受請求的局面,以前都是服務器在接收到請求后,才可以向客戶端發送數據,而websocket協議中服務器可以主動地向客戶端發送數據,實現了服務器與客戶端之間的雙工通訊
opengl/opencv
opengl :是一個開放的圖形庫,是跨平臺,跨語言的專業圖形接口。例如在vc++ 6.0中使用OpenGL,我們要把OpenGL所對應的庫鏈接到工程中,在編寫程序時包含相應的頭文件,然后調用其中的函數,這樣就實現了對OpenGL的使用
opencv :如同opengl一樣,opencv也是一個開源的庫,他是一個視覺庫,opengl專注于圖形處理,而opencv主要提供音頻方面的處理,比如降低噪音,目標的識別等
多態
多態 :在面向對象的編程語言(c++,Java)中簡單來說,多態是指同一操作用于不同的對象,可以有不同的解釋,產生不同的效果。如Java中多態就體現在方法的重載和重寫上。多態的優點是可以降低代碼的耦合度
像素/長度/px/分辨率/ppi
像素 :即圖像元素,是構成圖像最基本的單元
長度 :長度是一維空間的度量,指空間的尺度
分辨率 :單位尺寸上的像素點數目的多少就稱為分辨率,比如,有一英寸寬一英寸的圖片,水平分成30條,垂直分成40行,那么這幅圖片共有1200個 像素點,則分辨率為1200
ppi :ppi表示每英寸所擁有的像素數目,是圖像的分辨率的單位
編碼原理/代碼運行原理
編碼原理 :將高級程序設計語言(c,c++,Java等)變換成計算機能夠識別的機器語言,以便計算機進行處理,如用C語言編寫的程序文件(.c),經過編譯后得到.obj文件,里面是機器代碼,計算機就可以識別
半加器/全加器/提前進位加法器
半加器/全加器 :半加器和全加器是算術電路中的基本單元,他們是完成一位二進制數相加的一種邏輯電路,半加器不考慮低位來的進位,只計算兩個二進制數相加,輸出本位和和進位;全加器能進行加數、被加數和低位來的進位信號相加,輸出本位和和進位信號;也就是說半加器兩個輸入,兩個輸出,全加器三個輸入,兩個輸出
提前進位加法器 :提前進位加法器,是對普通全加器進行改善而設計成的并行加法器,全加器在串聯時互相進位會產生延遲,提前進位加法器通過增加一個邏輯電路改變了全加器的這一缺點
mysql/mongodb/sql/nosql
mysql :是一個關系型數據庫,他將數據保存在不同的表中,而不是將所有的數據放在一個大倉庫內,這樣就提高了靈活性
mongodb :mongodb也是一個數據庫,不過它是非關系型的數據庫,也稱為文檔型數據庫,它適合于大規模的數據存儲,在這方面它勝出mysql,但它占用的空間也比較大
sql :是一種用于管理關系型數據庫系統的程序設計語言,數據庫的管家,使用它可以處理數據庫(mysql)中的數據,常見的是實現對數據庫的增刪改查
nosql :nosql是一種泛指,泛指非關系型數據庫,上面的mongodb就是一種nosql型數據庫,它的初現是為了解決關系型數據庫難以克服的大數據難題
git/svn/版本控制
git :git是一款免費的,開源的分布式版本控制系統,也可以說是一款軟件,用于有效地項目版本管理,簡言之,git可以讓任何人毫無困難地下載一份項目源代碼副本到他們自己的機器上,做出修改,然后,覺得滿意了就將修改的部分上傳回項目的集中代碼庫,而且git可以令每個人做出的修改都無縫融合起來
svn :svn是與git同級的概念,svn是集中式版本控制系統,依賴于一個中心服務器,所有開發者在開始新一天的工作之前必須從服務器獲取代碼,然后開發,最后解決沖突(沖突要比git少),提交,所有的版本信息都放在服務器上。如果脫離了服務器(或者說斷掉了網絡),開發者基本上可以說是無法工作的
版本控制 :是一種記錄項目文件內容變化,以便將來查閱特定版本修訂情況的系統,特別是于軟件來說,修改一行代碼,或者是一個參數,軟件就有可能發生巨大的變化,很多開發者同時在修改,就沒人也沒辦法記住這些修改,版本控制(軟件)就是用來幫忙記住這些個修改的手段
ssh
ssh :ssh是建立在應用層和傳輸層之間的提供安全性的協議,傳統的網絡傳輸協議(ftp,http),他們在網絡上用明文傳送數據,很不安全,容易受到“中間人“這種方式的攻擊。用ssh,你可以把所有傳輸的數據進行加密,這樣”中間人”這種攻擊方式就不可能實現了,還有一個好處就是使用ssh傳輸的數據是經過壓縮的,可以提高傳輸速度
php是世界上最好的語言/pythonic
php是世界上最好的語言 :php是一種嵌入在html并由服務器解釋執行的腳本語言,php文件能夠包含文本html,css以及php代碼,php能夠生成動態頁面內容,能夠創建、打開、讀取、寫入、刪除以及關閉服務器上的文件,能夠添加、刪除、修改數據庫中的數據,能夠限制用戶訪問網站中的某些頁面
說“php是世界上最好的語言”,其實是黑它的。在所有生產語言中,即使不能說php是最爛的,也是最爛的之一。舉個小例子,php中empty()函數的使用,就有點坑
pythonic : pythonic是python一些慣用法,簡單說就是符合python語言編程理念的代碼風格,一個python程序,如果不pythonic,看起來就會累贅,讓人費解
ORM
ORM :是對象程序和數據庫之間映射,將面向對象程序中的對象數據存到關系數據庫中。本質上就是將數據從一種形式轉換到另外一種形式,面向對象程序,如Java,關系型數據庫,如mysql
下面來詳細介紹幾組概念
nginx/uWSGI/cgi/php-cgi/fastcgi/php-fpm
先聲明nginx和uWSGI在下文中直接用server來代替
在這幾個部分中,server,php-cgi,php-fpm是實體(即程序),而cgi,fastcgi是協議。cgi是用于規定server與php-cgi(即cgi程序)之間的通信,fastcgi規定php-cgi與php-fpm(cgi程序進程管理器)之間的通信,這是他們之間的基本關系
對于server,如果請求是html文件,那么server會去文件系統中找到這個文件,發送給客戶端,這里分發的是靜態數據。但是,如果現在請求的是php文件(xxx.php),根據配置文件,server(nginx)知道這個不是靜態文件,需要去找PHP解析器來處理,那么他會把這個請求簡單處理后交給php解釋器。server會傳哪些數據給php解釋器呢?cgi就是規定要傳哪些數據、以什么樣的格式傳遞給后方處理這個請求的協議。
當server收到xxx.php這個請求后,會啟動對應的cgi程序,這里就是php的解析器。接下來php解析器會解析文件,處理請求,再以規定cgi協議規定的格式把結果返回給server。server再把結果返回給客戶端。
當我們的server每次接收到xxx.php這種請求后,server會把這些請求交給php-cgi處理,php-cgi對每個請求都會執行這些步驟,每次都要啟動進程,非常麻煩,非常累,所以處理每個的時間會比較長。但php-cgi只是一個cgi程序,并不會進程管理,于是就出現了一些能夠調度php-cgi進程的程序,即cgi進程管理器php-fpm,可以說php-fpm實現了fastcgi協議,php-fpm工作原理是:先啟一個master,解析配置文件,然后再啟動多個worker。當請求過來時,master會傳遞給一個worker,然后立即可以接受下一個請求。這樣就避免了重復的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置提前啟動幾個worker等著;當然當空閑worker太多時,也會停掉一些,這樣就提高了性能,也節約了資源。這就是php-fpm的對進程的管理。
session/cookie
先講一下,http協議本身是無狀態的,客戶端只需要簡單的向服務器請求某些文件,無論是客戶端還是服務器都不會紀錄彼此過去的行為,每一次請求之間都是獨立的。
session和cookie機制則是在客戶端與服務器之間保持狀態的解決方案,session是服務端的處理機制,cookie是客戶端的處理機制。下面來打個比喻說明一下cookie與session的之間的2區別和聯系記錄方式。
有一家奶茶店規定,只要一位顧客在店里購買奶茶數量累計超過五杯,就免費贈送一杯奶茶。所以店主就要記錄每一位的客戶的消費數量,有如下兩種記錄方式。
1.發給顧客一張卡片,上面記錄著消費的數量。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以后的消費相聯系起來。這種做法就是在客戶端保持狀態(cookie)。
2.發給顧客一張會員卡,除了卡號之外什么信息也不紀錄,每次消費時,如果顧客出示該卡片,則店員在店里的紀錄本上找到這個卡號對應的紀錄添加一些消費信息。這種做法就是在服務器端保持狀態(session)。
cookie機制的基本原理就如上面的例子1一樣簡單,但是還有幾個問題需要解決:“卡片”如何分發;“卡片”的內容;以及客戶如何使用“卡片”。cookie分發是通過擴展http協議來實現的,服務器通過在http的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。cookie的使用是由瀏覽器按照一定的原則在后臺自動發送給服務器的。cookie可以設置過期時間,如果不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽器會話期的 cookie被稱為會話cookie。會話cookie一般不存儲在硬盤上而是保存在內存里,當然這種行為并不是規范規定的。如果設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉后再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。
seeion機制的基本原理就如上面的例子2,是一種服務端的機制。當程序需要為某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識-稱為session id(也就是上面所說的會員卡卡號),如果已包含一個session id則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session并且生成一個與此session相關聯的session id,session id的值是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。客戶端把這個session id保存到cookie,所以采用session機制是建立在cookie機制的基礎上的
html/css/js(基本概念前面已經介紹)
打個不是很恰當比喻來說明一下這三者之間的關系,比如你要建一個房子,那么你要用到的材料(如磚頭,瓦片等)就是html,你打算把門窗建多大,在什么地方,就要css實現,你把一把椅子從東邊移到西邊的過程屬于js范疇
一個網頁分為三層,結構,表現,行為。用html書寫結構;用css控制樣式,如讓網頁橫排或者豎排,讓每個元素表現出各種樣式(比如粗體字,顏色,邊距,浮動…)等;用js控制事件,如讓網頁顯示當前的時間和滾動圖片等
在一個html文件中可以可以同時出現css和js,即它們在head下直接標記。當然也可以把css,js編寫在一個以.css和.js為后綴的文件里,然后把該文件鏈接到網頁文件中,使用html中的link標簽
mvc
mvc是一種框架模式,m代表模型(是程序的核心,處理核心程序),v代表視圖(顯示數據),c代表控制器(處理輸入,調用模型),它強制性的使應用程序的輸入、處理和輸出分開。使用mvc應用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。
模型
模型包含了應用問題的核心數據、邏輯關系和計算功能,它封裝了所需的數據,提供了完成問題處理的操作過程。控制器依據I/O的需要調用這些操作過程。模型還為視圖獲取顯示數據而提供了訪問其數據的操作。
視圖
視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關的數據,并能接收用戶的輸入數據,但是它并不進行任何實際的業務
控制器
控制器通過時間觸發的方式,接受用戶的輸入。控制器如何獲得事件依賴于界面的運行平臺。控制器通過事件處理過程對輸入事件進行處理,并為每個輸入事件提供了相應的操作服務,把事件轉化成對模型或相關視圖的激發操作。
mvc的實現
1. 分析應用問題,對系統進行分離
分析應用問題,分離出系統的內核功能、對功能的控制輸入、系統的輸出行為三大部分。設計模型部件使其封裝內核數據和計算功能,提供訪問顯示數據的操作,提供控制內部行為的操作以及其他必要的操作接口。以上形成模型類的數據構成和計算關系。這部分的構成與具體的應用問題緊密相關。
2. 設計和實現每個視圖
設計每個視圖的顯示形式,它從模型中獲取數據,將它們顯示在屏幕上。
3. 設計和實現每個控制器
對于每個視圖,指定對用戶操作的響應時間和行為。在模型狀態的影響下,控制器使用特定的方法接受和解釋這些事件。控制器的初始化建立起與模型和視圖的聯系,并且啟動事件處理機制。事件處理機制的具體實現方法依賴于界面的工作平臺。
4. 控制器的可安裝性和可卸載性,帶來了更高的自由度,并且幫助形成高度靈活性的應用。控制器與視圖的分離,支持了視圖與不同控制器結合的靈活性,以實現不同的操作模式,例如對普通用戶、專業用戶、或不使用控制器建立的只讀視圖。這種分離還為在應用中集成新的I/O設備提供了途徑。
mvc的優點和不足之處
優點:
1. 低耦合性
視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。
2. 模型的可移植性
因為模型是獨立于視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對視圖和控制器進行新的修改。
3. 快速的部署
使用mvc模式使開發時間得到相當大的縮減,它使程序員集中精力于業務邏輯,界面程序員(html開發人員)集中精力于表現形式上。
4. 有利于軟件工程化管理
由于不同的層各司其職,每一層不同的應用具有某些相同的特征,有利于通過工程化、工具化管理程序代碼。
不足之處:
1. mvc并不適合小型甚至中等規模的應用程序,在小型項目中如果采用mvc模式,使模型、視圖與控制器分離,會增加結構的復雜性,并可能產生過多的更新操作,降低運行效率。
2. 視圖對模型數據的低效率訪問。如果不采用mvc模式,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。
總結
以上是生活随笔為你收集整理的计算机专业术语简单释义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统笔记本合盖黑屏与休眠的问题
- 下一篇: 开源爬虫神器,Playwright vs