web核心面试题

阅读: 评论:0

web核心面试题

web核心面试题

web核心阶段的面试总结

重点内容

  • servlert生命周期
  • 转发和重定向
  • jsp四大作用域
  • 对mvc的理解

1.json 数据的格式有哪些

* 对象类型 {name:value,name:value}

* 数组类型

​ [

​ {name:value,name:value},

​ {name:value,name:value},

​ {name:value,name:value}

​ ]

* 复杂对象

​ {

​ name:value,

​ array:[{name:value},{},{}]

​ user:{name:value}

​ }

扩展问题 java和json的如何相互转化?

  1. 需要准备解析器

    ​ Jackson:开源免费的json转换工具,springmvc转换默认使用jackson

  2. 导入jar包

    将java对象转为json字符串 :

    ​ a.创建核心转换对象

    ObjectMapper om = new ObjectMapper();

    ​ b.调用核心转换对象writeValueAsString方法,参数可以传user对象,数组,map集合,方法返回json字符串

    String json = om.writeValueAsString(user);

    将json字符串转为java对象 :

    ​ a. 创建核心转换对象

    ObjectMapper om = new ObjectMapper();

    ​ b. 调用核心转换对象readValue方法,第一个参数传json字符串,第二个参数传user对象或数组或map集合对应的.class文件,返回对应的user对象或数组或map集合

    User user = om.readValue(json, User.class);

    List list = om.readValue(json, List.class);

    Map map = om.readValue(json, Map.class);

2.ajax 书写方式及内部主要参数都有哪些

Ajax技术通过在后台与服务器进行少量数据交换可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

语法一:$.ajax({name:value, name:value, …})

语法二:$.get(URL, data, function(resp, status_code){})

    URL必需参数;

    data可选参数,data={key:value…}, 会以?key=value&key=value…的方式自动添加到URL后面  

    function(resp, status_code) 可选参数,是请求成功后所执行的函数,resp是后台返回的数据; states_code是自动 生成的响应状态码,可缺省

语法三:$.post(URL, data, function(resp, states_code){})

    URL必选参数;

    data 可选参数 连同请求发送的数据;

    function(resp, status_code) 可选参数,是请求成功后所执行的函数,resp是后台返回的数据; states_code是自动 生成的响应状态码,可缺省

主要参数:

type:请求类型(方式)

​ 记住二种:get | post

​ url:请求地址

​ data:发送请求时,携带参数

​ 如果是get方式,在地址中拼接

​ 如果post方式,在请求体当中拼接

​ 例如:username=jack&password=123&age=18

​ success:请求成功,服务器返回结果,帮你调用此函数

​ resp:返回的数据变量

补充参数

​ error:请求失败时,帮你调用次函数

​ dataType:预期服务器返回的数据类型,一般不用写(由服务器来指向)

​ 常用:text/html,application/json

async:是否异步

​ true:异步提交

​ false:同步提交

async默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。

扩展问题 同步和异步的差别 以及 ajax的优缺点?

同步请求和异步请求的差别

1)什么是同步请求:(false)同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,前一个人办理完自己的事务,下一个人才能接着办。也就是说,当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面处于一个假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面解除假死状态。

2)什么是异步请求:(true) 异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。

ajax的优缺点?

优点:减轻服务器的负担,按需取数据,最大程度的减少冗余请求,局部刷新页面,减少用户心理和实际的等待时间,带来更好的用户体验。

缺点:ajax大量的使用了javascript和ajax引擎,这些取决于浏览器的支持,在编写的时候考虑对浏览器的兼容性。AJAX只是局部刷新,所以页面的后退按钮是没有用的。

3.form表单作用和get|post提交区别

form表单在网页中主要负责数据采集功能。

一个表单有三个基本组成部分:

​ 表单标签:这里面包含了处理表单数据所用CGI程序的url以及数据提交到服务器的方法。

​ 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。

​ 表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

from表单常用属性:

​ action:表单的提交地址,暂时使用#代替(#:表示当前页面)

​ method:表单的提交方式,有二种:get(默认值) | post

区别1:

get 重点在从服务器上获取资源,post 重点在向服务器发送数据;

区别2:

