• 笔试题。


    1、简述你所知道的JAVA修饰符及各自的使用机制?(public、abstract、final、synchronized、super…

    public :允许所有客户访问

    protected:只能在本包内被该类的子类所使用

    private:只允许在本类内使用

    abstract:没有提供实现,需要子类提供

    static:与整个类相关,与单个对象无关

    final:你只能定义一个实体一次,以后不能改变它或继承它。一个final修饰的类不能被子类化,一个final修饰的方法不能被重写,一个final修饰的变量不能改变其初始值

    synchronized:方法获得对对象监控的访问权;如果该方法是static类型的,获得是对类本身的访问权。

    super:构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。

    2、String、StringBuffer与StringBuilder之间区别?并简述各自的执行效率?

    区别:String类型和StringBuffer类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String对象,然后将指针指向新的String对象,建议经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,那速度是一定会相当慢的

    执行速度:三者在执行速度方面的比较:StringBuilder > StringBuffer > String

    使用场景:1.如果要操作少量的数据用String

    2.单线程操作字符串缓冲区下操作大量数据StringBuilder

    3.多线程操作字符串缓冲区下操作大量数据StringBuffer

    2静态变量和实例变量的区别?能在静态方法中调用非静态变量吗?

    静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。实例变量属于该类的对象,必须产生该类对象,才能调用实例变量

    静态方法及变量属于整个类,数据将会被存储在公共区域,非静态方法及变量属于对象

    静态方法中无法调用实例变量,而实例方法却可以调用静态变量

    2继承和接口是什么?以及他们的区别?

    1.接口定义一个类需要实现的方法、属性、索引、事件和可能的参数返回值类型,具体的实现交由相应的类或结构,从而实现多态;而继承用于在一个现有父类基础上的功能扩展,把几个类中相同的成员提取出来,放在一个父类中,在子类中添加独特的方法,即继承扩展

    2.接口能够实现多接口继承,而继承只能实现单继承

    3.继承能够获得父类方法的实现,而接口只能获得方法的定义,所以必须获得所有的方法

    4.在继承中,为父类添加方法不影响子类的继承,但在接口中 为父类添加一个方法定义 必须在子类中添加此方法的实现  

    3、HashMap和Hashtable的区别?

     1,Hashtable是基于陈旧的Dictionary类的,HashMap是Map接口的一个实现。

     2,Hashtable的方法是同步的,而HashMap的方法不是

     3,只有HashMap可以让你将空值作为一个表的条目的key或value

    4、抽象类(abstract class)和接口(interface)有什么区别?

    1、抽象类和接口都不能直接实例化,但是抽象类有构造方法,接口没有构造方法。

    2、抽象类与具体类是extends关系,只能单extends,如果具体类extends了抽象类,则具体类要重写抽象类里面的抽象方法,否则该具体类也要是一个抽象类;接口与具体类是implements关系,可以多实现,如果具体类implements了接口,则具体类要重写抽象类里面的抽象方法,否则该具体类也要是一个抽象类。

    3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。

    4、接口里定义的变量只能是公共的静态的final的常量,抽象类中的变量是普通变量。

    5、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果。

    6、抽象类是abstract定义的,接口是interface定义的。

    5、重载(Overload)和重写(Override)的区别。Overload的方法是否可以改变返回值的类型?

    Overload是重载,是有相同的方法名,但参数类型或个数彼此不同,Overload能改变方法的返回值类型。

    Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,在子类中覆盖掉了父类的改方法。

    6、你所知道的集合类都有哪几类?主要区别有哪些并简单描述?

    集合类型主要有3种:set(集)、list(列表)和map(映射)

    Set

    它的对象不按特定方式排序,只是简单的把对象加入集合中

    对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。

    列表 List

    List接口与其实现类是容量可变的列表,可以按照索引访问集合中的元素,是有序的集合

    列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。常用的有ArrayList vector

    映射 Map

    映射中每个项都是成对的,Map是把键对象和值对象进行关联的容器。

    映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,关键字应该是唯一的,常用的有HashMap,HashTable

    7、JAVA Servlet API中forward() 与redirect()的区别?

    使用forward的时候浏览器不知道它所请求的具体资源来源,所以地址栏不会变;

    使用redirect,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。

    forward,转发页面和转发到的页面可以共享request里面的数据.redirect,不能共享数据.

    8、写出JSP的常用内置对象?以及每个内置对象的简单介绍?

    1.page对象

    2.pageContext对象

    3.request对象

    4.session对象

    5.application对象

    6.response对象

    7.config对象

    8.execption对象

    9.out对象

    9JAVA解析XML有哪几种方法?并简述各自的优缺点

    DOM:

    是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。是基于信息层次的;优点有:由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。  

    SAX :

    对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如SAX。这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。

    JDOM

    目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。

    DOM4J:

    它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML   Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java   XML   API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J。

    9、概述MVC体系结构及优点

    M:模型(Model),V:视图(View),C:控制Controller)。

    MVC模式的目的就是实现Web系统的职能分工。

    Model层实现系统中的业务逻辑。 View层用于与用户的交互。Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

    概括一下吧,用户浏览,由URL路由解析地址,如何指定对应的控制器(C)去处理,结合业务逻辑层(M),处理数据,比方说增删改查,完成之后,在调用指定的 视图(V),把处理的结果回传给用户.

    意义就是:职能分工

    10、介绍你所知道的J2EE中常用的设计模式,并简单介绍工厂模式

    Factory(工厂模式),      Builder(建造模式),       Factory Method(工厂方法模式),

    Prototype(原始模型模式),Singleton(单例模式),    Facade(门面模式),

    Adapter(适配器模式),    Bridge(桥梁模式),        Composite(合成模式),

    Decorator(装饰模式),    Flyweight(享元模式),     Proxy(代理模式),

    Command(命令模式),      Interpreter(解释器模式), Visitor(访问者模式),

    Iterator(迭代子模式),   Mediator(调停者模式),    Memento(备忘录模式),

    Observer(观察者模式),   State(状态模式),         Strategy(策略模式),

    Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

    工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。(自己理解的工厂模式:一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例)

    11. 线程和进程的区别?实现多线程的方式有哪几种?如何实现多线程同步?

    区别:

    线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享;而 线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程之间可以在进程范围内共享数据。也就是说进程有自己独立的存储空间,而线程是 和它所属的进程内的其他线程共享一个存储空间。

    实现多线程的方法:

    1、继承java.lang.Thread,并重写它的run()方法,将线程的执行主体放入其中。 

    2、实现java.lang.Runnable接口,实现它的run()方法,并将线程的执行主体放入其中。

    如何实现线程同步:

    给一个方法增加synchronized修饰符之后就可以使它成为同步方法,这个方法 可以是静态方法和非静态方法,但是不能是抽象类的抽象方法,也不能是接口中的接口方法

    12:中的异常处理机制的简单和应用。

    当Java程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是Java类库内置的语义。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类

    13:线程同步的方法(类里有哪些方法来支持线程同步)。

    wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

    sleep():使一个正在运行的线程处于睡眠状态,是静态方法,调用此方法要捕捉InterruptedException异常。

    notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切地唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

    Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

    14. Error与Exception有什么区别

    Error表示系统级的错误和程序不必处理的异常,

    Exception表示需要捕捉或者需要程序进行处理的异常。

    15.谈谈final, finally, finalize的区别。

      final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

      finally—异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

      finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的

    javascript总结:

    1. 如何弹出带确认取消按钮的提示框,如确定保存吗?”,以及如何实现带输入框的提示框?

    confirm(“确定保存吗?”)

    prompt(“输入意见”)

    2.Javascript有哪些打开一个页面的方式?

    window.open(sURL [, vArguments] [,sFeatures]) 新页面

    window. showmodaldialog(sURL [, vArguments] [,sFeatures]) 模态对话框

    window.showModelessDialog(sURL [, vArguments] [,sFeatures]) 非模态对话框

    3.页面加载完后调用js方法如何实现?

    body标签加onload事件,如<body onload=”alert(1);”>

    4.Javascript如何做到在子页面中调用父页面的js函数或全局变量(test()函数,test变量)

    window.opener.test();

    Window.opener.test = “abc”;

    5.Javascript中定时执行如何实现?

    setTimeout();定时执行,执行一次。clearTimeout(定时器对象名)结束

    setInterval();定时执行,一直执行。clearInterval(定时器对象名)结束

    两种区别:

    setTimeout();定时执行,执行一次。clearTimeout(定时器对象名)结束;

    setInterval();定时执行,一直执行。clearInterval(定时器对象名)结束

    6.innerHTMLouterHTML的区别是什么?

    innerHTML取页面元素标签内部的内容,outerHTML取包含元素标签的内容,如<a href=”test.jsp”>test</a>,innerHTML取到test,outerHTML取到<a href=”test.jsp”>test</a>.

    7. javascript如何做到页面局部刷新?

    使用AJAX。原理:获取一个请求对象,向指定url发送请求,当请求完成时(状态4),获取到请求返回内容,并将内容填充到页面局部。

    数据库相关

    1. 存储过程和函数的区别?

    存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

    2. oracle中truncate和delete命令有何区别?

    delete将在回滚段中产生回滚信息,truncate不产生,因此无论表中的记录多少,truncate执行都很快

    truncate 是 DDL,执行隐含的commit,truncate不能回滚

    3. Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别?

    A:char是定长字符类型,varchar2是变长字符类型。“test”在char(10)中被补齐空格,存储长度是10字节,在varchar2(10)中存储长度是4字节

  • 相关阅读:
    贝塞尔曲线
    View Transform(视图变换)详解
    list::splice()函数详解
    c语言宏定义
    Shadow mapping
    spring管理事务
    sql标准支持了事务隔离级别
    java cocurrent并发包
    spring事务详细理解
    spring aop提供了两种实现方式jdk和cglib
  • 原文地址:https://www.cnblogs.com/javacatalina/p/6660296.html
Copyright © 2020-2023  润新知