可插拔组件设计机制—SPI

作者:京东物流 孔祥东 1.SPI 是什么? SPI 的全称是Service Provider Interface,即提供服务接口;是一种服务发现机制,SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。 如下图: 系统设计的各个抽象,往往有很多不同的实现方案,在面对象设计里,一般推荐模块之间基于接口编程,模块之间不对实现硬编码,一旦代码涉及具
分类: 移动开发 发布时间: 03-28 20:25 阅读次数: 0

谁会拒绝一款开源的 3D 博客呢?

说到博客大家一定都不陌生,不管你是深耕职场多年的老鸟,还是在学校努力的小鸟,应该都有过一段“装扮”博客的经历,比如:放上喜欢的图片、添加炫酷的交互、换上 DIY 的博客主题等等。但不管再怎么“打扮”,也跳脱不出平面的“凡胎”。 今天 HelloGitHub 给大家带来的是一款开源的 3D 博客项目,实话说我第一次访问这个博客的时候都惊呆了,颠覆了博客的认知。进去后需要通过操控一辆 3D 的小汽车,自己“找到”文章才可以阅读,特别有意思! 在线:https://bruno-simon.com/
分类: 移动开发 发布时间: 03-28 20:24 阅读次数: 0

透过现象看Java AIO的本质 | 得物技术

1.前言 关于Java BIO、NIO、AIO的区别和原理,这样的文章非常的多的,但主要还是在BIO和NIO这两者之间讨论,而关于AIO这样的文章就少之又少了,很多只是介绍了一下概念和代码示例。 在了解AIO时,有注意到以下几个现象: 1、 2011年Java 7发布,里面增加了AIO称之为异步IO的编程模型,但已经过去了近12年,平时使用的开发框架中间件,还是以NIO为主,例如网络框架Netty、Mina,Web容器Tomcat、Undertow。 2、 Java AIO又称为NIO 2.0
分类: 移动开发 发布时间: 03-28 20:24 阅读次数: 0

时序数据库的流计算支持

一、时序数据及其特点 时序数据(Time Series Data)是基于相对稳定频率持续产生的一系列指标监测数据,比如一年内的道琼斯指数、一天内不同时间点的测量气温等。时序数据有以下几个特点: 历史数据的不变性 数据的有效性 数据的时效性 结构化的数据 数据的大量性 二、时序数据库基本架构 针对时序数据的特点,时序数据库一般具有以下特性: 高速的数据入库 数据的生命周期管理 数据的流处理 高效的数据查询 定制的数据压缩 三、流计算介绍 流计算主要是指针对实时获取来自不同数据源的海量数据,经过实
分类: 移动开发 发布时间: 03-28 20:23 阅读次数: 0

vivo 短视频用户访问体验优化实践

作者:vivo 互联网运维团队- Hu Tao 本文介绍了vivo短视频用户访问体验优化的实践思路,并简单讲解了实践背后的几点原理。 一、背景 我们平时在看抖音快手视频的时候,如果滑动到某个视频画面一直几s不动的时候,大概率就会划走了,所以在短视频项目中,画面卡顿是非常影响用户体验的,启播速度越快,就越能留住用户。 启播速度简单来说就是从调用开始播放到首帧上屏的时间,大致可分为两部分: 视频文件下载耗时 视频解码耗时 本文主要从运维排查问题的角度,从网络这部分的各个环节入手,结合vivo短视频
分类: 移动开发 发布时间: 03-28 20:22 阅读次数: 0

测试的底层逻辑

作者:京东零售 张强 写这篇文章,是希望把我的一些我认为是非常有价值的经验总结出来,能够帮助刚做测试不久的新同事,或者是测试经验丰富的老同事以共享。希望我们可爱的新同事,准备要在测试领域耕耘的伙伴,能够通过我的文章了解到测试的底层逻辑,也就是我们测试工作中可能看不到隐藏较深的点,而不只是日常所见的写用例、提bug、开发自动化、做平台;俗话说外行看热闹,内行看门道。 我认为测试人员不应该成为PRD的搬运工,高级测试工程师也不应该只是测试工具得开发者; 测试人员,最基本的测试基础理论一定要掌握,当
分类: 移动开发 发布时间: 03-28 20:22 阅读次数: 0

朴素系统优化思维的实践

作者:京东物流 严孝男 一、问题 去年年中时候,我有个好朋友(可以叫他华哥)顶着当时还很严重的疫情形式激情创业,斥巨资承包了他原公司食堂的几个摊位,摇身一变成了老板。当了老板的华哥没有丝毫懈怠,不但做了充足的市场调研,还结合他自己以前就餐时的痛点做了创新,比如以前食堂除了最常规的面,饺子,米线一类的之外就是一份份的卖炒菜,差不多一份荤菜十几块,一份素菜近十块的样子,这就导致一个问题,一般男生花了几十块钱也就只能吃到2-3个菜,不但营养不够丰富,万一踩坑遇到了原本抱有很高期待但发现实际菜并不好吃
分类: 移动开发 发布时间: 03-28 20:21 阅读次数: 0

