"Java基础知识,包括面试笔试题,涵盖了面向对象特性、数据类型、异常处理、集合框架、并发编程等多个核心概念。"
在Java基础知识的学习中,了解和掌握以下知识点至关重要:
1. 面向对象的特征:
- 抽象:允许创建一个代表一类对象的模板,具体实例可以通过继承这个模板来实现。
- 继承:一个类可以从另一个类继承属性和方法,以便复用代码和实现多态。
- 封装:将数据和操作数据的方法捆绑在一起,保护内部数据不被外部随意访问。
- 多态性:不同对象对同一消息做出不同的响应,使得代码更具通用性。
2. 数据类型:
- `String` 不是最基本的数据类型,它是一个对象,而基本数据类型如 `int`、`char` 等是直接存储值的。
3. `int` 和 `Integer` 的区别:
- `int` 是基本数据类型,直接存储数值;`Integer` 是 `int` 的包装类,可以存储 null 值,提供更多方法。
4. `String` 和 `StringBuffer` 的区别:
- `String` 对象一旦创建就不能修改;`StringBuffer` 提供了可变的字符串,适用于频繁修改字符串的场景。
5. 运行时异常与一般异常:
- 运行时异常不强制捕获,通常与程序错误有关;一般异常是必须捕获或声明抛出的,用于处理可能出现的逻辑错误。
6. Servlet 生命周期:
- 包括加载和初始化、服务、销毁三个阶段。Servlet 与 CGI 的主要区别在于,Servlet 保持长连接,性能更高。
7. `ArrayList`, `Vector`, `LinkedList` 的存储性能和特性:
- `ArrayList` 和 `Vector` 都基于数组实现,适合随机访问,但 `Vector` 是线程安全的。
- `LinkedList` 基于链表,插入和删除速度快,但访问速度慢。
8. EJB(Enterprise JavaBeans):
- 基于 J2EE,提供组件模型用于构建分布式企业级应用。SessionBean 处理业务逻辑,EntityBean 表示持久化数据,StatefulBean 保持会话状态,StatelessBean 不保存状态。
9. `Collection` 和 `Collections`:
- `Collection` 是所有集合接口的根接口,表示一组独立的对象;`Collections` 是工具类,提供了集合操作的方法。
10. `&` 和 `&&` 的区别:
- `&` 是按位与运算符,`&&` 是逻辑与运算符,后者具有短路效果。
11. `HashMap` 和 `Hashtable`:
- `HashMap` 是非同步的,允许 `null` 键和值;`Hashtable` 是同步的,不允许 `null` 键值。
12. `final`, `finally`, `finalize`:
- `final` 修饰变量不可改变,修饰类不能被继承,修饰方法不能被重写。
- `finally` 用于保证代码块一定会执行,常用于资源清理。
- `finalize` 是对象被垃圾收集器回收前调用的方法。
13. `sleep()` 和 `wait()`:
- `sleep()` 让当前线程休眠,不会释放锁;`wait()` 让线程等待,会释放锁,需要配合 `notify()` 或 `notifyAll()` 使用。
14. `Overload` 和 `Override`:
- `Overload` 是重载,同一个类中方法名相同但参数列表不同;`Override` 是重写,子类方法覆盖父类方法。
- 重载方法不能改变返回类型,而重写方法必须保持返回类型一致。
15. `error` 和 `exception`:
- `error` 通常是系统级别的问题,如内存溢出,需要立即解决;`exception` 是应用程序层的异常,可以捕获处理。
16. 同步和异步:
- 同步意味着多个线程顺序执行,确保数据一致性;异步允许多个任务并行,提高效率。根据数据共享和交互需求选择。
17. `abstract class` 和 `interface`:
- 抽象类可以包含字段和实现部分,最多只能单继承;接口只包含方法签名,可以多实现。
18. 堆和栈:
- 堆存储对象实例,动态分配内存,垃圾回收管理;栈存储基本类型和对象引用,内存自动回收。
19. `forward` 和 `redirect`:
- `forward` 在服务器内部重定向,维持请求状态;`redirect` 客户端重新发起请求,不保留状态。
20. EJB 与 JavaBean:
- EJB 是服务器端组件,处理企业级功能,如事务管理;JavaBean 是客户端组件,简化UI构建。
21. `StaticNestedClass` 和 `InnerClass`:
- 静态嵌套类与外部类没有实例关联,可以独立存在;内部类需要外部类实例才能创建。
22. 动态 `INCLUDE` 与静态 `INCLUDE`:
- 动态 `jsp:include` 在每次请求时执行包含的页面;静态 `<%@ include file="">` 在编译时合并。
23. `assert`:
- 用于断言,测试代码中的假设,仅在开启断言时生效。
24. GC(Garbage Collection):
- 自动回收不再使用的对象内存,防止内存泄漏。
25. shorts1=1;s1=s1+1; 和 shorts1=1;s1+=1; 的区别:
- 前者在计算过程中可能会导致数据溢出,因为中间结果会提升为 `int` 类型;后者直接在 `short` 类型上进行操作。
26. Math.round(11.5) 和 Math.round(-11.5):
- Math.round 返回最接近的整数,正数向右舍入,负数向左舍入,所以结果分别是 12 和 -11。
27. Strings=new String("xyz"); 创建了几个 `String` 对象:
- 创建了两个,一个是字面量 "xyz",另一个是新对象。
28. 线程同步问题:
- 设计线程同步机制,如使用 `synchronized` 关键字或 `Lock` 接口,确保线程安全地共享资源。
这些只是Java基础知识的一部分,深入学习还需要理解类加载机制、异常处理策略、IO流、网络编程、多线程、设计模式等更多内容。通过不断练习和项目经验积累,才能真正掌握Java这门强大的编程语言。