java中級面試題整理

爲什麼內存比硬盤快

硬盤需要磁頭轉動讀取數據。內存是電,瞬間到達。所以讀取快
mysql建立索引會導致更新速度變慢。因爲每一次數據更新都會導致索引更新。
索引會增加查詢效率,但是會影響增刪改效率。建立索引,只要對數據有變動。就會影響,

數據庫創建索引帶來的問題

  爲什麼要創建索引呢?這是因爲,創建索引可以大大提高系統的性能,優點:
 第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
 第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
 第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
 第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
 第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。 

  也許會有人要問:增加索引有如此多的優點,爲什麼不對錶中的每一個列創建一個索引呢?
  這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優點,但是,爲表中的每一個列都增加索引,是非常不明智的。
  這是因爲,增加索引也有許多不利的一個方面, 缺點:
第一,創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。
第二,索引需要佔物理空間,除了數據表佔數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。
第三,當對錶中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。 

  索引是建立在數據庫表中的某些列的上面。因此,在創建索引的時候,應該仔細考慮在哪些列上可以創建索引,在哪些列上不能創建索引。一般來說,應該在這些列上創建索引,
  例如:在經常需要搜索的列上,可以加快搜索的速度;
(1)在作爲主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
(2)在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
(3)在經常需要根據範圍進行搜索的列上創建索引,因爲索引已經排序,其指定的範圍是連續的;
(4)在經常需要排序的列上創建索引,因爲索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
(5)在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。 

  同樣,對於有些列不應該創建索引。一般來說,不應該創建索引的的這些列具有下列特點:
(1)對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因爲,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。
(2)對於那些只有很少數據值的列也不應該增加索引。這是因爲,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,
並不能明顯加快檢索速度。
(3)對於那些定義爲text, image和bit數據類型的列不應該增加索引。這是因爲,這些列的數據量要麼相當大,要麼取值很少。
(4)當修改性能遠遠大於檢索性能時,不應該創建索引。這是因爲,修改性能和檢索性能是互相矛盾的。
  當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因此,當修改性能遠遠大於檢索性能時,不應該創建索引

1.什麼是高可用

高可用HA(High Availability)是分佈式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。
假設系統一直能夠提供服務,我們說系統的可用性是100%。
如果系統每運行100個時間單位,會有1個時間單位無法提供服務,我們說系統的可用性是99%。
很多公司的高可用目標是49,也就是99.99%,這就意味着,系統的年停機時間爲8.76個小時。
百度的搜索首頁,是業內公認高可用保障非常出色的系統,甚至人們會通過www.baidu.com 能不能訪問來判斷“網絡的連通性”,百度高可用的服務讓人留下啦“網絡通暢,百度就能訪問”,“百度打不開,應該是網絡連不上”的印象,這其實是對百度HA最高的褒獎

2.什麼是微服務

微服務 就是按領域劃分功能模塊。 把一個大項目拆封成多個小項目。

3.分佈式

簡單的說,微服務是架構設計方式,分佈式是系統部署方式,兩者概念不同

4.redi的穿透和雪崩

緩存穿透是指查詢一個一定不存在的數據,由於緩存不命中,接着查詢數據庫也無法查詢出結果,因此也不會寫入到緩存中,
這將會導致每個查詢都會去請求數據庫,造成緩存穿透;

解決方法,1. 布隆過濾 2.緩存空對象



緩存雪崩是指,由於緩存層承載着大量請求,有效的保護了存儲層,但是如果緩存層由於某些原因整體不能提供服務,於是所有的請求都會達到存儲層,存儲層的調用量會暴增,造成存儲層也會掛掉的情況
解決:
在緩存更新或者過期的情況下,先獲取鎖,在進行更新或者從數據庫中獲取數據後,再釋放鎖,需要一定的時間等待,就可以從緩存中繼續獲取數據。


基於數據庫實現分佈式鎖; 
基於緩存(Redis等)實現分佈式鎖; 
基於Zookeeper實現分佈式鎖;

5.redis集羣

6.lombok插件

@data之類的 @tostring @ get @set

7.idea的的常用插件

-myabtis.log –
free.mybatis.plugin-
lombok-mybatis.generator

