大数据平台架构设计探究

2019-12-23
阅读 5 分钟
5.4k
近年来,随着IT技术与大数据、机器学习、算法方向的不断发展,越来越多的企业都意识到了数据存在的价值,将数据作为自身宝贵的资产进行管理,利用大数据和机器学习能力去挖掘、识别、利用数据资产。如果缺乏有效的数据整体架构设计或者部分能力缺失,会导致业务层难以直接利用大数据大数据,大数据和业务产生了巨大的鸿...

探究JS V8引擎下的“数组”底层实现

2019-12-17
阅读 7 分钟
2.9k
JavaScript 中的数组有很多特性:存放不同类型元素、数组长度可变等等,这与数据结构中定义的数组结构或者C++、Java等语言中的数组不太一样,那么JS数组的这些特性底层是如何实现的呢,我们打开V8引擎的源码,从中寻找到了答案。V8中对数组做了一层封装,使其有两种实现方式:快数组和慢数组,快数组底层是连续内存,通...

JavaScript 引擎 V8 执行流程概述

2019-12-16
阅读 7 分钟
3.7k
本文主要讲解的是V8的技术,是V8的入门篇,主要目的是了解V8的内部机制,希望对前端,快应用,浏览器,以及nodejs同学有些帮助。这里不涉及到如何编写优秀的前端,只是对JS内部引擎技术的讲解。

Glide生命周期原理

2019-12-10
阅读 20 分钟
2.5k
Android App中图片的展示是很基本也很重要的一个功能,在Android平台上有很多的图片加载解决方案,但是官方认可的是Glide。Android App的页面是有生命周期的,Glide比较好的一个功能就是具有生命周期管理功能,能够根据页面和APP的生命周期来管理图片的加载和停止,也开放接口供用户在内存紧张时手动进行内存管理。本文...

一文了解 Consistent Hash

2019-11-25
阅读 8 分钟
2k
在分布式环境下面,我们经常会通过一定的规则来进行数据分布的定义,本文描述的取模算法和一致性 Hash(Consistent Hash)是通过一定规则产生一个key,对这个key进行一定规则的运算,得出这个数据该去哪儿。

vivo web service:亿万级规模web服务引擎架构

2019-11-18
阅读 3 分钟
3.3k
vivo web service是开发团队围绕奇点内核打造出的基于vivo手机平台的web服务引擎,该服务引擎从浏览器产品线中经过多年迭代而出。除了提供可靠的基础Web服务,服务引擎还集成了非常强大的扩展功能。本文从架构方面对该服务引擎进行一次简单剖析,帮助读者对vivo web service有一个整体了解。

如何编写高质量的 JS 函数(4) --函数式编程[实战篇]

2019-11-11
阅读 11 分钟
3.4k
本文首发于 vivo互联网技术 微信公众号  链接:[链接] 作者:杨昆 【编写高质量函数系列】,往期精彩内容:《如何编写高质量的 JS 函数(1) -- 敲山震虎篇》介绍了函数的执行机制,此篇将会从函数的命名、注释和鲁棒性方面,阐述如何通过 JavaScript 编写高质量的函数。 《如何编写高质量的 JS 函数(2)-- 命名/注释/鲁...

浅谈Kotlin中的函数

2019-11-04
阅读 13 分钟
1.9k
Kotlin,已经被Android官方宣布 kotlin first 的存在,去翻 Android 官方文档的时候,发现提供的示例代码已经变成了 Kotlin。Kotlin的务实作风,提供了很多特性帮助开发者减少冗余代码的编写,可以提高效率,也能减少异常。

为什么 JavaScript 中 0.1+0.2 不等于 0.3 ?

2019-10-28
阅读 3 分钟
3.3k
在 js 中进行数学的运算时,会出现0.1+0.2=0.300000000000000004的结果,一开始认为是浮点数的二进制存储导致的精度问题,但这似乎不能很好的解释为什么在同样的存储方式下0.3+0.4=0.7可以得到正确的结果。本文主要通过浮点数的二进制存储及运算,和IEEE754下的舍入规则,解释为何会出现这种情况。

深入理解 web 协议(一)- http 包体传输

2019-10-21
阅读 15 分钟
2.9k
开坑这个系列的原因,主要是在大前端学习的过程中遇到了不少跟web协议有关的问题,之前对这一块的了解仅限于用charles抓个包,基本功欠缺。强迫症发作的我决定这一次彻底将web协议搞懂搞透,如果你遇到了和我一样的问题,例如

