遇到的一些Java面试题

一、什么是Java虚拟机?为什么Java是平台无关的语言?

  1. Java虚拟机是一个可执行Java字节码文件的虚拟机进程,Java源文件编译成可被Java虚拟机执行的字节码文件。
  2. (所谓的平台无关就是指软件的运行不会因操作系统、处理器的变化而无法运行或出现运行错误),Java在计算机的操作系统上又提供了一个Java运行环境——JRE(安装JDK)。JRE由Java虚拟机,类库和一些核心文件组成,Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编程,而是针对Java虚拟机把Java源程序编译成称为字节码的“中间代码”,然后Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码。

二、Java支持的基本数据类型有哪些?什么是自动拆箱?

  1. 基本数据类型有:byte、short、int、long、float、double、boolean、char
  2. 简单来说自动拆箱就是指将对象包装类自动转换为基本数据类型

三、接口与抽象类的区别,Java是否支持多继承?

  1. 接口中所有的方法隐含都是抽象的,而抽象类中则可以同时包含抽象类和非抽象方法。
  2. 类可以实现很多接口但只能继承一个类。
  3. 类如果要实现一个接口,必须实现该接口声明的所有方法。但是,一个类继承一个抽象类,可以不实现该抽象类的所有方法,但此时这个类也必须声明为抽象的。
  4. 接口中的成员变量默认都是 public static final 修饰的,抽象类中可以包含非final的变量。
  5. 接口中的方法默认是public修饰的,抽象类中可以是proteced,private,public修饰。
  6. 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但如果它包含main方法的话是可以被调用的。
  7. Java不支持多继承但可以实现多个接口。

四、Java中的HashMap的工作原理是什么?

  1. Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合添加和从集合检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。

五、HashMap与HashTable的区别?
HashMap与HashTable都实现了Map接口

  1. HashMap允许键和值为null,HashTable中不允许键或值为null;
  2. HashMap是不同步的,HashTable是同步的,所以在HashTable适合于多线程环境,而HashMap适合于单线程。

六、数组(array)和列表(ArrayList)的区别?什么时候使用array而不是ArrayList?

  1. Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
  2. Array大小是固定的,ArrayList的大小是动态变化的。
  3. ArrayList提供了更多的方法和特性,如:addAll(),removeAll(),iterator()等等。

对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

七、Java中垃圾回收有什么目的?什么时候进行垃圾回收?

  1. 垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。
  2. 垃圾回收器的运行时间是不确定的,由JVM决定,在运行时是间歇执行的。虽然可以通过System.gc()来强制回收垃圾,但是这个命令下达后无法保证JVM会立即响应执行,但经验表明,下达命令后,会在短期内执行的请求。JVM通常会感到内存紧缺时候去执行垃圾回收操作

八、finally代码块与finalize()方法有什么区别?

  1. finally是异常处理语句结构的一部分,表示总是执行。
    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。

九、数据库连接池的作用

  1. 对于一个简单的数据库引用,用于对数据库的访问不是很频繁。这时就可以简单的在需要访问数据库时,就创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库引用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。
    对于共享资源,有一个很著名的设计模式:资源池。该模式正是为了解决资源频繁分配、释放所造成的问题的。把该模式应用到数据库连接管理领域,就是建立一个数据库连接池,提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。
      数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。如:外部使用者可通过getConnection 方法获取连接,使用完毕后再通过releaseConnection 方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。
  2. 使用数据库连接池带来的优势:
    1、资源复用
      由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统  消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。
     2、更快的系统响应速度
      数据库连接池在初始化过程中,往往已经创建了若干数据库连接至于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间,从而缩减了系统整体响应时间。
     3、统一的连接管理,避免数据库连接泄漏
      在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。

十、简述一下jvm加载class文件的原理机制

  1. 引用:https://blog.csdn.net/weisg81/article/details/77415937
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值