欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

2020最新版Tomcat面試題小結(jié)

  發(fā)布時(shí)間:2020-05-11 16:22:04   作者:ThinkWon   我要評(píng)論
這篇文章主要介紹了2020最新版Tomcat面試題小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Tomcat是什么?

Tomcat 服務(wù)器Apache軟件基金會(huì)項(xiàng)目中的一個(gè)核心項(xiàng)目,是一個(gè)免費(fèi)的開(kāi)放源代碼的Web 應(yīng)用服務(wù)器,屬于輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP 程序的首選。

Tomcat的缺省端口是多少,怎么修改

  • 找到Tomcat目錄下的conf文件夾
  • 進(jìn)入conf文件夾里面找到server.xml文件
  • 打開(kāi)server.xml文件
  • 在server.xml文件里面找到下列信息
  • 把Connector標(biāo)簽的8080端口改成你想要的端口
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

tomcat 有哪幾種Connector 運(yùn)行模式(優(yōu)化)?

下面,我們先大致了解Tomcat Connector的三種運(yùn)行模式。

  • BIO:同步并阻塞 一個(gè)線程處理一個(gè)請(qǐng)求。缺點(diǎn):并發(fā)量高時(shí),線程數(shù)較多,浪費(fèi)資源。Tomcat7或以下,在Linux系統(tǒng)中默認(rèn)使用這種方式。

​ 配制項(xiàng):protocol=”HTTP/1.1”

  • NIO:同步非阻塞IO

利用Java的異步IO處理,可以通過(guò)少量的線程處理大量的請(qǐng)求,可以復(fù)用同一個(gè)線程處理多個(gè)connection(多路復(fù)用)。

Tomcat8在Linux系統(tǒng)中默認(rèn)使用這種方式。

Tomcat7必須修改Connector配置來(lái)啟動(dòng)。

配制項(xiàng):protocol=”org.apache.coyote.http11.Http11NioProtocol”

備注:我們常用的Jetty,Mina,ZooKeeper等都是基于java nio實(shí)現(xiàn).

  • APR:即Apache Portable Runtime,從操作系統(tǒng)層面解決io阻塞問(wèn)題。**AIO方式,**異步非阻塞IO(Java NIO2又叫AIO) 主要與NIO的區(qū)別主要是操作系統(tǒng)的底層區(qū)別.可以做個(gè)比喻:比作快遞,NIO就是網(wǎng)購(gòu)后要自己到官網(wǎng)查下快遞是否已經(jīng)到了(可能是多次),然后自己去取快遞;AIO就是快遞員送貨上門了(不用關(guān)注快遞進(jìn)度)。

配制項(xiàng):protocol=”org.apache.coyote.http11.Http11AprProtocol”

備注:需在本地服務(wù)器安裝APR庫(kù)。Tomcat7或Tomcat8在Win7或以上的系統(tǒng)中啟動(dòng)默認(rèn)使用這種方式。Linux如果安裝了apr和native,Tomcat直接啟動(dòng)就支持apr。

Tomcat有幾種部署方式?

在Tomcat中部署Web應(yīng)用的方式主要有如下幾種:

利用Tomcat的自動(dòng)部署。

把web應(yīng)用拷貝到webapps目錄。Tomcat在啟動(dòng)時(shí)會(huì)加載目錄下的應(yīng)用,并將編譯后的結(jié)果放入work目錄下。

使用Manager App控制臺(tái)部署。

在tomcat主頁(yè)點(diǎn)擊“Manager App” 進(jìn)入應(yīng)用管理控制臺(tái),可以指定一個(gè)web應(yīng)用的路徑或war文件。

修改conf/server.xml文件部署。

修改conf/server.xml文件,增加Context節(jié)點(diǎn)可以部署應(yīng)用。

增加自定義的Web部署文件。

在conf/Catalina/localhost/ 路徑下增加 xyz.xml文件,內(nèi)容是Context節(jié)點(diǎn),可以部署應(yīng)用。

