面试题

1.JDBC中Statement和PrepareStatement?

PrepareStatement效率更好些,更加安全。
PrepareStatement效率主要体现在,如果SQL不改变,注意是采用问号占位符方式,只编译一次,这样再次使用该SQL将会省去编译的时间,提高整体执行效率。为什么SQL要编译,因为SQL也是一门语言和Java一样使用时需要编译。
PrepareStatement安全性主要体现在,采用问号方式,可以防止SQL注入。
 
2.简单谈一下Java类装载器
Java字节码运行需要类装载器,将其装载到内存中,Java的类装载器主要有启动类装载器,扩展类装载器及应用类装载器,使用双亲委派的方式装载,这样更具安全性。
 
3.转发和重定向的区别?
 转发:
共享request,URL地址栏不改变‘
重定向:
不共享request,URL地址栏改变 
 
4.BS和CS架构的优缺点?
 BS架构一般称为瘦客户端
1、优点:
BS架构的项目分发比较方便,当页面发生改变后,客户端不用安装
2、缺点
客户端页面响应速度慢,页面的灵敏度差

CS架构一般称为胖客户端
1、优点
客户端页面响应速度快,页面灵敏度好
2、缺点
CS架构的项目分发不方便,当页面发生改变,客户端需要重新安装

一个项目应该根据具体情况来选择是采用BS还是CS,复杂的项目通常都是BS和CS相结合使用的。要求灵敏度高的项目最好采用CS,对页面没有太高的灵敏度的可以考虑BS。 
 
5.String,StringBuffer和StringBuilder区别?
String是不可变对象,每次字符串的相加和相减都会生成新的对象,如果大量的进行字符串的相加和相减不建议使用String,这样会占用JVM的内存,另外String被final修饰不可以继承,String实现了序列化接口和比较接口。
StringBuffer是可变长度的,所有的方法都是同步的,是线程安全的,性能不好。
StringBuilder是可变长度的,不是线程安全的,在不需要线程安全的情况下,优先考虑使用,性能高于StringBuffer。

String、StringBuffer和StringBuilder都是char数组实现的,StringBuffer和StringBuilder默认初始化char数组为16个长度,当16个元素用完了,每次按照(原长度+1)*2进行扩容,主要采用System.arrayCopy()完成。
 
6.S2SH的集成原理
 他们主要和Spring集成,Struts2和Spring集成主要将Struts2的Action交给Spring创建,这样可以使用Spring的DI,使用DI可以解耦和,Hibernate和Spring的集成主要采用Spring提供的声明式事务,一般采用AOP完成,这样可以简化事务的控制。
 
7.简要说一下Struts2的执行流程
执行流程如下:
 一个请求发送过来,由StrutsPrepareAndExecuteFilter接收,进行判断是否是Action,如果不是Action执行chain.doFilter()输出页面,,如果是Action将会创建ActionInvocation,再创建ActionProxy,执行ActionProxy上的Prepare方法准备出Action和Interceptor,Action采用ObjectFactory创建好后放到ActioniInvocation的成员变量上,将默认的18个拦截器放到ActionInvocation的成员变量上,再执行ActionProxy上的exeucte方法,执行18个拦截器,执行完成后执行Action上的方法,Action上的方法执行完成后返回字符串,根据返回的字符串采用ObjectFactory创建Result对象,将创建好的Result对象放到ActionInvocation上,再调用Result对象上的execute方法转向视图,拦截器出栈,最后返回到浏览器。
 
8.如何理解Transaction?
 Transaction是多个操作的逻辑单元,采用Transaction可以保证ACID特性。
A(原子性)最基本的一个特性,要么全成功要么全失败;
C(一致性)可以保证从一种状态到另一种状态的一致性;
I(隔离性)分为四个,未提交读,提交读,可重复读,序列化读;
D(持续性)事务一旦提交,将不能回滚。
 
9.为JavaScript中的String扩展一个trim()函数?
 可以采用prototype关键字并结合正则表达式完成。
//伪代码如下
String.prototype.trim=function() {
    return this.replace(/^s+/, "").replace(/s+$/, "");
 
10.一个等号代表赋值;两个等号只对比值,不对比类型;三个等号对比值还对比类型。
 //伪代码如下
var v1= "1"; //赋值
var v2=1; //赋值
alert(v1==v2);  //返回true
alert(v1===v3); //返回false 
 
11.用过哪些web services框架,特点和场合?
 Web Services主要是一项技术,它主要解决异构系统的通信,Java对Web Services主要提供了两种规范JAX-WS和JAX-RS,主要实现框架有CXF和Axis,他们都是apache的项目,CXF具有和Spring完美整体的特点,更容易的使用Spring的哲学思想,Axis的互通信方面比较好,更容易的兼容其它语言的访问。
 
12.写一个单例模式,说一下优缺点和应用场景
 单例模式是GoF中的创建型设计模式,单例模式主要保证在内存中只创建一个对象。
优点:
    1、节约内存开销
缺点:
    1、失去了面向对象的重要特征继承和多态
    2、当拥有可修改成员变量时,小心线程安全问题 
应用场景:
    1、可以使用单例读取配置文件,这样可以读取一次,减少io及程序的稳定性
    2、可以采用单例做一个缓存
单例的三个必要条件
    1、私有的类的静态变量
    2、私有的构造器
    3、公共的静态的入口方法
//伪代码如下
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton() {}
    public static  Singleton getInstance() {
        return instance;
    }
}
 
13.你对Facade模式的理解
 Facade属于GoF的结构型设计模式,翻译过来也叫门面模式或外观模式,Facade模式主要体现了,提供统一入口对系统进行访问,这样系统访问更加规整,不需要了解更细节的实现,如一个公司设置了一个前台职位一样,这个前台就是这个公司的Facade,当你去这个公司办事,这个公司的前台首先接待你(这样更加统一),如果联系其他部门由这个前台负责,这样就省去了你和其他部门直接进行联系的复杂过程。像Hibernate中的SessionFactory从统一入口的场景考虑就是一个Facade,还有Spring的BeanFactory从统一入口的场景考虑也是一个Facade。
 
14.Servlet的生命周期
 Servlet称为服务器端的小程序,主要用来接收服务器创建好的request和response对象的,Servlet第一次访问的时候进行实例化,是单实例多线程的,在实例化后会调用init()方法,每次访问Servlet时会调用service方法,根据请求方式来调用doGet或doPost方法,当Servlet卸载后会调用destory方法。
 
15.您用到了Apache的哪些开源项目?
Tomcat,Struts,POI,commons fileupload,Ant,CXF,Axis,James,DBCP等等。
 
16.
 
奋斗奋斗奋斗奋斗奋斗奋斗奋斗奋斗生命在于奋斗,也为自己带盐奋斗奋斗奋斗奋斗奋斗奋斗奋斗奋斗
原文地址:https://www.cnblogs.com/hardwork/p/4303554.html