1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。

原博http://blog.csdn.net/shuaishenkkk/article/details/8634917

区别

1、cookie数据存放在客户的浏览器上,  
        session数据放在服务器上   
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗   
        考虑到安全应当使用session   
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能   
        考虑到减轻服务器性能方面,应当使用COOKIE   
4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。

原理

http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,

session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过   SessionID来区分不同的客户

session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为   JSESSIONID的输出cookie,我们叫做session  cookie,以区别persistent

cookies,也就是我们通常所说的cookie

注意session   cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏

览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到sessionid=  KWJHUG6JJM65HS2K6之类的字符串。

session   cookie针对某一次会话而言,会话结束session   cookie也就随着消失了,而persistent  cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且

可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如   session  cookie安全了

通常session   cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时

我们可以先把sessionid保存在persistent  cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session   cookie和persistent  cookie

的结合我们就实现了跨窗口的session   tracking(会话跟踪)。

2. servlet的生命周期

加载并实例化: 当Servlet容器启动后,Servlet通过类加载器来加载Servlet类,加载完成后再new一个Servlet对象来完成实例化。

  1,初始化阶段  调用init()方法

在Servlet的整个生命周期内,init()方法只被调用一次。

  2,响应客户请求阶段  调用service()方法

对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service

方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。

  3,终止阶段  调用destroy()方法

3. webservice相关问题

RPC(Remote Procedure Call Protocol)原理 博:http://blog.jobbole.com/92290/

SOP原理

RESTFful设计风格

Web service是什么?类似云计算,云服务

博:http://www.ruanyifeng.com/blog/2009/08/what_is_web_service.html

4. jdbc连接,forname方式的步骤,怎么声明使用一个事务。举例并具体代码

连接步骤:

1)、加载JDBC驱动程序

2、提供JDBC连接的URL

  1. •连接URL定义了连接数据库时的协议、子协议、数据源标识。
  2. •书写形式:协议:子协议:数据源标识

3)、创建数据库的连接

4)、创建Statement

1、执行静态SQL语句。通常通过Statement实例实现。

2、执行动态SQL语句。通常通过PreparedStatement实例实现。

3、执行数据库存储过程。通常通过CallableStatement实例实现。

5)、执行SQL语句

6)、处理结果

7)、关闭JDBC对象

5. 无框架下配置web.xml的主要配置内容

6. jsp和servlet的区别

Servlet的生命周期有四个阶段:加载并实例化、初始化、请求处理、销毁。

Jsp的生命周期就包括六个阶段:转换、编译、加载并实例化、jspInit()调用(即初始化)、_jspService()调用(即请求处理)、jspDestroy()调用(即销毁)。

7、如何保存会话状态,有哪些方式、区别如何?

8、分布式session如何管理,你有哪些方案?

大型网站随着网站的功能和用户越来越多,单机器服务部署的Web应用已经不能再支持了。这时候就需要优化或调整目前的架构,具体怎么优化,或先优化哪部分,这取决于网站的具体情况

数据库压力大,则就可以先设施读写分离,分库分表,是垂直划分(可以简单的理解为按业务功能划分)

水平划分(如用户表数据量很多,就可以按一定的规则分表设计,表结构仍然是相同的)

Web应用服务器压力大,可以增加一台服务部署应用, 即从单台服务变为集群。变为集群后,用户访问网站,到底是选择哪一台服务器呢?这就需要在应用服务器前增加负载均衡设备来解决

具体案例

假设我们有应用A和应用B,

现在一位用户第一次访问网站,session数据保存在应用A中。

如果我们不做处理,怎么保障接下来的请求每次都请求到应用A呢? 如请求到了应用B中,就会发现没有这位用户的session数据,这绝对是不能容忍的。

解决方案:

Session Stick,Session复制,Session集中管理,基于Cookie管理

Session Stick

