- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 Java 并发面试题(一)
可重入锁:也叫递归锁,指的是同一个线程在已经持有该锁的情况下,可以再次获取该锁而不会被阻塞。每次获取锁时,锁的计数器会加 1;每次释放锁时,计数器会减 1。只有当计数器为 0 时,锁才会真正被释放。Java 中的关键字和都属于可重入锁。不可重入锁:意味着同一个线程在已经持有该锁的情况下,如果再次尝试获取该锁,会被阻塞,直到锁被释放。这种锁不支持线程对同一把锁的重复获取。协程(Coroutine)也被叫做微线程、纤程,是一种比线程更加轻量级的并发编程模型。
2025-04-02 15:01:03
842
原创 MySql面试总结(五)
一、核心定义逻辑删除(软删除)原理:不真正删除数据,而是通过添加标记字段(如deleted_atis_deleted)标识数据为“已删除”。实现物理删除(硬删除)原理:直接从数据库中移除数据记录,无法通过常规查询恢复。实现二、核心区别对比维度逻辑删除物理删除数据可见性数据仍存在,通过条件过滤隐藏数据彻底消失可恢复性可通过更新标记字段恢复需依赖备份或日志恢复(成本高)性能影响增加查询条件和索引维护成本删除大表时可能引发锁表或性能抖动事务控制应用层控制,事务边界灵活。
2025-04-01 14:41:17
687
原创 MySql面试总结(四)
若你只需删除表中的部分行,就使用DELETE。若要完全删除表或数据库,使用DROP。若要快速删除表中的所有行且重置自增列,使用TRUNCATE。若你只需要两个表中匹配的行,使用INNER JOIN。若要保留左表的所有行,同时获取右表中匹配的行,使用LEFT JOIN。若要保留右表的所有行,同时获取左表中匹配的行,使用RIGHT JOIN。LIMIT 10的执行速度通常要比快得多。当需要分页查询大量数据时,使用大偏移量的LIMIT。
2025-04-01 10:42:04
836
原创 MySql面试总结(三)
在MySQL中,长事务是指执行时间较长、占用数据库资源时间较久的数据库事务。长事务可能会导致以下多种问题:面向连接可靠性和稳定性双工通信长连接支持如果输出中有相关信息,说明存在使用3306端口的连接,很可能是MySQL连接。2. 协议头信息- HTTP协议的请求和响应都有特定的协议头,例如、、等。而MySQL协议的数据包没有这些HTTP协议头信息。可以通过抓包工具(如Wireshark)来捕获网络数据包,查看数据包的内容,判断是否包含HTTP协议头信息。如果没有,则很可能是MySQL连接。3. 应用
2025-03-19 14:56:11
1048
原创 JDBC、MyBatis 、MyBatis-Plus面试总结(一)
以下为你整理了一些 MyBatis 和 MyBatis-Plus 中 相关的常见面试问题及答案:答案: 文件是 MyBatis 中用于定义 SQL 语句的配置文件。它将 SQL 语句与 Java 代码分离,使得 SQL 语句的管理和维护更加方便。在 中可以定义各种 SQL 操作,如查询、插入、更新和删除等,通过映射关系将 SQL 执行结果映射到 Java 对象上。答案:虽然 MyBatis-Plus 提供了很多内置的 CRUD 方法,可以减少编写 SQL 语句的工作量,但在以下情况下仍然需要使用 文件
2025-03-05 14:19:34
961
原创 MySql面试总结(二)
截至2024年7月,MySQL最新稳定版本是8.2,并不存在MySQL 8.4 。下面从常见的几个方面为你介绍 MySQL 8.x 中 子句的优化方法:在这个例子中,通过为 列创建索引,当执行 子句中包含 条件的查询时,MySQL 可以利用该索引快速定位符合条件的记录,提高查询效率。正确示例:3. 优化范围查询原理:范围查询(如 、、 等)可能会导致索引失效,特别是在复合索引中。尽量将范围查询放在条件的最后。示例:在这个例子中,先通过 列进行精确匹配,再进行 列的范围查询
2025-03-03 15:48:03
835
原创 MySql面试总结(一)
Change Buffer 是 MySQL InnoDB 存储引擎中的一种特殊缓存机制,它主要用于缓存对非唯一二级索引页的写操作(插入、更新、删除),而不是立即将这些修改操作应用到磁盘上的索引页。只有在查询需要访问这些被修改的索引页时,或者在后台线程进行定期合并操作时,才会将 Change Buffer 中的修改合并到磁盘上的索引页中。特性InnoDBMyISAMMemoryArchive事务支持是否否否锁机制行级锁表级锁表级锁行级锁外键支持是否否否全文索引。
2025-02-28 16:10:31
684
原创 程序员必须掌握的MySql常用技巧
连接到服务器和断开与服务器的连接要连接到服务器,通常需要提供 MySQL 用户 name密码。如果服务器运行在以下 登录后,还必须指定主机名。联系您的 管理员了解您应该使用的连接参数 用于连接(即主机、用户名和密码 使用)。和user表示主机名,其中 MySQL 服务器正在运行,以及您的 MySQL 账户的用户名。为您的设置替换适当的值。这表示您的密码;进入它 当显示提示时。该提示告诉您已准备好供您输入 SQL 语句。mysql>如果在尝试登录时收到错误消息,例如。
2025-02-27 19:50:54
646
原创 MySQL 8.4 SQL 全攻略:所有知识点与实战场景
MySQL 8.4 提供了丰富的 SQL 功能,涵盖了数据库操作、表操作、数据操作、查询优化、事务处理等多个方面。通过合理运用这些功能,可以构建高效、稳定、安全的数据库应用系统。在实际项目中,需要根据具体的业务需求选择合适的 SQL 语句和数据库特性,同时要注意数据的安全性和性能优化。希望本文能够帮助读者全面掌握 MySQL 8.4 的 SQL 知识,并在实际工作中灵活运用。
2025-02-27 19:49:55
872
原创 Java架构师必须掌握 JDK 8 的关键知识点
User类:定义了用户的基本信息,包括姓名、年龄和活跃状态,并提供了相应的 getter 方法和toString方法。Predicate定义:通过 Lambda 表达式和方法引用定义了不同的Predicate,用于筛选用户。方法:接受用户列表和Predicate作为参数,遍历用户列表,使用Predicate的test方法判断用户是否符合条件,将符合条件的用户添加到新列表中并返回。main方法:创建用户列表,定义不同的Predicate,调用方法进行筛选,并打印筛选结果。通过使用Predicate。
2025-02-27 10:12:10
571
原创 深入理解 JSP 与 Servlet:原理、交互及实战应用
加载:当客户端首次请求访问一个 Servlet 时,Web 容器(如 Tomcat)会查找该 Servlet 的类文件,并将其加载到内存中。实例化:Web 容器使用new关键字创建 Servlet 类的实例。通常情况下,一个 Servlet 类在整个 Web 应用程序的生命周期中只会被实例化一次。初始化:实例化之后,Web 容器会调用 Servlet 的init()方法进行初始化操作。该方法只会被调用一次,常用于加载配置文件、建立数据库连接等初始化工作。服务。
2025-02-22 10:52:30
907
原创 深入了解 mica-auto:自动生成 Java SPI 和 Spring Boot 配置的利器
创建一个自动配置类,使用注解来标记该类作为 Spring Boot 的自动配置类。// 使用 @AutoService 注解标记该类为 Spring Boot 自动配置类// 标记该类为 Spring 配置类// 这里可以添加具体的配置逻辑// 例如,注册 Bean 等解释:这是mica-auto提供的注解,用于自动生成 Spring Boot 的自动配置文件。当项目编译时,mica-auto会根据该注解在文件中添加相应的配置信息。
2025-02-21 14:31:41
790
原创 Java SPI 彻底不迷糊
/ 定义一个服务接口,代表消息发送器// 发送消息的方法与上面的示例相同,定义接口和SmsSender实现类。Java SPI 机制的核心价值在于解耦和提高系统的可扩展性。它将服务的定义和实现分离,使得系统在运行时可以根据配置动态地加载不同的实现类,避免了代码的硬编码,提高了代码的灵活性和可维护性。虽然在简单的应用场景下,它和普通的接口实现类看起来区别不大,但在复杂的系统和需要动态扩展的场景中,Java SPI 机制能够发挥出巨大的优势。// 定义日志服务接口,用于记录日志。
2025-02-21 11:24:25
764
原创 深入理解 Classpath:从 Servlet 到 Spring Cloud
/ 自定义类加载器,继承自 ClassLoader// 构造函数,接收类文件所在的路径@Overridetry {// 将类名转换为文件路径// 创建文件输入流// 获取文件通道// 创建字节缓冲区,大小为文件的大小// 将文件内容读入缓冲区// 关闭文件通道// 关闭文件输入流// 将缓冲区中的字节数据转换为字节数组// 使用 defineClass 方法将字节数组转换为 Class 对象。
2025-02-20 14:57:16
955
原创 Spring 到 Spring Boot:配置文件管理的灵活封装与扩展
在 Spring Boot 项目中,开发者可以使用自定义的// 标记为 Spring 配置类// 指定要加载的配置文件,同时使用自定义的 FlexiblePropertySourceFactory 进行加载// 定义配置类// 配置类内容,可添加 Bean 定义等配置逻辑从传统 Spring 到 Spring Boot,配置文件管理经历了从有限支持到丰富功能的转变。架构师通过自定义类,实现了对和.yaml文件的灵活加载,同时扩展了加密解密、动态加载等功能。
2025-02-20 14:08:32
509
原创 SpringBoot自定义分布式配置同步Starter实现
通过以上步骤,我们实现了一个基于 Spring、Spring Boot、Spring Cloud、Nacos、RabbitMQ 的分布式系统配置同步基础框架,并将其封装成 Spring Boot Starter 方便其他开发人员和服务调用。该框架具有良好的扩展性,可以根据实际需求进一步定制和优化。
2025-02-19 17:20:35
1785
原创 Spring Boot 实际开发中,对输入参数进行合法性校验的几种方案
使用自定义注解结合 Spring Validation 框架进行校验。// 定义状态枚举,包含合法的状态值ACTIVE,INACTIVE,PENDING// 自定义注解,用于标记需要进行枚举值校验的方法// 指定需要校验的枚举类Class<?// 指定需要校验的参数索引,从0开始// 定义状态枚举,包含合法的状态值ACTIVE,INACTIVE,PENDING// 自定义注解,用于标记需要进行枚举值校验的参数// 指定需要校验的枚举类Class<?
2025-02-19 10:15:59
1496
原创 Spring Boot 实现接口访问管控的几种方案
首先,我们要创建一个名为的自定义注解,用于标记需要进行访问管控的接口。// 该注解可应用于方法上// 注解在运行时保留// 注解的属性,用于指定配置文件中对应的属性名借助自定义注解和 AOP 切面的方式,我们能够灵活地对 Spring Boot 项目中的接口实施访问管控。这种方式不但提升了代码的可维护性与可扩展性,还能依据不同的业务需求便捷地调整接口访问规则。同时,运用自定义异常类和结果码能够统一错误处理,为用户提供清晰明了的错误信息。
2025-02-18 22:08:32
1190
原创 自定义 Redis Starter 实现与扩展全解析
/ 自定义 Redis 缓存类,继承自 RedisCache// 定义通配符,用于匹配多个键// Redis 连接工厂,用于获取 Redis 连接/*** 构造函数,初始化自定义 Redis 缓存对象* @param cacheName 缓存名称* @param cacheWriter Redis 缓存写入器* @param cacheConfig Redis 缓存配置* @param connectFactory Redis 连接工厂*//**
2025-02-17 21:25:42
395
原创 Spring MVC 深度剖析与实战应用,与spirngboot和tomcat之间奥秘
Spring MVC 是 Spring 框架的一个模块(提升:spirng框架有哪些核心模块呢?),它是基于 Java 实现的一个轻量级 Web 框架,遵循 MVC(Model-View-Controller,模型 - 视图 - 控制器)设计模式(分层思想出现)。MVC 模式将一个应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller),它们各自处理不同的职责,从而实现代码的解耦和可维护性,这里主要弄清楚有哪几层,明白分层思想出现。模型(Model)
2025-02-15 13:49:52
820
原创 彻底搞懂 Spring AOP:从基础到实战再到源码剖析
切面(Aspect):切面是一个包含了通知(Advice)和切入点(Pointcut)的模块,它定义了横切关注点的实现逻辑。简单来说,切面就是我们要插入到业务逻辑中的额外功能,比如日志记录、事务管理等。通知(Advice):通知是切面中的具体操作,它定义了在何时(连接点)执行何种操作。常见的通知类型有:前置通知(Before Advice):在目标方法执行之前执行。后置通知(After Advice):在目标方法执行之后执行,无论目标方法是否抛出异常。
2025-02-14 15:27:43
835
原创 深入理解Java注解:从原理到实战,打造高可维护性代码
在早期Java开发中,配置信息通常通过XML文件管理(如Spring的XML配置)。例如,一个简单的数据库查询方法可能需要同时在代码和XML中定义事务规则,导致代码和配置割裂。掌握注解的关键是理解其底层原理(反射、动态代理)和设计思想(解耦、约定优于配置)。Spring AOP通过动态代理(JDK Proxy或CGLIB)在运行时生成代理类,拦截方法调用并插入日志逻辑。JVM在编译或运行时通过反射(Reflection)或字节码增强(如ASM)解析注解信息。:定义注解的生命周期(源码、编译时、运行时)。
2025-02-13 21:25:51
706
原创 深度剖析 Spring Boot:从启动流程、设计思想到架构的全面洞察
自动配置是 Spring Boot 的核心特性之一,它基于条件注解(如等),根据项目中引入的依赖和配置,自动为应用提供合适的配置。例如,引入 Spring Data JPA 和 MySQL 驱动后,Spring Boot 会自动配置数据源、实体管理器和 JPA 存储库,极大地减少了开发者手动配置的工作量。Spring Boot 以其独特的设计思想、简洁的启动流程和强大的功能特性,成为了 Java 开发领域的佼佼者。
2025-02-12 15:23:01
699
原创 深入理解 Spring Boot 条件注解:从源码到实战
Spring Boot 中的条件注解基于元注解实现,注解可以接受一个或多个Condition接口的实现类作为参数,根据这些条件的判断结果来决定是否加载相应的 Bean 或配置类。Spring Boot 在此基础上提供了一系列具体的条件注解,方便开发者根据不同的场景进行使用。Spring Boot 中的条件注解为开发者提供了强大而灵活的配置能力,通过根据不同的条件动态加载 Bean 或配置类,可以使应用更加灵活、可配置。从源码层面来看,这些条件注解都基于Condition。
2025-02-12 14:50:18
811
2
原创 深入剖析 Spring Boot 中 @EnableAutoConfiguration:从源码到实际应用
从注解定义可以看出,注解使用了@Import注解导入了类,这是自动配置的关键类。是 Spring Boot 自动配置机制的核心所在,它通过触发类加载自动配置类,实现了根据项目依赖自动配置 Spring 应用的强大功能。从架构层面来看,自动配置机制借助约定和条件注解,有效减少了开发者的手动配置工作量,大幅提高了开发效率。从源码角度分析,我们能够深入理解自动配置类的加载过程和条件过滤机制。
2025-02-12 13:53:52
1391
原创 深入剖析 Spring 框架中 @Import 与 @Autowired 的奥秘
Import和@Autowired是 Spring 框架中两个非常重要的注解,它们在架构设计和源码实现层面都有着不同的作用和使用场景。@Import主要用于配置类的整合,实现配置的模块化和组合;而@Autowired主要用于依赖注入,降低组件之间的耦合度。通过深入理解这两个注解的架构设计和源码实现,我们可以更好地使用 Spring 框架,提高代码的可维护性和可扩展性。
2025-02-12 11:41:00
547
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人