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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

深入剖析 Spring WebFlux

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

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

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

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

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

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

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

深入剖析RocketMQ源码-NameServer

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

Percolator模型及其在TiKV中的实现

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

源码解读Dubbo分层设计思想

2021-09-14
阅读 21 分钟
2.1k
如图描述Dubbo实现的RPC整体分10层:service、config、proxy、registry、cluster、monitor、protocol、exchange、transport、serialize。

vivo营销自动化技术解密|开篇

2021-09-13
阅读 5 分钟
3.8k
营销自动化是指专门为营销部门或组织设计的软件平台和技术,可以更有效地在线进行多渠道营销并使重复性任务自动化。营销部门和销售人员通过制定任务和流程的操作标准,然后由IT系统进行解释、存储和执行,从而提高效率并减少人为错误。
封面图

从源码角度分析 MyBatis 工作原理

2021-09-07
阅读 23 分钟
5.3k
一、MyBatis 完整示例这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的。注:本文后面章节中的原理、源码部分也将基于这个示例来进行讲解。完整示例源码地址1.1. 数据库准备在本示例中,需要针对一张用户表进行 CRUD 操作。其数据模型如下: {代码...} 1.2. 添加 MyBatis如果使用 Maven 来构建项目,则需将下面...

Node.js 应用全链路追踪技术——[全链路信息获取]

2021-09-06
阅读 11 分钟
4.5k
Node.js 应用也不例外,这里将分成两篇文章进行介绍;第一篇介绍 Node.js 应用全链路信息获取, 第二篇介绍 Node.js 应用全链路信息存储展示。
封面图

带你走进MySQL全新高可用解决方案-MGR

2021-08-31
阅读 13 分钟
8.3k
相信很多人对MGR这个词比较陌生,其实MGR(全称 MySQL Group Replication 【MySQL 组复制】)是Oracle MySQL于2016年12月发布MySQL 5.7.17推出的一个全新高可用和高扩展的解决方案。具备以下特性:

vivo全球商城时光机 - 大型促销活动保障利器

2021-08-30
阅读 6 分钟
2.6k
官网商城在双11、双12等大促期间运营同学会精心设计许多给到用户福利的促销活动,当促销活动花样越来越多后就会涉及到很多的运营配置工作(如指定活动有效期,指定活动启停状态,指定活动参与商品等等)。
封面图

Android模块化开发实践

2021-08-24
阅读 7 分钟
6k
随着业务的快速发展,现在的互联网App越来越大,为了提高团队开发效率,模块化开发已经成为主流的开发模式。正好最近完成了vivo官网App业务模块化改造的工作,所以本文就对模块化开发模式进行一次全面的介绍,并总结模块化改造经验,帮助兄弟项目避坑。

vivo商城计价中心 - 从容应对复杂场景价格计算

2021-08-23
阅读 6 分钟
6.8k
拆分后的促销系统初期只是负责了营销活动玩法的维护,促销中最为重要的计价业务仍然遗留在商城主站业务中,且由于历史建设问题,商城核心交易链路中商详页、购物车、下单这三块关于计价逻辑是分开独立维护的,没有统一,显然随着促销优惠的增加或者玩法的变动,商城侧业务重复开发量会显著加大。
封面图

富文本及编辑器的跨平台方案

2021-08-17
阅读 6 分钟
5.3k
对于一个产品来说,用户的需求程度在一定程度上反映了其产品的价值。对于富文本编辑器而言,以 WEB 端(PC 浏览器、移动浏览器)、移动端(IOS 应用、Android 应用)、桌面端(windows、macOS)各自为战的系统生态,已经无法满足用户的需求。同时对于研发人员而言,各端都需要大量的资源投入进行重复能力的开发,这无疑...

计算机字符编码的前世今生

2021-08-16
阅读 6 分钟
3.6k
计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,8个二进制位称之为1个字节。把键盘上(如下图)所有按键的状态。
封面图

探究Presto SQL引擎(1)-巧用Antlr

2021-08-10
阅读 14 分钟
5.6k
大数据的规模大到对数据的获取、存储、管理、分析超出了传统数据库软件工具能力范围。在这个背景下,各种大数据相关工具相继出现,用于应对各种业务场景需求。从Hadoop生态的Hive, Spark, Presto, Kylin, Druid到非Hadoop生态的ClickHouse, Elasticsearch,不一而足...

vivo 全球商城:优惠券系统架构设计与实践

2021-08-09
阅读 6 分钟
4.5k
优惠券是电商常见的营销手段,具有灵活的特点,既可以作为促销活动的载体,也是重要的引流入口。优惠券系统是vivo商城营销模块中一个重要组成部分,早在15年vivo商城还是单体应用时,优惠券就是其中核心模块之一。随着商城的发展及用户量的提升,优惠券做了服务拆分,成立了独立的优惠券系统,提供通用的优惠券服务。目...

复杂多变场景下的Groovy脚本引擎实战

2021-08-03
阅读 11 分钟
7.9k
一、前言因为之前在项目中使用了Groovy对业务能力进行一些扩展,效果比较好,所以简单记录分享一下,这里你可以了解:为什么选用Groovy作为脚本引擎了解Groovy的基本原理和Java如何集成Groovy在项目中使用脚本引擎时做的安全和性能优化实际使用的一些建议二、为什么使用脚本语言2.1 脚本语言可解决的问题互联网时代随着...

分布式存储系统可靠性:系统量化估算

2021-08-02
阅读 7 分钟
4.5k
可靠性指标指的是数据的可靠性。我们常说的数据可靠性11个9,在对象存储中就意味着存储一千亿个对象大概会有1个文件是不可读的。由此可见,数据可靠性指标给分布式存储系统带来的挑战不言而喻。
封面图

手把手教你实现Android编译期注解

2021-07-27
阅读 11 分钟
5.4k
从早期令人惊艳的ButterKnife,到后来的以ARouter为首的各种路由框架,再到现在谷歌大力推行的Jetpack组件,越来越多的第三方框架都在使用编译期注解这门技术,可以说不管你是想要深入研究这些第三方框架的原理 还是要成为一个Android高级开发工程师,编译期注解都是你不得不好好掌握的一门基础技术。