技术领域

null 篇文章
Java面试-1:JVM、JDK、JRE的区别与联系

Java面试-1:JVM、JDK、JRE的区别与联系

本文详细介绍了Java开发中的三个核心概念:JVM、JRE和JDK,并分析了它们之间的关系和实际应用场景。JVM(Java虚拟机)是运行Java字节码的虚拟计算机,负责跨平台运行Java程序,管理内存和垃圾回收。JRE(Java运行时环境)是运行Java程序所需的最小环境,包含JVM和核心类库,适用于仅运行Java程序的场景。JDK(Java开发工具包)是开发Java程序的完整工具包,包含JRE和编译、调试等开发工具,适用于编写、编译和调试Java代码的场景。三者之间的关系可以总结为:**JDK ⊃ JRE ⊃ JVM**。实际使用中,开发用JDK,仅运行用JRE,跨平台靠JVM。

Spring框架在面试中常问的问题

Spring框架在面试中常问的问题

Spring框架是一个轻量级的JavaEE框架,主要解决企业应用的复杂性问题。其核心模块包括IOC(控制反转)容器、AOP(面向切面编程)和数据访问/集成层。IOC容器管理对象的创建和关系,实现松耦合和可扩展性;AOP处理横向关注点,如事务和安全;数据访问层支持多种持久化技术。Spring框架具有轻量级、控制反转、AOP支持、扩展性强等优点,并提供了统一的异常处理和事务管理接口。 控制反转(IOC)是一种编程技巧,将对象的装配和依赖关系的管理从应用程序转移到装配器,通过依赖注入实现。依赖注入有三种实现方式:构造器注入、Setter方法注入和接口注入。Spring的IOC容器通过配置文件管理对象的创建和生命周期,降低了代码耦合度。 Bean的生命周期包括实例化、属性填充、调用aware接口方法、前置和后置处理、初始化方法调用、完整对象获取和销毁。Spring的AOP实现和回调接口注册也在Bean生命周期中进行。

SpringBoot 的启动流程

SpringBoot 的启动流程

Spring Boot 应用启动过程包括多个步骤:首先,寻找带有 `@SpringBootApplication` 注解的启动类,并在其中执行 `main()` 方法。随后,实例化 `SpringApplication` 对象,设置应用参数(如是否显示 banner 或以 web 环境启动)。接着,调用 `SpringApplication.run()` 启动应用,准备环境并解析配置文件。之后,创建并刷新应用上下文,注册所有 Bean,包括自动配置的 Bean。应用启动监听器和初始化器执行自定义逻辑,自动配置机制根据类路径和配置属性自动配置应用。如果是 web 应用,启动内嵌服务器。启动完成后,执行 `CommandLineRunner` 和 `ApplicationRunner` 接口的 Bean,最终应用进入运行状态,准备接受请求。

SpringBoot 是如何实现自动配置的?

SpringBoot 是如何实现自动配置的?

SpringBoot 的自动配置基于“约定大于配置”的思想,通过多个关键机制实现。启动时,SpringBoot 会扫描 `classpath` 下的 `META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports` 文件,加载其中的自动配置类。这些类通过条件注解(如 `@ConditionalOnClass`、`@ConditionalOnMissingBean`)确保仅在满足特定条件下生效。例如,引入 `spring-boot-starter-data-redis` 时,自动配置会检测到 `LettuceConnectionFactory` 类,并在未创建 `RedisTemplate` 时自动配置连接池和模板对象。自动配置类通常存在于 `spring.factories` 或 `AutoConfiguration.imports` 中,条件装配避免冲突,配置优先级可通过 `@AutoConfigureAfter` 控制。`@EnableAutoConfiguration` 注解是触发整个自动配置链路的开关,许多第三方库(如 Nacos、MyBatis-Plus)也遵循这一模式,简化了初始化配置。

SSL 证书自动续期工作流(Certimate)

SSL 证书自动续期工作流(Certimate)

**摘要:** Certimate 是一个完全开源免费的自托管 SSL 证书 ACME 工具,支持自动化的证书申请、部署、续期和监控,适用于各大主流云厂商。它具备自托管、零依赖、低资源占用和易操作等特点,用户可以通过图形化界面轻松配置和管理证书。 部署过程简单,支持 Docker Compose,使用前需修改默认管理员密码。创建工作流时,用户需获取域名提供商的授权凭据(如阿里云 DNS),并通过图形界面配置证书申请和部署节点,最后设置定时触发以自动续期。Certimate 适用于需要自动化 SSL 证书管理的场景,尤其适合资源有限的环境。

RabbitMQ 工作模式

RabbitMQ 工作模式

