Java面试必备:100道经典面试题解析

3星 · 超过75%的资源 需积分: 9 1 下载量 44 浏览量 更新于2024-07-30 1 收藏 185KB DOC 举报
"这是一份包含了100个经典的JAVA面试问题文档,涵盖了Java语言的基础、面向对象特性、异常处理、集合框架、多线程、内存管理、Web开发等多个核心领域,旨在帮助求职者准备Java程序员的面试。" 1、面向对象的特征包括封装、继承和多态。封装是将数据和操作数据的方法捆绑在一起,隐藏内部细节;继承允许类之间建立层次结构,子类继承父类的属性和方法;多态则是指同一个接口,使用不同的实例而产生不同的效果。 2、String在Java中不是基本数据类型,而是对象。Java提供基本数据类型的包装类,如Integer是int的包装类,它们之间主要的区别在于存储方式和操作灵活性。int是原始类型,直接存储值;Integer是对象,存储时会在堆上创建实例。 3、int是Java中的基本数据类型,而Integer是int的包装类。两者在使用上存在性能和上下文差异,例如Integer在进行比较时需要转换为int类型,而在自动装箱和拆箱时提供了便利。 4、String是不可变的,而StringBuffer是可变的。在字符串拼接时,StringBuffer更适合于多线程环境,因为它是线程安全的,而String每次修改都会生成新的对象。 5、运行时异常与一般异常(检查型异常)的区别在于,运行时异常不需要显式捕获,而检查型异常需要在编译时处理。两者都表示程序运行中可能遇到的问题,但运行时异常通常表示编程错误,而检查型异常通常表示需要用户处理的条件。 6、Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。与CGI相比,Servlet具有更高的效率和更好的状态管理,CGI每次请求都会创建新的进程,而Servlet在容器中保持单例,处理多个请求。 7、ArrayList、Vector和LinkedList分别是Java中的动态数组、线程安全的动态数组和链表实现。ArrayList适合随机访问,插入和删除较慢;Vector与ArrayList类似,但线程安全;LinkedList适合于频繁的插入和删除,但随机访问效率低。 8、EJB(Enterprise JavaBeans)基于Java EE平台实现,SessionBean用于处理业务逻辑,不持久化,而EntityBean对应数据库实体,负责持久化。StatefulBean保持会话状态,StatelessBean则不保持。 9、Collection是所有集合接口的父接口,Collections是工具类,提供集合操作的静态方法。 10、&是按位与运算符,&&是逻辑与运算符。在布尔表达式中,&&具有短路特性,即如果第一个操作数为假,则不会评估第二个操作数。 11、HashMap和Hashtable都是哈希表实现,但Hashtable是线程安全的,HashMap则不是。此外,Hashtable不支持null键或值,而HashMap允许null键和值。 12、final用于声明不可变的变量,finally确保代码块在异常发生时也会执行,finalize是对象被垃圾回收前调用的方法。 13、sleep()使当前线程休眠,不释放锁;wait()让线程等待,释放对象锁,通常与notify()、notifyAll()配合使用。 14、Overload是重载,允许方法有相同的名称但参数列表不同;Override是重写,子类方法覆盖父类方法。Overloaded方法不能改变返回类型。 15、Error是严重问题,通常由系统错误引起,而Exception是可恢复的程序异常。 16、同步(Synchronous)保证同一时间只有一个线程执行特定代码,适用于共享资源的情况;异步(Asynchronous)允许并发执行,提高效率,但需要处理数据同步问题。根据任务的性质选择合适的方式。 17、栈(Stack)主要用于方法调用,遵循后进先出原则;堆(Heap)存储对象实例,进行垃圾回收。 18、forward()在服务器端将请求转发给其他资源,浏览器地址栏不变;redirect()实际上是向浏览器发送一个新请求,地址栏显示新URL。 19、EJB(Enterprise JavaBeans)是企业级组件,提供服务和业务逻辑,JAVABEAN是简单的Java组件,用于视图层展示数据。 20、StaticNestedClass是静态内部类,与外部类之间没有隐式引用,而InnerClass是非静态内部类,需要依赖外部类实例。 21、JSP中的动态INCLUDE(<jsp:include>)在运行时合并页面,而静态INCLUDE(<%@ include %>)在编译时合并。 22、GC(Garbage Collector)是Java的内存回收机制,自动回收不再使用的对象,以避免内存泄漏。 23、对于短整型变量的赋值,s1=s1+1会溢出并丢失精度,应使用s1+=1。 24、Math.round(11.5)等于12,Math.round(-11.5)等于-11。 25、“Strings=new String("xyz");”创建了2个String对象,一个是常量池中的"xyz",另一个是实例化的Strings。短路加法s1+=1避免了中间结果的溢出问题。 26、设计多线程同步问题的程序需要使用synchronized关键字保证线程安全,例如使用wait()和notify()配合。 27、Java没有goto语句,它不符合面向对象编程的设计原则。 28、启动线程应使用Thread的start()方法,而不是run(),start()会调用run()并在新线程中执行。 29、EJB(Enterprise JavaBeans)的生命周期包括创建、激活、钝化、去激活和销毁。事务管理通常通过容器来控制,可以根据bean的类型和方法声明进行自动管理。 30、应用服务器包括Tomcat、Jetty、WebLogic、JBoss、GlassFish等,它们提供运行Java EE应用程序的环境。 31、关于runtimeexception的具体信息未给出,通常RuntimeExcepion表示程序运行时的非预期错误,不需要在方法签名中声明。 以上仅是部分面试题的解答,完整文档包含更多的问题和深入的解释。这份文档对于准备Java面试的求职者来说是一份宝贵的参考资料。