Java面试必备知识点:核心问题解析

需积分: 10 6 下载量 25 浏览量 更新于2024-07-24 收藏 462KB PDF 举报
"Java常见面试问题" 在Java面试中,面试官通常会关注候选人的基础理论知识、实践经验以及对语言特性的理解。以下是一些常见的Java面试问题及其详细解答: 1. **面向对象的特征有哪些方面?** 面向对象的三大特征是封装、继承和多态。封装允许我们将数据和操作数据的方法捆绑在一起,隐藏内部细节。继承使得类之间可以形成层次结构,子类可以继承父类的属性和方法。多态则允许我们使用一个接口来调用不同的实现。 2. **String是最基本的数据类型吗?** 不是,String是对象,而不是基本数据类型。Java的8种基本数据类型包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。 3. **String和StringBuffer的区别** String是不可变对象,每次修改都会创建新的String对象。而StringBuffer是可变的,可以在已有对象上进行修改,更适合在多线程环境中使用,因为它提供了同步控制。 4. **运行时异常与一般异常有何异同?** 运行时异常(RuntimeException)不需显式捕获,它们通常表示编程错误。而一般异常(Checked Exception)需要被处理,否则编译器会报错。 5. **Servlet的生命周期** 包括加载和实例化、初始化、服务、销毁四个阶段。Servlet和CGI的主要区别在于,Servlet是基于连接的,效率更高,而CGI是为每个请求创建新的进程,效率较低。 6. **ArrayList, Vector, LinkedList的存储性能和特性** ArrayList和Vector都是基于数组实现,提供随机访问,但Vector是线程安全的。LinkedList基于双向链表,适合于频繁的插入和删除操作,但随机访问效率较低。 7. **EJB(Enterprise JavaBeans)** EJB是Java企业级应用的组件模型,用于构建分布式、事务处理的应用。SessionBean用于短暂的业务逻辑,EntityBean持久化数据,StatefulBean保持会话状态,而StatelessBean不保存状态。 8. **Collection和Collections的区别** Collection是所有集合接口的父接口,表示一组独立的对象。Collections是工具类,提供了一组静态方法,用于操作集合。 9. **&和&&的区别** &是位运算符,可以用于逻辑与和按位与。&&是逻辑与运算符,只有当左侧表达式为真时,才会计算右侧表达式。 10. **HashMap和Hashtable的区别** HashMap是非同步的,允许null键和值,而Hashtable是同步的,不允许null键和值。 11. **final, finally, finalize的区别** final修饰变量表示不可更改,修饰方法表示不能重写,修饰类表示不能继承。finally是异常处理结构的一部分,确保代码块始终执行。finalize是对象被垃圾收集前的清理方法。 12. **sleep()和wait()的区别** sleep()使当前线程暂停指定时间,不会释放锁。wait()使线程等待,释放了锁,需要其他线程调用notify()或notifyAll()唤醒。 13. **Overload和Override的区别** Overload是方法名相同但参数列表不同,是编译时多态。Override是子类重写父类方法,需要方法签名完全一致,是运行时多态。Overloaded方法不能改变返回值类型。 14. **error和exception的区别** Error是严重问题,如系统崩溃,无法恢复,通常不需捕获。Exception是程序可处理的异常,可以通过try-catch语句捕获。 15. **同步和异步** 同步意味着多个任务顺序执行,确保数据的一致性;异步则允许并发执行,提高效率。同步常用于数据一致性要求高的场景,异步用于非阻塞I/O和多任务并发。 16. **abstractclass和interface的区别** 抽象类可以有构造方法、字段和非抽象方法,可以实现多继承。接口只有抽象方法和常量,支持多继承,但实现接口的类必须实现所有接口方法。 17. **heap和stack的区别** 堆主要存放对象实例,是动态分配内存的区域。栈是线程私有,用于存储局部变量、方法调用等,内存管理自动且快速。 18. **forward和redirect的区别** forward是服务器内部跳转,不改变URL,共享请求范围内的数据。redirect是客户端重定向,浏览器会发起新的请求,不保留请求数据。 19. **EJB与JAVABEAN的区别** EJB是服务器端组件,提供事务、安全性等服务,适合企业级应用。JavaBean是客户端组件,用于视图展示和数据绑定,主要用于GUI开发。 20. **StaticNestedClass和InnerClass的不同** StaticNestedClass是静态嵌套类,不持有外部类的引用,可以独立存在。InnerClass是非静态嵌套类,与外部类有紧密关联,需要外部类实例才能创建。 21. **JSP中的动态INCLUDE与静态INCLUDE** 动态INCLUDE(<jsp:include>)在每次请求时都执行,可以传入参数。静态INCLUDE(<%@ include %>)在编译时合并,没有动态效果。 22. **什么时候用assert** assert用于单元测试和调试,断言某个条件应该是真的,如果条件为假,则抛出AssertionError。 23. **GC是什么?为什么要有GC?** GC是Garbage Collector,负责回收不再使用的对象占用的内存,防止内存泄漏。有了GC,程序员无需手动管理内存,简化了编程。 24. **shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?** 第一行代码可能会导致数据溢出,因为s1+1的结果可能超过了short的范围。第二行代码使用了自动类型提升,避免了溢出问题。 25. **Math.round(11.5)等于多少?Math.round(-11.5)等于多少?** Math.round(11.5)等于12,Math.round(-11.5)等于-11,round方法四舍五入到最接近的整数。 26. **Strings=new String("xyz");创建了几个StringObject?** 创建了两个,一个是字面量"xyz",另一个是Strings引用的新对象。 27. **设计4个线程,两个增加j,两个减少j** 这涉及到多线程同步问题,可以使用synchronized关键字和循环控制确保正确性。 28. **Java有没有goto?** Java没有goto语句,它鼓励使用结构化的控制流。 29. **启动一个线程是用run()还是start()?** 使用start(),它会调用run()方法并启动新线程。直接调用run()方法只会在一个线程中执行,不会创建新线程。 30. **EJB包** EJB相关的包通常包括javax.ejb.*,用于定义EJB接口和实现。 这些问题涵盖了Java的基础语法、面向对象、集合框架、多线程、异常处理、网络编程等多个方面,是面试中常见的考察点。理解和掌握这些知识点对于成为一名合格的Java开发者至关重要。