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