在单机情况,session保存在单机上,请求也是到这台单机上,不会有问题。变成多台后,如果能保障每次请求都到同一台服务,那就和单机一样了。 这需要在负载均衡设备上修改。这就是Session Stick,这种方式也会有问题:

  • 如果某一台服务器宕机或重启,那么这台服务器上的session数据就丢失了。如果session数据中还有登录状态信息,那么用户需要重现登录。

  • 负载均衡要处理具体的session到服务器的映射。

Session复制

Session复制顾名思义,就是每台应用服务,都保存会话session数据,一般的应用容器都支持。与Session Stick相比,sessioon复制对负载均衡 没有太多的要求。不过这个方案还是有缺点:

  • 同步session数据带来都网络开销。只要session数据变化,就需要同步到所有机器上,机器越多,网络开销越大。

  • 由于每台服务器都保存session数据,如果集群的session数据很多,比如90万人在访问网站,每台机器用于保存session数据的内容占用很严重。

这就是Session复制,这个方案是靠应用容器来完成,并不依赖应用,如果应用服务数量并不是很多,可以考虑。

Session集中管理

这个也很好理解,再加一台服务,专门来管理session数据,每台应用服务都从专门的session管理服务中取会话session数据。可以使用数据库,NOSQL数据库等。 和Session复制相比,减少了每台应用服务的内存使用,同步session带来的网络开销问题。但还是有缺点:

  • 读写session引入了网络操作,相对于本机读写session,带来了延时和不稳定性。

  • 如Session集中服务有问题,会影响应用。

基于Cookie管理

最后一个是基于Cookie管理,我们把session数据存放在cookie中,然后请求过来后,从cookie中获取session数据。与集中管理相比,这个方案并不依赖外部 的存储系统,读写session数据带来的网络操作延时和不稳定性。但依然有缺点:

  • Cookie有长度限制,这会影响session数据的长度。

  • 安全性。session数据本来存储在服务端的,而这个方案是让session数据转到外部网络或客户端中,所以会有安全性问题。不过可以对写入Cookie的session 数据做加密。

  • 带宽消耗。由于加了session数据,带宽当然也会增加一点。

  • 性能消耗。每次Http请求和响应都带有Session数据,对于Web服务器来说,在同样的处理情况下,响应的结果输出越少,支持的并发请求越多。

9、jsp和javascript的区别?

Jsp是服务器端的动态网页技术,javascrip是操作客户端浏览器上元素的语言。

10、 在web项目中,如何配置出错页面?

 <error-page>
       <error-code>404</error-code>
       <location>/error.jsp</location>
 <error-page> 

11、web.xml中welcome-file配置项的作用是什么?

当我们在访问web应用时,如果没有指定访问的页面的时候,会自动定向到welcome-file所指定的页面

12、servlet中的response.sendError的作用是什么?

这是设置响应信息中状态码的方法。当我们使用response.sendError(404,”file  not  found”);之后就是发送了一个404的状态码,并作了状态码的描述。浏览器接受了状态码

后,就可对不同的状态码作出相应的处理。

13、发布项目时,把一jsp文件放到webroot下,与放在web-inf下,有什么区别?

因为web-inf下,应用服务器把它指为禁访目录,即直接在浏览器里是不能访问到的.

但是可以让servlet进行访问,如web-inf下有a.jsp则可以用

 request.getRequestDispatcher("/WEB-INF/a.jsp").forward(request,response);
 <jsp:forward page="/WEB-INF/a.jsp"></jsp:forward> 

14、如何在jsp中使用bean? 
使用javabean。 
<jsp:userBean  id=  class=  />设置JavaBean 
<jsp:setProperty name=  property=  value=>设置JavaBean属性值 
<jsp:getProperty name=  property=  >获得JavaBean属性值

15、 tomcat容器的作用是什么? 
   a) 通信支持:

b) 生命周期管理。

c) 多线程支持:

d) jsp支持

e) 安全性管理

16、session如何过期?项目中该怎么应用? 
法一:setMaxInternalTime(); session.invalide();….