tomcat容器是如何創(chuàng)建servlet類實(shí)例?用到了什么原理?

  • 當(dāng)容器啟動(dòng)時(shí),會(huì)讀取在webapps目錄下所有的web應(yīng)用中的web.xml文件,然后對(duì) xml文件進(jìn)行解析,并讀取servlet注冊(cè)信息。然后,將每個(gè)應(yīng)用中注冊(cè)的servlet類都進(jìn)行加載,并通過(guò) 反射的方式實(shí)例化。(有時(shí)候也是在第一次請(qǐng)求時(shí)實(shí)例化)
  • 在servlet注冊(cè)時(shí)加上1如果為正數(shù),則在一開(kāi)始就實(shí)例化,如果不寫(xiě)或?yàn)樨?fù)數(shù),則第一次請(qǐng)求實(shí)例化。

Tomcat工作模式

Tomcat作為servlet容器,有三種工作模式:

1、獨(dú)立的servlet容器,servlet容器是web服務(wù)器的一部分;

2、進(jìn)程內(nèi)的servlet容器,servlet容器是作為web服務(wù)器的插件和java容器的實(shí)現(xiàn),web服務(wù)器插件在內(nèi)部地址空間打開(kāi)一個(gè)jvm使得java容器在內(nèi)部得以運(yùn)行。反應(yīng)速度快但伸縮性不足;

3、進(jìn)程外的servlet容器,servlet容器運(yùn)行于web服務(wù)器之外的地址空間,并作為web服務(wù)器的插件和java容器實(shí)現(xiàn)的結(jié)合。反應(yīng)時(shí)間不如進(jìn)程內(nèi)但伸縮性和穩(wěn)定性比進(jìn)程內(nèi)優(yōu);

進(jìn)入Tomcat的請(qǐng)求可以根據(jù)Tomcat的工作模式分為如下兩類:

  • Tomcat作為應(yīng)用程序服務(wù)器:請(qǐng)求來(lái)自于前端的web服務(wù)器,這可能是Apache, IIS, Nginx等;
  • Tomcat作為獨(dú)立服務(wù)器:請(qǐng)求來(lái)自于web瀏覽器;

面試時(shí)問(wèn)到Tomcat相關(guān)問(wèn)題的幾率并不高,正式因?yàn)槿绱?,很多人忽略了?duì)Tomcat相關(guān)技能的掌握,下面這一篇文章整理了Tomcat相關(guān)的系統(tǒng)架構(gòu),介紹了Server、Service、Connector、Container之間的關(guān)系,各個(gè)模塊的功能,可以說(shuō)把這幾個(gè)掌握住了,Tomcat相關(guān)的面試題你就不會(huì)有任何問(wèn)題了!另外,在面試的時(shí)候你還要有意識(shí)無(wú)意識(shí)的往Tomcat這個(gè)地方引,就比如說(shuō)常見(jiàn)的Spring MVC的執(zhí)行流程,一個(gè)URL的完整調(diào)用鏈路,這些相關(guān)的題目你是可以往Tomcat處理請(qǐng)求的這個(gè)過(guò)程去說(shuō)的!掌握了Tomcat這些技能,面試官一定會(huì)佩服你的!

學(xué)了本章之后你應(yīng)該明白的是:

  • Server、Service、Connector、Container四大組件之間的關(guān)系和聯(lián)系,以及他們的主要功能點(diǎn);
  • Tomcat執(zhí)行的整體架構(gòu),請(qǐng)求是如何被一步步處理的;
  • Engine、Host、Context、Wrapper相關(guān)的概念關(guān)系;
  • Container是如何處理請(qǐng)求的;
  • Tomcat用到的相關(guān)設(shè)計(jì)模式;

Tomcat頂層架構(gòu)

