CINXE.COM

InfoQ - 促进软件开发及相关领域知识与创新的传播-极客邦

<!DOCTYPE html><html><head><meta charset="utf-8"><title>InfoQ - 促进软件开发及相关领域知识与创新的传播-极客邦</title><meta name="Keywords" content="InfoQ,InfoQ中文站,架构,云计算,AI,前端,运维,开源,Java,.net,SOA,软件开发,编程,极客邦" id="metakeywords"><meta name="description" content="InfoQ是一个实践驱动、以社区为中心的技术媒体平台,致力于促进软件开发及相关领域知识与创新的传播,提供架构,云计算,AI,前端,大数据等与软件开发相关的最新技术资讯、解读及技术会议。" id="metadesc"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"><link rel="icon" type="image/png" sizes="32x32" href="//static001.infoq.cn/static/infoq/www/img/share-default-5tgbiuhgfefgujjhg.png"><link rel="icon" type="image/png" sizes="16x16" href="//static001.infoq.cn/static/infoq/www/img/share-default-5tgbiuhgfefgujjhg.png"><link rel="apple-touch-icon" href="//static001.infoq.cn/static/infoq/www/img/share-default-5tgbiuhgfefgujjhg.png"><meta name="apple-mobile-web-app-title" content="InfoQ"><meta property="og:image" content="https://static001.geekbang.org/static/infoq/www/img/logo.3bdee6e4.png"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="format-detection" content="telephone=no"><meta name="applicable-device" content="pc,mobile"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><script src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script><script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.7.13/dingtalk.open.js"></script><script src="//static001.geekbang.org/static/js/bufferLogger.1.0.8.min.js"></script><script src="//static001.geekbang.org/static/time/js/hls.8361666e7e2690d988ff5fe775b62bbe.js"></script><script src="//g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"></script><script src="https://probe.bjmantis.net/chat/jquery-1.12.4.min.js"></script><script src="https://pg-chatn4.bjmantis.net/chat/js/dist/mantis.min.js?5539#632d6bc2779bf400016e55b2"></script><script>if (!('flex' in document.documentElement.style) && !navigator.userAgent.match(/spider|googlebot|bingbot|geekbang|yahoo! Slurp/i)) { window.location.href = 'https://static001.geekbang.org/static/common/browser_update/index.html' }</script><script>(function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();</script><link href="https://static001.geekbang.org/static/infoq/www/css/app.78d39c53.css" rel="stylesheet"></head><body><div id="app"></div><script>(function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); ga('create', 'UA-103082599-11', 'auto'); ga('send', 'pageview');</script><script>// window.dataLayer = window.dataLayer || []; // function gtag() { dataLayer.push(arguments); } // gtag('js', new Date()); // gtag('config', 'UA-103082599-11'); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?094d2af1d9a57fd9249b3fa259428445"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();</script><script>(function(win, export_obj) { win['LogAnalyticsObject'] = export_obj; if (!win[export_obj]) { function _collect() { _collect.q.push(arguments); } _collect.q = _collect.q || []; win[export_obj] = _collect; } win[export_obj].l = +new Date(); })(window, 'collectEvent');</script><script async src="https://lf3-data.volccdn.com/obj/data-static/log-sdk/collect/5.0/collect-rangers-v5.1.4.js"></script><script>// 如果是在百度小程序内部加载 jssdk var isSmart = /swan\//.test(window.navigator.userAgent) || /^webswan-/.test(window.name); if (isSmart) { var smart = document.createElement("script"); smart.src = "https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.21.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(smart, s); }</script><script src="https://static001.geekbang.org/static/infoq/www/js/chunk-vendors.5bc59d6b.js"></script><script src="https://static001.geekbang.org/static/infoq/www/js/app.892c78a5.js"></script></body></html>