在Java面试中,面试官通常会考察候选人的基础知识、项目经验、问题解决能力以及对Java生态系统的理解。以下是一些常见的Java面试题及其答案概要,以帮助您准备面试:
1. 基础知识
面向对象的特征有哪些?
面向对象的特征主要包括:
- 抽象:忽略与当前目标无关的细节,只关注与当前目标有关的方面。
- 继承:允许新类继承现有类的属性和方法,从而支持代码的重用。
- 封装:将数据和方法捆绑在一起,形成一个独立的单元,并通过公共接口与外界交互。
- 多态:允许不同类的对象对同一消息作出响应,增加了程序的灵活性和可扩展性。
作用域public, private, protected, 以及不写时的区别?
- public:对任何类都可见。
- private:仅对定义它的类可见。
- protected:对同一包内的类和所有子类可见。
- 默认(不写):也称为包访问权限,对同一包内的类可见。
int和Integer有什么区别?
- int 是Java的原始数据类型,用于存储整数值。
- Integer 是Java为int提供的封装类,属于引用类型。它提供了更多的功能,比如可以表示null值,以及一系列的方法。
2. 并发编程
线程包含了几种状态?状态之间是如何转换的?
线程包含了六种状态:
- 新建(New):创建线程对象时。
- 可执行(Runnable):调用start方法后,线程等待CPU时间片。
- 阻塞(Blocked):线程因为某些原因(如等待锁)而暂停执行。
- 等待(Waiting):线程通过调用wait方法进入等待状态,等待其他线程唤醒。
- 计时等待(Timed_Waiting):线程通过调用sleep方法或等待某个条件满足(带超时的wait)而暂停执行。
- 死亡(Terminated):线程执行完毕或异常退出。
wait和sleep方法有哪些不同?
- wait 是Object类的方法,需要在同步块中调用,并会释放锁。
- sleep 是Thread类的静态方法,可以在任何地方调用,不会释放锁。
3. Java集合
ArrayList和LinkedList的区别?
- ArrayList 基于动态数组实现,适合随机访问。但在插入和删除元素时,可能需要移动大量元素,效率较低。
- LinkedList 基于链表实现,适合频繁的插入和删除操作。但在随机访问时,效率较低。
HashMap和HashTable的区别?
- HashMap 不是线程安全的,提供更高的并发性能。
- HashTable 是线程安全的,但性能较低。HashMap和HashTable在key和value的允许值、扩容机制等方面也存在差异。
4. Java虚拟机(JVM)
简述JVM的内存结构?
JVM的内存结构主要包括以下几个部分:
- 方法区:存储已被虚拟机加载的类信息、常量、静态变量等数据。
- 堆(Heap):所有通过new创建的对象的实例和数组都在堆上分配内存。
- 栈(Stack):每个线程都有一个私有的栈,用于存储局部变量和部分计算过程。
- 程序计数器:是一块较小的内存空间,作为当前线程所执行的字节码的行号指示器。
- 本地方法栈:与虚拟机栈类似,但它是为Native方法服务的。
5. 框架与库
Spring框架的核心组件有哪些?
Spring框架的核心组件包括:
- Spring Core:提供了框架的基本功能,包括IoC容器和依赖注入等。
- Spring AOP:面向切面编程的支持,允许开发者将横切关注点(如日志、事务管理等)与业务逻辑分离。
- Spring MVC:用于构建基于Web的应用程序,提供了模型-视图-控制器(MVC)架构的实现。
- Spring JDBC:简化了JDBC的使用,提供了更高级别的数据访问抽象。
- Spring ORM:提供了对ORM框架(如Hibernate)的集成支持。
以上仅是Java面试中可能涉及的一部分问题。在准备面试时,建议您根据自己的经验和目标职位的要求,有针对性地复习相关知识点,并尝试解决一些实际问题以提升自己的实战能力。