spring boot面試問題集錦

譯文作者:david 原文鏈接:https://www.javainuse.com/spring/SpringBootInterviewQuestions

Q: 什么是spring boot?

A: 多年來怔鳖,隨著新功能的增加购桑,spring變得越來越復(fù)雜蛀恩。只需訪問頁面https://spring.io/projects,我們將看到所有在應(yīng)用程序中使用的不同功能的spring項目鸦列。如果必須啟動一個新的spring項目,我們必須添加構(gòu)建路徑或maven依賴項,配置application server气筋,添加spring配置。因此旋圆,啟動一個新的spring項目需要大量的工作宠默,因為我們目前必須從頭開始做所有事情。Spring Boot是這個問題的解決方案灵巧。Spring boot構(gòu)建在現(xiàn)有Spring框架之上搀矫。使用spring boot,我們可以避免以前必須執(zhí)行的所有樣板代碼和配置刻肄。因此瓤球,Spring boot幫助我們更健壯地使用現(xiàn)有的Spring功能,并且只需最少的工作量肄方。

Q:Spring Boot的優(yōu)點是什么?

A: Spring Boot的優(yōu)點是

減少開發(fā)冰垄、測試的時間和工作量。

使用JavaConfig有助于避免使用XML权她。

避免大量maven導(dǎo)入和各種版本沖突虹茶。

提供可選的開發(fā)方法。

通過提供默認(rèn)開發(fā)方式進(jìn)行快速開發(fā)隅要。

不需要單獨(dú)的Web服務(wù)器蝴罪。這意味著您不再需要啟動Tomcat、Glassfish或其他任何東西步清。

由于沒有web.xml文件要门,所以需要更少的配置虏肾。只需添加帶@ configuration注釋的類,然后可以添加帶@ bean注釋的方法欢搜,Spring將自動加載對象并像往常一樣管理它封豪。您甚至可以將@Autowired添加到bean方法中,使Spring autowire成為bean所需的依賴項炒瘟。

基于環(huán)境的配置——使用這些屬性吹埠,您可以將其傳遞到您正在使用的應(yīng)用程序環(huán)境中:- dspring .profile .active={enviorement}。在加載主應(yīng)用程序?qū)傩晕募蟠埃琒pring將在(application-{environment}.properties)處加載后續(xù)的應(yīng)用程序?qū)傩晕募?/p>

Q:您使用過哪些構(gòu)建工具來開發(fā)Spring引導(dǎo)應(yīng)用程序?

A: Spring Boot應(yīng)用程序可以使用Maven和Gradle開發(fā)缘琅。

Q:什么是JavaConfig?

A:Spring JavaConfig是Spring社區(qū)的一個產(chǎn)品,它提供了一種純java方法來配置Spring IoC容器廓推。因此刷袍,它有助于避免使用XML配置。使用JavaConfig的優(yōu)點是:

面向?qū)ο蟮呐渲梅埂R驗榕渲迷贘avaConfig中定義為類呻纹,所以用戶可以充分利用Java中的面向?qū)ο筇匦浴R粋€配置類可以子類化另一個配置類滚局,覆蓋它的@Bean方法居暖,等等。

減少或消除XML配置藤肢。已經(jīng)證明了基于依賴注入原則的外部化配置的好處太闺。然而,許多開發(fā)人員不愿意在XML和Java之間來回切換嘁圈。JavaConfig為開發(fā)人員提供了一種純java方法來配置Spring容器省骂,這種方法在概念上類似于XML配置。從技術(shù)上講最住,僅使用   JavaConfig配置類來配置容器是可行的钞澳,但是在實踐中,許多人發(fā)現(xiàn)將JavaConfig與XML混合并匹配是理想的涨缚。

類型安全的重構(gòu)能力轧粟。JavaConfig提供了一種類型安全的配置Spring容器的方法。由于Java 5.0對泛型的支持脓魏,現(xiàn)在可以通過類型而不是名稱檢索bean兰吟,不需要進(jìn)行任何基于類型轉(zhuǎn)換或字符串的查找。

