Java面试必备知识点详解

需积分: 50 0 下载量 201 浏览量 更新于2024-07-26 收藏 2.01MB PDF 举报
"Java面试宝典,涵盖Java基础知识、算法与编程、HTML&JavaScript&AJAX等多个方面的面试题目,旨在帮助面试者准备Java相关的技术面试。 一、Java基础部分 1. 一个`.java`源文件可以包含多个类,但只能有一个公开类(public class),其他类可以是非公开的,用于组织代码。 2. Java没有`goto`关键字,它鼓励使用结构化的控制流程。 3. `&`是位运算符,`&&`是逻辑运算符。`&`始终计算两边的操作数,而`&&`(短路逻辑运算符)仅在必要时计算右侧操作数。 4. 使用`break`语句可以跳出多重嵌套循环。 5. `switch`语句不能作用于`byte`,可以作用于`char`、`short`、`int`、枚举类型及`String`(Java 7以后)。 6. `short s1 = 1; s1 = s1 + 1;`会导致类型提升,应使用`s1 += 1;`避免类型转换错误。 7. char型变量可以存储单个Unicode字符,包括中文汉字。 8. 最有效率的方式计算2乘以8是`2 * 8`。 9. 设计一个大数计算器需要考虑长整数的运算和溢出问题。 10. `final`修饰的变量其引用一旦赋值后不可变,但如果是对象,则对象的内容可以变。 11. `==`比较基本类型值,`equals()`比较对象内容。 12. 静态变量属于类,实例变量属于对象。 13. 不可以从`static`方法内部直接调用非`static`方法,需通过对象实例调用。 14. `Integer`是`int`的包装类,两者在性能和自动装箱拆箱上有区别。 15. `Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。 16. 代码可能存在的不妥之处可能涉及类型转换、边界条件或异常处理等。 17. 作用域`public`、`private`、`protected`和默认作用域分别代表全局、类内、同一包内和类内及子类可见。 18. Overload是重载,不改变返回值类型;Override是重写,必须保持返回值类型和方法签名一致。 19. 构造器不能被override,但可以重载。 20. 接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的`main`方法。 21. 写`clone()`方法时,通常会使用`super.clone()`。 22. 面向对象的特征包括封装、继承、多态。 23. Java通过方法重写和接口实现实现多态。 24. abstract class可以包含方法实现,而interface不能。 25. abstract method不能同时是static、native或synchronized。 26. 内部类是定义在另一个类内部的类,分为静态嵌套类(Static Nested Class)和非静态嵌套类(Inner Class)。 27. 内部类可以直接访问外部类的成员,包括私有成员,但外部类访问内部类需要实例化内部类。 28. 匿名内部类可以继承类和实现接口,但不能同时进行。 29. `super.getClass()`返回父类的`Class`对象。 30. String是对象,不是基本类型。 31. `s = s + " world!"`创建了新对象,原始对象不变。 32. 不可以继承`String`类,因为它是final的。 33. `"xyz"`创建一个对象,`new String("xyz")`创建两个对象,一个在常量池,一个在堆。 34. `String`是不可变的,`StringBuffer`是可变的,适用于多线程环境。 35. 使用`split(",\\s*")`将逗号分隔的字符串转换为数组。 36. 数组有`length`属性,字符串有`length()`方法。 37. 创建3个对象。 38. `finally`块总是在`return`之前执行。 39. 代码输出取决于具体代码。 40. `final`声明不可变变量,`finally`确保代码块执行,`finalize()`是对象清理。 41. 运行时异常在运行时才会抛出,与编译时异常不同。 42. error表示严重问题,无法恢复;exception表示可处理的异常。 43. 异常处理机制:try-catch-finally,`try`捕获异常,`catch`处理异常,`finally`执行清理代码。 44. 常见的runtime exception有NullPointerException、ArrayIndexOutOfBoundsException等。 45. throws声明异常,throw抛出异常,try捕获,catch处理,finally确保执行。 46. 用`thread.start()`启动线程,`synchronized`修饰同步方法。`stop()`和`suspend()`不安全,不推荐。 47. `sleep()`让当前线程休眠,`wait()`使线程等待,释放锁。 48. 同步确保数据一致性,异步提高效率。同步适用于数据共享,异步适用于并行处理。 49. 是否同步取决于具体代码实现。 50. 多线程通过`Thread`类或实现`Runnable`接口。同步有`synchronized`、`Lock`等。 51. 使用`thread.start()`启动线程。 52. 另一线程可进入非`synchronized`方法。 53. 线程状态包括新建、就绪、运行、阻塞和终止。状态转换涉及线程调度。 54. `synchronized`与`Lock`都是同步机制,`synchronized`更简单,`Lock`更灵活。 55. 示例代码涉及线程同步和计数。 56. 示例代码涉及线程同步和控制流程。 57. Collection框架包括List、Set、Queue等,结构层次分明。 58. 实现比较需实现Comparable接口。 59. ArrayList是动态数组,Vector线程安全,性能稍低。 60. HashMap非同步,Hashtable同步,HashMap允许null键值,Hashtable不允许。 61. List存储有序元素,可重复;Map存储键值对,键唯一。 62. List和Set都继承Collection,Map独立。 63. List特点:有序、可重复;Set特点:无序、唯一;Map特点:键值对、键唯一。 64. ArrayList性能优于LinkedList的随机访问,插入删除慢;LinkedList反之。 65. 使用`removeAll()`去除重复元素。 66. Collection是接口,Collections是工具类,提供集合操作。 67. 使用`equals()`判断集合元素是否相等。 68. 集合类包括List、Set、Map等,主要方法包括增删改查等。 69. 可能不同,因为哈希码可能不同,但值相同。 70. 使用子类的`compareTo()`方法。 71. 常用类:ArrayList、HashMap、String、File、Scanner;包:java.util、java.io、java.lang;接口:Comparable、Iterable、Cloneable。 72. 字节流:InputStream/OutputStream;字符流:Reader/Writer。基础抽象类:InputStream/OutputStream/Reader/Writer。 73. 字节流处理字节,字符流处理字符,字符流基于字节流。 74. 序列化将对象状态持久化。Serializable接口标记对象可序列化。 75. 加载class文件通过类加载器,从类路径中找到.class文件并解析。 76. Heap存储对象实例,Stack存储方法调用。 77. GC自动回收不再使用的内存,减少内存泄露。 78. 优点:自动管理内存,防止内存泄露。原理:可达性分析,标记清除等。 79. 垃圾回收不一定立即回收,可手动调用`System.gc()`建议回收。 80. assert用于断言,调试时检查代码假设是否正确。 81. Java中可能出现内存泄漏,例如未释放的全局变量或静态集合。 82. 不能,因为`java.lang.String`是内置类。 83. 示例代码涉及错误检查。 二、算法与编程 这部分涉及文件操作、字符串处理、排序算法等实际编程问题,需要根据题目描述编写具体代码。 三、HTML&JavaScript&AJAX 这部分考察HTML页面结构、JavaScript编程和AJAX异步通信,例如日期比较、表格样式设置、数据提取等。同样需要编写代码来解决这些问题。