其餘開源框架面試題

1、springbootjavascript

1.什麼是springbootjava

        用來簡化spring應用的初始搭建以及開發過程 使用特定的方式來進行配置(properties或yml文件) web

                建立獨立的spring引用程序 main方法運行redis

                嵌入的Tomcat 無需部署war文件算法

                簡化maven配置spring

                自動配置spring添加對應功能starter自動化配置mongodb

                

2.springboot經常使用的starter有哪些數據庫

        spring-boot-starter-web 嵌入tomcat和web開發須要servlet與jsp支持tomcat

        spring-boot-starter-data-jpa 數據庫支持安全

        spring-boot-starter-data-redis redis數據庫支持

        spring-boot-starter-data-solr solr支持

        mybatis-spring-boot-starter 第三方的mybatis集成starter

        

springboot自動配置的原理

        在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration

        會自動去maven中讀取每一個starter中的spring.factories文件  該文件裏配置了全部須要被建立spring容器中的bean

3.springboot讀取配置文件的方式

        springboot默認讀取配置文件爲application.properties或者是application.yml

4.springboot集成mybatis的過程

        添加mybatis的starter maven依賴

                <dependency>

                        <groupId>org.mybatis.spring.boot</groupId>

                        <artifactId>mybatis-spring-boot-starter</artifactId>

                        <version>1.2.0</version>

                </dependency>

        在mybatis的接口中 添加@Mapper註解

        在application.yml配置數據源信息

5.springboot如何添加【修改代碼】自動重啓功能

        添加開發者工具集=====spring-boot-devtools

2、mongodb

1.MySQL和MongoDB之間最基本的區別是什麼?
關係型數據庫與非關係型數據庫的區別,即數據存儲結構的不一樣。
2.MongoDB的特色是什麼?
(1)面向文檔(2)高性能(3)高可用(4)易擴展(5)豐富的查詢語言

3. MongoDB支持存儲過程嗎?若是支持的話,怎麼用?
MongoDB支持存儲過程,它是javascript寫的,保存在db.system.js表中。
4.如何理解MongoDB中的GridFS機制,MongoDB爲什麼使用GridFS來存儲文件?
GridFS是一種將大型文件存儲在MongoDB中的文件規範。使用GridFS能夠將大文件分隔成多個小文檔存放,這樣咱們可以有效的保存大文檔,並且解決了BSON對象有限制的問題。
5.爲何MongoDB的數據文件很大?
MongoDB採用的預分配空間的方式來防止文件碎片。
6.當更新一個正在被遷移的塊(Chunk)上的文檔時會發生什麼?
更新操做會當即發生在舊的塊(Chunk)上,而後更改纔會在全部權轉移前複製到新的分片上。
7.MongoDB在A:{B,C}上創建索引,查詢A:{B,C}和A:{C,B}都會使用索引嗎?
不會,只會在A:{B,C}上使用索引。
8.若是一個分片(Shard)中止或很慢的時候,發起一個查詢會怎樣?
若是一個分片中止了,除非查詢設置了「Partial」選項,不然查詢會返回一個錯誤。若是一個分片響應很慢,MongoDB會等待它的響應。

9.mongodb數據庫的總體結構

鍵值對–》文檔–》集合–》數據庫

3、zookeeper

Zookeeper是什麼框架
分佈式的、開源的分佈式應用程序協調服務,它爲分佈式應用提供一致性服務的軟件,包括:配置維護、域名服務、分佈式同步、組服務等。

Zookeeper主要是作註冊中心用。基於Dubbo框架開發的提供者、消費者都向Zookeeper註冊本身的URL,消費者還能拿到並訂閱提供者的註冊URL,以便在後續程序的執行中去調用提供者。而提供者發生了變更,也會經過Zookeeper向訂閱的消費者發送通知。

Paxos算法& Zookeeper使用協議
Paxos算法是分佈式選舉算法,Zookeeper使用的 ZAB協議(Zookeeper原子廣播),兩者有相同的地方,好比都有一個Leader,用來協調N個Follower的運行;Leader要等待超半數的Follower作出正確反饋以後才進行提案;兩者都有一個值來表明Leader的週期。
不一樣的地方在於:
ZAB用來構建高可用的分佈式數據主備系統(Zookeeper),Paxos是用來構建分佈式一致性狀態機系統。

Zookeeper有哪幾種節點類型
持久:建立以後一直存在,除非有刪除操做,建立節點的客戶端會話失效也不影響此節點。
持久順序:跟持久同樣,就是父節點在建立下一級子節點的時候,記錄每一個子節點建立的前後順序,會給每一個子節點名加上一個數字後綴。
臨時:建立客戶端會話失效(注意是會話失效,不是鏈接斷了),節點也就沒了。不能建子節點。
臨時順序:不用解釋了吧。

部署方式?集羣中的機器角色都有哪些?集羣最少要幾臺機器
單機,集羣。Leader、Follower。集羣最低3(2N+1)臺,保證奇數,主要是爲了選舉算法。
集羣若是有3臺機器,掛掉一臺集羣還能工做嗎?掛掉兩臺呢?
記住一個原則:過半存活便可用。
集羣支持動態添加機器嗎?
其實就是水平擴容了,Zookeeper在這方面不太好。兩種方式:
所有重啓:關閉全部Zookeeper服務,修改配置以後啓動。不影響以前客戶端的會話。
逐個重啓:顧名思義。這是比較經常使用的方式。

4、dubbo

1.爲何要用Dubbo

由於是阿里開源項目,國內不少互聯網公司都在用,已經通過不少線上考驗。內部使用了 Netty、Zookeeper,保證了高性能高可用性。

2.Dubbo 和 Spring Cloud 有什麼區別?

1)通訊方式不一樣

