- 博客(92)
- 收藏
- 关注
原创 Spring 框架面试题集:常见问题解析
Spring Cloud 是一套用于构建分布式系统的工具集,它提供了服务注册与发现、负载均衡、断路器、配置管理、消息总线等功能。Spring Cloud 可以帮助开发者构建微服务架构,它与 Spring Boot 无缝集成,简化了分布式系统的开发。
2025-03-12 20:53:45
885
原创 Spring如何巧妙解决循环依赖问题?深入浅出解析三级缓存机制
循环依赖(Circular Dependency)就像两个程序员互相等待对方提交代码的场景:A说"我的代码要调用B的类",B说"但我的类需要A的接口定义"。在Spring中具体表现为:@Service@Autowired@Service@Autowired这两个服务类就像"先有鸡还是先有蛋"的问题,传统的对象创建方式根本无法解决这种相互依赖关系。但Spring通过巧妙的三级缓存设计,让这个看似无解的问题迎刃而解。
2025-03-04 19:43:32
677
原创 Spring MVC 的执行流程解析:从用户请求到响应返回
用户发起请求:用户通过浏览器或客户端发起 HTTP 请求。DispatcherServlet 接收请求:Spring MVC 的前端控制器接收到请求并转发。HandlerMapping 查找处理器:DispatcherServlet 根据请求 URL 查找对应的 Controller。Controller 执行业务逻辑:Controller 中的业务方法被调用,进行数据处理、验证等操作。ViewResolver 解析视图。
2025-02-25 20:45:33
661
原创 Spring框架入门指南
Spring是一个轻量级的Java开发框架,由Rod Johnson创建。它主要通过使用JavaBean来实现软件的解耦,简化了Java企业级应用的开发。Spring的核心是控制反转(IoC)和面向切面编程(AOP)。Spring框架是一个功能强大且灵活的开发框架,它通过控制反转和依赖注入简化了Java应用的开发。通过本文的介绍,你已经了解了Spring的基本概念,并搭建了一个简单的Spring Boot应用。希望这篇文章能帮助你更好地入门Spring开发。
2025-02-17 20:58:13
834
原创 spring和mybatis的整合
除了基础的Spring、MyBatis和数据库驱动,推荐添加以下依赖以增强功能:2. 多环境配置(开发、测试、生产)通过Spring的Profile机制实现环境隔离:激活方式:JVM参数:代码中:使用注解驱动配置更简洁:2. 多数据源配置在复杂项目中可能需要连接多个数据库:三、MyBatis高阶特性实战1. 动态SQL与复杂查询在Mapper XML中编写动态SQL:2. 一级与二级缓存配置 一级缓存:默认开启,作用域为SqlSession。在S
2025-02-15 12:03:36
619
原创 集合家族详情
选择集合类型的三要素是否需要排序?是否需要唯一性?主要操作类型(查询/插入/删除)?线程安全策略无竞争:普通集合性能黄金法则预估容量减少扩容避免在循环中频繁创建迭代器复杂对象实现高效的hashCode()方法。
2025-02-12 18:58:05
722
原创 Spring框架中的IoC与AOP原理及代码实践
IoC(Inversion of Control)是一种设计原则,将对象的创建、依赖注入和生命周期的控制权从程序代码转移到外部容器(如Spring容器)。传统开发中,对象直接通过new创建依赖,而IoC通过容器管理对象间的依赖关系,实现解耦。@Aspect@Component// 定义切点:匹配所有Service层方法// 前置通知System.out.println("【前置日志】方法 " + methodName + " 开始执行");// 后置通知(无论是否抛出异常)
2025-02-11 20:48:42
915
原创 spring ioc/aop总结
将日志、事务、权限等横切关注点(Cross-Cutting Concerns)从业务代码中剥离,以“切面”形式统一管理,提升代码复用性和可维护性。:Spring的成功不仅在于技术实现,更在于它倡导的“优雅简化复杂问题”的哲学,这正是每个开发者应追求的境界。),而IOC通过容器统一管理Bean的生命周期,通过依赖注入(DI)自动装配对象间的依赖关系。:只需定义好“积木”(Bean)的规格,由容器自动组装,开发者更关注业务逻辑而非对象管理。:通过抽象共性逻辑为切面,业务代码更纯粹,符合“单一职责原则”。
2025-02-10 20:53:24
705
原创 数据结构和算法
排序稳定性指的是在排序过程中,如果两个元素相等,它们在排序后的相对位置与排序前的相对位置相同。稳定的排序算法可以保持相等元素的相对顺序,而不稳定的排序算法则不能保证这一点。
2025-02-07 21:47:28
976
原创 Java并发篇
是一个支持传输操作的队列。它允许生产者在无法立即将元素传输给消费者时等待,直到消费者准备好接收元素。公平锁:按照请求锁的顺序来分配锁,先请求的线程先获取锁。非公平锁:不保证按照请求锁的顺序来分配锁,可能导致某些线程长时间等待。线程池通过复用线程来减少线程创建和销毁的开销。它维护一个线程池,根据任务需求来复用已有线程或创建新线程。
2025-02-07 10:31:08
665
原创 Java虚拟机篇
方法区(Method Area):存储已被虚拟机加载的类信息、常量、静态变量等。堆(Heap):存储所有的对象实例和数组,是垃圾回收的主要区域。栈(Stack):每个线程私有,存储局部变量、操作数栈、方法返回值等。程序计数器(Program Counter Register):每个线程私有,记录当前线程执行的字节码行号。本地方法栈(Native Method Stack):每个线程私有,用于本地方法的调用。
2025-02-07 09:29:22
916
原创 Java集合篇
HashMap基于哈希表实现,使用哈希函数将键映射到桶中,桶中存储键值对。HashMap的put过程包括计算哈希值、找到桶、如果桶已满则进行扩容、如果发生哈希冲突则链表法解决。当HashMap的负载因子超过一定阈值时,会进行扩容,即创建一个新的更大的数组,并将旧数组的内容复制到新数组中。HashMap的大小是2的n次方,这样可以减少哈希冲突,提高查找效率。
2025-02-07 09:06:15
641
原创 Java基础面试题
Java的跨平台特性主要得益于其运行机制。Java程序首先被编译成字节码(.class文件),然后由Java虚拟机(JVM)解释执行。JVM为Java程序提供了一个与具体操作系统无关的运行环境,因此Java程序可以在任何安装了相应JVM的平台上运行,而不需要重新编译。接口可以定义抽象方法、默认方法和静态方法。抽象方法是没有实现的方法,必须在实现类中实现;默认方法是有实现的方法,实现类可以选择覆盖或继承;静态方法是与实例无关的方法,可以直接通过接口名调用。
2025-02-07 08:50:52
894
原创 Spring框架 了解
Spring是一个开源的应用程序框架和控制反转(IoC)容器,用于简化Java应用程序的开发。它提供了全面的基础设施支持,包括但不限于依赖注入、面向切面编程(AOP)、事务管理等功能,使得开发者可以专注于业务逻辑的实现而非底层架构细节。
2025-01-17 21:19:27
953
原创 MySQL 使用 like “%x“,索引一定会失效吗?
虽然以开头的LIKE查询可能会导致索引失效,但这并不意味着你应该完全避免使用它们。理解何时以及如何使用索引,结合实际情况选择合适的优化策略,才是提高数据库查询性能的关键。希望这篇博客能够帮助你更好地理解MySQL中LIKE查询的工作原理,并为你的日常开发工作带来启发。如果你对这个话题有任何疑问或有自己的见解,欢迎留言讨论!
2025-01-15 22:51:07
615
原创 MySQL 日志:undo log、redo log、binlog 有什么用?
Undo Log:让你可以“撤回”错误的操作,支持事务回滚和MVCC,确保不同用户可以同时访问数据库而不相互影响。Redo Log:为数据库提供了一个“安全网”,确保即使遇到意外情况(如系统崩溃)也能恢复未完成的操作,并且提高了写入效率。Binlog:是一个详细的“日记本”,记录了所有的数据库变更,主要用于数据复制、恢复以及审计分析。
2025-01-14 20:39:23
596
原创 加了什么锁,导致死锁的?
理解死锁及其形成原因和解决方法是非常重要的,尤其是在并发编程和数据库管理中。让我们深入探讨一下具体的锁类型、如何导致死锁的详细过程以及如何预防和检测死锁。
2025-01-13 21:00:59
433
原创 MySQL 中的Buffer Pool
Buffer Pool是InnoDB用来管理数据页的一个内存区域。加速数据访问:通过缓存经常访问的数据页来减少磁盘I/O。支持事务处理:用于暂存已修改但尚未持久化到磁盘的数据页(称为脏页),确保事务的ACID特性。提升并发性能:通过合理地分配和管理内存资源,减少多个线程间的竞争。通过对MySQL Buffer Pool的理解和适当调优,可以显著改善数据库的整体性能。无论是小型应用还是大型企业级系统,掌握如何有效地管理和优化Buffer Pool都是至关重要的技能。
2025-01-09 20:17:00
671
原创 常见设计模式
简单来说,设计模式是解决特定类型问题的最佳实践模板。它们提供了一套通用的方法来处理软件设计中的常见挑战,如对象创建、结构组合以及行为交互等。设计模式不仅限于某一种编程语言,而是广泛适用于多种编程环境,包括Java、Python、C++等。概念: 确保一个类只有一个实例,并提供一个全局访问点。应用场景: 当你需要确保某个类在整个应用中仅有一个实例时,比如数据库连接池或日志记录器。示例代码java");
2025-01-08 20:43:43
597
原创 MySQL数据库 中的锁
MySQL 中的锁机制是确保数据一致性和并发控制的核心组件。通过合理的锁设计和优化,可以显著提高系统的并发性能,减少锁竞争和死锁的发生。理解不同类型的锁及其工作原理,有助于开发人员编写高效的 SQL 查询和事务,并确保应用程序在高并发环境下的稳定性和性能。如果你还有任何疑问或需要进一步的帮助,请随时提问!
2025-01-07 19:30:15
973
原创 Read View在MVCC是如何工作的?
是一种数据库技术,用于在高并发环境下提高读取操作的性能,同时确保数据的一致性。MVCC 通过为每个事务提供一个一致的快照视图(即),使得读取操作不会被写入操作阻塞,从而减少了锁的竞争。Read View是 MVCC 的核心概念之一,它决定了事务在执行时能够看到哪些版本的数据。
2025-01-06 20:52:43
1216
原创 什么是注解?
注解(Annotations)是Java语言的一种元数据形式,用于提供有关程序元素(如类、方法、变量等)的信息。注解不会直接影响程序的运行时行为,但可以被编译器、工具或框架用来影响其处理方式。你可以根据需要创建自己的注解。自定义注解需要使用@interface关键字,并可以包含元素(类似于方法声明),这些元素将在使用注解时提供值。java// 定义一个简单的注解@Retention(RetentionPolicy.RUNTIME) // 指定注解的保留策略。
2025-01-04 11:31:39
641
原创 什么时候需要 / 不需要创建索引?
创建索引是一项重要的数据库优化手段,但并不是所有的情况都适合创建索引。你应该根据具体的查询模式、数据量、更新频率等因素来决定是否创建索引。创建索引的时机:当某个列频繁用于WHEREJOINORDER BYGROUP BY等操作时,创建索引可以显著提高查询性能。避免创建索引的时机:对于小表、频繁更新的列、低选择性的列、大文本字段等情况,创建索引可能会适得其反,增加维护成本和性能开销。保持合理的索引数量:避免过度索引,定期审查和优化现有的索引,删除不再需要的索引。
2025-01-02 19:11:20
1827
原创 MySQL 可重复读隔离级别,完全解决幻读了吗?
事务隔离级别是数据库用来控制多个并发事务之间如何交互的机制。不同的隔离级别提供了不同程度的保护,以防止并发事务之间的相互干扰。读未提交(Read Uncommitted):最低的隔离级别,允许一个事务读取其他事务尚未提交的数据,可能会导致脏读、不可重复读和幻读。读已提交(Read Committed):只允许读取已经提交的数据,可以防止脏读,但仍然可能发生不可重复读和幻读。可重复读(Repeatable Read)
2024-12-30 20:16:23
1163
原创 一条sql查询非常慢,我们怎么去排查和优化?
当一条SQL查询非常慢时,排查和优化的过程可以分为几个步骤。通过系统化的分析,你可以逐步找出性能瓶颈,并采取相应的优化措施。以下是详细的排查和优化方法:在开始优化之前,首先要确保你完全理解这条查询的业务逻辑和需求。问自己以下几个问题: 是数据库提供的一个非常有用的工具,它可以帮助你查看查询的执行计划,了解数据库是如何执行这条查询的。通过 ,你可以看到数据库选择了哪些索引、是否进行了全表扫描、是否有不必要的排序或临时表等。对于 MySQL 和 PostgreSQL 等关系型数据库,你可以通过以下方式执行 :s
2024-12-28 11:47:32
2090
原创 MyBatis X 插件只有xml文件目录显示图标的原因?
因此,我学会了在依赖自动化工具的同时,也要培养对代码的敏感性和理解力。我意识到,尽管代码补全功能可以大大提高我们的工作效率,但如果我们不完全理解代码的含义,就可能忽视这些细微的错误。这次经历教会了我,在使用任何自动化工具时,都需要保持警惕,仔细检查生成的代码,确保没有引入错误。问题在于,URL中的冒号使用了中文字符,而不是英文字符。这个小小的差异导致了XML文件无法被正确解析,进而影响了MyBatis X插件的功能。经过一系列的尝试和失败后,我终于在代码中找到了问题的根源。5:多个平台的博客浏览。
2024-12-27 16:56:56
323
原创 日志(Redo Log Undo Log)
在 MySQL 的 InnoDB 存储引擎中,日志(Redo Log)和回滚段(Undo Log)是两个非常重要的组件,它们分别服务于不同的目的,并且对于保证数据的一致性和持久性至关重要。下面我们将详细解释这两个概念,以及为什么需要它们。Redo Log和Undo Log是 InnoDB 存储引擎中两个不可或缺的组件,它们共同保证了事务的 ACID 属性(原子性、一致性、隔离性、持久性)。Redo Log。
2024-12-26 11:42:28
675
原创 MyBatis项目中的常见的问题
通过上述问题的详细分析和解决方案,我们可以看到MyBatis在实际开发中可能遇到的问题以及如何解决这些问题。希望这篇文章能够帮助开发者更好地理解和使用MyBatis,提高开发效率和代码质量。
2024-12-24 20:55:12
928
原创 一级缓存与二级缓存(MyBatis)
一级缓存是MyBatis中最基本的缓存,它的生命周期与一个SqlSession相同。也就是说,当我们创建一个SqlSession对象时,MyBatis会自动为我们创建一个缓存,用于存储这个SqlSession中所有操作的查询结果。二级缓存是跨SqlSession的缓存,它可以被多个SqlSession共享。二级缓存的生命周期通常与应用程序相同,或者由具体的缓存策略决定。MyBatis的缓存机制是提高数据库操作性能的重要手段。
2024-12-23 19:30:45
642
原创 java开发面试有2年经验
让候选人进行自我介绍,观察其沟通能力和自信程度。对于2年经验的Java开发人员,面试过程需要更加注重技术深度和项目经验。通过细致的准备和专业的评估,可以确保招聘到最合适的Java开发人员。希望本文能帮助面试官更有效地进行Java开发面试,为企业带来优秀的技术人才。
2024-12-21 11:57:36
337
原创 理解 EXPLAIN
EXPLAIN是 SQL 中的一个命令,用于获取数据库执行 SQL 查询的具体步骤,也就是查询执行计划。执行计划包括如何访问表中的数据(例如通过索引还是全表扫描)、连接查询的实现方式和连接顺序等。如果 SQL 语句性能不理想,查看其执行计划是首要步骤。
2024-12-20 20:43:51
895
原创 MVCC了解
MVCC广泛应用于需要高并发访问的数据库系统中,尤其是在在线事务处理(OLTP)和一些需要高可用性的系统中。它的非锁定读取为系统提供了更好的性能和响应速度。例如,在电商场景中,大量用户同时浏览商品和下单,通过MVCC技术,用户的浏览操作不会被其他事务阻塞,从而提升用户体验。
2024-12-19 22:20:35
690
原创 SQL优化
因为ids太多,即使能快速查出数据,但如果返回的数据量太大了,网络传输也是非常消耗性能的,接口性能始终好不到哪里去。除非是有些特殊的场景,比如union all之后,结果集中出现了重复数据,而业务场景中是不允许产生重复数据的,这时可以使用union。此外,在删除或者修改数据时,为了防止误操作,导致删除或修改了不相干的数据,也可以在sql语句最后加上limit。有时候,我们需要查询某些数据中的第一条,比如:查询某个用户下的第一个订单,想看看他第一次的首单时间。比如:想通过指定的一些id,批量查询出用户信息。
2024-12-19 08:58:57
827
原创 什么是事务?隔离级别
事务是代表单个工作单元的一组SQL语句,它确保这些语句要么全部成功,要么全部失败回滚。(想象一下,你去银行转账。你要把一笔钱从一个账户(账户A)转到另一个账户(账户B)。这个转账过程可以看作是一个事务。原子性、一致性、隔离性和持久性。这四个特征通常称为ACID。1.脏读:脏读是指一个事务读取了另一个事务未提交的数据。如果那个事务后来回滚了,那么读到的数据就是无效的,就像是读到了一个“脏”的数据。(举例:假设你在查看商品库存,另一个工作人员正在更新库存数据但还没完成。
2024-12-17 19:58:12
1057
原创 Gitee与idea的项目提交步骤
以上步骤详细描述了如何在IntelliJ IDEA中将项目提交到Gitee。如果你在操作过程中遇到任何问题,可以查看IDEA的帮助文档或Gitee的帮助中心获取更多信息。确保你已经安装了Git,并且你的计算机上已经配置了Git。如果你还没有安装Git,可以从。
2024-12-16 19:49:29
645
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人