java面试题

 1.单例
class Singleton{
    private Singleton(){}
    private static Singleton singleton = null;
    public static Singleton getSingleton(){
        if(singleton == null){
            synchronized(Singleton.class){
                if(singleton == null)
                    singleton = new Singleton();
            }
        }
        return singleton;
    }
}
2.sql语句
3.二分查找

catch运行时异常:运行时异常唯一的一点不同就是不需要手动catch,但也可以手动catch,其他没有什么不同。
 

1.struts的理解
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6、返回HTTP响应到客户端浏览器

一个请求在struts2中的处理过程
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
来源: http://blog.csdn.net/laner0515/article/details/27692673/ 




2.hibernate的实现原理
1.通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/User.hbm.xml"/>读取并解析映射信息
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.关闭Session
9.关闭SesstionFactory
来源: http://blog.csdn.net/u010197033/article/details/47276891 




3.购物车生成的过程所使用的技术
首先是Ajax技术提交一个异步的请求,请求中得带商品以及数量的参数,到达处理方法后,先从session域中获取到登陆的用户,然后调用购物车表的dao方法,将得到的这个信息写入到数据库中,即为完成了购物车的生成。

5.映射和反射的原理
反射其实就是在程序执行的任何地方,我们都可以获取到已知类名或者一个对象的类的所有信息的。
反射的原理:我们编写好的类在电脑上是以class文件的方式存在的,当它被jvm加载到内存中的时候,一个类的所有信息就被封装到了Class类的对象中,我们可以通过这个对象的方法得到这个类的属性,构造器,方法等信息。

7.JavaScript的继承
8.参数传递

9.jvm理解

10.jsp的内置对象
request,response,application,page,out,exception,config,pageContext,session

11.JavaWEB的作用域
request,session,page,context

12.避免表单重复提交
在加载表单页面时在session中放一个参数,并且在表单的隐藏域中放置一个相同的参数,在表单提交后服务器对比隐藏域中的参数和session中的参数,若一致就接受表单并处理,而且将该属性从隐藏域中移除

13.StringBuffer和StringBuilder的区别
StringBuffer是早出的所以他是线程安全的
1.
package beidayixin;
public class TestOne {
    public static void main(String[] args) {
        new Three();//Three's ss    Three's ss
    }
}
class Two{
    public Two() {
        ss();
    }
    public void ss(){
        System.out.println("Two's ss");
    }
}
class Three extends Two{
    public Three() {
        ss();
    }
    public void ss(){
        System.out.println("Three's ss");
    }
}

2.
package beidayixin;
public class TestTwo {
    public static void main(String[] args) {
        System.out.println(jiecheng(1));
    }
    public static int jiecheng(int n){
        if(n > 0)
            return n*jiecheng(n-1);
        else if(n == 0)
            return 1;
        else
            return -1;//代表无阶乘
    }
}

3.
package beidayixin;
public class TestThree {
    public static void main(String[] args) {
        String s = "Hello";
        chuLi(s);
        System.out.println(s);//Hello
    }
    public static void chuLi(String s){
        s = s + "World";
    }
}
 姬云飞 2017/9/8 0:39:03
hashMap的原理:
首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。

线程池
如果程序中并发的线程很多,而每个线程执行的时间有很短,那么 频繁的创建和销毁线程就会消耗大量的时间,,线程池的话就是使线程可以复用,执行完了不销毁而是继续执行其他的任务




MVC
MVC的具体含义是:model+view+control,即模型+视图+控制它们各自处理自己的任务:
(1)模型:模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。
(2)视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图。
(3)控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。
MVC模式将它们分离以提高系统的灵活性和复用性,不使用MVC模式,用户界面设计往往将这些对象混在一起。MVC模式实现了模型和视图的分离,这带来了几个好处。
(1)一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。
(2)模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
(3)提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑和数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。
总的来说MVC设计模式可以方便开发人员分工协作,提高开发效率,增强程序的可维护性和拓展性而且还利用Controller将Model与View分离,降低它们之间的耦合度。


Spring的两大核心
IOC容器和AOP编程
hibernate调优
jsp和servlet的区别
有许多相似之处,都可以生成动态网页。
JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。
Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。

struts和Struts2

抽象类和接口的区别
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

servlet的生命周期
1,初始化阶段  调用init()方法
2,响应客户请求阶段  调用service()方法
3,终止阶段  调用destroy()方法
Servlet初始化阶段:
在下列时刻Servlet容器装载Servlet:
1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:
<loadon-startup>1</loadon-startup>
2,在Servlet容器启动后,客户首次向Servlet发送请求
3,Servlet类文件被更新后,重新装载Servlet
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
Servlet响应请求阶段:
对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象 ,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。
Servlet终止阶段:
当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。
Servlet何时被创建:
1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。
2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。
注意:在web.xml文件中,某些Servlet只有<serlvet>元素,没有<servlet-mapping>元素,这样我们无法通过url的方式访问这些Servlet,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。
Web应用何时被启动:
1,当Servlet容器启动的时候,所有的Web应用都会被启动
2,控制器启动web应用

jsp内置对象
request、response、session、application、out、pagecontext、config、page、exception

作用域
page:当前页面,也就是只要跳到别的页面就失效了
request:一次会话,简单的理解就是一次请求范围内有效
session:浏览器进程,只要当前页面没有被关闭(没有被程序强制清除),不管怎么跳转都是有效的
application:服务器,只要服务器没有重启(没有被程序强制清除),数据就有效

怎么理解作用域
在与服务器交互的过程中,将一类生命周期相同的属性放在一起就是一个作用域

动态页面技术
jsp,asp

转发和重定向的区别
当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用。

jsp静态导入和动态导入
1、静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
2、静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
3、动态导入还可以增加额外的参数。即如下代码方式:
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
<jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>

面向对象特性
封装,继承,多态,抽象

五大基本原则
单一指责
里氏代换原则
开放封闭原则
依赖原则
接口分离原则

hibernate原理
线程各个状态


反射的原理

Struts2原理
1、客户端浏览器发出HTTP请求.

2、根据web.xml配置,该请求被FilterDispatcher接收

3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton

4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面

6、返回HTTP响应到客户端浏览器
原文地址:https://www.cnblogs.com/zhangxiaofei/p/7494389.html