摘要:前言這里筑夢師是一名正在努力學習的開發工程師目前致力于全棧方向的學習希望可以和大家一起交流技術共同進步用簡書記錄下自己的學習歷程個人學習方法分享本文目錄更新說明目錄學習方法學習態度全棧開發學習路線很長知識拓展很長在這里收取很多人的建議以后決
前言
這里筑夢師,是一名正在努力學習的iOS開發工程師,目前致力于全棧方向的學習,希望可以和大家一起交流技術,共同進步,用簡書記錄下自己的學習歷程.
個人學習方法分享本文目錄&更新說明
目錄 1.學習方法 2.學習態度 3.全棧開發 4.學習路線(很長) 5.知識拓展(很長)
在這里收取很多人的建議以后決定說明一下,這是我的第一篇使用Markdown語法寫的文章,版面可能會有瑕疵,或者易讀性并不是那么高(但是知識點真的是這么多),這篇文章主要收集了全棧涉及到各個知識點
后期會根據我本人學習進度進行總結,每個知識點,對,就是每個知識點,我會根據自己的理解寫成簡書,到時候迫切的希望各位幫我參考,我的看法有時候會出現偏差,還希望各位及時指出.我會認真的回復評論.
我會一直使用簡書和個人博客更新個人學習歷程~也希望各位能夠在這條路上一直走下去.
學習方法這是個人學習方法,還請大家結合自身情況,制定適合自己的學習方法.
首先,我會去收集全棧工程師會涉及的方面,大致分為?前端,后臺,服務器. 然后,細化各個階段不同的知識點,逐一百度進行了解.
了解相關知識的有名書籍,例如服務器的鳥叔私房菜系列書籍,前端的Head First系列,后臺的Linux開發手冊.?本人整理過相關書籍,以及尋找書籍方法~傳送門本人使用的筆記軟件是Omni outliner Mac版,windows的開發者可以使用?幕布?這個應用.一般學習時間會開啟3個窗口
自學筆記+視頻學習筆記+總結筆記
自學筆記為讀書時的筆記和百度到的所有知識點.
視頻學習筆記為視頻資料學習的筆記.會記錄視頻當中的各個知識點.
然后去其糟粕,取其精華,寫到總結筆記以后,再進行總結.
最后完成各個知識點的學習以及總結.
當遇到代碼知識點時一定要進行實際操練以及考察.
要根據自身想法進行延伸考察.才能將知識學到手.
一定要整理適合自己的學習方法,保證學習效率,學習過程中都會遇到瓶頸,當自己無法理解新知識時就是瓶頸
1.可能是學習方法不夠完善,有些知識不夠融會貫通.學習態度
2.學習跨度不能太大,導致自己理解不了.
3.梳理自己的學習體系,程序語言不是死記硬背,而是靠理解和體會進行使用,一定要有自己的理解看法,而不是生搬硬套書和視頻當中的看法.
謙虛,好學,內斂,成熟
學習態度,一定要是主動學習,主動延伸,而不是被動學習.
我會主動的去使用百度學習我每一個不懂的知識點.
例如 :
Apache 配置這個知識點,我就會去搜索 "Apache配置" 以及 "httpd.conf配置".
MySQL 數據庫這個知識點,我就會去搜索 "MySQL開發"關鍵詞.
百度學習的效率如何提高,主要是在關鍵詞的搜索上,當你學習一方面的知識時,例如HTML知識,你就搜索"HTML開發" +"空格"+"你想搜索的知識點".例如JavaScript開發 "JS開發"+"空格"+"XXX效果實現".重點關注簡書、CSDN、github、Stackoverflow等網站的結果,而不是局限于百度知道,百度百科等.
知識很多,網絡上資源也有很多,你不學永遠是0.
量雖然很大,但請一點點進行學習,循序漸進~
全棧開發這里想說一下個人觀點,有很多人說:"全棧全棧,全都懂點,全都不精,全都不會."
這個觀點,我不否定,但我不認同,我投入全棧的學習,有我自己的目的,那么我為什么要和那些全都不精的人在一個圈子里.不是因為學的多,就一定學不會,那請問大神也都是什么都會啊.請不要因為別人否定自己,否則你就已經輸了.
本文涉及的知識點也不是絕對的全棧,算是全棧入門,全棧水平也有高低,請勿學前自滿.
進行下面的學習時,請先確定自己學全棧的目的和動力.
下文主要分為兩部分,學習路線部分主要羅列出每一個全棧涉及的知識點.
在進行學習路線學習時,會遇到很多自己不懂陌生知識點,請你毫不吝嗇的使用百度吧~
學習路線
Web前端
前端開發工具
SEO
HTML + CSS
HTML簡介
HTML標簽詳解
標簽語義化
CSS概述
CSS屬性
CSS樣式的類型
CSS選擇器
CSS背景
元素的顯示模式
CSS偽類
字體相關屬性
盒子模型
margin
padding
浮動
定位
CSS相關案例
HTML5 + CSS3
HTML5新增標簽
HTML5多媒體
HTML5音頻播放
HTML5視頻播放
HTML5DOM擴展
HTMl5自定義屬性
地理定位
文件讀取
元素拖拽
應用緩存
歷史管理
web存儲
CSS3選擇器
CSS3新屬性
2D轉換與過渡
3D轉換
動畫
Web字體
Flex彈性布局
JavaScript + jQuery
JavaScript
JavaScript概述
數據類型
流程控制
算法基礎
企業編程規范
JavaScript內置對象常用方法
對象的創建方式
JavaScript中的對象
面向對象
原型
作用域鏈
函數的調用方式及this指向
正則表達式
JavaScript高級
遞歸與預解析
數據類型
函數
詞法分析
作用域鏈
事件編程
canvas繪圖
面向對象
JSON對象
原型鏈
設計模式
正則表達式
JavaScript原理探究
原型
原型鏈
繼承
閉包
ES5
ES6
jQuery
jQuery簡介
jQuery的優勢
jQuery選擇器
jQuery中的動畫
jQuery插件
jQueryUI
jQuery編程思想
鏈式編程和隱式迭代
編寫jQuery插件
jQuery選擇器
屬性操作
事件編程
jQuery特效
文檔處理
插件機制
jQuery中的Ajax
開源jQuery項目實踐
PHP +MySQL
搭建環境
PHP簡介
WEB程序的訪問流程
安裝Apache
MySQL
PHP7
配置虛擬主機
PHP7基礎
變量和常量
數據類型
運算符
流程控制
函數
字符串
數組
PSR規范
B/S結構
參數傳遞GET/POST
動態網站
后臺接口開發
分支循環語句
MySQL數據庫
MySQL簡介
基礎SQL操作
字符集
列類型
類屬性
表關系
高級查詢
外鍵
范式
用戶管理
權限管理
數據備份與還原
MySQL優化
MySQL優化概述
MySQL存儲引擎
列類型的選擇
數據庫設計三范式與逆范式
MySQL中的執行計劃
數據庫中索引的設計
MySQL中的其他功能
MySQL分表技術
Sphinx
讀寫分離
表單傳值
表單傳值的方式
PHP接收數據的三種方式
PHP處理復選框數據
文件上傳
MySQLi擴展
基本操作
執行增刪改操作
執行查詢操作
與MySQLi相關的函數
MySQLi擴展應用案例
文件編程
文件操作的分類
目錄操作
文件操作
文件下載
會話技術
會話技術概述
Cookie與Session的區別
Cookie原理
Cookie操作
Session原理
Session操作
垃圾回收機制
GD圖像處理
GD庫概述
GD畫布實現
驗證碼
縮略圖
水印圖
面向對象
面向對象概述
面向對象實現
封裝
繼承
多態
對象遍歷
對象序列化
反射機制
命名空間
Trait新特性
PDO擴展
PDO簡介
PDO類
PDOStatement類
PDO預處理
PDO事務處理
PDO異常處理
PDO屬性
封裝PDO類
Smarty
Smarty概述
模板設計
程序設計
ThinkPHP5.0
ThinkPHP5框架概述
基礎
架構
路由
控制器
視圖
模型
項目實用項
RESTful
RESTful概述
HTTP協議
RESTful?API設計六要素
編寫API接口文檔
使用Lumen實現RESTful
MVC設計模式
MVC設計模式
搭建自定義MVC框架
博客項目
項目開發流程
數據表數據
后臺實現
前臺實現
擴展功能
數據表設計、后臺設計、前臺設計、會員設計、購物車設計、訂單設計、接口設計(微信/支付寶、短信、QQ登錄、郵件、地圖、物流)、靜態化
PHP+Swoole多進程爬蟲
Swoole概述
Server
Client
Process
AsyncIO
Memory
HttpServer
WebSocket
Swoole綜合案例:PHP+Swoole多進程爬蟲
Web API
BOM操作
DOM操作
事件處理
瀏覽器兼容性處理
頁面動態效果
動畫
HTTP/HTTPS協議
HTTP協議概念
HTTP協議的特點
HTTP協議的分類
HTTP請求
HTTP響應
HTTP狀態碼
PHP模擬HTTP請求
擴展:HTTPS協議
Ajax
Ajax概述
Ajax對象
GET與POST請求
同步與異步概念
緩存問題
Ajax與XML
Ajax與JSON
封裝Ajax框架
跨域請求
原生Ajax
jQuery的Ajax相關API使用
低層原理分析
緩存問題及處理方式
跨域請求及解決方法
實用案例
VueJS
Vue概述
Vue指令
Vue屬性
方法、事件、過濾器、事件處理、鉤子函數
組件、動畫、路由、API請求
常用系統指令
數據綁定
指令
過濾器
生命周期
組件化
Vue組件
Vue過渡效果(動畫)
路由(vue-router庫)
axios
WAMP & MAMP & LAMP
WEB程序的訪問流程
Apache
MySQL
PHP
配置虛擬主機
設計模式
MVC
MVVM
Git開發
命令行
git的基本使用
對比文件差異、還原、合并?,回滾操作
遠端倉庫操作,使用github創建遠端倉庫,生成ssh?key?并添加到github
Linux操作系統
Linux系統概述
VMware虛擬機的安裝
CentOS系統安裝
Shell指令
VI編輯器
Linux內核分析
用戶和組
文件操作
網絡配置
FTP
LAMP部署
Nginx服務器集群
Nginx概述
LNMP的安裝與配置
緩存設置
壓縮設置
負載均衡
Memcache緩存設計
大型項目優化概述
Memcache軟件的安裝
Memcache指令詳解
使用PHP操作Memcache
Memcache應用場景
Redis 緩存消息隊列
Redis概述
Redis支持的數據類型
持久化功能
Redis主從模式
PHP操作Redis
消息隊列
商城系統緩存設計與秒殺實現
MongoDB (NoSQL數據庫)
MongoDB概述
MongoDB進階
MongoDB的權限機制
使用PHP操作MongoDB
網站優化(MySQL高級優化)
MySQL優化概述
MySQL存儲引擎
列類型的選擇
數據庫設計三范式與逆范式
執行計劃
索引
分庫分表技術
網站優化(Sphinx,Xunsearch)
主從服務器的講解
主從復制
讀寫分離實戰
網站優化(主從復制,讀寫分離)
Sphinx概述
安裝Sphinx
使用PHP+API接口連接Sphinx
Sphinx的匹配模式
Sphinx增量索引
網站優化(頁面靜態化)
頁面靜態化技術簡介
真靜態
偽靜態
Laravel框架
Laravel概述
Laravel的安裝
目錄分析
控制器
路由
視圖
HTTP請求與響應
數據庫
模型
Laravel實用項
Redis數據庫
消息隊列
Laravel +VueJS 在線直播平臺
前端界面開發
Laravel后臺程序設計
Socket編程
Redis集群
ffmpeg轉碼
VOD點播
CDN加速
HLS技術
在線教育平臺實戰
Canvas繪圖
canvas概述
繪圖
echarts
svg
svg圖標的使用
移動Web開發(響應式設計)
移動端屏幕介紹
移動端瀏覽器介紹
移動端操作系統介紹
Chrome模擬調試
真機調試
Viewport
rem
觸屏touch事件
手勢封裝
媒體查詢,設備尺寸劃分
主流響應式布局框架
移動端框架
bootstrap
iScroll
swiper
fastclick
zepto
framework7
Canvas
Sass
vw
CSS預處理器LESS
前端模塊化
AMD
CMD
模塊化開發基本概念
模塊化演變過程分析
設計規范
RequireJS
淘寶的SeaJS
NodeJS詳解
NodeJS歷史
發展
特征與現狀
ES6常用語法
同步與異步
環境安裝
文件操作
網絡操作
模塊化思想及操作
npm
異步編程
Express
工具模塊
Web模塊
全局對象
Express框架
Express?簡介
安裝
請求與響應
路由
靜態文件
文件上傳
Cookiet管理
AngularJS實戰開發
單頁應用
MVC
常用指令
雙向綁定和單向綁定
模塊
控制器controller
$watch
自定義指令
jqLite
過濾器
數據過濾
服務$http $location
前端路由
http攔截器
ReactJS實戰開發
快速入門
虛擬DOM
交互與動態UI
數據渲染
JSX?語法
組件開發
組件復用
生命周期
React操作dom元素
React絕對路由
webpack和gulp集成構建項目
flux
redux
state?props?context?等
附加模塊
集成工具
重定向組件
代理方式進行跨域
按需加載
移動端項目 (全棧必備)
mui框架使用
前端校驗插件
echarts數據可視化
Ajax進度條組件
模板引擎渲染
圖片上傳插件
后臺項目 (全棧必備)
后端渲染頁面,使用會話技術實現登錄,PHP操作MySQL數據庫,開發接口,使用AJAX技術,模板引擎ArtTemplate完成頁面功能的實現
vue項目 (全棧必備)
webpack
vue-cli
vuex
打包發布
組件開發
權限管理
外部接口調用
微服務Docker (PHP進階)
Docker概述
為什么需要Docker
Docker環境開發流程
Docker安裝與配置
Docker指令
DockerFile應用服務器
Swoole聊天室 (PHP進階)
Swoole概述
Server
Client
Process
AsyncIO
Memory
HttpServer
WebSocket
PHP+Swoole聊天室
微信開發(微擎/?EasyWechat)
微信公眾平臺概述
微信開發前期準備
微信6大接收接口
微信6大回復接口
微信LBS接口開發
微信機器人開發
響應式設計
微擎/EasyWechat
微信綜合案例
微信小程序 (前端進階)
微信框架
小程序界面設計
API接口設計
小程序數據綁定
小程序性能優化與實踐
小程序入門概念及演示
小程序開發工具介紹與創建quick_start項目
小程序文件結構
wxml
wxss
常用組件(view,image,text,navigator,swiper等)
小程序常用api
微信公眾號 (前端進階)
用JS-SDK技術做分享、拍照、支付、登錄等功能。
知識拓展
前后端分離
目前市面上都是前后端分離
主要目的是 解耦 分離架構.
前后端使用JSON交流,后端架構語言如何選擇將和前端沒有關系
聽說 TDD (Test-driven development,測試驅動開發) 可以改善代碼的質量,我們便實施了 TDD;接著,聽說 BDD (Behavior-driven development,行為驅動開發) 可以交付符合業務需求的軟件,我們便實施了 BDD;后來,聽說 DDD (Domain-driven design,領域驅動設計) 可以分離業務代碼與基礎代碼,我們便實施了 DDD。今天,聽說了前后端分離很流行,于是我們就實施了前后端分離——這就是傳說中的 HDD(Hype-driven Development,熱鬧驅動開發)
前后端只通過 JSON 來交流,組件化、工程化不需要依賴后端去實現。
前后端分離和微服務一樣,漸漸地影響了新的大型系統的架構。微服務和前后端分離要解決是類似的問題,解耦——可以解耦復雜的業務邏輯,解耦架構。可要是說相像吧,消息隊伍和前后端便相似一些,通過傳遞數據的形式來解耦組件。
TCP/IP 協議
TCP/IP協議簇是Internet的基礎,也是當今最流行的組網形式。TCP/IP是一組協議的代名詞,包括許多別的協議,組成了TCP/IP協議簇。其中比較重要的有SLIP協議、PPP協議、IP協議、ICMP協議、ARP協議、TCP協議、UDP協議、FTP協議、DNS協議、SMTP協議等。
HTTP協議
閱讀 圖解HTTP
OSI參考模型
OSI(Open System Interconnect),即開放式系統互聯。 一般都叫OSI參考模型,是ISO(國際標準化組織)組織在1985年研究的網絡互聯模型。該體系結構標準定義了網絡互連的七層框架(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層),即ISO開放系統互連參考模型。在這一框架下進一步詳細規定了每一層的功能,以實現開放系統環境中的互連性、互操作性和應用的可移植性。
web service 服務端應用
webService 三要素
SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用來描述傳遞信息的格式, WSDL 用來描述如何訪問具體的接口, uddi用來管理,分發,查詢webService 。具體實現可以搜索 Web Services簡單實例 ; SOAP 可以和現存的許多因特網協議和格式結合使用,包括超文本傳輸協議(HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用(RPC)等大量的應用程序。SOAP使用基于XML的數據結構和超文本傳輸協議(HTTP)的組合定義了一個標準的方法來使用Internet上各種不同操作環境中的分布式對象。
SMTP 隸屬于 TCP/IP協議
Web service是一個平臺獨立的,低耦合的,自包含的、基于可編程的web的應用程序,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發布、發現、協調和配置這些應用程序,用于開發分布式的互操作的應用程序。?[1]?
Web Service技術, 能使得運行在不同機器上的不同應用無須借助附加的、專門的第三方軟件或硬件, 就可相互交換數據或集成。依據Web Service規范實施的應用之間, 無論它們所使用的語言、 平臺或內部協議是什么, 都可以相互交換數據。Web Service是自描述、 自包含的可用網絡模塊, 可以執行具體的業務功能。Web Service也很容易部署, 因為它們基于一些常規的產業標準以及已有的一些技術,諸如標準通用標記語言下的子集XML、HTTP。Web Service減少了應用接口的花費。Web Service為整個企業甚至多個組織之間的業務流程的集成提供了一個通用機制。
web廣泛用到的技術:
. TCP/IP:通用網絡協議,被各種設備使用
. HTML(標準通用標記語言下的一個應用):通用用戶界面,可以使用HTML標簽顯示數據
. .NET: 不同應用程序間共享數據與數據交換
. Java:寫一次可以在任何系統運行的通用編程語言,因為java具有跨平臺特性
. XML(標準通用標記語言下的一個子集):通用數據表達語言,在web上傳送結構化數據的容易方法
Apache Nginx IIS >服務器軟件
Apache
Apache是世界使用排名第一的Web服務器軟件。它可以運行在幾乎所有廣泛使用的計算機平臺上,由于其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠并且可通過簡單的API擴充,將Perl/Python等解釋器編譯到服務器中。
Apache HTTP服務器是一個模塊化的服務器,源于NCSAhttpd服務器,經過多次修改,成為世界使用排名第一的Web服務器軟件。
Nginx
Nginx?(engine x) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發布于2004年10月4日。
其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發布。
Nginx是一款輕量級的Web?服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
IIS
iis是Internet Information Services的縮寫,意為互聯網信息服務,是由微軟公司提供的基于運行Microsoft Windows的互聯網基本服務。最初是Windows NT版本的可選包,隨后內置在Windows 2000、Windows XP Professional和Windows Server 2003一起發行,但在Windows XP Home版本上并沒有IIS。IIS是一種Web(網頁)服務組件,其中包括Web服務器、FTP服務器、NNTP服務器和SMTP服務器,分別用于網頁瀏覽、文件傳輸、新聞服務和郵件發送等方面,它使得在網絡(包括互聯網和局域網)上發布信息成了一件很容易的事。?[1]?
IIS的安全脆弱性曾長時間被業內詬病,一旦IIS出現遠程執行漏洞威脅將會非常嚴重。遠程執行代碼漏洞存在于 HTTP 協議堆棧 (HTTP.sys) 中,當 HTTP.sys 未正確分析經特殊設計的 HTTP 請求時會導致此漏洞。 成功利用此漏洞的攻擊者可以在系統帳戶的上下文中執行任意代碼,可以導致IIS服務器所在機器藍屏或讀取其內存中的機密數據。
web server 網頁端服務器
Web服務器一般指網站服務器,是指駐留于因特網上某種類型計算機的程序,可以向瀏覽器等Web客戶端提供文檔,?[1]??也可以放置網站文件,讓全世界瀏覽;可以放置數據文件,讓全世界下載。目前最主流的三個Web服務器是Apache Nginx IIS。
Weblogic Tomcat Jboss > 應用服務器
weblogic
WebLogic是美國Oracle公司出品的一個application server,確切的說是一個基于JAVAEE架構的中間件,WebLogic是用于開發、集成、部署和管理大型分布式Web應用、網絡應用和數據庫應用的Java應用服務器。將Java的動態功能和Java Enterprise標準的安全性引入大型網絡應用的開發、集成、部署和管理之中。
WebLogic是美商Oracle的主要產品之一,是并購BEA得來。是商業市場上主要的Java(J2EE)應用服務器軟件(application server)之一,是世界上第一個成功商業化的J2EE應用服務器, 已推出到12c(12.2.1.3) 版。而此產品也延伸出WebLogic Portal,WebLogic Integration等企業用的中間件(但當下Oracle主要以Fusion Middleware融合中間件來取代這些WebLogic Server之外的企業包),以及OEPE(Oracle Enterprise Pack for Eclipse)開發工具。
Tomcat
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程多帶帶運行的。
Jboss
是一個基于J2EE的開放源代碼的應用服務器。 JBoss代碼遵循LGPL許可,可以在任何商業應用中免費使用。JBoss是一個管理EJB的容器和服務器,支持EJB 1.1、EJB 2.0和EJB3的規范。但JBoss核心服務不包括支持servlet/JSP的WEB容器,一般與Tomcat或Jetty綁定使用。
RESTful API交互(如jQuery Ajax,Fetch API,ReactiveX)
Fetch API (新一代HTML請求方式)
ReactiveX (響應式編程)
ReactiveX 是一個基于一系列可觀察的異步和基礎事件編程組成的一個庫。
它繼承觀察者模式,支持序列數據或者事件。更高級的用法允許你將如下的一些抽象概念操作一起聯合使用,比如低線程,同步,線程安全,數據并發,非阻塞I/O流。
它通常被稱為“函數響應式編程”,這是用詞不當的。ReactiveX 可以是函數式的,可以是響應式的,但是和“函數響應式編程”是不同的概覽。一個主要的不同點是“函數響應式編程”是對隨著時間不停變化的值進行操作的,而ReactiveX是對超時提交產生的離散值上。
ReactiveX 簡稱 Rx,全稱 Reactive Extensions,最初是LINQ的一個擴展,由微軟的架構師Erik Meijer領導的團隊開發,在2012年11月開源,Rx是一個編程模型,目標是提供一致的編程接口,幫助開發者更方便的處理異步數據流,Rx庫支持.NET、JavaScript和C++,Java等幾乎所有的編程語言。Rx擴展了觀察者模式用于支持數據和事件序列,添加了一些操作符,它讓你可以聲明式的組合這些序列,而無需關注底層的實現:如線程、同步、線程安全、并發數據結構和非阻塞IO。
Reactive: 響應式
LINQ: Language Integrated Query的簡稱,它是集成在.NET編程語言中的一種特性。已成為編程語言的一個組成部分,在編寫程序時可以得到很好的編譯時語法檢查,豐富的元數據,智能感知、 靜態類型等強類型語言的好處。
迭代器模式:核心思想是:通過定義遍歷或查看對象中所有元素的方法的接口,并根據不同的類進行不同的方法實現相,已達到對類數據遍歷的抽象以及對類內部如何獲取數據的過程進行掩蓋的目的。當于Java中的Iterator(迭代器)有它的繼承接口如ListIterator和它的實現類等,我們在遍歷Set、Map時,用到他們的Iterator,這樣,他們具體怎么拿出數據的過程,我們不用知道。
觀察者模式:有時被稱作發布/訂閱模式,觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。【下面RxJava的使用過程就是觀察者模式的體現】
Rx = Observables【用于表示異步數據流】 + LINQ【用它的操作符查詢異步數據流】 + Schedules【參數化異步數據流的并發處理】
Rx用到的設計模式精華:觀察者模式、迭代器模式
MVC & MVVM (設計模式)
閱讀 設計模式相關書籍
針對不同語言有著不同定義.
最典型的MVC就是JSP +?servlet?+?javabean的模式
I/O (輸入輸出)
I/O(input/output),即輸入/輸出端口。每個設備都會有一個專用的I/O地址,用來處理自己的輸入輸出信息。CPU與外部設備、存儲器的連接和數據交換都需要通過接口設備來實現,前者被稱為I/O接口,而后者則被稱為存儲器接口。存儲器通常在CPU的同步控制下工作,接口電路比較簡單;而I/O設備品種繁多,其相應的接口電路也各不相同,因此,習慣上說到接口只是指I/O接口。
C/S & B/S
B/S
B/S結構(Browser/Server,瀏覽器/服務器模式),是WEB興起后的一種網絡結構模式,WEB瀏覽器是客戶端最主要的應用軟件。這種模式統一了客戶端,將系統功能實現的核心部分集中到服務器上,簡化了系統的開發、維護和使用。客戶機上只要安裝一個瀏覽器(Browser英 ["bra?z?]美 ["bra?z?]),如Netscape Navigator或Internet Explorer,服務器安裝SQL Server、Oracle、MYSQL等數據庫。瀏覽器通過Web Server 同數據庫進行數據交互。
C/S
Client/Server結構(C/S結構)是大家熟知的客戶機和服務器結構。它是軟件系統體系結構,通過它可以充分利用兩端硬件環境的優勢,將任務合理分配到Client端和Server端來實現,降低了系統的通訊開銷。目前大多數應用軟件系統都是Client/Server形式的兩層結構,由于現在的軟件應用系統正在向分布式的Web應用發展,Web和Client/Server 應用都可以進行同樣的業務處理,應用不同的模塊共享邏輯組件;因此,內部的和外部的用戶都可以訪問新的和現有的應用系統,通過現有應用系統中的邏輯可以擴展出新的應用系統。這也就是目前應用系統的發展方向。
SOA 面向服務架構
面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。
J2EE 架構
J2EE(Java 2 Platform, Enterprise Edition)是一個為大企業主機級的計算類型而設計的Java平臺。Sun微系統(與其工業伙伴一起,例如IBM)設計了J2EE,以此來簡化在受客戶級環境下的應用開發。由于創造了標準的可重用模塊組件以及由于構建出能自動處理編程中多方面問題的等級結構,J2EE簡化了應用程序的開發,也降低了對編程和對受訓的程序員的要求。
J2EE是一套全然不同于傳統應用開發的技術架構,包含許多組件,主要可簡化且規范應用系統的開發與部署,進而提高可移植性、安全與再用價值。
J2EE核心是一組技術規范與指南,其中所包含的各類組件、服務架構及技術層次,均有共同的標準及規格,讓各種依循J2EE架構的不同平臺之間,存在良好的兼容性,解決過去企業后端使用的信息產品彼此之間無法兼容,企業內部或外部難以互通的窘境。
J2EE組件和“標準的”?Java類的不同點在于:它被裝配在一個J2EE應用中,具有固定的格式并遵守J2EE規范,由J2EE服務器對其進行管理。J2EE規范是這樣定義J2EE組件的:客戶端應用程序和applet是運行在客戶端的組件;Java Servlet和Java Server Pages (JSP) 是運行在服務器端的Web組件;Enterprise Java Bean (EJB )組件是運行在服務器端的業務組件。
路由概念 (網絡層)
微服務
在介紹微服務時,首先得先理解什么是微服務,顧名思義,微服務得從兩個方面去理解,什么是"微"、什么是"服務", 微 狹義來講就是體積小、著名的"2 pizza 團隊"很好的詮釋了這一解釋(2 pizza 團隊最早是亞馬遜 CEO Bezos提出來的,意思是說單個服務的設計,所有參與人從設計、開發、測試、運維所有人加起來 只需要2個披薩就夠了 )。 而所謂服務,一定要區別于系統,服務一個或者一組相對較小且獨立的功能單元,是用戶可以感知最小功能集。
微服務可以在“自己的程序”中運行,并通過“輕量級設備與HTTP型API進行溝通”。關鍵在于該服務可以在自己的程序中運行。通過這一點我們就可以將服務公開與微服務架構(在現有系統中分布一個API)區分開來。在服務公開中,許多服務都可以被內部獨立進程所限制。如果其中任何一個服務需要增加某種功能,那么就必須縮小進程范圍。在微服務架構中,只需要在特定的某種服務中增加所需功能,而不影響整體進程。
為什么需要微服務
在傳統的IT行業軟件大多都是各種獨立系統的堆砌,這些系統的問題總結來說就是擴展性差,可靠性不高,維護成本高。到后面引入了SOA服務化,但是,由于 SOA 早期均使用了總線模式,這種總線模式是與某種技術棧強綁定的,比如:J2EE。這導致很多企業的遺留系統很難對接,切換時間太長,成本太高,新系統穩定性的收斂也需要一些時間。最終 SOA 看起來很美,但卻成為了企業級奢侈品,中小公司都望而生畏。
Spring (面向接口開源框架)
Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。Spring是于2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson創建。簡單來說,Spring是一個分層的JavaSE/EE?full-stack(一站式)?輕量級開源框架。
RESTful (軟件架構風格)
一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。它主要用于客戶端和服務器交互類的軟件。基于這個風格設計的軟件可以更簡潔,更有層次,更易于實現緩存等機制。
授權(如HTTP Basic、JWT等等)
JWT
Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而執行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。
HTTP Basic
Basic Auth是開放平臺的兩種認證方式,簡單點說明就是每次請求API時都提供用戶的username和password。
OAuth
OAuth為用戶資源的授權提供了一個安全、開放的標準,將會是以后開發平臺普遍遵守的,目前Twitter、Sina微博、豆瓣、Google等都提供對它的支持。
wget & curl Linux常用命令
curl
curl是利用URL語法在命令行方式下工作的開源文件傳輸工具。它被廣泛應用在Unix、多種Linux發行版中,并且有DOS和Win32、Win64下的移植版本。
wget
wget 是一個從網絡上自動下載文件的自由工具,支持通過 HTTP、HTTPS、FTP 三個最常見的?TCP/IP協議?下載,并可以使用 HTTP 代理。"wget" 這個名稱來源于 “World Wide Web” 與 “get” 的結合。
php-fpm ∈ FastCGI (通用網關接口) (php處理進程的)
php-fpm
PHP-FPM(FastCGI Process Manager:FastCGI進程管理器)是一個PHPFastCGI管理器,對于PHP 5.3.3之前的php來說,是一個補丁包?[1]??,旨在將FastCGI進程管理整合進PHP包中。如果你使用的是PHP5.3.3之前的PHP的話,就必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用。
相對Spawn-FCGI,PHP-FPM在CPU和內存方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
FastCGI
CGI全稱是“通用網關接口”(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,其程序一般運行在網絡服務器上。 CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。如php,perl,tcl等。
FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行著,只要激活后,不會每次都要花費時間去fork一次(這是CGI最為人詬病的fork-and-execute 模式)。它還支持分布式的運算, 即 FastCGI 程序可以在網站服務器以外的主機上執行并且接受來自其它網站服務器來的請求。
FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中并因此獲得較高的性能。眾所周知,CGI解釋器的反復加載是CGI性能低下的主要原因,如果CGI解釋器保持在內存中并接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail- Over特性等等。
Ruby 面向對象語言
Ruby,一種簡單快捷的面向對象(面向對象程序設計)腳本語言,在20世紀90年代由日本人松本行弘(Yukihiro Matsumoto)開發,遵守GPL協議和Ruby License。它的靈感與特性來自于?Perl、Smalltalk、Eiffel、Ada以及?Lisp?語言。由 Ruby 語言本身還發展出了JRuby(Java平臺)、IronRuby(.NET平臺)等其他平臺的 Ruby 語言替代品。Ruby的作者于1993年2月24日開始編寫Ruby,直至1995年12月才正式公開發布于fj(新聞組)。因為Perl發音與6月誕生石pearl(珍珠)相同,因此Ruby以7月誕生石ruby(紅寶石)命名。
perl 一門腳本語言
Perl,一種功能豐富的計算機程序語言,運行在超過100種計算機平臺上,適用廣泛,從大型機到便攜設備,從快速原型創建到大規模可擴展開發。?[1]?
Perl最初的設計者為拉里·沃爾(Larry Wall),于1987年12月18日發表。現在的版本為Perl 6,于2015年12月25日更新。
Perl借取了C、sed、awk、shell 腳本語言以及很多其他程序語言的特性,其中最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。簡而言之,Perl像C一樣強大,像awk、sed等腳本描述語言一樣方便,被Perl語言愛好者稱之為“一種擁有各種語言功能的夢幻腳本語言”、“Unix 中的王牌工具”。
Perl 一般被稱為“實用報表提取語言”(Practical Extraction and Report Language),你也可能看到“perl”,所有的字母都是小寫的。一般,“Perl”,有大寫的 P,是指語言本身,而“perl”,小寫的 p,是指程序運行的解釋器。
Java SE /EE /ME (java語言分類)
?Java SE=Java Standard Edition
Java EE=Java Enterprise Edition
Java ME=Java Mobile Edition
SE主要用于桌面程序,控制臺開發(JFC)
EE企業級開發(JSP,EJB)
ME嵌入式開發(手機,小家電)?
less & sass CSS擴展語言
less
Less 是一門 CSS 預處理語言,它擴充了 CSS 語言,增加了諸如變量、混合(mixin)、函數等功能,讓 CSS 更易維護、方便制作主題、擴充。Less 可以運行在 Node 或瀏覽器端。
sass
Sass 擴展了 CSS3,增加了規則、變量、混入、選擇器、繼承等等特性。Sass 生成良好格式化的 CSS 代碼,易于組織和維護。
SASS是對CSS3(層疊樣式表)的語法的一種擴充,它可以使用巢狀、混入、選擇子繼承等功能,可以更有效有彈性的寫出Stylesheet。Sass最后還是會編譯出合法的CSS讓瀏覽可以使用,也就是說它本身的語法并不太容易讓瀏覽器識別(雖然它和CSS的語法非常的像,幾乎一樣),因為它不是標準的CSS格式,在它的語法內部可以使用動態變量等,所以它更像一種極簡單的動態語言。
SASS是Ruby語言寫的,但是兩者的語法沒有關系。不懂Ruby,照樣使用。只是必須先安裝Ruby,然后再安裝SASS。
假定你已經安裝好了Ruby,接著在命令行輸入下面的命令:
gem install sass
然后,就可以使用了。
JSP (java服務器頁面)
JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它?[1]??是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標準。JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標準通用標記語言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,后綴名為(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其他操作系統上運行。
它實現了Html語法中的java擴展(以 <%, %>形式)。JSP與Servlet一樣,是在服務器端執行的。通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。
JSP技術使用Java編程語言編寫類XML的tags和scriptlets,來封裝產生動態網頁的處理邏輯。網頁還能通過tags和scriptlets訪問存在于服務端的資源的應用邏輯。JSP將網頁邏輯與網頁設計的顯示分離,支持可重用的基于組件的設計,使基于Web的應用程序的開發變得迅速和容易。 JSP(JavaServer Pages)是一種動態頁面技術,它的主要目的是將表示邏輯從Servlet中分離出來。
Java Servlet是JSP的技術基礎,而且大型的Web應用程序的開發需要Java Servlet和JSP配合才能完成。JSP具備了Java技術的簡單易用,完全的面向對象,具有平臺無關性且安全可靠,主要面向因特網的所有特點。
ES6 / CoffeScript / TypeScript 轉譯語言
ES6
ES6是ECMAScript標準十余年來變動最大的一個版本,其中添加了許多新的語法特性,既有大家耳熟能詳的Promise,也有聞所未聞的Proxy代理和Reflection反射;既有可以通過轉譯器(Transpiler)等方式在舊版本瀏覽器中實現兼容的let、const、不定參數、展開運算符等功能,亦有無論如何都無法實現向前兼容的尾調用優化。深入理解ES6的特性對于所有JavaScript開發者而言至關重要,在可預見的未來,ES6中引入的語言特性會成為JavaScript應用程序的主流特性
coffeScript
CoffeeScript是一套JavaScript的轉譯語言,創建者 Jeremy Ashkenas 戲稱它是- JavaScript 的不那么鋪張的小兄弟。因為 CoffeeScript 會將類似 Ruby 語法的代碼編譯成 JavaScript,而且大部分結構都相似,但不同的是 CoffeeScript 擁有更嚴格的語法。
TypeScript
是一種由微軟開發的自由和開源的編程語言。它是JavaScript的一個超集,而且本質上向這個語言添加了可選的靜態類型和基于類的面向對象編程。安德斯·海爾斯伯格,C#的首席架構師,已工作于TypeScript的開發。2012年十月份,微軟發布了首個公開版本的TypeScript,2013年6月19日,在經歷了一個預覽版之后微軟正式發布了正式版TypeScript 0.9,向未來的TypeScript 1.0版邁進了很大一步。
YAML語言
YAML是“YAML不是一種記語言”的外語縮寫?[1]??(見前方參考資料原文內容);但為了強調這種語言以數據做為中心,而不是以置標語言為重點,而用返璞詞重新命名。它是一種直觀的能夠被電腦識別的數據序列化格式,是一個可讀性高并且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。
它是類似于標準通用標記語言的子集XML的數據描述語言,語法比XML簡單很多。
使用場景
腳本語言
由于實現簡單,解析成本很低,YAML特別適合在腳本語言中使用。列一下現有的語言實現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript,Go 除了Java 和 Go,其他都是腳本語言。
配置文件
YAML做配置文件也不錯。寫YAML要比寫XML快得多(無需關注標簽或引號),并且比ini文檔功能更強。
比如Ruby on Rails的配置就選用的YAML。對ROR而言,這很自然,也很省事.
由于兼容性問題,不同語言間的數據流轉建議不要用YAML.
序列化
YAML比較適合做序列化。因為它是宿主語言數據類型直轉的。
DOM (網頁文檔對象)
文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展標志語言的標準編程接口。在網頁上,組織頁面(或文檔)的對象被組織在一個樹形結構中,用來表示文檔中對象的標準模型就稱為DOM。Document Object Model的歷史可以追溯至1990年代后期微軟與Netscape的“瀏覽器大戰”,雙方為了在JavaScript與JScript一決生死,于是大規模的賦予瀏覽器強大的功能。微軟在網頁技術上加入了不少專屬事物,既有VBScript、ActiveX、以及微軟自家的DHTML格式等,使不少網頁使用非微軟平臺及瀏覽器無法正常顯示。DOM即是當時蘊釀出來的杰作。
ajax 前端處理方式
Ajax 即“Asynchronous?Javascript?And?XML”(異步 JavaScript 和 XML),是指一種創建交互式網頁應用的網頁開發技術。
Ajax = 異步?JavaScript?和?XML(標準通用標記語言的子集)。
Ajax 是一種用于創建快速動態網頁的技術。
Ajax 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術
XMLHttpRequest 是 AJAX 的基礎。
XmlHttpRequest 術語縮寫為XHR,中文可以解釋為可擴展超文本傳輸請求。?
XMLHttpRequest 對象可以在不向服務器提交整個頁面的情況下,實現局部更新網頁。?
簡單來說就是網絡請求,然后響應以后使用JavaScript操作DOM
數據格式(如JSON、XML)
JSON (輕量級的數據交換格式)
JSON(JavaScript?Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基于?ECMAScript?(w3c制定的js規范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。
XML (工作幾乎不用)
可擴展標記語言,標準通用標記語言的子集,是一種用于標記電子文件使其具有結構性的標記語言。
在電子計算機中,標記指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種的信息比如文章等。它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 它非常適合萬維網傳輸,提供統一的方法來描述和交換獨立于應用程序或供應商的結構化數據。是Internet環境中跨平臺的、依賴于內容的技術,也是當今處理分布式結構信息的有效工具。早在1998年,W3C就發布了XML1.0規范,使用它來簡化Internet的文檔信息傳輸。
構建系統(gulp、grunt、webpack等等)
gulp & grunt (前端構建工具) & npm (NodeJS包管理和分發工具)
npm
NPM的全稱是Node Package Manager?,是一個NodeJS包管理和分發工具,已經成為了非官方的發布Node模塊(包)的標準。
如果你熟悉ruby的gem,Python的pypi、setuptools,PHP的pear,那么你就知道NPM的作用是什么了。
Nodejs自身提供了基本的模塊,但是開發實際應用過程中僅僅依靠這些基本模塊則還需要較多的工作。幸運的是,Nodejs庫和框架為我們提供了幫助,讓我們減少工作量。但是成百上千的庫或者框架管理起來又很麻煩,有了NPM,可以很快的找到特定服務要使用的包,進行下載、安裝以及管理已經安裝的包。
gulp
Gulp基于Node.js的前端構建工具,通過Gulp的插件可以實現前端代碼的編譯(sass、less)、壓縮、測試;圖片的壓縮;瀏覽器自動刷新,還有許多強大的插件可以在這里查找。比起Grunt不僅配置簡單而且更容易閱讀和維護
grunt
Grunt基于Node.js,安裝之前要先安裝Node.js。
例如壓縮、編譯、單元測試、代碼檢查等,自動化工具可以減輕你的勞動,簡化你的工作。
代碼質量(如JSLint / ESLint / TSLint / CSLint)
JSLint & CSSLint & TSLint (靜態代碼分析) &CodeClimate(代碼質量分析) (工程化)
JSLint
JSLint定義了一組編碼約定,這比ECMA定義的語言更為嚴格。這些編碼約定汲取了多年來的豐富編碼經驗,并以一條年代久遠的編程原則 作為宗旨:能做并不意味著應該做。JSLint會對它認為有的編碼實踐加標志,另外還會指出哪些是明顯的錯誤,從而促使你養成好的 JavaScript編碼習慣。
CSSLint
TSLint
安全性(如跨域)
跨域一詞從字面意思看,就是跨域名嘛,但實際上跨域的范圍絕對不止那么狹隘。具體概念如下:只要協議、域名、端口有任何一個不同,都被當作是不同的域。之所以會產生跨域這個問題呢,其實也很容易想明白,要是隨便引用外部文件,不同標簽下的頁面引用類似的彼此的文件,瀏覽器很容易懵逼的,安全也得不到保障了就。什么事,都是安全第一嘛。但在安全限制的同時也給注入iframe或是ajax應用上帶來了不少麻煩。所以我們要通過一些方法使本域的js能夠操作其他域的頁面對象或者使其他域的js能操作本域的頁面對象(iframe之間)。
網頁設計
切頁面
Flexbox布局
網格布局(Grid Layout)
響應式設計
線框圖(Wireframe)
矢量圖形 / 矢量圖形動畫(如SVG)
可縮放矢量圖形是基于可擴展標記語言(標準通用標記語言的子集),用于描述二維矢量圖形的一種圖形格式。它由萬維網聯盟制定,是一個開放標準。
常用前端三駕馬車 react、vuejs、angularjs jQuery工具庫
Node.js Javascript運行環境(runtime)
Node.js是一個Javascript運行環境(runtime),發布于2009年5月,由Ryan Dahl開發,實質是對Chrome V8引擎進行了封裝。Node.js對一些特殊用例進行優化,提供替代的API,使得V8在非瀏覽器環境下運行得更好。
V8引擎執行Javascript的速度非常快,性能非常好。?[1]??Node.js是一個基于Chrome JavaScript運行時建立的平臺, 用于方便地搭建響應速度快、易于擴展的網絡應用。Node.js 使用事件驅動, 非阻塞I/O?模型而得以輕量和高效,非常適合在分布式設備上運行數據密集型的實時應用。
jQuery JS框架
jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之后又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝JavaScript常用的功能代碼,提供一種簡便的JavaScript設計模式,優化HTML文檔操作、事件處理、動畫設計和Ajax交互。
React (Facebook內部項目)
React 起源于 Facebook 的內部項目,因為該公司對市場上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來架設Instagram 的網站。做出來以后,發現這套東西很好用,就在2013年5月開源了。
React主要用于構建UI。你可以在React里傳遞多種類型的參數,如聲明代碼,幫助你渲染出UI、也可以是靜態的HTML DOM元素、也可以傳遞動態變量、甚至是可交互的應用組件。
AngularJS
AngularJS?[1]??誕生于2009年,由Misko Hevery 等人創建,后為Google所收購。是一款優秀的前端JS框架,已經被用于Google的多款產品當中。AngularJS有著諸多特性,最為核心的是:MVW(Model-View-Whatever)、模塊化、自動化雙向數據綁定、語義化標簽、依賴注入等等。
AngularJS 是一個?JavaScript框架。它是一個以 JavaScript 編寫的庫。它可通過