JAVA 面试题(转)


1. JDK和JRE的区别是什么?

  • JRE(Java运行时环境)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。
  • JDK(Java开发工具包)是完整的Java软件开发包,包含了JRE、编译器和其他的工具(例如:JavaDoc、Java调试器),可以让开发者开发、编译、执行Java应用程序。

2. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

Java虚拟机是一个 可以执行Java字节码的虚拟机 Java源文件被编译成能被Java虚拟机执行的字节码文件。

Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或重新编译。Java虚拟机使其成为可能,因为它知道底层硬件平台的指令长度和其他特性。

3. Java支持多继承吗?

Java不支持多继承,但是可以实现多个接口。

4. 什么是值传递和引用传递?

  • 对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象的副本,也不会影响原对象的值。
  • 对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

5. “static”关键字是什么?Java中是否可以覆盖(Override)一个static的方法?

Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。

static方法和类的任何实例都不相关。

6. 是否可以在static环境中访问非static变量?

static变量在Java中是属于类的,他在所有的实例中的值都是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果代码中尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

7. Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

  • 重载是发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。
  • 方法覆盖是子类重新定义了父类的方法。方法覆盖必须有相同的方法名、参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。

8. 数据库连接池是什么?

像打开和关闭数据库连接这种数据库的交互可能很费时,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。可以在应用服务器启动的时候建立很多个数据库连接并维护在一个池中。连接请求由池中的连接提供。在连接使用完毕以后,把连接归还到池中,以用于满足将来更多的请求。

9. 进程和线程的区别是什么?

  • 进程是执行着的应用程序
  • 线程是进程内部的一个执行序列
  • 一个进程可以有多个线程
  • 线程又叫轻量级进程

10. 如何确保N个线程可以访问N个资源同时又不导致死锁?

使用多线程,简单的避免死锁的方法是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。

11. System.gc()和Runtime.gc()会做什么事情?

这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。

12. 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

不会,在下一个垃圾回收周期中,这个对象将是可被回收的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值