① 想成為JAVA高級工程師要學習什麼
首先,你得先成為Java程序員,再到Java工程師,才能到Java高級工程師
不知道你對Java編程知識了解到什麼程度,凡事都需要積累,沉澱。
如果是完全沒有基礎,那就從最基礎的開始,參加專業正規的Java培訓機構學習基礎知道,四個半月畢業後,就業相關Java編程工作。
努力認真工作的過程可以學習很多的知識,給自己制定一個兩年計劃,兩年內要實現多少有用的代碼,做出多少個有用項目。
而後,根據具體情況,繼續制定後兩年的計劃。
如果按上述程序走五年,Java高級工程師就離你不遠了!
高級java工程師需要具備什麼能力和技術
宏觀方面
一、 JAVA。
要想成為JAVA(高級)工程師肯定要學習JAVA。一般的程序員或許只需知道一些JAVA的語法結構就可以應付了。但要成為JAVA(高級)
工程師,您要對JAVA做比較深入的研究。您應該多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、線程。如果可能,希望您
對JAVA的所有包都瀏覽一下,知道大概的API,這樣您就發現其實您想實現的很多功能,通過JAVA的API都可以實現了,就不必自己費太多的腦經 了。
二、 設計模式。
其實寫代碼是很容易的事情,我相信您也有同感。但如何寫得好就比較難了。這個「好」字包括代碼可重用性,可維護性,可擴展性等。如何寫出好的代
碼往往要藉助一些設計模式。當然長期的代碼經驗積累,只要您用心,會使您形成自己代碼風格。相信您的代碼也比較符合代碼的可重用性,可維護性,可擴展性。
但既然前人已經給我們總結出了經驗,我們何不踩著前人的肩膀前進?
三、 XML。
現在的系統中不使用XML幾乎是不可能的。XML的功能非常強大,它可以做數據轉換、做系統的配置、甚至可保存您的系統業務數據。因此您必須了解
XML,包括它的語法,結構。您還需要比較熟練的使用解析XML的一些API,比如JDOM,SAX等,因為在我們一般的項目中,XML往往擔當系統配置
信息的作用,您需要用這些API解析這些配置信息,開發完美的項目。
四、 精通使用一種或兩種框架。
「框架都會有許多可重用的代碼,良好的層次關系和業務控制邏輯,基於框架的開
發使你可以省出很多的開發成本」。這里希望您能精通,更多的是希望您能通過框架的使用了解框架的思想。這樣您在開發一個項目時思路會開闊一些,比如您
會想到把sql語句與您的JAVA代碼分開,再比如您會考慮把您的業務邏輯配置到XML或者資料庫中,這樣整個項目就很容易擴張了。
五、 熟悉主流資料庫。其實真正比較大的項目都是有人專門做資料庫的,但往往很多項目要求作為(高級)工程師的您也參與資料庫的設計以及SQL的編寫。所以為了
更好的為國家做貢獻,建議您還是多了解一些主流資料庫,比如SQLSERVER,ORACLE,多連接SQL和存儲過程以及觸發器。如果您不是「科班」出
身,您還需要補充一些資料庫原理方面的知識。
六、 精通一種或兩種WEBServer。
因為作為JAVA工程師,特別時
想成為高級JAVA工程師的您,您不可避免地要部署您的項目到WebServer上,而且只有當您精通一種WebServer,您才可能最大限度地使用它
的資源,這往往可以節省很多時間和精力。
七、 UML。
您肯定想成為高級工程師,因此您有必要了解或熟練或精通UML,這取決於您有多大決心想成為高級工程師和項目經理。在比較正規的開發團隊
中,UML是討論項目的交流工具,您要想做一個軟體工程師,您至少要能看懂,您要想做高級工程師,您要能通過它來描述您對項目的理解,盡管這不是必須,但
卻很重要。
八、 站在高度分析問題:
這不是一個知識點,也不是通過書本就能學得到的。只所以提到這一點,是因為我比您還著急,我希望您更快的成為一個高級的軟體工程師,而
不是一個一般的軟體工程師。希望您在工作中多向您的系統分析員、需求分析員、系統設計員學習,多站在他們角度上去看您在開發的項目。在最好在項目之初先在
您的腦海里對項目有個大致的分析、設計,然後和他們進行比較,找找差別,想想缺點。
九、 工具。
您在這個階段可能接觸到不同的工具了,盡管您還需要使用JB或者IDEA,但能可能對
ROSE,Together要多了解一些,因為您要畫UML了。不要再對Dreamweaver等HTML編輯器情有獨鍾了,那些JSP頁面讓初級程序員去寫吧
微觀方面
1.Core Java部分
這是最基礎的,對於一個java高級開發/設計人員,你需要對這一部分達到精通的水平,重點內容如下:
a.面向對象編程思想(封裝繼承多態介面)
b.字元串處理
c.java.lang包,java.util包等常用包
d.java異常處理
2.Java高級部分
a.Java I/O流
b.Java多線程技術
c.Java網路編程
d.Java Swing
後兩項可以了解即可,如果項目需要可以深入研究
3.前端基本技能
* HTML + CSS網頁開發
* JavaScript
* Jquery
* 瀏覽器兼容性 CSS hack(了解)
4.熟練使用JSP + Servlet進行開發
5.MVC設計模式,原理,以及相關框架,如Struts
6.SSH框架
7.緩存技術 session & cookie
8.熟練使用一種以上Java開發工具(Eclipse/MyEclipse/Jbuilder/Jcreator/IntelliJIEDA/NetBeans)
9.熟練使用XML
JDOM w3c.dom SAX
10.Java設計模式
工廠模式,單例模式 ==
11.Java反射機制
反射的各種用法
12.了解或熟悉 C, C++, .NET
13.熟悉JDK的配置,環境變數
14.資料庫oracle必學,其他最好了解一種以上(mysql,sql server,access==)
oracle:視圖,索引,存儲過程,觸發器,游標,包,常用函數 ==
15.資料庫原理
事務的原理,鎖機制,表連接,復雜查詢語句(工作經驗),性能調優,鎖表以及解決方案==
16.JDBC,連接池
17.Ajax,反向Ajax
18.HTTP協議,request 和 response的原理,HTTP status(了解常用的),Https原理
19.熟悉Linux基本命令,使用過Linux/Unix系統,可以編寫shell腳本,可以在Linux上部署項目
20.了解windows系統批處理腳本bat
21.了解HTML5,最好學習過
22.熟悉一種JS框架,如Prototype
23.J2EE原理 熟悉一種以上web容器如Tomcat,JBoss,websphere,weblogic==
24.熟悉ant或maven
25.熟悉一門腳本語言,如python ,ruby
26.了解php/ asp
27.了解ftp協議及原理
28.熟練使用Junit測試,熟悉Mockito等測試工具
29,熟悉javac,javadoc,native,native2ascii等常用命令
30.熟悉常用的排序演算法,如冒泡排序,快速排序等,最好自己研究過一些的演算法。
31.了解Flex(不學也沒關系)
32.了解敏捷開發模式
33.工作流workflow至少用過一種,如OSworkflow,了解原理
34.使用過VPN了解其原理
35.熟悉jstl表達式和el表達式
36.熟悉webservice,WSDL,SOAP
37.圖片處理,如圖片上傳,預覽,限制大小等
38.版本控制工具,CVS VSS SVN
39,JSON技術,JSON+AJAX
40.分頁技術,最好自己實現過不僅僅是用過要知道原理
41.Java Mail
42.Java讀寫txt,excel,JXL技術
43.JVM原理,JVM內存管理,GC,Java堆棧池
44.熟練使用下面的工具:
office辦公軟體,word,excel,ppt等
plsql,sqldevelop 資料庫開發工具
outlook大公司都用
ue編輯器
瀏覽器控制台,調試
SHH/PUTTY 遠程
45.UML建模工具Rational Rose等
46. 使用log4j
47.使用過開放Api如網路,騰訊街景,新浪微博等
48.頁面靜態化技術(偽靜態頁面)
49.報表技術,使用過報表製作工具,如水晶易表。
50.定時任務,如Spring batch ,學會自定義batch任務(不適用第三方工具)
51.了解uuid
52.b/s 和 c/s架構
53.正則表達式
54.了解jndi jms
55.ERP
56.UNICODE編碼,亂碼解決
57.開源網路編輯器,如ckEditor
58.二進制原理
59.使用過,了解過開源論壇框架,如discuzz
60.GWT,Closure框架
61.了解大數據,雲計算
62.搜索引擎搜索技術
63.軟體工程,項目管理
② java應該要怎麼學
想要學好Java,需要有正確的學習路線,有堅持不懈的學習毅力,也需要有專業老師的指導,這樣才能學得更好。那麼,學習Java需要掌握哪些知識和技能呢?這里簡單列舉一些。
Java學習需要掌握的知識與技能:
1、Java SE部分初級語法,面向對象,異常,IO流,多線程,Java Swing,JDBC,泛型,註解,反射等。
2、資料庫部分,基礎的sql語句,sql語句調優,索引,資料庫引擎,存儲過程,觸發器,事務等。
3、前端部分, HTML5 CSS3 JS, HTML DOM Jquery BootStrap等。
4、Java EE部分,Tomcat和Nginx伺服器搭建,配置文件,Servlet,JSP,Filter,Listener,http協議,MVC等。
5、框架部分,每個框架都可以分開學,在去學如何使用SSM 或者SSH框架,如何搭建,如何整合。開發中為什麼會用框架,Rest是啥?Spring為啥經久不衰,底層如何實現等。
6、23種設計模式,掌握常用的,比如單例模式的多種實現,責任鏈模式,工廠模式,裝飾器模式等,了解常用場景。
7、基礎演算法和數據結構,八大排序演算法,查找演算法。
8、熟練使用maven等構建工具,git等版本控制工具,熟悉常用linux命令,log4j,bug,junit單元測試,日誌列印工具,Redis等NoSql。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
③ 怎樣學習JAVA
學習java主要有自學和報班學習兩種方式,但自學沒有系統性學習是有一定難度的。
學成之後的就業崗位還是非常多的,網頁製作,軟體應用,伺服器應用等等,都是java可以做的。想要學好Java,需要有正確的學習路線,有堅持不懈的學習毅力,也需要有專業老師的指導,這樣才能學得更好。那麼,學習Java需要掌握哪些知識和技能呢?這里簡單列舉一些。
Java學習需要掌握的知識與技能:
1、Java SE部分初級語法,面向對象,異常,IO流,多線程,Java Swing,JDBC,泛型,註解,反射等。
2、資料庫部分,基礎的sql語句,sql語句調優,索引,資料庫引擎,存儲過程,觸發器,事務等。
3、前端部分, HTML5 CSS3 JS, HTML DOM Jquery BootStrap等。
4、Java EE部分,Tomcat和Nginx伺服器搭建,配置文件,Servlet,JSP,Filter,Listener,http協議,MVC等。
5、框架部分,每個框架都可以分開學,在去學如何使用SSM 或者SSH框架,如何搭建,如何整合。開發中為什麼會用框架,Rest是啥?Spring為啥經久不衰,底層如何實現等。
6、23種設計模式,掌握常用的,比如單例模式的多種實現,責任鏈模式,工廠模式,裝飾器模式等,了解常用場景。
7、基礎演算法和數據結構,八大排序演算法,查找演算法。
8、熟練使用maven等構建工具,git等版本控制工具,熟悉常用linux命令,log4j,bug,junit單元測試,日誌列印工具,Redis等NoSql。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
④ 學java應該從哪裡開始
想要學好Java,需要有正確的學習路線,有堅持不懈的學習毅力,也需要有專業老師的指導,這樣才能學得更好。那麼,學習Java需要掌握哪些知識和技能呢?這里簡單列舉一些。
Java學習需要掌握的知識與技能:
1、Java SE部分初級語法,面向對象,異常,IO流,多線程,Java Swing,JDBC,泛型,註解,反射等。
2、資料庫部分,基礎的sql語句,sql語句調優,索引,資料庫引擎,存儲過程,觸發器,事務等。
3、前端部分, HTML5 CSS3 JS, HTML DOM Jquery BootStrap等。
4、Java EE部分,Tomcat和Nginx伺服器搭建,配置文件,Servlet,JSP,Filter,Listener,http協議,MVC等。
5、框架部分,每個框架都可以分開學,在去學如何使用SSM 或者SSH框架,如何搭建,如何整合。開發中為什麼會用框架,Rest是啥?Spring為啥經久不衰,底層如何實現等。
6、23種設計模式,掌握常用的,比如單例模式的多種實現,責任鏈模式,工廠模式,裝飾器模式等,了解常用場景。
7、基礎演算法和數據結構,八大排序演算法,查找演算法。
8、熟練使用maven等構建工具,git等版本控制工具,熟悉常用linux命令,log4j,bug,junit單元測試,日誌列印工具,Redis等NoSql。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
⑤ java開發兩次都碰到log4j的問題了,明明設置了輸出級別為debug就是列印不了debug級別的日誌
java開發過程中會遇到各種問題,自學的話很難去解決這些問題,推薦去千鋒教育學習java開發,有專業團隊和老師為學生解決各種專業問題。
java開發需要學的知識有:
1.Java基礎語法和oop特性;
2.資料庫相關知識,例SQL語言、MySQL、非關系型資料庫;
3.Web基礎知識;
4.Web主流框架,例Spring、SpringMVC、Mybatis;
5.前端知識等。
想要了解更多有關java的相關信息,推薦咨詢千鋒教育。千鋒企業合作部於2013年成立,主要針對企業用人需求和學員職業規劃進行服務。經過8年發展,企業合作部已經成為千鋒連接企業和學員的重要紐帶。服務面對企業建立全方位、立體化、遍布全國的企業合作網路,覆蓋全國一線二線城市大中小型公司,成功幫助20000餘名人才實現就業,合作企業達20000餘家,每年簽訂1000餘份人才培養訂單,讓廣大學員沒有後顧之憂。
⑥ 編輯頁面數據初始化時,一條數據中的某個欄位,java後台怎麼返回給前端數組
spring方式
packagecom.learn;
importlombok.extern.log4j.Log4j2;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.boot.web.servlet.ServletRegistrationBean;
importorg.springframework.context.annotation.Bean;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.Mapping;
importorg.springframework.web.bind.annotation.RestController;
importjava.util.*;
@SpringBootApplication
@Log4j2
@RestController
{
publicstaticvoidmain(String[]args){
SpringApplication.run(LearnConcurrencyApplication.class,args);
}
@GetMapping("/")
publicStringtest(){
log.warn("Receiverequest.");
return"test";
}
@GetMapping("/a")
publicMap<String,Object>getA(){
StudentInfoinfo=newStudentInfo();
//方式1,假設欄位a是字元串
//info.setA("1,2,3,4,5,6");
//Map<String,Object>result=newHashMap<>();
//result.put("A",Arrays.asList(info.getA().split(",")));
//returnresult;
//假設A是list
List<String>list=Arrays.asList("1,2,3,4,5,6".split(","));
info.setA1(list);
Map<String,Object>result=newHashMap<>();
result.put("A",info.getA1());
returnresult;
}
@Bean
(){
=newServletRegistrationBean();
servletRegistrationBean.addUrlMappings("/sa");
servletRegistrationBean.setServlet(newMyServlet());
returnservletRegistrationBean;
}
}
servlet方式,注意依賴jackson,jar包
packagecom.learn;
importcom.fasterxml.jackson.databind.ObjectMapper;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.io.IOException;
importjava.util.Arrays;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
/**
*@authorlixiaosuo
*@since2019-04-1210:05
*/
{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
StudentInfoinfo=newStudentInfo();
List<String>list=Arrays.asList("1,2,3,4,5,6".split(","));
info.setA1(list);
Map<String,Object>result=newHashMap<>();
result.put("A",info.getA1());
//依賴jackson
ObjectMappermapper=newObjectMapper();
Stringjson=mapper.writeValueAsString(result);
resp.setContentType("application/json;charset=utf-8");
resp.setCharacterEncoding("utf-8");
resp.getWriter().write(json);
resp.getWriter().flush();
resp.getWriter().close();
}
}
輔助類
packagecom.learn;
importjava.util.List;
/**
*@authorlixiaosuo
*@since2019-04-1209:46
*/
publicclassStudentInfo{
publicStringa;
publicList<String>a1;
publicStringgetA(){
returna;
}
publicvoidsetA(Stringa){
this.a=a;
}
publicList<String>getA1(){
returna1;
}
publicvoidsetA1(List<String>a1){
this.a1=a1;
}
}
spring實現,輸出結果:
⑦ it行業有哪些職位
IT行業的職業有以下幾種:
1、WEB前端
前端開發是創建Web頁面或app等前端界面呈現給用戶的過程,通過HTML,CSS及JavaScript以及衍生出來的各種技術、框架、解決方案,來實現互聯網產品的用戶界面交互。
2、硬體工程師
硬體工程師要求熟悉計算機市場行情;主要工作為:制定計算機組裝計劃、選購組裝需要的硬體設備、合理配置和安裝計算機以及外圍設備、安裝和配置計算機軟體系統等。
3、硬體測試工程師
主要負責硬體產品的測試工作,保證測試質量及測試工作的順利進行;編寫測試計劃、測試用例;提交測試報告,撰寫用戶說明書;參與硬體測試技術和規范的改進和制定。
4、軟體工程師
軟體工程師是一個廣義的概念,包括軟體設計人員、軟體架構人員、軟體工程管理人員、程序員等一系列崗位,工作內容都與軟體開發生產相關,是IT行業中較為基礎的職業。
5、雲計算工程技術人員
雲計算是分布式計算的一種,指的是通過網路「雲」將巨大的數據計算處理程序分解成無數個小程序,然後,通過多部伺服器組成的系統進行處理和分析這些小程序得到結果並返回給用戶。
而雲計算工程技術人員是指從事雲計算技術研究,雲系統構建、部署、運維,雲資源管理、應用和服務的工程技術人員。
⑧ Java培訓內容有什麼
Java培訓主要學的內容如下:
1) Java SE核心技術:Java語言核心編程技術。
2) Java EE Web開發技術:Servlet/JSP/JavaBean編程技術、MVC模式。
3) Java EE流行框架技術:Struts2/Hibernate3/Spring2流行框架。
4) Java EE企業開發通用組件:log4j、JFreeChart、分頁、目錄樹等。
5) UML與設計模式:統一建模語言UML、經典設計模式。
6) 富客戶端(RIA)開發:AJAX、Flex等。
java是一門面向對象的編程語言,java語言具有功能強大和簡單易用兩個特徵,具有簡單性、面向對象、分布式等特點,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
想要了解更多有關Java培訓的相關信息,推薦咨詢千鋒教育。千鋒勵精圖治,不改教育初心。十一年來,千鋒以政策為引導,不斷完善國內特色現代職業教育體系建設,充分發揮教研師資隊伍使命,構建品質教育,加大創新型人才培養力度,為經濟發展提供智力人才和智力支撐,成為新時期職業教育發展的新方向,在同行業中有很高的美譽度。
⑨ 自學軟體開發應該從哪裡開始
自學軟體開發可以先從微軟的開始,學習微軟的先從VB開始,VB是比較好的入門語言,可視化的,比較簡單,是非常好的入門語言。學編程是一個很漫長的過程,不要著急,要理論與實踐想結合,常式書籍也是很重要的,看源代碼對學習也是很有幫助的,等你學完VB之後,學習別的語言是非常簡單,可以嘗試C語言,按照C——C++——VC的順序學習
⑩ Dubbo簡介
Dubbo是Alibaba開源的分布式服務框架,它按照分層的方式來架構,使用這種方式可以使各層解耦。
Dubbo在調用遠程的服務的時候再本地有一個介面,就想調用本地方法一樣去調用,底層實現好參數傳輸和遠程服務運行結果傳回之後的返回。
Dubbo的特點:
(1)它主要使用高效的網路框架和序列化框架,讓分布式服務之間調用效率更高。
(2)採用注冊中心管理眾多的服務介面地址,當你想調用服務的時候只需要跟注冊中心詢問即可,不像使用WebService一樣每個服務都得記錄好介面調用方式。
(3)監控中心時實現服務方和調用方之間運行狀態的監控,還能控制服務的優先順序、許可權、權重、上下線等,讓整個龐大的分布式服務系統的維護和治理比較方便。
(4)高可用,如果有服務掛了,注冊中心就會從服務列表去掉該節點,客戶端會像注冊中心請求另一台可用的服務節點重新調用。同時注冊中心也能實現高可用(ZooKeeper)。
(5)負載均衡,採用軟負載均衡演算法實現對多個相同服務的節點的請求負載均衡。
Dubbo需要四大基本組件:Rigistry,Monitor,Provider,Consumer。
1、監控中心的配置文件-bbo.properties文件
(1)容器,監控中心是在jetty和spring環境下運行,依賴於注冊中心,日誌系統是log4j
bbo.container = log4j,spring,registry,jetty
(2)監控服務的名稱,監控系統對整個Dubbo服務系統來說也是一個服務
bbo.application.name = simple-monitor
(3)服務的所有者,這是Dubbbo的服務的功能,可以指定服務的負責人
bbo.application.owner = coselding
(4)注冊中心的地址,配置後監控中心就能通過注冊中心獲取當前可用的服務列表及其狀態,在頁面向你匯報Dubbo中的服務運行情況。
bbo.registr.address = multicast://{ip}:{port} //廣播
bbo.registr.address = zookeeper://{ip}:{port} //zookeper
bbo.registr.address = redis://{ip}:{port} //redis
bbo.registr.address = bbo://{ip}:{port} //bbo
(5)bbo協議埠號
bbo.protocol.port = 7070
(6)jetty工作埠號
bbo.jetty.port = 8082
(7)工作目錄,用於存放監控中心的數據
bbo.jetty.directory = ${user.home}/monitor
(8)監控中心報表存放目錄
bbo.charts.directory=${bbo.jetty.directory}/charts
(9)監控中心數據資料目錄
bbo.statistics.directory=${user.home}/monitor/statistics
(10)監控中心日誌文件路徑
bbo.log4j.file=logs/bbo-monitor-simple.log
(11)監控中心日誌記錄級別
bbo.log4j.level=WARN
2、Dubbo提供負載均衡方式
(1)Random,隨機,按權重配置隨機概率,調用量越大分布越均勻,默認方式。
(2)RounRobin,輪詢,按權重設置輪詢比例,如果存在比較慢的機器容易在這台機器上請求阻塞較多。
(3)LeastActive,最少活躍調用數,不支持權重,只能根據自動識別的活躍數分配,不能靈活調配。
(4)ConsistenHash,一致性hash,對相同參數的請求路由到一個服務提供者上,如果有類似灰度發布需求可採用。
3、Dubbo過濾器
Dubbo初始化過程載入ClassPath下的META-INF/bbo/internal/,META-INF/bbo/,META-INF/services/三個路徑下的com.alibaba.bbo.rpc.Filter文件。文件內容:
Name = FullClassName,這些類必須實現Filter介面。
自定義Filter類:
配置文件在配置過濾器,consumer.xml中:
Dubbo對過濾器的載入過程:
先載入三個路徑下的com.alibaba.bbo.rpc.Filter文件裡面的鍵值對,key為過濾器名稱,value為過濾器的類的全限定名(這個類必須實現Dubbo中的Filter介面)。
自定義的類中@Active註解是過濾器設定的全局基本屬性。
Spring在載入consumer.xml文件時,通過 <bbo:consumer filter="xxx" id = "xxx" retrries = "0">這個配置指定消費者端要載入的過濾器,通過filter屬性指定過濾器名稱。
@Activate註解-自動激活,group屬性是表示匹配了對應的角色才被載入,value表示表明過濾條件,不寫則表示所有條件都會被載入,寫了則只有bbo URL中包含該參數名且參數值不為空才被載入,這個參數會以bbo協議的一個參數K-V對傳到Provider。
4、Dubbo的Provider配置
5、Dubbo的Consumer配置
1、Dubbo是什麼?
Dubbo是阿里巴巴開源的基於Java的高性能RPC分布式框架。
2、為什麼使用Dubbo?
很多公司都在使用,經過很多線上的考驗,內部使用了Netty,Zookeeper,保證了高性能可用性。
使用Dubbo可以將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,可以提高業務復用靈活性擴展,使前端應用能快速的響應對邊的市場需求。分布式架構可以承受更大規模的並發流量。
Dubbo的服務治理圖:
3、Dubbo和Spring Cloud的區別
兩個沒有關聯,但是非要說區別,有如下幾點:
(1)通信方式不同,Dubbo使用RPC通信,Spring Cloud使用HTTP Restful方式
(2)組成部分不同
4、Dubbo支持的協議
bbo:// (推薦);rmi:// ;hessian:// ;http:// ;webservice:// ;thrift:// ;memcached:// ;redis:// ;rest:// 。
5、Dubbo需要容器嗎?
不需要,如果硬要容器的話,會增加復雜性,同時也浪費資源。
6、Dubbo內置的服務容器
Spring Container;Jetty Container;Log4j Container。
7、Dubbo中節點角色
Register,Monitor,Provider,Consumer,Container(服務運行的容器)。
8、Dubbo的服務注冊和發現的流程圖
9、Dubbo的注冊中心
默認使用Zookeper作為注冊中心,還有Redis,Multicast,bbo注冊中心。
10、Dubbo的配置方式
Spring配置方式和Java API配置方式
11、Dubbo的核心配置
(1)bbo:service 服務配置
(2)bbo:referece 引用配置
(3)bbo:protocol 協議配置
(4)bbo:application 應用配置
(5)bbo:registry 注冊中心配置
(6)bbo:monitor 監控中心配置
(7)bbo:provider 提供方配置
(8)bbo:consumer 消費方配置
(9)bbo:method 方法配置
(10)bbo:argument 參數配置
12、在Provider 節點上可以配置Consumer端的屬性有哪些?
(1)timeout:方法調用超時
(2)retries:失敗重試次數,默認是2次
(3)loadbalance:負載均衡演算法,默認隨機
(4)actives消費者端,最大並發調用控制
13、Dubbo啟動時如果依賴的服務不可用會怎樣
Dubbo預設會在啟動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止Spring初始化完成。默認check ="true"。
14、Dubbo序列化框架
推薦使用Hessian序列化,還有Dubbo,FastJson,Java自帶序列化。
15、Dubbo的通信框架
默認使用Netty框架,另外也提供了Mina,Grizzly。
16、Dubbo集群容錯方案
(1)Failover Cluster,失敗自動切換,自動重試其他伺服器。
(2)Failfast Cluster,快速失敗,立即報錯,只發起一次調用。
(3)Failsafe Cluster,失敗安全,出現異常時,直接忽略。
(4)Failback Cluster,失敗自動恢復,記錄失敗請求,定時重發。
(5)Forking Cluster,並行調用多個伺服器,只要一個返回成功即可。
(6)Broadcast Cluster,廣播逐個調用所有提供者,任意一個報錯則報錯。
17、Dubbo的負載均衡策略
(1)Random LoadBalance,隨機,按權重設置隨機概率,默認。
(2)RoundRobin LoadBalace,輪詢,按公約後的權重設置輪訓比例。
(3)LeastActive LoadBalace,最少活躍調用數,相同活躍數的隨機。
(4)ConsistenHash LoadBalance,一致性hash,相同參數的請求總是發到用一個伺服器。
18、指定某一個服務
可以配置環境點對點直連,繞過注冊中心,將以服務介面為單位,忽略注冊中心的提供者列表。
<bbo:reference interface="com.weidian.bbo.IMyDemo" version="1.0" id="myDemo" url="bbo://127.0.0.1:20880/"></bbo:reference>
19、Dubbo多協議
Dubbo允許配置多協議,在不同伺服器上支持不同協議,或者同一服務支持多種協議。
20、當一個服務有多種實現時怎麼做?
當一個介面有多種是現實,可以用group屬性來分組,服務提供方和消費方都指定同一個group即可。
21、兼容舊版本
使用版本號過度,多個不同版本的服務注冊到注冊中心,版本號不同的服務相互間不引用。
22、Dubbo可以緩存嗎?
Dubbo提供聲明式緩存,用於加速熱門數據的訪問速度,以減少用戶加緩存的工作量。
23、Dubbo服務之間的調用時阻塞的嗎?
默認是同步等待結果阻塞的,支持非同步調用。Dubbo是基於NIO的非阻塞實現並行調用的,客戶端不需要啟動多線程即可完成並行調用多個遠程服務,相對多線程開銷較小,非同步調用會返回一個Future對象。
24、Dubbo不支持分布式事務
25、Dubbo必須依賴的包
Dubbo必須依賴JDK,其他為可選。
26、Dubbo使用過程中的問題
Dubbo的設計目的是為了滿足高並發小數據量的rpc請求,在大數據量下性能表現不是很好,建議使用rmi或http協議。
27、Dubbo的管理控制台的作用
路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡。
28、Spring boot整合Dubbo
(1)添加依賴
<!-- https://mvnrepository.com/artifact/com.alibaba.boot/bbo-spring-boot-project -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>bbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
(2)配置bbo
## Dubbo 服務提供者配置
spring.bbo.application.name=provider
spring.bbo.registry.address=zookeeper://127.0.0.1:2181
spring.bbo.protocol.name=bbo
spring.bbo.protocol.port=20880
spring.bbo.scan=org.spring.springboot.bbo
## Dubbo 服務消費者配置
spring.bbo.application.name=consumer
spring.bbo.registry.address=zookeeper://127.0.0.1:2181
spring.bbo.scan=org.spring.springboot.bbo