一种异步延迟队列的实现方式

作者:京东零售 张路瑶 1.应用场景 目前系统中有很多需要用到延时处理的功能:支付超时取消、排队超时、短信、微信等提醒延迟发送、token刷新、会员卡过期等等。通过延时处理,极大的节省系统的资源,不必轮询数据库处理任务。 目前大部分功能通过定时任务完成,定时任务还分使用quartz及xxljob两种类型轮询时间短,每秒执行一次,对数据库造成一定的压力,并且会有1秒的误差。轮询时间久,如30分钟一次,03:01插入一条数据,正常3:31执行过期,但是3:30执行轮询时,扫描3:00-3:30的数
分类: 移动开发 发布时间: 03-28 20:20 阅读次数: 0

详解目标检测模型的评价指标及代码实现

摘要:为了评价模型的泛化能力,即判断模型的好坏,我们需要用某个指标来衡量,有了评价指标,就可以对比不同模型的优劣,并通过这个指标来进一步调参优化模型。 本文分享自华为云社区《目标检测模型的评价指标详解及代码实现》,作者:嵌入式视觉。 前言 为了了解模型的泛化能力,即判断模型的好坏,我们需要用某个指标来衡量,有了评价指标,就可以对比不同模型的优劣,并通过这个指标来进一步调参优化模型。对于分类和回归两类监督模型,分别有各自的评判标准。 不同的问题和不同的数据集都会有不同的模型评价指标,比如分类问题
分类: 移动开发 发布时间: 03-28 20:20 阅读次数: 0

千亿参数开源大模型 BLOOM 背后的技术

假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,“一朝看尽长安花”似乎近在眼前 …… 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM 的训练或许对你有帮助。 近年来,语言模型越训越大已成为常态。大家通常会诟病这些大模型本身的信息未被公开以供研究,但很少关注大模型训练技术这种背后的知识。本文旨在以 1760 亿参数的语言模型 BLOOM 为例,阐明训练此类模型背后的软硬件工程和技术要点,以促进大家对大模型训练技术的讨论。 首先,我们要感谢促成或赞助我
分类: 移动开发 发布时间: 03-28 20:19 阅读次数: 0

测试用例设计指南

作者:京东物流 王玉坤 软件测试设计是测试过程中重要的测试活动,怎么样设计测试用例能提高我们测试的效率和质量,从以下几个方面做了简单的讲解。 1 测试用例设计原则 测试用例设计的基本原则包括:有效性、清晰性、可复用性、可维护性、完整性、兼容性、易操作性、可管理性、可评估性 有效性:测试用例步骤必须描述清晰,不能出现模棱两可的以及重复的话语,测试用例应该按照一定的顺序进行编写,这样执行的时候效率比较高。 清晰性:用例的操作步骤要描述清晰,包含清晰的输入数据以及预期输出,验证点必须明确清晰,并能突
分类: 移动开发 发布时间: 03-28 20:19 阅读次数: 0

字节跳动在限速器优化上的实践探索

限速器(rate limiter)是一个非常基础的网络包处理功能,被广泛应用于各类网元设备,在流量调度、网络安全等领域发挥着重要作用。常见的限速器的实现方式基于令牌桶(token bucket),尽管令牌桶的原理已经被人熟知,在具体实践中,我们也发现了一些挑战和共性问题。本文总结了近两年字节跳动系统与技术工程团队(简称 STE 团队)在限速器优化方面的一些探索,将一些经验和教训总结出来,以飨读者。 令牌桶限速器的基本原理 相信每个写网络包处理的工程师都写过基本的令牌桶限速器。令牌桶是一个形象的
分类: 移动开发 发布时间: 03-28 20:18 阅读次数: 0

京东金融Android瘦身探索与实践

作者:京东科技 冯建华 一、背景 随着业务不断迭代更新,App的大小也在快速增加,2019年~2022年期间一度超过了117M,期间我们也做了部分优化如图1红色部分所示,但在做优化的同时面临着新的增量代码,包体积一直持续上升。包体积直接或间接地影响着下载转化率、安装时间、磁盘空间等重要指标,所以投入精力发掘更深层次的安装包体积优化是十分必要的。根据谷歌商店的内部数据,APK体积每减少10M,平均可增加~1.5%的下载转化率,如图2所示: 图1 京东金融Android版本2019-2022体积变
分类: 移动开发 发布时间: 03-28 20:17 阅读次数: 0

安全测试之探索windows游戏扫雷

