没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
JAVA 知识
有关 Java 的一般问题
1. 什么是 JVM? 为什么称 Java 为跨平台的编程语言?
Java 虚拟机(Java Virtual Machine)是可以执行 Java 字节码的虚拟机,每个
Java 源文件将被编译成字节码文件,然后在 JVM 中执行。Java 之所以被设计
成可以在任意的平台运行,而不需要重写或者在不同的平台下重新编译,这些都
要归功于 Java 虚拟机(JVM),因为 JVM 非常了解特定的指令的长度以及底层硬
件平台的特殊性。
2. JDK 和 JRE 之间的差异是什么?
Java 运行环境(Java Runtime Enviroment) 是运行 Java 程序的根本的
Java 虚拟机,包括执行 applet 的浏览器插件。JDK (Java Development Kit)
是为了开发,编译和执行 Java 应用程序,针对 Java 的全功能的软件开发包,
包含了 JRE,编译器和工具(比方说 JavaDoc 和 Java Debugger)。
3. “static〞 关键字是什么意思?在 Java 里可以 override private 或
static 的方法吗? keyword mean ? Can you override private or
static method in Java ?
static 关键字表示,访问这个成员变量或方法时,不必获取它属于的类的实例。
Java 里的 static 方法不能被 override,因为 override 的机制是运行时
(runtime)的动态绑定,而 static 方法是在编译时静态绑定的。static 方法并
不与任何类的具体实例有关,因此无法应用继承的概念。
4. 在静态方法里可以访问非静态变量吗?
Java 中的 static 变量归相应的类所有,它的值对于类的所有实例都是相同的。
static 变量是在 JVM 加载类的时候初始化的。如果代码试图访问非静态的变量,
而且不是通过类的实例去访问,编译器会报错,因为这些非静态变量还没有被创
立呢,并且它们没有与实例相关联。
顶
5. Java 支持哪些数据类型?什么是 Autoboxing 和 Unboxing?
Java 语言支持的 8 个根本数据类型如下:
� byte
� short
� int
� long
� float
� double
� boolean
� char
Autoboxing 是指在根本数据类型和对应的包装(wrapper)类之间 Java 编译器
所做的自动转换。例如,编译器将 int 转换为 Integer,将 double 转换为
Double ,等等。逆向的转换称为 unboxing。
6. 在 Java 中什么是方法的 Override(覆盖) 和 Overload(重载)?
Java 中方法的 overload 发生的条件是,同一个类里,有两个或以上的方法名
称完全相同,但参数列表不同。另一方面,方法的 override 是指,子类重定义
了父类里的同一个方法。Override 的方法必须方法名、参数列表和返回类型都
完全相同。Override 的方法不会限制原方法的访问权限。
7.Java 中构造函数、构造函数重载的概念和拷贝构造函数
JAVA 知识
当类的对象被创立的时候,调用它的构造函数。每个类都有一个构造函数。如果
程序员没有为类编写构造函数,Java 编译器自动为类创立一个缺省的构造函数。
构造函数重载和 Java 中函数重载类似,可以为同一个类创立不同的构造函数,
每个构造函数必须拥有唯一的参数列表。
Java 与 C++不同,它不支持拷贝构造函数,但是区别仅仅是,如果你没有编
写类的拷贝构造函数,Java 不会自动创立它。
8.Java 支持多继承吗?
Java 不支持多继承,每个类只允许继承一个类,但是可以实现多个接口。
9.接口和抽象类有什么不同?
Java 同时提供和支持抽象类和接口,它们的实现有一些共同的特点,也有如下
不同:
� 接口中所有的方法默认都是抽象的,而抽象类可以同时包含抽象和非抽
象的方法。
� 一个类可以实现多个接口,但它只能继承一个抽象类。
� 一个类要实现某个接口,必须实现这个接口声明的所有方法。而一个类
不需要实现抽象父类中声明的所有方法,不过,这时候这个类也必须声明为
抽象类。
� 抽象类可以实现接口,而且不需要实现接口中的方法。
� 接口中声明的变量默认是 final 的,而抽象类可以包含非 final 的变量。
� 接口中的成员默认是 public 的,而抽象类的成员可以是 private,
protected,或 public 的。
� 接口是绝对抽象的,不可实例化,抽象类也不可以实例化,但可以在
main 方法中触发实例化〔注:通过匿名类实现〕。
也可以查阅 Abstract class and Interface differences for JDK 8 。
10.传引用和传值
当对象通过传值调用时,传递的是这个对象的一个拷贝。因此,即使函数修改这
个对象,也不会影响原对象的值。
当对象通过传引用调用时,对象本身没有被传递,而传递的是对象的一个引用。
因此,外部函数对这个对象的修改,也会反映到任何出现这个对象的地方。
Java 线程
11. 进程与线程的区别 ?
进程是一个程序的执行(即正在运行的程序), 然而线
程是在进程中独立的执行序列. 一个进程可以包含很
多线程. 线程有时被称为轻量级的进程.
12. 说下创立线程的不同方式. 你倾向于哪种方式并
说明原因 ?
有三种创立线程的方式:
� 继承 Thread 类.
� 实现 Runnable 接口.
� 通过 Executor 框架创立线程池.
JAVA 知识
首选方式是实现 Runnable 接口, 因为它不需要继承
Thread 类. 当你的程序设计需要多继承时, 使用接
口会有所帮助. 另外, 线程池效率是很高的, 并且实施
起来也很简单.
13. 解释下可用的线程状态.
在执行期间, 线程会处于以下状态中的一种:
� Runnable: 线程已准备就绪, 但没有立即
运行.
� Running: 处理器正在执行的线程代码.
� Waiting: 处于阻塞状态的线程, 等待外部
某种处理的结束.
� Sleeping: 被强制休眠的线程.
� Blocked on I/O: 等待 I/O 操作的完成.
� Blocked on Synchronization: 等待取
得线程锁.
� Dead: 线程已经执行结束.
14. 同步方法与同步块的区别 ?
在 Java 程序中, 每个对象都拥有一个锁. 线程可以
通过使用 synchronized 关键字来获取一个对象上
的锁. synchronized 关键字可以用于方法级别(粗
粒度锁)或代码块级别(细粒度锁).
15. 在监视器中的线程同步是怎样发生的? 你可以
使用哪些级别的同步 ?
JVM 使用结合了监视器的锁. 监视器是一个守护者,
它看管一个同步代码的序列, 并且确保在一个时刻
只能有一个线程执行同步代码片段. 每个监视器关
联着一个对象引用. 只能得到锁的线程才可以执行
同步代码.
16. 什么是死锁 ?
当两个进程相互等待对方执行完毕时, 其结果是它
们会永远等待下去.
17. 怎样确保 N 个线程访问 N 个资源时不会发生
死锁 ?
使用 N 个线程时一个非常简单的防止死锁的方法是
为所有的锁排序, 并强制每个线程也按那种方式排
序. 这样, 如果所有线程以相同的顺序锁定和解锁互
斥资源就不会发生死锁了.
Java Collections
18. Java Collections 框架的根本接口 ?
Java Collections 框架 提供了一系列支持对象集合
操作的设计良好的接口和类. Java Collections 框
JAVA 知识
架中最根底的接口是:
� Collection, 表示一组对象(元素).
� Set, 包含非重复元素的集合.
� List, 包含非重复元素的有序集合.
� Map, 包含非重复键的键值对的对象.
19. 为什么 Collection 没有继承 Cloneable 和
Serializable 接口 ?
Collection 接口描述的是由元素组成的对象组.
Collection 的每一个具体实现可以选择自己的方式
来管理元素. 一些集合允许存在重复键, 另一些那么
不允许.
当处理实际实现时复制和序列化的语义和效果才会
起作用. 因此, 集合类的具体实现应该决定它们将怎
样被复制和序列化.
20. 什么是 Iterator(叠代器) ?
Iterator 接口提供了许多能够叠代集合的方法.每个 java
集合(Collection)都含有一个返回 Iterator 实例的
iterator 方法. 叠代器在叠代过程中能够移除底层集合中
的元素.
21. Iterator 和 ListIterator 之间的不同 ?
它们之间的不同如下:
� Iterator 能够遍历 Set 和 List 集合, 而
ListIterator 只能用来遍历 List.
� Iterator 只能正向遍历集合, 而 ListIterator 可
以双向遍历 List.
� ListIterator 实现了 Iterator 接口并提供了额外
的功能, 例如添加元素, 替换元素, 取得上一个或上一
个元素索引, 等等.
22. fail-fast 与 fail-safe 的区别?
Iterator 的 fail_safe 特性是对底层集合的拷贝进行操作,
因此对集合的任何改变都不会有影响. java.util 包下的所
有集合类是 fail-fast 的, 但 java.util.concurrent 包下
的集合类是 fail-safe 的. fail-fast 叠代器会抛出
ConcurrentModificationException, 而 fail-safe 叠代
器不会抛出这种异常.
23. Java 中的 HashMap 是怎么工作的?
Java 中的 HashMap 是用来存储键值对的。
HashMap 需要一个 hash 函数,它使用 hashCode 和
equals 方法,来进行 collection 中元素的保存和查找。
调用 put 方法时,HashMap 会计算键(key)的 hash 值,
然后将键值对存到 collection 的适当索引下。如果键已经
存在,那么相应的值会更新。HashMap 的重要特征主要
有它的容量,装载因子(load factor)和容量扩充
(threshold resizing)。
剩余17页未读,继续阅读
资源评论
zhangao_fengg
- 粉丝: 28
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功