- 博客(55)
- 收藏
- 关注
原创 一篇文章掌握雪花算法
Snowflake是Twitter开源的分布式ID生成算法,通过64位long类型数字实现全局唯一ID。其结构包含1位无用符号位、41位时间戳、10位机器标识(5位数据中心ID+5位机器ID)和12位序列号。相比数据库自增ID,Snowflake解决了分布式系统中ID重复、数据库性能瓶颈等问题,支持每秒百万级ID生成且基本保证有序递增。算法实现需考虑时钟回拨问题,通过自旋等待、时间偏移补偿等策略处理不同级别的时钟回拨异常。
2025-11-06 16:05:36
873
原创 软件测试基础理论
软件测试是确保软件质量的关键环节,包括功能、性能、兼容性等多方面验证。测试流程涵盖需求分析、计划制定、用例设计、执行测试及缺陷管理。测试方法分为黑盒、白盒和灰盒,工具包括Jmeter和Postman等。接口测试关注参数、结果、容错和权限,自动化测试框架如Pytest可提升效率。质量管理遵循ISO25010模型,通过缺陷管理流程和评审机制保障产品质量。完整的测试工作流程和规范化的文档编写是测试成功的基础。
2025-09-12 15:02:59
966
原创 Selenium
Selenium是一个开源的Web自动化工具,主要用于测试、爬虫等场景。它包含三大组件:WebDriver(核心组件)、IDE(已停更)和Grid(分布式扩展)。Selenium支持多语言、多浏览器和多操作系统,已成为W3C标准。环境搭建只需Python+pip安装即可,常见应用包括页面访问、点击输入、滚动缩放等操作。Selenium基于面向对象设计,主要操作WebDriver和WebElement两大对象,提供8种元素定位方式,支持强制/隐式等待。可与pytest框架集成,采用POM模型和KDT方法进行测
2025-08-23 11:29:59
1350
原创 JMeter(进阶篇)
本文介绍了JMeter性能测试中的三类核心组件应用。一、逻辑控制器:包括IF控制器(条件执行)、ForEach控制器(遍历集合)、循环控制器(固定次数执行);二、关联技术:XPath提取器(XML/HTML数据提取)、正则表达式提取器(文本匹配提取)、跨线程组变量共享;三、性能测试方法:1)高并发测试(同步定时器模拟多用户)2)高频率测试(常数吞吐量定时器控制QPS)3)分布式测试(控制机与执行机协作)。文中详细说明了各功能的实现步骤和配置要点,包括线程组设置、定时器配置、分布式环境搭建等关键技术环节。
2025-08-17 10:45:42
1198
原创 JMeter(入门篇)
JMeter是一款开源的Java测试工具,主要用于负载测试和功能验证。它支持多协议且跨平台,但需要配合Selenium测试Web UI。安装需Java环境,启动后通过线程组设计测试计划,支持并发/顺序执行。提供参数化、数据库直连和断言功能,其中参数化包括变量、CSV文件和函数;断言可验证响应内容、大小和时长。JMeter通过线程组管理测试流程,结合HTTP请求和监听器完成测试分析。
2025-08-17 10:31:42
840
原创 全面解析Spring事务的失效以及如何避免
本文系统梳理了 Spring 中 @Transactional 注解可能失效的常见场景,包括方法访问级别不当、类内自调用、异常处理不当、事务传播行为配置错误、数据源与事务管理器配置问题等。同时结合典型代码示例,深入剖析了 Spring 事务的底层实现机制,尤其是基于 AOP 代理的执行流程,阐明了为何某些场景下事务不会生效或不会回滚。通过这些分析,帮助开发者在使用 Spring 声明式事务时规避常见陷阱,确保事务管理的正确性与业务逻辑的一致性。
2025-07-20 13:32:52
1109
原创 在Spring中使用分布式锁时,为什么加了锁却仍然会在高并发下出现数据不一致的问题?
在Spring框架中,当分布式锁(基于Redisson实现)与事务注解同时作用于同一方法时,由于切面执行顺序问题(默认事务切面先于锁切面执行),会导致高并发场景下数据不一致。本文通过示例展示该问题,分析Spring切面排序机制(通过AspectJAwareAdvisorAutoProxyCreator的sortAdvisors方法),并提出两种解决方案:1)将锁移至Controller层;2)通过@Order(-10)调整锁切面优先级。特别指出直接在事务方法内部加锁的错误做法。
2025-07-16 13:29:08
791
原创 如何解决缓存击穿
缓存击穿是微服务架构中Redis缓存常见问题,指高并发下热点数据失效时大量请求直接冲击数据库。主要原因包括缓存过期或首次查询未命中。解决方案有:1)设置热点数据永不过期;2)使用分布式锁确保单线程回源;3)双重检测优化减少锁竞争;4)非阻塞锁机制(tryLock)提升并发处理能力。各种方案需权衡安全性与性能,根据业务场景选择合适方案。最终推荐采用带双重检查和有限等待时间的分布式锁方案,在保证数据一致性的同时提高系统吞吐量。
2025-07-13 11:08:42
610
原创 布隆过滤器+缓存穿透
布隆过滤器是一种高效的概率型数据结构,通过位数组和多个哈希函数实现快速元素存在性判断。其核心优势在于空间效率高(O(k)时间复杂度)和适合大规模数据处理,但存在误判可能且不支持删除操作。典型应用包括缓存穿透防护、爬虫去重等场景。实现方式上,既可通过Guava本地实现,也可基于Redis(如Redisson)构建分布式方案。通过合理配置预期数据量和误判率,可以有效平衡内存占用与查询准确性。在解决缓存穿透问题时,相比缓存空对象和分布式锁方案,布隆过滤器能更高效地拦截无效请求,保护后端数据库。
2025-07-08 16:31:24
902
原创 分库分表
随着数据量激增,传统关系型数据库面临性能瓶颈。本文探讨了分库分表作为主流解决方案,对比了分布式数据库的优缺点。详细介绍了垂直拆分(按业务模块)和水平拆分(按数据量)的具体策略,并推荐使用ShardingSphere中间件实现。重点分析了分片键选择的重要性,提出"基因法"解决多条件查询难题,通过二进制位替换确保关联数据分布一致。该方案有效避免了全路由查询,提升了系统性能和扩展性。(149字)
2025-07-05 14:16:05
888
原创 一篇文章掌握Docker
Docker是一种开源的容器技术,通过打包应用及其依赖环境实现跨平台部署。文章介绍了Docker的核心概念(镜像、容器、仓库)、架构(客户端-服务器模式)及安装配置方法(包括镜像加速设置)。重点讲解了常用命令(如docker run、docker ps)、数据卷管理、镜像构建(Dockerfile编写)和网络配置。最后演示了Java/前端项目部署流程,并引入Docker Compose工具简化多容器管理。全文系统性地呈现了Docker从基础到应用的全套技术栈。
2025-07-03 21:35:53
924
原创 轻松搞定ThreadLocal
在多线程编程中,变量共享常常会引发线程安全问题。传统的做法是通过加锁机制来控制并发访问,但这往往会带来性能瓶颈与复杂的同步逻辑。为此,Java提供了 ThreadLocal 类,作为一种轻量级的线程隔离机制。它通过为每个线程提供独立的变量副本,巧妙地绕过了同步的复杂性,成为在高并发场景中提升程序健壮性与性能的重要工具。本文将详细介绍ThreadLocal,让大家轻松搞定ThreadLocal。
2025-06-22 14:13:25
1090
原创 Git——分布式版本控制工具
本文介绍了版本控制系统的基本概念和应用场景,重点对比了集中式(SVN)和分布式(Git)版本控制的区别。详细讲解了Git的环境配置、基本操作指令(如add、commit、push等)、分支管理以及远程仓库操作。同时提供了解决Git使用中常见问题的方法,如配置别名、乱码处理、冲突解决等。文章还介绍了Git工作流程和开发中的分支使用原则,并说明了如何通过码云等平台创建和管理远程仓库。最后,对合并冲突的处理进行了具体说明。
2025-06-20 20:44:53
1328
原创 【面试题003】HashMap四连问
本文详细剖析了HashMap的关键实现机制:1) 扩容机制在元素数量达到负载因子(默认0.75)与容量的乘积时触发,0.75是空间利用率和哈希冲突的平衡点;2) 采用链式寻址法解决冲突,链表长度超过8且数组大于64时转为红黑树;3) 通过右移16位的异或运算提升哈希值散列度;4) 与HashTable相比,HashMap采用更高效的散列算法,支持null键值,初始容量16,但非线程安全。这些设计保证了HashMap的高效查询和存储性能。
2025-06-20 11:32:17
501
原创 【面试题002】synchronized和lock的区别
synchronized引入了偏向锁、轻量级锁、重量级锁以及锁升级的机制去实现锁的优化。lock则用到了自旋锁的方式去实现锁的优化。以上就是我对synchronized和lock的解析,其中同时也提到了关于公平/非公平锁、偏向锁、自旋锁等核心知识,也是面试中常常会被问到的问题,同样也值得大家深入学习掌握。的经典面试题,接下来我将从三个方面来系统性的对synchronized和lock进行比对分析。synchronized和lock都是java中解决线程安全问题的一个工具。
2025-06-19 22:20:48
358
原创 MySQL(基础篇)——事务
事务是一组操作的集合,他是一个不可分割的单位,事务会把所有的操作作色一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。
2024-02-29 20:33:34
390
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2