問:如何在不重啟服務(wù)器的情況下在Spring引導(dǎo)時重新加載我的更改?
答:這可以通過開發(fā)工具來實現(xiàn)茂翔。有了這個依賴項混蔼,您保存的任何更改都將重新啟動嵌入的tomcat。Spring Boot有一個開發(fā)人員工具(DevTools)模塊珊燎,它有助于提高開發(fā)人員的工作效率惭嚣。Java開發(fā)人員面臨的關(guān)鍵挑戰(zhàn)之一是將文件更改自動部署到服務(wù)器并自動重啟服務(wù)器遵湖。開發(fā)人員可以在Spring引導(dǎo)時重新加載更改,而不必重新啟動服務(wù)器晚吞。這將消除每次手動部署更改的需要延旧。Spring Boot在發(fā)布第一個版本時沒有這個特性。這是開發(fā)人員最需要的特性槽地。DevTools模塊完全滿足開發(fā)人員的需求垄潮。此模塊將在生產(chǎn)環(huán)境中禁用。它還提供了H2-database控制臺闷盔,以便更好地測試應(yīng)用程序。使用以下依賴項

<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; box-sizing: border-box; font-family: "Courier New" !important; font-size: 12px !important;"><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency></pre>

下面的示例演示了自動啟動和H2 DB控制臺的DevTool依賴項用法

什么是Spring boot actuator?
答:Spring boot actuator是Spring boot framework的重要特性之一旅急。Spring boot actuator幫助您訪問生產(chǎn)環(huán)境中正在運(yùn)行的應(yīng)用程序的當(dāng)前狀態(tài)逢勾,在生產(chǎn)環(huán)境中必須檢查和監(jiān)視幾個指標(biāo)。甚至一些外部應(yīng)用程序也可能使用這些服務(wù)來觸發(fā)對相關(guān)人員的警報消息藐吮。actuator模塊公開一組REST端點溺拱,這些端點可以作為HTTP URL直接訪問,以檢查狀態(tài)谣辞。

問:如何將Spring Boot應(yīng)用程序作為war包部署?
答:Spring Boot WAR部署

問:什么是Docker嗎?如何將Spring引導(dǎo)應(yīng)用程序部署到Docker?
A: Docker是什么
將基于Spring的WAR應(yīng)用程序部署到Docker
將基于Spring的JAR應(yīng)用程序部署到Docker

問:如何禁用執(zhí)行器端點安全在Spring啟動?
答:默認(rèn)情況下迫摔,所有敏感的HTTP端點都是安全的,只有具有ACTUATOR角色的用戶才能訪問它們泥从。安全性是使用標(biāo)準(zhǔn)HttpServletRequest.isUserInRole方法實現(xiàn)的句占。
我們可以使用-禁用安全性
management.security.enabled = false
建議僅當(dāng)在防火墻后訪問ACTUATOR端點時禁用安全性。

問:如何將Spring引導(dǎo)應(yīng)用程序運(yùn)行到自定義端口?
要在自定義端口上運(yùn)行spring引導(dǎo)應(yīng)用程序躯嫉,可以在application.properties中指定端口纱烘。
server.port = 8090

什么是ELK堆棧?如何與Spring Boot一起使用?
答:ELK堆棧由三個開源產(chǎn)品組成——Elasticsearch、Logstash和Kibana from Elastic祈餐。

image

Elasticsearch是一個基于Lucene搜索引擎的NoSQL數(shù)據(jù)庫擂啥。
    Logstash是一個日志管道工具,它接受來自不同來源的輸入帆阳,執(zhí)行不同的轉(zhuǎn)換哺壶,并將數(shù)據(jù)導(dǎo)出到不同的目標(biāo)。它是一個動態(tài)的數(shù)據(jù)收集管道蜒谤,具有可擴(kuò)展的插件生態(tài)系統(tǒng)和強(qiáng)大的彈性搜索協(xié)同作用
    Kibana是一個可視化UI層山宾,工作在Elasticsearch之上。
這三個項目一起用于各種環(huán)境中的日志分析芭逝。因此Logstash收集和解析日志塌碌、彈性搜索索引并存儲這些信息,而Kibana提供了一個UI層旬盯,提供可操作的可見性台妆。
Spring Boot + ELK stack

問:您有使用Spring Boot編寫測試用例嗎?
答:SpringBoot為編寫單元測試用例提供了@SpringBootTest
Spring引導(dǎo)單元測試的簡單示例

問:YAML是什么?
答:YAML是一種人類可讀的數(shù)據(jù)序列化語言翎猛。它通常用于配置文件。
與屬性文件相比接剩,YAML文件的結(jié)構(gòu)更加結(jié)構(gòu)化切厘,如果我們希望在配置文件中添加復(fù)雜的屬性,那么它不會造成太大的混亂懊缺∫吒澹可以看到,YAML具有分層的配置數(shù)據(jù)鹃两。
在Spring引導(dǎo)中使用YAML屬性