8.springboot全家桶概念

	Spring Cloud Netflix:核心組件,可以對多個Netflix OSS開源套件進行整合,包括以下幾個組件:
	Eureka:服務治理組件,包含服務註冊與發現
	Hystrix:容錯管理組件,實現了熔斷器
	Ribbon:客戶端負載均衡的服務調用組件
	Feign:基於Ribbon和Hystrix的聲明式服務調用組件
	Zuul:網關組件,提供智能路由、訪問過濾等功能
	Archaius:外部化配置組件
	Spring Cloud Config:配置管理工具,實現應用配置的外部化存儲,支持客戶端配置信息刷新、加密/解密配置內容等。
	Spring Cloud Bus:事件、消息總線,用於傳播集羣中的狀態變化或事件,以及觸發後續的處理
	Spring Cloud Security:基於spring security的安全工具包,爲我們的應用程序添加安全控制
	Spring Cloud Consul :
	封裝了Consul操作,Consul是一個服務發現與配置工具(與Eureka作用類似),與Docker容器可以無縫集成

9.同步和異步的關係

	栗子:
		故事:老王燒開水。
		出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。
		老王想了想,有好幾種等待方式
		1.老王用水壺煮水,並且站在那裏,不管水開沒開,每隔一定時間看看水開了沒。-同步阻塞
		老王想了想,這種方法不夠聰明。
		2.老王還是用水壺煮水,不再傻傻的站在那裏看水開,跑去寢室上網,但是還是會每隔一段時間過來看看水開了沒有,水沒有開就走人。-同步非阻塞
		老王想了想,現在的方法聰明瞭些,但是還是不夠好。
		3.老王這次使用高大上的響水壺來煮水,站在那裏,但是不會再每隔一段時間去看水開,而是等水開了,水壺會自動的通知他。-異步阻塞
		老王想了想,不會呀,既然水壺可以通知我,那我爲什麼還要傻傻的站在那裏等呢,嗯,得換個方法。
		4.老王還是使用響水壺煮水,跑到客廳上網去,等着響水壺自己把水煮熟了以後通知他。-異步非阻塞
		老王豁然,這下感覺輕鬆了很多。

10.SpringMVC與Struts2區別與比較總結

1、springmvc基於方法開發的,struts2基於類開發的。
2、spring mvc的入口是servlet(前端控制器),而struts2是filter(核心過濾器),這樣就導致了二者的機制不同。
3、 攔截器實現機制上,Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式。
4、struts2接受參數時是用類屬性接受參數的,而springmvc用的是方法的形參。
5、struts2響應的數據存放在modelandview裏,而struts2響應的參數仍然存放在類屬性中,響應和接受的參數都放在類屬性中會顯得很亂。
6、 另外,springmvc的驗證也是一個亮點,支持JSR303,處理ajax的請求更是方便,只需一個註解@ResponseBody ,然後直接返回響應文本即可

11.springMVC工作流程(面試必備)


1.用戶發起請求到前端控制器(DispatcherServlet),該控制器會過濾出哪些請求可以訪問Servlet、哪些不能訪問。就是url-pattern的作用,並且會加載springmvc.xml配置文件。
2.前端控制器會找到處理器映射器(HandlerMapping),通過HandlerMapping完成url到controller映射的組件,簡單來說,就是將在springmvc.xml中配置的或者註解的url與對應的處理類找到並進行存儲,用map<url,handler>這樣的方式來存儲。
3.HandlerMapping有了映射關係,並且找到url對應的處理器,HandlerMapping就會將其處理器(Handler)返回,在返回前,會加上很多攔截器。
4.DispatcherServlet拿到Handler後,找到HandlerAdapter(處理器適配器),通過它來訪問處理器,並執行處理器。
5.執行處理器
6.處理器會返回一個ModelAndView對象給HandlerAdapter
7.通過HandlerAdapter將ModelAndView對象返回給前端控制器(DispatcherServlet)
8.前端控制器請求視圖解析器(ViewResolver)去進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp),其實就是將ModelAndView對象中存放視圖的名稱進行查找,找到對應的頁面形成視圖對象
9.返回視圖對象到前端控制器。
10.視圖渲染,就是將ModelAndView對象中的數據放到request域中,用來讓頁面加載數據的。
11.通過第8步,通過名稱找到了對應的頁面,通過第10步,request域中有了所需要的數據,那麼就能夠進行視圖渲染了。最後將其返回即可。

12.Springmvc的常用註解

一、組件型註解:
@Component 在類定義之前添加@Component註解,他會被spring容器識別,並轉爲bean。
@Repository 對Dao實現類進行註解 (特殊的@Component)
@Service 用於對業務邏輯層進行註解, (特殊的@Component)
@Controller 用於控制層註解 , (特殊的@Component)
 以上四種註解都是註解在類上的,被註解的類將被spring初始話爲一個bean,然後統一管理。