法二:在web.xml中加入 
<session-config> 
        <session-timeout>30</session-timeout> 
</session-config>

销毁session方法有三种 
1)session超时 
2)调用session对象的invalidate()方法 
3)web容器关闭或崩溃 
程序能控制是前二种。

request的作用有哪些?

获取客户端传递的参数值

获取客户端请求头信息

获取会话

获取转发对象

可作为容器使用, 利用setAttribute()和getAttribute()方法进行参数传递

session有什么作用。

因为http协议是无状态的协议,但我们需要保存客户端在多次请求之间状态信息的时候,我们需要session来维护客户端的状态

Session对象类似于一个容器,可以存放任何对象,以供不同页面间共享数据

application有什么作用。 保存的一些全局性的对象信息。

request对象的作用范围是什么? 一次请求响应完成后,就会销毁。

session对象的作用范围是什么? 在一个用户会话期间有效。

application对象的作用范围是什么? 存在于整个web应用。当WEB容器关闭时,才会销毁

17、 如何进行URL重写?要用到什么方法?

18、 在servlet中,如何得到web.xml中配置的初始化参数? 
     ServletConfig.getInitParameter()

19、 在doGet方法中,使用synchronized会产生什么样的后果?

这是由于对共享资源的访问而采取的线程安全措施,但是在多线程环境下,同步加锁会带来性能的下降。

20、 如何在一个servlet中,把页面转到www.qq.com.页面中。

Response.sendRedirect(“http://www.qq.com”);

21、HttpServletRequest和HttpServletResponse是在哪里创建的?

当客户端请求到来的时候,由web容器创建。

22、servlet构造函数中可以执行初始化代码,为什么还要init方法呢?

如果在servlet构造函数中放置初始化代码,很容易导致servlet实例的创建失败。这样会导致Servlet无法响应客户端的请求

23、 tomcat容器是如何创建servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加

载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)

在servlet注册时加上<load-on-startup>1</load-on-startup>如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

24、MIME的作用是什么?

告诉客户端浏览器你返回的内容是哪一种类型的,让浏览器采取相应的策略来显示处理你返回的文档或者文件。

25、 如何打包一个web项目?

Jar  –cf   xx.war  WEB-INF  *.html  *.jsp  *.jpg

26、文件上传的原理是什么? 
<form method=POST, enctype=”multipart/form-data” action=””> 
<input type="file" name="filesss" /> 
   浏览器会把 文件内容连同 form的所有字段 格式化后传递到服务器,以二进制方式读取流后,就不能以request.getParameter的方式读取表单中的参数信息了。

27. 文件上传的form编写中,应该注意些什么? 
    enctype=multipart/form-data method=post

28. 在项目中,文件上传到服务器上后,你是怎么处理的?

使用request.getInputStream()获得字节流,然后将字节流写入文件。

29、 URL与URI的区别?

url:统一资源定位符, url定位客户端连接到服务器所需要的信息

    uri:统一资源标志符: uri是url的一部分,没有域名和查询字符串,即域名之后查询字符串之前所有的信息,用于指定资源

30、servlet程序中,可以获得客户机的IP地址吗?如何得到?

request.getRemoteAddr();

request.getRemoteHost(),

request.getRemotePort(),

request.getRemoteUser

31、 你在web项目中,数据共享有哪些方式 ?如果实现的?

32、你在项目中是如何处理乱码的?

1) 使用过滤器和包装器设置统一的字符编码格式。

2) 页面使用统一的编码格式<%@page contentType=”text/html;charset=utf-8”%>

33、请说明重定向的原理?

重定向由response发起。当用户请求服务器时,由服务器向客户端发送一个302的状态码,并产生一个Location的响应头。

当客户端接受到这样的状态码时,会马上读取Location响应头,并将地址栏改为Location里的内容。

然后再向服务器发出请求。这个过程中客户端发出了两次请求。并可向不同的服务器发送请求。

