- 博客(324)
- 收藏
- 关注
原创 程序员,你使用过灰度发布吗?
简单来说,灰度发布也叫做渐进式发布或金丝雀发布,它是一种逐步将新版本应用到生产环境中的策略。相比于一次性全量发布,灰度发布可以让我们在小范围内先行测试新功能,监控其表现,再决定是否全面推开。降低风险:新版本如果存在 bug,只影响少部分用户,减少了对整体用户体验的冲击。快速回滚:在小范围内发现问题,可以更快地回到旧版本。收集反馈:可以在真实环境中收集用户反馈,优化新功能。本文,我们详细地分析了灰度发布,它是一种强大而灵活的部署策略,能有效降低新版本上线带来的风险,提高系统的稳定性和用户体验。
2025-04-02 16:55:26
263
原创 Docker部署MySQL、Redis、Kafka、ES、Kibana
提供了一种更为高效、灵活的方式来管理和部署复杂的多容器应用,特别适合开发、测试以及小规模生产环境中的快速部署需求。即可同时启动这两个服务,并且它们之间能够自动发现对方(如果在同一网络下)。Docker Compose 相较于单独使用。命令有很多优势,特别是在管理多容器应用时。也是此项目的部署方式。
2025-04-02 16:54:52
245
原创 搞懂常见Go ORM系列-Ent框架详解
Ent 是一个用于 Go 语言的 ORM(对象关系映射)框架它的最大特点是通过代码生成的方式,提供类型安全的数据库访问能力在使用 Ent 时,首先需要定义 schema,然后通过工具生成数据库访问代码,这样不仅提高了开发效率,还能避免常见的运行时错误Ent 支持多种关系型数据库,包括 MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server,并且对数据库结构和关系的支持非常全面在使用 Ent 时,开发者需要先定义 schema,这是 Ent 中模型的基础。
2025-04-02 16:53:10
691
原创 2025java八股文背题,程序员换工作必备
AQS全称abstractQueueSynchronizer,即抽象队列同步器,是一种锁机制,它是作为一个基础框架使用的,像Reentrantlock,countdownlatch都是基于AQS实现的AQS内部维护了一个先进先出的双向队列,队列中存储了排队的线程AQS还维护了一个state,表示锁的状态,0为无锁状态,1为有锁状态,如果一个线程将state修改为1,就相当于当前线程获得了资源对state的修改使用cas操作,保证多线程下的原子性。
2025-04-02 15:47:10
1299
原创 golang中的组合多态
因为之前写的CPP和Java都是会有转型的概念,可以理解为父类指针指向子类对象(将子类对象赋给父类对象),golang没有,这么写就会报错,毕竟是为了解耦合,取消继承是大趋势,Rust好像也是组合优先,这很正常,符合软件开发原则组合优于继承.Java的接口是用implements来实现的,Golang是只管定义,实现了方法就算实现接口了.也就是你可能莫名其妙地就实现了一个接口.这就导致用golang开发的时候,智能提示去找相关的接口实现会给你飙到一些风马牛不相及的地方.从内存的角度,假设长度为。
2025-04-01 19:59:16
550
原创 为什么CPU缓存偏偏是三级?少一级不够,多一级浪费?
双核处理器共享L2导致冲突,就像两个邻居总在驿站撞见。:四级相当于在分拣中心里再建迷你仓库,管理成本暴增。:两级就像只有楼下快递柜和分拣中心,缺了驿站环节。如果觉得有用,欢迎关注"草捏子",一起成长!,就像引入分拣中心(存200个包裹),容量更大。:三级结构比两级总体延迟降低42%:《CS:GO》帧率提升25%,但。
2025-04-01 19:57:56
725
原创 全网最详细的Java面试八股文【堪称2025最强】
Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。大家在考研和找工作中纠结的时候,不妨先看一下面试题,毕竟最终目标就是为了找一份心仪的工作!好工作都是早下手为强的,所以同学们要早做准备!
2025-04-01 16:28:59
713
原创 分析面试复盘问题:TCP两次握手为什么不行?三次挥手为什么不行?详解三次握手与四次挥手
两次握手为什么不行?无法防止旧连接干扰,也无法保证双向确认的可靠性。三次握手的核心?确保双方通信能力,初始化序列号,防止无效连接。四次挥手的必要性?保证数据完整性和双向关闭的可靠性。三次挥手可行吗?在特定条件下可行,但四次挥手是更通用的标准。在面试复盘中,建议不仅记住流程,还要理解每一步的“为什么”,结合实际场景(如网络延迟、数据丢失)分析问题。遇到变种问题时,灵活运用原理,展示逻辑思维能力,这样才能在面试中脱颖而出!
2025-03-27 19:57:10
821
原创 RocketMQ队列和消费者是如何计算对应关系的?
国内银行理财产品收益数据的准确采集对于投资者做出明智的投资决策至关重要。代理 IP 作为一种有效的工具,可以帮助投资者突破传统数据采集方式的困境,实现精准数据获取、突破地域限制和保障数据安全。投资者在利用代理 IP 进行数据采集时,要遵守法律法规,合理设置和定期更新代理 IP。通过充分发挥代理 IP 的优势,投资者能够更好地了解市场上银行理财产品的收益情况,从而实现资产的合理增值。
2025-03-27 19:56:39
713
原创 RocketMQ队列和消费者是如何计算对应关系的?
在 RocketMQ 中,消息队列(Queue)与消费者(Consumer)之间的对应关系由。在广播模式下,每个消费者都会消费主题下的所有队列,不涉及队列分配。假设某主题有 6 个队列(Q0-Q5),消费者组。RocketMQ 中队列与消费者的对应关系通过。(Load Balancing) 决定。适合需要消息被多个消费者同时处理的场景。以下是具体的计算方式及原理整理。:将队列按轮询方式分配给消费者。Broker 根据消费者的。分配队列与消费者的关系。对消费者进行字典序排序。RocketMQ 在。
2025-03-27 19:56:08
828
原创 Java八股文300问
针对两个特定的锁,开发者可以尝试按照锁对象的hashCode值大小的顺序,分别获得两个锁,这样锁总是会以特定的顺序获得锁,那么死锁也不会发生。问题变得更加复杂一些,如果此时有多个线程,都在竞争不同的锁,简单按照锁对象的hashCode进行排序(单纯按照hashCode顺序排序会出现“环路等待”),可能就无法满足要求了,这个时候开发者可以使用银行家算法,所有的锁都按照特定的顺序获取,同样可以防止死锁的发生,该算法在这里就不再赘述了,有兴趣的可以自行了解一下。一般来说,Java 应用的类都是由它来完成加载的。
2025-03-27 16:11:17
822
原创 如何安全备份 Elasticsearch 数据?两种方案任你选
elasticsearch-dump 是一个开源的命令行工具,用于将 Elasticsearch 索引数据导出为 JSON 文件,或将 JSON 文件导入 Elasticsearch 中。以下提供两种方案:使用 Elasticsearch 自带的 SNAPSHOT 快照机制,或者利用 elasticsearch-dump 工具完成。有时候需要对 Elasticsearch 集群进行备份,或者恢复到其他集群。将索引数据备份到其他文件存储,恢复时先恢复快照,再恢复索引。
2025-03-20 15:23:39
235
原创 Elasticsearch 批量操作冲突?试试这 2 种优化技巧
当给定的 version=2,大于当前版本 version=1,执行更新或索引操作成功。的执行更快,导致批量更新或者批量删除的版本比写入的版本要低,造成版本冲突报错。将 version 的控制权交由客户端管理。以下提供两种方式避免版本冲突:一是使用。这两个参数,然后传入更新指令。在更新索引之前先查询。
2025-03-20 15:22:20
194
原创 手把手教你搭建轻量级电商风控平台-业务篇
风控平台的定位是业务系统的“保镖”,为各个业务线保驾护航,让各个业务线可以更加专注在自己的业务中。调用方同步调用风控审核接口,决策引擎会执行调用方提前配置好的风控策略并同步给出风控建议,调用方可以根据风控平台给出的审核建议,对此次请求做出相应的处理(通过、拦截、验证等)。整理分析日常的风控审核数据,从数据中挖掘出有价值的点,协助策略分析师优化风控策略,从而提升风控策略的准确率。风控策略执行层,通过调用方传入的参数映射到相应的风控策略,按照事前编排好的顺序执行,并输出最终的检测结果。
2025-03-20 15:21:49
916
原创 最全java面试题及答案(208道)
synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了 synchronized 锁的升级。
2025-03-20 14:50:02
2401
原创 Spring Boot 中使用 Function 和异步线程池处理列表拆分任务并汇总结果
本文介绍的方案通过Function线程安全:使用独立线程池和确保异步任务的安全执行。代码解耦:将列表拆分、异步执行和业务逻辑分离,提高代码的可维护性。结果清晰:通过封装结果,便于后续汇总和处理。此方案适用于需要处理大规模数据并需要异步执行的场景,可根据实际需求调整线程池参数和业务逻辑,具有良好的灵活性和扩展性。
2025-03-18 15:38:26
298
原创 mybatis底层为什么设计二层缓存?
MyBatis 的二级缓存通过跨会话共享数据,解决了高频重复查询的数据库压力问题,提升了系统性能。但其设计需要权衡数据一致性和缓存效率,在适合的业务场景(如读多写少)中合理配置,才能发挥最大价值。对于高一致性要求的场景,可能需要结合其他方案(如分布式缓存中间件或手动控制缓存刷新)。
2025-03-18 15:37:56
433
原创 Java8默认方法の终极奥义
默认方法让接口能带实现,奥利给!多重继承撞车时,必须程序员自己当交警记住语法:接口名.super.方法名()这波操作让Java也能玩mixin,真香警告!(拍大腿)散会!有问题的楼下喊,键盘侠随时待命!🚀。
2025-03-18 15:37:11
249
原创 面试必备之ThreadLocal
ThreadLocal是Java中的一个类,它允许你创建一个变量,这个变量在每个线程中都有自己独立的副本。换句话说,ThreadLocal为每个线程提供了一个独立的存储空间,线程可以在这个空间里存放自己的数据,而不会与其他线程的数据发生冲突。举个简单的例子:csharp代码解读复制代码");// 输出: Hello, ThreadLocal!在这个例子中,threadLocal变量在每个线程中都有自己的副本。
2025-03-16 15:33:13
1025
原创 告别“我觉得”!用 JMH 搞懂你的 Java 代码性能
JMH 是一个非常强大的 Java 性能测试框架。掌握 JMH,可以让你对自己的代码性能更有信心,避免“我觉得”式的盲目优化。
2025-03-16 15:32:14
268
原创 二叉堆的介绍以及代码解析上浮和下浮原理
二叉堆(Binary Heap)是一种特殊的完全二叉树数据结构,用于高效地实现优先队列。(Min Heap)和(Max Heap)。在最小堆中,每个父节点的值都不大于其子节点的值;而在最大堆中,每个父节点的值都不小于其子节点的值。二叉堆的关键特性是它提供了对堆中元素的快速访问、插入和删除操作,所有这些操作的时间复杂度都是 O(log n),其中 n 是堆中的元素数量。
2025-03-16 15:29:49
394
原创 程序员挑战最难回答的10个Java面试题(附答案)
这是有名的 Java 面试问题,招2~4年经验的到高级 Java 开发人员面试都可能碰到。这个问题的好在它能反映了面试者对等待通知机制的了解, 以及他对此主题的理解是否明确。就像为什么 Java 中不支持多继承或者为什么 String 在 Java 中是 final 的问题一样,这个问题也可能有多个答案。为什么在 Object 类中定义 wait 和 notify 方法,每个人都能说出一些理由。
2025-03-16 14:50:54
681
原创 Jenkins
Jenkins 是一个开源的自动化服务器,用于持续集成和持续交付(CI/CD)。Jenkins 的运行机制基于 Jenkins Master 和 Jenkins Agent,Master 负责协调构建任务,Agent 执行构建任务。Jenkins 的原理基于触发机制、插件体系、分布式构建和流水线(Pipeline)。是基本构建单元,定义了构建、测试和部署的过程。是高级构建单元,使用 Groovy 脚本定义复杂的构建、测试和部署流程。
2025-03-14 15:07:45
241
原创 鸿蒙(OpenHarmony)性能优化实战-Trace
性能打点跟踪开发指导(ArkTS)性能打点跟踪开发指导(Native)添加自定义Trace后,可在SmartPerf-Host调试工具上查看,自定义Trace将以独立泳道的形式呈现在对应打点的进程下。下图两条泳道使用了startTrace和finishTrace方法,表示程序运行过程中,指定标签从调用startTrace到调用finishTrace的耗时统计。图中记录了CUSTOM_TRACE_TAG_1和CUSTOM_TRACE_TAG_2两个标签,先后呈现了2个标签的耗时统计。
2025-03-14 15:05:41
873
原创 @Autowired 和 @Resource:从简单入手聊聊依赖注入的那些事儿/@Primary @Qualifer
Autowired是 Spring 的原生选手,按类型匹配,灵活但需要@Qualifier帮忙精准定位;@Resource是 J2EE 的通用方案,按名字优先,跨框架用着顺手。简单用都行,但想做得扎实,构造器注入加上显式指定是王道。代码少点坑,开发少点泪,这不就是咱们想要的吗?
2025-03-14 15:04:31
630
原创 持续更新的Java面试题合集(程序员必备)
直接内存不属于JVM内存,是操作系统的内存,常见于NIO操作,用于数据缓冲区,拥有较高的读写性能,且不受JVM内存回收影响BIO(同步阻塞IO)发送请求后线程一直阻塞,直到数据处理完并返回NIO(同步非阻塞IO)通过一个线程轮询大量socket,当有socket准备就绪时通知客户端,客户端调用函数接收。AIO(异步非阻塞IO)在java8中,内存被分为两份:新生代和老年代新生代内存使用复制算法,老年代内存使用标记整理算法当对象在新生代内存中经历了一定的垃圾回收后,它将被晋升到老年代。
2025-03-14 14:30:29
647
原创 线程组和线程优先级:从骨子里挖细节
线程组和线程优先级是Java多线程的“老古董”,结构上简单粗暴,但深挖下去,问题不少。线程组的树形管理和状态失真,优先级的OS依赖和反转风险,都让它们在复杂场景下吃力。不过从这些坑里爬出来,你会发现现代线程池、调度器甚至异步框架,都是在这些朴素思路上修修补补长出来的。冷门归冷门,但这俩东西还真有点“底层哲学”的味道!
2025-03-13 15:27:48
476
原创 深入分析mysql给表加字段涉及到的锁
通过合理选择Online DDL、避免长事务干扰,并借助工具降低锁冲突,可显著减少加字段操作对业务的影响。
2025-03-13 15:25:47
872
原创 Spring Boot + CRaC 启动速度提升了10倍!
在 Java 应用程序的开发与运行过程中,启动和预热时间过长一直是个令人头疼的难题。目前,业界也提出了不少解决思路,之前我和大家探讨过的 AOT 技术,能在一定程度上缓解启动慢的问题。今天,咱们要聊的 CRaC 技术,为这个问题提供了另一种全新的解决方案。
2025-03-13 15:25:16
619
原创 Python基础:列表与元组详解
列表是可变的,适用于需要频繁修改的数据集合。它提供了丰富的方法来添加、删除和操作元素。元组是不可变的,适用于固定数据的表示,特别是当你需要确保数据不被修改或作为字典键时。性能方面,元组通常比列表更快且占用内存更少,这使它们非常适合大量数据的处理。使用列表的场景:需要经常添加/删除元素,需要排序或其他原地修改操作,实现栈或队列等数据结构。使用元组的场景:函数返回值,字典键,确保数据不被意外修改,提高性能。命名元组为元组添加了字段名,提高了代码可读性,非常适合表示记录或结构。
2025-03-12 15:33:21
705
原创 Spring Boot 中整合 Feign 客户端时,配置日志的多种方式
如果你想对所有的 Feign 客户端应用相同的日志配置,可以创建一个全局的配置类。在代码中配置 Feign 日志记录器的级别,这可以更细粒度地控制日志输出。文件中设置 Feign 客户端接口的日志级别来控制日志输出。:创建一个配置类来指定 Feign 日志记录器的级别。:仅记录请求方法、URL、响应状态码和执行时间。:记录请求和响应的头信息、正文和元数据。:记录基本信息以及请求和响应的头信息。
2025-03-12 15:32:40
159
原创 OpenCV三大经典项目实战 掌握计算机视觉核心技能-|果fx
人脸检测是人脸识别的第一步。OpenCV提供了Haar级联分类器和DNN(深度神经网络)模型进行人脸检测。模块中的LBPH(局部二值模式直方图)、Eigenfaces或Fisherfaces方法进行特征提取。确保你已经安装了OpenCV和其他所需的库。测试并评估系统的准确性和鲁棒性。可以使用混淆矩阵和其他评估指标来量化识别性能。通过这些步骤和注意事项,你可以实现一个高精度的人脸识别系统。在获得人脸区域后,需要提取特征以便进行识别。可以使用OpenCV的。
2025-03-12 15:32:06
145
原创 2025年Java最新面试题总结(三年经验)
threadlocl是作为当前线程中属性ThreadLocalMap集合中的某一个Entry的key值,不同的线程之间threadlocal这个key值是一样,但是不同的线程所拥有的ThreadLocalMap是独一无二的,也就是不同的线程间同一个ThreadLocal(key)对应存储的值(value)不一样,从而到达了线程间变量隔离的目的。这种方法的优点是实现简单,提高系统的性能,缺点是可能会导致数据不一致,因为MySQL写操作的数据和Redis读操作的数据之间的同步延迟,与存在一定的延迟。
2025-03-12 15:11:24
283
原创 使用 Python 解题 - 观光景点组合得分问题
线性时间复杂度:一次遍历解决问题常数空间复杂度:无需额外存储空间普适性:适用于所有整数数组这种解法不仅高效,还展现了动态规划在算法中的巧妙应用。当遇到“需要在数组中找到最优组合”类问题时,动态规划往往是解决问题的关键钥匙。
2025-03-11 15:13:48
712
原创 最强Java面试题大全带答案
基本数据类型,如int,float,double,boolean,char,byte,不具备对象的特征,不能调用方法。装箱:将基本类型转换成包装类对象拆箱:将包装类对象转换成基本类型的值java为什么要引入自动装箱和拆箱的功能?主要是用于java集合中,List<Inteter> list=new ArrayList<Integer>();list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。
2025-03-11 14:13:14
1490
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人