• java面试笔试


    一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?

    String在Java中是final的类,所以不可变;StringBuffer是同步的,StringBuilder是不同步的。后2者可以通过append改变引用指向的 对象。而String则做不到,String只能通过在内存中添加新的对象,将引用指向该新对象
    答案

    二、VECTOR,ARRAYLIST, LINKEDLIST的区别是什么?

    Vector是同步的,而后2者是非同步的。因此Vector的性能很差,而ArrayList类似于数组,获得索引快,插入数据效率低; LinkedList是双向链表,按序号索引数据需要进行向前或向后遍历但插入比较快。
    答案

    三、HASHTABLE, HASGMAP,TreeMap区别?

    Hashtable是同步的,而HashMap是不同步的。TreeMap必须实现排序的规则。
    答案

    四、Tomcat,apache,jboss的区别?

     Apache全球应用最广泛的http服务器,免费,出自apache基金组织   
      Tomcat应用也算非常广泛的web服务器,支持部分j2ee,免费,出自apache基金组织   
      JBoss开源的应用服务器,比较受人喜爱,免费(文档要收费)   
      weblogic应该说算是业界第一的app   server,全部支持j2ee1.4,  对于开发者,有免费使用一年的许可证,用起来比较舒服,出资BEA公司,呵呵,我用的就是这个,所以比较熟悉 
      jboss也支持j2ee
      JBoss和WebLogic都含有Jsp和Servlet容器,也就可以做web容器,
      JBoss和WebLogic也包含EJB容器,是完整的J2EE应用服务器
      tomcat 只能做jsp和servlet的container
    答案

    五、GET POST区别?

    Get方式发送的请求,请求的内容会附带显示在浏览器地址栏,长度受浏览器限制;Post方式发送的请求,内容没有长度限制,对于 密码之类的表单信息最好用post来发送。同时点击超链接,在地址栏直接发送请求的方式,以及表单的默认提交方式为Get,Post需 要显式指名表单提交的method为post。
    答案

    六、Servlet的生命周期?

    init -> service -> destroy
     init和destroy只会执行一次,而service会根据请求多次调用
    答案

    七、HTTP 报文包含内容?

    Content-type, ip地址,端口,主机信息,请求类型,请求内容等
    答案

    八、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入?

    PreparedStatement可以利用setter方法来防止sql注入,而Statement也不行。
    答案

    九、redirect, foward区别?

    redirect为重定向,重定向的地址可以任意,可以是服务器内部的页面,也可以是任意的网站,请求的地址会显示在浏览器地址栏。 而forward是转发的意思,即一次任务还没有处理完毕,将任务转发给另一web组建继续完成任务,forward会共享 request/response,而请求的地址不会显示在地址栏。
    答案

    十、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化?

    程序运行时,允许改变程序结构或变量类型,(spring的IOC就是用反射,工厂模式可以用反射实现,其他补充中),(用委托,具体Fish li博客中有讲到)

    Java中可在方法名前加关键字syschronized来处理当有多个线程同时访问共享资源时候的问题。syschronized相当于一把锁,当有申请者申请该
    
    资源时,如果该资源没有被占用,那么将资源交付给这个申请者使用,在此期间,其他申请者只能申请而不能使用该资源,当该资源被使用完成后将释放该资源上的锁,其他申请者可申请使用。
    
    并发控制主要是为了多线程操作时带来的资源读写问题。如果不加以空间可能会出现死锁,读脏数据、不可重复读、丢失更新等异常。
    
    并发操作可以通过加锁的方式进行控制,锁又可分为乐观锁和悲观锁。
    
    悲观锁:
    
    悲观锁并发模式假定系统中存在足够多的数据修改操作,以致于任何确定的读操作都可能会受到由个别的用户所制造的数据修改的影响。也就是说悲观锁假定冲突总会发生,通过独占正在被读取的数据来避免冲突。但是独占数据会导致其他进程无法修改该数据,进而产生阻塞,读数据和写数据会相互阻塞。
    
    乐观锁:
    
    乐观锁假定系统的数据修改只会产生非常少的冲突,也就是说任何进程都不大可能修改别的进程正在访问的数据。乐观并发模式下,读数据和写数据之间不会发生冲突,只有写数据与写数据之间会发生冲突。即读数据不会产生阻塞,只有写数据才会产生阻塞。
    
    详见:http://www.cnblogs.com/ego/articles/1514350.html      http://blog.csdn.net/niu870781892/article/details/6140755
    答案

    十一、Ehcache和MemCached比较分析

    十二、JVM垃圾回收实现原理

    十三、面向对象的特征有哪些方面?

    封装,继承,多态

    十四、String是最基本的数据类型吗?

    不是,基本数据类型包括byte、int、char、long、float、double、boolean和short。
    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类(java)

    在C# 中,String是基本的引用类型。

    十五、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

    EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
    SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
    对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
    对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。
    答案

    十六、Collection 和 Collections的区别

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
    答案

    十七、HashMap和Hashtable的区别。

    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 
    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
    最 大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实 现同步,而HashMap 就必须为之提供外同步(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
    Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
    答案

    十八、sleep() 和 wait() 有什么区别?

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
    答案

    十九、abstract class和interface有什么区别?

    声明方法的存在而不去实现它的类被叫做抽象类,由于抽象类不能被实例化,所以不能有抽象静态方法,抽象类可以有构造方法。
    接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获,由于接口没有没有成员变量,而且类可以继承多个接口,所以接口没有构造方法(如果有就不能知道实现构造方法的顺序,而且也不能初始化成员变量)
    答案

    二十、EJB与JAVA BEAN的区别?

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
    答案

    二十二、Static Nested Class 和 Inner Class的不同?

    Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
    答案

    二十三、JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
    静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 
    答案

    二十四、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

    Math.round(11.5)==12
    Math.round(-11.5)==-11
    round方法返回与参数最接近的长整数,参数加1/2后求其floor.
    答案

    二十五、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

    SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。
    EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。
    EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
    答案

    二十六、应用服务器有那些?

    BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat

    二十七、List, Set, Map是否继承自Collection接口?

    List,Set是,Map不是

    二十八、数组有没有length()这个方法? String有没有length()这个方法?

    数组没有length()这个方法,有length的属性。String有有length()这个方法。

    二十九、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

    不对,有相同的hash code

    三十、单例

    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
    一般Singleton模式通常有几种种形式:
    第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
    public class Singleton {
    private Singleton(){}
       //在自己内部定义自己一个实例,是不是很奇怪?
       //注意这是private 只供内部调用
       private static Singleton instance = new Singleton();
       //这里提供了一个供外部访问本class的静态方法,可以直接访问  
       public static Singleton getInstance() {
         return instance;   
       } 
    } 
    第二种形式: 
    public class Singleton { 
      private static Singleton instance = null;
      public static synchronized Singleton getInstance() {
      //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
      //使用时生成实例,提高了效率!
      if (instance==null)
        instance=new Singleton();
    return instance;   } 
    } 
    其他形式:
    定义一个类,它的构造函数为private的,所有方法为static的。
    一般认为第一种形式要更加安全些
    View Code

    三十一、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 

    多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
    同步的实现方面有两种,分别是synchronized,wait与notify

    三十二、简述synchronized和java.util.concurrent.locks.Lock的异同 ?

    主要相同点:Lock能完成synchronized所实现的所有功能
    主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
    答案

    三十三、MVC的各个部分都有那些技术来实现?如何实现?

    MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
    答案

    三十四、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

    有两种实现方法,分别是继承Thread类与实现Runnable接口
    用synchronized关键字修饰同步方法
    反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。
    答案

    三十五、java中会存在内存泄漏吗,请简单描述

    会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。

    三十六、java中实现多态的机制是什么?

    方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
    答案
  • 相关阅读:
    华为云-Centos7.6-部署elasticSearch7.7
    linux下安装nginx
    Redis5.0.8集群安装
    redis5.0.8单机安装
    Mybatis打印SQL
    PostgreSQL新手教程
    Debian install jdk7
    Debian install jre7
    Debian /etc/apt/sources.list
    安装J2EE的SDK报错:could not find the required version of the Java(TM)2 Runtime Environment in '(null)'的解决办法。
  • 原文地址:https://www.cnblogs.com/jlf19881031/p/3507848.html
Copyright © 2020-2023  润新知