俗話說(shuō),站在巨人的肩膀上看世界,一般學(xué)習(xí)的時(shí)候也是先總覽一下整體,然后逐個(gè)部分個(gè)個(gè)擊破,最后形成思路,了解具體細(xì)節(jié),Tomcat的結(jié)構(gòu)很復(fù)雜,但是 Tomcat 非常的模塊化,找到了 Tomcat 最核心的模塊,問(wèn)題才可以游刃而解,了解了 Tomcat 的整體架構(gòu)對(duì)以后深入了解 Tomcat 來(lái)說(shuō)至關(guān)重要!

先上一張Tomcat的頂層結(jié)構(gòu)圖(圖A),如下:

Tomcat中最頂層的容器是Server,代表著整個(gè)服務(wù)器,從上圖中可以看出,一個(gè)Server可以包含至少一個(gè)Service,即可以包含多個(gè)Service,用于具體提供服務(wù)。

Service主要包含兩個(gè)部分:Connector和Container。從上圖中可以看出 Tomcat 的心臟就是這兩個(gè)組件,他們的作用如下:

  • Connector用于處理連接相關(guān)的事情,并提供Socket與Request請(qǐng)求和Response響應(yīng)相關(guān)的轉(zhuǎn)化;
  • Container用于封裝和管理Servlet,以及具體處理Request請(qǐng)求;

一個(gè)Tomcat中只有一個(gè)Server,一個(gè)Server可以包含多個(gè)Service,一個(gè)Service只有一個(gè)Container,但是可以有多個(gè)Connectors,這是因?yàn)橐粋€(gè)服務(wù)可以有多個(gè)連接,如同時(shí)提供Http和Https鏈接,也可以提供向相同協(xié)議不同端口的連接,示意圖如下(Engine、Host、Context下面會(huì)說(shuō)到):

多個(gè) Connector 和一個(gè) Container 就形成了一個(gè) Service,有了 Service 就可以對(duì)外提供服務(wù)了,但是 Service 還要一個(gè)生存的環(huán)境,必須要有人能夠給她生命、掌握其生死大權(quán),那就非 Server 莫屬了!所以整個(gè) Tomcat 的生命周期由 Server 控制。

另外,上述的包含關(guān)系或者說(shuō)是父子關(guān)系,都可以在tomcat的conf目錄下的server.xml配置文件中看出,下圖是刪除了注釋內(nèi)容之后的一個(gè)完整的server.xml配置文件(Tomcat版本為8.0)

詳細(xì)的配置文件內(nèi)容可以到Tomcat官網(wǎng)查看:Tomcat配置文件

上邊的配置文件,還可以通過(guò)下邊的一張結(jié)構(gòu)圖更清楚的理解:

Server標(biāo)簽設(shè)置的端口號(hào)為8005,shutdown=”SHUTDOWN” ,表示在8005端口監(jiān)聽(tīng)“SHUTDOWN”命令,如果接收到了就會(huì)關(guān)閉Tomcat。一個(gè)Server有一個(gè)Service,當(dāng)然還可以進(jìn)行配置,一個(gè)Service有多個(gè)Connector,Service左邊的內(nèi)容都屬于Container的,Service下邊是Connector。

Tomcat頂層架構(gòu)小結(jié)

  1. Tomcat中只有一個(gè)Server,一個(gè)Server可以有多個(gè)Service,一個(gè)Service可以有多個(gè)Connector和一個(gè)Container;
  2. Server掌管著整個(gè)Tomcat的生死大權(quán);
  3. Service 是對(duì)外提供服務(wù)的;
  4. Connector用于接受請(qǐng)求并將請(qǐng)求封裝成Request和Response來(lái)具體處理;
  5. Container用于封裝和管理Servlet,以及具體處理request請(qǐng)求;

