Java面试必备知识点详解

5星 · 超过95%的资源 需积分: 50 122 下载量 115 浏览量 更新于2024-07-30 51 收藏 2.01MB PDF 举报
"Java面试宝典" 这是一份详尽的Java面试指南,涵盖了Java基础知识、算法与编程、HTML&JavaScript&AJAX等多个方面。以下是其中的一些关键知识点: 1. **Java源文件与类的关系**:一个`.java`源文件可以包含多个类,但只能有一个公开的(public)类,其名称需与文件名相同。 2. **goto关键字**:Java中没有`goto`关键字。 3. **&和&&的区别**:`&`是逻辑与运算符,无论两边条件如何都会执行;`&&`是短路与运算符,如果左边表达式为假,则不会评估右边表达式。 4. **跳出多重嵌套循环**:使用`break`语句可以跳出最近的循环,配合标签可以跳出特定循环。 5. **switch语句的适用范围**:switch不能用于`byte`之外的类型,例如`long`和`String`,但在Java 7及以后版本中,`String`可以用在`switch`中。 6. **short变量与运算**:在`short s1 = 1; s1 = s1 + 1;`中,会自动提升为`int`类型,可能导致溢出。而`s1 += 1;`是合法的,因为编译器会自动处理类型转换。 7. **char变量与汉字**:char可以存储单个Unicode字符,因此可以存储中文汉字。 8. **高效计算2乘以8**:最简单的方式是`2 << 3`,利用位移操作。 9. **设计大数计算器**:要考虑大数运算的算法,如使用字符串表示数值进行加减乘除。 10. **final关键字**:final修饰的变量其引用一旦赋值后不可变,但如果是对象,则对象的内容可能改变。 11. **"=="与equals方法**:"=="比较对象的引用,equals比较对象内容。 12. **静态与实例变量**:静态变量属于类,而实例变量属于对象。 13. **static方法与非static方法**:不能从static方法内部直接调用非static方法。 14. **Integer与int**:Integer是int的包装类,它们在存储和效率上有不同。 15. **Math.round**:四舍五入,`Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11。 16. **代码不妥之处**:未给出具体代码,无法分析。 17. **访问修饰符的区别**:public、private、protected以及默认(包私有)控制了类、方法和变量的可见性。 18. **重载与覆盖**:重载允许方法签名不同,而覆盖(Override)则要求子类方法与父类方法签名完全一致且访问权限不更低。 19. **构造器不可被覆盖**:构造器不能被重写,但可以被重载。 20. **接口与继承**:接口可以继承接口,抽象类可以实现接口,但不能继承具体类。抽象类可以有静态的main方法。 21. **clone方法**:通常在重写`clone()`时,需要调用`super.clone()`。 22. **面向对象特征**:封装、继承、多态。 23. **多态机制**:Java通过方法重写和父类引用指向子类对象实现多态。 24. **abstract class与interface**:抽象类可以包含方法实现,而接口只定义方法签名。 25. **abstract method的限制**:abstract method不能是static、native或synchronized。 26. **内部类**:内部类可以访问外部类的所有成员,包括私有成员。Static Nested Class是静态内部类,不持有对外部类的引用,而Inner Class持有。 27. **内部类引用外部类**:内部类可以直接访问外部类的成员,但静态内部类需要通过外部类实例访问非静态成员。 28. **匿名内部类**:可以继承其他类或实现接口,常用于简洁地定义一次性使用的类。 29. **super.getClass()**:获取父类的Class对象。 30. **String不是基本数据类型**:它是对象,基本数据类型包括int、char等。 31. **String对象不变性**:`s = s + " world!";`会创建新对象,原始对象不变。 32. **不可继承String类**:String是final的,不能被继承。 33. **new String("xyz")**:创建了两个对象,一个是常量池中的"xyz",另一个是堆中的新对象。 34. **String与StringBuffer**:String是不可变的,而StringBuffer是可变的,适用于频繁修改字符串的情况。 35. **逗号分隔字符串转数组**:使用`split()`方法。 36. **length()方法**:String有`length()`方法,而数组使用`length`属性。 37. **创建对象数量**:取决于字符串连接的具体实现,可能创建多个对象。 38. **try-finally**:finally总是在try和catch之后执行,即使有return语句。 39. **程序输出**:未给出具体代码,无法确定。 40. **final, finally, finalize**:final修饰变量不可变,finally确保代码块始终执行,finalize是对象清理方法。 41. **运行时异常与一般异常**:运行时异常无需显式捕获,而一般异常需要。 42. **error与exception**:error是严重问题,如系统崩溃,exception是程序可预见的异常情况。 43. **异常处理**:使用try-catch-finally进行异常处理,try中抛出异常,catch捕获,finally确保资源释放。 44. **常见的runtime exception**:NullPointerException、ArrayIndexOutOfBoundsException等。 45. **异常处理关键词**:throws声明异常,throw抛出异常,try捕获异常,finally确保执行。 46. **线程创建**:用`Thread`类或实现`Runnable`接口。synchronized修饰同步方法,stop和suspend不推荐使用,因为不安全。 47. **sleep()与wait()**:sleep让线程暂停,wait让线程等待,两者都需要捕获InterruptedException。 48. **同步与异步**:同步确保数据一致性,异步提高响应速度。根据需求选择,如并发操作通常需要同步。 49. **代码示例**:未给出具体代码,无法分析。 50. **线程实现与同步方法**:线程有实现Runnable和继承Thread两种方式,同步有synchronized和Lock接口实现。 51. **启动线程**:使用`start()`,而非`run()`。 52. **线程同步**:同步方法内,同一对象的其他同步方法可以进入,不同对象的同步方法不受影响。 53. **线程状态**:新建、就绪、运行、阻塞、死亡。 54. **synchronized与Lock**:synchronized是内置锁,Lock提供更细粒度的控制,如可中断和尝试获取锁。 55. **多线程操作共享变量**:需考虑同步机制,如使用synchronized或Lock。 56. **线程循环控制**:通过设置标志变量和条件变量实现。 57. **Collection框架**:包含List、Set、Queue等接口,提供多种数据结构和操作。 58. **比较接口**:Comparable和Comparator,前者用于对象自然排序,后者用于定制排序。 59. **ArrayList与Vector**:ArrayList是线程不安全的,性能通常优于Vector。 60. **HashMap与Hashtable**:HashMap允许null键值对,而Hashtable不支持,且Hashtable是线程安全的。 61. **List, Set, Map区别**:List按顺序存储,Set不允许重复元素,Map存储键值对。 62. **ArrayList,Vector, LinkedList特性和性能**:ArrayList适合随机访问,Vector线程安全,LinkedList适合插入删除。 63. **去除Vector重复元素**:使用`removeDuplicates()`方法或转换为HashSet再转回。 64. **Collection与Collections区别**:Collection是接口,表示集合,Collections是工具类,提供集合操作。 65. **判断集合中元素唯一性**:使用HashSet,因为它不允许重复元素。 66. **集合类与常用方法**:ArrayList的add(), remove(), get(), set(); HashSet的add(), remove(); HashMap的put(), get(), remove()。 67. **equals()与==区别**:==比较对象引用,equals()比较对象内容。 68. **常用类与接口**:如ArrayList, HashMap, Thread, Runnable, Comparator等。 69. **不同的hash code与相同值**:可能,比如String的hash code是基于内容计算的,内容相同则hash code相同。 70. **TreeSet比较规则**:使用元素的compareTo()方法,对于父类和子类实例,使用子类的compareTo()。 71. **常用类、包、接口**:如ArrayList来自java.util包,Comparable接口等。 72. **Java流类型**:字节