Java是一种广泛使用的编程语言,尤其在企业级应用和多线程编程方面表现出色。以下是对提供的面试题中涉及的一些核心知识点的详细解释: 1. **wait()与sleep()的区别** - `wait()`方法是Object类的一个方法,它会使当前线程进入等待状态,并释放持有的锁,直到其他线程调用`notify()`或`notifyAll()`唤醒它。它主要用于线程间的协作。 - `sleep()`是Thread类的方法,它使当前线程暂停执行指定的时间,但不释放锁。它用于让线程临时休眠,而不是进行线程间的同步。 在多线程环境下,确保数据安全通常需要结合`synchronized`关键字来实现线程同步,避免数据竞争。 2. **volatile与synchronized的区别** - `volatile`关键字确保了共享变量的可见性,但不保证原子性。它禁止了指令重排序,使得其他线程可以立即看到修改后的值。 - `synchronized`提供了更强大的互斥锁机制,确保同一时间只有一个线程访问特定代码块或方法,保证了原子性及可见性。 在实际项目中,如果只需要保证变量的可见性,可以选择`volatile`;若需保证原子性或同步整个代码块,应使用`synchronized`。 3. **抽象类与接口的区别** - 抽象类(abstract class)可以包含实例变量和非抽象方法,一个类只能继承一个抽象类。 - 接口(interface)仅包含常量和抽象方法,一个类可以实现多个接口。 抽象类强调"is-a"关系,适合有继承关系且需要部分实现的情况;接口强调"has-a"或"can-do"关系,适合定义行为规范或多个类的共同行为。 4. **TCP三次握手** TCP连接建立需要三次握手。客户端发送一个SYN报文段,服务端回应SYN+ACK,最后客户端再次回应ACK,至此连接建立成功。socket框架如Java的MINA和Netty提供了高性能的网络通信支持。 5. **Java反射机制** Java反射允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并操作类的对象。它可以通过Class类加载并创建实例,甚至访问私有变量和方法,增强了程序的灵活性和可扩展性。 6. **JVM内存模型和垃圾回收** - JVM内存主要分为栈(Stack)、堆(Heap)和方法区(Method Area)。栈存储方法调用的局部变量,堆存储对象实例,方法区保存类的元数据。 - 垃圾回收(Garbage Collection, GC)自动清理不再使用的对象,释放内存。常见的GC算法包括Serial、ParNew、Parallel Mark Sweep、CMS等。不同的GC策略适用于不同的场景,如CMS适用于低延迟的需求。 JVM调优涉及到堆大小配置、垃圾回收器的选择、监控工具(如JConsole、jProfiler、VisualVM)的使用,以及根据GC日志进行调整,是一个持续的过程,需要根据应用的性能需求进行精细化调整。
- 粉丝: 59
- 资源: 2904
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享ZigBee协议栈的分析与设计非常好的技术资料.zip
- 技术资料分享Zigbee协议栈OSAL层API函数(译)非常好的技术资料.zip
- 技术资料分享zigbee无信标网络设备的加入非常好的技术资料.zip
- 技术资料分享ZigBee问答之“KVP”、“MSG”非常好的技术资料.zip
- 技术资料分享ZigBee网络管理实验例程手册非常好的技术资料.zip
- 技术资料分享Zigbee技术规范与协议栈分析非常好的技术资料.zip
- 技术资料分享zigbee各版本规范比较非常好的技术资料.zip
- 技术资料分享ZigBee-Specification-2006非常好的技术资料.zip
- 技术资料分享ZigBee-Specification(2007)非常好的技术资料.zip
- 技术资料分享XC9216非常好的技术资料.zip