作者:京东工业 宛煜昕 扫雷游戏相信很多人都从小玩过,在那个电脑游戏并不多的时代,扫雷成为玩的热度蛮高的一款游戏之一,然而就在有一次,接触到了一次不寻常的扫雷过程,使得后来我也有了这个冲动,也来做一次。通过动态调试,逆向和C来写一个扫雷辅助工具从而提高逆向与编码技能。 动态调试(分析) 首先进行扫雷程序的动态调试(分析): 打开OD(ollydebug工具),把扫雷拖放到OD中,F9运行;ctrl+G输入要跟随的表达式,输入rand,点击【确定】,跳转到该函数调用处,F2设置断点,此次是想通过
分类: 移动开发 发布时间: 03-28 20:16 阅读次数: 0

GaussDB数据类型转换介绍

文章目录 一、数据类型转换场景 二、数据类型转换及示例 1、cast(value AS type) 2、to_date(text) 3、to_date(text,format) 4、to_char(datetime, format) 5、to_char(string) 6、CASE 表达式 三、 小结 一、数据类型转换场景 数据类型转换在实际应用中非常常见。GaussDB作为一款企业级分布式关系型数据库,在实际业务场景使用中,也会避免不了数据类型的转换。以下是一些数据类型转换的应用场景: 数
分类: 移动开发 发布时间: 03-28 20:16 阅读次数: 0

【ASPLOS 2023】图神经网络统一图算子抽象uGrapher,大幅提高计算性能

作者:周杨杰、沈雯婷 开篇 近日,阿里云机器学习平台PAI和上海交通大学冷静文老师团队合作的论文《图神经网络统一图算子抽象uGrapher》被ASPLOS 2023录取。 为了解决当前图神经网络中框架中不同的图算子在不同图数据上静态kernel的性能问题,uGrapher通过将所有图算子抽象为统一的中间表达形式,解耦图算子的计算和调度,并定义了在GPU上优化图算子的设计空间,以针动态变化的图算子和图数据自适应的生成并行执行策略,为图神经网络中的图算子提供高性能的计算支持。对比DGL [1],
分类: 移动开发 发布时间: 03-28 20:15 阅读次数: 0

管理研发团队后,我发现用「速率」做度量错得离谱……

一旦你开始了解敏捷开发和 Scrum 方法,就一定会碰到「速率 Velocity」。它表示研发团队在一个迭代周期内,能完成的所有故事点数之和;常用作度量基准,辅助长期的工作估算和迭代规划。 几年后,当我在一个优秀的软件工程师团队担任管理者,我才意识到「速率」在实际度量时存在很大的缺陷。也正因如此,我才得以找到真正正确的研发效能度量指标。 01 为什么「速率」不好用? 让我们从速率的计算公式开始: 实际速率 = 完成的总点数 / 迭代次数 预期速率 = 估算产生的总点数 / 迭代次数(估算故事点
分类: 移动开发 发布时间: 03-28 20:15 阅读次数: 0

循序渐进讲解负载均衡vivoGateway(VGW)

作者:vivo 互联网运维团队- Duan Chengping 在大规模业务场景中,已经不可能通过单机提供业务,这就衍生出了负载均衡的需求。为了满足合适可靠的负载,本文将从简单的基础需求出发,一步步推进并解释如何建立负载均衡平台。 一、怎么保证你的业务可靠 想一个问题:假设你有10台服务器对外提供相同的服务,你如何保证这10台服务器能稳定处理外部请求? 这里可能有很多种解决方案,但本质上都是处理下述两个问题: ① 客户端的请求应该分配去哪一台服务器比较好? ② 万一其中某些服务器故障了,如何隔
分类: 移动开发 发布时间: 03-28 20:14 阅读次数: 0

简述几种常用的排序算法

摘要:归并排序和快速排序是两种稍微复杂的排序算法,它们用的都是分治的思想,代码都通过递归来实现,过程非常相似。理解归并排序的重点是理解递推公式和 merge() 合并函数。 本文分享自华为云社区《深入浅出八种排序算法》,作者:嵌入式视觉 。 归并排序和快速排序是两种稍微复杂的排序算法,它们用的都是分治的思想,代码都通过递归来实现,过程非常相似。理解归并排序的重点是理解递推公式和 merge() 合并函数。 一,冒泡排序(Bubble Sort) 排序算法是程序员必须了解和熟悉的一类算法,排序算
分类: 移动开发 发布时间: 03-28 20:14 阅读次数: 0

B站容量管理:游戏赛事等大型活动资源如何快速提升10+倍?

一分钟精华速览 当成千上万的服务器都处于低利用率时,就意味着巨额的浪费,良好的容量管理可以帮助消除某些“最后时刻”的临时应急式的盲目或者超量采购。除了成本合理控制方面,容量管理还要预估对客户可能产生影响的业务发展和风险变化。 B站在降本增效大背景下,从业务视角对整体容量做了可视化管理,本文详细描述了其容量管理的背景、思路及成效。 作者介绍 哔哩哔哩资深SRE专家 张鹤 TakinTalks社区专家团成员,2020年加入B站,先后负责主站/直播/OGV/推广搜相关的SRE工作。深度参与多活、活动
分类: 移动开发 发布时间: 03-28 20:13 阅读次数: 0