JavaWeb重要知识点合集
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(成功)服务器已成功处理了请求。通常,这表⽰服务器提供了请求的⽹页。如果是对您的 ⽂件显⽰此状态码,则表⽰ 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。开发者可以在l ⽂件中为应⽤程序环境中的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()⽅法,都需配置l
职责 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:按照l中的映射配置顺序按照配置条件从后向前调⽤第⼀个满⾜条件的Servlet,调⽤之前事先执⾏满⾜条件的Filter,不存在层次调⽤Servlet问题 filter:
按照l中的映射配置顺序按照配置条件从后向前调⽤;
层次调⽤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"
lang="javascript"
cid="n312"
cookie阻止好还是不阻止好mdtype="fences"
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等复杂操作能⼒较弱。
事务⽀持较弱。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论