技術棧定義
一般來說是指將N種技術互相組合在一起(N>1),作為一個有機的整體來實現某種目的或功能。也可以指掌握這些技術以及配合使用的經驗。
舉個例子:
開發一個普通OA(辦公自動化)系統,我們使用了html+css+javascript+vue+ Spring Boot+Spring cloud+hibernate + Spring+rocket Mq+Redis+Es+linux+ mysql等等,這些技術加起來就可以稱為技術棧。
網際網路公司的技術棧整體分為5大塊:前端、後端、中介軟體、運維和工具。
下面就分別給大家解釋一下最重要的前端、後端運用了哪些技術,這些技術又能解決什麼問題。
前端技術棧
01
使用css3作為頁面的樣式控制
解決頁面渲染問題。
02
使用Html5作為頁面結構的標籤語言
解決移動端的頁面相容性問題。
03
使用seajs框架
解決專案中模組開發和載入的問題。
04
使用使用Jquery前端js框架
解決方便操作頁面元素的問題。
05
引用流行的前端外掛實現業務需求
使用bootstrapValidator作為表單的驗證外掛
使用bootstrap進行頁面的佈局;
使用layer作為彈窗外掛;
使用jQuery cxSelect 實現下拉列表的多級聯動;
使用bootstrap fileinput完成多檔案的上傳;
使用icheck完成對多選框的美化;
使用百度ueditor解決複雜內容編輯場景。
06
自定義業務外掛抽取
後端技術棧
01
專案分層思想實現分散式架構
Core層(中心、核心):與業務無關,提供基礎的能力,比如:資料庫持久,redis快取,http封裝,通用工具。統一的core專案,提供基礎的能力we-core-Db專案:mybatis的mapper的基礎上做了二次封裝;we-core-redis專案:基於jedis的基礎上做了二次封裝;we-core-web:存放一些與web環境下使用的工具類和處理器;自定義web環境;使用的aop註解;統一的異常處理器;自定義分頁標籤的。 base層(根基、基礎):該層中的專案有且只能代表一個真實存在而且能獨立存在的核心實體對應的業務。 business層(業務邏輯層):業務層,解決多端,多專案公用的業務流程。 web層:為網際網路使用者提供對外服務,在這層的每一個專案都有自己不被共享的業務。
02
抽取獨立服務實現服務共享
好多專案都會使用到很多相同的服務,我們會把它抽取成獨立的專案,先以jar包的方式提供公用。 比如:簡訊服務,郵件服務,字典服務,收藏服務,關注服務,訂單服務,支付服務3. 基於jedis的基礎上做了二次封裝,實現java對redis的讀寫。應用場景: 整個專案使用統一的id生成策略。 使用快取進行存放freemark程式碼片段的內容,解決高頻查詢資料給伺服器帶來的壓力。
03
使用maven進行專案的管理
使用maven自定義骨架可以實現公司內部建立專案模板化,減少大家建立專案時的時間,建立完就能使用;使用maven的聚合的特性實現多專案統一進行構建;使用maven繼承的特性實現同一專案的不同maven工程的相同配置問題;使用maven的屬性我們可以使用自定義變數以及訪問其他配置項值解決我們配置重複的問題;使用maven幫助我們規範工程資源的的存放;使用maven的依賴特性可以解決我們,jar包之間的依賴,排出依賴。;使用maven倉庫的http代理可以實現讓maven幫助我們查詢,下載所需的jar包,我們只需要指定依賴的gav;使用maven我們把公司自己的開發的專案釋出到nexus上供其他的專案使用。
04
使用nexus進行內網私服搭建
解決jar包重複下載的問題; 解決公司內部專案共享的問題; maven倉庫以外的jar包管理。
05
使用gitlab進行專案的版本管理
解決團隊多人協同開發專案的問題,我們團隊制定了使用git開發的規範流程。
06
使用jenkins/hudson實現專案的自動化部署
解決專案自動化構建,釋出,回滾等問題;定時構建及時發現專案中的問題;實現一鍵釋出縮短髮布的時間;自動構建和釋出的大致流程;從gitlab上拉取最新的程式碼;使用maven進行構建專案;將構建完成的專案使用scp複製到指定伺服器中;並透過遠端呼叫指定伺服器的指令碼進行專案的釋出。
07
使用mysql進行資料儲存
這個不用多解釋。
08
使用Spring+SpringMvc+Mybitas
使用經典的ssm作為平臺的MVC框架, 處理http請求,處理業務邏輯,訪問資料庫。
09
使用hibernateValidator
實現後端接收到的引數進行引數的合法性驗證,像非空,最小,最大,範圍等。
10
使用spring mvc的攔截器
實現專案內的許可權控制,比如:sso許可權驗證,角色的驗證,支付的驗證等。
11
使用spring mvc的AOP
實現多處相同程式碼抽取出來使用AOP的方式進行公用,比如:json檢視的固定格式返回。
12
使用logback
作為架構的日誌框架。
13
使用flying-saucer+itext+freemark
解決專案中pdf的應用場景,比如:學生下載的准考證,測試報告等。
14
使用JavaMail技術
實現郵件的傳送服務。
15
使用TestNg+H2
實現進行單元化測試,保證程式碼質量。
16
使用Cookie+Redis
實現平臺單點登入。
17
實現SpringMvc提供
的HandlerExceptionResolver介面
使用spring提供HandlerExceptionResolver實現全站統一異常處理。 包括:業務異常,登入超時異常,其他異常。
18
實現SpringMvc提供
的ServletContextAware介面
可以實現專案啟動時新增一些操作。 初始化freemarker的配置; 初始化專案全域性共享的靜態變數(域名,檔案儲存目錄等)。
19
使用Quartz
實現定時任務處理。
20
使用網路爬蟲技術Jsoup
解決爬取其他網站的資料資訊問題。
21
使用Qdcode
22
使用jsp的自定義標籤
解決全站分頁的實現。
23
使用阿里的Druid
作為連線資料庫的連線池。
24
使用spring的Ioc容器解決物件的依賴注入
使用Ioc實現指定特定介面的實現類以應對業務實現的變化;使用ioc實現業務中需要的配置注入,防止引數值寫死。
25
使用CXF或者Axis
實現透過WebService和第三方進行對接。
26
結合自定義註解+反射
實現對方法訪問的控制以及新增額外業務邏輯。
比如:個人資訊在多個請求Controller中都需要填充。
27
使用Mybatis框架
解決資料持久化的問題;引入開源的:Mybatis的Mapper介面的方式實現支援單表的curd,避免寫更多的重複程式碼;引入pagehelper解決mybatis的分頁問題;使用Mybatis的Interceptor實現sql的列印功能。
28
使用Jsp,Freemark
作為檢視層的處理技術。
29
使用Freemark+字串替換實現自定義vt標籤
自定義檢視標籤主要為了解決像字典那種欄位不斷需要跨表查詢的問題。
30
自定義json檢視
自定義json檢視是為了實現規定json返回的統一格式。
31
使用El表示式和jstl標籤庫
解決訪問model中的資料以及頁面上顯示的邏輯處理。
32
使用自定義註解實現某些功能的標註
在處理json返回值的時候可以在標註一下@Void就表示不需要包裹; 在sso攔截許可權的時候可以標註一下方法是否需要攔截; 在多個Controller裡都需要設定使用者資訊到頁面的時候,我們可以利用Aop+Annotation的方式實現。
會用一種是入門,全部會用是大神!