Architect 201509

2020-03-01 54浏览

  • 1.
  • 2.Java永久代去哪儿了 随着Java8的到来,我们再也见不到永久代 了。它到底去了哪里? 成为一名优秀的Web前端开发者 本文记录了两位工程师为Web开发者们所提出的多条建议, 其中一位推荐了多种实用的工具与技术,而另一位则对于如 何克服浏览器开发时所面临的挑战提出了诸多建议。 Netty案例集锦之多线程篇 Netty案例集锦的案例来源于作者在实际 项目中遇到的问题总结、以及Netty社区 网友的反馈。 Kafka Consumer解析 文章将详细介绍High Level Consumer,Consumer Group,Consumer Group Rebalance和Simple Consumer,以及未来新版本中对Kafka High Level Consumer的重新设计——使用Consumer Controller解决Split Brain 和Herd等问题。 我为什么反对用Node 随着无线端的快速普及,前后端分离技术走上前 台,而Node由于它的一些特性被工程师快速接受尤 其是前端工程师,所以产生了很多Node是否会引起 新的技术变革的讨论。 架构师2015年9月刊 联系我们 本期主编 徐川 提供反馈 feedback@cn.infoq.com 流程编辑 丁晓昀 商务合作 sales@cn.infoq.com 发行人 内容合作 editors@cn.infoq.com 霍泰稳
  • 3.许式伟 七牛云存储CEO。ECUG社区发起人,是国内Go 语言实践圈子公认的Go语言专家,并著有《Go 语言编程》 卷首语 这个月七牛刚刚举办了 D-Future 大会。 这是一个以数据为主题的会议。如果要用 一个词来概括当前互联网时代的特征,那 就是两个字:数据。实际上信息一直都存 在,只是它以前存在于原子世界,有了计 算机和互联网之后,出现了一个由数据构 成的新世界:比特世界。并且这个新的世 界正在以每三年翻一倍的速度在膨胀。计 算机和互联网扩展了人的逻辑能力,让我 们有了很强的分析和预测未来的能力。在 这样的数字化洪流下,我们的商业将受到 非常巨大的影响。 首先,我们来看一看业务本身。互联网化 最基础的一个诉求就是业务上网。我们对 比一下传统的商业和新兴的商业形态,最 大的一个不同是什么?如果我们用一个 词去概括旧的商业形态,我个人想到的一 句话是“一手交钱一手交货”,这就是旧 的商业形态最基本的特色。但是互联网改 变了这一切,它让远程交易成为了可能。 互联网时代业务的特征,我也概括了一 句话:“非结构化数据是人类最自然的沟 通方式”。我们自然表达的语言文本以及 图片、音频、视频等媒介,都是非结构化 4 数据。这些数据人类容易理解,但计算机 则很难。非结构化数据忠实地传递人的意 愿。比如,我拿起电话说几段语音,告诉 对方我想要的东西。或者通过图片和视 频,表达一个商品长什么样,商品该怎么 使用的。我们可以看到,非结构化数据自 然而然会成为交互的一个中介。这些非结 构化数据是我们实际存在事物的记录,而 这也是原子世界被疯狂地映射到比特世 界一个根本原因,因为业务要上网。 第二,当业务上网之后,我们的运营会发 生质变。在旧的商业过程当中,大部分 的企业会找一些样本客户来做调查问卷。 但业务上网后,可以天然地记录每一次的 交易过程,能把所有用户的行为都记录下 来。今天我们不是取样数据,而是全量地 记录用户行为。每天我们都在产生上千万 上亿的交易记录,而如何通过这些交易记 录去改进我们的商业模式,是一个非常重 要的课题。 无论是非结构化数据或者记录用户行为 的日志,我们都面临很多机遇和挑战。我 们先看一看非结构化数据。如前所说,现 架构师2015年 9月刊 在数据世界正以每三年翻一番的速度在 膨胀,而这其中 95% 以上都是非结构化数 据,而且这个比例还在不断的提升。如此 惊人的数据量,应该如何收集,如何保存, 如何进行分析和挖掘,这又是一个很重要 的课题。非结构化数据今天主要的用途是 用来做交互,但是计算机对于语义的理解 非常原始,所以在交互的智能化程度上, 仍然有非常巨大的提升空间。我们知道有 自然语言分析、NLP 这样的一些技术,我 们还有语音识别,有视频或者图片里面对 于场景、对于动作的捕捉与识别等,但是 这些都还非常早期。这些技术如果能够往 前走一步,就会带来巨大的想象空间。用 户每一次沟通,每一次交互过程,都沉淀 了大量的信息,但限于我们的分析能力还 很原始,所以今天几乎所有的非结构化数 据都还没有二次分析。 识到这一点。另外今天日志的处理能力、 分析方法,以及产生对经营有效指导的能 力依然存在很多不足。超过半数的企业还 没有记录日志,大部分企业对数据的分析 仅仅停留在象日活用户、用户留存等基础 阶段。绝大部分企业会定期删除日志。 我们刚刚分析了非结构化数据和日志相 关的一些挑战,这些挑战绝不是七牛一家 公司所能解决的,我们希望有志于去提升 数据应用价值的企业,都能够一起共同开 拓这个数据世界。我们希望能够分析数据 的使用场景,去触及它的方方面面,去构 建一个完整的技术栈,构建一个全新的商 业形态。 平步云端,数据为先。让我们一起共同发 掘数据背后的价值,共同构建新时代的商 业文明。 我们再看记录用户行为的日志。日志是计 算机生成的,所以它天然可以很容易被计 算机去理解,这个理解是全面的,不会损 失什么信息。所以日志本身是一个更高含 金量的金矿,但是大部分的企业还没有意 架构师2015年 9月刊 5
  • 4.推荐文章 Article 因为在“使用不熟悉的技术开始一个全新的项 成为一名优秀的Web前端开发者 目”,或是对第三方 JavaScript 应用的开发 真正理解背后的过程。对于 Walton 来说,仅 进行标准化时,Yeoman 的表现“非常出色”。 仅编写出可以运行的代码算不得优秀。他见过 Murphey 也提到了 Broccoli,认为它将来或许 许多编写 CSS 与 JavaScript 的人,他们 “只 能够取代 Grunt 和 Yeoman。 求找到能够运行的代码,然后就继续下一步工 作了。”很多时候,开发者并不了解某段代码 编写高质量的代码。她的建议是,对“违反了 运行的机制。Walton 建议开发者进行深入钻研: 项目中经过良好定义的风格指南”的代码进行 重 构, 还 应 当 使 用 lint 工 具, 例 如 JSCS 或 要充分理解代码的工作原理或许会很耗时间, ESLint。 但我向你保证,从长远来说,这种方式最终将 节省你大量的时间。一旦你充分理解你所参与 使用 Git。Murphey 建议在 Git 中使用特性分支, 的系统是如何运作的,你就无需不断地进行猜 因此得以“通过交互式 rebase,在与他人分享 测与检验这些费时的工作了。 提交时对提交进行清理,并且尽可能地在较小 的单元上进行工作,以减少冲突的发生机率”。 预先了解浏览器将产生的改动。Web 开发者应 此外还应当通过 ghooks 在 push 操作与 commit 当持续了解有哪些浏览器的改动会破坏现有 操作前运行钩子操作。 的代码。以下代码在 IE10 中必然会导致整个 JavaScript 框架的方法出错: 作者 Abel Avram 译者 邵思华 在服务端生成 HTML。出于性能方面的考虑, Murphey 推荐在大型项目中尽可能在服务端生 本文记录了两位工程师为 Web 开发者们所提出 开发者更深入地了解如何使用异步调用、回调 的多条建议,其中一位推荐了多种实用的工具 以及 promise。 与技术,而另一位则对于如何克服浏览器开发 使用模块。Murphey 相信,模块毫无疑问应当 时所面临的挑战提出了诸多建议。 作为客户端 web 应用程序的构建块。她最近在 Rebecca Murphey 是来自于 Bazaarvoice 的一 使用 webpack 以实现模块化的效果,但她希望 位软件工程师。今年早些时候,她发布了一篇 让每个人都能够使用 ECMAScript 标准模块的 博客文章“前端(JS)开发者的基本素质之 那一天能够早日到来。 2015 版”,为 JavaScript 开发者在进行客户 端 web 开发时使用的工具与开发方式提出了一 测试你的代码。在 Murphey 看来,为你的代码 些建议。她在文章的总结中写道: 编写测试,并且保证代码的可测试性是至关重 要的。虽然她对于 Intern“非常中意”,但出 学习 ECMAScript 2015,推荐的参考资料有: 于习惯,她还是坚持使用 Mocha。关于这一方 《Understanding ES6》、ES6 Rocks 以 面,她也强烈推荐 Michael Feathers 的著作《修 及 BabelJS。 我 们 在 此 还 要 加 上 一 条, 即 Axel 改代码的艺术》。 Rauschmayer 的 著 作《 探 索 ES6》。 考 虑 到 在当前这个时间点上似乎还没有必要了解 实 现 流 程 自 动 化。Murphey 曾 经 尝 试 使 用 ECMAScript 2015 的 所 有 细 节,Murphey 建 议 Grunt 与 Gulp,但她最终还是选择了 Yeoman。 6 架构师2015年 9月刊 var isIE6 = !isIE7 && !isIE8 && !isIE9; 成 HTML。“预先生成这些文件,将其作为静态 文件保存,以加快处理请求的速度。随后在客 仔细阅读规范。Walton 指出,虽然阅读规范是 户端的相应事件中可通过客户端代码操作这些 一项艰辛的任务,但一旦出现浏览器对某个页 HTML 文件,并在客户端模板中修改。” 面的渲染不同的情况,这一任务就是不可避免 的了。他为此特别举例说明: 拥抱 Node。Murphey 建议 web 开发者熟练掌握 Node.js 的相关知识,至少要了解如何初始化 最近我遇到这样一个例子,与可伸缩(flex) 一个 Node 项目、如何搭建一台 Express 服务器、 元素的默认最小尺寸有关。根据规范所说,可 以及如何使用 request 模块转发请求。 伸 缩 元 素 的 min-width 与 min-height 的 初 始 值是 auto,而不是 0,这就意味着在默认情况 Philip Walton 是来自 Google 的一位软件工程 下,这些元素不可能收缩到比其中的内容尺寸 师,他最近撰写了一篇博客文章“如何成为一 还小。而在过去 8 个月中,Firefox 是唯一一 名优秀的前端工程师”。这篇文章的观点另辟 个正确地实现了这一特性的浏览器。 蹊径,他并没有向读者推荐任何工具或框架, 而是专注于如何处理这一领域中的某些挑战。 如果你遇到了这个跨浏览器的不一致性问题, 在他看来,优秀员工与真正杰出的人才的差别 并且注意到你的网站在 Chrome、IE、Opera 和 不在于他们的知识量,而在于他们的思考方式。 Safari 上 的 展 现 完 全 相 同, 只 在 Firefox 上 他是这样描述开发者的智慧的: 有所差别,那你很可能会认为是 Firefox 的问 架构师2015年 9月刊 7
  • 5.推荐文章 Article 题。实际上,我曾多次发现这一情况,在我 职业者这条职业路线,那么 Walton 建议你参 的 Flexbugs 项目中,有许多由用户报告的 bug 与开源项目,这同样可以感受到在团队中工作 其实都是由这种不一致性所导致的。而如果我 的益处。 Java永久代去哪儿了 按照用户所提议的那些临时方案来改变实现方 式,那么在两周前所发布的 Chrome 44 中又会 重复发明轮子。Walton 相信,虽然“重复发明 产生问题。由于这些临时方案选择了违背规范 轮子对于业务来说是有害的”,但它对于学习 的方式,它们在无形中起到了提倡不正确行为 很有好处。在有些情况下,他建议你自己编写 的负面作用。 代码,而不是依赖于第三方的代码,因为这一 过程将让你学到许多东西。当然这也要看情况 代码审查。Walton 表示,从阅读他人的代码中 而定。 可以学到很多知识,它可以拓宽你的思路,了 解“新的工作方法”,同时也有助于你在团队 将你的经验记录下来。Walton 的最后一条建议 中的工作。实际上,这一点确实相当必要,因 是将你所学到的东西用文字记录下来:“按我 为“作为一位工程师来说,你的时间大部分都 的经验来看,写作、演讲以及开发 demo,这些 是在一个现有的代码库中添加或修改代码”, 方法能够迫使我对知识点进行充分的挖掘,并 而不是从头开始编写全新的代码。 做到从内到外的完全理解。哪怕你写的东西完 全没人看,但写作的过程本身就已经值得你付 与更聪明的人一起工作。Walton“强烈”建议 出的努力了。” 你至少在职业生涯的初期阶段要尽量在某个团 作者 Monica Beckwith 译者 段建华 队中进行工作,向更有经验的团队成员学习, 查 看 英 文 原 文:Becoming a Great Web 并让他们审查你的代码。如果之后选择了自由 Front-end Developer 在 Java 虚拟机(以下简称 JVM)中,类包含其 制永久代的大小,32 位机器默认的永久代的大 对应的元数据,比如类的层级信息,方法数据 小为 64M,64 位的机器则为 85M。永久代的垃 和方法信息(如字节码,栈和变量大小),运 圾回收和老年代的垃圾回收是绑定的,一旦其 行时常量池,已确定的符号引用和虚方法表。 中一个区域被占满,这两个区都要进行垃圾回 收。但是有一个明显的问题,由于我们可以通 在过去(当自定义类加载器使用不普遍的时 过 ‑XX:MaxPermSize'>XX:MaxPermSize