前端质量提升利器-马可代码覆盖率平台

2022-01-10
阅读 6 分钟
9.8k
本文根据Song Jiachao老师在“2021 vivo开发者大会"现场演讲内容整理而成。公众号回复【2021VDC】获取互联网技术分会场议题相关资料。
封面图

版本不兼容Jar包冲突该如何是好?

2021-12-28
阅读 8 分钟
3k
常言道:编码五分钟,解冲突两小时。作为Java开发来说,第一眼见到ClassNotFoundException、NoSuchMethodException这些异常来说,第一反应就是排包。经过一通常规和非常规操作以后,往往会找到同一个Jar包引入了多个不同的版本,这时候一般排除掉低版本、保留高版本就可以了,这是因为一般Jar包都是向下兼容的。但是,如...

DevTools 实现原理与性能分析实战

2021-12-27
阅读 19 分钟
4k
从 2008 年 Google 释放出第一版的 Chrome 后,整个 Web 开发领域仿佛被注入了一股新鲜血液,渐渐打破了 IE 一家独大的时代。Chrome 和 Firefox 是 W3C Web 标准的坚定支持者,随着这两款开源浏览器市场份额逐渐加大,迎来了开发者的春天。这就迎来了一个新的职业分工——前端工程师 frontend-engineer,前端工程师促进了 ...
封面图

JDK ThreadPoolExecutor核心原理与实践

2021-12-21
阅读 26 分钟
3.4k
本文内容主要围绕JDK中的ThreadPoolExecutor展开,首先描述了ThreadPoolExecutor的构造流程以及内部状态管理的机理,随后用大量篇幅深入源码探究了ThreadPoolExecutor线程分配、任务处理、拒绝策略、启动停止等过程,其中对Worker内置类进行重点分析,内容不仅包含其工作原理,更对其设计思路进行了一定分析。文章内容既...

Kubernetes 集群无损升级实践

2021-12-20
阅读 10 分钟
2.6k
活跃的社区和广大的用户群,使 Kubernetes 仍然保持3个月一个版本的高频发布节奏。高频的版本发布带来了更多的新功能落地和 bug 及时修复,但是线上环境业务长期运行,任何变更出错都可能带来巨大的经济损失,升级对企业来说相对吃力,紧跟社区更是几乎不可能,因此高频发布和稳定生产之间的矛盾需要容器团队去衡量和取舍。
封面图

2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路

2021-12-17
阅读 3 分钟
2.1k
2021年12月16日,vivo 开发者大会圆满落幕。在互联网技术专场中,来自vivo 互联网技术的6位研发专家,从基础架构、效能提升两方面分享了 vivo互联网技术服务亿级用户的技术架构演进之路。
封面图

JavaMoney规范(JSR 354)与对应实现解读

2021-12-14
阅读 27 分钟
2.5k
当前JDK中用来表达货币的类为java.util.Currency,这个类仅仅能够表示按照[ISO-4217]描述的货币类型。它没有与之关联的数值,也不能描述规范外的一些货币。对于货币的计算、货币兑换、货币的格式化没有提供相关的支持,甚至连能够代表货币金额的标准类型也没有提供相关说明。JSR-354定义了一套标准的API用来解决相关的这...

vivo浏览器的快速开发平台实践-总览篇

2021-12-13
阅读 4 分钟
1.6k
快速开发平台,顾名思义就是可以使得开发更为快速的开发平台,是提高团队开发效率的生产力工具。近一两年,国内很多公司越来越注重研发效能的度量和提升,基于软件开发的特点,覆盖管理和优化、团队工程实践、个人工程实践、优化流程四大方面。本文所讲的快速开发平台可以大幅缩短需求周期,给研发效能带来了开发快、上...
封面图

字节码引用检测原理与实战

2021-12-07
阅读 10 分钟
2.2k
本章中的字节码重点研究Java 字节码,Java字节码(Java bytecode)是Java虚拟机执行的一种指令格式。可以通过javap -c -v xxx.class(Class文件路径) 命令来查看一个Class对应的字节码文件,如下图所示:

vivo 敏感词匹配系统的设计与实践

