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