問:如何為Spring引導(dǎo)應(yīng)用程序?qū)崿F(xiàn)安全性?

答:為了實現(xiàn)Spring Boot的安全性遗座,我們使用Spring - Boot -starter-security依賴項,必須添加安全配置俊扳。它只需要很少的代碼途蒋。Config類必須擴(kuò)展WebSecurityConfigurerAdapter并覆蓋它的方法。

Spring引導(dǎo)安全性示例和說明

問:您是否集成了Spring Boot和ActiveMQ ?

為了集成Spring Boot和ActiveMQ馋记,我們使用Spring - Boot -starter- ActiveMQ依賴項号坡,它只需要很少的配置,沒有樣板代碼梯醒。

Spring引導(dǎo)ActiveMQ說明

問:您是否集成了Spring Boot和Apache Kafka ?

答:為了集成Spring Boot和Apache Kafka宽堆,我們使用Spring - Kafka依賴項。

Spring Boot + Apache Kafka示例

問:如何使用Spring引導(dǎo)實現(xiàn)分頁和排序?

答:使用Spring Boot實現(xiàn)分頁非常簡單茸习。使用Spring Data-JPA畜隶,這是通過傳遞可分頁的org.springframe .data.domain來實現(xiàn)的〈猓可分頁到存儲庫方法代箭。

Spring引導(dǎo)分頁說明

什么是Swagger?您是否使用Spring Boot實現(xiàn)了它?

答:Swagger被廣泛用于可視化api,Swagger UI為前端開發(fā)人員提供在線沙箱環(huán)境涕刚。在本教程中嗡综,我們將使用Swagger 2規(guī)范的Springfox實現(xiàn)。Swagger是一種工具杜漠、規(guī)范和完整的框架實現(xiàn)极景,用于生成RESTful Web服務(wù)的可視化表示。它允許文檔以與服務(wù)器相同的速度更新驾茴。當(dāng)通過Swagger正確定義時盼樟,使用者可以用最少的實現(xiàn)邏輯理解遠(yuǎn)程服務(wù)并與之交互。因此Swagger消除了調(diào)用服務(wù)時的猜測锈至。

Spring Boot + Swagger2

問:什么是Spring Profiles?如何使用Spring Boot實現(xiàn)它?

答:Spring Profiles允許用戶根據(jù)配置文件(dev, test, prod等)注冊bean晨缴。因此,當(dāng)應(yīng)用程序在開發(fā)中運(yùn)行時峡捡,只能加載某些bean击碗,當(dāng)應(yīng)用程序在生產(chǎn)中運(yùn)行時筑悴,只能加載某些其他bean。假設(shè)我們的需求是Swagger文檔只對QA環(huán)境啟用稍途,對所有其他環(huán)境禁用阁吝。這可以使用配置文件來完成。Spring Boot使得使用配置文件非常容易械拍。

Spring引導(dǎo)+配置文件

什么是Spring Boot Batch?如何使用Spring Boot實現(xiàn)它?

答:Spring Boot Batch提供了處理大量記錄所必需的可重用功能突勇,包括日志/跟蹤、事務(wù)管理坷虑、作業(yè)處理統(tǒng)計信息甲馋、作業(yè)重啟、作業(yè)跳過和資源管理迄损。它還提供了更高級的技術(shù)服務(wù)和特性摔刁,通過優(yōu)化和分區(qū)技術(shù),這些特性將支持極高容量和高性能的批處理作業(yè)海蔽。無論是簡單的還是復(fù)雜的,大容量批處理作業(yè)都可以以高度可伸縮的方式利用該框架來處理大量信息绑谣。

Spring Boot Batch

問:什么是FreeMarker模板?如何使用Spring Boot實現(xiàn)它?

答:FreeMarker是一個基于java的模板引擎党窜,最初專注于使用MVC軟件架構(gòu)生成動態(tài)web頁面。使用Freemarker的主要優(yōu)勢是完全分離了表示層和業(yè)務(wù)層借宵。程序員可以處理應(yīng)用程序代碼幌衣,而設(shè)計人員可以處理html頁面設(shè)計。最后壤玫,使用freemarker豁护,這些可以組合在一起,給出最終的輸出頁面欲间。

Spring Boot + FreeMarker的例子

問:如何使用Spring Boot實現(xiàn)異常處理?