2021-12-06
阅读 6 分钟
2.4k
谛听系统是vivo的内容审核平台,保障了vivo各互联网产品持续健康的发展。谛听支持审核多种内容类型,但日常主要审核的内容是文本,下图是一个完整的文本审核流程,包括名单匹配、敏感词匹配、AI机器审核、人工审核四个环节。待审核文本需要顺次通过名单匹配、敏感词匹配、AI机器审核三个流程,若结果为嫌疑则需要人工审...

Redis线程模型的前世今生

2021-11-30
阅读 13 分钟
2k
众所周知,Redis是一个高性能的数据存储框架,在高并发的系统设计中,Redis也是一个比较关键的组件,是我们提升系统性能的一大利器。深入去理解Redis高性能的原理显得越发重要,当然Redis的高性能设计是一个系统性的工程,涉及到很多内容,本文重点关注Redis的IO模型,以及基于IO模型的线程模型。

服务API版本控制设计与实践

2021-11-29
阅读 4 分钟
2.7k
笔者曾负责vivo应用商店服务器开发,有幸见证应用商店从百万日活到几千万日活的发展历程。应用商店客户端经历了大大小小上百个版本迭代后,服务端也在架构上完成了单体到服务集群、微服务升级。
封面图

Chrome 插件特性及实战场景案例分析

2021-11-23
阅读 6 分钟
8.6k
提起Chrome扩展插件(Chrome Extension),每个人的浏览器中或多或少都安装了几个插件,像一键翻译、广告屏蔽、录屏等等,通过使用这些插件,可以有效的提高我们的工作效率;但有时候,我们想要的某个功能市面上没有现成的插件,作为开发者自然而然想到,自己是否可以动手开发一个定制化的插件?网上目前很多不错的关于Chr...

vivo统一告警平台设计与实践

2021-11-22
阅读 6 分钟
2.4k
一套监控系统检测和告警是密不可分的,检测用来发现异常,告警用来将问题信息发送给相应的人。vivo监控系统1.0时代各个监控系统分别维护一套计算、存储、检测、告警收敛逻辑,这种架构下对底层数据融合非常不利,也就无法实现监控系统更广泛场景的应用,所以需要进行整体规划,重新对整个监控系统架构进行调整,在这样的...
封面图

Android Activity Deeplink启动来源获取源码分析

2021-11-16
阅读 9 分钟
4.5k
针对不同的跳入类型,app可能会选择提供不一致的服务,这个时候就需要对外部跳入的应用进行区分。一般来讲,我们会使用反射来调用Acticity中的mReferrer字段来获取跳转来源的包名。

如何“拼”出一个页面-游戏中心模块化实践

2021-11-15
阅读 7 分钟
1.5k
vivo游戏中心是一款垂类的应用商店,为用户提供了多元化游戏的下载渠道。随着游戏中心手游品类的丰富,各品类用户的量级也不断增加,不同游戏偏好的用户核心关注点也不同,从预约、测试、首发、更新到维护,不同游戏生命周期节点的运营需要突出的重点不同。
封面图

深入剖析 RocketMQ 源码 - 消息存储模块

2021-11-09
阅读 23 分钟
2.8k
RocketMQ 是阿里巴巴开源的分布式消息中间件,它借鉴了 Kafka 实现,支持消息订阅与发布、顺序消息、事务消息、定时消息、消息回溯、死信队列等功能。RocketMQ 架构上主要分为四部分,如下图所示:

vivo 全球商城:商品系统架构设计与实践

2021-11-08
阅读 3 分钟
2k
一、前言随着用户量级的快速增长,vivo官方商城v1.0的单体架构逐渐暴露出弊端:模块愈发臃肿、开发效率低下、性能出现瓶颈、系统维护困难。从2017年开始启动的v2.0架构升级,基于业务模块进行垂直的系统物理拆分,拆分出来业务线各司其职,提供服务化的能力,共同支撑主站业务。商品模块是整个链路的核心,模块的增多严...
封面图

深入剖析Redis客户端Jedis的特性和原理

2021-11-02
阅读 23 分钟
2.4k
Redis的Java生态的客户端当中包含Jedis、Redisson、Lettuce,不同的客户端具备不同的能力是使用方式,本文主要分析Jedis客户端。