二、請求和參數型註解:
@RequestMapping:用於處理請求地址映射,可以作用於類和方法上。
value:定義request請求的映射地址
method:定義地request址請求的方式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默認接受get請求,如果請求方式和定義的方式不一樣則請求無法成功。
params:定義request請求中必須包含的參數值。
headers:定義request請求中必須包含某些指定的請求頭,如:RequestMapping(value = "/something", headers = "content-type=text/*")說明請求中必須要包含"text/html", "text/plain"這中類型的Content-type頭,纔是一個匹配的請求。
consumes:定義請求提交內容的類型。
produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
  2.@RequestParam:用於獲取傳入參數的值
value:參數的名稱
required:定義該傳入參數是否必須,默認爲true,(和@RequestMapping的params屬性有點類似)
3.@PathViriable:用於定義路徑參數值
value:參數的名稱
required:定義傳入參數是否爲必須值
4.@ResponseBody:作用於方法上,可以將整個返回結果以某種格式返回,如json或xml格式。
5.@ModelAttribute:用於把參數保存到model中,可以註解方法或參數,註解在方法上的時候,該方法將在處理器方法執行之前執行,然後把返回的對象存放在 session(前提時要有@SessionAttributes註解) 或模型屬性中,@ModelAttribute(“attributeName”) 在標記方法的時候指定,若未指定,則使用返回類型的類名稱(首字母小寫)作爲屬性名稱。
6.@SessionAttributes
默認情況下Spring MVC將模型中的數據存儲到request域中。當一個請求結束後,數據就失效了。如果要跨頁面使用。那麼需要使用到session。而@SessionAttributes註解就可以使得模型中的數據存儲一份到session域中。配合@ModelAttribute("user")使用的時候,會將對應的名稱的model值存到session中

13.什麼是OOP OOD和OOA

OOA面向對象分析
OOD面向對象設計
OOP面嚮對象語言

14什麼是OOP(面向對象編程)

面向對象的三大特性
1、封裝
隱藏對象的屬性和實現細節,僅對外提供公共訪問方式,將變化隔離,便於使用,提高複用性和安全性。
2、繼承
提高代碼複用性;繼承是多態的前提。
3、多態
父類或接口定義的引用變量可以指向子類或具體實現類的實例對象。提高了程序的拓展性。

15.面向過程(POP)、面向對象(OOP)、面向接口(IOP)、面向切面(AOP)


面向過程POP
是一種以過程爲中心的編程思想。這些都是以什麼正在發生爲主要目標進行編程,不同於面向對象的是誰在受影響。
就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。最常用的面向過程語言是c語言。

面向對象	OOP
是把構成問題事務分解成各個對象,建立對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。
面向對象程序設計以對象爲核心,該方法認爲程序由一系列對象組成。類是對現實世界的抽象,包括表示靜態屬性的數據和對數據的操作,對象是類的實例化。對象間通過消息傳遞相互通信,來模擬現實世界中不同實體間的聯繫。在面向對象的程序設計中,對象是組成程序的基本模塊。

面向接口IOP
面向接口編程是開發程序的功能先定義接口,接口中定義約定好的功能方法聲明,通過實現該接口進行功能的實現,完成軟件或項目的要求.軟件或項目隨着時間的不斷變化,軟件的功能要進行升級或完善,開發人員只需要創建不同的新類重新實現該接口中所有方法,就可以達到系統升級和擴展的目的.

面向切面AOP
AOP是OOP的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生範型。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

16.SpringAOP概念及其使用

什麼是AOP
AOP(Aspect Oriented Programming 面向切面編程),通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生範型。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

常用於日誌記錄,性能統計,安全控制,事務處理,異常處理等等。

定義AOP術語
切面(Aspect):切面是一個關注點的模塊化,這個關注點可能是橫切多個對象;

連接點(Join Point):連接點是指在程序執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候;

通知(Advice):指在切面的某個特定的連接點上執行的動作。Spring切面可以應用5中通知:

前置通知(Before):在目標方法或者說連接點被調用前執行的通知;
後置通知(After):指在某個連接點完成後執行的通知;
返回通知(After-returning):指在某個連接點成功執行之後執行的通知;
異常通知(After-throwing):指在方法拋出異常後執行的通知;
環繞通知(Around):指包圍一個連接點通知,在被通知的方法調用之前和之後執行自定義的方法。
切點(Pointcut):指匹配連接點的斷言。通知與一個切入點表達式關聯,並在滿足這個切入的連接點上運行,例如:當執行某個特定的名稱的方法。

引入(Introduction):引入也被稱爲內部類型聲明,聲明額外的方法或者某個類型的字段。

目標對象(Target Object):目標對象是被一個或者多個切面所通知的對象。

AOP代理(AOP Proxy):AOP代理是指AOP框架創建的對對象,用來實現切面契約(包括通知方法等功能)

