java基础面试题(二),java基础面试题
java基础面试题(二),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页面可以很容易和静态模板结合;
相关文章
- 暂无相关文章
用户点评