### 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`:键值对集合,键不允许重复。
剩余63页未读,继续阅读
- 粉丝: 4
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 《全面解析图像平滑处理:多种滤波方法及应用实例》
- 关于 v s 2019 c++20 规范里的 S T L 库里模板 decay-t<T>
- RL Base强化学习:信赖域策略优化(TRPO)算法TensorFlow实现
- RL Base强化学习:信赖域策略优化(TRPO)算法Pytorch 实现
- 全球各国家及城市json数据
- 用Rust实现仿nginx,力争实现一个可替代方案,http/https代理, socks5代理, 负载均衡, 反向代理, 静态文件服务器,四层TCP/UDP转发,websocket转发, 内网穿透N
- 计算机二级考试选择题练习模拟题70道及答案.doc
- 数据中台(大数据平台)数据建模存储标准规范.pdf
- Linux 平台下基于 Rust + GTK 开发的网易云音乐播放器
- 基于Rust语言的新一代组装式应用开发框架,它强调 简单性、可扩展性和生产力
评论0