Java面试精华:全面解析常见问题与数据类型详解

需积分: 3 1 下载量 102 浏览量 更新于2024-07-25 收藏 93KB DOCX 举报
在Java面试中,面试者常常会遇到一系列关于基础概念和核心技术的问题,这些问题涵盖了Java语言的核心特性和常用框架的理解。以下是一些关键知识点的详细解析: 1. **数据类型**:Java支持八种基本数据类型,包括byte(字节)、short(短整型)、int(整型)、long(长整型)、char(字符)、float(单精度浮点型)、double(双精度浮点型)和boolean(布尔型)。它们分别占据1-8个字节,具有不同的表示范围和应用场景。 2. **int和Integer**:int是原始数据类型,代表32位的整数;Integer是引用数据类型,是Integer类的对象,用于自动装箱和拆箱,提供了诸如parseInt方法等实用功能。 3. **引用数据类型和原始数据类型**:原始数据类型直接存储在栈内存中,而引用数据类型(如对象)在栈内存中存放的是对象的引用,实际对象存储在堆内存中。 4. **String和StringBuffer**:String是不可变的,每次修改都会创建新的字符串对象,而StringBuffer是可变的,线程不安全;如果频繁进行字符串拼接,推荐使用StringBuilder。 5. **error和exception**:error表示程序严重错误,通常由系统资源耗尽或无法修复的错误引起,而exception是运行时出现的可恢复的错误,如数组越界。 6. **一般异常与运行时异常**:一般异常是继承自Exception类的异常,需要捕获或声明;运行时异常(RuntimeException和其子类)不需要捕获,但建议处理以提高代码健壮性。 7. **Servlet生命周期**:包括初始化(init)、服务请求(service)、响应处理(service)、清理(destroy)四个阶段。CGI则更像一次性处理,没有持久的服务器状态。 8. **ArrayList, Vector, LinkedList**:ArrayList适合随机访问,插入和删除效率较低;Vector与ArrayList类似,但线程安全;LinkedList适合频繁的插入和删除操作,但查找性能较差。 9. **&和&&**:&是按位与运算符,&&是逻辑与运算符,&用于数值操作,&&用于条件判断。 10. **HashMap和Hashtable**:HashMap是非线程安全的,允许null键值对,而Hashtable是线程安全,不允许null键值对。 11. **final, finally, finalize**:final修饰符用于声明常量、方法或类不可修改;finally块确保在方法执行完毕后无论正常还是异常结束都执行;finalize是对象的析构函数,但在垃圾回收时调用,不是程序员直接控制的。 12. **sleep()和wait()**:sleep暂停当前线程执行,而wait让当前线程等待,直到其他线程唤醒;两者都属于Object类。 13. **Overload和Override**:Overload是方法重载,即多个方法具有相同的名称但参数列表不同;Override是方法重写,子类方法覆盖父类方法,必须与父类方法签名匹配。 14. **同步与异步**:同步阻塞执行,适用于需要顺序执行的任务;异步非阻塞,用于并发处理,提高性能,如回调、Promise等。例如,数据库查询可以选择同步或异步,根据性能需求和用户体验选择。 15. **抽象类和接口**:抽象类可以有构造方法和部分实现,接口只能定义方法;一个类可以实现多个接口,但只能继承一个抽象类。 16. **堆(heap)和栈(stack)**:堆用于存储对象实例,栈存储基本数据类型、局部变量和对象引用。对象的创建和销毁都在堆,变量在栈上。 17. **forward和redirect**:forward是服务器内部请求转发,保留原始请求的URL路径;redirect是客户端重定向,发送新的HTTP头,浏览器会跳转到新的URL。 18. **JSP动态include与静态include**:动态include基于脚本语言,动态加载内容;静态include预编译,页面包含静态HTML片段。 19. **list, set, map**:list有序且元素重复可能,如ArrayList和LinkedList;set无序且元素唯一,如HashSet;map关联键值对,如HashMap。 20. **StaticNestedClass和InnerClass**:StaticNestedClass是在类中定义的静态成员类,独立于外部类;InnerClass是普通成员类,依赖于外部类实例。 21. **逻辑与条件操作**:逻辑操作符(&, |, ^)用于二进制位运算,条件操作符(||, &&)用于控制流,前者在位级别,后者在条件判断级别。 22. **JSP和Servlet**:JSP主要用于网页展示,内置在Servlet容器中;Servlet是服务器端的Java程序,处理HTTP请求,JSP通过servlet技术实现动态内容生成。 23. **静态变量和实例变量**:静态变量属于类,所有实例共享;实例变量每个对象有自己的副本。 24. **BS与CS**:BS(Browser/Server)模型是Web应用模式,客户端浏览器与服务器交互;CS(Client/Server)是传统桌面应用,本地计算机与服务器直接通信。 25. **JSP和Servlet的关系**:JSP本质上是Servlet的一种,通过Servlet API处理HTTP请求,JSP可以嵌套Servlet,两者配合提供动态网页功能。 26. **Struts2和Struts1**:Struts2是Struts框架的升级版,采用MVC架构,更灵活;Struts1是早期版本,较复杂,Struts2提供了更好的性能和易用性。 27. **session.load()和session.get()**:session.load()可能是某个特定框架的扩展方法,通常用于加载保存的数据;session.get()则是标准的获取session属性的方法。 以上知识点概述了Java面试中常见的基础概念和技术点,理解这些内容有助于准备面试并深入理解Java编程。