知道了整個(gè)Tomcat頂層的分層架構(gòu)和各個(gè)組件之間的關(guān)系以及作用,對(duì)于絕大多數(shù)的開(kāi)發(fā)人員來(lái)說(shuō)Server和Service對(duì)我們來(lái)說(shuō)確實(shí)很遠(yuǎn),而我們開(kāi)發(fā)中絕大部分進(jìn)行配置的內(nèi)容是屬于Connector和Container的,所以接下來(lái)介紹一下Connector和Container。

Connector和Container的微妙關(guān)系

由上述內(nèi)容我們大致可以知道一個(gè)請(qǐng)求發(fā)送到Tomcat之后,首先經(jīng)過(guò)Service然后會(huì)交給我們的Connector,Connector用于接收請(qǐng)求并將接收的請(qǐng)求封裝為Request和Response來(lái)具體處理,Request和Response封裝完之后再交由Container進(jìn)行處理,Container處理完請(qǐng)求之后再返回給Connector,最后在由Connector通過(guò)Socket將處理的結(jié)果返回給客戶端,這樣整個(gè)請(qǐng)求的就處理完了!

Connector最底層使用的是Socket來(lái)進(jìn)行連接的,Request和Response是按照HTTP協(xié)議來(lái)封裝的,所以Connector同時(shí)需要實(shí)現(xiàn)TCP/IP協(xié)議和HTTP協(xié)議!

Tomcat既然需要處理請(qǐng)求,那么肯定需要先接收到這個(gè)請(qǐng)求,接收請(qǐng)求這個(gè)東西我們首先就需要看一下Connector!

Connector架構(gòu)分析

Connector用于接受請(qǐng)求并將請(qǐng)求封裝成Request和Response,然后交給Container進(jìn)行處理,Container處理完之后在交給Connector返回給客戶端。

因此,我們可以把Connector分為四個(gè)方面進(jìn)行理解:

  1. Connector如何接受請(qǐng)求的?
  2. 如何將請(qǐng)求封裝成Request和Response的?
  3. 封裝完之后的Request和Response如何交給Container進(jìn)行處理的?
  4. Container處理完之后如何交給Connector并返回給客戶端的?

首先看一下Connector的結(jié)構(gòu)圖(圖B),如下所示:

Connector就是使用ProtocolHandler來(lái)處理請(qǐng)求的,不同的ProtocolHandler代表不同的連接類型,比如:Http11Protocol使用的是普通Socket來(lái)連接的,Http11NioProtocol使用的是NioSocket來(lái)連接的。

其中ProtocolHandler由包含了三個(gè)部件:Endpoint、Processor、Adapter。

  1. Endpoint用來(lái)處理底層Socket的網(wǎng)絡(luò)連接,Processor用于將Endpoint接收到的Socket封裝成Request,Adapter用于將Request交給Container進(jìn)行具體的處理。
  2. Endpoint由于是處理底層的Socket網(wǎng)絡(luò)連接,因此Endpoint是用來(lái)實(shí)現(xiàn)TCP/IP協(xié)議的,而Processor用來(lái)實(shí)現(xiàn)HTTP協(xié)議的,Adapter將請(qǐng)求適配到Servlet容器進(jìn)行具體的處理。
  3. Endpoint的抽象實(shí)現(xiàn)AbstractEndpoint里面定義的Acceptor和AsyncTimeout兩個(gè)內(nèi)部類和一個(gè)Handler接口。Acceptor用于監(jiān)聽(tīng)請(qǐng)求,AsyncTimeout用于檢查異步Request的超時(shí),Handler用于處理接收到的Socket,在內(nèi)部調(diào)用Processor進(jìn)行處理。

至此,我們應(yīng)該很輕松的回答1,2,3的問(wèn)題了,但是4還是不知道,那么我們就來(lái)看一下Container是如何進(jìn)行處理的以及處理完之后是如何將處理完的結(jié)果返回給Connector的?

Container架構(gòu)分析

Container用于封裝和管理Servlet,以及具體處理Request請(qǐng)求,在Container內(nèi)部包含了4個(gè)子容器,結(jié)構(gòu)圖如下(圖C):

