
Java面试八股文
文章平均质量分 55
天哥不爱学习
工作了10年的程序员,PHP python Java 都有所涉猎,过去6年就职于某世界500强企业。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java面试八股之什么是消息队列的高并发缓冲
消息队列的高并发缓冲是指在处理大量并发请求时,通过消息队列来平滑处理请求的一种机制。消息队列作为一个中间层,可以将生产者和消费者解耦,使得生产者无需关心消费者的状态,同时也减轻了消费者在高并发时的压力。消费者从消息队列中拉取消息并进行处理。大量的支付请求需要被处理,使用消息队列可以将这些请求排队,逐步处理,避免支付系统超负荷运行。在大促活动期间,大量的订单请求涌入,使用消息队列可以有效地缓冲这些请求,避免后台系统崩溃。请求被放入消息队列后,可以由多个消费者异步处理,这样可以提高整体系统的吞吐量和响应速度。原创 2024-08-19 21:44:27 · 410 阅读 · 0 评论 -
Java面试八股之消息队列中推模式和拉模式分别有哪些使用场景
多级队列:在某些复杂的系统架构中,可能会使用多级队列来优化消息处理过程,例如先用推模式快速分发,再用拉模式进行精细化处理。混合模式:一些系统可能会采用推模式来快速传递消息,然后使用拉模式来处理消息,以确保消息被可靠处理。可靠性较高:消费者可以根据需要控制消息的获取频率和数量,降低因处理速度跟不上导致的消息丢失风险。系统资源可控:推模式对消费者端的资源管理要求较高,适用于资源可控的场景。资源受限的环境:消费者端资源有限,需要精细控制消息的处理量和频率。消费者数量固定:消费者数量相对稳定,且容易预测。原创 2024-08-19 21:40:21 · 671 阅读 · 0 评论 -
Java面试八股之消息队列中消息处理失败了怎么办
对于暂时性错误(如网络瞬断、依赖服务短暂不可用等),可以通过重试机制来提高消息处理的成功率。综上所述,为了确保消息队列的高效运行,需要综合运用上述策略来处理消息处理失败的情况。如果在处理消息过程中发生异常,可以不发送确认信号或显式拒绝消息,这样消息队列可以根据配置进行重试或将消息发送到死信队列。开发者可以定期检查死信队列中的消息内容和错误日志,手动或自动修复问题后再次处理这些消息,确保信息不丢失,最大限度地减少业务影响。设计消息处理逻辑使其具有幂等性,即无论消息被消费多少次,其产生的效果都是一样的。原创 2024-08-19 21:36:52 · 560 阅读 · 0 评论 -
Java面试八股之如何保证消息队列中消息不重复消费
结合上述方法,可以根据具体的应用场景选择合适的策略来避免消息的重复消费。如果需要具体的编程语言或框架的示例,请告诉我你正在使用的环境和技术栈,我可以给出更具体的建议。设计消息处理逻辑使其具有幂等性,即无论消息被消费多少次,其产生的效果都是一样的。例如,在数据库操作中可以使用唯一键约束来防止重复记录的插入。可以通过维护一个外部的数据结构(如数据库表或缓存),用来记录哪些消息已经被成功处理过,从而避免重复处理相同的消息。在某些情况下,可以通过消息ID或者消息内容来检查是否已经处理过该消息,以此来实现去重。原创 2024-08-19 21:33:38 · 450 阅读 · 0 评论 -
Java面试八股之如何保证消息队列中消息不丢失
实施全面的监控系统来检测消息队列的状态,包括消息积压情况、消息延迟等,并在出现问题时及时报警。设置合理的超时时间,如果消费者在规定时间内没有确认消息,则认为消息处理失败并重新发送。通过上述方法结合使用,可以大大提高消息队列的可靠性和稳定性,从而实现消息不丢失的目标。消费者在处理完消息后向服务确认消息已被正确处理,否则服务会重新发布该消息。如果消息无法被处理或者处理失败,可以根据配置的策略重新尝试发送或处理消息。对于需要保证一致性的情况,可以使用事务消息来确保消息的原子性。原创 2024-08-19 21:30:30 · 763 阅读 · 0 评论 -
Java面试八股之请简述消息队列的发布订阅模式
消息代理(Message Broker)或主题(Topic):这是一个中心化的服务,它负责接收发布者的消息并将这些消息分发给所有对该主题感兴趣的订阅者。消息传递:消息代理接收到发布者的消息后,根据订阅关系将消息分发给所有相关的订阅者。订阅者(Subscriber):订阅者对特定主题感兴趣,它们订阅这些主题以接收相关的消息。发布者(Publisher):这是消息的源头,发布者不会直接将消息发送给特定的接收者,而是将消息发布到一个特定的“主题”或“频道”。发布过程:发布者创建消息并将其发布到一个或多个主题。原创 2024-08-15 21:47:33 · 427 阅读 · 0 评论 -
Java面试八股之简述消息队列P2P模型
消息确认:消费者处理完消息后,必须向消息队列系统发送确认信号,表明消息已经被成功处理。在P2P模型中,队列扮演着中间存储的角色,负责暂存生产者发送的消息直到消费者提取。持久性与非持久性:根据配置,消息可以是持久性的,即使在服务器重启后也能保留,或者是非持久性的,仅在服务器运行期间存在。可靠性:通过要求消费者确认消息已成功处理,P2P模型提供了高可靠性的消息传递机制,确保每个消息至少被处理一次。消息存储:消息队列系统接收到消息后,将其存储在指定的队列中,等待消费者提取。原创 2024-08-15 21:46:46 · 508 阅读 · 0 评论 -
Java面试八股之什么是JMS
目的地是消息的发送和接收点,可以是队列(Queue)或主题(Topic)。JMS API提供了一种标准的、与供应商无关的方式,使得Java应用程序能够创建、发送、接收和读取消息,它允许解耦的应用程序和服务通过异步通信进行交互。在JMS中,生产者和消费者可以是同一进程的不同组件或完全不同的系统。会话是在JMS提供者和客户端之间的上下文,用于发送和接收消息。连接工厂用于创建JMS连接,它是JMS提供者的一部分,提供访问消息服务的方法。通过连接创建一个或多个会话,会话可以是事务性的或非事务性的。原创 2024-08-14 21:29:29 · 496 阅读 · 0 评论 -
Java面试八股之什么是STOMP协议
STOMP协议的版本从最初的1.0发展到了目前广泛使用的1.2版本,每个版本都增加了新的特性和改进了协议的性能。许多流行的消息中间件如ActiveMQ、RabbitMQ、Mosquitto等都支持STOMP协议,同时也有多种编程语言的客户端库可供选择,比如Java、Python、JavaScript等。它的设计原则是简单、跨平台和易于实现,这使得STOMP成为许多实时应用的首选协议,例如在线游戏、实时数据分析、物联网(IoT)设备通信以及金融市场的交易系统。原创 2024-08-14 21:28:44 · 805 阅读 · 0 评论 -
Java面试八股之什么是MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的“发布/订阅”(Publish/Subscribe)模式的消息传输协议,特别适合于远程和低带宽网络环境,如物联网(IoT)和移动应用。MQTT支持一对多的消息传输,即一个消息发布者可以将消息发送到一个主题,而多个订阅者可以通过订阅这个主题来接收消息。这种模式允许高效的多播通信。MQTT支持会话状态的持久化,这意味着当客户端重新连接时,可以恢复之前的会话状态,继续接收之前订阅的消息。原创 2024-08-13 20:13:52 · 1430 阅读 · 0 评论 -
Java面试八股之什么是AMQP协议
AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个开放标准的应用层协议,旨在为消息中间件提供一种统一的、标准的通信方式。它允许消息在分布式系统中的应用程序之间进行可靠的、异步的传递。AMQP的核心目标是实现跨平台、跨语言的互操作性和消息传递的标准化,从而简化了应用程序之间的集成。类似于Web服务器中的虚拟主机,AMQP中的虚拟主机提供了一个隔离的环境,其中可以独立地管理一组队列、交换机和权限。队列可以是持久的或非持久的,也可以是私有的或共享的。原创 2024-08-13 20:10:09 · 553 阅读 · 0 评论 -
Java面试八股之消息队列有哪些协议?各种协议有哪些具体实现
特点:一种开放标准的二进制协议,支持发布/订阅、点对点、请求/响应等多种消息模式,具有良好的互操作性。特点:Java平台上的消息队列API规范,提供面向消息中间件的接口,支持点对点和发布/订阅模型。特点:支持多种消息协议,如AMQP、MQTT、STOMP等,适用于需要跨协议通信的场景。特点:RabbitMQ的专有协议,基于AMQP,但提供了更丰富的特性和更好的性能。特点:基于文本的协议,支持多种消息模式,如点对点、发布/订阅等,易于理解和实现。实现:IBM MQ, ActiveMQ, OpenJMS等。原创 2024-08-12 21:44:08 · 638 阅读 · 0 评论 -
Java面试八股之消息队列通常由哪些角色组成
它负责接受生产者发送的消息,并将其转发给一个或多个队列,同时也负责将消息队列中的消息分发给消费者。除了这些基本角色,具体的消息队列系统还可能包含其他组件,如用于身份验证和授权的安全模块、用于优化性能的缓存层等。虽然在某些系统中,路由功能可以由消息队列或代理自动完成,但在复杂场景下,如发布/订阅模型中,需要有专门的逻辑来决定消息应该被发送到哪些队列或消费者。生产者是消息的创建者,负责将消息发送到消息队列中。消息队列系统通常涉及几个核心角色,这些角色协同工作以实现消息的传递和处理。原创 2024-08-12 21:43:17 · 514 阅读 · 0 评论 -
Java面试八股之什么是消息持久化
消息持久化是指在消息队列系统中,消息被存储在持久化的存储介质上(通常是磁盘),而不是仅仅驻留在内存中。这一特性确保了即使在系统发生故障(如服务器重启或宕机)的情况下,未被消费的消息不会丢失,从而保障了消息传递的可靠性和系统的稳定性。为了平衡性能和可靠性,一些消息队列系统提供了灵活的持久化策略,如在消息写入磁盘之前先写入高速缓存,或者采用日志复制等方式来提高效率。持久化消息需要额外的存储空间,对于大数据量或高频次消息传递的系统来说,这可能是一个需要考虑的成本因素。原创 2024-08-12 21:42:33 · 328 阅读 · 0 评论 -
Java面试八股之什么是消息队列
(Message Queue)是一种应用程序间通信(IPC)的形式,它允许进程将消息发送到另一个消息队列,接收端则可以在任何时刻从队列中取出这些消息进行处理。消息队列提供了一种异步处理、解耦和缓冲机制,使得生产者和消费者不必同时在线,也不必直接交互,从而提高了系统的灵活性和可扩展性。消息队列支持复杂的路由策略,如点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)模型,可以根据不同的条件将消息路由到不同的队列或接收者。原创 2024-08-12 21:41:43 · 488 阅读 · 0 评论 -
Java面试八股之Spring如何定义Bean的范围
在Spring框架中,Bean的作用域(scope)决定了一个Bean实例的生命周期和可见性。Spring支持多种作用域,最常用的是singleton和prototype,此外还有request、session、globalsession等Web应用相关的特定作用域。对于每个Spring IoC容器,只有一个Bean实例存在,该实例被所有请求共享,并且在整个容器的生命周期中都会存在。在上面的例子中,MyBean将以prototype作用域创建,而MyService将以默认的singleton作用域创建。原创 2024-08-12 21:40:49 · 343 阅读 · 0 评论 -
Java面试八股之简述spring的自动装配
Spring框架的自动装配(Autowiring)是一种机制,它允许Spring IoC容器自动满足Bean的依赖关系,而无需显式指定依赖注入的方式。如果有多个类型匹配的Bean,那么将抛出异常。在基于Java的配置中,@Configuration类通常使用@Bean方法来定义Bean,而@Autowired可以用于这些方法的参数上,以自动注入所需的依赖。@Primary: 当存在多个相同类型的Bean,且没有使用@Qualifier指明特定Bean时,带有@Primary注解的Bean将被优先考虑。原创 2024-07-30 11:05:08 · 585 阅读 · 0 评论 -
Java面试八股之Spring如何解决循环依赖
总之,Spring通过其内部的缓存机制可以解决大部分基于setter注入的循环依赖问题,但对于构造器注入的循环依赖,通常需要代码层面的调整来解决。Spring为了解决循环依赖问题,采用了不同的策略,这些策略主要取决于Bean的作用域以及依赖注入的方式。对于通过构造器注入的循环依赖,Spring无法使用上述缓存机制来解决,因为构造器必须在创建对象时就提供所有参数,没有机会在创建过程中返回部分初始化的对象。创建过程中,如果遇到依赖,会再次尝试从缓存中获取依赖的Bean实例。原创 2024-07-30 11:04:22 · 499 阅读 · 0 评论 -
Java面试八股之Spring中的Bean是线程安全的吗
Singleton: 默认情况下,Spring的Bean是单例的,这意味着在整个应用程序中只有一个实例存在。如果Bean是有状态的,即它保存了跨方法调用的数据,那么这个Bean在多线程环境下可能不是线程安全的,除非开发者采取了适当的措施来确保线程安全,如使用锁、synchronized关键字或不可变数据结构。如果Bean是无状态的,即它不保存任何跨方法调用的数据,那么它通常是线程安全的。Spring框架中的Bean是否线程安全,这个问题的答案取决于几个关键因素,主要是Bean的作用域和Bean的内部状态。原创 2024-07-30 11:03:23 · 479 阅读 · 0 评论 -
Java面试八股之Spring中Bean的作用域
描述: 这是默认的作用域,意味着Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在。行为: 无论有多少个请求,容器中只会有一个Bean实例存在,所有对该Bean的请求都会返回同一个实例。场景: 当需要每个客户端有自己的Bean实例时,例如当Bean包含可变的状态信息时。行为: 每个请求都会返回一个新的独立实例,这意味着Bean可以有不同的状态。场景: Portlet应用中,当需要在用户的全局会话中共享Bean实例时。描述: 每次从容器中请求Bean时,都会创建一个新的实例。原创 2024-07-30 11:02:29 · 489 阅读 · 0 评论 -
Java面试八股之JdbcTemplate是什么
它提供了一种更加方便的方式来执行数据库操作,避免了常见的 JDBC 编程中的样板代码,如建立连接、处理异常、关闭资源等。JdbcTemplate 对所有 JDBC 异常进行了包装,并抛出 Spring 的 DataAccessException 异常体系中的异常,这样可以简化异常处理逻辑。提供了一系列方便的方法,如查询、更新和批量更新等,减少了手动编写 SQL 语句和结果集解析的工作量。提供了重试机制,可以在配置的情况下自动重试失败的操作。原创 2024-07-30 11:01:34 · 512 阅读 · 0 评论 -
Java面试八股之Spring框架中使用到了哪些设计模式
描述:虽然 Spring 框架本身不直接使用组合模式,但在构建复杂的 Spring 配置时,可以通过组合不同的 Bean 来实现层次化的服务结构。描述:在 Spring 中,可以通过构造函数注入、setter 注入或注解驱动的方式来配置 Bean 的属性,这些都可以视为建造者模式的应用。描述:Spring 中的一些缓存机制可以视为享元模式的应用,特别是对于那些经常重复使用相同数据的情况。描述:Spring 允许开发者定义不同的策略来实现特定的功能,例如使用不同的事务管理策略。原创 2024-07-30 11:00:27 · 905 阅读 · 0 评论 -
Java面试八股之JDK 动态代理和 CGLIB 动态代理的区别
CGLIB 创建的代理类不是目标类的子类,而是通过继承一个代理类来实现代理功能。通过调用 Enhancer.create() 方法并设置代理增强器(Enhancer)的相关属性,如设置代理对象的目标对象、回调方法等。实现原理: JDK 动态代理基于 Java 的反射机制,通过反射创建一个代理对象,该代理对象实现与目标对象相同的接口。但是,如果目标对象实现了多个接口,则每次生成代理类时都需要创建新的代理类,这可能会导致类加载开销。接口要求: 不要求被代理的对象实现接口,可以代理任何类。原创 2024-07-29 16:51:16 · 1028 阅读 · 0 评论 -
Java面试八股之@Qualifier的作用
当 Spring 容器中有多个相同类型的 Bean 时,@Qualifier 可以帮助指明应该使用哪一个具体的 Bean 进行注入。当一个类需要注入另一个类型的 Bean 时,如果容器中有多个该类型的 Bean,那么 Spring 会抛出一个异常,表示无法确定应该注入哪个 Bean。这个名称可以是 Bean 的别名,也可以是默认的名称(默认情况下,如果 Bean 没有指定名称,那么它的名称就是类名的首字母小写形式)。@Qualifier 的值通常是指定的 Bean 的名称。原创 2024-07-29 16:50:28 · 877 阅读 · 0 评论 -
Java面试八股之Spring DAO的作用
Spring DAO 的核心目的是使开发人员能够更容易地处理数据访问相关的异常,并提供一致的异常处理机制,同时简化了数据库访问的代码。Spring 提供了一些模板类,如 JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcInsert 和 SimpleJdbcCall,这些模板类封装了常见的 JDBC 操作,简化了数据库操作的代码。Spring DAO 提供了对数据库连接、Statement 和 ResultSet 的自动管理,减少了因资源泄漏而导致的问题。原创 2024-07-29 16:49:18 · 470 阅读 · 0 评论 -
Java面试八股之@Autowired 和 @Resource的区别
在大多数情况下,@Autowired 是Spring推荐的选择,因为它更符合Spring的设计理念,并且提供了更灵活的控制选项。然而,在某些特定场景下,如遵循Java EE规范或简化代码时,@Resource 也可能是一个合适的选择。在Spring框架中,@Autowired 和 @Resource 是两个常用的依赖注入注解,但它们有一些关键的区别。优先级较高,可以覆盖其他显式的Bean引用,这意味着如果有其他显式的Bean引用,@Resource 仍然会尝试注入。原创 2024-07-29 16:48:31 · 554 阅读 · 0 评论 -
Java面试八股之Spring AOP 和 AspectJ AOP 的区别
而对于更复杂的需求,尤其是当需要更细粒度的切面控制时,AspectJ 是更好的选择。在实际开发中,两者也可以结合使用,例如在 Spring 应用中使用 AspectJ 的切点表达式和通知类型。使用较为简单的切点表达式语法,如 execution(* com.example.service.*.*(..)) 表示匹配 com.example.service 包下所有类的所有方法。支持与 Spring AOP 相同的通知类型,并且还提供了更多的通知类型,例如初始化通知、静态初始化通知等。原创 2024-07-29 16:47:40 · 855 阅读 · 0 评论 -
Java面试八股之Spring-boot-starter-parent的作用是什么
spring-boot-starter-parent 是Spring Boot项目中的一个特殊POM(Project Object Model),它主要的作用是提供一系列默认的配置和依赖管理,以便简化项目的构建过程。这样可以避免版本冲突,并且当Spring Boot发布新版本时,你只需更新spring-boot-starter-parent的版本,而不需要逐一更新项目中的依赖版本。spring-boot-starter-parent可能还包括一些其他的构建配置,比如单元测试相关的配置。原创 2024-07-25 16:00:14 · 670 阅读 · 0 评论 -
Java面试八股之什么是spring boot starter
例如,如果你想在Spring Boot应用中加入Web功能,你只需要在pom.xml(Maven)或者build.gradle(Gradle)文件中添加spring-boot-starter-web依赖即可。spring-boot-starter-test:包含了测试Spring Boot应用所需的依赖项,如JUnit、Mockito等。spring-boot-starter-web:包含Web开发所需的依赖项,如Spring Web MVC、Tomcat等。原创 2024-07-25 15:59:29 · 594 阅读 · 0 评论 -
Java面试八股之BeanFactory和ApplicationContext有什么区别
总的来说,BeanFactory适合于简单的应用场景,而ApplicationContext更适合于复杂的企业级应用,因为它提供了更多的功能和服务。在大多数情况下,推荐使用ApplicationContext,因为它包含了BeanFactory的所有功能,并且提供了额外的便利性。ApplicationContext提供了更多的扩展点,如ApplicationListener和ApplicationEvent,允许应用程序注册监听器以响应特定的事件。BeanFactory相对较少的扩展点。原创 2024-07-23 16:58:20 · 662 阅读 · 0 评论 -
Java面试八股之 Spring Bean的生命周期
依赖注入(Dependency Injection,DI):Spring容器按照Bean定义中的依赖关系,将其他Bean或配置的值注入到新创建的Bean中,实现Bean之间的协作。实例化(Instantiation):Spring容器根据Bean定义信息创建Bean的实例,通常通过无参构造函数进行。使用(Usage):Bean实例已经完全准备就绪,可以被应用程序代码或其它Bean通过Spring容器透明地访问和使用。在Bean定义中通过destroy-method属性指定的销毁方法。原创 2024-07-23 16:57:31 · 648 阅读 · 0 评论 -
Java面试八股之Spring容器的启动流程
在整个过程中,Spring遵循了IoC(控制反转)和DI(依赖注入)原则,确保Bean的创建、配置、组装和管理都在容器的统一控制之下,实现了松耦合和可扩展的软件架构。创建BeanDefinition:解析配置信息的过程中,Spring会为每个Bean生成对应的BeanDefinition对象,它包含了Bean的类型、构造方法参数、属性值、初始化方法、依赖关系、作用域、生命周期回调方法等所有相关信息。Spring容器的启动流程涉及一系列有序的操作,以确保容器正确初始化并准备好管理应用程序中的Bean。原创 2024-07-23 16:56:45 · 1241 阅读 · 0 评论 -
Java面试八股之Spring AOP
Spring AOP支持多种类型的通知,如前置通知(方法执行前)、后置通知(方法执行后,无论是否抛出异常)、异常通知(捕获到异常时)、最终通知(无论方法是否正常结束,都会执行)以及环绕通知(包裹整个方法执行过程)。与IoC容器集成:Spring AOP充分利用了Spring的IoC容器,将切面编织到由容器管理的对象中。定义:AOP是一种编程范式,它关注的是如何将跨越多个模块或对象的横切关注点(如日志记录、权限检查、事务管理等)从核心业务逻辑中分离出来,以提高代码的可重用性、可维护性和模块化程度。原创 2024-07-23 16:55:55 · 593 阅读 · 0 评论 -
Java面试八股之什么是声明式事务管理,spring怎么实现声明式事务管理?
声明式事务管理是一种编程范式,它允许开发人员通过声明性的配置或注解,而不是硬编码事务处理逻辑,来指定哪些方法或类应该在其上下文中执行事务。开发人员只需要在业务代码中使用@Transactional注解进行简单的声明,Spring框架会在幕后自动处理事务的生命周期,大大简化了事务管理的复杂性。方法执行过程中:监控方法执行,如果发生未被捕获的异常,根据回滚规则(默认情况下,运行时异常和Error会导致回滚)决定是否回滚事务。方法结束后:如果方法正常返回或抛出的异常不在回滚规则之内,提交事务;原创 2024-07-23 16:55:03 · 616 阅读 · 0 评论 -
Java面试八股之详细阐述Spring的DI和IOC
DI则是实现IoC的具体手段,通过将依赖对象从外部注入到所需对象中,消除了硬编码的依赖关系,提高了系统的可测试性和可维护性。可测试:由于对象间的依赖关系由容器透明地注入,使得在单元测试中可以轻易替换依赖对象为模拟对象(Mock),便于进行独立测试。解耦:通过容器集中管理对象创建和依赖关系,对象无需关心其依赖对象的具体实现,只需关注接口契约,从而降低了对象间的耦合度。松耦合:对象无需了解其依赖对象的创建细节,仅需定义好依赖的接口或抽象类型,实现了“面向接口编程”,增强了系统的可解耦性。原创 2024-07-23 16:53:19 · 1303 阅读 · 0 评论 -
Java面试八股之Spring框架的核心模块
随着Spring生态的发展,还有其他相关的模块和项目(如Spring Data、Spring Security等),虽然不属于严格意义上的核心模块,但也是Spring体系中不可或缺的部分,为特定领域的功能提供了强大支持。Spring-webmvc(Spring MVC):实现了模型-视图-控制器(MVC)设计模式,为构建Web应用程序提供了全面的解决方案,包括处理器映射、视图解析、数据绑定、异常处理等。spring-boot:Spring Boot框架的主模块,提供了框架的核心功能和支持其他模块的基础。原创 2024-07-23 16:52:26 · 547 阅读 · 0 评论 -
Java面试八股之简述spring boot的目录结构
application.properties 或 application.yml:是 Spring Boot 的主要配置文件,可以有多个版本,例如 application-dev.yml 和 application-prod.yml,分别用于开发和生产环境。Spring Boot 项目遵循标准的 Maven 或 Gradle 项目布局,并且有一些约定的目录用于组织不同的项目组件。src/test/java 和 src/test/resources:包含测试相关的 Java 代码和资源文件。原创 2024-07-23 16:51:34 · 1164 阅读 · 1 评论 -
Java面试八股之Spring boot的自动配置原理
AutoConfigurationImportSelector 类的 selectImports() 方法会读取 spring.factories 文件,这个文件位于 META-INF 目录下,列出了所有可用的自动配置类的全限定名称。这些注解允许自动配置类仅在满足特定条件时才会被激活。如果启用了调试模式(通过 spring-boot:run 或设置 spring-boot-devtools),Spring Boot 会生成一个自动配置报告,显示哪些自动配置类被应用,哪些被忽略,以及原因。原创 2024-07-23 16:50:37 · 769 阅读 · 0 评论 -
Java面试八股之后Spring、spring mvc和spring boot的区别
Spring Boot 是建立在Spring框架之上的一个微服务框架,它的目标是简化新Spring应用的初始设置和配置。Spring MVC 是Spring框架的一部分,专注于Web应用程序的开发,它实现了MVC设计模式,将业务逻辑、数据和展示层分开,使得Web应用的开发更加清晰和结构化。Spring MVC 是一个专注于Web应用的框架,是Spring框架的一部分,用于构建MVC架构的Web应用。Spring 是一个核心的、基础的框架,提供了广泛的开发支持。原创 2024-07-23 16:49:49 · 848 阅读 · 1 评论 -
Java面试八股之什么是Redis的缓存降级
缓存降级是一种服务端策略,当面临高并发访问、资源紧张或其他不可预期的问题时,为了保护核心服务的稳定运行,可以选择暂时关闭或限制某些非核心功能。Redis的缓存降级是指在特定情况下,为了应对系统压力、资源紧张或Redis服务异常等问题,采取的一种动态调整策略,以降低对缓存的依赖,减少对Redis的访问,从而保护系统核心服务的稳定运行。部分功能降级:在电商等应用场景中,例如在秒杀活动等高并发时段,可以临时禁用一些非核心服务模块,如商品推荐、广告展示等,优先保证订单处理等核心流程的顺畅。原创 2024-07-18 11:42:25 · 1260 阅读 · 1 评论