java面试web篇

1、forward和redirect的区别 
1.从地址栏显示来说 
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. 
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL. 
2.从数据共享来说 
forward:转发页面和转发到的页面可以共享request里面的数据. 
redirect:不能共享数据. 
3从运用地方来说 
forward:一般用于用户登陆的时候,根据角色转发到相应的模块. 
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等. 
4.从效率来说 
forward:高. 
redirect:低.

2、session和cookie的区别,如何实现自动登录 
1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。 
2、session中保存的是对象,cookie中保存的是字符串。 
3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。 
4、session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。(ps:Java可以通过URL,进行sessionId的传递,而不是非得用cookie) 
5、session在用户会话结束后就会关闭了,但cookie因为保存在客户端,可以长期保存

自动登录: 
如果没有cookie信息,校验后把信息(用户名,密码等)放在cookie里面。 
如果有cookie,则读取cookie里的用户名和密码或者其它信息,然后根据读取的用户名和密码进行校验。

3、三次握手、四次挥手、滑动窗口协议 
三次握手、四次挥手:http://blog.csdn.net/whuslei/article/details/6667471 
滑动窗口协议:http://www.cnblogs.com/lambda107/archive/2011/09/04/2162584.html

4、Http header内容 
HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。 
基础知识:Http的请求格式如下: 
[request line] 主要包含三个信息:1、请求的类型(GET或POST),2、要访问的资源(如\res\img\a.jif),3、Http版本(http/1.1) 
[header ] 用来说明服务器要使用的附加信息 
[blank line ] 这是Http的规定,必须空一行 
[request-body] 请求的内容数据

当你在浏览器地址栏里键入一个url,你的浏览器将会类似如下的http请求: 
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1 
Host: net.tutsplus.com 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120 
Pragma: no-cache 
Cache-Control: no-cache

第一行被称为“Request Line” 它描述的是这个请求的基本信息,剩下的就是HTTP headers了。

请求完成之后,你的浏览器可能会收到如下的HTTP响应:

HTTP/1.x 200 OK 
Transfer-Encoding: chunked 
Date: Sat, 28 Nov 2009 04:36:25 GMT 
Server: LiteSpeed 
Connection: close 
X-Powered-By: W3 Total Cache/0.8 
Pragma: public 
Expires: Sat, 28 Nov 2009 05:36:25 GMT 
Etag: “pub1259380237;gz” 
Cache-Control: max-age=3600, public 
Content-Type: text/html; charset=UTF-8 
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT 
X-Pingback: http://net.tutsplus.com/xmlrpc.php 
Content-Encoding: gzip 
Vary: Accept-Encoding, Cookie, User-Agent 

第一行呢被称为“Status Line”,它之后就是http headers,空行完了就开始输出内容了。 
原文:http://www.cnblogs.com/yuzhongwusan/archive/2011/10/20/2218954.html

5、get和post的区别 
1、Get是从服务器端获取数据,Post则是向服务器端发送数据。 
2、在客户端,Get方式通过URL提交数据,在URL地址栏可以看到请求消息,该消息被编码过;Post数据则是放在Html header内提交。 
3、对于Get方式,服务器端用Request.QueryString获取变量的值;对用Post方式,服务器端用Request.Form获取提交的数据值。 
4、Get方式提交的数据最多1024字节,而Post则没有限制。 
5、Get方式提交的参数及参数值会在地址栏显示,不安全,而Post不会,比较安全。 
http://www.nowamagic.net/librarys/veda/detail/1919

6、40*错误、50*错误 
HTTP状态码 
•200 用来表示请求成功. 
•300 来表示重定向. 
•400 用来表示请求出现问题. 
•500 用来表示服务器出现问题.

200 成功 (OK) 
前文已经提到,200是用来表示请求成功的 
206 部分内容 (Partial Content) 
如果一个应用只请求某范围之内的文件,那么就会返回206 
这通常被用来进行下载管理,断点续传或者文件分块下载。

400 - 错误的请求。 
401 - 访问被拒绝。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示: ·401.1 - 登录失败。 
404 - 未找到。 ·404.0 -(无) – 没有找到文件或目录。 
·404.1 - 无法在所请求的端口上访问 Web 站点。 
·404.2 - Web 服务扩展锁定策略阻止本请求。 
·404.3 - MIME 映射策略阻止本请求。 
405 - 用来访问本页面的 HTTP 谓词不被允许(方法不被允许)

JSP程序404错误的解决方法如下: 
1、web应用没有部署成功:从控制台()的deployments下面看,要注意状态。如果没有部署成功,可以到控制台(启动服务器的命令行窗口)查看错误。如果使用了Tomcat,则通过,再选择管理界面。 
2、Web应用的名字(实际上是访问方式,通常是context-root),查看方式:在工程上点右键,选择“Properties”,选择MyEclipseàWeb,界面中的Web Context-root. 
3、资源的名字(JSP和servlet) 
  如果是JSP文件,仔细看文件名字是否写错。(在MyEclipse中开发的时候,JSP文件放在web-root中,不能放错,如果有其他文件夹,访问方式中要写出文件夹)如果没有错误,仔细看文件中是否通过jsp:forward或者jsp:include等访问方式访问了其他文件,看其他文件是否存在。 
  如果是Servlet,查看web.xml文挡: 
﹤servlet-mapping﹥ 
﹤servlet-name﹥LoginServlet﹤/servlet-name﹥ 
﹤url-pattern﹥/login﹤/url-pattern﹥ 
﹤/servlet-mapping﹥ 
  其中url-pattern的内容决定了访问方式。 
  如果这个Servlet的配置没有错误,要查看该Servlet文件中是否访问了其他文件,查看所访问的文件是否存在。 
4、如果上面这些错误都没有,可能是系统的缓存问题,包括客户端浏览器和服务器的临时文件。解决方法:重新启动浏览器,重新编译工程(ProjectàClean),重新部署,关闭应用服务器,重新启动应用服务器,重新访问。 
  
7、简述mvc模式 
MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。 
视图 
  视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复 杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请 求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界 面的输入数据和请求传递给控制和模型。

模型 
  模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返 回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的 划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开 发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设 计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可 以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。 
  业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

控制 
  控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以 完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个 模型。 
  模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图 都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。

8、spring 
原理、AOP、IOC 
http://cuihongxin1030.iteye.com/blog/405487 
ioc:http://blog.csdn.net/whuslei/article/details/7854423

9、mybatis 
原理:http://blog.csdn.net/jiuqiyuliang/article/details/45286191 
与jdbc的区别:http://chenjc-it.iteye.com/blog/1455688

发布了11 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LYW_lyw/article/details/79524449