1. 数据库连接池的作用,以传统的JDBC技术相比有什么优点?
数据库连接池是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应在请求队列中排队等待。并且应用程序可根据池中连接的使用率,动态增加或减少池中的连接数。当关闭连接操作时,连接并不真正的关闭,而是返回到连接池中作为空闲连接在后面继续使用,连接池技术尽解决了数据库连接频繁打开关闭所带来的性能问题。 传统的JDBC技术相比有什么优点:
- 限定数据库的个数,不会导致由于数据库连接过多导致系统运行缓慢或崩溃
- 数据库连接不需要每次都去创建或销毁,节约了资源
- 数据库连接不需要每次都去创建,响应时间更快。
2. 什么是HTML,说说你对它的了解?CSS呢?
HTML 是用来描述网页的一种语言。
指的是超文本标记语言 (Hyper Text Markup Language),不是一种编程语言,而是一种标记语言 (markup language),语法较为松散,不严格的web语言;标签可以不闭合,不区分大小写。 HTML主要用于在 Internet 上显示 Web 页面的主要标记语言。换句话说,网页由 HTML 组成,用于通过 Web 浏览器显示文本,图像或其他资源。所有 HTML 都是纯文本,这意味着它不是编译的,可以由人类阅读。HTML 文件的文件扩展名为.htm 或.html。
CSS (Cascading Style Sheets) 层叠样式表
简称CSS,是用来配合HTML进行相应的修饰,在网页制作时采用CSS技术,可以有效地对页面的的布局、颜色、背景、宽度、高度、字体等进行控制,让网页按您的美工设计布局的更加美观漂亮。样式定义如何显示 HTML 元素,通常存储在样式表中,一般使用外部样式,可以极大提高工作效率。提供复用性。
3. GET和POST两种提交方式的区别?
GET和POST是HTTP协议中的两种发送请求的方法。
他们的区别如下:
1. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
2. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
3. GET请求在URL中传送的参数是有长度限制的,而POST理论上没有。
4. GET参数通过URL传递,POST放在Request body中。
5. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
6. GET和POST还有一个重大区别 简单的说: GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。 因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效
4. JavaScript与JAVA的区别?? null和undefined的区别?
JavaScript与JAVA的区别:雷锋和雷峰塔的区别
数据类型不同
Java的基本数据类型分为4类8种,分别是:byte、short、int、long、float、double、char、boolean,引用数据类型有3种,分别是:class、interface、array.
而JavaScript的数据类型为6种,分别为:number、string、boolean、null、undefined、object。 除此之外,Java和Javascript变量方面也有不同。二者定位不同
Java是一种完全面向对象的编程语言,是一个强语言,想要运用Java写东西就必须先设计对象,
而JavaScript不一样,它是一个弱语言,是基于对象的一种脚本语言,它为开发者自带提供了很多内部对象,要更为简易省时。联编方式不同
Java采用静态联编,Java的对象引用必须在编译时就进行,编译器需要实现强类型检查,
而JavaScript不同,它采用动态联编,它的对象引用可以在运行时检查。使用场景不同 它们最本质的不同就是用途,
Java目前被广泛应用于PC端、手机端、互联网、数据中心等等,
而JavaScript则被主要用于嵌入文本到HTML页面,读写HTML元素,控制cookies等。
Java和JavaScript各有所长各有专精,Java的舞台在编程领域,而JavaScript的得心之处是在Web页面中,它几乎无所不能。
null与undefined的区别:
- null: 在 JavaScript 中 null 表示 "什么都没有"。null是一个只有一个值的特殊类型。表示一个空对象引用。使用typeof运算得到 “object”,所以你可以认为它是一个特殊的对象值。
- undefined: 在 JavaScript 中,undefined是一个没有设置值的变量,当一个声明了一个变量未初始化时,得到的就是undefined。
null是javascript的关键字,可以认为是对象类型,它是一个空对象指针,和其它语言一样都是代表“空值”,不过 undefined 却是javascript才有的。
undefined是在ECMAScript第三版引入的,为了区分空指针对象和未初始化的变量,它是一个预定义的全局变量。没有返回值的函数返回为undefined,没有实参的形参也是undefined。
javaScript权威指南: null 和 undefined 都表示“值的空缺”,你可以认为undefined是表示系统级的、出乎意料的或类似错误的值的空缺,而null是表示程序级的、正常的或在意料之中的值的空缺。
5. 闭包是什么?事件冒泡呢?
闭包: 闭包就是能够读取其他函数内部变量的函数,函数没有被释放,整条作用域链上的局部变量都将得到保留。 由于在javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成‘定义在一个函数内部的函数’。 所以,在本质上,闭包就是将函数内部和函数外部连接的一座桥梁
。 闭包的特性: 1. 函数内再嵌套函数 2. 内部函数可以引用外层的参数和变量 3. 参数和变量不会被垃圾回收机制回收 闭包的作用: 闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
事件冒泡: 事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发,即子级元素先触发,父级元素后触发。依次层级触发。
阻止事件冒泡: 使用event.stopPropagation()起到阻止冒泡阶段中当前事件的进一步传播。
阻止事件默认行为: 使用event.preventDefault()可以取消事件默认行为。 使用 return false ; 取消事件默认行为。
6. Bootstrap是什么?它有什么优点?除了它你还知道其它的吗?
Bootstrap 是全球最受欢迎的前端组件库,用于开发响应式布局、移动设备优先的 WEB 项目。 Bootstrap 是一套用于 HTML、CSS 和 JS 开发的开源工具集。利用我们提供的 Sass 变量和大量 mixin、响应式栅格系统、可扩展的预制组件、基于 jQuery 的强大的插件系统,能够快速为你的想法开发出原型或者构建整个 app 。
容易上手: 只要您具备 HTML 和 CSS 的基础知识,您就可以开始学习 Bootstrap。
响应式设计: Bootstrap 的响应式 CSS 能够自适应于台式机、平板电脑和手机。更多有关响应式设计的内容详见 Bootstrap 响应式设计。
浏览器支持: 所有的主流浏览器都支持 Bootstrap。
内置组件: 它包含了功能强大的内置组件,易于定制。
开源/定制: 通过自定义 Bootstrap 组件、Less 变量和 jQuery 插件,可以定制一份属于你自己的 Bootstrap 版本。
其他常用前端框架 [图片上传失败...(image-6e0237-1607862874185)]
7. XML,HTML的区别?XML的解析方式有哪些,哪一个更好?
HTML(HyperTextMark-upLanguage)即超文本标记语言,是WWW的描述语言。 XML即ExtentsibleMarkup Language(可扩展标记语言),是用来定义其它语言的一种元语言. xml和html都是用于操作数据或数据结构,在结构上大致是相同的,但它们在本质上却存在着明显的区别。 语法要求不同:
- 在html中不区分大小写,在xml中严格区分。
- 在HTML中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾.在XML中,是严格的树状结构,绝对不能省略掉结束标记。
- 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符作为结尾。这样分析器就知道不用查找结束标记了。
- 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
- 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
- 在XML文档中,空白部分不会被解析器自动删除;但是html是过滤掉空格的。
标记不同:
1、html使用固有的标记;而xml没有固有的标记。
2、Html标签是预定义的;XML标签是免费的、自定义的、可扩展的。
作用不同: - html是用来显示数据的;xml是用来描述数据、存放数据的,所以可以作为持久化的介质!Html将数据和显示结合在一起,在页面中把这数据显示出来;xml 则将数据和显示分开。
XML被设计用来描述数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。 - xml不是HTML的替代品,xml和html是两种不同用途的语言。 XML 不是要替换 HTML;
实际上XML 可以视作对 HTML 的补充。XML 和HTML 的目标不同HTML 的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中于数据的内容。 - 没有任何行为的XML。与HTML 相似,XML 不进行任何操作。(共同点)
- 对于XML最好的形容可能是: XML是一种跨平台的,与软、硬件无关的,处理与传输信息的工具。
- XML未来将会无所不在。XML将成为最普遍的数据处理和数据传输的工具。
8. Servlet的执行原理以及生命周期?
工作流程: Web服务器在与客户端交互时.Servlet的工作过程是:
- 在客户端对web服务器发出请求
- web服务器接收到请求后将其发送给Servlet
- Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器.
- web服务器将从Servlet实例对象中收到的响应结构发送回客户端.
生命周期: Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。下面来看看以下几个主要方法:
init()方法 在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init();
service()方法 它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
destroy()方法 仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的delete方法。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
在代码中,Servlet生命周期由接口javax.servlet.Servlet定义。所有的Java Servlet 必须直接或间接地实现javax.servlet.Servlet接口.
9. HTTP常见的状态码有哪些?分别代表什么?HTTP和TCP/IP的区别与联系?
常见的状态码:
200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件。
304(未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
400(错误请求) 服务器不理解请求的语法。
403(禁止) 服务器拒绝请求。 如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称
404(找不到)器找不到请求的网页。例如,对于服务器上不存在的网页经常会返回此代码。
405(方法禁用) 禁用请求中指定的方法。例如:get请求,调用post请求方法
500(服务器内部错误) 服务器遇到错误,无法完成请求。
503(服务不可用) 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
HTTP和TCP/IP的区别与联系
网络由下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
HTTP协议是建立在请求/响应模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。 HTTP/1.0为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。 另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应 消息,因此减少了链接建立的次数和经常性的链接开销。
结论:虽然HTTP本身是一个协议,但其最终还是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。
10. 重定向(redirect)和请求转发(forward)的区别?什么情况下使用他们?
forward(转发): 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址.
redirect(重定向): 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
总结:转发是服务器行为,重定向是客户端行为.
区别:
从地址栏显示来说 forward:地址栏不会改变,而redirect地址栏显示的是新的URL.
从数据共享来说 forward:转发页面和转发到的页面可以共享request里面的数据.redirect:不能共享数据.重定向,其实是两次request,
从运用地方来说 forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等
从效率来说 forward:高. redirect:低.
11. Cookie和Session的区别与联系?
- cookie是什么?
cookie是存在于客户端(浏览器)。
cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
cookie的内容主要包括:名字,值,过期时间,路径和域。其中路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。
- session是什么?
session 存放在服务器端的。
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
cookie与session如何联系与通信的? 用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。其实客户端Session默认是以cookie的形式来存储的。 当然我们客户端可以禁用cookie,这时候服务器端就拿不到sessionID。
cookie与session的区别:
Cookie以文本文件格式存储在浏览器中,而session存储在服务端。
cookie的存储限制了数据量,只允许4KB,而session是无限量的。
我们可以轻松访问cookie值但是我们无法轻松访问会话值,因此它更安全。
设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
总结:如果我们需要经常登录一个站点时,最好用cookie来保存信息,要不然每次登陆都特别麻烦,如果对于需要安全性高的站点以及控制数据的能力时需要用会话效果更佳,当然我们也可以结合两者,使网站按照我们的想法进行运行
12. jsp和servlet有哪些相同点和不同点,他们之间的联系又是什么?
- 区别:
jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
- 联系:
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“Servlet类”。
-
Servlet和JSP最主要的不同点在于:
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑
Servlet更多的是类似于一个Controller,用来做控制。
13. JSP的九大内置对象及作用分别是什么?请简述使用MVC开发模式的好处?
JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception
request对象 request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
response对象 response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
session对象 session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
application对象 application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
out 对象 out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
pageContext 对象 pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
config 对象 config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
page 对象 page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
exception 对象 exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。
MVC全名是Model View Controller, 是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。
- 模型(model): 它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型 与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性
- 视图(view): 用户与之交互的界面、在web中视图一般由jsp,html组成
- 控制器(controller): 接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的做用
MVC的优点
分工明确,通过MVC模式可以把数据库的开发,程序业务逻辑开发以及页面开发分开,这样方便后期的代码维护,也使的程序员之间分工更加明确.
可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
重用性高,多个视图共享一个模型,不论视图层是用flash界面还是wap界面,用一个模型就可以处理,这样最大化重用代码.
模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
MVC的不足之处
增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
14. Filter 和 Servlet的区别?
概念 Servlet: 是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,可动态的生成web页面,工作在客户端请求与服务器响应的中间层。 Filter: 是一个可复用的代码片段,可用来转换HTTP请求、响应和头信息,但不能产生一个请求或者响应,只是修改对某一资源的请求,或者修改从某一的响应。
生命周期 过滤器的生命周期比servlet长 servlet生命周期: servlet的生命周期始于它被装入web服务器的内存时,并在web服务器终止或重新装入 servlet时结束; servlet一旦被装入web服务器,一般不会从web服务器内存中删除,直至web服务器关闭或重新开始。
装入:启动服务器时加载Servlet的实例;
初始化:web服务器启动时或web服务器接收到请求时,或者两者之间的某个时刻启动,初始化工作由init()方法负责执行完成;
调用:从第一次到以后的多次访问,都是只调用doGet()或doPost()方法;
销毁:停止服务器时调用destroy()方法,销毁实例。
filter生命周期: 过滤器一定要实现javax.servlet包的Filter接口的三个方法init()、doFilter()、destroy(),空实现也行。
启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;
每一次请求时都只调用方法doFilter()进行处理;
停止服务器时调用destroy()方法,销毁实例。
共同之处:都有init()、destroy()方法,都需配置WEB-INF/web.xml
职责 servlet: 创建并返回一个包含基于客户请求性质的动态内容的完整的html页面; 创建可嵌入到现有的html页面中的一部分html页面(html片段); 读取客户端发来的隐藏数据; 读取客户端发来的显示数据; 与其他服务器资源(包括数据库和java的应用程序)进行通信; 通过状态代码和响应头向客户端发送隐藏数据。 filter: 能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应; 在执行servlet之前,首先执行filter程序,并为之做一些预处理工作; 根据程序需要修改请求和响应; 在servlet被调用之后截获servlet的执行。
区别 servlet: 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在业务处理之前进行控制。 filter: 流程是线性的,url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter、 servlet接收等,而servlet 处理之后,不会继续向下传递。 filter: 功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程 。 filter: 可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等
调用顺序 servlet:按照web.xml中的映射配置顺序按照配置条件从后向前调用第一个满足条件的Servlet,调用之前事先执行满足条件的Filter,不存在层次调用Servlet问题 filter:
按照web.xml中的映射配置顺序按照配置条件从后向前调用;
层次调用doFilter()方法中FilterChain.doFilter()之前的内容;
调用Servlet中的service()方法;
service()方法执行完毕后,层次调用doFilter()中FilterChain.doFilter()之后的方法,顺序与之前的相反。
15. JQuery是什么,它有什么优点?
JQuery是什么? jQuery是一个快速、简洁的JavaScript框架,jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
JQuery的优点: jQuery是轻量级的框架,大小不到30kb,它有强大的选择器,出色的DOM操作的封装,有可靠的事件处理机制(jQuery在处理事件绑定的时候相当的可靠),完善的ajax(它的ajax封装的非常的好,不需要考虑复杂浏览器的兼容性和XMLHttpRequest对象的创建和使用的问题。) 出色的浏览器的兼容性。而且支持链式操作,隐式迭代。行为层和结构层的分离,还支持丰富的插件,jquery的文档也非常的丰富。
16.JQuery中find()、has()和filter()区别?
find :在当前选中元素的上下文中找到符合条件的后代,返回的是子元素
has : 将匹配元素集合根据选择器或DOM元素为条件,检索该条件在每个元素的后代中是否存在,将符合条件的的元素构成新的结果集。
filter :过滤DOM元素包装集,是指操作当前元素集,删除不匹配的元素,得到一个新的集合。
find()方法是获得在当前结果集中每个元素的后代。参数(选择器、jquery集合或DOM元素)做为过滤条件,满足过滤条件的则保留,保留的是后代。而has()方法中,参数只做为条件,符合条件的,它的前元素加入新的结果集,而不是后代加入新的结果集。 has()只起判断作用。以has参数中的选择器或DOM元素做为条件,检测原结果集中的元素是否符合。去掉不符合的元素,将符合的元素构成一个新结果集。 filter()方法与has()方法中的参数,都是过滤条件。不同的是filter()方法,条件作用于自身;has()方法条件是作用于它的后代元素中。
17. Ajax是什么?Ajax书写方式及内部主要参数都有哪些?
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。 语法:
<pre spellcheck="false"
class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded"
lang="javascript"
cid="n312"
mdtype="fences"
style="box-sizing: border-box;
overflow: visible;
font-family: "
Fira Code",
Consolas, "
Lucida Console",
Courier, monospace, "
Helvetica Neue",
Helvetica, "
Arial sans-serif";
font-size: 0.9rem;
display: block;
break-inside: avoid;
text-align: left;
white-space: normal;
background-image:
inherit; background-position: inherit;
background-size: inherit;
background-repeat: inherit;
background-attachment: inherit;
background-origin: inherit;
background-clip: inherit;
background-color: rgb(34, 37, 38);
position: relative !important;
padding: 6px 10px 6px 0px;
box-shadow: rgba(0, 0, 0, 0.16) 0px 2px 5px 0px, rgba(0, 0, 0, 0.12) 0px 2px 10px 0px;
margin-bottom: 2.10526rem;
border: none;
border-radius: 6px;
width: inherit; color: rgb(171, 192, 208);
font-style: normal;
font-variant-ligatures: normal;
font-variant-caps: normal;
font-weight: 400;
letter-spacing: normal;
orphans: 2; text-indent: 0px; text-transform: none;
widows: 2; word-spacing: 0px;
-webkit-text-stroke-width: 0px;
text-decoration-style: initial;
text-decoration-color: initial;">
$.ajax({
type: // 请求方式,
url: // 请求地址,
async: // 布尔值,表示请求是否异步处理。默认是 true ,
contentType: // 发送的内容类型,
data: // 发送到服务器的数据,JSON类型,
dataType: // 响应的数据类型,
success: function(data){},// 请求成功时运行的函数
error:function(e){} // 请求失败要运行的函数。
});</pre>
18. 什么是Radis? NOSQL和关系型数据库的优缺点比较?
Radis是一个key-value存储系统。包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。 Redis特点: Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。 Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。 Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。 关系数据库的特点是:
数据关系模型基于关系模型,结构化存储,完整性约束。
基于二维表及其之间的联系,需要连接、并、交、差、除等数据操作。
采用结构化的查询语言(SQL)做数据读写。
操作需要数据的一致性,需要事务甚至是强一致性。 优点:
保持数据的一致性(事务处理)
可以进行join等复杂查询。
通用化,技术成熟。 缺点:
数据读写必须经过sql解析,大量数据、高并发下读写性能不足。
对数据做读写,或修改数据结构时需要加锁,影响并发操作。
无法适应非结构化存储。
扩展困难。
昂贵、复杂。
NoSQL数据库的特点是:
非结构化的存储。
基于多维关系模型。
具有特有的使用场景。 优点:
高并发,大数据下读写能力较强。
基本支持分布式,易于扩展,可伸缩。
简单,弱结构化存储。 缺点:
join等复杂操作能力较弱。
事务支持较弱。
通用性差。
无完整约束复杂业务场景支持较差。
19. Maven有哪些优点和缺点?Maven常见的依赖范围有哪些?
优点如下:
简化了项目依赖管理:
易于上手,对于新手可能一个"mvn clean package"命令就可能满足他的工作
便于与持续集成工具(jenkins)整合
便于项目升级,无论是项目本身升级还是项目使用的依赖升级。
有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译。
maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等
缺点如下:
maven是一个庞大的构建系统,学习难度大
maven采用约定优于配置的策略(convention over configuration),虽然上手容易,但是一旦出了问题,难于调试。
中国的网络环境差,很多repository无法访问,比如google code, jboss 仓库无法访问等
常见的依赖范围:
compile:编译依赖,默认的依赖方式,在编译(编译项目和编译测试用例),运行测试用例,运行(项目实际运行)三个阶段都有效,典型地有spring-core等jar。
test:测试依赖,只在编译测试用例和运行测试用例有效,典型地有JUnit。
provided:对于编译和测试有效,不会打包进发布包中,典型的例子为servlet-api,一般的web工程运行时都使用容器的servlet-api。
runtime:只在运行测试用例和实际运行时有效,典型地是jdbc驱动jar包。
system: 不从maven仓库获取该jar,而是通过systemPath指定该jar的路径。
import: 用于一个dependencyManagement对另一个dependencyManagement的继承