京东零售技术

其他

localhost工具:本地代码的远程之路

在日常的开发过程中,本地代码远程调试一直是最理想的开发状态。本文通过介绍京东集团内开发的一个轻量简单的小工具”localhost”,从多角度的方案思考,到原理介绍,到最终的方案落地,在开发阶段发现问题,解决问题。一、背景【
2023年12月6日
其他

微前端框架MicroApp 1.0正式发布

一、介绍MicroApp是由京东前端团队推出的一款微前端框架,它从组件化的思维,基于类WebComponent进行微前端的渲染,旨在降低上手难度、提升工作效率。MicroApp无关技术栈,也不和业务绑定,可以用于任何前端框架。•源码地址:
2023年10月16日
其他

京东App MCube动态化实践

引言在京东App里,消费者购物的关键环节包括搜索、商品详情页、购物车、结算下单到订单等,在整个购物链路中属于价值非常高的部分,因此被称为黄金流程(以下简称黄流)。而随着业务的高速发展,为了用更快的响应速度、更少的研发人力、更好的用户体验承接业务需求,“动态化+跨端”自然而然进入我们视野。在此基础上,我们结合黄流业务对于性能和稳定性要求极高的特性,输出了一套原生动态化方案,代号“MCube”,截止到目前,已在App内多个业务模块上线。MCube
2022年5月16日
其他

电商库存系统的防超卖和高并发扣减方案

摘要如果你要开发一个电商库存系统,最担心的是什么?闭上眼睛想下,当然是高并发和防超卖了!本文给出一个统筹考虑如何高并发和防超卖数据准确性的方案。读者可以直接借鉴本设计,或在此基础上做出更切合使用场景的设计。下面用电商库存为示例,来说明如何高并发扣减库存,原理同样适用于其他需要并发写和数据一致性的场景。库存数量模型示例为了描述方便,我们使用简化的库存数量模型,真实场景中库存数据项会比我的示例多很多,但已经够说明原理。如下表,库存数量表(stockNum)包含商品标识和库存数量两个字段,库存数量代表有多少货可以卖。传统通过数据库保证不超卖库存管理的传统方案为了保证不超卖,都是使用数据库的事务来保证的:通过Sql判断剩余的库存数够用,多个并发执行update语句只有一个能执行成功;为了保证扣减不重复,会配合一个防重表来防止重复的提交,做到幂等性,防重表示例(antiRe)设计如下:比如一个下单过程的扣减过程示例如下:事务开始Insert
2022年5月11日
其他

京东APP秒级百G日志传输存储架构设计与实战

那么我们就可以来算一算了,一秒1.5G,一个小时就是5.4TB。小高峰是肯定要支撑的,也就是秒级30万是要保的,那么我们的系统就要能支撑秒级15G单模块,算上各模块,200G秒级是跑不了了。
2021年11月22日
其他

ASM在隐私合规扫描中的应用实战

前言随着政府部门对用户隐私的保护越来越严格,对移动应用来说怎样查找和避免应用中出现非法的用户隐私调用成为我们开发的一个新课题,为创造长期价值,形成以引擎驱动长期自我检查的能力,我们希望以我们的技术优势带动业务的进步。经过技术调研,我们发现使用Gradle插件+ASM的方式可以很好的解决我们的困难。ASM是AOP编程中一种比较成熟的框架,在现在的开发中得到了越来越多的应用。但在ASM的调研和学习中发现目前可找到的资料和教程或侧重原理,或侧重核心API介绍,没有一个完整的教程,从原理、API介绍到实战进行整体系统的讲解,这给学习ASM的同学造成了困扰,无形之中抬高了学习的门槛。本文将结合自己学习的经验和学习中的疑难点从入门者的角度讲解ASM入门涉及的知识点和流程,并通过具体实例讲解如何使用ASM,希望能给读者带来不错的收益。Gradle
2021年10月20日
其他

这段代码你的单测覆盖到了吗?

