设计模式之代理模式:武器附魔之道
作者:京东保险 孙昊宇大家好,今天我们聊聊设计模式中的代理模式。作为一种经典设计模式,它的应用极为广泛。不论你是刚刚入门,还是已经熟悉设计模式,相信这篇文章都会让你有所收获。一、引子:叫个代驾让我们从一个引子开始:司机和代驾。「私家车司机」和「代驾」是什么关系?很简单,「私家车司机」是客户,「代驾」负责提供服务,帮他们开车。不同点: 「私家车司机」有自己的车,他们可能自己开车,也可能找代驾开车;「
由 Mybatis 源码畅谈软件设计(五):ResultMap 的循环引用
作者:京东保险 王奕龙本节我们来了解 Mybatis 是如何处理 ResultMap 的循环引用,它的解决方案非常值得在软件设计中参考。另外作为引申,大家可以了解一下 Spring 是如何解决 Bean 的循环注入的。以单测 org.apache.ibatis.submitted.permissions.PermissionsTest#checkNestedResultMapLoop 为例,它对应
由 Mybatis 源码畅谈软件设计(七):从根上理解 Mybatis 一级缓存
作者:京东保险 王奕龙本篇我们来讲 一级缓存,重点关注它的实现原理:何时生效、生效范围和何时失效,在未来设计缓存使用时,提供一些借鉴和参考。1. 准备工作定义实体public class Department { public Department(String id) { &nbs
京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率
作者:零售供应链技术2024年10月,京东零售供应链技术团队凭借其在库存选品与调拨技术上的创新与实践,荣获运筹与管理学领域的国际奖项Daniel H. Wagner Prize。本文为您介绍获奖背后的供应链技术创新和落地应用。摘要在电商行业中,供应链管理和履约效率对于确保客户满意度至关重要。京东在这一领域一贯表现出色,得益于完善的物流基础设施,超过90%的自营订单可在24小时内完成履约,这一快速交
由 Mybatis 源码畅谈软件设计(四):动态 SQL 执行流程
作者:京东保险 王奕龙本节我们探究动态 SQL 的执行流程,由于在前一节我们已经对各个组件进行了详细介绍,所以本节不再赘述相关内容,在本节中主要强调静态 SQL 和动态 SQL 执行的不同之处。在这个过程中,SqlNode 相关实现值得关注,它为动态 SQL 标签都定义了专用实现类,遵循单一职责的原则,并且应用了 装饰器模式。最后,我们还会讨论动态 SQL 避免注入的解决方案,它是在 Mybati
纯配时效服务-双Redis集群设计
作者:京东物流 王运成一、概述纯配时效服务作为物流下单环节中计算时效的重要组成部分,直接决定了下单的成功与否。其性能与稳定性至关重要,因为它们直接影响整个物流下单系统的运行效率及客户满意度。一个高效且稳定的纯配时效服务能够确保预计送达时间准确无误地展示给用户,从而提升客户体验和信任度。反之,若纯配时效服务出现故障或延迟,可能会导致订单处理延误,甚至影响客户的业务运营。因此,在设计和维护纯配时效服务
浅谈API错误码设计
作者:京东物流 冯志文一、痛点你是否曾遇到过以下问题?1.API错误码形同虚设,无法提供有效帮助?2.API错误码文档晦涩难懂,别说其他团队,连团队内同事都看不明白?3.API错误码定义混乱,缺乏一致性?4.链路上的错误码信息无法正确传递?二、什么是错误码根据亚马逊官方文档的定义,错误码是通过对错误进行抽象,帮助用户或开发者识别和理解异常性质的代号。错误码与具体错误不是一对一的关系,
工作中对InheritableThreadLocal使用的思考
作者:京东保险 王奕龙代码评审时,发现在线程池中使用InheritableThreadLocal上下文会使其中的线程变量失效,无法获取到预期的变量值,所以对问题进行了复盘和总结。1. 先说结论InheritableThreadLocal 只有在父线程创建子线程时,在子线程中才能获取到父线程中的线程变量;当配合线程池使用时: “第一次在线程池中开启线程,能在子线程中获取到父线程的线程变量,而当该子线
探讨篇(三):代码复用的智慧 - 提升架构的效率与可维护性
作者:京东物流 冯志文前两篇从服务粒度和服务内的分层架构角度探讨,本文继续从服务间代码复用角度探讨。背景在分布式架构中,代码复用是个难题。那么如何处理代码功能共享的问题呢?本文结合日常实践中的案例,介绍几种分布式架构中管理代码复用性的技术。包括代码复制、共享代码库(jar包)、共享服务、边车服务。对于每一种技术,列出优缺点、适合场景权衡。本文的观点源自我在学习与实践过程中的深思熟虑,尚处于不断探索
浅谈SQL优化小技巧
作者:京东零售 王军回顾:MySQL的执行过程 回顾 MySQL的执行过程,帮助 介绍 如何进行sql优化。(1)客户端发送一条查询语句到服务器;(2)服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据;(3)未命中缓存后,MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树,MySQL解析器将使用MySQL语法进行验证和解析。例如,验证是否使用了错误的关键字,或
Flink State 状态原理解析
作者:京东物流 吴云涛一、Flink State 概念State 用于记录 Flink 应用在运行过程中,算子的中间计算结果或者元数据信息。运行中的 Flink 应用如果需要上次计算结果进行处理的,则需要使用状态存储中间计算结果。如 Join、窗口聚合场景。Flink 应用运行中会保存状态信息到 State 对象实例中,State 对象实例通过 StateBackend 实现将相关数据存储到
Kafka核心逻辑介绍
作者:京东零售 张继1,概念Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统(kafka2.8.0版本之后接触了对zk的依赖,使用自己的kRaft做集群管理,新增内部主体@metadata存储元数据信息),它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop
【行云流水线】满足你对工作流编排的一切幻想~skr
作者:京东零售 顾铮流水线模型众所周知,DevOps流水线(DevOps pipeline)的本质是实现自动化工作流程,用于支持软件开发、测试和部署的连续集成、交付和部署(CI/CD)实践。它是DevOps方法论的核心组成部分,旨在加速软件交付、提高质量和实现持续改进。流水线的核心是流水线模型,是实现工作流编排,执行的重要基石,一个优秀的流水线模型可以覆盖用户更多的实践场景,按照用户的所思所想
cursor无敌了
作者:京东物流 董振阳0、Cursor IDECursor是一款基于人工智能的代码编辑器,创建了一个集成开发环境(IDE)。旨在帮助开发人员编写代码,并于AI进行实时互动,提供写代码建议、错误检测和自动补全功能。支持多种编程语言(如Python、JavaScript、Java等)1、快速开始1、官网下载cursor:https://www.cursor.com/2、打开对话框(⌘+
记录一次「OSS上传文件的前置处理机制」实例剖析
作者:京东物流 陈雨引言在云计算环境中,对象存储服务(OSS)是一种提供存储和访问任意类型数据(如网站内容、企业备份数据、游戏、IoT 设备数据等)的服务,支持从任何地点、任何时间访问数据。在很多应用场景中,用户需要上传文件到 OSS,这可能包括图片、视频、文档等多种格式的文件。为了提高效率、保障安全和优化用户体验,实现文件上传的前置处理机制变得尤为重要。前置处理机制文件压缩是一个重要
由 Mybatis 源码畅谈软件设计(一):序
作者:京东保险 王奕龙从接触软件开发以来,一直对写出优雅的代码抱有执念,工作半年时,偶然接触到《代码整洁之道》,爱不释手,一口气读完,并在很长的时间内践行其中的观点,但是在这践行期间缺少思考和复盘,更多的是一味地信奉和遵守其中的原则,写了不少当时自认为不错而现在回过头看可读性不好的“坏代码”。后来在员工培训时,导师介绍 《Head First 设计模式》 是影响他最大的一本书。我花了个把月读完
由 Mybatis 源码畅谈软件设计(二):MappedStatement 和 SqlSource
作者:京东保险 王奕龙本节我们来介绍 org.apache.ibatis.mapping.MappedStatement(映射SQL语句声明的类),它是 MyBatis 框架中的一个核心类,也是向后不断学习 Mybatis 源码的基础。在这部分源码中,最值得关注的设计原则是“信息隐藏”,它是在《软件设计哲学》中提到的一个观点,简单来说就是将把外部类不需要了解的信息隐藏在类内部,遵循最小知识原则,在
京东云与中兴新支点国产操作系统完成产品兼容性互认证
在近期,京东科技信息技术有限公司与广东中兴新支点技术有限公司联合宣布,双方已完成云平台产品与国产操作系统的兼容性互认证。经过严格的联合测试,京东云公有云平台、京东云云舰-混合云平台、京东云专有云平台(简称:JDStack) 与中兴新支点服务器操作系统V6完全兼容,功能、性能和兼容性等各方面表现良好,整体系统运行稳定、安全。目前,京东云控制台已上架新支点服务器操作系统镜像(镜像类型为NewStart
Promise规范与原理解析
作者:京东物流 孙琦摘要Promise对象用于清晰的处理异步任务的完成,返回最终的结果值,本次分享主要介绍Promise的基本属性以及Promise内部的基础实现,能够帮我们更明确使用场景、更快速定位问题。Promise出现的原因首先我们先来看一段代码:异步请求的层层嵌套function fn1(params) { const x
Vue3设计思想及响应式源码剖析
作者:京东物流 乔盼盼一、Vue3结构分析1、Vue2与Vue3的对比•对TypeScript支持不友好(所有属性都放在了this对象上,难以推倒组件的数据类型)•大量的API挂载在Vue对象的原型上,难以实现TreeShaking。•架构层面对跨平台dom渲染开发支持不友好,vue3允许自定义渲染器,扩展能力强。•CompositionAPI。受ReactHook启发•对虚拟DOM进行了重写、对