Glide缓存流程

2019-10-14
阅读 23 分钟
2.5k
Android上图片加载的解决方案有多种,但是官方认可的是Glide。Glide提供简洁易用的api,整个框架也方便扩展,比如可以替换网络请求库,同时也提供了完备的缓存机制,应用层不需要自己去管理图片的缓存与获取,框架会分成内存缓存,文件缓存和远程缓存。本文不会从简单的使用着手,会把重点放在缓存机制的分析上。

如何编写高质量的 JS 函数(3) --函数式编程[理论篇]

2019-10-07
阅读 11 分钟
8.2k
本文首发于 vivo互联网技术 微信公众号  链接:[链接] 作者:杨昆 【编写高质量函数系列】中,《如何编写高质量的 JS 函数(1) -- 敲山震虎篇》介绍了函数的执行机制,此篇将会从函数的命名、注释和鲁棒性方面,阐述如何通过 JavaScript 编写高质量的函数。 《如何编写高质量的 JS 函数(2)-- 命名/注释/鲁棒篇》从函...

Tomcat 应用中并行流带来的类加载问题

2019-09-23
阅读 5 分钟
1.7k
随着 Java8 的不断流行,越来越多的开发人员使用并行流(parallel)这一特性提升代码执行效率。但是,作者发现在 Tomcat 容器中使用并行流会出现动态加载类失败的情况,通过对比 Tomcat 多个版本的源码,结合并行流和 JVM 类加载机制的原理,成功定位到问题来源。本文对这个问题展开分析,并给出解决方案。

函数式编程杂谈

2019-09-16
阅读 6 分钟
2.2k
比起命令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断演进,逐层推导出复杂的运算。本文通过函数式编程的一些趣味用法来阐述学习函数式编程的奇妙之处。

深入理解 Java 中 SPI 机制

2019-09-09
阅读 6 分钟
2.4k
SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,本文由浅入深地介绍了Java SPI机制。

如何编写高质量的 JS 函数(2) -- 命名/注释/鲁棒篇

2019-09-02
阅读 8 分钟
5.2k
本文首发于 vivo互联网技术 微信公众号  链接:[链接] 作者:杨昆 上篇 《如何编写高质量的 JS 函数(1) -- 敲山震虎篇 》介绍了函数的执行机制,此篇将会从函数的命名、注释和鲁棒性方面,阐述如何编写高质量的 JS 函数。 (一)函数命名 一、目前前端的函数命名存在什么问题 从上图可以知道,命名和缓存是计算机科学...

如何编写高质量的 JS 函数(1) -- 敲山震虎篇

2019-08-26
阅读 9 分钟
2.9k
如何通过 JavaScript 编写高质量的函数,这是一个很难回答的问题,不同人心中对高质量有自己的看法,这里我将全面的阐述我个人对如何编写高质量函数的一些看法。看法可能不够全面,也可能会有一些错误的见解,欢迎一起讨论,就像过日子的人,小吵小闹总会不经意的出现,一颗包容的心莫过于是最好的 best practice 。

Kafka 原理和实战

2019-08-19
阅读 23 分钟
6.6k
本文首发于 vivo互联网技术 微信公众号 [链接] 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平台、移动浏览器、推荐广告和大数据、人工智能等相关开发和架构。目前在vivo智能平台中心从事 AI中台建设以及广告推荐业务。擅长各种业务形态的业务架构、平台化以及各种业务解...

基于 Lerna 管理 packages 的 Monorepo 项目最佳实践

2019-08-12
阅读 12 分钟
6.2k
对于维护过多个package的同学来说,都会遇到一个选择题,这些package是放在一个仓库里维护还是放在多个仓库里单独维护,本文通过一个示例讲述了如何基于Lerna管理多个package,并和其它工具整合,打造高效、完美的工作流,最终形成一个最佳实践

Android 组件化最佳实践 ARetrofit 原理

2019-08-06
阅读 15 分钟
5k
ARetrofit 是一款针对Android组件之间通信的路由框架,实现快速组件化开发的利器。本文主要讲述 ARetrofit 实现的原理。

Spring Session工作原理

2019-07-30
阅读 10 分钟
3k
HTTP协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例session共享问题随之而来。

Elasticsearch搜索调优权威指南 (2/3)

