- 博客(20)
- 收藏
- 关注
原创 mysql中主从复制的原理
MySQL主从复制原理:主库(Master)将事务提交时的数据变更写入二进制日志(Binlog);从库(Slave)读取主库的Binlog并写入中继日志(RelayLog);最后从库重做RelayLog中的事件,实现数据同步。该机制通过日志传递确保主从数据一致性。
2025-07-14 18:03:40
206
原创 sql语句的执行流程
执行器负责具体执行sql语句。最后把数据返回给客户端。优化器对sql进行“它认为比较好的优化”。当你查询时,会先去缓存看看,如果有返回。如果没有,分析器对sql做词法分析。客户端连接数据库,验证身份。
2025-07-14 16:49:41
258
原创 为什么不满足最左前缀法则索引也不会失效
SQL语句执行流程:客户端连接验证身份后,先查询缓存,若无结果则进行词法分析。优化器会对SQL进行自动优化(如调整最左前缀顺序),最后由执行器执行并返回数据。其中优化器的自动优化是关键环节,即使SQL未遵循最左前缀法则,优化器也会调整顺序以提高效率。
2025-07-14 16:46:52
71
原创 线程池的最大线程数与核心线程数应该怎么设置
线程池参数设置方法论:根据业务类型(CPU/IO密集型)选择线程数公式,建议CPU密集型线程数等于CPU核心数,IO密集型线程数=CPU核数×(1+等待/计算时间比)。提供常见场景配置模板(如Tomcat默认10/200),强调必须通过压测验证指标(线程利用率、队列堆积等),并支持动态调整。核心原则是CPU任务避免线程膨胀,IO任务需充分提升阻塞等待期的资源利用率。
2025-07-14 16:32:48
627
原创 如何检查死锁发生的位置
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
221
原创 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
257
原创 jdk1.8时hashmap()中put的流程
摘要: HashMap的put方法实现逻辑如下:1)若数组为空则进行扩容;2)通过hash计算数组下标;3)若该位置为空,直接存入新节点;4)若不为空则判断:a)key相同则覆盖,b)不同则根据节点类型处理:红黑树节点直接插入,若存在相同key则更新;链表节点采用尾插法插入,若存在相同key则更新,插入后若链表长度≥8则转为红黑树。该方法实现了高效的键值对存储和更新机制。
2025-07-14 13:41:20
94
原创 java中头插法与尾查法的区别
Java中链表的插入方法分为头插法和尾插法。头插法将新节点插入链表头部,时间复杂度为O(1),但会使元素逆序;尾插法将节点插入尾部,若需遍历链表则时间复杂度为O(n),但能保持元素顺序。实际应用中,LinkedList的addFirst()和JDK7的HashMap冲突处理使用头插法,而LinkedList的addLast()和JDK8+的HashMap改用尾插法以避免并发问题。关键区别在于插入位置、时间复杂度和元素顺序。
2025-07-14 13:33:53
242
原创 什么是死锁以及如何解决死锁
摘要:死锁是指多个线程因争夺资源而互相等待的阻塞状态。产生死锁需同时满足互斥、持有并等待、不可剥夺和环路等待四个条件。避免死锁的关键在于破坏任一条件:1)互斥条件无法破坏;2)破坏持有并等待需一次性请求所有资源;3)破坏不可剥夺条件允许强制释放资源;4)破坏环路等待需按固定顺序获取资源。通过针对性破坏某一条件即可有效预防死锁发生。(150字)
2025-07-10 16:26:29
135
原创 spring ,spring mvc ,spring boot 的区别
springboot是spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发spring+springmvc应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用(约定大于配置)spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给方法执行,比如日志、异常等。
2025-07-10 10:38:18
116
原创 bean的生命周期
Spring Bean的生命周期主要分为五个阶段:1)创建前准备阶段,解析配置文件并初始化扩展方法;2)实例化阶段,通过反射创建对象并扫描属性;3)依赖注入阶段,处理@Autowired等依赖并触发前置处理器;4)容器缓存阶段,将Bean存入缓存并触发后置处理器;5)销毁阶段,在上下文关闭时调用destroy-method方法。这个流程确保了Bean的完整生命周期管理,从初始化到销毁都提供了扩展点供开发者使用。
2025-07-10 10:35:48
162
原创 为什么equals()和hashCode()需要同时重写(简写)
如此在HashMap或HashSet就会导致两个相同的元素存储的位置不相同,无法正确存储或检索对象,违反最佳实践,因为在hashmap或HashSet中他的检索是底层根据hashcode来实现的()x.equals(y)=true 但是其hashCode()可能不相同。
2025-07-10 10:30:33
72
原创 Array和ArrayList的区别
ArrayList与数组(Array)的主要区别体现在三个方面: 封装性:ArrayList是对Object数组的封装,实现动态数组功能,支持灵活增删元素; 数据类型:数组要求严格同类型存储,ArrayList可存储异构对象(不使用泛型时); 可变性:数组长度固定,ArrayList长度动态可变,容量可自动扩展50%或通过Capacity属性手动调整,并自动完成内存重分配。这些特性使ArrayList比传统数组更灵活。
2025-07-10 10:16:14
222
原创 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
286
原创 什么是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
328
原创 在spring项目的测试类中什么时候需要加@SpringBootTest注解什么时候不需要加@SpringBootTest注解
在Spring项目中,使用@SpringBootTest注解的选择取决于测试类型:集成测试需要该注解加载Spring容器及依赖组件,适用于测试Controller、Service、Repository等;而纯单元测试(如工具类、POJO)或Mock测试则不需要,可直接实例化对象进行测试。简而言之,依赖Spring环境的测试用@SpringBootTest,独立逻辑测试则无需使用。
2025-07-09 17:06:49
229
原创 springmvc的执行流程
SpringMVC是基于Java的轻量级Web框架,采用MVC模式分离逻辑、数据和视图。其核心流程包括:DispatcherServlet接收请求,通过HandlerMapping找到对应Controller;HandlerAdapter调用Controller方法处理请求;返回ModelAndView包含数据和视图信息;ViewResolver解析视图名称,View渲染后将结果返回用户。这种分层架构使开发更清晰、易维护。
2025-07-09 14:54:17
963
原创 post请求和get请求的区别
GET请求适合用于获取数据,而POST请求适合用于提交数据。在实际开发中,根据具体需求选择合适的请求方法是非常重要的。
2025-07-09 14:42:34
330
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人