Java面试必备:BATJ面试题大全

3星 · 超过75%的资源 需积分: 5 19 下载量 109 浏览量 更新于2024-06-20 收藏 1.02MB PDF 举报
"Java面试题集,涵盖百度、阿里、字节跳动等公司的Java面试题目,包括数据类型、字符串、集合、内存管理、SQL优化、JVM、Redis、消息队列、数据库设计与优化等多个方面。" 这篇资料提供了一份详尽的Java面试准备清单,适合想要在Java开发者岗位上获取Offer的人士。以下是对部分知识点的详细说明: 1. **Java基本数据类型**:Java有8种基本数据类型,包括整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)。它们占用的字节数分别为:byte(1B)、short(2B)、int(4B)、long(8B)、float(4B)、double(8B)、char(2B)和boolean(1B)。 2. **String类不可被继承**:因为String类在Java中被声明为final,所以不能有子类。 3. **String、StringBuffer、StringBuilder的区别**:String是不可变对象,每次修改都会创建新对象;StringBuffer和StringBuilder可变,但在多线程环境下,StringBuffer是线程安全的,StringBuilder效率更高但不安全。 4. **ArrayList和LinkedList的区别**:ArrayList基于动态数组,访问速度快,插入删除元素速度慢;LinkedList基于链表,插入删除快,但随机访问慢。 5. **类的实例化顺序**:首先加载静态成员,然后父类构造器,接着是子类静态成员,再是父类字段和构造器,最后是子类字段和构造器。 6. **SQL优化**:包括选择合适的数据类型、避免全表扫描、使用索引、减少数据库交互、避免在where子句中使用null等。 7. **创建索引原则**:根据查询频率、唯一性、数据大小等因素考虑,避免在经常更新的列上创建索引。 8. **SQL去重**:使用DISTINCT关键字或者GROUP BY结合聚合函数去除重复行。 9. **内连接和外连接**:内连接只返回两个表中匹配的行,外连接(左连接、右连接、全连接)会返回所有匹配或不匹配的行。 10. **栈内存溢出**:当一个线程的栈深度超过其最大限制,就会发生栈溢出,通常由于递归深度过大或局部变量过多引起。 11. **JVM内存结构**:包括堆内存(新生代、老年代、永久代/元空间),新生代又分为Eden和两个Survivor区,用于对象分配和垃圾回收。 12. **JVM参数**:如-Xms、-Xmx设置堆内存大小,-XX:NewRatio控制新生代和老年代比例,-XX:SurvivorRatio调整Eden和Survivor的比例。 13. **GC流程**:包括 Minor GC(新生代GC)和 Major GC(老年代GC),对象晋升老年代可能基于年龄或其他策略。 14. **Redis使用**:Redis是内存数据库,支持字符串、哈希、列表、集合、有序集合等多种数据类型,用于缓存、发布订阅、计数等场景。过期策略包括定时删除、惰性删除和定期删除。 15. **存储过程**:预编译的SQL代码块,可以提高性能,封装业务逻辑,减少网络传输。 16. **消息队列(MQ)**:用于解耦系统,异步处理,批量处理,如RabbitMQ、Kafka、ActiveMQ等,不同MQ有不同的优缺点。 17. **消息有序性**:通过消息队列的特性(如Kafka的分区)或特定策略实现。 18. **数据库设计注意事项**:遵循范式理论(第一范式、第二范式、第三范式),避免数据冗余和异常。 19. **分页查询优化**:可以使用LIMIT和OFFSET,或者优化查询条件,避免全表扫描。 20. **乐观锁与悲观锁**:乐观锁假设很少发生并发冲突,读时无锁,写时检查;悲观锁假定冲突频繁,读写都加锁。 以上只是部分知识点,完整的面试准备还需要深入学习其他相关主题,如JVM内存调优、多线程、设计模式、Spring框架等。