JAVA开发面试精要:从JDK代理到数据库范式

需积分: 0 1 下载量 82 浏览量 更新于2024-07-09 收藏 2.81MB PDF 举报
"这是对JAVA开发面试经验的深度总结,涵盖了JDK代理、CGlib代理、数据库范式、网络协议、HTTP连接类型、JAVA内存模型、JVM垃圾回收、数据库优化等多个核心知识点。" 在JAVA开发中,JDK代理和CGlib代理是两种常见的动态代理技术。JDK代理基于接口实现,而CGlib则是通过继承抽象类来实现,后者常用于无接口或需代理的类不希望修改的情况。数据库范式是数据库设计的基础,包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等,旨在减少数据冗余,提高数据一致性。 网络通信中,TCP的三次握手确保了连接的可靠性,而四次挥手则用于断开连接。HTTP的长连接和短连接主要区别在于是否保持连接持续开放,长连接适用于频繁交互的场景,而短连接则简单高效。TCP和UDP都是传输层协议,TCP提供面向连接、可靠的传输服务,UDP则更注重速度,但不保证数据包的顺序和完整性。 HTTP请求方法POST和GET主要区别在于数据提交方式和可见性。在浏览器输入网址后,会经历DNS解析、TCP连接、HTTP请求和响应等步骤。常见协议如TCP/IP、HTTP、FTP、SMTP等各有其特定用途。Cookie和Session是Web应用中管理用户状态的机制,前者存储在客户端,后者在服务器端。 在操作系统层面,进程有运行、就绪、阻塞等状态,而进程间的通信方式包括管道、共享内存、消息队列等。线程同步常用方法有互斥锁、信号量、条件变量等。死锁是多个进程因资源分配问题无法继续执行,其产生的条件包括互斥、占有并等待、无剥夺和循环等待。 数据库的范式是为了降低数据冗余和提高数据独立性,MySQL支持四种事务隔离级别:读未提交、读已提交、可重复读和串行化。UNION和UNION ALL的区别在于是否去除重复行。DROP、DELETE和TRUNCATE操作数据库表,删除方式和效率各异。MySQL的索引类型包括B树、哈希等,InnoDB引擎支持行级锁定和事务处理,而MyISAM则不支持。 SQL执行慢可能由索引不当、全表扫描、JOIN操作复杂等原因引起,优化方法包括添加合适索引、减少子查询、使用EXPLAIN分析等。Java内存模型规定了数据在内存中的分配和访问规则,垃圾回收算法包括标记-清除、复制、标记-整理和分代收集。JVM的GC判断对象可回收基于可达性分析,GCRoots是起点。类加载过程涉及双亲委派模型,保证了类加载的有序性和一致性。Java创建多线程方式包括继承Thread类、实现Runnable接口和使用ExecutorService。 乐观锁和悲观锁分别代表了不同的并发控制策略,乐观锁假设并发冲突少,而悲观锁则总是假设最坏情况。CAS(Compare and Swap)是一种无锁算法,用于原子更新变量。Volatile关键字保证了变量的可见性和有序性,线程池的主要作用是管理和控制线程,避免过度创建和销毁带来的性能开销。反射可以通过Class.newInstance()、Constructor.newInstance()、Class.forname().newInstance()三种方式创建类实例。IO和NIO的主要区别在于是否基于缓冲区和是否为阻塞模型。Char型变量完全可以存储一个中文汉字。如果两个对象equals相等但hashcode不同,可能违反了equals和hashcode的约定。构造器是可以被重写的,但通常不建议这样做,因为可能会破坏类的封装性。