Java Web 技術(shù)棧宣講
隨著公司技術(shù)線路轉(zhuǎn)型工作的不斷深入边琉,Java Web技術(shù)棧也已經(jīng)基本確定,本次培訓(xùn)將針對關(guān)鍵技術(shù)點進(jìn)行講解和說明记劝,讓大家對未來使用的語言艺骂、框架和工具有個初步的認(rèn)識,便于后期快速入手隆夯,早日實現(xiàn)
從入門到放棄
钳恕。
首先來看一張大圖總結(jié)圖
:
1. 語言
1.1. Java
首先祭出
Java之父(他那锃[zèng]亮的腦門是不是非常符合你對程序員的認(rèn)知):
在上個世紀(jì)九十年代,單片機的編程悄然興起蹄衷,這引起了自動化控制人員的廣泛興趣忧额。因為可以很大幅度的提高硬件的“智能程度”,所以被廣泛應(yīng)用愧口。正所謂無利不起早睦番,在當(dāng)時SUN公司也看中了這塊市場。于是在1991年成立了開發(fā)小組耍属,準(zhǔn)備進(jìn)入這一市場托嚣。但是在開發(fā)的過程中,小組的成員發(fā)現(xiàn)使用C++開發(fā)相關(guān)程序十分繁瑣厚骗,于是發(fā)現(xiàn)了一門新的語言示启,這就是Java的前身Oak。
但是Oak的發(fā)展并不順利领舰,它存在很多的缺陷夫嗓,于是經(jīng)過多次的磋商和協(xié)調(diào),Java語言應(yīng)運而生冲秽。
并且在1996年的SUN公司發(fā)布了Java開發(fā)工具包JDK1.0舍咖,并且Java開發(fā)工具包的發(fā)展一直持續(xù)至今。
JDK結(jié)構(gòu)體系
-
Java和環(huán)境關(guān)系
JDK內(nèi)部組成圖
JDK(Java Development ToolKit)
锉桑,包含了Java運行環(huán)境(JRE)和開發(fā)工具(編譯器排霉,調(diào)試器,javadoc等)民轴。我們就是依靠JDK來開發(fā)和運行Java程序的攻柠。
JDK的編譯器Javac[.exe],會將Java代碼編譯成字節(jié)碼(.class文件)杉武。編譯出的字節(jié)碼在任何平臺上都一樣的內(nèi)容辙诞,所以我們說Java語言是門跨平臺語言。Write once, run anywhere轻抱。
JRE(Java Runtime Environment)
飞涂,它為Java提供了運行環(huán)境,其中重要的一環(huán)就是通過JVM將字節(jié)碼解釋成可執(zhí)行的機器碼。
JRE由JVM较店,Java運行時類庫士八,動態(tài)鏈接庫等組成。
JVM(Java Virtual Machine)
梁呈,Java虛擬機婚度,可以看做是一臺抽象化的計算機,它有一套完整的體系架構(gòu)官卡,包括處理器蝗茁、堆棧 、寄存器等寻咒。
在運行時環(huán)境哮翘,JVM會將Java字節(jié)碼解釋成機器碼。機器碼和平臺相關(guān)的(不同硬件環(huán)境毛秘、不同操作系統(tǒng)饭寺,產(chǎn)生的機器碼不同),所以JVM在不同平臺有不同的實現(xiàn)叫挟。
目前JDK默認(rèn)使用的實現(xiàn)是Hotspot VM艰匙。具體可以和.Net Framework做對等比較
- 安裝目錄主要組成
-
典型工具
Java流行領(lǐng)域
- Tiobe發(fā)布2019年3月編程語言排行榜
- Java應(yīng)用領(lǐng)域
JDK版本歷史,Java8的選擇
- JDK官方版本的歷史
JDK版本 | 發(fā)布日期 |
---|---|
jdk1.4 | 2000年5月 |
jdk1.5 | 2004年9月 |
jdk1.6 | 2005年6月 |
jdk1.7 | 2011年 |
jdk1.8 | 2014年 |
jdk1.9 | 2017年 |
jdk1.10 | 2018年 |
- Jdk1.8市場應(yīng)用調(diào)查
-
jdk1.8特點
Lambda表達(dá)式
Stream函數(shù)式操作流元素集合
接口新增:默認(rèn)方法與靜態(tài)方法
方法引用,與Lambda表達(dá)式聯(lián)合使用
引入重復(fù)注解
類型注解
最新的Date/Time API (JSR 310)
新增base64加解密API
數(shù)組并行(parallel)操作
JVM的PermGen空間被移除:取代它的是Metaspace(JEP 122)元空間
1.2. ES6
介紹
ECMAScript 6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標(biāo)準(zhǔn)抹恳,已經(jīng)在 2015 年 6 月正式發(fā)布了员凝。它的目標(biāo),是使得 JavaScript 語言可以用來編寫復(fù)雜的大型應(yīng)用程序适秩,成為企業(yè)級開發(fā)語言绊序。
JavaScript 是大家所了解的語言名稱硕舆,但是這個語言名稱是商標(biāo)( Oracle 公司注冊的商標(biāo))秽荞。因此,JavaScript 的正式名稱是 ECMAScript 抚官。1996年11月扬跋,JavaScript 的創(chuàng)造者網(wǎng)景公司將 JS 提交給國際化標(biāo)準(zhǔn)組織 ECMA(European computer manufactures association,歐洲計算機制造聯(lián)合會)凌节,希望這種語言能夠成為國際標(biāo)準(zhǔn)钦听,隨后 ECMA 發(fā)布了規(guī)定瀏覽器腳本語言的標(biāo)準(zhǔn),即 ECMAScript倍奢。這也有利于這門語言的開放和中立朴上。
ECMAScript 歷史
ES6 是 ECMAScript 標(biāo)準(zhǔn)十余年來變動最大的一個版本,為其添加了許多新的語法特性卒煞。
1997 年 ECMAScript 1.0 誕生痪宰。
1998 年 6 月 ECMAScript 2.0 誕生,包含一些小的更改,用于同步獨立的 ISO 國際標(biāo)準(zhǔn)衣撬。
1999 年 12 月 ECMAScript 3.0誕生乖订,它是一個巨大的成功,在業(yè)界得到了廣泛的支持具练,它奠定了 JS 的基本語法乍构,被其后版本完全繼承。直到今天扛点,我們一開始學(xué)習(xí) JS 哥遮,其實就是在學(xué) 3.0 版的語法。
2000 年的 ECMAScript 4.0 是當(dāng)下 ES6 的前身陵究,但由于這個版本太過激烈昔善,對 ES 3 做了徹底升級,所以暫時被"和諧"了畔乙。
2009 年 12 月君仆,ECMAScript 5.0 版正式發(fā)布。ECMA 專家組預(yù)計 ECMAScript 的第五個版本會在 2013 年中期到 2018 年作為主流的開發(fā)標(biāo)準(zhǔn)牲距。
2011年6月翻擒,ES 5.1 版發(fā)布勘天,并且成為 ISO 國際標(biāo)準(zhǔn)。
2013 年,ES6 草案凍結(jié)瘩绒,不再添加新的功能,新的功能將被放到 ES7 中妻往;
2015年6月胀茵, ES6 正式通過,成為國際標(biāo)準(zhǔn)胁后。
特點
塊級作用域:const 與 let 變量
模板字面量
解構(gòu)
對象字面量簡寫法
for...of循環(huán)
展開運算符
剩余參數(shù)(可變參數(shù))
ES6箭頭函數(shù)
默認(rèn)參數(shù)函數(shù)
模塊化import/export
JavaScript類
開源書籍:《ECMAScript 6 入門》
基于ES6的三駕馬車
官方標(biāo)準(zhǔn)
ECMAScript 6 標(biāo)準(zhǔn)規(guī)范&ECMA-262.pdf
2. 框架
2.1 Spring
Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的店读。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而攀芯,Spring的用途不僅僅限于服務(wù)器端的開發(fā)屯断。從簡單性、可測試性和松耦合性角度而言侣诺,絕大部分Java應(yīng)用都可以從Spring中受益殖演。
目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性
功能:使用基本的JavaBean(是一種JAVA語言寫成的可重用組件)代替EJB,并提供了更多的企業(yè)應(yīng)用功能
范圍:任何Java應(yīng)用
Spring是一個輕量級控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架年鸳。
七大核心模塊
核心容器:核心容器提供 Spring 框架的基本功能趴久。核心容器的主要組件是
BeanFactory
,它是工廠模式的實現(xiàn)搔确。BeanFactory
使用控制反轉(zhuǎn) (IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開彼棍。Spring 上下文:Spring 上下文是一個配置文件已添,向 Spring 框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù)滥酥,例如 JNDI更舞、EJB、電子郵件坎吻、國際化缆蝉、校驗和調(diào)度功能。
Spring AOP:通過配置管理特性瘦真,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中刊头。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP诸尽。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)原杂。通過使用 Spring AOP,不用依賴 EJB 組件您机,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中穿肄。
Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息际看。異常層次結(jié)構(gòu)簡化了錯誤處理咸产,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)仲闽。
Spring ORM:Spring 框架插入了若干個 ORM 框架脑溢,從而提供了 ORM 的對象關(guān)系工具,其中包括 JDO赖欣、Hibernate 和 iBatis SQL Map屑彻。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。
Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上顶吮,為基于 Web 的應(yīng)用程序提供了上下文社牲。所以,Spring 框架支持與 Jakarta Struts 的集成云矫。Web 模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>
Spring MVC 框架:MVC 框架是一個全功能的構(gòu)建 Web 應(yīng)用程序的 MVC 實現(xiàn)膳沽。通過策略接口,MVC 框架變成為高度可配置的让禀,MVC 容納了大量視圖技術(shù),其中包括 JSP陨界、Velocity巡揍、Tiles、iText 和 POI菌瘪。
我們?yōu)樯队肧pring |
---|
Java主流框架腮敌,穩(wěn)定而且社區(qū)活躍阱当,大企業(yè)都在用,而且是標(biāo)準(zhǔn) |
Ioc容器和Spring MVC框架比現(xiàn)在我們用的ABP框架成熟糜工,ABP其實是模仿Spring |
我們的業(yè)務(wù)系統(tǒng)符合整體平移到Java平臺 |
2.2 Spring Boot
Spring Boot 是由 Pivotal 團(tuán)隊提供的全新框架弊添,其設(shè)計目的是用來簡化新 Spring 應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置(
習(xí)慣大于約定
)捌木,從而使開發(fā)人員不再需要定義樣板化的配置油坝。用我的話來理解,就是 Spring Boot 其實不是什么新的框架刨裆,它默認(rèn)配置了很多框架的使用方式澈圈,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架帆啃。
項目構(gòu)建菜單化
自動配置
理念是約定優(yōu)于配置瞬女,它通過實現(xiàn)了自動配置(大多數(shù)用戶平時習(xí)慣設(shè)置的配置作為默認(rèn)配置)的功能來為用戶快速構(gòu)建出標(biāo)準(zhǔn)化的應(yīng)用。
打包式的starters
提供了多個可選擇的”starter”以簡化Maven的依賴管理(也支持Gradle)努潘,讓您可以按需加載需要的功能模塊诽偷。
actuator(監(jiān)控)
提供了一整套的對應(yīng)用狀態(tài)的監(jiān)控與管理的功能模塊(通過引入spring-boot-starter-actuator),包括應(yīng)用的線程信息疯坤、內(nèi)存信息渤刃、應(yīng)用是否處于健康狀態(tài)等,為了滿足更多的資源監(jiān)控需求贴膘,Spring Cloud中的很多模塊還對其進(jìn)行了擴展卖子。
我們?yōu)樯队肧pring Boot |
---|
在Spring的基礎(chǔ)上的框架,選擇Spring 必選 |
簡化使用Spring的配置過程 |
業(yè)界成熟刑峡,版本持續(xù)更新 |
2.3 Mybatis
ORM選型
? 一個項目中用到的復(fù)雜查詢基本沒有洋闽,就是最基本的增刪改查,這樣選擇Hibernate的效率就要高些了突梦,因為基本的SQL語句已經(jīng)被封裝好诫舅,根本不需要手寫SQL,可以節(jié)省大量時間宫患,但是對于一個大型項目刊懈,復(fù)雜的查詢語句較多,使用MyBatis就會加快很多娃闲,而且SQL語句管理也會很方便虚汛。
MyBatis 是一款優(yōu)秀的持久層框架,它支持
定制化 SQL
皇帮、存儲過程以及高級映射卷哩。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解
來配置和映射原生類型属拾、接口和 Java 的 POJO(Plain Old Java Objects将谊,普通老式 Java 對象)為數(shù)據(jù)庫中的記錄冷溶。
Mybatis-Plus(為簡化開發(fā)而生)
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎(chǔ)上只做增強不做改變尊浓,為簡化開發(fā)逞频、提高效率而生。
愿景
我們的愿景是成為 MyBatis 最好的搭檔栋齿,就像 魂斗羅 中的 1P苗胀、2P,基友搭配褒颈,效率翻倍柒巫。
- 無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響谷丸,如絲般順滑
- 損耗小:啟動即會自動注入基本 CURD堡掏,性能基本無損耗,直接面向?qū)ο蟛僮?/li>
- 強大的 CRUD 操作:內(nèi)置通用 Mapper刨疼、通用 Service泉唁,僅僅通過少量配置即可實現(xiàn)單表大部分 CRUD 操作,更有強大的條件構(gòu)造器揩慕,滿足各類使用需求
- 支持 Lambda 形式調(diào)用:通過 Lambda 表達(dá)式亭畜,方便的編寫各類查詢條件,無需再擔(dān)心字段寫錯
- 支持多種數(shù)據(jù)庫:支持 MySQL迎卤、MariaDB拴鸵、Oracle、DB2蜗搔、H2劲藐、HSQL、SQLite樟凄、Postgre聘芜、SQLServer2005、SQLServer 等多種數(shù)據(jù)庫
- 支持主鍵自動生成:支持多達(dá) 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence)缝龄,可自由配置汰现,完美解決主鍵問題
- 支持 XML 熱加載:Mapper 對應(yīng)的 XML 支持熱加載,對于簡單的 CRUD 操作叔壤,甚至可以無 XML 啟動
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用瞎饲,實體類只需繼承 Model 類即可進(jìn)行強大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 支持關(guān)鍵詞自動轉(zhuǎn)義:支持?jǐn)?shù)據(jù)庫關(guān)鍵詞(order、key......)自動轉(zhuǎn)義百新,還可自定義關(guān)鍵詞
- 內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 企软、 Model 、 Service 饭望、 Controller 層代碼仗哨,支持模板引擎,更有超多自定義配置等您來使用
- 內(nèi)置分頁插件:基于 MyBatis 物理分頁铅辞,開發(fā)者無需關(guān)心具體操作厌漂,配置好插件之后,寫分頁等同于普通 List 查詢
- 內(nèi)置性能分析插件:可輸出 Sql 語句以及其執(zhí)行時間斟珊,建議開發(fā)測試時啟用該功能苇倡,能快速揪出慢查詢
- 內(nèi)置全局?jǐn)r截插件:提供全表 delete 、 update 操作智能分析阻斷囤踩,也可自定義攔截規(guī)則旨椒,預(yù)防誤操作
- 內(nèi)置 Sql 注入剝離器:支持 Sql 注入剝離,有效預(yù)防 Sql 注入攻擊
我們?yōu)槭裁催x擇Mybatis+Mybatis-Plus |
---|
類似EF6使用方式堵漱,平移技術(shù)平滑 |
借助Mybatis综慎,簡單CRUD可以零Sql |
復(fù)雜業(yè)務(wù)Sql可以自行優(yōu)化 |
代碼生成工具,豐富強大 |
互聯(lián)網(wǎng)企業(yè)必選勤庐,社區(qū)穩(wěn)定示惊,支持強大 |
2.4 Vue
Vue.js 是一個JavaScript MVVM庫,是一套構(gòu)建用戶界面的漸進(jìn)式框架愉镰。它是以
數(shù)據(jù)驅(qū)動
和組件化
的思想構(gòu)建的米罚,采用自底向上增量開發(fā)的設(shè)計。相比于Angular.js丈探,Vue.js提供了更加簡潔录择、更易于理解的API,使得我們能夠快速地上手并使用Vue.js碗降;同時比起 React + Redux 相對復(fù)雜的架構(gòu)隘竭,Vue.js 更加輕量級也更加容易上手,是初創(chuàng)項目的首選前端框架遗锣。Vue 的核心庫只關(guān)注視圖層货裹,它不僅易于上手,還便于與第三方庫或既有項目整合精偿。并且作者是華人的關(guān)系弧圆,Vue擁有著對華人開發(fā)者最友好的api文檔和官方教程。
MVVM概念
jQuery和Vue區(qū)別
jQuery是使用選擇器$
選取DOM對象笔咽,對其進(jìn)行賦值搔预、取值、事件綁定等操作叶组,其實和原生的HTML的區(qū)別只在于可以更方便的選取和操作DOM對象拯田,而數(shù)據(jù)和界面是在一起的。比如需要獲取label標(biāo)簽的內(nèi)容:$("lable").val();,它還是依賴DOM元素的值甩十。
$("#id").val("hello world");
Vue則是通過Vue對象將數(shù)據(jù)和View完全分離開來了船庇。對數(shù)據(jù)進(jìn)行操作不再需要引用相應(yīng)的DOM對象
吭产,可以說數(shù)據(jù)和View是分離的,他們通過Vue對象這個虛擬Dom實現(xiàn)相互的綁定鸭轮。這就是傳說中的MVVM臣淤。
Vue文件格式
<template>
<div class="about">
<h1>{{ message }}</h1>
<HelloWorld></HelloWorld>
</div>
</template>
<script>
import HelloWorld from "@/components/HelloWorld.vue";
export default {
name: "home",
data: {
message: 'Hello Vue!'
}
components: {
HelloWorld
}
};
</script>
<style lang="less">
#about {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
</style>
作者
基于Vue的UI組件
我們選型Vue.js的原因 |
---|
Vue.js國內(nèi)比較火 |
UI組件豐富 |
語法比較適合國人習(xí)慣,對MVVM的概念比較清晰 |
Vue全家桶(vue-router路由窃爷、vuex狀態(tài)管理邑蒋、axios) |
UI組件對比
2.5 UI組件
Ant Design Vue
基于螞蟻金服 Ant Design 的Vue 實現(xiàn),開發(fā)和服務(wù)于企業(yè)級后臺產(chǎn)品按厘。
特性
- 提煉自企業(yè)級中后臺產(chǎn)品的交互語言和視覺風(fēng)格医吊。
- 開箱即用的高質(zhì)量 Vue 組件。
- 共享Ant Design of React設(shè)計工具體系逮京。
- 現(xiàn)代瀏覽器和 IE9 及以上(需要 polyfills)
周邊工具
組件內(nèi)容
3. 工具
3.1 Intellij IDEA
IntelliJ在業(yè)界被公認(rèn)為最好的java開發(fā)工具之一卿堂,尤其在智能代碼助手、代碼自動提示造虏、重構(gòu)御吞、J2EE支持、各類版本工具(git漓藕、svn等)陶珠、JUnit、CVS整合享钞、代碼分析揍诽、 創(chuàng)新的GUI設(shè)計等方面的功能可以說是超常的。IDEA是JetBrains公司的產(chǎn)品栗竖,這家公司總部位于捷克共和國的首都布拉格暑脆,開發(fā)人員以嚴(yán)謹(jǐn)著稱的東歐程序員為主。
2018年Java開發(fā)IDE調(diào)查排行:
旗艦版和社區(qū)版功能對比
3.2 STS
spring tool suite (sts)
其實就是一個被包裝過的Eclipse狐肢,主要用于快速的開發(fā)Spring項目玛瘸,我們不用再去編輯繁瑣的xml配置文件脯颜,而是由工具自動生成奄薇。
特點:免費
3.3 Maven
? Maven是一個項目管理和綜合工具租副。Maven提供了開發(fā)人員構(gòu)建一個完整的生命周期框架。開發(fā)團(tuán)隊可以自動完成項目的基礎(chǔ)工具建設(shè)僵腺,Maven使用標(biāo)準(zhǔn)的目錄結(jié)構(gòu)和默認(rèn)構(gòu)建生命周期鲤孵。
在多個開發(fā)團(tuán)隊環(huán)境時,Maven可以設(shè)置按標(biāo)準(zhǔn)在非常短的時間里完成配置工作辰如。由于大部分項目的設(shè)置都很簡單普监,并且可重復(fù)使用,Maven讓開發(fā)人員的工作更輕松,同時創(chuàng)建報表凯正,檢查毙玻,構(gòu)建和測試自動化設(shè)置。
Maven提供了開發(fā)人員的方式來管理:
Builds
Documentation
Reporting
Dependencies
SCMs
Releases
Distribution
mailing list
概括地說漆际,Maven簡化和標(biāo)準(zhǔn)化項目建設(shè)過程淆珊。處理編譯夺饲,分配奸汇,文檔,團(tuán)隊協(xié)作和其他任務(wù)的無縫連接往声。 Maven增加可重用性并負(fù)責(zé)建立相關(guān)的任務(wù)擂找。
可以和微軟的NuGet
進(jìn)行對比,但是他包含功能的比nuget多浩销。
倉庫結(jié)構(gòu)
流行程度
IDEA內(nèi)工具
我們用Maven干嘛
- Java項目模板(Pom.xml)
- 依賴公共jar管理(各種Spring\SpringBoot生態(tài)圈的jar)
- 公司內(nèi)部基礎(chǔ)類庫倉庫(目前的公共dll都是手工拷貝傳遞的)
- 打包發(fā)布工具
3.4 Git
Git是目前世界上最先進(jìn)的
分布式
版本控制系統(tǒng)(沒有之一
)贯涎。Git有什么特點?簡單來說就是:高端大氣上檔次慢洋!
源碼管理特點
提交到本地庫
提交到遠(yuǎn)程庫
遠(yuǎn)程庫方案選型
3.5 VS Code
史上最優(yōu)秀的 IDE之一塘雳,尤其在
前端
界。
特點
免費開源
微軟出品普筹,全部免費使用败明。而且是開源項目,源碼都給你了太防,你還要什么自行車妻顶?
多平臺支持
占系統(tǒng)資源少
安裝完約 189 MB
內(nèi)存上, 相對于 eclipse, vscode 占用內(nèi)存更少. eclipse 約占用 478 MB(1 個進(jìn)程), vscode 約共占用 200 MB(6 個進(jìn)程)。
使用簡單
找不到比這個使用更簡單的 IDE 了, 完全符合程序員的使用習(xí)慣, 90% 程序員都會愛上 ta, 還有 10% 后來不寫代碼了. 各種快捷鍵滿天飛, 自定義快捷鍵, 自定義功能, 爽到只想安安靜靜的寫代碼蜒车。
提供豐富的插件
功能強大
你想要的功能, 這里都有. 如果沒有, 那應(yīng)該是你還不會用
界面很贊
界面很程序員, 很專業(yè), 美觀大方, 長時間看也不累
3.6 NPM
npm 是 Node.js 官方提供的包管理工具讳嘱,他已經(jīng)成了 Node.js 包的標(biāo)準(zhǔn)發(fā)布平臺,用于 Node.js 包的發(fā)布酿愧、傳播沥潭、依賴控制。npm 提供了命令行工具嬉挡,使你可以方便地下載钝鸽、安裝、升級棘伴、刪除包寞埠,也可以讓你作為開發(fā)者發(fā)布并維護(hù)包。
npm 是隨同 Node.js 一起安裝的包管理工具焊夸,能解決 Node.js 代碼部署上的很多問題仁连,常見的場景有以下幾種:
允許用戶從 npm 服務(wù)器下載別人編寫的第三方包到本地使用。
允許用戶從 npm 服務(wù)器下載并安裝別人編寫的命令行程序到本地使用。
允許用戶將自己編寫的包或命令行程序上傳到 npm 服務(wù)器供別人使用饭冬。
npm 的背后使鹅,是基于 couchdb 的一個數(shù)據(jù)庫,詳細(xì)記錄了每個包的信息昌抠,包括作者患朱、版本、依賴炊苫、授權(quán)信息等裁厅。它的一個很重要的作用就是:將開發(fā)者從繁瑣的包管理工作(版本、依賴等)中解放出來侨艾,更加專注于功能的開發(fā)执虹。
3.7 WebPack
本質(zhì)上,webpack 是一個現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器(module bundler)唠梨。當(dāng) webpack 處理應(yīng)用程序時袋励,它會遞歸地構(gòu)建一個依賴關(guān)系圖(dependency graph),其中包含應(yīng)用程序需要的每個模塊当叭,然后將所有這些模塊打包成一個或多個 bundle茬故。
為什要使用WebPack
現(xiàn)今的很多網(wǎng)頁其實可以看做是功能豐富的應(yīng)用,它們擁有著復(fù)雜的JavaScript代碼和一大堆依賴包蚁鳖。為了簡化開發(fā)的復(fù)雜度磺芭,前端社區(qū)涌現(xiàn)出了很多好的實踐方法
- 模塊化,讓我們可以把復(fù)雜的程序細(xì)化為小的文件;
- 類似于TypeScript這種在JavaScript基礎(chǔ)上拓展的開發(fā)語言:使我們能夠?qū)崿F(xiàn)目前版本的JavaScript不能直接使用的特性才睹,并且之后還能轉(zhuǎn)換為JavaScript文件使瀏覽器可以識別徘跪;
- Scss,less等CSS預(yù)處理器
- ...
這些改進(jìn)確實大大的提高了我們的開發(fā)效率琅攘,但是利用它們開發(fā)的文件往往需要進(jìn)行額外的處理才能讓瀏覽器識別,而手動處理又是非常繁瑣的垮庐,這就為WebPack類的工具的出現(xiàn)提供了需求。
什么是Webpack
WebPack可以看做是模塊打包機:它做的事情是坞琴,分析你的項目結(jié)構(gòu)哨查,找到JavaScript模塊以及其它的一些瀏覽器不能直接運行的拓展語言(Scss,TypeScript等)剧辐,并將其轉(zhuǎn)換和打包為合適的格式供瀏覽器使用寒亥。這個過程幫我們進(jìn)行了壓縮、合并荧关、語法分析溉奕、語法轉(zhuǎn)義等等很多操作。
4. 服務(wù)器容器
4.1 Tomcat
Web服務(wù)器軟件忍啤,Java Servlet容器加勤,對比IIS
4.2 Nginx
Nginx是一款自由的、開源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器鳄梅;同時也是一個IMAP叠国、POP3、SMTP代理服務(wù)器戴尸;Nginx可以作為一個HTTP服務(wù)器進(jìn)行網(wǎng)站的發(fā)布處理粟焊,另外Nginx可以作為反向代理進(jìn)行負(fù)載均衡的實現(xiàn)。
4.3 Node.js
Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境孙蒙。
Node.js 使用了一個事件驅(qū)動项棠、非阻塞式 I/O 的模型,使其輕量又高效马篮。
用來干嘛
我們主要用它來作為運行npm沾乘、webpack等工具的運行環(huán)境,以及前端模擬開發(fā)(mock)時候的Web服務(wù)器(Express)
5. 架構(gòu)暢想
近兩年“微服務(wù)架構(gòu)”被炒的火熱浑测,傳統(tǒng)軟件企業(yè)是否能懷抱微服務(wù),從而對軟件產(chǎn)品進(jìn)行一次架構(gòu)優(yōu)化升級歪玲,似乎一直成為信息系統(tǒng)架構(gòu)師思考的問題迁央。傳統(tǒng)行業(yè)對IT效率的變革需求是微服務(wù)成長土壤,業(yè)務(wù)模式創(chuàng)新重塑導(dǎo)致系統(tǒng)更新頻繁、應(yīng)用復(fù)雜度急劇升高滥崩,傳統(tǒng)架構(gòu)不堪重負(fù)岖圈。伴隨著Spring Cloud開源界各種微服務(wù)落地方案的出現(xiàn)和熱議,這些企業(yè)都積極擁抱了微服務(wù)钙皮,并在生產(chǎn)環(huán)境使用蜂科。
5.1 現(xiàn)在架構(gòu)情況
目前軟件產(chǎn)品系統(tǒng)涵蓋多個(20個)模塊,或者稱為應(yīng)用短条,每個應(yīng)用有獨立團(tuán)隊進(jìn)行開發(fā)維護(hù)导匣,獨立技術(shù)線路,且獨立部署茸时。有一個基礎(chǔ)應(yīng)用:基礎(chǔ)服務(wù)SIP贡定,主要負(fù)責(zé)維護(hù)基礎(chǔ)數(shù)據(jù)、認(rèn)證授權(quán)可都、配置等基礎(chǔ)服務(wù)缓待,并對各個獨立應(yīng)用提供服務(wù)訪問,各個業(yè)務(wù)只負(fù)責(zé)業(yè)務(wù)范疇的功能渠牲。各個應(yīng)用之間也存在相互之間的服務(wù)依賴和調(diào)用旋炒,這種調(diào)用一般以webservice的形式存在,且服務(wù)地址配置往往記錄在應(yīng)用本身签杈。系統(tǒng)外存在移動應(yīng)用瘫镇,其部分?jǐn)?shù)據(jù)依托于該軟件產(chǎn)品,且調(diào)用方式為直接發(fā)起對目標(biāo)App的請求。
所以汇四,伴隨著系統(tǒng)規(guī)模繼續(xù)擴大接奈,或者需求迭代繼續(xù),當(dāng)前架構(gòu)似乎的確存在一些問題:
1通孽、模塊之間直接依賴序宦,且服務(wù)地址零散配置,形成網(wǎng)狀
2背苦、模塊服務(wù)接口版本任意互捌,版本迭代困難,服務(wù)調(diào)用方式多樣行剂,不便于管理
4秕噪、各個App對服務(wù)依賴是單線的,服務(wù)進(jìn)行App級別的負(fù)載均衡困難
5厚宰、移動和第三方應(yīng)用直接對各個App進(jìn)行訪問腌巾,穿透產(chǎn)品邊界,且無權(quán)限控制
6铲觉、配置信息不集中澈蝙,無有效管理
7、各個App服務(wù)狀態(tài)未知撵幽,且容易引起單點
8灯荧、服務(wù)調(diào)用沒有可追蹤記錄,發(fā)現(xiàn)問題困難
9盐杂、跨服務(wù)更新逗载,無事務(wù)
10、跨團(tuán)隊接口調(diào)用溝通頻繁
5.2 微服務(wù)時代暢享
分析了現(xiàn)階段架構(gòu)的痛點链烈,那么借助微服務(wù)架構(gòu)特點厉斟,我們可以怎樣進(jìn)行升級或者思考呢,還是直接畫圖闡述:
改造點:
1测垛、單App技術(shù)線路統(tǒng)一
2捏膨、引入網(wǎng)關(guān)層,進(jìn)行路由和負(fù)載均衡
3食侮、引入注冊中心号涯,對各個App對內(nèi)提供的服務(wù)進(jìn)行注冊和發(fā)現(xiàn)
4、引入配置中心锯七,抽取公共配置链快,便于統(tǒng)一管理
5、引入基礎(chǔ)服務(wù)層眉尸,支撐多基礎(chǔ)服務(wù)方集成支持
6域蜗、引入日志和監(jiān)控平臺巨双,進(jìn)行服務(wù)調(diào)用最終,甚至可以進(jìn)行容錯性熔斷
7霉祸、高并發(fā)下筑累,可以進(jìn)一步采用7層或者4層LB,對網(wǎng)關(guān)進(jìn)行負(fù)載均衡
8丝蹭、個別應(yīng)用間可引入分布式事務(wù)慢宗,進(jìn)行數(shù)據(jù)一致性保障
9、App應(yīng)用可獨立部署奔穿,便于Paas平臺運行
暢想架構(gòu)難點
這種改造的優(yōu)點镜沽,顯然對各個應(yīng)用進(jìn)行了更好的治理,但是同時也帶來了很多難點:
1贱田、"應(yīng)用外服務(wù)設(shè)施"變多缅茉,對軟件產(chǎn)品整體部署和運維帶來困難
2、需要更多基礎(chǔ)技術(shù)架構(gòu)團(tuán)隊的技術(shù)支撐
3男摧、基礎(chǔ)服務(wù)層蔬墩,需多種平臺的實現(xiàn)(Supos\BAP)
4、團(tuán)隊技術(shù)能力提升
典型變化
5.3 Spring Cloud
Spring Cloud 是基于Spring Boot 的一整套實現(xiàn)微服務(wù)的框架彩倚。他提供了微服務(wù)開發(fā)所需的配置管理筹我、服務(wù)發(fā)現(xiàn)、斷路器帆离、智能路由、微代理结澄、控制總線哥谷、全局鎖、決策競選麻献、分布式會話和集群狀態(tài)管理等組件们妥。最重要的是,跟spring boot 框架一起使用的話勉吻,會讓你開發(fā)微服務(wù)架構(gòu)的云服務(wù)非常好的方便监婶。
微服務(wù)落地組件
Spring Cloud作為一個微服務(wù)架構(gòu)標(biāo)準(zhǔn),落地的實現(xiàn)方案有Spring Cloud Netflix
齿桃,Spring Cloud Alibaba
Spring Cloud Netflix
Spring Cloud Aalibaba
6. 容器化和Pass平臺部署
docker容器
傳統(tǒng)虛擬機
每個虛擬機都包括應(yīng)用程序惑惶、必要的二進(jìn)制文件和庫以及一個完整的客戶操作系統(tǒng)(Guest OS),盡管它們被分離短纵,它們共享并利用主機的硬件資源带污,將近需要十幾個 GB 的大小。
容器
容器包括應(yīng)用程序及其所有的依賴香到,但與其他容器共享內(nèi)核鱼冀。它們以獨立的用戶空間進(jìn)程形式運行在主機操作系統(tǒng)上报破。他們也不依賴于任何特定的基礎(chǔ)設(shè)施,Docker 容器可以運行在任何計算機上千绪,任何基礎(chǔ)設(shè)施和任何云上充易。
Docker 的容器利用了 LXC(linux container),管理利用了namespaces
來做權(quán)限的控制和隔離荸型,cgroups 來進(jìn)行資源的配置盹靴,并且還通過 aufs 來進(jìn)一步提高文件系統(tǒng)的資源利用率,而這些技術(shù)都不是 Docker 獨創(chuàng)帆疟。
LXC 與虛擬機的不同之處在于鹉究,它是一個操作系統(tǒng)級別的虛擬化環(huán)境,而不是硬件虛擬化環(huán)境踪宠。他們都做同樣的事情自赔,但 LXC 是操作系統(tǒng)級別的虛擬化環(huán)境,虛擬環(huán)境有它自己的進(jìn)程和網(wǎng)絡(luò)空間柳琢,而不是創(chuàng)建一個完整成熟的虛擬機绍妨。因此,一個 LXC 虛擬操作系統(tǒng)具有最小的資源需求柬脸,并啟動只需幾秒鐘他去。
dockerfile
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER XXXXX@163.com
RUN mkdir -p /blade/user
WORKDIR /blade/user
EXPOSE 8102
ADD ./target/blade-user.jar ./app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
CMD ["--spring.profiles.active=test"]
運行容器截圖
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rabbitmq management ac01c753758c 4 weeks ago 213MB
openzipkin/zipkin latest 7ee685d20e4d 4 weeks ago 260MB
sentinel 1.5.1 bff6901e5563 4 weeks ago 126MB
nacos/nacos-server latest fbf2aa0a0435 4 weeks ago 697MB
openjdk 8-jdk-alpine 3675b9f543c5 5 weeks ago 105MB
openjdk 8-jre d55d64383c12 6 weeks ago 443MB
redis 4.0 14433f4e77ab 7 weeks ago 83.4MB
mysql 5.7 98455b9624a9 7 weeks ago 372MB
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
------------------------------------------------------------------------------------
c831d8b81fcb openzipkin/zipkin "/busybox/sh run.sh" 4 weeks ago Up 3 minutes 9410/tcp, 0.0.0.0:9411->9411/tcp brave_ptolemy
------------------------------------------------------------------------------------
7ea9ac5dd2de rabbitmq:management "docker-entrypoint.s…" 4 weeks ago Exited (0) 2 seconds ago rabbit
------------------------------------------------------------------------------------
046539f02d48 sentinel:1.5.1 "java -Dserver.port=…" 4 weeks ago Up 3 minutes 0.0.0.0:8181->8181/tcp sentinel
------------------------------------------------------------------------------------
ce4562c06439 redis:4.0 "docker-entrypoint.s…" 4 weeks ago Up 3 minutes 0.0.0.0:6379->6379/tcp sleepy_kowalevski
------------------------------------------------------------------------------------
1e3982017c57 mysql:5.7 "docker-entrypoint.s…" 4 weeks ago Up 3 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-5.7
------------------------------------------------------------------------------------
5b0ee37cc479 nacos/nacos-server:latest "bin/docker-startup.…" 4 weeks ago Up 3 minutes 0.0.0.0:8848->8848/tcp nacos-standalone
鏡像倉庫
Pass平臺
Paas則提供了基礎(chǔ)架構(gòu),軟件開發(fā)者可以在這個基礎(chǔ)架構(gòu)之上建設(shè)新的應(yīng)用倒堕,或者擴展已有的應(yīng)用灾测,同時卻不必購買開發(fā)、質(zhì)量控制或生產(chǎn)服務(wù)器垦巴。而應(yīng)用的部署方式往往是docker鏡像的形式媳搪。
典型--阿里云飛天開發(fā)平臺
supOS工業(yè)操作系統(tǒng)
容器治理 kubernetes
是一個開源的,用于管理云平臺中多個主機上的容器化的應(yīng)用骤宣,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡單并且高效(powerful),Kubernetes提供了應(yīng)用部署秦爆,規(guī)劃,更新憔披,維護(hù)的一種機制等限。
基于Docker和Kubernetes的最佳架構(gòu)實踐
未來展望關(guān)鍵字
Cloud Native云原生
服務(wù)網(wǎng)格(Service Mesh)