34、 servlet或jsp能同时响应多个客户端的请求吗?是通过什么方式做到的?

能够。多线程

35. 请简述servlet多线程的实现方式?

每次客户端请求过来的时候,WEB容器会产生一个线程来处理这个请求,这样就实现了servlet多线程。

36. 在servlet中定义成员变量(全局变量),有线程安全问题吗?如何处理?

有。避免使用实例变量是保证servlet线程安全的最佳选择。每个线程有自己私有的栈空间,方法中的临时变量是在栈上分配空间,他们不会影响线程的安全。

37、 servlet是线程安全的吗?为什么?

不安全。因为Servlet对象在整个过程中,至始至终只有一个对象。以节约服务器资源的消耗,这就意味着很多个线程会同时访问一个Servlet对象。所以线程不安全。

38、你是如何处理servlet线程安全问题的?

解决Servlet线程安全问题方法有三种 
1)编写Servlet类的时候,实现SingleThreadModel接口,将Servlet变成单线程机制。 
2)涉及对共享资源访问的时候,使用synchronized同步加锁,实现共享资源的保护。 
3)尽量不在Servlet中定义成员变量,使用局部变量。 
在三种方法中,最好使用第三种,这样线程安全,并且性能最高。

39、Http协议是无状态的,服务器是用什么方式为一个客户端保存状态的? 类似于会话跟踪?

Hidden表单域   cookie   session   URL重写

40、Servlet的两种映射方式

1、注解

2、xml

 第一,容器如何找到Servlet,利用
 <servlet>
      <servlet-name></servlet-name>Servlet名字
      <servlet-class></servlet-class>Servlet类的全路径
 </servlet> 

 第二,客户端如何找到当前的Servlet。利用
 <servlet-mapping>
      <servlet-name></servlet-name>Servlet名字
      <url-pattern></ url-pattern >客户端请求路径
 </servlet-mapping> 

41、如何得到客户端的请求参数?

request.getParameter()单个数据 
request.getParameterValues()一组数据 
request.getParameterMap()返回所有的键值对

42、 request.getParameter和request.getParameterValues的区别,它们的返回值是什么类型?

request.getParameter获得单个表单的数据。返回值是String类型。

而request.getParameterValues()是获得表单元素名相同的一组数据。返回值是String[]数组。

43、谈谈过滤器的原理,配置及使用。有多个过滤器如何进行配置?

过滤器允许你拦截请求,还可以允许你控制响应。还可以能够对请求头、响应头、消息体的数据进行更改。同时,还可以对返回的流信息进行压缩。项目中使用字符编码格式的处理

使用了过滤器和包装器。过滤器需要在web.xml容器中进行注册,才能被web容器识别

 <filter>
      <filter-name></filter-name>
      <filter-class><filter-class></filter>
 <filter-mapping>
      <filter-name></filter-name>
      <url-pattern></url-pattern >(<servlet-name></servlet-name>)
 </filter-mapping > 

如果有多个过滤器优先执行url-pattern,再执行servlet-name;如果有多个url-pattern按web.xml布署顺序执行。

44、谈谈监听器的原理、配置及使用。你在项目中是怎么用的?

用于监听请求,会话,上下文件对象相关事件,并在事件发生后作出处理。

只要写一个类实现相应的监听器接口,就写了一个相应的监听处理类。

在web.xml中使用

 <listener>
       <listener-class></listener-class>
 </listener> 

45、Servlet中forward() 与redirect()的区别?

1. forward客户端请求服务器一次,redirect请求服务器两次,所以forward方式可以获得request作用域的信息,而redirect方式不能获得。 
2. forward由request对象发出,而redirect由response对象发起 
3. redirect()可以跨越不同的工程之间。而forward()只能在一个工程中使用

46、class.forname的作用?为什么要用?

加载类;一般使用这个方法是反射方式创建对象;从而可以将一些类信息写在文件中,避免硬编码,增加灵活性。

