更新時(shí)間:2019-12-18 14:07:52 來源:動(dòng)力節(jié)點(diǎn) 瀏覽4090次
說一下分布式管理事務(wù)?
簡單的來說呢,分布式事務(wù)其實(shí)就是一次大的操作分成了好的小的操作,這些小的操作分別部署在不同的服務(wù)器上,而且屬于不同的應(yīng)用,分布式的事務(wù)其實(shí)就是保證這些小的事務(wù)要么都成功,要么都失敗。
分布式事務(wù)出現(xiàn)的場景比如在支付和在線下單都會(huì)出現(xiàn),我了解的分布式事務(wù)管理解決方法就是二次提交,基于MQ的特性,MQ作為二次提交的中間節(jié)點(diǎn),負(fù)責(zé)儲(chǔ)存請(qǐng)求數(shù)據(jù)的,在失敗的情況下可以進(jìn)行多次嘗試,還有可以基于MQ中的事務(wù)回滾操作,可以保證性能,又能保證業(yè)務(wù)一致性的方案。
請(qǐng)你簡單介紹一下SpringCloud組件分別是什么,并有什么用處?
SpringCloud中有五個(gè)組件,分別是:
服務(wù)發(fā)現(xiàn)——Eureka
負(fù)載均衡——Ribbon
斷路器——Hystrix
網(wǎng)關(guān)——Zuul
配置——SpringCloud Config
Eureka是Netflix的一個(gè)子模塊,也是核心的模塊之一,Eureka是一個(gè)基于rest的服務(wù),用于定位服務(wù),服務(wù)注冊(cè)等功能,有了這些功能,只需要使用服務(wù)的標(biāo)識(shí)符,就可以訪問到服務(wù),而不需要調(diào)用服務(wù)的配置文件了,功能類似于dobbo中的zookerper。
Ribbon主要提供負(fù)載均衡算法,它提供了一系列的配置項(xiàng),比如連接超時(shí),重試,重試算法等,他有一些實(shí)現(xiàn)策略:簡單輪詢負(fù)載均衡,加權(quán)響應(yīng)時(shí)間,區(qū)域感知輪詢,隨機(jī)負(fù)載均衡。
Hystrix可以防止個(gè)應(yīng)用程序多次試圖執(zhí)行一個(gè)操作,就是很可能失敗的操作,斷路器模式也可以檢測出故障是不是解決了,如果問題得到了解決,那么應(yīng)用程序就可以嘗試調(diào)用操作。
Zuul網(wǎng)關(guān)類似于Nginx,反向代理,不過netflix自己增加了一些配合其他組件的特性。
Spring Cloud Config
這個(gè)是靜態(tài)的,得配合SpringCloudBus實(shí)現(xiàn)動(dòng)態(tài)的配置更新。
為什么eureka可以實(shí)現(xiàn)高可用?
在微服務(wù)的項(xiàng)目中,我們要考慮到發(fā)生故障的情況,所以也要對(duì)服務(wù)的注冊(cè)中心也要進(jìn)行高可用的部署,那么eureka就是通過多個(gè)實(shí)例進(jìn)行互相注冊(cè),然后修改每個(gè)serviceUrl就可以,eurekaServer的高可用其實(shí)就是將自己作為服務(wù)去其他的注冊(cè)中心注冊(cè)自己,這樣就可以形成一組互相注冊(cè)的注冊(cè)中心,就可以實(shí)現(xiàn)服務(wù)清單的互相同步,這樣就達(dá)到了高可用的情況。
Git合并分支的命令是什么?
查看分支:git branch
創(chuàng)建分支:git branch
切換分支:git checkout
創(chuàng)建+切換分支:git checkout -b
合并某分支到當(dāng)前分支:git merge
刪除分支:git branch -d
HashMap和HashTable 的區(qū)別?
首先他們兩個(gè)的底層都是基于數(shù)組+鏈表實(shí)現(xiàn)的,然后hashtable的key和value都不可以為空,他是線程安全的,他實(shí)現(xiàn)線程安全的方法是在修改數(shù)據(jù)時(shí)鎖住整個(gè)hashtable,這樣的話效率就會(huì)很低。
Hashmap是線程非安全的,他可以存空值,我對(duì)他印象比較深的就是他的初始size是16,然后每次擴(kuò)容都是以2的n次冪擴(kuò)容的。
負(fù)載均衡的策略有哪些?
大約有很多種,但我了解的有輪詢的方式和最小連接數(shù),輪詢就是很簡單的實(shí)現(xiàn),依次將請(qǐng)求發(fā)送給后端的服務(wù)器,有點(diǎn)就是實(shí)現(xiàn)簡單,請(qǐng)求分配均勻,缺點(diǎn)也是在均勻,因?yàn)橛械姆?wù)器性能好,可以承受更多的請(qǐng)求,但是他都是均勻分配的,所以也是有不合適的地方。最小連接數(shù)就是在后端服務(wù)器性能差異較大的話,可以優(yōu)化lc的性能,高權(quán)值的服務(wù)可以承載更高的連接負(fù)載。
線程池是什么?
線程池就是java.util包下的有一個(gè)接口,用來創(chuàng)建線程池的,加入一個(gè)服務(wù)完成一項(xiàng)任務(wù)需要的時(shí)間是創(chuàng)建線程的時(shí)間,執(zhí)行線程的時(shí)間,和銷毀線程的時(shí)間,如果創(chuàng)建的時(shí)間和銷毀的時(shí)間大于執(zhí)行任務(wù)的時(shí)間,那我們就要采用線程池來提高服務(wù)器的性能了,線程池包括:線程池管理器(就是用來創(chuàng)建并管理線程的,也包括銷毀,添加新任務(wù))工作線程(線程池中的線程,在沒有任務(wù)處于等待的情況下,可以循環(huán)的執(zhí)行任務(wù)) 任務(wù)接口(每個(gè)任務(wù)必須實(shí)現(xiàn)接口,供工作線程的調(diào)用),任務(wù)隊(duì)列(用來存放沒有處理的任務(wù),提供一種緩沖的機(jī)制) 線程池就是關(guān)注如何優(yōu)化創(chuàng)建線程時(shí)間和銷毀線程時(shí)間的。
常見的線程池有單個(gè)的線程池,和固定數(shù)量的線程池,還有就是無數(shù)量限制的線程池。
熔斷是什么,用來處理什么問題的?
熔斷機(jī)制就是應(yīng)對(duì)微服務(wù)雪崩效應(yīng)的一種鏈路保護(hù)機(jī)制,就是當(dāng)我們某個(gè)微服務(wù)忽然不可用或者響應(yīng)時(shí)間過長的時(shí)候,就會(huì)進(jìn)行服務(wù)降級(jí),熔斷該節(jié)點(diǎn)的服務(wù)調(diào)用,然后響應(yīng)錯(cuò)誤信息,等到檢測這個(gè)應(yīng)用響應(yīng)正常的時(shí)候,再恢復(fù)這個(gè)鏈路。SpringCloud中的熔斷是通過Hystrix實(shí)現(xiàn)的,它會(huì)監(jiān)測服務(wù)的調(diào)用狀況,
當(dāng)失敗到達(dá)一定閾值的時(shí)候,就會(huì)啟動(dòng)熔斷,熔斷機(jī)制的注解就是加一個(gè)注解,@hystrixCommand。
線程間的通信是什么,通信狀態(tài)有幾種?
在一個(gè)進(jìn)程中,線程一般都不是單獨(dú)存在的,而是多個(gè)線程之間需要進(jìn)行通信的。他們的體現(xiàn)就是,當(dāng)一個(gè)線程傳輸數(shù)據(jù)給另一個(gè)線程,一個(gè)線程執(zhí)行完特定的任務(wù)后轉(zhuǎn)到另一個(gè)線程繼續(xù)執(zhí)行任務(wù)。線程通信的方法有perform,還有NSmachport:本地之間的通信,通過傳遞端口對(duì)象變量進(jìn)行端口間的通信。他應(yīng)該是通過代理模式來傳遞消息的。管道,命名管道,信號(hào),消息隊(duì)列,共享內(nèi)存
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java中級(jí)程序員常見面試題”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級(jí)到高級(jí))
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743