"分享2019年京东金融的Java面试经验"
在Java开发领域,面试通常涵盖基础概念、设计模式、并发处理、数据库优化以及框架理解等多个方面。以下是对【标题】"java 京东金融面经 java 京东金融面经"所涉及知识点的详细解析:
1. **集合框架**:面试中可能会问到ArrayList、LinkedList、HashSet、HashMap等集合类的实现原理,以及它们各自在性能和功能上的特点。
2. **接口与抽象类**:接口代表一种契约,提供完全抽象的方法;抽象类则可以包含部分实现。讨论两者之间的选择,通常需要考虑多态性、具体实现以及继承层次等因素。
3. **索引分类**:索引分为单列索引、复合索引、唯一索引、全文索引等,面试时可能需要分析不同索引类型的应用场景。
4. **主键索引设计**:B-tree索引适用于范围查询,保持数据有序;而hash索引适用于等值查询,速度较快。选择哪种取决于数据访问模式。
5. **设计模式**:面试者需要熟悉单例、工厂、观察者、装饰者、策略、适配器等常见设计模式,并能结合实际场景进行应用。
6. **DDD(领域驱动设计)**:DDD强调以业务领域为中心进行软件设计,包括实体、值对象、聚合根、领域事件等核心概念。
7. **Hibernate的一级缓存和二级缓存**:一级缓存是Session级别的,数据生命周期与Session相同;二级缓存是SessionFactory级别的,可跨Session共享,但使用需谨慎,避免数据不一致。
8. **消息队列(MQ)**:MQ用于解耦系统,如RabbitMQ、Kafka等,提高系统的响应性和可扩展性。
9. **高并发处理**:设计高并发程序时,要考虑负载均衡、分布式缓存、数据库优化、异步处理、限流熔断策略等。
10. **JUC(Java并发工具包)限流**:可以使用Semaphore或RateLimiter实现限流,防止系统过载。
11. **索引不适用条件**:全表扫描更优、索引列有计算操作、索引列数据分布过于均匀或稀疏等情况下,索引可能不起作用。
12. **NIO(非阻塞I/O)和AIO(异步I/O)**:NIO允许单线程处理多个连接,而AIO则进一步将I/O操作异步化,提高服务器性能。
13. **NIO中的Selector、Poll和Epoll**:Selector是Java NIO的核心,用于监听多个通道;Poll是Linux提供的类似功能,Epoll则更高效,适合大规模连接。
14. **TCP拥塞控制**:包括慢启动、拥塞避免、快速重传和快速恢复等机制,确保网络传输的稳定性和效率。
15. **as-if-serial语义和happen-before语义**:as-if-serial保证单线程执行的等价性,而happen-before是并发内存模型中的顺序关系,确保可见性和原子性。
16. **线程池创建**:ExecutorService通过Executors提供多种线程池创建方式,如newFixedThreadPool、newCachedThreadPool等。
17. **CachedThreadPool中的阻塞队列**:一般使用SynchronousQueue,无实际容量,线程间直接传递任务,可实现高效的线程复用。
18. **LinkedTransferQueue与SynchronousQueue**:LinkedTransferQueue基于链表结构,无容量限制,支持FIFO或LIFO;SynchronousQueue则是伪队列,每次插入都需要匹配一个移除操作。
19. **其他阻塞队列**:如ArrayBlockingQueue(固定容量)、LinkedBlockingQueue(无界但受内存限制)等,各有特点,适用于不同的场景。
20. **线程池线程数设置**:根据系统资源、并发需求等因素综合考虑,一般参考公式:(核心数 + 1) * 2。
21. **新特性LongAdder和AtomicLong**:LongAdder在高并发下表现更好,通过分段加和减少竞争;AtomicLong则使用CAS保证原子性更新。
22. **LongAccumulator**:LongAccumulator提供带函数操作的累加,如求平均值等,也适用于并发环境。
这些知识点是Java开发者在面试中常见的问题,深入理解和掌握它们对于提升个人技术能力至关重要。