答:Spring提供了一種非常有用的方法楚里,可以使用ControllerAdvice處理異常。我們將實現(xiàn)一個ControlerAdvice類猎贴,它將處理控制器類拋出的所有異常班缎。

Spring引導(dǎo)異常處理

什么是緩存?您在Spring引導(dǎo)中使用過緩存框架嗎?

答:緩存是本地內(nèi)存的一個區(qū)域,它保存了頻繁訪問的數(shù)據(jù)的副本她渴,否則獲取或計算這些數(shù)據(jù)將非常昂貴达址。使用Hazelcast進(jìn)行緩存。

Spring Boot + Hazelcast示例

問:您是否使用Spring Boot公開了SOAP web服務(wù)端點?

是的趁耗。使用Spring Boot公開了要使用的web服務(wù)沉唠。使用契約優(yōu)先的方法從wsdl生成類。

Spring引導(dǎo)+ SOAP Web服務(wù)示例

問:您如何使用Spring Boot執(zhí)行數(shù)據(jù)庫操作?

答:Spring引導(dǎo)教程-Spring Data JPA

Spring引導(dǎo)JDBC示例

問:如何使用Spring上傳文件?

A: Spring Boot +文件上傳的例子

問:如何用Spring Boot實現(xiàn)攔截器?
答:使用Spring MVC HandlerInterceptor與Spring引導(dǎo)

問:如何在Spring Boot下使用schedulers ?
答:Spring引導(dǎo)任務(wù)調(diào)度程序示例

問:您使用過哪些啟動器maven依賴項?
答:使用過不同的starter依賴項苛败,如spring-boot-starter-activemq依賴項满葛、spring-boot-starter-security依賴項径簿、spring-boot-starter-web依賴項。
這有助于減少依賴項的數(shù)量纱扭,并減少版本組合牍帚。
Spring引導(dǎo)安全性示例和說明

什么是CSRF攻擊?如何啟用CSRF對其進(jìn)行保護(hù)?
CSRF代表跨站請求偽造。它是一種攻擊乳蛾,迫使最終用戶在其當(dāng)前已經(jīng)過身份驗證的web應(yīng)用程序上執(zhí)行不需要的操作暗赶。CSRF攻擊專門針對狀態(tài)更改請求,而不是數(shù)據(jù)竊取肃叶,因為攻擊者無法看到對偽造請求的響應(yīng)母剥。
Spring引導(dǎo)安全性—啟用CSRF保護(hù)

問:如何使用Spring引導(dǎo)使用表單登錄身份驗證?
答:Spring引導(dǎo)表單安全登錄Hello World示例

什么是OAuth2?如何使用Spring Boot實現(xiàn)它?
答:Spring Boot + OAuth2實現(xiàn)

問:GZIP是什么?如何使用Spring Boot實現(xiàn)它?
答:gzip是一種文件格式,是一種用于文件壓縮和解壓縮的軟件應(yīng)用程序姐直。
Spring引導(dǎo)+ GZIP壓縮

問:您在Spring引導(dǎo)中使用過集成框架嗎?
答:已將Apache Camel與Spring引導(dǎo)集成潘拨。使用Apache Camel Spring啟動啟動依賴項。

Spring Boot +Apache Camel

問:什么是Apache Freemarker?什么時候使用它而不是JSP?如何與Spring Boot集成?
答:JSP是為網(wǎng)頁量身定做的蹦魔,F(xiàn)reemarker模板是一種更通用的模板語言——它可以用來生成html激率、純文本、電子郵件等勿决。
Spring Boot + FreeMarker的例子

問:你什么時候使用WebSockets?如何使用Spring Boot實現(xiàn)它?
答:WebSocket是一種計算機(jī)通信協(xié)議乒躺,通過單個TCP連接提供全雙工通信通道。

image

WebSocket是雙向的——使用WebSocket客戶端或服務(wù)器都可以發(fā)起發(fā)送消息低缩。
WebSocket是全雙工的——客戶端和服務(wù)器之間的通信是相互獨(dú)立的嘉冒。
單個TCP連接——初始連接使用HTTP,然后將此連接升級為基于套接字的連接咆繁。然后讳推,這個單一連接將用于未來的所有通信
輕- WebSocket消息數(shù)據(jù)交換比http輕得多。
Spring Boot + WebSockets的例子

