Java高级工程师常见面试题(三)-Java Web

1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗, 考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
   将登陆信息等重要信息存放为SESSION。
   其他信息如果需要保留,可以放在COOKIE中。
cookie 和session 的联系:
由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所 以session机制可能需要借助于cookie机制来达到保存标识的目的(保存这个session id的方式可以采用cookie),但实际上它还有其他选择。
经常被使用的一种技术叫做 URL重写,就是把session id直接附加在URL路径的后面。
还有一种技术叫做 表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如: 
<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> 
<input type="text"> 
</form> 
实际上这种技术可以简单的用对action应用URL重写来代替。
session的生命周期:
Session存储在服务器端,一般放在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
  Session什么时候失效?
  1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
  2. 调用Session的invalidate方法。
多个服务部署时session管理:
1、在服务器端不保存Session,完全无状态
     对于不需要保持用户状态的Web应用,采用Stateless是最为恰当的,因此就不存在Session共享的问题。REST (Representational State Transfer) 算是最为典型的例子。
2、基于浏览器Cookie的Session共享
      此种方案把用户相关的Session信息存储到浏览器的Cookie中,也称为客户端Session。
      采用Flash Cookie、URL重写的方式传递Session信息的方案也可以归为此类。
      缺点:只能够存储字符串、数值等基本类型的数据;Cookie大小存在限制;安全性;带宽及数据解压缩、网络传输性能问题。
3、基于数据库的Session共享,实现分布式应用间Session共享
     此种方案把Session信息存储到数据库表,这样实现不同应用服务器间Session信息的共享。
优点:实现简单
缺点:由于数据库服务器相对于应用服务器更难扩展且资源更为宝贵,在高并发的Web应用中,最大的性能瓶颈通常在于数据库服务器。因此如果将 Session存储到数据库表,频繁的增加、删除、查询操作很容易造成数据库表争用及加锁,最终影响业务。
4、基于应用服务器/Servlet容器的Clustering机制
        一些常用的应用服务器及Servlet容器的Clustering机制可以实现Session Replication的功能,例如Tomcat Clustering/Session Replication、Jboss buddy replication。
         缺点:基于Clustering的Session复制性能很差,扩展性也很不行。
5、基于NFS的Session共享
         通过NFS方式来实现各台服务器间的Session共享,各台服务器只需要mount共享服务器的存储Session的磁盘即可,实现较为简单。但NFS 对高并发读写的性能并不高,在硬盘I/O性能和网络带宽上存在较大瓶颈,尤其是对于Session这样的小文件的频繁读写操作。
        基于磁盘阵列/SAN/NAS等共享存储的方案道理也类似。
6、基于Terracotta、Ehcache、JBossCache等Java Caching方案实现Session共享
    如果系统架构是Java体系,可以考虑采用Terracotta、Ehcache、JbossCache、Oscache等Java Caching方案来实现Session 共享。
    缺点:架构用于非java体系很不方便;对于是诸如静态页面之类的缓存,采用Memcached的方案比Java更为高效
7、基于Memcached/Tokyo Tyrant 等Key-Value DB的Session共享
    整体说来此种方案扩展性最好,推荐使用。
    原理:Tomcat 服务器提供了org.apache.catalina.session.StandardManager 和org.apache.catalina.session.PersistentManager用于Session对象的管理,可以自定义 PersistentManager的
Store 类来实现自己Memcached、Tokyo Tyrant、Redis等Key-Value DB的客户端。
2. servlet的一些相关问题
3. webservice相关问题
4. jdbc连接,forname方式的步骤,怎么声明使用一个事务。举例并具体代码
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),   
这通过java.lang.Class类的静态方法forName(String  className)实现。   
例如:   
try{   
//加载MySql的驱动类   
Class.forName("com.mysql.jdbc.Driver") ;   
}catch(ClassNotFoundException e){   
System.out.println("找不到驱动程序类 ,加载驱动失败!");   
e.printStackTrace() ;   
}   
成功加载后,会将Driver类的实例注册到DriverManager类中。
JDBC事务机制:
private Connection conn = null;  
private PreparedStatement ps = null;  
try {  
    conn.setAutoCommit(false);  //将自动提交设置为false  
    ps.executeUpdate("修改SQL"); //执行修改操作  
    ps.executeQuery("查询SQL");  //执行查询操作                 
    conn.commit();      //当两个操作成功后手动提交  
} catch (Exception e) {  
    conn.rollback();    //一旦其中一个操作出错都将回滚,使两个操作都不成功  
    e.printStackTrace();  
}
5. 无框架下配置web.xml的主要配置内容
1、指定欢迎页面。
2、命名与定制URL。我们可以为Servlet和JSP文件命名并定制URL,其中定制URL是依赖一命名的,命名必须在定制URL前。
3、定制初始化参数:可以定制servlet、JSP、Context的初始化参数,然后可以再servlet、JSP、Context中获取这些参数值。
4、指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。
5、设置过滤器:比如设置一个编码过滤器,过滤所有资源。
6、设置监听器。
7、设置会话(Session)过期时间,其中时间以分钟为单位。
其他:Web应用图标、Web 应用名称、Web 应用描述、上下文参数等。
6. jsp和servlet的区别
1.jsp经编译后就变成了Servlet。
( JSP的本质就是Servlet ,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于 页面显示 ,servlet更擅长于逻辑控制。
3.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,用来做控制。

猜你喜欢

转载自blog.csdn.net/u014378181/article/details/80801124