• 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响应到客户端浏览器
  • 相关阅读:
    UIPickerView-一.01-
    闭包-01-Swift
    Swift 入门-01-概述
    git使用命令行-01-自己操作的
    FetchedResultsController-03-CoreData相关
    SQLite-05-增删改查
    Sqlite函数总结-04
    List<string>转xml
    比较两个List<T>是否相同
    获取DataTable前几条数据
  • 原文地址:https://www.cnblogs.com/zhangxiaofei/p/7494389.html
Copyright © 2020-2023  润新知