- 博客(172)
- 收藏
- 关注
原创 “慢SQL“治理的几点思考
今年初团队开始推行“服务稳定性问题治理专项”。通过错误日志、慢SQL、接口性能等各项指标的优化,进一步提升系统稳定性与可靠性。在此契机之下,本文将从“慢SQL治理”的角度,通过部分实际案例,分析其原理,做一些阶段性总结和思考。
2025-03-26 20:12:15
627
原创 高并发下秒杀系统的设计
其实高并发下库存的扣减动作最后瓶颈落在了数据库单行的热更新上,技术就是对热更新做了相应的优化。当用技术的hint语句标记一个SQL后,就相当于告诉MySQL内核这可能是一行热更新记录。于是,MySQL内核层就会自动识别带此类标记的更新操作,在一定的时间间隔内,将收集到的更新操作按照主键或者唯一键进行分组,这样更新相同行的操作就会被分到同一组中。为了进一步提升性能,在实现上,使用两个执行单元。当第一个执行单元收集完毕准备提交时,第二个执行单元立即开始收集更新操作;
2025-02-20 19:35:01
1101
原创 不可思议!平均执行耗时仅1.5ms的接口在超时时间100ms下成功率竟然还不到5个9!!
本文深入分析了平均耗时仅有1.5ms的接口也会出现大量100ms+的前因后果,并在框架层面给出了弹性超时的解决方案。这也刷新了我们的认知,由于GC、CPU时间片等原因,一些看起来很简单的操作(如i++)也会出现偶发性长耗时。关于作者杜云杰,高级架构师,转转架构部负责人,转转技术委员会执行主席,腾讯云TVP。负责服务治理、MQ、云平台、APM、分布式调用链路追踪、监控系统、配置中心、分布式任务调度平台、分布式ID生成器、分布式锁等基础组件。,欢迎建设性交流。道阻且长,拥抱变化;而困而知,且勉且行。
2025-01-15 11:21:13
913
原创 聊聊Druid连接池的内部原理及推荐配置
操作rs读取数据;关闭rs、stmt、conn。try{//调用Class.forName()方法加载驱动程序//创建连接//创建Statement对象//要执行的SQL//创建数据对象System.out.println("编号"+"\t"+"姓名"+"\t"+"年龄");rs.close();但如果每次请求都要新建连接和关闭连接,操作较重,费时费力,也影响了业务请求。其实Connection对象是可以重复利用的(只要保证Connection。
2025-01-09 21:07:56
838
原创 2024转转技术年货发布啦
在2025年春节来临之际,我们精选了其中60篇,整理制作成⼀本厚达700多⻚的电⼦书,作为新年礼物赠送给⼤家。这本电⼦书,是转转技术团队智慧与汗⽔的结晶,它记录了我们在架构运维、后端、前端、测试、算法、数据等领域的探索与突破,展现了转转如何利⽤前沿技术优化⽤户体验,提升服务质量,推动⾏业发展的决⼼与实⼒。
2025-01-03 18:27:31
272
原创 深入剖析SQL死锁-两条SQL之间的死锁原因
于是编写本地测试用例,同时启动两个线程模仿修改表的任务,发现确实会死锁,并且这次的死锁现象更奇怪,仅仅A线程和B线程各执行了一条SQL就产生了死锁,并且持有锁和等待锁都是。4.内部有迷你事务,本质是对记录所在的页加一个 RW-X-LATCH 锁保证共享资源(如页、行或元数据)的访问,以避免数据竞争和不一致,从而保证对同一记录加锁不是并发的。通过上述的问题验证,发现根本无法复现问题,因为事务A一定会阻塞事务B,但是为什么又会出现死锁的问题呢?在业务实现中,若数据存在则修改,不存在则插入,通常大家会选用。
2024-12-27 10:24:12
835
原创 【述职黑话】ToB交易业务解决方案之状态机
针对状态流转过程,其实是有很多相似的地方,我们可以简单总结归纳一下。1)我们可以考虑将状态全部从业务层抽离,统一进行收口维护。2)抽象状态流转规则, 比如:已入驻 状态转变为 清退中 状态,需要原状态是已入驻,并要完成一些业务操作(记录申请信息,通知商户、BD等等)。3)我们将状态流转规则也进行统一维护(配置文件配置、代码里写死配置、数据库里配置等),这样便能清晰看到全部流转规则,简化状态管理。状态机其实很简单,不然也不会这么流行。由上面抽象总结出来的方法,其实就是状态机。
2024-12-26 20:11:33
1143
原创 小白也能看得懂!日志审计插件从入门到实战
本文介绍了一款基于AOP切面技术的日志审计插件,旨在解决系统操作审计和异常排查的问题。插件能够自动集成并支持实时分析功能。文章首先阐述了插件的背景和重要性,接着详细介绍了插件的实现,包括多个有用的Maven插件和框架,如`git-commit-id-maven-plugin`、`hibernate-validator`和`spring-boot-configuration-processor`,以提升开发效率和用户体验。
2024-12-23 10:35:27
953
原创 MySQL核心揭秘:从查询到修改,彻底理解 Undo Log、Redo Log、Binlog 与 ACID 的关系
在当今数据驱动的时代,数据库系统作为信息存储和管理的核心组件,其性能和可靠性直接影响着应用的稳定性和用户体验。MySQL,作为最流行的开源关系型数据库管理系统之一,被广泛应用于各类互联网应用中。然而,许多开发者和数据库管理员对其内部机制知之甚少,特别是在事务处理和日志管理方面。事务的ACID特性(原子性 Atomicity、一致性 Consistency、隔离性 Isolation 和持久性 Durability)是保障数据库操作可靠性和数据一致性的关键。
2024-12-17 11:08:06
858
原创 转转数仓评估体系实践
数仓评估体系起源于23年底,作为转转数据治理的评价层,是非常重要的一环。过去很长一段时间里,转转数仓团队服务于快速发展和变化的业务,为了能够高效响应业务的数据需求,一方面存在烟囱式建设的情况,指标管理也较为粗放;另一方面对于线上的表和任务往往是只做加法不做减法,带来额外的计算和存储成本。看不清数仓整体建设情况看不清成本增长和分布内外部用数效率和数据质量提升难看不清研发规范落地效果名下哪些资产有问题,有什么问题模型完备度如何,哪些业务过程建设较薄弱模型复用率如何,哪些模型没人用。
2024-12-11 16:28:47
980
原创 深入 ReentrantLock 内部:公平锁与非公平锁之奥秘
在Java的JUC包中,提供了一个强大的锁工具,在多线程编程时,我们会时常用到。而其中的公平锁与非公平锁更是有着独特的魅力和重要的作用。理解公平锁与非公平锁的区别,对于优化程序性能、确保资源的合理分配至关重要。下面,我们将深入探讨ReentrantLock的公平锁与非公平锁,带你揭开它们的神秘面纱,掌握多线程编程的关键技巧。那么接下来,让我们一起开启这场探索之旅吧!从实现来看,公平锁的实现利用了FIFO队列。
2024-12-03 10:26:39
891
原创 性能提升 2000%!揭秘 MyBatis-Plus 批量插入的终极优化技巧
在当今互联网高速发展的时代,高并发、大数据量的处理已成为各大企业应用的常态。作为 Java 开发者,我们常常面临着如何提高数据库操作效率的挑战。MyBatis-Plus 作为一款优秀的 ORM 框架,为我们提供了简洁高效的数据库操作方式。然而,当涉及到大规模数据的批量插入时,即使使用了 saveBatch 方法,性能提升仍然有限。本文将揭秘如何通过配置和预先生成 ID 等优化策略,将 MyBatis-Plus 批量插入的性能提升 2000%,助力您的应用突破性能瓶颈!
2024-11-29 10:04:56
639
原创 当我重构时,我在想些什么
书中是这么定义的:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减小整理过程中引入错误的概率。本质上说,重构就是在代码写好之后改进它的设计。– 《重构 改善既有代码的设计》我们按范围划分的话可以方便理解(本文主要讨论中小型重构类型修改范围示例小型重构对单个类内部的重构优化重命名、提取变量、提取函数等中型重构对多个类间的重构优化提取接口、超类、委托等大型重构针对系统组件架构重构优化。
2024-11-27 15:40:29
816
原创 亿级高性能通知系统实践
任何一个系统的设计,我们都应该从服务架构、系统功能、稳定性保障等方面去进行考虑。如何具备良好的扩展性与容错性,轻松应对各种复杂多变的业务场景也是我们面临的设计挑战。当然技术方案的设计从无万全之策,亦不存在一劳永逸的‘银弹’,所以需要结合具体的业务场景进行自己的思考与设计。关于作者赵培龙 采货侠JAVA开发工程师。
2024-11-27 15:39:37
602
原创 spring声明式事务源码详解
是Spring框架中用于声明式事务管理的一个注解,主要通过 AOP(面向切面编程)来实现事务管理。可以被应用于接口定义、接口方法、类定义或类的public方法上。如果方法正常执行完成且没有异常,调用方法。如果执行中出现异常,调用方法。两个方法内部都会判断是否存在事务以及是否满足回滚条件来决定最终执行提交操作还是回滚操作。上述例子1.1中,未添加事务,不受事务控制,因此修改操作生效。上述例子1.2中,因加入事务注解,指定回滚异常类型,在中逻辑判断需要回滚,调用方法执行回滚操作,因此修改操作不生效。
2024-11-27 15:38:01
1270
原创 空间换时间-将查询数据性能提升100倍的计数系统实践
这些数据不仅是简单的数字,它们可以反映出用户对内容的兴趣、商品的受欢迎程度、市场的需求变化,甚至可以用于预测未来趋势。对于企业和平台而言,计数系统能够提供一个有效的量化依据,帮助优化产品、制定营销策略、提升用户体验,因此它成为了数据统计和用户分析的核心工具。全局计数器逻辑结构为(业务类型+实体id):value值。计数流水:实时上报的计数流水,可以支持按照精确时间维度查询功能。业务类型计数实体:实体id确定计数的目标对象,比如交易单、社区发布内容等为一个计数实体。
2024-11-15 10:11:44
600
1
原创 从4秒到200毫秒-小小的日志竟能引发如此问题
那么在异步日志打印过程中,倘若需打印的日志过多,使得存储需要异步打印日志的地方满了,是否也存在相应的抛弃策略呢?比如将异步打印转为同步打印。查看代码得知,在将外部质检项映射为内部质检项的过程中会产生大量日志,且映射关系越多,日志数量越多。但依据经验,因需异步打印日志,需有地方存储需要打印的日志,故而可能涉及资源争抢。因此,决定采用暴力破解之法,即逐行注释代码的方式,以查看究竟是哪一行代码引发了日志打印缓慢的问题。在单线程的环境中,若打印大量日志,速度也极为缓慢,由此可见,并非是多线程的问题所致。
2024-11-08 15:47:56
958
原创 SpringBoot的脚本引擎初始化也会导致OOM?你意想不到的坑点
项目运行过程中,我们一定都遇到过OOM的问题,大家也一定在想,OOM的问题能够有多特殊?我来简单举例,我们在排查问题中遇到的奇葩问题:排查过程中,明明发现了占用了大量内存的实例对象,为什么在项目里面会找不到相关代码呢?百度都不灵了,竟然也找不到这个类的任何信息?SpringBoot的启动在本地和服务器中的启动竟然还有这种差别?SpringBoot的脚本引擎初始化竟然也会导致OOM?让我们带着这一系列的问题来看本次的文章。整体排查问题的过程,其实也是对我们自身知识储备以及处理问题经验的一个考量。
2024-11-08 15:36:53
635
原创 多任务学习在转转主搜精排的应用
多任务学习作为搜索精排模型的主要研究方向之一,在业界有了诸多实践。本文主要介绍了多任务学习在转转主搜精排中的应用。
2024-11-07 11:21:19
743
原创 torchserve在转转GPU推理服务架构下的实践
此外还存在线上线下处理逻辑需要分别开发的情况,造成额外的开发成本和错误排查成本,对一些需要高速迭代的业务场景的负面影响不可忽视。torchserve的custom handler机制和易用性对于开发效率的提升是显著的,在我们的内部场景里,一个单人维护的推理服务,在半年内节省了约32PD(人日)的开发成本。torchserve官方通过Helm Charts提供了一个轻量级的k8s部署方案,可以实现服务的可靠运行和高可用性,,这也是我们在框架选型中看中torchserve的一个优势。
2024-10-16 19:50:24
1237
原创 揭秘海报生成技术
如服务器性能稳定且排版复杂,推荐使用服务端生成方式;如需要复杂排版的完美呈现或者有用户交互的场景,推荐使用客户端生成;如普通的排版或者是较大并发的场景,使用前端生成即可。前端推荐使用html2canvas或modern-screenshot,两者各有小缺陷,实践中可以替换使用,会规避大部分问题;如果有操作海报元素、高度DIY海报的需求推荐使用Fabric.js。
2024-09-23 14:35:25
1325
原创 《WebRTC 探索:前端视角下的实时通信解析》(下)
在 WebRTC 多对多通信场景中,常用的架构包括 Mesh、SFU 和 MCU 三种方式。每种架构在不同应用场景中都有其优缺点,选择合适的方案需要综合考虑实际需求。
2024-09-18 11:50:43
1069
原创 《WebRTC 探索:前端视角下的实时通信解析》(中)
继《WebRTC 探索:前端视角下的实时技术解析(上)》一文之后,我们已经对 WebRTC 的基础概念和 API 有了初步的了解。在本文中,我们将进一步挖掘 WebRTC 的核心技术,探索其在前端开发中的应用潜力。随着实时通信技术的飞速发展,WebRTC 已经成为现代网络应用的关键技术之一。接下来,让我们深入探讨WebRTC 的核心技术及其实现细节。在 WebRTC 中,PeerConnection 是实现点对点(P2P)视频通话的核心 。要全面理解 PeerConnection的工作原理,首先需要掌握一些
2024-09-09 10:34:34
1393
原创 转转质检数字化埋点探索之路
转转每一台‘官方验’的设备,都会经过质检站点对其进行全方面的检测。在检测流水线中,质检工程师对每台设备进行检测作业,检测过程产生的数据如理有效利用起来,看看我们是怎么思考的
2024-09-05 15:15:01
987
原创 转转搜推排序服务的响应对象序列化优化
本项目旨在解决搜索推荐服务化过程中因日志传输引起的序列化额外耗时问题。经过三次版本迭代和测试,最终方案成功落地。结论与优化前相比,排序响应对象的序列化过程节省了约 83% 的序列化开销,网络开销减少了约 67%。搜索:有效降低了排序服务响应中的序列化过程对搜索接口整体耗时的影响,使得新的搜索排序服务在性能上达到了上线要求。推荐:在推荐排序服务化后,接入本项目方案,在多个展位实现了接口整体耗时绝对值降低 2ms 到 6ms 的性能提升。思考从问题发现到解决上线,项目历时近一个月。
2024-09-05 14:21:36
1096
原创 RocketMQ消息回溯实践与解析
已经消费完成的消息如何重复消费?消费进度过慢如何快速消费最新消息?本文将从源码层面揭晓这个秘密,赶紧打开文章一探究竟吧
2024-09-03 20:23:31
1127
原创 《WebRTC 探索:前端视角下的实时通信解析》(上)
WebRTCWeb 实时通信)是一个可以用在视频聊天、音频聊天或 P2P 文件分享等 Web 应用中的API。——摘自:MDN - WebRTCWebRTC 是网页即时通信(Web Real-Time Communication)的缩写;它提供了支持网页浏览器进行实时语音和视频对话的 API;允许浏览器之间直接建立连接,实现点对点的通信。
2024-09-02 17:38:17
1602
原创 解读第三方授权登录:OAuth2.0协议标准的应用与流程
OAuth是Open Authorization(开放授权)的缩写,它是一项业界标准的授权协议,主要用于授权第三方应用访问其他应用的资源,同时避免用户将自身的凭据(用户名和密码)直接提供给第三方应用。OAuth2.0是OAuth协议的延续版本,相比于OAuth1.0采用了更简单和更安全的授权流程,同时引入了一些新的安全特性。如果向前兼容OAuth1.0,难以确保整个授权体系的安全性,所以OAuth2.0不向前兼容OAuth1.0。
2024-09-02 10:50:03
2752
原创 JDK21(21.0.2_13)分代ZGC在转转商列服务中的实践
分代ZGC是ZGC的一个实现版本,依据假说:应用中大部分对象都是短生命周期的,被设计为分代。它是一个可伸缩的低延迟垃圾收集器,最高支持TB级堆内存,能并发执行繁重任务,且不会让应用的暂停时间超过1ms。通过本文带你走近分代ZGC。
2024-08-23 15:06:52
1240
原创 跨部门项目测试负责人全流程把控,我是这样做的!
基于跨部门项目的特点:跨多个部门、时间跨度大、涉及角色多,在项目的各个环节,各角色,都有可能遇到坑,每一个小细节处理不好,都可能影响项目的顺利推进,为项目的质量埋下隐患。正式需求评审前,要求拿到完整需求文档,一个跨部门的项目大概率需求量很大,如果不进行提前了解,仅凭PM现场的讲解,可能会跟不上,无法提出疑问和建议。对于大项目普遍周期很长,从设计测试方案到真正上线之前,可能会有别的新的业务功能上线,合并代码后,需要check当前的业务逻辑能否兼容新功能,没有预留开发和测试工作量。
2024-08-22 20:07:39
635
原创 【AI神助攻】用“v0“,自然语言秒变网站!
目前而言,我认为v0虽然还无法完全取代人类的创造力和复杂逻辑的处理能力,但它在开发过程中已经展现出了对开发人员的实质性帮助。它通过自然语言快速地生成页面代码,提高了工作效率,让开发人员能够专注于处理逻辑问题。同时,我们也能从v0的设计理念和生态中感受到它的雄心壮志——旨在成为一个更为高效的开发工具。随着技术不断进步,我们有理由相信,v0的潜力将得到进一步挖掘和实现。未来某一天,它或许真的能够在某些领域实现对人类工作的替代。
2024-08-19 10:50:21
3757
原创 从自动化到智能化:物联网技术在转转智能质检中心的应用
在转转智能质检中心通过引入物联网技术,实现了自动化设备的智能化管理。本文将重点介绍物联网技术选型和落地方案。
2024-08-15 11:10:30
912
原创 一文读懂JavaScript原型链
每个对象(Object)都有一个私有属性指向另一个名为原型(prototype)的对象。原型对象也有一个自己的原型,层层向上直到一个对象的原型为null。根据定义,null没有原型,并作为这个原型链(prototype chain)中的最后一个环节。 摘自:MDN - 继承与原型链对象通过隐式原型(__proto__)属性指向其构造函数的原型对象(prototype),进而通过原型对象(prototype)的隐式原型(__proto__)属性指向更高层级的原型对象(prototype),最终指向。
2024-08-13 10:44:27
998
原创 Grafana动态视图在转转推送系统中的应用
动态视图是Grafana的一个插件,该插件可以动态填充数据、自定义数据与图表的交互。只要你的业务功能可以用流程图绘制,都可以通过本文的方式构建出一张动态视图,以可视化方式展现逻辑,帮助你快速定位正向、异常节点,减少排查问题过程中的人力投入。
2024-08-07 16:15:43
1199
1
原创 那些你不知道的JavaScript隐式类型转换
JavaScript是一种动态类型、弱类型语言,它在处理字符和字符串时表现出了独特的灵活性和复杂性。
2024-08-05 11:15:51
826
原创 点线面的智慧:转转JTS技术如何塑造上门履约地理布局
JTS,全称 Java Topology Suite,是一个用于创建和操作向量几何的 Java 库。提供了对几何模型的抽象,以及各种空间操作和空间关系判断,非常强大。Java Topology Suite (JTS) 作为一个功能强大的空间数据处理库,为开发者提供了丰富的工具来处理复杂的空间问题。它在许多地理信息系统得到了广泛的应用。这里只是对其的一个简单应用,后续还待更深入的挖掘。
2024-08-01 11:37:39
867
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人