什么是AOP?如何與Spring Boot一起使用?
答:在軟件開發(fā)過程中玩般,跨越應(yīng)用程序多個點的功能稱為橫切關(guān)注點银觅。這些橫切關(guān)注點不同于應(yīng)用程序的主要業(yè)務(wù)邏輯。因此坏为,將這些橫切關(guān)注點從業(yè)務(wù)邏輯中分離出來是面向方面編程(AOP)的切入點设拟。
Spring Boot + AOP示例

問:什么是Apache Kafka?如何與Spring Boot集成?
答:apache Kafka是一個分布式發(fā)布-訂閱消息傳遞系統(tǒng)。它是一個可伸縮的久脯、容錯的纳胧、發(fā)布-訂閱消息傳遞系統(tǒng),使我們能夠構(gòu)建分布式應(yīng)用程序帘撰。這是一個Apache頂級項目跑慕。Kafka適用于離線和在線的消息消費(fèi)。
Spring Boot + Apache Kafka示例

問:我們?nèi)绾伪O(jiān)視所有Spring Boot微服務(wù)?
答:Spring Boot提供了actuator 端點來監(jiān)控單個微服務(wù)的指標(biāo)。這些端點對于獲取關(guān)于應(yīng)用程序的信息非常有幫助核行,比如應(yīng)用程序是否啟動牢硅,它們的組件(如數(shù)據(jù)庫等)是否正常工作。但是芝雪,使用actuator 接口的一個主要缺點或困難是减余,我們必須逐個命中這些接口,以了解應(yīng)用程序的狀態(tài)或健康狀況惩系。假設(shè)微服務(wù)涉及50個應(yīng)用程序位岔,管理員將不得不命中所有50個應(yīng)用程序的actuator 端點。為了幫助我們處理這種情況堡牡,我們將使用位于https://github.com/codecentric/springing-boot-admin的開源項目抒抬。
它構(gòu)建在Spring Boot Actuator之上,提供了一個web UI晤柄,使我們能夠可視化多個應(yīng)用程序的指標(biāo)擦剑。
Spring Boot Admin

問:您在Spring引導(dǎo)中使用過Spring Cloud組件嗎?
答:使用過Netflix Eureka等Spring Cloud組件進(jìn)行服務(wù)注冊,Ribbon用于負(fù)載平衡芥颈。
Spring Boot + Cloud Components
Spring Cloud interview Questions

問:如何將Spring Boot應(yīng)用程序部署到Pivotal Cloud Foundry(PCF)?
Deploying Spring Boot Application to PCF

問:如何將Spring Boot + MySQL應(yīng)用部署到Pivotal Cloud Foundry(PCF)?
A: Pivotal Cloud Foundry Tutorial - Deploying Spring Boot + MySQL Application to PCF

問:如何將Spring Boot + RabbitMQ應(yīng)用部署到Pivotal Cloud Foundry(PCF)?
A: Pivotal Cloud Foundry Tutorial - Deploying Spring Boot + RabbitMQ Application to PCF

轉(zhuǎn)自:spring boot面試問題集錦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠勒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子爬坑,更是在濱河造成了極大的恐慌捉撮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妇垢,死亡現(xiàn)場離奇詭異,居然都是意外死亡肉康,警方通過查閱死者的電腦和手機(jī)闯估,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吼和,“玉大人涨薪,你說我怎么就攤上這事§排遥” “怎么了刚夺?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長末捣。 經(jīng)常有香客問我侠姑,道長,這世上最難降的妖魔是什么箩做? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任莽红,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘安吁。我一直安慰自己醉蚁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布鬼店。 她就那樣靜靜地躺著网棍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妇智。 梳的紋絲不亂的頭發(fā)上滥玷,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音俘陷,去河邊找鬼罗捎。 笑死,一個胖子當(dāng)著我的面吹牛拉盾,可吹牛的內(nèi)容都是我干的桨菜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捉偏,長吁一口氣:“原來是場噩夢啊……” “哼倒得!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夭禽,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤霞掺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后讹躯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菩彬,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年潮梯,在試婚紗的時候發(fā)現(xiàn)自己被綠了骗灶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秉馏,死狀恐怖耙旦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萝究,我是刑警寧澤免都,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站帆竹,受9級特大地震影響绕娘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜栽连,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一业舍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦舷暮、人聲如沸态罪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽复颈。三九已至,卻和暖如春沥割,著一層夾襖步出監(jiān)牢的瞬間耗啦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工机杜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留帜讲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓椒拗,卻偏偏與公主長得像似将,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚀苛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355