4個(gè)子容器的作用分別是:

  • Engine:引擎,用來(lái)管理多個(gè)站點(diǎn),一個(gè)Service最多只能有一個(gè)Engine;
  • Host:代表一個(gè)站點(diǎn),也可以叫虛擬主機(jī),通過(guò)配置Host就可以添加站點(diǎn);
  • Context:代表一個(gè)應(yīng)用程序,對(duì)應(yīng)著平時(shí)開(kāi)發(fā)的一套程序,或者一個(gè)WEB-INF目錄以及下面的web.xml文件;
  • Wrapper:每一Wrapper封裝著一個(gè)Servlet;

下面找一個(gè)Tomcat的文件目錄對(duì)照一下,如下圖所示:

Context和Host的區(qū)別是Context表示一個(gè)應(yīng)用,我們的Tomcat中默認(rèn)的配置下webapps下的每一個(gè)文件夾目錄都是一個(gè)Context,其中ROOT目錄中存放著主應(yīng)用,其他目錄存放著子應(yīng)用,而整個(gè)webapps就是一個(gè)Host站點(diǎn)。

我們?cè)L問(wèn)應(yīng)用Context的時(shí)候,如果是ROOT下的則直接使用域名就可以訪問(wèn),例如:www.baidu.com,如果是Host(webapps)下的其他應(yīng)用,則可以使用www.baidu.com/docs進(jìn)行訪問(wèn),當(dāng)然默認(rèn)指定的根應(yīng)用(ROOT)是可以進(jìn)行設(shè)定的,只不過(guò)Host站點(diǎn)下默認(rèn)的主應(yīng)用是ROOT目錄下的。

看到這里我們知道Container是什么,但是還是不知道Container是如何進(jìn)行請(qǐng)求處理的以及處理完之后是如何將處理完的結(jié)果返回給Connector的?別急!下邊就開(kāi)始探討一下Container是如何進(jìn)行處理的!

Container如何處理請(qǐng)求的

Container處理請(qǐng)求是使用Pipeline-Valve管道來(lái)處理的?。╒alve是閥門之意)

Pipeline-Valve是責(zé)任鏈模式,責(zé)任鏈模式是指在一個(gè)請(qǐng)求處理的過(guò)程中有很多處理者依次對(duì)請(qǐng)求進(jìn)行處理,每個(gè)處理者負(fù)責(zé)做自己相應(yīng)的處理,處理完之后將處理后的結(jié)果返回,再讓下一個(gè)處理者繼續(xù)處理。

但是!Pipeline-Valve使用的責(zé)任鏈模式和普通的責(zé)任鏈模式有些不同!區(qū)別主要有以下兩點(diǎn):

  • 每個(gè)Pipeline都有特定的Valve,而且是在管道的最后一個(gè)執(zhí)行,這個(gè)Valve叫做BaseValve,BaseValve是不可刪除的;
  • 在上層容器的管道的BaseValve中會(huì)調(diào)用下層容器的管道。

我們知道Container包含四個(gè)子容器,而這四個(gè)子容器對(duì)應(yīng)的BaseValve分別在:StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve。

Pipeline的處理流程圖如下(圖D):

Connector在接收到請(qǐng)求后會(huì)首先調(diào)用最頂層容器的Pipeline來(lái)處理,這里的最頂層容器的Pipeline就是EnginePipeline(Engine的管道);

在Engine的管道中依次會(huì)執(zhí)行EngineValve1、EngineValve2等等,最后會(huì)執(zhí)行StandardEngineValve,在StandardEngineValve中會(huì)調(diào)用Host管道,然后再依次執(zhí)行Host的HostValve1、HostValve2等,最后在執(zhí)行StandardHostValve,然后再依次調(diào)用Context的管道和Wrapper的管道,最后執(zhí)行到StandardWrapperValve。