2019-07-04
阅读 4 分钟
2.1k
本文首发于 vivo互联网技术 微信公众号 [链接] 英文原文:[链接] 作者:Adam Vanderbush 译者:杨振涛 目录 预索引数据 映射 避免使用脚本 强制合并只读索引 Elasticsearch搜索调优权威指南,是QBOX在其博客上发布的系列文章之一,本文是该系列的第二篇,主要介绍了索引预处理、mapping建立、避免脚本的使用、索引段合并...

Elasticsearch搜索调优权威指南 (1/3)

2019-06-13
阅读 6 分钟
2k
本文首发于 vivo互联网技术 微信公众号 [链接] 英文原文:[链接] 作者:Adam Vanderbush 译者:杨振涛 目录 文档建模 全局序列号和延迟 多代关系 为文件系统缓存分配内存 Elasticsearch搜索调优权威指南,是QBOX在其博客上发布的系列文章之一,本文是该系列的第一篇,主要从文档建模、内存分配、文件系统缓存、GC和硬件...

【大数据 】SparkSQL连接查询中的谓词下推处理(二)

2019-06-04
阅读 4 分钟
1.9k
本文首发于 vivo互联网技术 微信公众号 [链接] 作者:李勇 目录: 1.左表 join 后条件下推 2.左表join中条件不下推 3.右表join中条件下推 4.右表join中条件不下推 5.总结 在《SparkSql连接查询中的谓词下推处理(一)》中,我们介绍了一些基本的概念,并对内连接查询时的一些基本下推规则进行了分析。 本篇文章要介绍的...

【大数据】SparkSql连接查询中的谓词下推处理(一)

2019-05-16
阅读 5 分钟
2k
本文首发于 vivo互联网技术 微信公众号 [链接]作者:李勇 目录: 1.SparkSql 2.连接查询和连接条件 3.谓词下推 4.内连接查询中的谓词下推规则 4.1.Join后条件通过AND连接 4.2.Join后条件通过OR连接 4.3.分区表使用OR连接过滤条件 1.SparkSql SparkSql 是架构在 Spark 计算框架之上的分布式 Sql 引擎,使用 DataFrame 和 ...

搜索和其他机器学习问题有什么不同?

2019-05-10
阅读 7 分钟
1.7k
本文首发于 vivo互联网技术 微信公众号 [链接]作者:Doug Turnbull 译者:林寿怡 目录: 一、衡量搜索的好坏 二、用机器学习生成 ranking 函数 三、单文档 机器学习排序 (point-wise learning to rank) 四、文档列表方法(LIST-WISE),文档对方法(PAIR-WISE) 五、直接用 w/ListNet 优化列表 六、使用 RankSVM 优化文...

Searching with Deep Learning 深度学习的搜索应用

2019-04-16
阅读 3 分钟
2.7k
本文首发于 vivo 互联网技术微信公众号 [链接]作者:Eike Dehling翻译:杨振涛 本文由来自 Textkernel 的软件与数据工程师 Eike Dehling 于2018年10月23日发布与其Linkedin 的 pulse 上,已获得翻译授权。英文原文链接:[链接]

The Principles of OOD 面向对象设计原则

2019-03-29
阅读 2 分钟
2.6k
本文首发于 vivo 互联网技术微信公众号 [链接]作者:Robert C. Martin 翻译:张硕 本文由来自美国业界大牛——Robert C. Martin(俗称“Bob大叔) 发布在 butunclebob.com 上,已获得翻译授权。英文原文链接:[链接] 本篇概括性的介绍了OOD的设计原则,后续还有更多文章会详细剖析、吃透面向对象业务设计的原则。

400+节点的 Elasticsearch 集群运维

2019-03-28
阅读 5 分钟
1.9k
本文首发于InfoQ [链接] 作者:Anton Hägerstrand翻译:杨振涛 目录: 数据量 版本 节点配置 索引结构 性能 Meltwater每天要处理数百万量级的帖子数据,因此需要一种能处理该量级数据的存储和检索技术。 从0.11.X 版本开始我们就已经是Elasticsearch的忠实用户了。在经历了一些波折之后,最终我们认为做出了正确的技术选...

深入理解 MySQL ——锁、事务与并发控制

2019-03-26
阅读 12 分钟
7.3k
本文首发于 vivo 互联网技术微信公众号 [链接]作者:张硕 本文对 MySQL 数据库中有关锁、事务及并发控制的知识及其原理做了系统化的介绍和总结,希望帮助读者能更加深刻地理解 MySQL 中的锁和事务,从而在业务系统开发过程中可以更好地优化与数据库的交互。