您的位置:首页 > 大数据

大数据日知录:架构与算法

2014-09-25 15:03 267 查看
大数据丛书大数据日知录:架构与算法(大数据领域专家力作,专注大数据架构和算法,全面梳理大数据相关技术张俊林 著 ISBN 978-7-121-24153-62014年9月出版定价:69.00元 40416编辑推荐这是一本心血之作,历时3年,质量上乘。从架构与算法的角度,比较全面地分门别类梳理了大数据相关技术。本书内容紧跟技术前沿,讲解深入浅出,适合大数据领域所有技术人员。书中还列有作者优选的高质量文献,能为读者节省选择的时间,绝对值得一读。内容提要大数据是当前最为流行的热点概念之一,其已由技术名词衍生到对很多行业产生颠覆性影响的社会现象,作为最明确的技术发展趋势之一,基于大数据的各种新型产品必将会对每个人的日常生活产生日益重要的影响。《大数据日知录:架构与算法》从架构与算法角度全面梳理了大数据存储与处理的相关技术。大数据技术具有涉及的知识点异常众多且正处于快速演进发展过程中等特点,其技术点包括底层的硬件体系结构、相关的基础理论、大规模数据存储系统、分布式架构设计、各种不同应用场景下的差异化系统设计思路、机器学习与数据挖掘并行算法以及层出不穷的新架构、新系统等。《大数据日知录:架构与算法》对众多纷繁芜杂的相关技术文献和系统进行了择优汰劣并系统性地对相关知识分门别类地进行整理和介绍,将大数据相关技术分为大数据基础理论、大数据系统体系结构、大数据存储,以及包含批处理、流式计算、交互式数据分析、图数据库、并行机器学习的架构与算法以及增量计算等技术分支在内的大数据处理等几个大的方向。通过这种体系化的知识梳理与讲解,相信对于读者整体和系统地了解、吸收和掌握相关的优秀技术有极大的帮助与促进作用。《大数据日知录:架构与算法》的读者对象包括对NoSQL 系统及大数据处理感兴趣的所有技术人员,以及有志于投身到大数据处理方向从事架构师、算法工程师、数据科学家等相关职业的在校本科生及研究生。目录第0 章 当谈论大数据时我们在谈什么................ 10.1 大数据是什么..........................20.2 大数据之翼:技术范型转换.........................................40.3 大数据商业炼金术................................60.4 “大数据”在路上...................................................7第1 章 数据分片与路由.............................................. 91.1 抽象模型.......................................................101.2 哈希分片(HashPartition) ..............................111.2.1 RoundRobin....................................111.2.2 虚拟桶(VirtualBuckets) ..........................121.2.3 一致性哈希(ConsistentHashing) ...........................131.3 范围分片(RangePartition) ......................................18参考文献......................................19第2 章 数据复制与一致性................................................202.1 基本原则与设计理念............................212.1.1 原教旨CAP 主义..............................................212.1.2 CAP 重装上阵(CAPReloaded).............................232.1.3 ACID 原则...............................................242.1.4 BASE 原则.................................................242.1.5 CAP/ACID/BASE三者的关系...........................252.1.6 幂等性(Idempotent)........................................262.2 一致性模型分类.................................................262.2.1 强一致性............................................272.2.2 最终一致性........................................282.2.3 因果一致性.............................282.2.4 “读你所写”一致性....................................292.2.5 会话一致性....................................292.2.6 单调读一致性..............................................302.2.7 单调写一致性.....................................................302.3 副本更新策略...........................302.3.1 同时更新..........................................302.3.2 主从式更新.....................................312.3.3 任意节点更新......................................322.4 一致性协议...........................................................322.4.1 两阶段提交协议(Two-PhraseCommit,2PC)..........................332.4.2 向量时钟(VectorClock) ..............................382.4.3 RWN 协议.................................................402.4.4 Paxos 协议.............................................422.4.5 Raft 协议.............................................45参考文献................................................49第3 章 大数据常用的算法与数据结构....................................513.1 布隆过滤器(BloomFilter) ............................513.1.1 基本原理.............................................523.1.2 误判率及相关计算..........................................523.1.3 改进:计数BloomFilter....................................533.1.4 应用............................................543.2SkipList............................................553.3 LSM 树........................................583.4 Merkle 哈希树(MerkleHash Tree) .............................623.4.1 Merkle 树基本原理..................................................623.4.2 Dynamo 中的应用.........................................633.4.3 比特币中的应用..................................................633.5 Snappy 与LZSS 算法..........................................653.5.1 LZSS 算法.............................................653.5.2Snappy..........................................673.6 Cuckoo 哈希(CuckooHashing) ..................................673.6.1 基本原理...............................................683.6.2 应用:SILT 存储系统.........................................68参考文献...................................................70第4 章 集群资源管理与调度.......................................714.1 资源管理抽象模型...................................724.1.1 概念模型....................................724.1.2 通用架构...............................................734.2 调度系统设计的基本问题.....................................744.2.1 资源异质性与工作负载异质性............................744.2.2 数据局部性(DataLocality) ........................................754.2.3 抢占式调度与非抢占式调度...................................754.2.4 资源分配粒度(AllocationGranularity) .............764.2.5 饿死(Starvation)与死锁(Dead Lock)问题...........................764.2.6 资源隔离方法........................................774.3 资源管理与调度系统范型.............................774.3.1 集中式调度器(MonolithicScheduler).......................784.3.2 两级调度器(Two-LevelScheduler) .........................794.3.3 状态共享调度器(Shared-StateScheduler) ....................794.4 资源调度策略...............................................814.4.1 FIFO 调度策略..........................................814.4.2 公平调度器(FairScheduler)......................814.4.3 能力调度器(CapacityScheduler) ..........................824.4.4 延迟调度策略(DelayScheduling)............................824.4.5 主资源公平调度策略(DominantResource Fair Scheduling).............824.5 Mesos.................................844.6YARN......................................87参考文献..............................................90第5 章 分布式协调系统...................................915.1 Chubby 锁服务...............................925.1.1 系统架构........................................935.1.2 数据模型..................................945.1.3 会话与KeepAlive 机制...............................955.1.4 客户端缓存.......................................955.2 ZooKeeper................................965.2.1 体系结构...........................................965.2.2 数据模型(DataModel) .............................975.2.3 API...............................985.2.4 ZooKeeper 的典型应用场景..................................985.2.5 ZooKeeper 的实际应用.......................................103参考文献...................................104第6 章 分布式通信..............................1066.1 序列化与远程过程调用框架..................................1076.1.1 ProtocolBuffer 与Thrift .....................1086.1.2Avro...............................1096.2 消息队列.....................................1106.2.1 常见的消息队列系统......................................1106.2.2 Kafka.......................1116.3 应用层多播通信(Application-LevelMulti-Broadcast)........1146.3.1 概述...............................1146.3.2 Gossip 协议...........................115参考文献..........................118第7 章 数据通道.........................................1207.1 Log 数据收集.................................1207.1.1Chukwa........................1217.1.2Scribe......................1227.2 数据总线......................................1237.2.1Databus............................1257.2.2 Wormhole.......................1277.3 数据导入/导出...........................................128参考文献.............................129第8 章 分布式文件系统....................................1318.1 Google 文件系统(GFS) .................................1328.1.1 GFS 设计原则...........................................1328.1.2 GFS 整体架构..............................1338.1.3 GFS 主控服务器..................................1348.1.4 系统交互行为.................................1368.1.5 Colossus........................1378.2 HDFS..........................1388.2.1 HDFS 整体架构.................................1398.2.2 HA 方案..............................1408.2.3 NameNode 联盟........................1438.3 HayStack 存储系统....................................1458.3.1 HayStack 整体架构.................................1468.3.2 目录服务..................................1478.3.3 HayStack 缓存...........................................1488.3.4 HayStack 存储系统的实现...............................1488.4 文件存储布局.........................................1508.4.1 行式存储........................................1518.4.2 列式存储...........................................1518.4.3 混合式存储........................................1568.5 纠删码(ErasureCode).............................1588.5.1 Reed-Solomon 编码...............................1598.5.2 LRC 编码.....................................1648.5.3 HDFS-RAID 架构.........................166参考文献.....................................166第9 章 内存KV 数据库...................................1689.1 RAMCloud..............................1699.1.1 RAMCloud 整体架构................................1699.1.2 数据副本管理与数据恢复................................1709.2Redis....................................1729.3 MemBase...............................173参考文献................................................175第10 章 列式数据库...........................................17610.1 BigTable....................................17710.1.1 BigTable 的数据模型..........................17710.1.2 BigTable 的整体结构................................17810.1.3 BigTable 的管理数据.............................17910.1.4 主控服务器(MasterServer)......................18110.1.5 子表服务器(TabletServer) ....................18210.2 PNUTS 存储系统........................................18610.2.1 PNUTS 的整体架构..............................18610.2.2 存储单元...............................18710.2.3 子表控制器与数据路由器..................................18710.2.4 雅虎消息代理.............................18810.2.5 数据一致性.........................................18910.3MegaStore..................................................19010.3.1 实体群组切分......................19110.3.2 数据模型........................................19210.3.3 数据读/写与备份.................................19310.4 Spanner.........................................19410.4.1 SpanServer 软件栈.........................................19510.4.2 数据模型.........................................19610.4.3 TrueTime...........................................196参考文献..............................................197第11 章 大规模批处理系统...................................19911.1 MapReduce 计算模型与架构................................20011.1.1 计算模型.......................................20111.1.2 系统架构......................................20311.1.3 MapReduce 计算的特点及不足......................................20611.2 MapReduce 计算模式...........................20611.2.1 求和模式(SummarizationPattern)................20711.2.2 过滤模式(FilteringPattern) ................20811.2.3 组织数据模式(DataOrganization Pattern) .....................21011.2.4 Join 模式(JoinPattern)......................21211.3 DAG 计算模型..........................................21411.3.1 DAG 计算系统的三层结构............................21411.3.2 Dryad.......................................21511.3.3 FlumeJava 和Tez........................................217参考文献...........................................218第12 章 流式计算........................................21912.1 流式计算系统架构....................................22212.1.1 主从架构............................................22212.1.2 P2P 架构.....................................................22312.1.3 Samza 架构..........................................22412.2 DAG 拓扑结构..........................................22412.2.1 计算节点.....................................................22512.2.2 数据流..............................................22612.2.3 拓扑结构..................................22612.3 送达保证(DeliveryGuarantees)..............................22912.3.1 Storm 的送达保证机制.................................23012.3.2 MillWheel 的“恰好送达一次”机制...........................23312.4 状态持久化...........................................23412.4.1 容错的三种模式....................................23412.4.2 Storm 的状态持久化.......................................23612.4.3 MillWheel 和Samza 的状态持久化......................237参考文献............................................238第13 章 交互式数据分析...................................24013.1 Hive 系数据仓库.................................24213.1.1 Hive.....................................24213.1.2StingerInitiative ................................25013.2 Shark 系数据仓库..................................25113.2.1 Shark 架构.........................................25213.2.2 部分DAG 执行引擎(PDE) ........................25313.2.3 数据共同分片.........................................25413.3 Dremel 系数据仓库...................................25413.3.1Dremel...........................25513.3.2 PowerDrill..........................25813.3.3 Impala.................................26113.3.4Presto...............................26413.4 混合系数据仓库......................................265参考文献.................................269第14 章 图数据库:架构与算法................................27114.1 在线查询类图数据库...........................27214.1.1 三层结构.........................27214.1.2 TAO 图数据库.................................27314.2 常见图挖掘问题..........................................27714.2.1 PageRank 计算.......................................27814.2.2 单源最短路径(SingleSource Shortest Path) ..................27814.2.3 二部图最大匹配.............................27914.3 离线挖掘数据分片..............................................27914.3.1 切边法(Edge-Cut)......................................28014.3.2 切点法(Vertex-Cut)...............................28214.4 离线挖掘计算模型...................................28414.4.1 以节点为中心的编程模型..........................28414.4.2 GAS 编程模型...........................................28514.4.3 同步执行模型.....................................28614.4.4 异步执行模型...................................29014.5 离线挖掘图数据库.................................29214.5.1Pregel..........................29214.5.2Giraph...............................29914.5.3 GraphChi............................30114.5.4PowerGraph.......................307参考文献.......................................311第15 章 机器学习:范型与架构.........................................31315.1 分布式机器学习...........................................31415.1.1 机器学习简介.............................................31415.1.2 数据并行VS.模型并行.....................................31615.2 分布式机器学习范型.....................31715.2.1 三种范型...................................31815.2.2 MapReduce 迭代计算模型........................31915.2.3 BSP 计算模型...................................32115.2.4 SSP 模型............................32315.3 分布式机器学习架构...................................32415.3.1 MapReduce 系列..................................32515.3.2 Spark 及MLBase..........................................32715.3.3 参数服务器(ParameterServer).............332参考文献................................................335第16 章 机器学习:分布式算法...............................33716.1 计算广告:逻辑回归.......................................33816.1.1 逻辑回归(LogisticRegression,LR).............................33816.1.2 并行随机梯度下降(ParallelStochastic Gradient Descent)............34116.1.3 批学习并行逻辑回归..................................34116.2 推荐系统:矩阵分解................................................34416.2.1 矩阵分解方法.......................................34416.2.2 ALS-WR 算法............................................34616.2.3 并行版ALS-WR 算法..............................34716.3 搜索引擎:机器学习排序................................34716.3.1 机器学习排序简介.................................34816.3.2LambdaMART.................................34916.3.3 分布式LambdaMART........................................35116.4 自然语言处理:文档相似性计算.......................................35216.5 社交挖掘:谱聚类.................................35516.5.1 社交挖掘实例...............................35516.5.2 谱聚类....................................35616.5.3 并行版谱聚类..........................................35816.6 深度学习:DistBelief.............................................35816.6.1 深度学习简介........................................35916.6.2DistBelief.....................360参考文献.........................................364第17 章 增量计算..........................................36617.1 增量计算模式...........................36717.1.1 两种计算模式...............................36717.1.2 Hadoop 平台下增量计算的一般模式.............................36817.2Percolator................................37017.2.1 事务支持..........................................37117.2.2 “观察/通知”体系结构...........................37317.3 Kineograph............................37417.3.1 整体架构.........................................37517.3.2 增量计算机制....................................37517.4 DryadInc....................................376参考文献..............................................................377附录A 硬件体系结构及常用性能指标......................................378附录B 大数据必读文献....................................380作者简介张俊林是技术书籍《这就是搜索引擎:核心技术详解》(该书荣获全国第十二届输出版优秀图书奖)的作者,目前担任畅捷通智能平台总监。在此之前,张俊林曾经在阿里巴巴搜索技术中心、百度商务搜索部凤巢广告平台以及新浪微博搜索部及数据系统部担任资深技术专家,新浪微博技术委员会成员,负责算法策略方向。他还曾是智能信息聚合网站“玩聚网”的联合创始人之一。他的研发兴趣集中在:搜索技术、推荐系统、社交挖掘、自然语言处理与大数据算法架构等方面,并在以上领域有多年工业界实践经验。张俊林本科毕业于天津大学管理学院,1999年至2004年在中科院软件所直接攻读博士学位,研究方向是信息检索理论与自然语言处理,就学期间曾在ACL/COLING/IJCNLP等国际顶级会议发表多篇学术论文,另外,他在此期间领导设计的搜索系统曾在美国国防部DARPA主持的TREC第二届高精度检索系统评测中在17支国际高水平研究团队激烈竞争中胜出,并取得综合排名第一名的优异成绩。媒体评论我和俊林接触不多但神交已久,几年前我看过他一本搜索方面的技术书籍,觉得写得相当不错,从此俊林的书都是必然要收藏的。看了这本书,感觉和上一本一样出色。和其他介绍大数据技术的书相比,这本书的涉及面相当广,覆盖了当前大数据技术(分布式计算、大规模文件系统、NoSQL数据库、常用数据结构和算法、批处理和流式计算、图数据库、分布式机器学习等)的方方面面。实在且实用,我想是这本书最大的特点,诚挚推荐对大数据技术感兴趣的读者阅读。 王斌中国科学院信息工程研究所研究员、博士生导师《大数据》《信息检索导论》译者本书区别于市场上已有的众多大数据概念类书籍,重点讲述了解决大数据问题的算法与架构,全书逻辑清晰,重点突出,讲述复杂算法时图文并茂,可以看出作者将实际工作经验结合理论,在本书上花了很多心血,相信能帮助从事大数据工作的所有工程技术人员。 张栋原百度科学家,凤巢系统架构师;原Google研究员,机器学习专家此书内容跨度很大,可称为大数据领域“从入门到精通”的教科书,非常全面且系统化。人人都在谈论大数据,但事实上并没有人告诉大家大数据到底是什么、涵盖哪些方面,而此书可以给出答案。 刘子正新浪微博平台及大数据总经理这是一本大数据技术的百科全书——从大数据的存储结构、内容管理,讲到集群任务调度、分布式数据通信、流行的各类新式数据库的介绍,还有基于机器学习技术的大数据实现以及大数据挖掘应用范例等内容,既包罗万象,又深入浅出。俊林的这本心血之作,是大数据研发人员绝好的技术向导。 陈运文盛大文学首席数据官大数据已成为上到国家领导人,下到媒体会议必谈话题,但大数据的应用时代才刚刚开始,各大互联网公司都奇缺熟悉Hadoop、分布式系统开发和数据分析挖掘的人才,张俊林这本书全面展示了大数据相关的技术,理论算法和实践,有广度有深度,对于希望掌握大数据技术的开发者是必备利器。 蒋涛CSDN总裁、《程序员》杂志创始人前言像移动互联网、O2O、可穿戴设备等概念一样,“大数据”从甫一提出到飓风般席卷并风靡全球,从最初的技术名词到形成***各行各业的社会现象,所耗时间仅几年而已,其兴也勃焉。那么,大数据是否会像很多曾经火热现在已难觅踪迹的流行概念一样,将来某日,人们静心抬眼,发现风已去而水波不兴,徒留夕阳下波光粼粼的涟漪,让人不禁哀叹其亡也忽焉?本书的背景目前看仿佛有此迹象,当一个概念火爆到从街头随便抓一个路人,他都能跟你滔滔不绝地侃侃而谈;当一个新名词铺天盖地而来,让你熟悉到再见一次就要吐的程度,这些确实是典型的泡沫将破的征兆。目前业已出现越来越多的质疑声音,在这种狂热的氛围下,理性的质疑是最难能可贵的,毕竟大数据归根结底是少数派的游戏,而现状好像是人人都处于大数据进行时的状态,这让其看上去显得不甚理性。但是,从社会发展趋势的角度,很明显大数据会是目前肉眼可及的视野范围里能看到的最大趋势之一。从传统IT 业到互联网、互联网到移动互联网,从以智能手机和Pad为主要终端载体的移动互联网到可穿戴设备的移动互联网,然后再到万物互联的物联网,这一定是不可违抗的发展规律和前进方向。伴随着这个趋势必然有越来越多、形态越来越丰富的超量数据不断产生,而大数据明显是由此衍生出来的明确且必然的发展趋势。所以,归根结底,大数据概念是个短期内炒得过热,但是从长期来看炒得不足的领域。再过十年如果回望现在,也许会发现:我们今天正在巍峨群山的山脚徘徊,试图找出一条通往山顶的羊肠小道,如此而已。我们当然不能盲目跟风不断追逐切换热点,但是忽视趋势的力量同样也不是一个理性的选择。本书的内容以上所述是本书诞生的大背景,目前市面上陆陆续续已经有不少讲大数据的书,有面向大众的概念普及类图书,也有讲解大数据技术的书,本书属于第二类,专注于与大数据处理有关的架构与算法,我相信这是一本比较全面地分门别类梳理大数据技术的书籍。从大约2010 年年底起我开始关注并收集整理这方面的技术资料,当然那时还没有听说过大数据的概念,现在的所谓大数据已经是后来的事情了。最初引起我关注的是与NoSQL 相关的技术,尤其是Google 和亚马逊的一系列相关工作,当时隐约地觉得这是一种新的技术发展趋势,甚至是一次技术范型的大转换,所以逐步开始投入越来越多的精力到其中,这包括将相关技术资料分门别类地进行收集、阅读和整理,利用业余时间开始一章一节地慢慢写本书,以及在实际工作中尽可能地应用这些技术和系统等若干方面。本书的写作断断续续完成本书花了大约3 年左右的时间,和最初预估的时间还是比较吻合的,这一方面是由于我可投入的时间本身就不多,但是还是希望能够写出一本高质量的技术书籍,所以不得不慢工出细活;另外一方面是由于大数据处理作为一个新领域,其涉及的方方面面的技术点实在太多,而且正处于快速的发展过程中。这个领域是我接触过的领域中知识涵盖面最广的,从底层的硬件开始,到涉及基础理论、大规模数据存储系统、分布式架构设计、各种不同适用场景下的差异化系统设计思路、机器学习与数据挖掘并行算法、层出不穷的新架构和新系统等,说无所不包有些夸张但是所需掌握知识点之多确实是很少见的。而且因为其处于快速发展的过程当中,所以各种技术纷繁芜杂,并无一个成熟的知识分类体系可供参考,需要不断梳理相关知识点之间的相互区别和联系并进行分门别类,如何将纷杂多样的技术梳理成清晰合理的章节内容曾让我头疼不已,当然发展到目前,整个大数据技术体系脉络已经日渐明晰,我相信参考本书目录可以清晰地发现这一点。另外一个阻碍是可参考的资料和系统多而杂,且质量良莠不齐,需要从中汰劣余优,尽可能选出有代表性及有发展潜力的理论、方案和系统,这也是很耗费精力的过程,尽管本书每章后只列出了很少一部分参考资料,但是实际参考的文献与系统要数倍于此,只列出精华部分是为了缩短读者选择高质量文献的过程。十几年前当我还在中国科学院读书的时候,就对互联网的蓬勃发展及其对生活和工作各方面的影响感慨不已。当时最直观的感受是最新的国际会议论文很容易获得,往往是会议一开完就能从网上下载到感兴趣的文献,有时候会议没开有些作者就把论文先放在网上供人参考。觉得有了互联网这么强大的全球范围信息便捷分享工具,尽管当时国内科研水平不算高,在最好的国际顶级会议发表论文还是较难的事情,但是随着互联网的普及,科研水准应该能够获得极为快速长足的发展,因为从追踪最新技术进展的角度看大家的起跑线是一样的,而中国人多的优势慢慢应该能够发挥出来。事实上也是如此,最近几年各种国际顶级会议中,中国人发表的论文比例越来越高可以证明这一点,而很明显这个趋势还会进一步加快。之所以提这个,是因为大数据相关技术研发道理其实也是一样的,尽管目前国内在这方面的实力和国外相比还有很大的差距,优秀的系统和技术方案往往都是Google、亚马逊、Facebook、Linkedin 等这些国际知名互联网公司提出的,国内工业界的技术水准大部分还仅仅停留在能把开源的大数据系统应用起来解决手头碰到的问题这个阶段,但是我相信在不远的将来,国内会逐步涌现出具有国际水准的大数据系统与解决方案,其中的道理与上面所举的学术进步的例子是一样的。目前大部分优秀系统是开源的,相关技术文献也很容易找到,作为有进取心的技术人员,现在所缺乏的不是没有可参考的学习资料,相反是资料太多但良莠不齐反而让很多人无所适从,不知该如何下手。国内的技术人员只要肯下功夫、会下功夫,有好的职业发展环境和高的自我期许及技术理想,假以时日,越来越多的世界级水准的大数据处理系统出自中国人之手是完全可以指日可待的。我期望本书对于这些技术人员在全面了解吸收并掌握大数据处理的优秀技术过程中,能贡献绵薄之力。沈利也参与了本书的部分编写工作。致谢感谢我的妻子、岳父、岳母,以及爸爸、妈妈,尽管历时3 年才得以完成本书,但是若是没有你们的全身心支持,这本书2020 年也无法面世。对了,还有我的女儿,亲爱的雪晴,从蹒跚迈出人生第一步,到咿咿呀呀说出第一句话,我总是想起,小小的你,迷茫地站在这遍布新奇的世界里,东张西望时无助的样子,这总是令人心疼。你无数人生的第一次带给我太多欢乐,而我陪你的时间又太少太少。每次听到你用小手咚咚敲着书房紧闭的门,这经常让我感到惶惑,不知道这么狠心对你是对还是错,但是又不得不狠下心来。我相信将来一定会后悔没有给你更多的时间,把你介绍给这色彩斑斓而残酷的世界,嘱咐它在今后的日子里能善待你一些。我多想陪你直到你白发苍苍的岁月:在初秋的午后阳光下,看到你坐在院中的婆娑树影里,给你的儿孙讲故事,浅笑依然,仿似今天。我可以清楚地想象那时的场景,清晰得就像一切就发生在眼前。虽然我深切地知道这是永不可实现的奢望,但这个梦想会永远放在我心里,就像你清澈的目光和纯真的笑容一样。时间是我们的朋友,也是我们的敌人,希望你们能够原谅我。张俊林2014 年3 月于北京

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  技术 产品 知识点