織入(Wearving):指把切面連接到其他應用出程序類型或者對象上,並創建一個被通知的對象。或者說形成代理對象的方法的過程。

17.Spring的常用註解

1.聲明bean的註解
@Component 組件,沒有明確的角色
@Service 在業務邏輯層使用(service層)
@Repository 在數據訪問層使用(dao層)
@Controller 在展現層使用,控制器的聲明(C)

2.注入bean的註解
@Autowired:由Spring提供
@Inject:由JSR-330提供
@Resource:由JSR-250提供
都可以註解在set方法和屬性上,推薦註解在屬性上(一目瞭然,少寫代碼)。

3.java配置類相關注解
@Configuration 聲明當前類爲配置類,相當於xml形式的Spring配置(類上)
@Bean 註解在方法上,聲明當前方法的返回值爲一個bean,替代xml中的方式(方法上)
@Configuration 聲明當前類爲配置類,其中內部組合了@Component註解,表明這個類是一個bean(類上)
@ComponentScan 用於對Component進行掃描,相當於xml中的(類上)
@WishlyConfiguration@Configuration@ComponentScan的組合註解,可以替代這兩個註解

4.切面(AOP)相關注解
Spring支持AspectJ的註解式切面編程。
@Aspect 聲明一個切面(類上) 
使用@After@Before@Around定義建言(advice),可直接將攔截規則(切點)作爲參數。
@After 在方法執行之後執行(方法上) 
@Before 在方法執行之前執行(方法上) 
@Around 在方法執行之前與之後執行(方法上)
@PointCut 聲明切點 
在java配置類中使用@EnableAspectJAutoProxy註解開啓Spring對AspectJ代理的支持(類上)

5.@Bean的屬性支持
@Scope 設置Spring容器如何新建Bean實例(方法上,得有@Bean) 
其設置類型包括:

Singleton (單例,一個Spring容器中只有一個bean實例,默認模式), 
Protetype (每次調用新建一個bean), 
Request (web項目中,給每個http request新建一個bean), 
Session (web項目中,給每個http session新建一個bean), 
GlobalSession(給每一個 global http session新建一個Bean實例)
@StepScope 在Spring Batch中還有涉及
@PostConstruct 由JSR-250提供,在構造函數執行完之後執行,等價於xml配置文件中bean的initMethod
@PreDestory 由JSR-250提供,在Bean銷燬之前執行,等價於xml配置文件中bean的destroyMethod

6.@Value註解
@Value 爲屬性注入值(屬性上) 
支持如下方式的注入: 
》注入普通字符

@Value("Michael Jackson")
String name;
》注入操作系統屬性

@Value("#{systemProperties['os.name']}")
String osName;
》注入表達式結果

@Value("#{ T(java.lang.Math).random() * 100 }") 
String randomNumber;
》注入其它bean屬性

@Value("#{domeClass.name}")
String name;
》注入文件資源

@Value("classpath:com/hgs/hello/test.txt")
String Resource file;
》注入網站資源

@Value("http://www.cznovel.com")
Resource url;
》注入配置文件

@Value("${book.name}")
String bookName;
注入配置使用方法: 
① 編寫配置文件(test.properties)
book.name=《三體》
② @PropertySource 加載配置文件(類上)
@PropertySource("classpath:com/hgs/hello/test/test.propertie")
③ 還需配置一個PropertySourcesPlaceholderConfigurer的bean。
7.環境切換
@Profile 通過設定Environment的ActiveProfiles來設定當前context需要使用的配置環境。(類或方法上)
@Conditional Spring4中可以使用此註解定義條件話的bean,通過實現Condition接口,並重寫matches方法,從而決定該bean是否被實例化。(方法上)

8.異步相關
@EnableAsync 配置類中,通過此註解開啓對異步任務的支持,敘事性AsyncConfigurer接口(類上)
@Async 在實際執行的bean方法使用該註解來申明其是一個異步任務(方法上或類上所有的方法都將異步,需要@EnableAsync開啓異步任務)

9.定時任務相關
@EnableScheduling 在配置類上使用,開啓計劃任務的支持(類上)
@Scheduled 來申明這是一個任務,包括cron,fixDelay,fixRate等類型(方法上,需先開啓計劃任務的支持)

