- 博客(28)
- 收藏
- 关注
原创 基于spring+vue把图片文件上传至阿里云oss容器并回显
本文介绍了基于Element UI的文件上传组件实现和阿里云OSS存储的后端处理。前端使用el-upload组件配置了文件上传接口、请求头、上传前后回调方法等属性。后端通过ossUtil工具类实现文件上传到阿里云OSS,包含Endpoint、AccessKey等必要配置参数,以及处理异常情况。最后通过Controller接收前端上传的文件,生成随机文件名后调用OSS工具类上传,返回文件访问URL。整个流程实现了从前端上传到云端存储的完整解决方案。
2025-11-21 15:30:50
539
原创 在vue2中主页面怎么给子页面传递数据
Vue2中父组件向子组件传递数据主要通过props实现,包括基础类型、对象类型以及带验证的props定义。文章介绍了5种常见方式:1)基本props用法;2)多种props定义方式;3)动态props;4)使用$attrs传递非props属性;5)通过$parent和$refs访问组件实例。最佳实践是优先使用props进行单向数据流通信,子组件通过$emit事件通知父组件修改数据,避免直接修改props。同时演示了如何通过计算属性传递动态数据,以及如何处理非props属性。
2025-11-17 10:41:14
1051
1
原创 在spring项目中我们应该打war包还是jar包?war包和jar包又有什么不同
Spring项目打包选择WAR包还是JAR包需根据应用场景决定:WAR包适用于传统Web应用部署到Servlet容器(如Tomcat),支持J2EE规范;JAR包适合独立应用或SpringBoot项目,内置Web服务器简化部署。SpringBoot推荐使用JAR包,便于快速启动和独立运行。选择关键看是否需要Web服务器特性及部署环境要求。
2025-09-08 16:50:45
425
原创 rabbitmq和kafka的区别
RabbitMQ与Kafka对比:RabbitMQ基于AMQP协议,侧重消息可靠性和复杂路由,适合金融交易等对可靠性要求高的场景;采用生产者-交换器-队列模型,支持消息持久化与确认机制,吞吐量较低但延迟表现较好。Kafka设计为高吞吐分布式系统,适合日志收集和大规模数据处理;采用主题-分区模型,保证分区内消息有序,吞吐量极高但延迟较高。RabbitMQ扩展性有限但可靠性强,Kafka则具备极强的水平扩展能力和副本机制。RabbitMQ生态较小而Kafka与大数据生态深度集成,两者社区都很活跃。
2025-09-04 12:02:08
771
原创 在Spring项目中,pom.xml 文件和 application.yml文件都是配置文件但是有什么不同呢?
Spring项目中pom.xml和application.yml的主要区别:pom.xml是Maven构建配置文件,采用XML格式,管理项目依赖、插件和构建参数;application.yml是SpringBoot运行时配置,采用YAML格式,定义数据库连接、服务端口等运行参数。前者用于开发阶段构建项目,后者用于运行阶段配置应用。两者在功能、格式和使用场景上有明显差异。
2025-09-03 14:04:54
273
原创 docker的作用
Docker是一个开源容器引擎,用于打包应用及依赖到可移植容器中。它能解决环境一致性、快速部署、隔离性、可移植性等问题,支持微服务架构,提高资源利用率,简化开发流程,并提供版本控制和安全机制。通过容器化技术,Docker实现了高效、一致的部署方式,特别适合现代云原生应用开发。
2025-09-01 14:30:25
465
原创 在Spring项目中,如果实体类的属性名和数据库字段名不一致如何解决
MyBatis解决实体类与数据库字段名不一致的两种方法:1)使用SQL中的AS关键字为字段指定别名;2)通过resultMap进行字段映射。AS别名适合简单场景,resultMap则更灵活,能处理复杂映射和跨数据库兼容性问题。开发者应根据实际需求选择合适方式,注意不同数据库的语法差异。
2025-09-01 14:11:34
294
原创 mybatis如何进行分页操作
摘要:本文介绍了在SpringBoot项目中集成MyBatis分页插件PageHelper的实现方法。主要包括:1)添加PageHelper依赖;2)配置MyBatis数据源;3)使用PageHelper.startPage()实现分页查询;4)Controller层接收分页参数;5)可选配置PageHelper参数。通过简单的5个步骤即可快速实现标准化的分页功能,提升开发效率。
2025-09-01 14:10:50
217
原创 mysql中主从复制的原理
MySQL主从复制原理:主库(Master)将事务提交时的数据变更写入二进制日志(Binlog);从库(Slave)读取主库的Binlog并写入中继日志(RelayLog);最后从库重做RelayLog中的事件,实现数据同步。该机制通过日志传递确保主从数据一致性。
2025-07-14 18:03:40
238
原创 sql语句的执行流程
执行器负责具体执行sql语句。最后把数据返回给客户端。优化器对sql进行“它认为比较好的优化”。当你查询时,会先去缓存看看,如果有返回。如果没有,分析器对sql做词法分析。客户端连接数据库,验证身份。
2025-07-14 16:49:41
290
原创 为什么不满足最左前缀法则索引也不会失效
SQL语句执行流程:客户端连接验证身份后,先查询缓存,若无结果则进行词法分析。优化器会对SQL进行自动优化(如调整最左前缀顺序),最后由执行器执行并返回数据。其中优化器的自动优化是关键环节,即使SQL未遵循最左前缀法则,优化器也会调整顺序以提高效率。
2025-07-14 16:46:52
96
原创 线程池的最大线程数与核心线程数应该怎么设置
线程池参数设置方法论:根据业务类型(CPU/IO密集型)选择线程数公式,建议CPU密集型线程数等于CPU核心数,IO密集型线程数=CPU核数×(1+等待/计算时间比)。提供常见场景配置模板(如Tomcat默认10/200),强调必须通过压测验证指标(线程利用率、队列堆积等),并支持动态调整。核心原则是CPU任务避免线程膨胀,IO任务需充分提升阻塞等待期的资源利用率。
2025-07-14 16:32:48
1541
原创 如何检查死锁发生的位置
MySQL死锁排查方法:1. 使用SHOW ENGINE INNODB STATUS查看最新死锁日志,获取事务ID、SQL语句和锁记录信息;2. 开启innodb_print_all_deadlocks参数记录所有死锁;3. 通过Performance Schema关联事务ID查询历史SQL;4. 在MySQL 8.0+中利用data_locks和data_lock_waits表分析锁关系;5. 可选可视化工具辅助分析。最终定位死锁原因后,通过调整事务顺序、加索引或降低锁粒度等方式解决。
2025-07-14 15:11:47
317
原创 mysql索引的三种常见的情况,失效的原理
联合索引在存储时B+树的结构如图索引a在B+树上是有序的:1,1,2,2,3,3索引b在B+树上是无序的:1,2,2,4,1,2在索引a=1时索引b时有序的:1,2。
2025-07-14 14:21:57
300
原创 jdk1.8时hashmap()中put的流程
摘要: HashMap的put方法实现逻辑如下:1)若数组为空则进行扩容;2)通过hash计算数组下标;3)若该位置为空,直接存入新节点;4)若不为空则判断:a)key相同则覆盖,b)不同则根据节点类型处理:红黑树节点直接插入,若存在相同key则更新;链表节点采用尾插法插入,若存在相同key则更新,插入后若链表长度≥8则转为红黑树。该方法实现了高效的键值对存储和更新机制。
2025-07-14 13:41:20
175
原创 java中头插法与尾查法的区别
Java中链表的插入方法分为头插法和尾插法。头插法将新节点插入链表头部,时间复杂度为O(1),但会使元素逆序;尾插法将节点插入尾部,若需遍历链表则时间复杂度为O(n),但能保持元素顺序。实际应用中,LinkedList的addFirst()和JDK7的HashMap冲突处理使用头插法,而LinkedList的addLast()和JDK8+的HashMap改用尾插法以避免并发问题。关键区别在于插入位置、时间复杂度和元素顺序。
2025-07-14 13:33:53
312
原创 什么是死锁以及如何解决死锁
摘要:死锁是指多个线程因争夺资源而互相等待的阻塞状态。产生死锁需同时满足互斥、持有并等待、不可剥夺和环路等待四个条件。避免死锁的关键在于破坏任一条件:1)互斥条件无法破坏;2)破坏持有并等待需一次性请求所有资源;3)破坏不可剥夺条件允许强制释放资源;4)破坏环路等待需按固定顺序获取资源。通过针对性破坏某一条件即可有效预防死锁发生。(150字)
2025-07-10 16:26:29
195
原创 spring ,spring mvc ,spring boot 的区别
springboot是spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发spring+springmvc应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用(约定大于配置)spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给方法执行,比如日志、异常等。
2025-07-10 10:38:18
178
原创 bean的生命周期
Spring Bean的生命周期主要分为五个阶段:1)创建前准备阶段,解析配置文件并初始化扩展方法;2)实例化阶段,通过反射创建对象并扫描属性;3)依赖注入阶段,处理@Autowired等依赖并触发前置处理器;4)容器缓存阶段,将Bean存入缓存并触发后置处理器;5)销毁阶段,在上下文关闭时调用destroy-method方法。这个流程确保了Bean的完整生命周期管理,从初始化到销毁都提供了扩展点供开发者使用。
2025-07-10 10:35:48
194
原创 为什么equals()和hashCode()需要同时重写(简写)
如此在HashMap或HashSet就会导致两个相同的元素存储的位置不相同,无法正确存储或检索对象,违反最佳实践,因为在hashmap或HashSet中他的检索是底层根据hashcode来实现的()x.equals(y)=true 但是其hashCode()可能不相同。
2025-07-10 10:30:33
101
原创 Array和ArrayList的区别
ArrayList与数组(Array)的主要区别体现在三个方面: 封装性:ArrayList是对Object数组的封装,实现动态数组功能,支持灵活增删元素; 数据类型:数组要求严格同类型存储,ArrayList可存储异构对象(不使用泛型时); 可变性:数组长度固定,ArrayList长度动态可变,容量可自动扩展50%或通过Capacity属性手动调整,并自动完成内存重分配。这些特性使ArrayList比传统数组更灵活。
2025-07-10 10:16:14
341
原创 arraylist和hashset扩容机制简写
ArrayList和HashSet扩容机制对比:ArrayList默认初始容量10,扩容时容量增长50%(如10→15),涉及数组复制;HashSet默认初始容量16,负载因子0.75,元素数超过12时容量翻倍(16→32),需重新哈希。ArrayList适合随机访问,HashSet适合快速查找和去重。两者都可指定初始容量,仅HashSet可调负载因子。扩容时ArrayList复制数组,HashSet重新哈希,均有一定性能开销。
2025-07-10 10:11:19
335
原创 什么是RESTful API?与非RESTful API有和区别
RESTful是一种基于HTTP协议的软件架构风格,由Roy Fielding在2000年提出。它将网络资源抽象为URI,通过标准HTTP方法(GET/POST/PUT/DELETE)进行操作,强调无状态和统一接口。RESTful API使用名词复数URI(如/users),区别于非RESTful风格使用动词的URI(如/getUser)。其优势在于简洁性、可扩展性和标准化的状态码使用,是现代Web服务的主流设计方式。
2025-07-09 17:51:04
433
原创 在spring项目的测试类中什么时候需要加@SpringBootTest注解什么时候不需要加@SpringBootTest注解
在Spring项目中,使用@SpringBootTest注解的选择取决于测试类型:集成测试需要该注解加载Spring容器及依赖组件,适用于测试Controller、Service、Repository等;而纯单元测试(如工具类、POJO)或Mock测试则不需要,可直接实例化对象进行测试。简而言之,依赖Spring环境的测试用@SpringBootTest,独立逻辑测试则无需使用。
2025-07-09 17:06:49
319
原创 springmvc的执行流程
SpringMVC是基于Java的轻量级Web框架,采用MVC模式分离逻辑、数据和视图。其核心流程包括:DispatcherServlet接收请求,通过HandlerMapping找到对应Controller;HandlerAdapter调用Controller方法处理请求;返回ModelAndView包含数据和视图信息;ViewResolver解析视图名称,View渲染后将结果返回用户。这种分层架构使开发更清晰、易维护。
2025-07-09 14:54:17
1696
原创 post请求和get请求的区别
GET请求适合用于获取数据,而POST请求适合用于提交数据。在实际开发中,根据具体需求选择合适的请求方法是非常重要的。
2025-07-09 14:42:34
407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