Java面试必备知识:基础、算法与Web技术要点解析

需积分: 12 2 下载量 64 浏览量 更新于2024-07-29 收藏 795KB DOC 举报
"JAVA面试宝典2010" 这篇摘要涵盖了Java编程语言中的核心知识点,涉及了Java的基础语法、编程技巧、面向对象特性、异常处理、多线程、集合框架、输入输出流以及内存管理等多个方面。以下是这些知识点的详细说明: 1. Java源文件可以包含多个类,但只能有一个公开类(public class),其他类可以是非公开的。 2. Java没有`goto`关键字,鼓励使用结构化的控制流程。 3. `&`是逻辑与运算符,无论两边条件如何都会执行;`&&`是短路与运算符,如果左边为假,右边的表达式不会执行。 4. 使用`break`语句可以跳出多重嵌套循环。 5. `switch`语句不能作用于`byte`之外的类型,如`long`和`String`,但在Java 7及以后版本,`String`可以用在`switch`中。 6. `short s1 = 1; s1 = s1 + 1;`会导致数据类型提升,需要强制类型转换;而`s1 += 1;`会自动处理类型提升。 7. `char`类型可以存储一个中文汉字,因为UTF-16编码下每个中文汉字占两个字节。 8. 最有效率计算2乘以8的方法是`2 << 3`。 9. 设计一个计算器要考虑输入输出、计算逻辑以及异常处理。 10. `final`修饰变量时,其引用不可变,但引用的对象可以变,除非对象也是`final`的。 11. `==`比较基本类型值或对象引用,`equals()`方法比较对象内容。 12. 静态变量属于类,实例变量属于对象。 13. 不能从`static`方法内部调用非`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`方法不能是`static`、`native`或`synchronized`。 26. 内部类可以访问外部类的成员,包括私有成员,但静态内部类不能直接访问外部类的非静态成员。 27. 匿名内部类可以继承类或实现接口,可以没有名字。 28. `getClass()`返回对象的运行时类信息。 29. `String`是对象,不是基本数据类型。 30. `s = s + " world!"`创建了新的`String`对象,原始对象内容不变。 31. 不可以继承`String`类,因为它被声明为`final`。 32. 创建了两个`String`对象,`new String("xyz")`和`"xyz"`。 33. `String`是不可变的,`StringBuffer`在多线程环境下更安全,且在频繁修改时效率更高。 34. 逗号分隔字符串转数组,可用`split(",")`方法。 35. 数组的`length`属性,字符串的`length()`方法。 36. `s="a"+"b"+"c"+"d"`创建了四个对象,字符串连接时会创建新对象。 37. `try-finally`中的`return`语句后,`finally`块总会执行。 38. `final`, `finally`用于异常处理,`finalize`是对象销毁前的回调方法。 39. 运行时异常是程序运行时可能出现的异常,一般异常是编译期间需要处理的异常。两者都需要捕获或声明。 40. `error`是系统级别的问题,`exception`是程序可处理的问题。 41. 异常处理机制通过`try-catch-finally`捕获异常,`throws`声明抛出异常,`throw`抛出异常,`try`包含可能抛出异常的代码。 42. 用`Thread.sleep()`使线程暂停,`wait()`是对象锁的一部分,用于线程间通信。 43. 同步保证同一时间只有一个线程执行,异步允许多个线程并发执行。根据需求选择,如共享资源应同步,独立任务应异步。 44. 是否同步取决于方法的访问修饰符和同步块的使用。 45. 多线程有两种实现:继承`Thread`类或实现`Runnable`接口。同步有`synchronized`关键字和`Lock`接口。 46. `start()`启动线程,`run()`直接执行方法。线程进入`synchronized`方法后,其他线程不能进入该对象的其他`synchronized`方法。 47. 线程状态包括新建、就绪、运行、阻塞和死亡,它们之间有特定转换。 48. `synchronized`与`Lock`都用于同步,`synchronized`自动释放锁,`Lock`需手动释放,`Lock`更灵活。 49. 设计线程同步代码实现题目描述的任务。 50. 用`run()`启动线程,`synchronized`关键字用于同步方法。 51. 集合框架结构包括`Collection`、`List`、`Set`、`Map`,实现了各种操作和接口。 52. 实现比较需要实现`Comparable`接口。 53. `ArrayList`和`Vector`都是列表,但`ArrayList`线程不安全,`Vector`线程安全。 54. `HashMap`非同步,`Hashtable`同步,`HashMap`允许`null`键值,`Hashtable`不允许。 55. `List`有序可重复,`Map`存储键值对,`Set`无序不重复。 56. `List`、`Set`、`Map`分别有各自的特性和用途,如`ArrayList`适合随机访问,`LinkedList`适合增删,`HashSet`保证唯一性,`HashMap`提供键值对快速查找。 57. `ArrayList`、`Vector`使用数组存储,`LinkedList`使用链表。 58. 去除`Vector`重复元素可使用`removeDuplicates()`方法。 59. `Collection`是顶级接口,`Collections`是工具类,提供集合操作方法。 60. 使用`equals()`判断集合元素是否相等,`==`判断引用是否相同。 61. 集合类包括`List`、`Set`、`Map`等,常用方法如`add()`、`remove()`、`get()`等。 62. 相同值的两个对象可以有不同的`hashCode`,`equals()`用于判断对象内容,`hashCode()`用于哈希表查找。 63. `TreeSet`比较使用对象的`compareTo()`方法,若同时有父类和子类实例,会按照实际类型调用相应方法。 64. 常用类:`String`、`ArrayList`、`HashMap`等;包:`java.util`、`java.io`等;接口:`List`、`Comparator`等。 65. 流分为字节流和字符流,分别处理字节和字符数据。 66. 序列化用于持久化对象,通过实现`Serializable`接口实现。 67. JVM加载类时,首先通过类名找到对应的`.class`文件,然后解析并创建类对象。 68. 堆和栈分别存储对象和局部变量,堆负责对象分配,栈负责方法调用。 69. GC(垃圾回收)自动回收不再使用的内存,提高内存利用率。 70. 垃圾回收机制包括标记-清除、复制、标记-压缩等。 71. 主动触发垃圾回收可使用`System.gc()`,但不推荐。 72. `assert`用于单元测试,断言某个条件是否满足。 73. Java内存泄漏通常发生在手动创建的对象未被正确释放。 74. 类名不能与Java内置类名相同,否则编译错误。 以上内容仅涵盖了一部分面试题,实际面试