导读在文章开始之前,让我们先问自己几个问题:1、你是否曾经因为要修改别人的代码而苦恼?2、当别人在修改你的代码时,你是希望骂声一片还是内心点赞?3、你是否曾经盯着冗长的方法,复杂的嵌套,花费大量的时间来梳理逻辑?4、面对结构混乱,逻辑复杂的代码,你是否想过要重构,但又担心测试的成本太高?我相信大部分研发同学在编码生涯中,都遇到过类似的问题,大家都希望看到逻辑清晰,结构简单的代码,都希望代码有完善的测试用例,这样不需要花费太多的精力,就能够更有信心的完成代码修改或重构。那么,有什么简单的办法,能够帮助我们做到这些呢?大家应该都猜到了,那就是做好单元测试。单测能够帮助我们降低代码复杂度,因为只有代码逻辑更简单,更加原子化、模块化,单测写起来才会更加容易,覆盖率也更容易提升;完善的单元测试,还可以帮助我们在代码修改或重构时,快速的回归验证。既然单测能够带来这么多好处,为什么执行起来却这么困难呢?让我们先来采访一下:A同学说:单测说起来容易,做起来好难,日常开发工作那么繁重,需求都做不完,我哪里有时间写单侧?B同学说:我是很棒的程序猿,我写的代码逻辑缜密,条理清晰,我可以不写单测吗?C同学说:我以前是写单测的,后来代码越写越多,业务越来越复杂,我也就逐渐放弃维护单测了。经过采访,大家的理由基本一致:1、开发任务太繁重,没时间写单测
2021年9月30日
其他

接入成本最低微前端框架 京东零售micro-app开源了!

前言micro-app是由京东零售iPaaS前端研发团队推出的一款微前端框架,它从组件化的思维,基于类WebComponent进行微前端的渲染,它旨在降低上手难度、提升工作效率,并且无关技术栈,也不和业务绑定,可以用于任何前端框架。micro-app已经在多个京东内部项目中投入使用并顺利发布上线,随着近半年的不断优化、测试、迭代,框架已趋于稳定,目前已对外开源。源码地址:https://github.com/micro-zoe/micro-app官网地址:https://zeroing.jd.com/micro-app什么是微前端微前端的概念是由ThoughtWorks在2016年提出的,它借鉴了微服务的架构理念,核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用,每个应用都可以独立开发、独立运行、独立部署,再将这些小型应用融合为一个完整的应用,或者将原本运行已久、没有关联的几个应用融合为一个应用。微前端主要解决了两个问题:1、
2021年8月25日
其他

AOP技术在APP开发中的多场景实践

通过AOP方式对敏感数据的访问进行跟踪,短期内定位到了违规调用的业务模块并推进整改,满足应用紧急上线需求;同时此类场景缺少有效的测试环境,使用AOP插件工具可作为一项通用验证工具推进测试工作开展。
2021年7月28日
其他

京东APP中Flutter探索及优化

下面是Image的基本使用方法,image参数是Image控件中的必选参数,它也是图片数据的来源,可以是Asset、网络、文件、内存,下面将以我们常用的网络图片加载方式为例子讲解原理,基本使用如下:
2021年6月28日
其他

JAVA原生线程池源码解析及使用建议

ThreadPoolExecutor实现的顶层接口是Executor,内部只有一个方法execute(Runable),标识出执行任务这个核心方法。限制了任务类型为:Runable,即线程的接口类。
2021年6月24日
其他

京东APP鸿蒙版上架实践

通过以上配置,我们已经可以进行鸿蒙App的构建了。目前鸿蒙App分为两种构建形式,debug和release,可以通过DevEco工具自带的编译任务或者使用gradle的assembleDebug
2021年6月15日
其他

京东出品微前端框架MicroApp介绍与落地实践

,这两个元素的作⽤分别对应html中的head和body元素。⼦应⽤在原head元素中的内容和⼀些动态创建并插⼊head的link、script元素都会移动到micro-app-head
2021年6月7日
自由知乎 自由微博
其他

解读Flutter中热重载原理

