- 博客(321)
- 收藏
- 关注
原创 掌握这些 Spring Boot 启动扩展点,已经超过 90% 的人了
我们从这些spring&springboot的扩展点当中,大致可以窥视到整个bean的生命周期。在业务开发或者写中间件业务的时候,可以合理利用spring提供给我们的扩展点,在spring启动的各个阶段内做一些事情。以达到自定义初始化的目的。此篇总结,如果有错误或者疏漏的地方,恳请指正。
2025-01-09 20:45:00
1230
原创 生产出现了重复数据,原来是高并发接口未做幂等惹的祸
幂等性我们最早的时候可能是在数学中接触到,就是幂函数,以下就是几个幂函数的图像。幂等不仅仅是一数学概念,也是一个计算机学概念,在计算机中应用也很广泛。幂等操作的特点是一次或者任意多次执行所产生的影响均与一次执行的影响相同,不会因为多次的请求而产生不一样的结果。换句话说,就是我使用相同的请求参数,去请求同一个接口,不管请求多少次获取到的响应数据应该是一样的(当然这里排查程序之外的其他如网络和设备等的异常所造成的不一样的结果)。
2025-01-09 16:00:00
844
原创 公司的秒杀系统刚上线就挂掉了,这几个细节你想到了吗
高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节。
2025-01-09 15:15:00
991
原创 MySQL之高并发大流量情况下海量数据分库分表的正确姿势
分表方案主要是针对于单表字段过多或数据过多的情况去做的,通过垂直、水平分表的手段,能够很好解决单表由于字段、数据量过多产生的一系列负面影响,但无论是垂直分表还是水平分表,都必须建立在单库压力不高,但是单表性能不够的情况下进行的,因为它们都属于库内分表。如果是数据库整体压力都很大的情况,从而导致的查询效率低下,那不管再怎么做分表也无济于事,毕竟连流量入口都出现了拥塞,自然分表也无法解决问题,所以分表操作只建立在单库压力不高,但是单表查询效率低下的情况适用。
2025-01-09 13:00:00
1180
原创 自动化运维:如何零停机构建与部署项目
本文介绍的做法涵盖了使用Buddy进行持续集成和部署的基础知识。就软件发布频率而言,仅应用部署自动化本身就是一个行业的改变者,极大地提高了效率和工作条件。流水线和可视化界面的灵活性,可让您在不参考文档的情况下即时添加和删除操作,而Docker容器可确保整个团队的环境保持一致。总而言之,Buddy更像是一个开发运维大舞台,您可以在其中创建自动化工作流程,就像建造房屋一样:选择您需要的材料,在必要时进行调整,怎么舒适怎么办。但不要认为仅仅虚有其表,因为Buddy。
2025-01-09 11:45:00
874
原创 全解MySQL之分库分表后带来的“副作用”一站式解决方案
在本章中补齐了分库分表带来的一系列问题的剖析,以及问题产生后相应的解决方案,但在这里仅给出了基本的解决方案,但并未对其进行落地实践,毕竟内容较多不可能面面俱到,具体的落地会在后续的章节中徐徐道来~
2025-01-09 10:00:00
1007
原创 大白话讲述API 与 SDK 之间的区别
很多人在软件开发中经常会分不清 SDK 与 API ,今天就来浅谈一下两者之间的区别。直白地说,SDK 包含了 API ,是一套完整的,能完成更多功能的工具包,无论你想获取什么样的信息,SDK 里总能找到实现的办法。用通俗的话来举个例子:如果你想喝到 SDK 里的饮料(),你必须通过 API 这根吸管来实现(),否则你就喝不到饮料。什么是 SDK?即软件开发工具包,是一系列程序接口,文档,开发工具的集合, SDK 编程就是用 windows API 进行编程。
2025-01-09 08:15:00
1447
原创 你能区分熔断和降级有什么区别吗?
熔断和降级都是程序在我保护的一种机制,但二者在概念、触发条件、归属关系上都是不同的。熔断更偏向于全局视角的自我保护(机制),而降级则偏向于具体模块“退而请其次”的解决方案。
2025-01-08 20:30:00
1176
原创 SQL优化技巧10连问,收藏好
having子句用于分组后筛选,where子句用于行条件筛选having一般都是配合group by 和聚合函数一起出现如(count(),sum(),avg(),max(),min())where条件子句中不能使用聚集函数,而having子句就可以。having只能用在group by之后,where执行在group by之前。
2025-01-08 17:30:00
985
原创 祖传代码重构:从50万行到5万行的血泪史
重构一书的作者Martin Fowler对重构的定义:重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。大型重构:对顶层代码设计的重构,包括:系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象可复用组件等等。这类重构的工具就是我们学习过的那些设计思想、原则和模式。
2025-01-08 15:30:00
979
原创 又一批长事务,P0故障谁来背锅?
首先我们先要知道什么是长事务,顾名思义就是运行时间比较长,长时间未提交的事务,也可以称之为大事务。这类事务往往会造成大量的阻塞和锁超时,容易造成主从延迟,要尽量避免使用长事务。#假设我们有一张stu_tb表,结构及数据如下`increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',`stu_id` int(11) NOT NULL COMMENT '学号',
2025-01-08 14:30:00
1643
原创 为了保证数据一致性发送消息时先写库还是先发消息?
随着分布式服务架构的流行与普及,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用。虽然服务化为我们的系统带来了水平伸缩的能力,然而随之而来挑战就是分布式事务问题,多个服务之间使用自己单独维护的数据库,它们彼此之间不在同一个事务中,假如A执行成功了,B执行却失败了,而A的事务此时已经提交,无法回滚,那么最终就会导致两边数据不一致性的问题;尽管很早之前就有基于两阶段提交的XA分布式事务,但是这类方案因为需要资源的全局锁定,导致性能极差;
2025-01-08 13:15:00
978
原创 一次内存溢出排查优化实战
虽然到了最后也就改了一行代码(还没改,直接修改配置),但这排查过程我觉得是有意义的。也会让大部分觉得 JVM 这样的黑盒难以下手的同学有一个直观的感受。同时也得感叹 Disruptor 东西虽好,也不能乱用哦!
2025-01-08 12:45:00
592
原创 前端大佬电脑里的秘密-满满都是高级货
除了一些软件、网站的分享,入职一家新公司,需要快速去熟悉什么,也来叨叨几句,去到一个新的环境,要熟悉的内容,做好笔记,总结经验,下面是仅是我个人的一些小见解,合则取作为前端开发者,学习以下技术可以帮助你构建出现代化、交互性强的网页和应用程序:HTML(超文本标记语言):是构建网页的基础,学习HTML可以理解网页结构、语义化标签和基本元素。CSS(层叠样式表):用于定义网页的样式和布局,包括颜色、字体、间距、响应式布局等。JavaScript:是一种用于网页交互和动态效果的脚本语言。
2025-01-08 11:45:00
2077
原创 为什么有公司规定所有接口都用Post?
当谈到 RESTful Web 服务时,它指的是一种基于 REST(Representational State Transfer)原则设计的 Web 服务架构风格。REST 是一种用于构建可伸缩、可维护和可扩展的分布式系统的设计原则。RESTful Web 服务提供了一种在不同计算机系统之间进行通信的方式,使得这些系统能够使用标准的 HTTP 方法(例如 GET、POST、PUT、DELETE)进行交互。资源(Resources):在 RESTful 架构中,所有的数据都被视为资源。
2025-01-08 09:45:00
1676
原创 11148收藏分享绝命10招,让慢SQL调优100倍,通过电商案例手把手带你SQL调优
本文将通过实际案例,探讨MySQL调优的关键步骤和技巧,帮助大家了解如何识别和解决常见的性能问题,从而优化数据库系统的性能表现。在接下来的内容中,我们通过相关案例来深入探讨监测和诊断、查询优化、数据库配置调优、硬件和操作系统优化等方面的具体技术和实践,以帮助读者全面理解MySQL调优的实战过程,并最终提升其应用程序的性能和稳定性。
2025-01-08 08:30:00
807
原创 git 只会add、commit这几个操作吗?来学点新姿势~
git config --global color.ui true让Git显示颜色,会让命令输出看起来更醒目忽略特殊文件 创建一个.gitignore文件,把需要忽略的文件名填进去。Git就会自动忽略这些文件。我也在学习中遇到过这样的问题,比如node_modules文件就可以忽略。忽略文件原则:忽略操作系统自动生成的文件,比如缩略图等;忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
2025-01-07 21:45:00
609
原创 一千万以上的数据量,你是如何做查询的?
综上所述,分页查询千万级别的数据需要注意数据库性能、数据排序和数据一致性等难点。通过优化查询语句、使用适当的索引、合理分页策略以及采用缓存和分布式架构等方法,可以改善查询性能和应对数据量的挑战。
2025-01-07 20:00:00
1761
原创 看完这篇还不懂MySQL的MVCC机制算我输
前面提到了快照读和当前读,这又有什么不一样呢,什么样的sql语句算是快照读,什么样的又算是当前读呢?MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,用于处理数据库系统中多个事务同时对同一数据进行读写操作时的并发冲突问题。在传统的并发控制机制中,如锁机制,当一个事务对某个数据对象进行修改时,会对该数据对象加锁,其他事务在访问该数据对象时需要等待锁释放。这种机制在高并发环境下容易导致性能瓶颈,因为所有事务必须依次等待锁的释放才能进行下一步操作。
2025-01-07 19:30:00
707
原创 能把队友气死的几种屎山代码
前几天在技术群里聊起Code Review的事,大伙儿似乎都憋了一肚子气:我觉得这份难言之隐应该要让更多人看到,就约了个稿:整理(脱敏)出了这篇小小的屎山合集,供大家品鉴。可能存在下面一些问题直接来一个代码例子,这是一个获取背景颜色的方法,但是随着业务的不断变化,背景颜色的来源越来越多,在一些业务人员的处理下可能是这样的:相信你在读上面的代码的时候是极为痛苦的,想要一目了然的知道最终会进入哪个分支,基本不可能。于是基于下面两个原则有了一个基础版本的重构:依赖参数缺失。这样的话,每次页面有重渲染,该us
2025-01-07 18:00:00
767
原创 攻克JavaScript 的三座大山
基本语法:了解 JavaScript 的基本语法,包括变量声明、数据类型、运算符、条件语句、循环语句等。数据类型和类型转换:熟悉 JavaScript 的数据类型,包括原始数据类型(字符串、数字、布尔值、null、undefined)和复杂数据类型(对象、数组、函数等),以及类型转换的规则。函数:深入理解函数的定义、调用、参数传递和返回值,并掌握闭包、匿名函数和箭头函数等概念。对象和面向对象编程:了解 JavaScript 中的对象、原型和原型链,学习面向对象编程的基本思想和实现方式。
2025-01-07 16:30:00
1663
原创 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的最清楚的文章
调用阻塞IO会一直阻塞住对应的进程直到操作完成,而非阻塞IO在内核还准备数据的情况下会立刻返回。
2025-01-07 14:45:00
967
原创 为什么说TCP 终将会被 UDP 取代
TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为对数据准确性要求高,速度可以相对较慢的,可以选用TCPTCP 协议的一些设计在今天来看虽然仍然具有巨大的价值,但是并不能适用于所有场景。使用 UDP 构建性能更加优异、更灵活的传输协议,例如:QUIC[^15] 等;
2025-01-07 13:30:00
1589
原创 明年用Seata搞定分布式事务管理的规范化建设
本篇介绍了微服务架构演进,必然带来数据不一致的问题,在一些特性场景下数据的一致性要求会很高,而大多数情况下对一致性的要求又不高,这些差异也导致了对分布式事务解决方案呈现两种相对的顾念,一种认为可以置之不理,一种则认为必须解决,在没有标准方案的情况下,很容易出现各显神通,做出的东西即不通用也不健壮。这两种情况从标准架构规范的大局来看都非合理状态,实际上从公司技术架构管理的角度看,需要的是一套规范的、通用的、可靠的分布式事务解决方案,能够帮助开发者在分布式的环境下,既能保证业务数据的一致性,又不需要。
2025-01-07 12:00:00
1417
原创 高并发场景秒杀库存解决方案
电商系统中秒杀是一种常见的业务场景需求,其中核心设计之一就是如何扣减库存。本篇主要分享一些常见库存扣减技术方案,库存扣减设计选择并非一味追求性能更佳,更多的应该考虑根据实际情况来进行架构取舍。由于涉及到 SELECT后进行UPDATE,以上步骤中存在多事务并发时写覆盖的问题。
2025-01-07 08:45:00
1129
原创 Java反序列化基础篇-JDK动态代理
Proxy.java:这是一个类,这个类是中介,也就是代理,他需要有房东的房源,然而我们通常不会继承房东,而会将房东作为一个私有的属性host,我们通过host.rent()来实现租房的方法。动态代理类 (以下简称为代理类 )是一个实现在类创建时在运行时指定的接口列表的类,具有如下所述的行为。方法对象的声明类将是该方法声明的接口,它可以是代理类继承该方法的代理接口的超级接口。Host.java:这是一个类,这个类就是房东,作为房东,他需要实现Rent.java这一个接口,并且要实现接口的rent()方法。
2025-01-06 21:30:00
939
原创 MySQL事务并发问题和MVCC机制
在MySQL的InnoDB存储引擎下 RC和RR 事务隔离级别都是基于这个MVCC(多版本并发控制)进行并发事务的控制的然后这个MVCC是基于这个"数据版本"对并发事务进行访问的。
2025-01-06 19:45:00
1477
原创 MySql 怎么查出符合条件的最新的数据行?
平时做业务,经常是需要查什么什么什么的最新的一条数据。那至于最新这个概念, 对于产品来说,经常会说的是 时间顺序,最新也就是 最近的意思。
2025-01-06 18:00:00
955
原创 SpringBoot启动代码和自动装配源码分析
随着互联网的快速发展,各种组件层出不穷,需要框架集成的组件越来越多。每一种组件与Spring容器整合需要实现相关代码。SpringMVC框架配置由于太过于繁琐和依赖XML文件;为了方便快速集成第三方组件和减少对配置文件的依赖,SpringBoot应运而生,其中采用了约定大于配置的理论让开发者不需要过多配置即可进行开发。SpringBoot底层使用的Spring ,默认集成了N多组件的自动装配。
2025-01-06 15:45:00
1012
原创 在高并发情况下我是这样解决单用户超领优惠券问题
在近期的项目里面有一个功能是领取优惠券的功能,每一个优惠券一共发行多少张,每个用户可以领取多少张:如:A优惠券一共发行120张,每一个用户可以领取140张,当一个用户领取优惠券成功的时候,把领取的记录写入到另外一个表中(这张表我们暂且称为表B)上面的代码按照我们的逻辑是没有问题,我通过使用PostMan软件测试也是没有问题,但是上面的代码确实是有问题的。**往往我们写的一些业务功能,在低并发的时候很多的问题会体现不出来。**所以这个领取优惠券的功能我通过Jmeter软件来进行压测。
2025-01-06 14:15:00
1804
原创 六种常用事务解决方案,你方唱罢,我登场(没有最好只有更好)
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(atomicity):事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。隔离性(isolation):一个事务的执行不能被其他事务干扰。
2025-01-06 13:00:00
676
原创 Java 多线程同步常用的三种方法
ReenreantLock类的常用方法有:ReentrantLock() :创建一个ReentrantLock实例lock() :获得锁unlock() :释放锁注:ReentrantLock()还有一个可以创建公平锁的构造方法,但由于能大幅度降低程序运行效率,不推荐使用。因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。
2025-01-06 12:45:00
263
原创 Java并发编程Bug的源头
要写好并发程序,首先要知道并发程序的问题在哪里,只有确定了“靶子”,才有可能把问题解决,毕竟所有的解决方案都是针对问题的。缓存、线程、编译优化的目的和我们写并发程序的目的是相同的,都是提高程序性能。但是技术在解决一个问题的同时,必然会带来另外一个问题,所以在采用一项技术的同时,一定要清楚它带来的问题是什么,以及如何规避。
2025-01-06 11:00:00
1466
原创 SpringBoot项目中实现MySQL读写分离
MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是 MySQL数据库自带功能,无需借助第三方工具。这可能是由于linux 是复制出来的,MySQL中还有一个是一样的,我们也需要修改。
2025-01-06 09:45:00
1746
原创 通过举例Spring 父方法、子方法调用以及事务传播机制验证
设置insertRoleMenu 内部发生异常,同时insertRole 开启Spring默认事务,insertRoleMenu开启Spring NOT_SUPPORTED事务,由于insertRoleMenu将父方法事务挂起,且执行绑定角色菜单之后发生异常,则insertRoleMenu会执行成功,同时由于子方法发生异常,则会影响外部insertRole方法的执行,则insertRole执行失败,事务回滚,验证结果。
2025-01-06 08:15:00
804
原创 巧用 Java 8 的 Optional 优雅的规避 NPE
先介绍一下API,与其他文章不同的是,本文采取类比的方式来讲,同时结合源码。而不像其他文章一样,一个个API罗列出来,让人找不到重点。
2025-01-05 20:15:00
1215
原创 用Java语言实现一个简单的图书管理系统
然后建一个Logic类,其中有allMenu方法,user方法,admin方法,userMenu方法,adminMenu方法,checkBook方法,borrowBook方法,returnBook方法,addBook方法,deleteBook方法,updateBook方法。用户有查看图书列表,借阅图书,归还图书这些选项,管理员有查看图书列表,增加图书,删除图书,修改图书这些选项。回到菜单界面,我们选择添加图书,输入图书的有关信息,这里我们输入两本书,都定义为空闲状态。
2025-01-05 17:45:00
247
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人