### 华为Java面试题知识点解析 #### 一、Java面向对象基础 1. **super()与this()的区别** - `super()`用于调用父类的构造方法或父类中的成员方法。 - `this()`用于调用本类中的其他构造方法。 2. **作用域public, protected, private,以及不写时的区别** - `public`:公共访问级别,可以在任何地方被访问。 - `protected`:受保护访问级别,可以在同一包内或者子类中访问。 - `private`:私有访问级别,只能在定义该成员的类内部访问。 - 不写访问修饰符(默认):包访问级别,只在同一包内的类之间可见。 3. **编程输出图形** - 这里通常会给出具体的图形样式,如打印金字塔形等,主要考察对循环的理解和应用。 4. **Java的事件委托机制和垃圾回收机制** - **事件委托机制**:在GUI编程中,当用户触发事件时(如点击按钮),系统会通过监听器(Listener)模式将事件处理委托给注册过的监听器对象。 - **垃圾回收机制**:自动管理内存的过程,Java虚拟机会自动识别不再使用的对象并释放其占用的内存空间。 5. **如何跳出当前的多重嵌套循环** - 使用`break`语句配合标记变量或外层循环标签可以实现。 6. **Java序列化及其实现** - Java序列化是将对象的状态信息转换为字节序列,便于存储或传输。实现序列化需让类实现`Serializable`接口,对于自定义序列化逻辑,可实现`readObject`和`writeObject`方法。 7. **单个.java文件包含多个类的限制** - 一个`.java`文件可以包含多个类,但只有一个公共类(public class),且文件名必须与公共类名相同。 8. **排序方法及其Java实现** - 排序算法包括冒泡排序、选择排序、插入排序、快速排序等。例如,快速排序的核心思想是分治策略,通过一趟排序将待排记录分割成独立的两部分,其中一部分的所有记录都比另一部分的所有记录小,则可分别对这两部分继续进行排序,以达到整个序列有序。 9. **Overload和Override的区别** - **重载(Overloading)**:在一个类中定义了多个同名的方法,但参数列表不同(参数类型、数量或顺序不同)。 - **重写(Overriding)**:子类覆盖父类中的方法,要求方法名、参数列表、返回类型完全一致(除了父类方法返回类型为`void`,子类可以不声明返回类型)。 10. **Final类的特点** - `final`类不能被继承,即无法创建此类的子类。 - `final`方法不可被重写。 - `final`变量一旦赋值后无法修改。 11. **继承时类的执行顺序问题** - 类的继承关系中,构造方法的执行顺序遵循从基类到派生类的原则。 - 构造方法的调用必须出现在第一行,通常是通过`super()`调用基类的构造方法。 12. **内部类的实现方式** - 内部类分为成员内部类、局部内部类、匿名内部类等。 - 成员内部类直接定义在外部类的成员位置,可以访问外部类的所有成员。 13. **Java实现排序及序列化方法** - 实现排序可以使用数组或集合类,结合不同的排序算法。 - 序列化实现通常有两种方法:实现`Serializable`接口;自定义实现`readObject`和`writeObject`方法。 14. **COLLECTION框架中实现比较的接口** - 实现比较通常需要实现`Comparable`接口或`Comparator`接口。 15. **插入法排序的Java代码实现** - 插入排序是一种简单的排序算法,通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 16. **截取字符串并保证汉字完整性** - 需要考虑汉字占两个字节的情况,确保不会截断汉字的一半。 17. **Java编程打印昨天的当前时刻** - 可以使用`Calendar`类设置时间偏移量,或将当前时间减去一天。 18. **文件读写实现计数器** - 文件读写可以使用`FileInputStream`、`FileOutputStream`等类实现,计数器可通过读取文件内容然后写回更新后的值来实现。 19. **抽象类和接口的区别** - 抽象类可以包含具体实现的方法和抽象方法,而接口只能包含抽象方法。 - 抽象类支持继承的概念,接口则支持多重继承。 20. **类的反射机制** - 反射机制允许程序在运行时获取类的信息并直接操作对象。 - 主要涉及`Class`类和`Method`、`Field`等类。 21. **得到Class的三个过程** - 通过类名.class获取Class对象。 - 通过对象的getClass()方法获取Class对象。 - 通过Class.forName()方法加载并获取Class对象。 22. **如何调用类中的一个方法** - 使用反射机制通过`Method`类的invoke()方法。 23. **数值型字符转换为数字** - 使用`Integer.parseInt()`或`Double.parseDouble()`等方法。 24. **数字转换为字符** - 使用`String.valueOf()`方法。 25. **去除小数点前两位并四舍五入** - 使用`Math.round()`方法结合适当的数学运算。 26. **获取年月日、小时分秒** - 使用`java.time`包下的类如`LocalDateTime`、`LocalDate`等。 27. **获取从1970年到现在的毫秒数** - 使用`System.currentTimeMillis()`方法。 28. **获取某日期是当月的最后一天** - 使用`LocalDate`的`plusMonths()`和`minusDays()`方法组合实现。 29. **日期格式化** - 使用`DateTimeFormatter`类进行日期格式化。 30. **编码转换** - 使用`new String(byte[], charsetName)`构造方法实现字符集之间的转换。 31. **String创建对象的数量** - 字面量形式创建的字符串会在常量池中查找是否存在相同的字符串,如果存在则返回该字符串引用,不存在则创建新字符串并返回其引用。 32. **float型变量赋值问题** - `float f = 3.4`是错误的,因为3.4默认为`double`类型,应改为`float f = 3.4F`。 33. **常用的类、包、接口举例** - 类:`String`、`ArrayList`、`HashMap`、`Thread`、`File` - 包:`java.util`、`java.io`、`java.lang`、`java.net`、`java.sql` - 接口:`List`、`Map`、`Runnable`、`Serializable`、`Comparator` 34. **Java内存泄漏问题** - Java中的内存泄漏通常指由于对象引用未能被及时释放而导致的内存占用问题。 35. **Java实现多态的机制** - 多态是通过继承和接口实现的,允许子类对象向上转型为父类类型。 36. **垃圾回收器的基本原理** - 垃圾回收器会定期检查不再被引用的对象,并将其占用的内存回收。 37. **静态变量和实例变量的区别** - 静态变量属于类,所有对象共享一份拷贝。 - 实例变量属于对象,每个对象都有一份拷贝。 38. **从static方法内部调用非static方法** - 不能直接调用,但可以通过创建对象间接调用。 39. **实现克隆方法的关键代码** - 通常包含`super.clone()`调用。 40. **Java异常处理机制** - 关键字`throws`表示方法可能抛出的异常。 - `throw`用于抛出异常。 - `try`用于包裹可能抛出异常的代码块。 - `catch`用于捕获异常。 - `finally`用于指定无论是否发生异常都需要执行的代码。 41. **冒泡排序法** - 通过重复遍历待排序的列表,每次遍历时通过两两比较相邻元素来调整其顺序。 42. **String与StringBuffer的区别** - `String`是不可变的,而`StringBuffer`是可变的。 - `StringBuffer`提供了线程安全的方法。 43. **堆栈的Java代码实现** - 可以通过数组或链表实现。 44. **集合的作用** - 集合是用来存储和操作对象的容器。 45. **集合的通用方法** - `add`、`remove`、`contains`、`size`、`clear`等。 46. **ArrayList、Vector、LinkedList、HashMap和Hashtable的区别** - `ArrayList`和`Vector`都是基于数组实现的,但`Vector`是线程安全的。 - `LinkedList`基于双向链表实现,适合频繁插入删除操作。 - `HashMap`允许null键和值,非线程安全。 - `Hashtable`不允许null键和值,线程安全。 47. **Collection和Collections的区别** - `Collection`是集合接口,定义集合的基本行为。 - `Collections`是工具类,提供了一系列静态方法来操作集合。 48. **Set如何判断重复** - `Set`通过`equals()`方法来判断元素是否重复。 49. **List、Set、Map是否继承自Collection接口** - `List`和`Set`继承自`Collection`接口,`Map`没有直接继承`Collection`接口。 50. **面向对象的特征** - 封装、继承、多态。 51. **String是否是最基本的数据类型** - 不是,`String`是引用类型。 52. **int与Integer的区别** - `int`是基本数据类型,`Integer`是`int`的封装类。 53. **运行时异常与一般异常的异同** - 运行时异常通常是程序设计错误导致的,不需要显式捕获。 - 一般异常是可以通过编程手段避免的,需要显式捕获或声明抛出。 54. **`&`和`&&`的区别** - `&`是位运算符,同时也可以用于布尔表达式的短路与运算。 - `&&`专门用于布尔表达式的短路与运算,当第一个条件为假时,后面的条件不会被计算。 55. **`final`、`finally`、`finalize`的区别** - `final`用于定义常量或不可变对象。 - `finally`用于确保一段代码一定会被执行,通常用在`try-catch`语句中。 - `finalize`是`Object`类的一个方法,用于在垃圾回收之前做一些清理工作。 56. **heap和stack的区别** - 堆(heap)用于存放动态分配的内存区域,由垃圾回收器管理。 - 栈(stack)用于存放方法调用时所需的局部变量和方法参数等。 57. **Static Nested Class和Inner Class的不同** - 静态内部类(Static Nested Class)不依赖于外部类的实例,可以直接使用。 - 普通内部类(Inner Class)依赖于外部类的实例,必须先创建外部类实例才能创建普通内部类实例。 58. **何时使用assert** - 断言(assert)用于开发过程中验证假设条件,通常在调试阶段使用。 59. **GC(Garbage Collection)** - GC是自动管理内存的过程,目的是释放不再使用的对象所占用的内存空间,提高内存利用率。
剩余63页未读,继续阅读
- TOBEK2014-10-19挺全面的。
- shi_xiang2013-04-12非常感谢,很有帮助
- 粉丝: 1
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (18956428)STM32F103C8T6 小系统原理图 PCB
- (175828796)python全国疫情数据爬虫可视化分析系统(django)源码数据库演示.zip
- 记账本项目市场需求文档(MRD)
- (31687028)PID控制器matlab仿真.zip
- 基于SpringBoot的“在线答疑系统”的设计与实现(源码+数据库+文档+PPT).zip
- (11828838)进销存系统源码
- 记账本项目三大模块原型图
- fed54987-3a28-4a7a-9c89-52d3ac6bc048.vsidx
- (177367038)QT实现教务管理系统.zip
- (178041422)基于springboot网上书城系统.zip