19 Jun 2020
一、背景 对于大多数有点历史的复杂前端项目来说,应该已经经历了从刀耕火种的大型单仓库构建到多业务应用独立开发部署的过程。当用户访问页面时,由nigix等负责根据路由分发到不同的业务应用,由各个业务应用完成资源的组装后返回给浏览器。这种情况下,开发、构建已经可以各自独立进行,在这样一套健全体系下的开发者们,想必是很幸福的。 以有赞微商城后台为例,针对B端业务,我们就已经划分了数十个的应用,可独立进行开发、打包和部署。如下图所示: 但在业务日趋复杂,页面依赖资源越来越多的情况下,翻开页面加载优化的万能工具箱,用尽各种招数,都很难达到接近单页的效果。毕竟,MPA架构的前端不是生而为快,…
Read More
19 Jun 2020
Java多线程开发中,如果涉及到共享资源操作场景,那就必不可少要和Java锁打交道。 Java中的锁机制主要分为Lock和Synchronized,本文主要分析Java锁机制的使用和实现原理,按照Java锁使用、JDK中锁实现、系统层锁实现的顺序来进行分析,话不多说,let's go~ Java锁使用 在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而JavaSE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、…
Read More
19 Jun 2020
一、前言 机器学习/深度学习在有赞应用的越来越多,例如在营销、推荐、风控等场景下都起着越来越重要的作用。对于深度学习在实际业务场景的落地来说,除了数据和算法,工程和系统上的支持同样必不可少,这样的支持包括模型的快速构建与评估,稳定的线上模型服务环境等等。为此,我们开发了有赞智能平台 Sunfish ,本文详细介绍 Sunfish 的设计和实现。 二、背景 在有赞,机器学习/深度学习在各个业务场景下发挥着越来越重要的作用。这里以推荐系统为例,介绍一下深度学习的落地实践。…
Read More
17 Jun 2020
一、背景 随着 Flutter 的出现,UI 开发形式也越来越趋向相同,Flutter,SwiftUI,RN,Weex 等新兴UI框架无一意外都使用了声明式的 UI 开发模式,和支持了FlexBox的布局系统。 FlexBox 自从被 W3C 提出之后,就被前端发扬光大,所有浏览器都已经得到了支持。其方便的布局方式,通过布局来接管视图的大小和位置,使得各个视图节点得到了很好的解耦,大大地提高了…
Read More
15 Jun 2020
提到设计模式,有一个非常有意思的现象: 理论学习中,几乎所有的开发人员都认为它非常有用很重要。 工作实践中,绝大部分开发人员在项目中找不到合适的应用场景。 设计模式学了一遍又一遍,却毫无用武之地。大概设计模式最好的归宿,就是存在程序员的深深的脑海里。 难道设计模式真的没有用了吗? 关于本文 本文目的,通过对设计模式的本质进行探讨剖析,建立起更为高效的认知模式。最终可以灵活运用设计模式到日常工作中,产出稳定、高效、灵活的业务实现。 内容上分为上下两篇,上篇为理论篇,讲述了设计模式一些共识、原则的思考理解等。下篇为实践篇,通过一个完整的系统设计实例,…
Read More