欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java面试题,java试题

来源: javaer 分享于  点击 25712 次 点评:270

Java面试题,java试题


       1 . JDK ,JRE  和JVM的关系

          JDK是java的开放工具,它包含JRE和一些其他的编译运行环境。

    JRE是java的运行工具,它包含了JVM和java的系统类库。

    JVM是java的虚拟机,是java的.class文件的运行环境。 

2 .Java支持多继承么?

  Java中类不支持多继承,只支持单继承(即一个类只有一个父类。因为父类中的方法可能是有实现内容的,如果多继承了,    子类就可能继承多个同样名称的方法,而且方法的功能不同,调用子类的该方法时时,不知道该调用谁而产生错位。)。

 但是java中的接口支持多继承,,即一个子接口可以有多个父接口。(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能。接口中的方法都是抽象方法,要调用该方法都必须重写该方法,随便调用谁都不会出现调用错误)。

3.解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。

通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间;而通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域,由于现在的垃圾收集器都采用分代收集算法,所以堆空间还可以细分为新生代和老生代,再具体一点可以分为Eden、Survivor(又可分为From Survivor和To Survivor)、Tenured;方法区和堆都是各个线程共享的内存区域,用于存储已经被JVM加载的类信息、常量、静态变量、JIT编译器编译后的代码等数据;程序中的字面量(literal)如直接书写的100、”hello”和常量都是放在常量池中,常量池是方法区的一部分,。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,栈和堆的大小都可以通过JVM的启动参数来进行调整,栈空间用光了会引发StackOverflowError,而堆和常量池空间不足则会引发OutOfMemoryError。


4.接口和抽象类的区别

从设计层面来说,抽象类是对事物(类)的抽象,是一种模板设计,是对整个类整体进行抽象,包括属性、行为。接口是行为的抽象,是一种行为的规范。 
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。 
类可以实现很多个接口,但是只能继承一个抽象类 
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 
抽象类可以在不提供接口方法实现的情况下实现接口。 
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。 
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。 
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。 
  

5.单列模式

 单例饿汉模式:饿汉式单例类.在类初始化时,已经自行实例化 (饿了,当然是马上就吃,不等调用,类初始化时就实例化     了)

public class Singleton1 { 
 //私有的默认构造子 
  private Singleton1() {} 
  //已经自行实例化 
  private static final Singleton1 single = new Singleton1(); 
 //静态工厂方法 ,调用此方法前此类已经被实例化了
  public static Singleton1 getInstance() { 
   return single; 
  
 }


 懒汉模式:  懒汉式单例类.在第一次调用的时候实例化 (懒汉当然是被调用时才实例化,不催不干活)

      public class Singleton2 { 
  //私有的默认构造子 
   private Singleton2() {} 
   //注意,这里没有final 
   private static Singleton2 single=null; 
   //静态工厂方法 ,调用此方法时才实例化此类
   public synchronized static Singleton2 getInstance() { 
     if (single == null) { 
    single = new Singleton2(); 
    
   return single; 
   
  }


6 .工厂模式: 

//先定义一个工厂借口
      interface MyFactory{ 

//返回值类型是需要的类的类型
         public MyProduct createProduct();

}

//再用一个类去实现这个借口 ,重写方法

Class Factory implements MyFactory{ 
              public MyProduct createProduct(){

       //返回要获得的类的实例

          return new MyProduct();

 }


     //使用方法:

Public class Client{ 


           Public Static void main (String [] args){

    MyFactory factory=new Factory(); 
  MyProduct product=factory.createProduct(); 
  product.ProductMethod();

     }

}

7.String和StringBuilder、StringBuffer的区别?

Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法基本相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高,当然也没有StringBuffer安全。

   

8.Array和ArrayList有何区别?什么时候更适合用Array?

Array可以容纳基本类型和对象,而ArrayList只能容纳对象。 
Array是指定大小的,而ArrayList大小是固定的。 
Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。尽管ArrayList明显是更好的选择,但也有些时候Array比较好用。 
(1)如果列表的大小已经指定,大部分情况下是存储和遍历它们。 
(2)对于遍历基本数据类型,尽管Collections使用自动装箱来减轻编码任务,在指定大小的基本类型的列表上工作也会变得很慢。 
(3)如果你要使用多维数组,使用Array比ArrayList好。


9 . hashCode和equals方法的关系

equals相等,hashcode必相等(同一个人,必然是同一个名字);

hashcode相等,equals可能不相等(同一个名字,不一定就是同一个人)。


10.自动装箱与拆箱


装箱:将基本类型用它们对应的引用类型包装起来;
      拆箱:将包装类型转换为基本数据类型;
 Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在 编译期根据语法决定是否进行装箱和拆箱动作。

    

 11  . Java中的集合类及关系图


List和Set继承自Collection接口。
Set无序不允许元素重复。HashSet和TreeSet是两个主要的实现类。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
Map也属于集合系统,但和Collection接口没关系。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。

   

12.多线程的实现方式

继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。

13.线程的状态转换


14. 什么是线程安全


线程安全就是多线程访问同一代码,不会产生不确定的结果。


15.如何保证线程安全


对非安全的代码进行加锁控制;
使用线程安全的类;
多线程并发情况下,线程共享的变量改为方法级的局部变量。

16.Hibernate与 MyBatis的比较

两者相同点

  • HibernateMyBatis都可以是通过SessionFactoryBuiderXML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuiderSessionFactorySession的生命周期都是差不多的。
  • HibernateMyBatis都支持JDBCJTA事务处理。

Mybatis优势

  • MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
  • MyBatis容易掌握,而Hibernate门槛较高。

Hibernate优势

  • HibernateDAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
  • Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
  • Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
  • Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL

他人总结

  • Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。 
  • Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。 
  • iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。 
  • iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

17 .SpringMVC与Struts2区别与比较总结   http://blog.csdn.net/chenleixing/article/details/44570681


相关文章

    暂无相关文章
相关栏目:

用户点评