java基础面试题(二)

1、JDK和JRE的区别?

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

2、什么是java虚拟机?

java虚拟机是一个可以执行java字节码的虚拟机进程。

3、为什么java被成为“与平台无关的编程语言”?

因为java虚拟机知道底层硬件平台的指令长度和其他特性;

4、是否可以在static环境中访问非static变量?

不可以,static变量是属于类的,在任何实例中的值是一样的,如果不用实例来访问非static变量,编译会报错。

5、什么是值传递和引用传递?

值传递:可以理解为传递的是一个对象的副本,对这个副本做出改变,不会影响到原对象。

引用传递:传递的是对象的引用,外部对引用对象的改变会影响到所有对象上;

6、进程和线程有什么区别?

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

7、 创建线程有几种方式?

三种。继承Thread类、实现Runnable接口、应用程序可以使用Executor框架来创建线程池。

实现Runnable接口的这种方式更受欢迎,因为不需要继承类,因为java只能单继承。如果继承了Thread

类就不能继承别的了。线程池的效率也非常高,很容易实现和使用。

8、概括和解释下线程的几种可用状态?

就绪(Runnable):线程准备运行,不一定立马就能开始执行。

运行中(Running):进程正在执行线程的代码。

等待中(Waiting):线程处于阻塞状态,等待外部的处理结束;

睡眠中(Sleeping):线程被强制睡眠;

I/O阻塞(Blocked on I/O):等待I/O操作完成。

同步阻塞(Blocked on Synchronization):等待获取锁;

死亡(Dead):线程完成执行;

9、什么是死锁(deadlock)?

两个进程都在等待对方执行完毕后执行,这个时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。

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

指定获取锁的顺序,并强制线程按照指定的顺序去获取锁,因为,如果所有的线程都以同样的顺序来加锁和释放锁,

就不会出现死锁。

11、HashMap和Hashtable的区别?

不同点:HashMap允许键和值为null而Hashtable不允许键或值为null、Hashtable是同步的,而HashMap不是,

因此HashMap适合单线程而Hashtable适合多线程、HashMap提供了可供应用的迭代的键的集合,Hashtable提供了

对键的列举;

12、数组(Array)和集合(ArrayList)有什么区别?什么时候该用Array而不是ArrayList?

数组和集合的不同点:

Array可以包含基本类型和对象类型、ArrayList只能包含对象类型;

Array大小事固定的,ArrayList大小事动态变化的;

ArrayList提供了更多的方法和特性,如:addAll(),removeAll(),iteratot()等了;

对于基本类型数据,集合使用自动装箱来减少编码工作量 。

13、ArrayList和LinkedList有什么区别?

ArrayList是基于索引的数据接口,它的底层是数组。LinkedList是以元素列表形式储存他的数据,每一个元素

都是和它前一个和后一个链接在一起的。

相对于ArrayList,LinkedList的插入,添加、删除操作速度更快,因为元素被添加到集合任意位置的时候,

不需要像数组那样重新计算大小和更新索引。

LinkedList比ArrayLList更占用内存

14、Comparable和Comparator接口是干什么的?有何区别?

java提供了只包含compareTo()方法的Comparable接口,这个方法用来给两个对象排序。返回负数、0、正数

表示< 、 = 、 > ;

java提供了包含compare()和equrals()方法的Comparator接口。compare()方法用来排序,equrals()方法

用来比较传入的参数是否和comparator相等。

15、什么是Java堆?

JVM的堆是运行时数据区,所有类的实例和数组都在堆上分配内存,它在jvm启动的时候创建。堆内存是由存活对象

和死亡对象组成的,存活对象是应用可以访问的,死亡对象是不可被访问但尚未被垃圾收集器回收的对象,一直到垃圾回收

把这些对象回收掉之前,他们会一直占用堆的内存。

16、java中,对象什么时候可以被垃圾回收?

当对象对当前使用这个对象的应用程序变的不可触及的时候,这个对象就可以被回收。也就是无法再调用的对象。

17、throw和throws的区别?

throw是针对对象的,在代码块内的,即捕获方法内的异常并抛出。

throws是针对方法的,即方法的异常信息抛出。

可以理解为throw是主动的,在方法内主动捕获并抛出,throws是被动的,在方法上没有捕获异常处理,直接throws的。

18、什么是JDBC?

JDBC是允许用户在不同数据库之间进行选择的一个抽象层,JDBC允许开发者用java写数据库应用程序,

而不需要关心底层特定的数据库的细节。

19、解释下驱动(Driver)在JDBC中的角色?

JDBC驱动提供了特定厂商对JDBC API接口类的实现,驱动必须要提供java.sql包下面这些类的实现:

Connection、Statement、PreparedStatement、CallableStatement、ResultSet、Driver。

20、Class.forName()方法有什么作用?

这个方法用来载入跟数据库建立连接的驱动。

21、PreparedStatement比Statement有什么优势?

预编译、性能好、可以重用。

22、什么事数据库连接池?

 在应用服务器启动的时候建立很多个数据库连接,并维护在一个池中,连接请求由池中的连接提供,

使用完毕后返回给池中,以用于将来满足更多的请求。

23、什么是Servlet?

Servlet是用来处理客户端请求,并产生动态网页内容的java类。Servlet主要是用来处理或储存HTML表单提交的数据。

产生动态内容,在无状态HTTP协议下管理状态信息。

24、解释一下Servlet的生命周期?

对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法。完成Servlet的初始化。然后Servlet对象通过为每一次请求单独调用service()方法来处理,最后调用Servlet的destroy()方法来把Servlet删除。

25、doGet()和doPost()的区别?

doGet():会把名值对追加到url后,因为url有字符限制,所有限制传参数,并且参数可见,不安全

doPost():请求参数值放在请求体内,无参数限制,参数不可见,安全。

26、什么是Servlet链?

Servlet链是把一个Servlet的输出发送给另一个Servlet方法,第二个的输出再发给第三个,以此类推。链条上最后一个

负责把响应发给客户端。

27、sendRedirect()和forward()方法有什么区别?

sendRedirect()方法创建一个新的请求,而forward()只是把请求转发到一个新的目标上。重定向(redirect)之后,

之前请求作用域内的对象就失效了,因为会产生新的请求,而转发(forward)之后,之前请求作用于的对象还能访问。

一般认为sendRedirect()比forward()要慢。

28、什么事jsp?

jsp页面是包含了静态数据和jsp元素两种类型的文本的文本文档。

29、jsp有何优点?

jsp页面是被动态编译成Servlet 的,因此开发者可以很容易的更新展示代码。

jsp页面可以被预编译;

jsp页面可以很容易和静态模板结合;



猜你喜欢

转载自blog.csdn.net/zks_4826/article/details/79193020