get 传输数据是通过URL 请求,以field(字段)= value 的形式,

置于URL 后,并用”?”连接,多个请求数据间用”&”连接,如

127.0.0.1/Test/login.action?name=admin&password=admin,这个

过程用户是可见的;

post 传输数据通过Http 的post 机制,将字段与对应值封存在请求实体中

发送给服务器,这个过程对用户是不可见的;

区别3:

Get 传输的数据量小,因为受URL 长度限制,但效率较高

Post 可以传输大量数据,所以上传文件时只能用Post 方式;

区别4:

Get 是不安全的,因为URL 是可见的,可能会泄露私密信息,如密码等;

Post 较get 安全性较高,Post的所有操作对用户来说都是不可见的;

区别5:

get 方式只能支持ASCII 字符,向服务器传的中文字符可能会乱码。

post 支持标准字符集,可以正确传递中文字符。

区别6:

GET产生一个TCP数据包,对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

POST产生两个TCP数据包,对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据),并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

4.servlet 的生命周期及常用方法?

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

(1)加载:Servlet容器(Tomcat)通过类加载器加载servlet文件(.class)

(2)创建:通过调用servlet构造函数创建一个servlet对象

(3)初始化:调用init方法初始化

(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求

(5)卸载:调用destroy方法让servlet自己释放其占用的资源

servlet是由Servlet容器负责加载Servlet类,创建Servlet对象并实例化,然后调用Servlet的init方法,进行初始化,之后调用Service方法。实例化和初始化不同。先实例化,再初始化。

1)init()方法

在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet 时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入 Servlet。无论有多少客户机访问Servlet,都不会重复执行init();

2)service()方法

它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的 Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest) 对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存 在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

3)destroy()方法

仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的 delete方法。一个Servlet在运行service()方法时可能会产生其他的线程,因 此需要确认在调用destroy()方法时,这些线程已经终止或完成。

Servlet是单例设计模式,不能使用成员变量,不然容易造成线程安全问题

5.在 HTTP 请求中,什么情况下我们会选择 post方式而非 get

一、

HTTP标准包含这两种方法是为了达到不同的目的。POST用于创建资源,资源的内容会被编入HTTP请示的内容中。例如,处理订货表单、在数据库中加入新数据行等。

当请求无副作用时(如进行搜索),便可使用GET方法;当请求有副作用时(如添加数据行),则用POST方法。一个比较实际的问题是:GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制。

若符合下列任一情况,则用POST方法:

* 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。

* 若使用GET方法,则表单上收集的数据可能让URL过长。

* 要传送的数据不是采用7位的ASCII编码。

若符合下列任一情况,则用GET方法:

* 请求是为了查找资源,HTML表单数据仅用来帮助搜索。

* 请求结果无持续性的副作用。

* 收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符。

二、

如下情况使用GET方法:客户端与服务端的交互像是一个提问(如查询操作、搜索操作、读操作)

如下情况使用POST方法:

​ 1.交互是一个命令或订单(order),比提问包含更多信息

​ 2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务

​ 3.用户需要对交互产生的结果负责

听起来稍微明白了一点,接着来。

根据HTTP协议规定,GET方法可以携带交互需要的所有数据,因此你会看到搜索百度或谷歌的时候,点击搜索形成的URL包含了你刚才的搜索关键字,没有安全需求的请求把信息放URL里没关系,但是你访问银行网站的时候,不希望把账户、密码这些放在URL里被人拦截是吧,所以HTTP设计了POST请求,他可以把请求信息放在HTTP请求里,具体格式这里不细说了,这样你就不能简单的从URL里找到账户、密码了。

讲完这些,是不是比较清楚了呢。

文章还例举了几个曾经的HTTP请求限制。

1.URI不能超过256个字符。这个限制在有些服务器里是存在的,有的服务器为了网络安全,为了防止拒绝式攻击会把URL字符限制在4000字符

2.你提交了GET请求,又马上按了backspace键,会导致get方法被重新执行

3.你在一个页面使用了安全协议,跳转到了另一个使用不安全协议的页面时,会导致安全数据泄漏给第二个页面。

1、什么情况下使用post请求

