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