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