10.@Enable*註解說明
這些註解主要用來開啓對xxx的支持。 
@EnableAspectJAutoProxy 開啓對AspectJ自動代理的支持
@EnableAsync 開啓異步方法的支持
@EnableScheduling 開啓計劃任務的支持
@EnableWebMvc 開啓Web MVC的配置支持
@EnableConfigurationProperties 開啓對@ConfigurationProperties註解配置Bean的支持
@EnableJpaRepositories 開啓對SpringData JPA Repository的支持
@EnableTransactionManagement 開啓註解式事務的支持
@EnableTransactionManagement 開啓註解式事務的支持
@EnableCaching 開啓註解式的緩存支持

11.測試相關注解
@RunWith 運行器,Spring中通常用於對JUnit的支持
@ContextConfiguration 用來加載配置ApplicationContext,其中classes屬性用來加載配置類
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={TestConfig.class})
public class KjtTest {
 
    private static Logger logger = LoggerFactory.getLogger("KjtTest");
 
    @Autowired
    Service service;
 
 
    @Test
    public void test() {
        
    }
}

18.SpringMVC部分

@EnableWebMvc 在配置類中開啓Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若無此句,重寫WebMvcConfigurerAdapter方法(用於對SpringMVC的配置)。
@Controller 聲明該類爲SpringMVC中的Controller
@RequestMapping 用於映射Web請求,包括訪問路徑和參數(類或方法上)
@ResponseBody 支持將返回值放在response內,而不是一個頁面,通常用戶返回json數據(返回值旁或方法上)
@RequestBody 允許request的參數在request體中,而不是在直接連接在地址後面。(放在參數前)
@PathVariable 用於接收路徑參數,比如@RequestMapping(/hello/{name})申明的路徑,將註解放在參數中前,即可獲取該值,通常作爲Restful的接口實現方法。
@RestController 該註解爲一個組合註解,相當於@Controller@ResponseBody的組合,註解在類上,意味着,該Controller的所有方法都默認加上了@ResponseBody@ControllerAdvice 通過該註解,我們可以將對於控制器的全局配置放置在同一個位置,註解了@Controller的類的方法可使用@ExceptionHandler@InitBinder@ModelAttribute註解到方法上, 
這對所有註解了 @RequestMapping的控制器內的方法有效。
@ExceptionHandler 用於全局處理控制器裏的異常
@InitBinder 用來設置WebDataBinder,WebDataBinder用來自動綁定前臺請求參數到Model中。
@ModelAttribute 本來的作用是綁定鍵值對到Model裏,在@ControllerAdvice中是讓全局的@RequestMapping都能獲得在此處設置的鍵值對。

19.SOA架構和微服務架構的區別

首先SOA和微服務架構一個層面的東西,而對於ESB和微服務網關是一個層面的東西,一個談到是架構風格和方法,一個談的是實現工具或組件。

 1.SOA(Service Oriented Architecture)“面向服務的架構”:他是一種設計方法,其中包含多個服務, 服務之間通過相互依賴最終提供一系列的功能。一個服務 通常以獨立的形式存在與操作系統進程中。各個服務之間 通過網絡調用。

 2.微服務架構:其實和 SOA 架構類似,微服務是在 SOA 上做的昇華,微服務架構強調的一個重點是“業務需要徹底的組件化和服務化”,原有的單個業務系統會拆分爲多個可以獨立開發、設計、運行的小應用。這些小應用之間通過服務完成交互和集成。

 微服務架構 = 80%的SOA服務架構思想 + 100%的組件化架構思想 + 80%的領域建模思想

20.微服務優勢與缺點


優點: 每個微服務可獨立運行在自己的進程裏;
一系列獨立運行的微服務共同構建起了整個系統;
每個服務爲獨立的業務開發,一個微服務一般完成某個特定的功能,比如:訂單管理,用戶管理等;
微服務之間通過一些輕量級的通信機制進行通信,例如通過REST API或者RPC的方式進行調用

21.微服務設計原則

單一職責原則
意思是每個微服務只需要實現自己的業務邏輯就可以了,比如訂單管理模塊,它只需要處理訂單的業務邏輯就可以了,其它的不必考慮。
服務自治原則
意思是每個微服務從開發、測試、運維等都是獨立的,包括存儲的數據庫也都是獨立的,自己就有一套完整的流程,我們完全可以把它當成一個項目來對待。不必依賴於其它模塊。
輕量級通信原則
首先是通信的語言非常的輕量,第二,該通信方式需要是跨語言、跨平臺的,之所以要跨平臺、跨語言就是爲了讓每個微服務都有足夠的獨立性,可以不受技術的鉗制。
接口明確原則
由於微服務之間可能存在着調用關係,爲了儘量避免以後由於某個微服務的接口變化而導致其它微服務都做調整,在設計之初就要考慮到所有情況,讓接口儘量做的更通用,更靈活,從而儘量避免其它模塊也做調整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章