本文要点:了解Flutter的热重载原理,有利于日常开发中高效排查问题。掌握如何调试断点Flutter工具链源码。前言1.1热重载是什么?熟悉JS的同学,可能会嗤之以鼻,在N年前就已经用上热重载了,但是对客户端开发人员来说,简直是福音。那先来看下Flutter官方的定义:Flutter’s
2021年4月26日
其他

京东APP收银台Kotlin化实践

Kotlin的语言特性对此都做了支持,相比于Java在组件化和响应式上Kotlin更加简洁、直观。类型差异Kotlin和Java类型上的差异,有类型声明差异和类型体系差异。类型声明差异val
2021年1月6日
其他

iOS链接原理解析与应用实践

相似段合并空间分配策略02重定位符号经过空间与地址分配之后代码段中指令用到的符号地址还没有更新,想要确定符号的地址需要用到重定位表。编译后.o文件中需要重定位的符号的相关信息会存入重定位表中。
2020年12月17日
其他

硬核万字解读——Kotlin协程原理解析

Kotlin协程中使用了状态机,编译器会将协程体编译成一个匿名内部类,每一个挂起函数的调用位置对应一个挂起点。01反编译对上述代码进行反编译,反编译的代码如下:final
2020年12月1日
其他

卡顿率降低50%!京东商城APP卡顿监控及优化实践

研发背景随着业务需求的不断迭代,京东商城APP功能日趋复杂,性能问题也越发突出。内部统计数据显示,2019年APP非业务相关用户反馈中,性能相关反馈占比达32%,解决线上性能问题已成为提升用户体验、减少用户流失的关键。“工欲善其事,必先利其器”,想要解决线上问题,首先要做到的就是准确定位问题,京东性能监控系统应运而生。本文主要介绍性能监控系统中的APP卡顿监控,围绕卡顿这个性能指标,描述APP卡顿监控系统的搭建过程,分享京东商城APP卡顿优化实战经验和成果。卡顿率&卡顿监控系统框架如何来衡量页面以及APP的卡顿程度,是做卡顿监控首先要考虑的问题。从业界以往经验来看衡量卡顿的指标有很多,如FPS、每帧耗时、卡顿时长等,它们大多是从技术角度来分析卡顿情况,但缺少一个整体的、和业务关联的衡量标准,也无法直接反应受卡顿影响的实际用户比例,所以我们提出了卡顿率的概念。用户在浏览完当前页退出或进入下个页面时,会将其浏览过程中的卡顿情况进行一次整理上报,将这次上报分为两种情况:用户浏览过程中出现了卡顿/没有出现卡顿,由此可以得到页面卡顿率的定义:页面卡顿率=该页面存在卡顿的上报数之和/页面总上报量同样,一段时间内APP整体卡顿上报情况就能反应APP的卡顿率和卡顿影响用户情况:APP严重卡顿率=存在严重卡顿的上报数之和/总上报量APP严重卡顿影响用户占比=存在严重卡顿的用户数/总用户数可以看出,卡顿率从整体来衡量APP的流畅程度,直观的表现出各个业务页面性能的优劣,也能够结合函数调用栈准确定位出影响用户最多的卡顿问题,是整套监控系统对APP卡顿最核心的度量,后续的数据采集、分析和优化也基本围绕卡顿率展开。下面是京东商城卡顿监控系统的整体框架:整个监控系统分为数据采集、采集策略、数据分析&展示三个模块。数据采集模块主要负责对卡顿相关指标进行监控并采集对应数据,核心是各指标定义以及采集方案。
2020年11月6日
其他

Swift环境及编译优化调研

中闭包占有很重的戏份,但却拥有十分轻量级语法,许多便捷的高阶函数都是以闭包的形式展开进行的。这里面也体现了一些函数式编程的思想,而且其实所有的函数都可以作为一个闭包进行调用。开发效率Swift
2020年9月28日
其他

H5暗黑模式在京东收银台中的实践

暗黑模式的优势可大幅减少耗电量(具体取决于设备的屏幕技术)。为弱视以及对强光敏感的用户提高可视性。让所有人都可以在光线较暗的环境中更轻松地使用设备。系统兼容情况macOS
2020年7月3日
其他