Dubbo 使用的是 RPC 通訊,而 Spring Cloud 使用的是 HTTP RESTFul 方式。

2)組成部分不一樣

3.Dubbo須要 Web 容器嗎?

不須要,若是硬要用 Web 容器,只會增長複雜性,也浪費資源。

4.Dubbo內置了哪幾種服務容器?

  • Spring Container

  • Jetty Container

  • Log4j Container

Dubbo 的服務容器只是一個簡單的 Main 方法,並加載一個簡單的 Spring 容器,用於暴露服務。

5.Dubbo裏面有哪幾種節點角色?

6.畫一畫服務註冊與發現的流程圖

7.Dubbo默認使用什麼註冊中心,還有別的選擇嗎?

推薦使用 Zookeeper 做爲註冊中心,還有 Redis、Multicast、Simple 註冊中心,但不推薦。

8.Dubbo有哪幾種配置方式?

1)Spring 配置方式
2)Java API 配置方式

9.Dubbo 核心的配置有哪些?

10.在 Provider 上能夠配置的 Consumer 端的屬性有哪些?

1)timeout:方法調用超時
2)retries:失敗重試次數,默認重試 2 次
3)loadbalance:負載均衡算法,默認隨機
4)actives 消費者端,最大併發調用限制

11.Dubbo推薦使用什麼序列化框架,你知道的還有哪些?

推薦使用Hessian序列化,還有Duddo、FastJson、Java自帶序列化。

12.Dubbo默認使用的是什麼通訊框架,還有別的選擇嗎?

Dubbo 默認使用 Netty 框架,也是推薦的選擇,另外內容還集成有Mina、Grizzly。

13.Dubbo有哪幾種集羣容錯方案,默認是哪一種?

失敗自動切換,當出現失敗,重試其它服務器。(默認)

快速失敗,只發起一次調用,失敗當即報錯。

失敗安全,出現異常時,直接忽略。

失敗自動恢復,後臺記錄失敗請求,定時重發。

並行調用多個服務器,只要一個成功即返回。

廣播調用全部提供者,逐個調用,任意一臺報錯則報錯 

14.Dubbo有哪幾種負載均衡策略,默認是哪一種?

15.註冊了多個同同樣的服務,若是測試指定的某一個服務呢?

能夠配置環境點對點直連,繞過註冊中心,將以服務接口爲單位,忽略註冊中心的提供者列表。

16.服務上線怎麼兼容舊版本?

能夠用版本號(version)過渡,多個不一樣版本的服務註冊到註冊中心,版本號不一樣的服務相互間不引用。這個和服務分組的概念有一點相似。

17.Dubbo服務之間的調用是阻塞的嗎?

默認是同步等待結果阻塞的,支持異步調用。

Dubbo 是基於 NIO 的非阻塞實現並行調用,客戶端不須要啓動多線程便可完成並行調用多個遠程服務,相對多線程開銷較小,異步調用會返回一個 Future 對象。

18.Dubbo支持分佈式事務嗎?

目前暫時不支持,後續可能採用基於 JTA/XA 規範實現,如以圖所示。

XA須要兩階段提交 -- prepare 和 commit.
假設有兩個Connection, con1, con2, 大致的過程以下 

[java] view plain copy

print?

  1. con1 = XAResouce1.getConnection...     
  2. con2 = XAResouce2.getConnection...     
  3.     
  4. con1 do some thing.     
  5. con2 do some thing.     
  6. after they finish.     
  7.     
  8. pre1 = XAResouce1.prepare();     
  9. pre2 = XAResouce2.prepare();     
  10.     
  11. if( both pre1 and pre2 are OK){     
  12. XAResouce1 and 2 commit     
  13. }else {     
  14. XAResouce1 and 2 rollback     
  15. }    

Global Transaction 須要XA接口(包括在JTA裏面)的支持。

這些XA接口的實現,須要數據庫的JDBC提供。
數據庫自己要支持XA。數據庫的JDBC也要提供XA的實現。

Oracle, Sybase, DB2, SQL Server等大型數據庫支持XA

免費的postreSQL也支持XA 
My SQL 連Local Transaction都支持很差,更別說Global Transation了

19.服務提供者能實現失效踢出是什麼原理?

服務失效踢出基於 Zookeeper 的臨時節點原理。

20.如何解決服務調用鏈過長的問題?

Dubbo 可使用 Pinpoint 和 Apache Skywalking(Incubator) 實現分佈式服務追蹤,固然還有其餘不少方案。

21.服務讀寫推薦的容錯策略是怎樣的?

讀操做建議使用 Failover 失敗自動切換,默認重試兩次其餘服務器。

寫操做建議使用 Failfast 快速失敗,發一次調用失敗就當即報錯。

22.Dubbo必須依賴的包有哪些?

Dubbo 必須依賴 JDK,其餘爲可選。

23.Dubbo的管理控制檯能作什麼?

管理控制檯主要包含:路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。

24.說說 Dubbo 服務暴露的過程。

Dubbo 會在 Spring 實例化完 bean 以後,在刷新容器最後一步發佈 ContextRefreshEvent 事件的時候,通知實現了 ApplicationListener 的 ServiceBean 類進行回調 onApplicationEvent 事件方法,Dubbo 會在這個方法中調用 ServiceBean 父類 ServiceConfig 的 export 方法,而該方法真正實現了服務的(異步或者非異步)發佈。

25.Dubbo 中止維護了嗎?

2014 年開始中止維護過幾年,17 年開始從新維護,並進入了 Apache 項目。

26.Dubbo 和 Dubbox 有什麼區別?

Dubbox 是繼 Dubbo 中止維護後,噹噹網基於 Dubbo 作的一個擴展項目,如加了服務可 Restful 調用,更新了開源組件等。

相關文章
相關標籤/搜索