大家都知道使用post请求是会在浏览器上隐藏參数部分的,全部我们在安全要求非常严格的部分都会使用到POST请求。如用户登录。数据增上改等等。都会把參数隐藏起来,这样就不会通过你的请求暴露你的參数格式。

比方:del?id=2,别人就能够用del?id=3来删除你其它数据。

而且在向server传递大数据的时候。使用POST才是最好的方式,get是有限制的。

2、什么情况下使用get方式呢

get方式才用在前台页面展示,比方分页、内容业等,这样做的优点是get方式本身的效率高,而且在分享页面中页面是永久性的连接,可用来非常好的传播。POST中链接地址是不变化的。

6.常见的 http 返回状态码?

200 OK

请求正常处理完毕

204 No Content

请求成功处理,没有实体的主体返回

206 Partial Content

GET范围请求已成功处理

301 Moved Permanently

永久重定向,资源已永久分配新URI

302 Found

临时重定向,资源已临时分配新URI

303 See Other

临时重定向,期望使用GET定向获取

304 Not Modified

发送的附带条件请求未满足

307 Temporary Redirect

临时重定向,POST不会变成GET

400 Bad Request

请求报文语法错误或参数错误

401 Unauthorized

需要通过HTTP认证,或认证失败

403 Forbidden

请求资源被拒绝

404 Not Found

无法找到请求资源(服务器无理由拒绝)

405 Not Found

方法找不到

500 Internal Server Error

服务器故障或Web应用故障

503 Service Unavailable

服务器超负载或停机维护

7.TCP 和 UDP 区别,你对 HTTP 协议的理解?

TCP协议提供安全可靠的网络传输服务,它是一种面向连接的服务。类似于打电话,必须先拨号, 双方建立一个传递信息的通道传输。

而UDP协议是一种数据报协议,它传输的数据是分组报文,它是无连接的,不需要和目标通信方建立连接,类似于写信,所以它的传输不保证安全可靠。但适合大数据量的传输。

Http协议是超文本传输协议,是一种相对于TCP来说更细致的协议,TCP以及UDP协议规范的是网络设备之间的通信规范,HTTP是在TCP协议的基础上针对用户服务的协议,用户服务具体体现在应用程序之间的交互,比如我们的javaweb中客户端服务端体系就要用http协议来规范通信。

传输效率的区别:

TCP传输效率相对较低

UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。

8.cookie和session的作用、区别、应用范围

作用:

cookie作用:在一次会话的多次请求之间共享数据,将数据保存到客户端(浏览器)

session作用:在一次会话的多次请求之间共享数据,将数据保存到服务器端

区别:

1)cookie数据存放在客户的浏览器上,session数据放在服务器上。

2)cookie并不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5)可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

6)session会在浏览器关闭或者一段时间内销毁而cookie将持久化的存放在客户端

一般情况下,session生成的jsessionid保存在cookie中。

应用范围

cookie应用场景:①判断用户是否登录过网站; ②用来记录购物车或者记录用户使用偏好来制定推送;

session应用场景:①登录验证信息

cookie和session的选择

  1. cookie:将数据保存在浏览器端,数据相对不安全,而且数据大小是有限制的,建议不太敏感的数据使用它
  2. session:将数据保存在服务器端,数据相对安全,数据的大小要比cookie中数据灵活很多,但是会占用服务器内存,建议敏感且小量数据使用它

9.转发和重定向区别?

  1. 哪个对象

转发(request对象的方法)

重定向(response对象的方法)

response.sendRedirect(“/day07-response/BServlet”);

  1. 几次请求

转发

地址栏: 没有改变

浏览器: 发了一次请求

服务器: 只有一对请求和响应对象

发生的位置: 服务器内部

重定向

地址栏: 发生了改变

浏览器: 发了两次请求

服务器: 有两对请求和响应对象

发生的位置: 浏览器外部

10.jsp和servlet区别?

Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容。JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。

Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然这个说法是很片面且不够准确的。JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)。

你可以将 JSP 当做一个可扩充的 HTML 来对待。

虽然在本质上 JSP 文件会被服务器自动翻译为相应的 Servlet 来执行。

可以说 Servlet 是面向 Java 程序员而 JSP 是面向 HTML 程序员的,除此之外两者功能完全等价

