Java面试深度解析:数据库、Spring与微服务

需积分: 0 0 下载量 35 浏览量 更新于2024-07-15 收藏 633KB DOCX 举报
"Java面试问题总结,涵盖Java基础、Spring框架、分布式微服务框架和数据库相关的深入知识。" 面试中,对于Java开发人员来说,掌握扎实的基础知识和框架应用是至关重要的。以下是一些关键点的详细说明: 1. **数据库相关**: - **数据库锁**:用于控制多个用户对共享资源的并发访问,如行级锁、表级锁等,确保数据的一致性和完整性。 - **批量插入**:可以使用批量执行SQL语句或使用存储过程提高效率,避免频繁的网络交互。 - **模糊查询与索引**:B树索引通常支持模糊查询,但某些操作可能导致索引失效,如前导通配符查询。优化手段包括合理设计索引、避免全表扫描、使用覆盖索引等。 - **索引原理**:索引通常是B树或哈希结构,用于快速查找数据。创建索引需考虑选择合适的字段、避免过多索引导致写操作变慢。 - **索引失效**:全表扫描、like操作符在非尾部、使用函数操作索引字段等情况可能导致索引失效。 - **SQL调优**:包括查询优化、索引优化、减少JOIN操作、合理设计数据库表结构等。 2. **MySQL**: - **存储引擎**:InnoDB(事务安全)和MyISAM(非事务安全)是最常见的,InnoDB通常为首选。 - **日志类型**:redo log(重做日志)、undo log(回滚日志)、binlog(二进制日志)。 - **架构**:包括连接管理、解析器、优化器、执行器等组件。 - **垂直切分**:将表的列根据业务逻辑进行拆分,减少单表复杂度。 - **水平切分**:通过拆分数据到多个表来分散负载,如ShardingSphere的Mycat实现。 - **CRC32Solt切片规则**:一种基于CRC32校验码的分片策略,用于将数据均匀分布到不同的分片节点。 - **Solr**:Apache Lucene的搜索服务器,提供全文检索、高亮显示、分类、 faceting等功能。 - **Solr排序**:可以通过score、自定义字段或时间戳等进行排序。 3. **事务**: - **传播特性**:REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED。 - **四大特性**:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 4. **SQL和数据库设计**: - **UNION与UNION ALL**:前者去除重复行,后者保留所有行。 - **主键和外键**:主键标识表中唯一记录,外键用于建立表间关系。 - **基础SQL查询**:找出name字段重复的记录,可使用GROUP BY HAVING。 - **查询前三名**:可以使用LIMIT和ORDER BY配合实现。 5. **Spring框架**: - **IOC和AOP**:IOC(Inversion of Control)控制反转,通过依赖注入管理对象;AOP(Aspect Oriented Programming)面向切面编程,实现代码解耦。 - **Spring Boot**:简化Spring应用的初始化和配置,核心注解有@SpringBootApplication。 - **SpringMVC**:Spring的Web MVC框架,基于DispatcherServlet进行请求分发。 6. **缓存技术**: - **Redis**:常用于缓存、消息队列、分布式锁等场景,支持多种数据结构如字符串、哈希、列表、集合、有序集合。 - **Redis集群**:解决单点问题,包括主从复制、Sentinel监控、Cluster分布式集群。 - **Redis问题**:雪崩、击穿、穿透分别涉及缓存失效时间、热点数据和查询不存在数据的问题。 - **持久化策略**:RDB(快照)和AOF(追加日志),确保数据安全。 7. **微服务**: - **微服务**:将单一应用拆分为一组小服务,每个服务都运行在其独立的进程中,服务之间通过轻量级通信机制(通常是HTTP/RESTful API)交互。 - **微服务与SOA**:SOA(Service-Oriented Architecture)强调服务之间的松耦合,而微服务更强调服务的自治和轻量化。 - **Eureka**:提供服务注册与发现,用于Spring Cloud中。 - **Ribbon**:客户端负载均衡器,支持多种负载均衡算法如轮询、随机等。 - **OpenFeign**:声明式服务调用,简化服务间的HTTP调用。 这些面试问题涵盖了Java开发人员应知的基本概念和技术,对准备面试和提升技术能力大有裨益。深入理解并实践这些知识点,能帮助开发者在实际工作中更好地解决问题。