全新APP京东极速版 从0到1的能力搭建

冬雪初融,莺燕回归,迎着春天的气息,在互联网各大巨头争相推出简化版之时,2020年伴随着新冠疫情的发展,京东,迈着敏捷轻盈的脚步,毅然撸起袖子破圈入局。经京东零售市场营销部发起,京东零售平台业务中心主导、联合京东零售技术与数据中台、京东物流集团及京东数字科技集团的多地团队协同,精心出品满足不同市场消费者诉求的轻量级“京东极速版APP”,旨通过围绕低价、简单、好玩能赚钱的核心思路,打造浏览更顺畅、信息更直接、玩法更简单的京东APP产品,多维度为用户营造简单、流畅的美好购物体验。难点与挑战对于接到一个重要性、紧急度极高(高质量交付从0-1全功能APP)且能为用户带来极简购物体验的高价值任务,团队是兴奋的,同时也是紧张的。虽然面临的是全新
2020年5月26日
其他

通俗易懂 限流算法原理剖析

618临近,你的系统还在裸奔吗?高并发系统的三把利器:缓存、限流、降级,利用此3种技术方案即可保系统运行无忧。由于限流是系统的首道关口,所以本文以限流为主题,普及限流算法的基础知识。为什么要限流限流即限制流量,通过流量控制来保证系统接收到的请求量在正常范围内。由于任何系统的吞吐量都有上限,所以必须设置合理的限定值,以避免流量洪峰将整个系统打垮。假如一个系统可以承载的网络带宽是1G,如果流量大于1G就会导致带宽打满,影响整个服务。在现实生活中,限流场景也随处可见:例如银行的叫号系统、餐厅的排队系统,如今的疫情,政府也是全力排除隐患,保证医疗系统健康运行。限流的目的只有一个:保护系统,保证系统在可控的负载下平稳运行。触发限流的条件:1.
2020年5月25日
其他

LayoutInflater原理分析与复杂布局优化实践

将布局的加载过程放到子线程处理,google其实提供了比较成熟方案,那就是v4包下的AsyncLayoutInflater,它是将LayoutInflater.inflater过程放到子线程来做。
2020年5月22日
其他

京东 App适配 iOS 暗黑模式业务实践

这个API,我们只能修改UIWindow的属性,使UIWindow及其所有子视图展示我们设置的颜色:如果开启了暗黑,将所有window的overrideUserInterfaceStyle设置为
2020年3月17日
其他

干货!京东商城iOS App瘦身实践

导出图片,然后统计图片大小。分享模块在更换双十一大促氛围兜底图后,因为部分活动图片大于了32KB(微博分享缩略限制不能超过32KB),触发调用兜底图分享逻辑,分享兜底失败,最后定位是因为
2019年12月17日
其他

编程范式之面向对象、过程、函数式编程浅析

面向对象编程、面向过程编程、函数式编程等等,这些也许是大家经常会听到的术语,这些都是什么意思,干什么用,他们之间有什么区别和联系,这篇文章来给大家讲讲这些以及它们的编程思想,也许会给大家带来一些启示。(本篇文章的观点仅代表本人观点,如有不对还请客气地指出!)编程范式编程范式(英语:Programming
2019年10月16日
其他

RenderThread:异步渲染动画

在Android应用中每个窗口都关联一个Surface,当需要绘制UI的时候,会调用对应的Surface的lockCanvas方法获取一个Canvas,其本质就是通过SurfaceFlinger
2018年7月16日
其他

Android软件设计框架——MVC、MVP、MVVM

如果没有一个好的软件架构,随着代码量的逐渐增加和业务逻辑越来越复杂,后续再进行一个业务需求的开发你就发现编码成本越来越大,维护成本也越来越大,代码业务量变大以后程序员会面临几个问题:
2018年6月6日
其他

下一代移动端跨平台框架-Flutter大解密

的创建。事件监听Flutter中有两种方式来处理touch:一是直接传递一个处理事件的方法给Widget;或者通过GestureDetector来实现事件监听与处理。Tap(onTapDown/
2018年5月18日