java面试宝典
需积分: 0 88 浏览量
更新于2012-06-12
收藏 454KB DOC 举报
### Java面试宝典知识点梳理
#### 一、Java基础
1. **面向对象的特征**:
- 封装:将对象的状态信息隐藏在对象内部,仅对外提供访问该状态的方法。
- 继承:允许子类继承父类的特性和行为。
- 多态:一个接口支持多种实现方式。
2. **OOP(面向对象编程)与类**:
- **OOP**是一种编程范式,强调以对象为中心,通过封装、继承、多态等特性来构建软件系统。
- **类**是对象的模板或蓝图,定义了一组共同属性和行为的对象。
- **类和对象实例之间的关系**:类是抽象的,而对象是具体的。对象是类的实例。
3. **类与对象的概念**:
- 类是对象的抽象表示,它定义了一组共享相同属性和行为的对象的模板。
- 对象是根据类创建的具体实体,每个对象具有自己的状态(属性的值)和行为(方法)。
4. **属性与方法**:
- 属性:也称为字段,是类中定义的变量,用于表示对象的状态。
- 方法:也称为函数或操作,是在类中定义的过程,用于描述对象的行为。
5. **封装**:
- 封装是OOP的一个核心原则,它将对象的状态(属性)和行为(方法)封装在一起,并控制对象的内部状态的可见性。
- 通过访问控制修饰符(如private、public等)来实现封装。
6. **JVM加载class文件的原理机制**:
- JVM通过类加载器(Class Loader)来加载class文件到内存中。
- 加载过程包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和初始化(Initialization)。
7. **Java程序优化**:
- **代码层面**:减少冗余代码,合理使用数据结构,避免不必要的对象创建。
- **算法层面**:选择高效的算法和数据结构。
- **JVM层面**:合理配置JVM参数,利用JIT编译优化。
8. **".java"源文件中是否可以包括多个类**:
- 可以包含多个类,但只能有一个公共类(public class),且文件名必须与公共类名一致。
- 其他类可以是默认访问级别,即不使用任何访问修饰符声明。
9. **char型变量中能不能存贮一个中文汉字**:
- 可以。在Java中,`char`类型使用Unicode编码,一个`char`可以存储一个中文字符。
10. **逻辑操作符(&,|,^)与条件操作符(&&,||)的区别**:
- `&`、`|`、`^`是位运算符,分别对应按位与、按位或、按位异或。
- `&&`、`||`是短路逻辑运算符,用于条件判断,可以提高效率。
11. **Math.round(11.5)等於多少? Math.round(-11.5)等於多少?**:
- `Math.round(11.5)`等于12。
- `Math.round(-11.5)`等于-11。
12. **Java有没有goto**:
- Java没有传统的`goto`语句,但可以通过标记和`break`或`continue`模拟`goto`的效果。
13. **int和Integer的区别**:
- `int`是基本数据类型,而`Integer`是`int`的包装类。
- `int`只能存储整数值,而`Integer`可以存储`null`。
14. **如何将数值型字符转换为数字**:
- 使用`Character.getNumericValue(char c)`或`Integer.parseInt(String s)`。
- 去小数四舍五入保留小数点后两位:`Math.round(double * 100.0) / 100.0`
15. **shorts1=1; s1=s1+1; 和 short s1=1; s1+=1; 有什么错误**:
- `s1=s1+1;`会导致编译错误,因为`s1+1`的结果类型为`int`,不能自动转换为`short`类型。
- `s1+=1;`是正确的,因为它会自动转换结果类型为`short`。
16. **float f=3.4是否正确**:
- 不正确。应写为`float f = 3.4F`,或`float f = 3.4f`。
17. **String和StringBuffer的区别**:
- `String`是不可变的,一旦创建就不能更改其内容。
- `StringBuffer`是可变的字符串类,可以在原有基础上添加、删除或修改字符。
18. **String是否是最基本的数据类型,能否被继承**:
- `String`不是基本数据类型,它是对象类型。
- `String`类不能被继承,因为它是`final`类。
19. **Strings=new String("xyz"); 创建了几个StringObject**:
- 创建了一个`String`对象。
20. **数组有没有length()这个方法? String有没有length()这个方法**:
- 数组没有`length()`方法,而是直接使用`length`属性获取长度。
- `String`类有`length()`方法获取字符串长度。
21. **排序都有哪几种方法**:
- 冒泡排序、插入排序、选择排序、希尔排序、快速排序、归并排序、堆排序等。
- 快速排序实现:选择一个基准元素,将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分继续排序。
22. **swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上**:
- `switch`可以作用于`byte`类型。
- `switch`不能直接作用于`long`类型。
- `switch`可以作用于`String`类型(从Java 7开始)。
23. **在JAVA中,如何跳出当前的多重嵌套循环**:
- 可以使用带标签的`break`语句,例如:`outerLoop: for (int i = 0; i < 10; i++) { ... break outerLoop; }`
24. **关于日期和时间的几个问题**:
- Java中处理日期和时间的类主要有`Date`、`Calendar`、`SimpleDateFormat`等。
- 新的日期时间API包括`LocalDate`、`LocalTime`、`LocalDateTime`等。
25. **一个对象被当作参数传递到一个方法,是值传递还是引用传递**:
- 在Java中,所有参数传递都是值传递,但对于对象参数来说,实际上是传递对象的引用值。
26. **什么时候用assert**:
- `assert`关键字用于断言,常用于测试和调试阶段,用来检查某个假设是否成立。
27. **GC是什么? 为什么要有GC**:
- GC(Garbage Collection)是指垃圾收集机制,用于自动回收不再使用的内存空间。
- 通过GC可以避免程序员手动管理内存带来的麻烦,减少内存泄漏等问题。
28. **垃圾回收的优点和原理**:
- **优点**:自动管理内存,提高开发效率,减少内存泄漏风险。
- **原理**:通过追踪可达性分析算法,找出无引用的对象进行回收。
29. **垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收**:
- 垃圾回收器不能立即回收内存,它有自己的触发机制。
- 可以使用`System.gc()`请求进行垃圾回收,但这不是一个强制性的命令。
30. **java中会存在内存泄漏吗,请简单描述**:
- Java中仍然可能存在内存泄漏,例如:长时间持有的对象引用导致无法被垃圾回收。
31. **java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,他们分别是哪些类**:
- Java中有输入流(Input Stream)和输出流(Output Stream)两种类型。
- 输入流的抽象基类是`InputStream`,输出流的抽象基类是`OutputStream`。
32. **文件和目录(I/O)操作**:
- Java中处理文件和目录的类主要有`File`、`Files`、`FileInputStream`、`FileOutputStream`等。
- 可以使用这些类进行文件读写、目录创建和删除等操作。
33. **什么是java序列化?如何实现java序列化**:
- 序列化是将对象转换为字节流的过程,便于存储或传输。
- 实现序列化需要让类实现`Serializable`接口。
34. **JAVA事件委托机制的概念**:
- 事件委托机制是Swing组件处理事件的一种方式,通过监听器模式实现。
- 当组件上的事件发生时,组件会调用注册的监听器对象的相应方法。
35. **谈谈你对Swing的MVC模式的理解**:
- MVC(Model-View-Controller)模式将应用程序分为模型、视图和控制器三个部分。
- Swing中的组件作为视图,负责显示数据;模型是数据本身;控制器处理用户交互。
36. **MVC结构在JTable中怎样实现的,这种结构有什么好处**:
- JTable中,模型通常是`TableModel`,视图是`JTable`本身,控制器则是响应用户操作的代码。
- 分离关注点,提高代码的复用性和维护性。
#### 二、类与继承
37. **说出一些常用的类,包,接口,请各举5个**:
- 类:`String`、`Integer`、`ArrayList`、`HashMap`、`Date`
- 包:`java.util`、`java.lang`、`java.io`、`javax.swing`、`java.sql`
- 接口:`List`、`Map`、`Runnable`、`Comparable`、`Serializable`
38. **接口有什么优点**:
- 提供了多继承的能力。
- 定义了行为的标准,增加了程序的灵活性和扩展性。
39. **静态变量和实例变量的区别**:
- 静态变量(类变量)属于类,由所有实例共享。
- 实例变量属于对象,每个对象拥有自己独立的一份副本。
40. **是否可以从一个static方法内部发出对非static方法的调用**:
- 不可以。非静态方法需要对象实例才能访问,而静态方法没有对象实例。
41. **java有几种修饰符?分别用来修饰什么**:
- Java有四种访问控制修饰符:`public`、`protected`、`default`(包私有)、`private`。
- 还有其他非访问控制修饰符,如`static`、`final`、`abstract`等。
42. **作用域public,private,protected,以及不写时的区别**:
- `public`:公有,可以被任何类访问。
- `protected`:受保护,可以被同一包内的类或子类访问。
- `private`:私有,只能被本类访问。
- 不写(默认):包私有,只在同一包内可见。
43. **final,finally,finalize的区别**:
- `final`:用于声明常量或不可变类。
- `finally`:用于异常处理,确保资源释放。
- `finalize`:已废弃,是`Object`类中的方法,用于垃圾回收前的清理工作。
44. **内部类可以引用他包含类的成员吗?有没有什么限制**:
- 内部类可以访问外部类的所有成员,包括私有成员。
- 但是,如果外部类成员是静态的,则内部类不能直接访问。
45. **匿名内部类是否可以继承其它类?是否可以实现接口**:
- 匿名内部类不可以继承其他类。
- 但可以实现接口。
46. **java中实现多态的机制是什么**:
- Java中实现多态的主要机制是:方法重载(Overloading)和方法覆盖(Overriding)。
47. **Overload和Override的区别,Overloaded的方法能否改变返回值的类型**:
- **Overload**:方法重载,同一个类中的方法名称相同,但参数列表不同。
- **Override**:方法覆盖,子类覆盖父类的方法。
- Overloaded的方法可以有不同的返回值类型。
48. **abstract class和interface的区别**:
- **abstract class**可以包含具体实现,而**interface**中所有方法默认都是抽象的。
- 一个类可以实现多个接口,但只能继承一个抽象类。
49. **接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类**:
- 接口可以继承接口。
- 抽象类可以实现接口。
- 抽象类可以继承实体类。
50. **abstract的method是否可同时是static或native或synchronized**:
- `abstract`方法不能是`static`、`native`或`synchronized`。
51. **构造器Constructor是否可被override**:
- 构造器不能被覆盖(override),但可以被重载(overload)。
52. **写clone()方法时,通常都有一行代码,是什么**:
- 在`clone()`方法中,通常会有一行代码`super.clone()`,用于调用父类的`clone()`方法。
53. **Object类的概述**:
- `Object`类是所有Java类的基类,提供了一些基本方法,如`toString()`、`equals(Object obj)`、`clone()`等。
#### 三、异常
54. **Java中的异常处理机制的简单原理和应用**:
- 异常处理机制主要包括`try`、`catch`、`finally`、`throw`和`throws`等关键字。
- 通过`try-catch`捕获异常,`finally`确保资源释放。
55. **JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义**:
- `throws`:声明抛出异常。
- `throw`:抛出异常。
- `try`:尝试执行可能抛出异常的代码块。
- `catch`:捕获异常并处理。
- `finally`:无论是否发生异常都会执行的代码块。
56. **error和exception的区别**:
- `Error`:表示系统级错误,通常程序员无法处理。
- `Exception`:表示可以通过代码处理的异常。
57. **运行时异常与一般异常的区别**:
- 运行时异常(RuntimeException)通常是因为程序错误造成的,如空指针异常。
- 一般异常(Checked Exception)是必须显式处理的异常,如IO异常。
58. **给我一个你最常见到的runtimeexception(运行时异常)**:
- `NullPointerException`:空指针异常,最常见的运行时异常之一。
59. **try里有一个return语句,那finally里的代码会不会被执行?在return前还是后执行**:
- `finally`中的代码总是会被执行。
- 如果`try`中有`return`语句,`finally`中的代码会在`return`之前执行。
#### 四、集合
60. **集合类都有哪些**:
- 主要的集合类包括:`List`、`Set`、`Map`等。
61. **介绍JAVA中的CollectionFrameWork**:
- Java集合框架提供了各种容器类,如`List`、`Set`、`Map`等,用于存储和操作对象。
- 基础接口有`Collection`和`Map`。
62. **ArrayList和Vector的区别**:
- `ArrayList`是非同步的,更适用于单线程环境。
- `Vector`是同步的,适用于多线程环境。
63. **HashMap和Hashtable的区别**:
- `HashMap`允许键和值为`null`。
- `Hashtable`不允许键或值为`null`。
- `Hashtable`是同步的,`HashMap`是非同步的。
64. **Collection和Collections的区别**:
- `Collection`是集合类的顶级接口。
- `Collections`是工具类,提供了静态方法用于操作集合。
65. **说出ArrayList,Vector,LinkedList的存储性能和特性**:
- `ArrayList`基于数组实现,适合随机访问。
- `Vector`类似`ArrayList`,但线程安全。
- `LinkedList`基于链表实现,适合频繁的插入和删除操作。
66. **heap和stack的区别**:
- **Heap**:动态分配的内存区域,用于存储对象和数组。
- **Stack**:用于存储局部变量和方法调用栈。
67. **List,Set,Map的区别**:
- `List`:有序集合,允许重复元素。
- `Set`:无序且不允许重复元素的集合。
- `Map`:键值对集合,键不允许重复。
junjunndsc
- 粉丝: 4
- 资源: 10
最新资源
- STM32开发 IIR带阻滤波器 STM32实现IIR无限冲击响应带阻滤波器设计,巴特沃斯滤波器,代码工整,自编代码,注释详细,赠送巴特沃斯和切比雪夫IIR带阻滤波器MATLAB程序
- 四轴抓取视觉旋转标定源代码,学习机器视觉和运动控制的最佳例子,基于VS2015 C++ 实现,仿雅马哈四轴机械手抓取程序,实现把两个任意摆放的物料通过视觉算法和运动控制指令定位摆放到指定的位置并拼接起
- COOFDM的Matlab仿真程序,包括文档代码解释和理论解释
- 伺服驱动器,你还在为伺服驱动器 FPGA架构苦恼吗,本方案FPGA代码实现电流环 速度环 位置环 SVPWM 坐标变 测速 分频 滤波器等,程序方便移植不同的平台,具有很高的研究价值
- omron欧姆龙CJ CP程序 欧姆龙CJ2M-CPU35,主机架搭载两套从机架,ID263.OD263等输入输出IO模块 全自动电池注液封装机,NC413四轴模块轴控制,SCU31无协议读写欧姆龙E
- 基于PI控制器的单相逆变器闭环控制模型,采用电压电流双环控制 波形输出良好,输出跟随给定220V交流输出 运行环境为matlab simulink plecs等
- PLC案例 污水处理系统 - 污水处理项目 某大厂技术给某国企做的污水处理项目,程序规范,图纸清晰,具有很好的参考价值 PLC: 西门子s7 200smart 系统涉及好氧发酵、厌氧发酵、冷热水P