高并发场景下JVM调优实践之路

2021-11-01
阅读 9 分钟
3.7k
一、背景2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验。通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图:可以看出,在观察周期里:平均每10分钟Young GC次数66次,峰值为470次;平均每10分钟Full GC次数0.25次,峰值5次;可见Full GC非...
封面图

Android构建工具--AAPT2源码解析(一)

2021-10-26
阅读 26 分钟
5.6k
一、什么是AAPT2在Android开发过程中,我们通过Gradle命令,启动一个构建任务,最终会生成构建产物“APK”文件。常规APK的构建流程如下:(引用自Google官方文档)编译所有的资源文件,生成资源表和R文件;编译Java文件并把class文件打包为dex文件;打包资源和dex文件,生成未签名的APK文件;签名APK生成正式包。老版本的A...

你分库分表的姿势对么?——详谈水平分库分表

2021-10-25
阅读 11 分钟
2.2k
提起分库分表,对于大部分服务器开发来说,其实并不是一个新鲜的名词。随着业务的发展,我们表中的数据量会变的越来越大,字段也可能随着业务复杂度的升高而逐渐增多,我们为了解决单表的查询性能问题,一般会进行分表操作。
封面图

高效动画实现原理-Jetpack Compose 初探索

2021-10-19
阅读 8 分钟
3k
Jetpack Compose是Google推出的用于构建原生界面的新Android 工具包,它可简化并加快 Android上的界面开发。Jetpack Compose是一个声明式的UI框架,随着该框架的推出,标志着Android 开始全面拥抱声明式UI开发。Jetpack Compose存在很多优点:代码更加简洁直观、应用开发效率显著提升、Kotlin API功能直观、预览工具强大...

Redis大集群扩容性能优化实践

2021-10-18
阅读 12 分钟
3.5k
某些业务对Redis集群访问时延比较敏感,例如现网环境对模型实时读取,或者一些业务依赖读取Redis集群的同步流程,会影响业务的实时流程时延。业务侧可能无法接受。
封面图

深入剖析 Spring WebFlux

2021-10-12
阅读 13 分钟
4.3k
WebFlux 是 Spring Framework5.0 中引入的一种新的反应式Web框架。通过Reactor项目实现Reactive Streams规范,完全异步和非阻塞框架。本身不会加快程序执行速度,但在高并发情况下借助异步IO能够以少量而稳定的线程处理更高的吞吐,规避文件IO/网络IO阻塞带来的线程堆积。

设计模式如何提升 vivo 营销自动化业务扩展性 | 引擎篇01

2021-10-11
阅读 14 分钟
3k
营销业务本身极具复杂多变性,特别是伴随着数字化营销蓬勃发展的趋势,在市场的不同时期、公司发展的不同阶段、面向不同的用户群体以及持续效果波动迭代,都会产生不同的营销策略决策。
封面图

深入理解Netty---从偶现宕机看Netty流量控制

2021-09-28
阅读 6 分钟
4.9k
目前移动端的使用场景中会用到大量的消息推送,push消息可以帮助运营人员更高效地实现运营目标(比如给用户推送营销活动或者提醒APP新功能)。

vivo全球商城-营销价格监控方案的探索

2021-09-27
阅读 3 分钟
2.1k
官网商城促销优惠的类型越来越多,能影响最终用户实付价的优惠就有抢购、满减、优惠券、代金券等。实际业务操作中存在不同促销优惠由不同运营配置的情况,如果运营间内部没有对齐的情况下,就会出现正常情况下不会同时设置的优惠被用户叠加享受,出现最终实付价低于成本价的可能。
封面图

深入剖析RocketMQ源码-NameServer

2021-09-23
阅读 36 分钟
3k
通过上图可以看到,RocketMQ的核心组件主要包括4个,分别是NameServer、Broker、Producer和Consumer,下面我们先依次简单说明下这四个核心组件:

Percolator模型及其在TiKV中的实现

2021-09-22
阅读 8 分钟
3.1k
Percolator是Google在2010年发表的论文《Large-scale Incremental Processing Using Distributed Transactions and Notifications》中提出的一种分布式事务解决方案。在论文中该方案是用来解决搜索引擎的增量索引问题的。
封面图