74、项目各个阶段会产生什么样的文档?都有什么作用? 
75. 项目结构是如何划分的?应该注意些什么?

你是否从其它人的表中调用数据,如何进行协调?

java web面试的更多相关文章

  1. java web面试技巧,数据库面试,java web轻量级开发面试教程

    我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...

  2. java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试

    本内容摘自 java web轻量级开发面试教程 https://baike.baidu.com/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80% ...

  3. JAVA WEB面试总结

    本文目录: 1. 什么是cookie 2. 什么是session 3.什么是Servlet,Servlet生命周期方法 4.JSP隐含对象 5.JSP的四个域对象的作用范围 6.转发和重定向的区别 7 ...

  4. JAVA面试精选【Java web部分一】

    Java的基础知识点就太多了,要说也不能穷尽,这个主要是靠自己在平时的积累和项目的开发经验,外边考的多的一般是继承,多态,线程,集合等等,但是笔试或者是面试中很有可能问许多集体的内容,比如hashMa ...

  5. Java Web架构知识整理——记一次阿里面试经历

    惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...

  6. java web方面的面试问题,Spring MVC方面的面试问题,摘自java web轻量级开发面试教程

    本文摘自java web轻量级开发面试教程: https://baike.baidu.com/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80%E ...

  7. java web轻量级开发面试教程内容精粹:哪些简历得不到面试机会

    看到一本较好的实践性比较强的书,java web轻量级开发面试教程,里面的一些内容很有实践意义. 问题点 很难获得面试机会的原因 学历不符,比如要求是本科以上,但学历是大专 学历是硬指标,所以达不到学 ...

  8. Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试

    如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即 ...

  9. java web轻量级开发面试教程读书笔记:建索引时我们需要权衡的因素

    场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. ...

随机推荐

  1. 修改document.domain的注意事项(转)

    有时候,需要修改document.domain. 典型的情形:http://a.xxx.com/A.htm 的主页面有一个<iframe src="http://b.xxx.com/B ...

  2. 保存iptables的防火墙规则的方法【转载】

    转自: 保存iptables的防火墙规则的方法 - 51CTO.COMhttp://os.51cto.com/art/201103/249504.htm 保存iptables的防火墙规则的方法如下: ...

  3. form 表单 enctype 属性-(转自w3c)

    <from action="xxx.xxx" enctype="multipart/form-data"></from> 在上传文件时必 ...

  4. ZOJ 3939The Lucky Week<模拟/暴力>

    题意:我们认为日期的天数为1,11,21,并且是周一的为Lucky Week;现在给出第一个lucky week的日期,求第N个的lucky week: //1:四百年一轮回,从闰年和平年的判定可以推 ...

  5. Java回调函数的理解

    所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...

  6. iptables-过滤61开头的ip数据包

    iptables -F root@android:/system/bin # iptables -L -n iptables -L -n Chain INPUT (policy ACCEPT) tar ...

  7. (转)Hadoop MapReduce链式实践--ChainReducer

    版本:CDH5.0.0,HDFS:2.3.0,Mapreduce:2.3.0,Yarn:2.3.0. 场景描述:求一组数据中按照不同类别的最大值,比如,如下的数据: data1: A,10 A,11 ...

  8. HDU 4287 Intelligent IME(字典树)

    在我没用hash之前,一直TLE,字符串处理时间过长,用了hash之后一直CE,(请看下图)我自从经历我的字典树G++MLE,C++AC以后,一直天真的用C++,后来的CE就是因为这个,G++才支持这 ...

  9. jTDS Java连接SQL Server 2000数据库

    Java连接SQL Server 2000数据库时,有两种方法: (1)通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别 是mssqlserver.jar.msutil.ja ...

  10. zencart 具体页面调用规则: $body_code变量解析

    zencart $body_code变量解析 修改centerColumn 可以修改中间产品方框的大小 2.2.5 .BODY文件在这个文件生效 require($body_code) include ...