當(dāng)執(zhí)行到StandardWrapperValve的時(shí)候,會(huì)在StandardWrapperValve中創(chuàng)建FilterChain,并調(diào)用其doFilter方法來(lái)處理請(qǐng)求,這個(gè)FilterChain包含著我們配置的與請(qǐng)求相匹配的Filter和Servlet,其doFilter方法會(huì)依次調(diào)用所有的Filter的doFilter方法和Servlet的service方法,這樣請(qǐng)求就得到了處理!

當(dāng)所有的Pipeline-Valve都執(zhí)行完之后,并且處理完了具體的請(qǐng)求,這個(gè)時(shí)候就可以將返回的結(jié)果交給Connector了,Connector在通過(guò)Socket的方式將結(jié)果返回給客戶端。

總結(jié)

至此,我們已經(jīng)對(duì)Tomcat的整體架構(gòu)有了大致的了解,從圖A、B、C、D可以看出來(lái)每一個(gè)組件的基本要素和作用。我們?cè)谀X海里應(yīng)該有一個(gè)大概的輪廓了!如果你面試的時(shí)候,讓你簡(jiǎn)單的聊一下Tomcat,上面的內(nèi)容你能脫口而出嗎?當(dāng)你能夠脫口而出的時(shí)候,面試官一定會(huì)對(duì)你刮目相看的!

到此這篇關(guān)于2020最新版Tomcat面試題小結(jié)的文章就介紹到這了,更多相關(guān)Tomcat面試題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • 程序員面試的幾個(gè)小技巧

    這篇文章主要介紹了程序員面試的幾個(gè)小技巧,在平時(shí)面試的時(shí)候,除了實(shí)打?qū)嵉募寄苓€需要更多的技巧,雙管齊下才能贏得更大的勝算,技能方面就不多說(shuō)了,下面來(lái)分享幾個(gè)面試
    2023-04-23
  • AQS底層原理連環(huán)相扣系列鎖面試題分析

    面試中,問(wèn)鎖主要是兩方面:鎖的日常使用場(chǎng)景 + 鎖原理,鎖的日常使用場(chǎng)景主要考察對(duì)鎖 API 的使用熟練度,看看你是否真的使用過(guò)這些 API,而不是紙上談兵,鎖原理主要就是
    2022-05-19
  • Mybatis常見(jiàn)面試題詳細(xì)總結(jié)

    這篇文章主要介紹了Mybatis常見(jiàn)面試題詳細(xì)總結(jié),通過(guò)總結(jié)列舉大量的mybatis面試常見(jiàn)題目供給大家參考,希望對(duì)大家有所幫助
    2021-08-24
  • 2020Java后端開(kāi)發(fā)面試題總結(jié)(春招+秋招+社招)

    這篇文章主要介紹了2020Java后端開(kāi)發(fā)面試題總結(jié)(春招+秋招+社招),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-18
  • MySQL數(shù)據(jù)庫(kù)選擇題小結(jié)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)選擇題小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-07
  • 30道有趣的JVM面試題(小結(jié))

    這篇文章主要介紹了30道有趣的JVM面試題(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-26
  • Python面試題爬蟲(chóng)篇小結(jié)(附答案)

    這篇文章主要介紹了Python面試題爬蟲(chóng)篇小結(jié)(附答案),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-28
  • 還不理解B樹(shù)和B+樹(shù),那就看看這篇文章吧

    這篇文章主要介紹了還不理解B樹(shù)和B+樹(shù),那就看看這篇文章吧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一
    2020-09-10
  • Java面試通關(guān)要點(diǎn)匯總(備戰(zhàn)秋招)

    這篇文章主要介紹了Java面試通關(guān)要點(diǎn)匯總(備戰(zhàn)秋招),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-08
  • 10道JVM常見(jiàn)面試題解析(附答案)

    這篇文章主要介紹了10道JVM常見(jiàn)面試題解析(附答案),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)
    2020-09-04

最新評(píng)論