2019-2021 美团技术年货 前端篇在美团外卖的实践 14 FlutterWeb 性能优化探索与实践 36 设计稿(UI 视图)自动生成代码方案的探索 56 美团外卖终端容器无关化研发框架 74 一款可以让大型 iOS 工程编译速度提升 50% 的工具 96 从预编译的角度理解 Swift 与 Objective-C 及混编机制 108 美团民宿跨端复用框架设计与实践 165 美团跨端一体化富文本管理技术实践 Probe:Android 线上 OOM 问题定位组件 560 活动 Web 页面人机识别验证的探索与实践 580 React Native 工程中 TSLint 静态检查工具的探索之路 589 ESLint 在中大型团队的应用实践 610 美团 iOS 工程 zsource 命令背后的那些事儿 627 客户端单周发版下的多分支自动化管理与实践 635 美团外卖前端容器化演进实践 643 MTFlutter 是美团外卖搭建起的公司级 Flutter 研发生态,它的架构图如下图所示: MTFlutter 架构图 如图所示,MTFlutter 已涵盖研发、调试、测试、发布、线上运维及工程管理整套闭 环,同时落地了动态化解决方案,支撑了公司多个业务发展。在大前端融合的趋势 下,美团外卖商家端持续在探索更优的多端复用方案,通过 MTFlutter 生态的建设, 目前 Flutter0 码力 | 738 页 | 50.29 MB | 1 年前3
前端开发者指南(2017)作者:科迪·林黎(Cody Lindley),由「前端大师(Frontend Masters)」倾情赞助。 这是一本可供任何人使用的指南,用于学习前端开发实践。该指南大体上勾勒出了前端工程 的轮廓,同时也讨论了前端工程的实践:2017 年,如何学习前端工程,用什么工具来实践? 笔者有意将本书打造为一份专业资料,为想要或正在实践的前端开发者们提供学习材料和开 发工具。其次,它同样可供主管、CTO、讲师和猎头们深入探索前端开发实践。 领。其价值在于为恰好够用的分类信息搜罗简 洁、聚焦且符合时宜的甄选内容,以免在特别话题下钻了牛角尖。 预期本书每年都迭代一次内容。 本书分为三部分。 第一部分:前端实践 第一部分概述了前端工程实践。 第二部分:学习前端开发 第二部分指出了学习成为一个前端开发者所需的自学资源和教学资源(译者注:教学资源包 括有讲师指导的付费课程、计划、学院和训练营)。 第三部分:前端开发工具 第 app" 这些理念可以归结为一个概念:"JAM Stack"。 展望 2017 16 第一部分. 前端实践 第一部分概述了前端工程实践。 第一部分. 前端实践 17 前端职称 以下是前端职称的描述清单。前端开发者最常用的称呼是 “前端开发者” 或 “前端工程师” 。注 意,通常在名称里包含 “前端”、“客户端”、“web UI”、“HTML”、“CSS” 和 “JavaScript”0 码力 | 164 页 | 6.43 MB | 1 年前3
Hello 算法 1.2.0 简体中文 JavaScript 版位数的整数(例如学号),那么我们就可以用效率更高的“基数排序”来做,将时间复杂度降为 ?(??) , 其中 ? 为位数。当数据体量很大时,节省出来的运行时间就能创造较大价值(成本降低、体验变好等)。 在工程领域中,大量问题是难以达到最优解的,许多问题只是被“差不多”地解决了。问题的难易程度一方 面取决于问题本身的性质,另一方面也取决于观测问题的人的知识储备。人的知识越完备、经验越多,分析 问题就会越深入,问题就能被解决得更优雅。 ”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为0 码力 | 379 页 | 18.47 MB | 10 月前3
Hello 算法 1.1.0 JavaScript版”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 非常贵,随 CPU 打包计价 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.0.0 JavaScript版”章节后再来复习。 那么,迭代和递归具有什么内在联系呢?以上述递归函数为例,求和操作在递归的“归”阶段进行。这意味 着最初被调用的函数实际上是最后完成其求和操作的,这种工作机制与栈的“先入后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 界。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 非常贵,随 CPU 打包计价 我们可以将计算机存储系统想象为图 4‑9 所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容 量越小、成本越高。这种多层级的设计并非偶然,而是计算机科学家和工程师们经过深思熟虑的结果。 ‧ 硬盘难以被内存取代。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存 的成本是硬盘的几十倍,这使得它难以在消费者市场普及。 ‧ 缓存的大容量和高速度难以兼得。随着0 码力 | 376 页 | 17.57 MB | 1 年前3
Hello 算法 1.0.0b5 JavaScript版。 1. 第一步:统计操作数量 针对代码,逐行从上到下计算即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作数量 ?(?) 中的各种系数、常数项都可以被忽略。根据此原则,可以总结出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 /* 判断是否为空 */ const is_empty = stack.length === 0; 5.1.2 栈的实现 为了深入了解栈的运行机制,我们来尝试自己实现一个栈类。 栈遵循先入后出的原则,因此我们只能在栈顶添加或删除元素。然而,数组和链表都可以在任意位置添加和 删除元素,因此栈可以被视为一种受限制的数组或链表。换句话说,我们可以“屏蔽”数组或链表的部分无 关操作,使其对外表现的逻辑符合栈的特性。 两种实现的对比结论与栈一致,在此不再赘述。 5.2.3 队列典型应用 ‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序依次处理队列中的订单。在双十一 期间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。 ‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等。 队列在这些场景中可以有效地维护处理顺序。 5.3 双向队列 在队列中0 码力 | 375 页 | 30.68 MB | 1 年前3
廖雪峰JavaScript教程是JavaScript全栈教程! 可以在线免费学习! JavaScript教程 - 5 - 本文档使用 书栈(BookStack.CN) 构建 不要再犹豫了,立刻从现在开始,零基础迈向全栈开发工程师! 原文: https://wizardforcel.gitbooks.io/liaoxuefeng/content/js/1.html 可以在线编写JavaScript代码并直接运行! JavaScript教程 研几个月,也未必搞得清楚 XML的规范。 终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热 同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式。 道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript。他设计的JSON实际上是 JavaScript的一个子集。在JSON中,一共就这么几种数据类型: new Student() 创建了很多对象,这些对象的 hello 函数实际上只需要共享同一个 函数就可以了,这样可以节省很多内存。 要让创建的对象共享一个 hello 函数,根据对象的属性查找原则,我们只要把 hello 函数移动 到 xiaoming 、 xiaohong 这些对象共同的原型上就可以了,也就是 Student.prototype : 5.1 创建对象 - 1170 码力 | 264 页 | 2.81 MB | 10 月前3
Hello 算法 1.0.0b1 JavaScript版‧ 独立于编程语言,即可用多种语言实现。 1.2.2. 数据结构定义 「数据结构 Data Structure」是在计算机中组织与存储数据的方式。为了提高数据存储和操作性能,数据结构 的设计原则有: ‧ 空间占用尽可能小,节省计算机内存。 ‧ 数据操作尽量快,包括数据访问、添加、删除、更新等。 1. 引言 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 1) 统计操作数量 对着代码,从上到下一行一行地计数即可。然而,由于上述 ? ⋅ ?(?) 中的常数项 ? 可以取任意大小,因此操作 数量 ?(?) 中的各种系数、常数项都可以被忽略。根据此原则,可以总结出以下计数偷懒技巧: 1. 跳过数量与 ? 无关的操作。因为他们都是 ?(?) 中的常数项,对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次、⋯⋯,都可以化简记为 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 「暴力枚举」和「辅助哈希表」分别对应 空间最优 和 时间最优 的两种解法。本着时间比空间更宝贵的原则,后 者是本题的最佳解法。 方法一:暴力枚举 考虑直接遍历所有所有可能性。通过开启一个两层循环,判断两个整数的和是否为 target ,若是则返回它俩 的索引(即下标)即可。 // ===0 码力 | 185 页 | 14.70 MB | 1 年前3
阮一峰 JavaScript 教程Association),希望 JavaScript 能够成为国际标准,以此抵抗 微软。ECMA 的39号技术委员会(Technical Committee 39)负 责制定和审核这个标准,成员由业内的大公司派出的工程师组成,目前 共25个人。该委员会定期开会,所有的邮件讨论和会议记录,都是公开 的。 1997年7月,ECMA 组织发布262号标准文件(ECMA-262)的第一 版,规定了浏览器脚本语言的标准,并将这种语言称为 虚拟机,可以运行 Dart 程 序,但 Dart 程序也可以被编译成 JavaScript 程序运行。 历史 - 27 - 本文档使用 书栈(BookStack.CN) 构建 2011年,微软工程师Scott Hanselman提出,JavaScript 将是互 联网的汇编语言。因为它无所不在,而且正在变得越来越快。其他语言 的程序可以被转成 JavaScript 语言,然后在浏览器中运行。 CN) 构建 而且, switch...case 不使用大括号,不利于代码形式的统一。此外, 这种结构类似于 goto 语句,容易造成程序流程的混乱,使得代码结构 混乱不堪,不符合面向对象编程的原则。 1. function doAction(action) { 2. switch (action) { 3. case 'hack': 4. return 'hack';0 码力 | 540 页 | 3.32 MB | 10 月前3
JavaScript Promise迷你书(中文版)prototype.done 的代码,我们会发现这个函数什么也没 return 。 也就是说, done 按照「Promise chain在这里将会中断,如果出现了异常,直接抛到 promise外面即可」的原则进行了处理。 如果实现和运行环境实现的比较完美的话,就可以进行 unhandled rejection 检 测, done 也不一定是必须的了。 另外像本小节中的 Promise.prototype 序处理函数的方式等 实现方式进行了介绍,也再次强调了在Promise领域我们应遵循将处理按照函数进行划 分的基本原则。 在Promise中如果还使用了Promise chain将多个处理连接起来的话,那么还可能使源代 码中的一条语句变得很长。 这时候如果我们回想一下这些编程的基本原则进行函数拆分的话,代码整体结构会变 得非常清晰。 此外,Promise的构造函数以及 then 都是高阶函数,如果将处理分割为函数的话,还能0 码力 | 112 页 | 1010.02 KB | 1 年前3
共 15 条
- 1
- 2













