java web面试
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
- •连接URL定义了连接数据库时的协议、子协议、数据源标识。
- •书写形式:协议:子协议:数据源标识
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面试的更多相关文章
- java web面试技巧,数据库面试,java web轻量级开发面试教程
我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...
- 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% ...
- JAVA WEB面试总结
本文目录: 1. 什么是cookie 2. 什么是session 3.什么是Servlet,Servlet生命周期方法 4.JSP隐含对象 5.JSP的四个域对象的作用范围 6.转发和重定向的区别 7 ...
- JAVA面试精选【Java web部分一】
Java的基础知识点就太多了,要说也不能穷尽,这个主要是靠自己在平时的积累和项目的开发经验,外边考的多的一般是继承,多态,线程,集合等等,但是笔试或者是面试中很有可能问许多集体的内容,比如hashMa ...
- Java Web架构知识整理——记一次阿里面试经历
惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...
- 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 ...
- java web轻量级开发面试教程内容精粹:哪些简历得不到面试机会
看到一本较好的实践性比较强的书,java web轻量级开发面试教程,里面的一些内容很有实践意义. 问题点 很难获得面试机会的原因 学历不符,比如要求是本科以上,但学历是大专 学历是硬指标,所以达不到学 ...
- Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试
如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即 ...
- java web轻量级开发面试教程读书笔记:建索引时我们需要权衡的因素
场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. ...
随机推荐
- 修改document.domain的注意事项(转)
有时候,需要修改document.domain. 典型的情形:http://a.xxx.com/A.htm 的主页面有一个<iframe src="http://b.xxx.com/B ...
- 保存iptables的防火墙规则的方法【转载】
转自: 保存iptables的防火墙规则的方法 - 51CTO.COMhttp://os.51cto.com/art/201103/249504.htm 保存iptables的防火墙规则的方法如下: ...
- form 表单 enctype 属性-(转自w3c)
<from action="xxx.xxx" enctype="multipart/form-data"></from> 在上传文件时必 ...
- ZOJ 3939The Lucky Week<模拟/暴力>
题意:我们认为日期的天数为1,11,21,并且是周一的为Lucky Week;现在给出第一个lucky week的日期,求第N个的lucky week: //1:四百年一轮回,从闰年和平年的判定可以推 ...
- Java回调函数的理解
所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...
- iptables-过滤61开头的ip数据包
iptables -F root@android:/system/bin # iptables -L -n iptables -L -n Chain INPUT (policy ACCEPT) tar ...
- (转)Hadoop MapReduce链式实践--ChainReducer
版本:CDH5.0.0,HDFS:2.3.0,Mapreduce:2.3.0,Yarn:2.3.0. 场景描述:求一组数据中按照不同类别的最大值,比如,如下的数据: data1: A,10 A,11 ...
- HDU 4287 Intelligent IME(字典树)
在我没用hash之前,一直TLE,字符串处理时间过长,用了hash之后一直CE,(请看下图)我自从经历我的字典树G++MLE,C++AC以后,一直天真的用C++,后来的CE就是因为这个,G++才支持这 ...
- jTDS Java连接SQL Server 2000数据库
Java连接SQL Server 2000数据库时,有两种方法: (1)通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别 是mssqlserver.jar.msutil.ja ...
- zencart 具体页面调用规则: $body_code变量解析
zencart $body_code变量解析 修改centerColumn 可以修改中间产品方框的大小 2.2.5 .BODY文件在这个文件生效 require($body_code) include ...