11.xml 的解析方式有哪些(复习)?

  1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象
    1. 优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
    2. 缺点:XML文档过大,可能出现内存溢出
  2. SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都触发对应的事件。(了解)
    1. 优点:处理速度快,可以处理大文件
    2. 缺点:只能读,逐行后将释放资源,解析操作繁琐。
  3. PULL:Android内置的XML解析方式,类似SAX。(了解)

12.JSP 四大域对象作用范围?

JSP四大作用域分别为:page, request ,session, application 。

第一个作用域是page,他只在当前页面有效,也就是用户请求的页面有效

第二个作用域是request,他在当前请求中有效

第三个作用域是session,他在当前会话中有效

第四个作用域是application,他在所有的应用程序中都有效

page,他只在当前页面有效,也就是用户请求的页面有效,当当前页面关闭或转到其他页面时,page对象将在响应回馈给客户端后释放。

request可以通过setAttribute()方法实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转,需要注意的是request是转发不是重定向,转发相对于浏览器来说是透明的,也就是无论页面如何跳转,地址栏上显示的依旧是最初的地址。

session,他在当前回话中有效。当一个台电脑上的同一浏览器对服务器进行多次

访问时,在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求即可认为会话开始,但是会话结束的时间是不确定的,因为在浏览器关闭时并不会通知服务器,一般Tomcat设置的默认时间为120分钟,也可以通过 setMaxInactiveInterval(int)方法进行设置,或是通过invalidate()方法强制结束当前 会话。

application,他在所有的应用程序中都有效,也就是当服务器开始到服务器结束这段时间,application作用域中存储的数据都是有效的,同样可以通过setAttribute赋值和getAttribute取值。

13.过滤器作用和应用场景?

过滤器作用:

1)公共代码的提取

2)可以对request和response中的方法进行增强(装饰者模式/动态代理)

3)进行权限控制

应用场景:

  1. 通过过滤器统一处理中文乱码
  2. 非法字符拦截
  3. 非法字符过滤

14. 你的项目中使用过那些 JSTL 标签?

<%@ taglib prefix=”c” uri=”" %>

<c:if test="表达式内容"> </c:if>
<c:forEach begin="1" end="5" step="1" var="i">
${i}
</c:forEach>
begin:起始值
end:结束值
step:步长
var:当前遍历的临时变量名
<c:forEach items="${list}" var="user" varStatus="vs">
${user}
</c:forEach>
items:需要遍历的集合
var:当前遍历的临时变量名
varStatus:当前遍历元素的状态
index:索引
count:计数器

15.分别说出 http,https,ftp,telnet 的默认端口?

http:80

https:443

ftp:20、21

telnet:23

16.Jquery 常用选择器都有哪些?

Jquery选择器总共有四大类:

1)基本选择器

基本选择器是Jquery最常用的选择器,也是最简单的选择器,他通过元素id、class和标签名来查找DOM元素。

2)层级选择器

层级选择器是通过DOM元素间的层次关系来获取元素,主要的层次关系包括父子、后代、相邻、兄弟关系。

3)过滤选择器

过滤选择器主要是通过特定的过滤规则来筛选出所需的DOM元素,过滤规则与CSS中的伪类选择器语法相同,即选择器都以一个冒号(:)开头。按照不同的过滤规则,过滤选择器可以分为:基本过滤,内容过滤,可见性过滤,属性过滤,子元素过滤和表单对象属性过滤选择器共六种选择器。下面分别来简单看一下Jqueryz这六种过滤选择器

​ A)Jquery基本过滤选择器

​ 过滤选择器是根据某类过滤规则进行元素的匹配,书写时都以(:)开头;简单过滤选择器是过滤选择器中使用最广 泛的一种。

​ B)Jquery内存过滤选择器

​ 内容过滤选择器的过滤规则主要体现在它所包含的子元素和文本内容上。

​ C)Jquery可见性过滤选择器

​ 可见性过滤选择器是根据元素的可见和不可见状态来选择相应的元素。

​ D)Jquery属性过滤选择器

​ 属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素。

​ E)Jquery子元素过滤选择器

