zoukankan      html  css  js  c++  java
  • 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响应到客户端浏览器
  • 相关阅读:
    ICONS-图标库
    图形资源
    vue项目中,如果修改了组件名称,vscode编辑器会在引入修改组件的名字处提示红色波浪线 The file is in the program because:Imported via xxx Root file specified for compilation .
    接口在dev环境报跨域问题(has been blocked by CORS policy:Response to preflight request doesn't pass access control check:No 'Access-Control-Allow-Origin' header ispresent on the requested resource.),qa环境正常
    阿里云occ的图片文件URL用浏览器直接打开无法访问,提示This XML file does noe appear to have any style information associated with it. The document tree is shown below.
    vue 项目使用element ui 中tree组件 check-strictly 用法(父子不互相关联的反显情况)
    高德地图进行线路规划绘制标记点操作(vue)
    vue中实现拖拽调整顺序功能
    2021-01-22 浏览器相关知识
    2021-01-22 js 相关知识点
  • 原文地址:https://www.cnblogs.com/zhangxiaofei/p/7494389.html
Copyright © 2011-2022 走看看