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. Android Studio的使用(八)--// TODO代码

    我们都知道Eclipse存在// TODO代码,该段代码在方法中用于标识该方法仍未完成,也可以用于作为该方法的一个快捷键.例如我们可以用于标识onClick()方法,当我们需要查找onClick()方 ...

  2. Using Sphinx to index CNS database

    1, look at the sphinx.person.address.conf to see how to configure the conf file2, index the database ...

  3. 一个有意思的 hta 程序 (html application)

    哈哈,刚才同事给我讲了一个hta 程序,他自己说最近在学html5 开发坦克大战,不错,这种好奇心, 好学的精神值得我这个程序员学习,感觉他的视野面比我这个程序员还广,有点小惭愧. 什么是hta 呢? ...

  4. 转 玩转Bash变量

    PS : 注意本文讨论的是Bash,而不一定是/bin/sh所链接的那个shell.这里出现的所有代码片段,默认在顶上都添加了#!/bin/bash. 一门自带混淆的语言 while (( $# )) ...

  5. Fusioncharts图表组件API参考方法(Functions)汇总篇(续)

    [摘要]: chartType()FusionCharts的JavaScript类API提供了大量的功能.下面的列表显示在每个功能的详细信息: 一.FusionCharts的类 - 实例功能 1.co ...

  6. mysql查询数据库约束

    SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where TABLE_SCHEMA='mold' and TABLE_NAME='tplmi ...

  7. HTML5的兼容问题以及调用js文件的方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Python3基础 当函数中的局部变量与全局变量同名了,各管各的

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  9. Java去除字符串中的空格

    特别注意了 Strim或者Trip都是只能去除头部和尾部的空字符串.中间的部分是不能够去除的! 推荐使用ApacheCommonse的StringUtils.deleteWhitespace(&quo ...

  10. 可能是最简单的方式:利用Eclipse创建基于Maven的Web项目

    1. 新建一个maven项目 2.在弹出框中选择创建一个简单项目 3. 然后输入参数,需要注意的是,在packagin中,选择war,web项目应该选择war 4. 点击finish后,基本项目结构就 ...