消息队列(MQ)是一种在分布式系统中用于传递消息的中间件,常见的有ActiveMQ、RabbitMQ、Kafka等。MQ的主要作用包括解决应用耦合、异步处理和流量削峰等问题,从而实现高性能、高可用、可伸缩和最终一致性架构。 1. **应用解耦**:通过引入MQ,订单系统可以与其他系统解耦,订单系统只需发送消息给MQ,由MQ通知其他系统执行操作,减少系统间的依赖,提高系统的独立性和容错性。 2. **异步处理**:MQ适用于无需即时返回且耗时的操作,如订单系统处理业务逻辑时,引入MQ可以将响应时间从600ms缩短至5ms,显著提升系统性能。 3. **流量削峰**:在大流量访问时,MQ可以帮助限制流量,确保服务器正常运行,避免因流量过大而导致系统崩溃。 总之,MQ通过解耦、异步处理和流量削峰,提升了系统的性能、可维护性和稳定性。

构建 SSM(Spring + SpringMVC + Mybatis)的 Maven 项目

构建 SSM(Spring + SpringMVC + Mybatis)的 Maven 项目

文章详细介绍了一个基于Spring、MyBatis和Maven的Java Web项目的构建过程,分为两种配置方式。 **方式一:传统XML配置** 1. 创建Maven项目,项目结构包括多个包和文件。 2. 创建数据库`mybatis`,并创建`user`表。 3. 在`pom.xml`中引入相关依赖,如Spring、MyBatis、Junit、Druid等。 4. 配置项目文件,包括`application.xml`、`db.properties`、`SqlMapConfig.xml`和`web.xml`。 5. 创建实体类`User`,定义属性及`toString`方法。 6. 创建控制器`UserController`,定义查询用户信息的方法。 7. 实现业务层`UserService`接口及其实现类`UserServiceImpl`。 8. 实现DAO层`UserDao`接口及对应的`UserDao.xml`,定义SQL查询。 **方式二:无XML配置** 1. 项目结构与方式一类似,但无需配置`web.xml`、`application.xml`和`SqlMapConfig.xml`。 2. 使用`App.java`和`WebStart.java`替代XML配置,定义数据源、SQL会话工厂等。 3. `WebStart.java`实现`WebApplicationInitializer`接口,替代`web.xml`的功能。 **测试与运行** 1. 通过`http://127.0.0.1/user/get`获取全部用户信息。 2. 通过`http://127.0.0.1/user/getId?id=41`根据ID查询用户信息。 文章展示了如何通过传统XML配置和无XML配置两种方式构建一个基于Spring和MyBatis的Java Web项目,并通过测试验证了项目的功能。

idea 异常处理,java文件无法解析、java文件创建报错

idea 异常处理,java文件无法解析、java文件创建报错

文章描述了在处理Java文件时遇到的两个异常现象:一是Java文件在编辑器中没有高亮效果,二是无法成功创建Java文件。通过排查,发现问题出在与“yarn.lock”文件类型的冲突。解决方法包括删除与Java文件相关的配置,重新切换到Java文件类型并添加“*.java”配置,最后保存退出。经过这些步骤后,Java文件能够正常解析并成功创建,编辑器中的高亮效果也恢复正常。

修改idea 创建maven-archetype-webapp 项目时,web.xml默认头文件版本号

修改idea 创建maven-archetype-webapp 项目时,web.xml默认头文件版本号

本文详细介绍了一个技术解决方案:如何在IntelliJ IDEA中创建Maven项目时,将默认的web.xml版本修改为4.0。文章分为七个步骤:1) 找到maven-archetype-webapp jar包的位置;2) 确定该jar包的下载路径;3) 找到maven-archetype-webapp.jar;4) 打开该jar包;5) 删除原有的web.xml;6) 创建一个新的web.xml,编码为UTF-8;7) 将新创建的web.xml放入jar包中。通过这些步骤,用户可以成功修改Maven项目中web.xml的默认版本。

Java 中的垃圾回收算法

Java 中的垃圾回收算法

本文详细介绍了五种核心垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集和分区收集。标记-清除算法通过标记存活对象并清除未标记对象,简单但会产生内存碎片;标记-复制算法将存活对象复制到新区域,无碎片但内存利用率低;标记-整理算法在标记后整理存活对象,无碎片但耗时较长。分代收集根据对象存活周期分为新生代和老年代,分别采用标记-复制和标记-整理算法。分区收集则通过划分区域减少单次GC停顿时间,适用于大内存应用。各算法的优缺点和适用场景在对比表中清晰呈现。总体而言,垃圾回收算法的目标是高效回收垃圾、减少内存碎片和GC停顿时间。