​ F)Jquery表单对象属性过滤选择器

​ 此选择器主要对所选择的表单元素进行过滤。

​ 4)表单选择器

​ 利用表单选择器我们可以极其方便地获取表单的某个或某类型的元素。

​ 注意:要选取input中为hidden值的方法就是上面例子的用法,但是直接使用“:hidden”的话就是匹配页面中所有的不可见元素,包括宽度或高度为0的。

17.JSP中动态include和静态include的区别?

一、静态包含:<%@ include file=”包含页面”%>

  静态包含一般用于加载进页面显示后就再也不变的东西,比如页眉、背景、标题等等。静态包含不会检查所含文件的变化,把文件包含进来后,被包含文件的修改变化是不会影响已被包含进来的内容的。因为,静态包含发生在编译阶段。比如:a.jsp中使用了语句 <%@ include file=”b.jsp”%>,把b.jsp包含了进来,那么在编译a.jsp文件时,会直接把b.jsp文件的内容全部内嵌到a.jsp文件中包含b的语句的位置。然后运行a,显示a页面。也就是说,静态include是先把被包含文件的内容全部复制内嵌到包含文件中,再进行编译运行的。也正是因为要把b包含进a,所以b中的变量等不能与a重复,否则会报错。

  二、动态包含:<jsp:include page=” “ flush=”true”/>

  动态包含用于加载经常变化的、要求显示最新版本内容的东西,比如提交时间戳:用户打开博客编辑页面时,有一个时间加载进来了。用户编写完博客,点击提交时,就应该使用/显示提交瞬间的时间而不是打开编辑页面时的那个时间。所以这里要用的就是最新时间。由上面我们知道,静态include是先包含进来,再编译,运行并传回浏览器显示的,所以不能满足我们要求某些部分使用最新内容的要求。那么,我们就要用到动态include。

  动态include与静态include的最大不同在于:包含文件与被包含文件都是先编译执行,再包含。二者的编译阶段是相互独立的,只有在包含文件的include语句处把被包含文件的执行结果包含进来。换言之,包含文件先编译,执行。执行到了include语句的时候才触发被包含文件的编译、执行,并实时把结果包含进来。从而达到获取最新的被包含内容的目的。同样使用a.jsp包含b.jsp的例子:加入a.jsp中动态include了b.jsp。现在,a先编译成servlet类文件,然后运行,当运行到包含b的语句处,引起b的编译,运行,并把b的运行servlet运行结果包含进a。最后a顺利运行完毕,把a的servlet类运行结果输出到浏览器显示。

静态包含包含的是内容,而动态包含包含的是结果。

静态包含不可以传递参数 ,而动态包含可以传递参数

能用静的,就不用动的!

  综上所述,我们可以一句话辨析静态include与动态include的区别:静态include是编译阶段的代码拼接,动态include是编译后的servlet的运行结果的拼接。

18.描述下你对MVC的理解

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  • View(视图) - 视图代表模型包含的数据的可视化。
  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。controller相当于路由的作用。

19.JSON与XML的区别

(1)

JSON多用于简单的结构化数据方面,通常是以数据为中心,而不是以文档为中心,因此JSON不是文本标记语言,它是为数据设计而生。

JSON数据类型很少,并且需要预定义,够简单,适合新手入门; JSON具有简单的结构定义和文档组合结构,但缺乏属性、名称空间、继承和替换。JSON没有XML文本节点(text()),因此JSON不能实现混合内容的功能,这就说明了JSON并不是文本标记语言,还有JSON没有date数据类型,而XML存在date类型,但JSON可以实现date类型跟String类型的转换,数据库中使用TO_CAHR()和TO_DATE()方法,后台程式中可以使用格式化的方法进行转换

(2)

XML可以用于结构化和半结构化数据两个方面,是一种文本标记语言,可以以数据及文档为中心,兼职两者。

XML数据类型较多,数据可以是无类型的,也可以是基于XML模式或文档类型定义(DTD),相对比较复杂;一般来说,订单在XML文档中很重要,对于XML文档里面的javascript对象的顺序是无关要紧的。

本文发布于:2024-01-31 04:18:13,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170664590225400.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:面试题   核心   web
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23