架构之美 | PDF下载|ePub下载
出版社: 人民邮电出版社
原作名: Cracking the coding interview:150 programming questions and solutions,fifth edition
译者:李琳骁/漆犇
出版年: 2013-11
页数: 372
定价: 59.00元
装帧: 平装
ISBN: 9787115332912
内容简介 · · · · · ·
本书围绕5个主题领域来组织本书的内容:概述、企业应用、系统、最终用户应用和编程语言。本书让最优秀的设计师和架构师来描述他们选择的软件架构,剥开架构的各层,展示他们如何让软件做到实现功能、可靠、易用、高效率、可维护、可移植和优雅。
作者简介 · · · · · ·
Till Adam在年轻时学习了哲学、比较文学、美国研究和音乐学,职业是音乐人。由于没有发财和出名,他转而攻读科学硕士,学习了数学、计算机科学和商业。多年对自由软件的贡献(特别是对KDE的贡献)教会了他编程,也为他带来了在Klarälvdalens Datakonsult AB工作的机会,目前他在该公司负责协调KDE的开发和其他与自由软件相关的活动。他和他的妻子、女儿住在德国柏林。
Jim Blandy在1990年至1993年间为自由软件基金会维护GNU Emacs,和Richard Stallman一起发布了Emacs的第19个版本。他是Subversion版本控制系统的最初设计者之一。他也是CVS版本控制系统、GNU调试器(GDB)、Guile扩展语言库和一个编辑基因序列的Emacs程序的贡献者。他现在为Mozilla公司工作,工作内容是SpiderMonkey,即Mozilla的Javascript编程语言的实现。Jim和他的妻子、两个女儿住在俄勒岗的波特兰。
Mirko Boehm从1997开始就是KDE的开发者,在1996年至2006年间是KDE e.V.委员会的成员。他毕业于德国汉堡Helmut Schmidt大学的商业专业。在他的私人生活中,他阅读纸版书籍、与家人在一起,试图远离计算机。他目前在德国柏林为Klarälvdalens Datakonsult AB工作,负责跨平台软件和嵌入式软件开发。
Christopher Dennis自2005年JCP项目开始时,就是项目的主开发者。Chris在牛津大学读博士时开始采用Java。此前,他使用过各种编程语言,从16进制小键盘上编写的Z80机器码到PHP和JavaScript。他对特殊情况、编码技巧和偶尔有点丑陋的临时编码很有兴趣,喜欢用各种语言编写紧凑的、优雅的代码。
Dave Fetterman是Facebook的工程经理,他在那里创建了Facebook平台项目。在2006年加入Facebook之前,他是一名软件工程师,参加Microsoft开发者部门的项目,包括.NET的通用语言运行环境(CLR)。他喜欢为其他开发者创建软件,也喜欢对愿意听的人发表长篇大论。他拥有应用数学的学士学位,并在2003年获得了哈佛大学的计算机科学硕士学位。
Keir Fraser是XenSource的创始人之一,XenSource现在是Citrix Systems公司的一部分。他也是Xen系统管理程序的首席架构师。Keir在2002实现了Xen的第一个版本,作为他在剑桥计算机实验室攻读博士学位时的一项娱乐。在该项目成为大规模的社群合作的过程中,他继续作为主要的开发者。他因在无锁并发控制方面的工作,于2004年获得了博士学位,并在同年成为一名教师。
Peter Goodliffe是一名程序员、专栏作家、演说家和作家,从来不在同一软件领域做过多的停留。Pete的热门书籍“Code Craft (No Starch Press)”是对整个编程追求的实际而有趣的调查——大约600页,真是了不起!他对制革很有热情,而且不穿鞋。
Georgios Gousios是一名职业研究者,接受的教育和软件工程有关,热衷于软件开发。目前,他正在希腊的雅典经济学与商业大学完成他的博士论文。他的研究兴趣包括软件工程、软件品质、虚拟机和操作系统,他拥有英国曼彻斯特大学的科学硕士学位。Gousios为多个开源软件项目贡献过代码,并参与了各种学术项目和商业项目的研究与开发。他是SQO-OSS项目的项目经理、设计权威和主要开发成员,为评估软件品质探索一些创新的方法。在他的学术生涯中,Gousios在会议和杂志上发表了10篇技术论文。Gousios是ACM、IEEE、Usenix Association和Technical Chamber of Greece的成员。
Dave Grove是IBM的T.J. Watson研究中心动态优化组的一名研究员。他的主要研究兴趣包括分析和优化面向对象语言、虚拟机设计和实现、JIT编译、在线反馈导向的优化和垃圾收集。他在1998年参加了Jalapeño项目,是这个优化编译器和适应式优化系统首个实现的主要贡献者。自Jalapeño在2001年作为Jikes RVM开放源码以来,他一直是Jikes RVM核心团队和指导委员会的活跃成员。
John Klein是软件工程研究所(SEI)的高级技术人员,他的研究方向是“众系统之系统”的架构方法,并帮助个人、团队和组织机构改进他们的软件架构能力。在加入SEI之前,John是Avaya公司的首席架构师。在Avaya,他负责开发多模式的代理、通信分析的架构,以及为各种客户交互产品创建并改进架构。在此之前,John是Quintus的一名软件架构师,在那里他设计了第一款获得商业成功的多渠道集成联系中心产品,并导致了Quintus兼并了另外两家公司,实现了产品组合的技术集成。在加入Quintus之前,John曾为多家视频会议和视频网络业的公司服务。他的职业生涯开始于Raytheon,在那里他为雷达信号处理、多光谱图像处理、并行处理架构和算法提供硬件和软件解决方案。John拥有Stevens技术学院的学士学位和Northeastern大学的硕士学位。他是ACM和IEEE计算机学会的成员。
Greg Lehey的漫长职业生涯在德国和澳大利业度过,他曾为德国空间研究所工作,也曾为Univac、Tandem、Siemens-Nixdorf和IBM等计算机制造商工作,也曾作为一些没名气的软件公司的大客户,还曾做过独立的咨询顾问。他的活动范围很广,包括从内核开发到产品管理,从系统编程到系统管理,从处理卫星数据到为油泵编程,从生产CD-ROM到把自由软件移植到DSP指令集上。他是FreeBSD核心团队的成员,也是澳大利业Unix用户协会的主席。他是FreeBSD和NetBSD项目的开发者,也是“Porting Unix Software and The Complete FreeBSD, Fourth Edition (both O’Reilly)”一书的作者。他还以编写商业应用软件而闻名。Greg在2007年退休,将多出来的时间用于寻找生活。现在,他的休闲活动占据了他的大多数时间,但这还不够,他还听古典木纹唱片、烹饪、酿啤酒(他开发了一个计算机控制的发酵系统)、做园艺、骑马和摄影。他也对一些历史题材感兴趣,包括古代的难解的欧洲语言。
Panagiotis Louridas在上世纪八十年代通过一台 Sinclair ZX Spectrum开始涉足计算机。从那时起,他就开始用机器语言进行编程,而且非常喜欢。他在雅典大学信息系获得了计算机科学学士学位,在曼彻斯特大学获得了计算机硕士和博士学位。这些年来,他一直为私人部门开发软件,现在,他在希腊研究和教育网络(GRNET)工作。他也是雅典经济学和商业大学(AUEB)软件工程和安全(SENSE)研究组的成员。他发表的文章范围很广,从人类学到加密,从仪表展示到软件工程。他特别喜欢寻找计算机世界和其他领域的联系。
Stephen J. Mellor在为软件开发创建有效的工程方法方面,是国际公认的先行者。在1985年,他出版了广为阅读的Ward-Mellor三卷本“Structured Development for Real-Time Systems (Prentice Hall)”;在1998年,他的书首次定义了面向对象分析。Stephen还在2002年出版了“Executable UML: A Foundation for Model-Driven Architecture (Addison-Wesley Professional) ”。他最近的一本书“MDA Distilled: Principles of Model-Driven Architecture (Addison-Wesley Professional)”在2004年出版。他在对象管理集团(OMG)中活动积极,是为UML添加可执行动作的协会的主席,他最近完成了可执行UML的标准。他是敏捷宣言的签名者之一。他是OMG架构委员会的两任成员,IEEE软件顾问委员会的主席,最近,他成为了Mentor Graphics的嵌入式软件部门的首席科学家。
Bertrand Meyer是ETH Zurich的软件工程教授,也是Eiffel软件的首席架构师,他领导并设计了EiffelStudio环境和大量的库。他是一些畅销书的作者,其中包括获得Jolt大奖的“Object-Oriented Software Construction (Prentice Hall)”。他也因为在对象技术和Eiffel方面的工作获得了ACM软件系统大奖和Dahl-Nygaard大奖,并获得了St. Petersburg州立技术大学的荣誉博士学位。他的研究兴趣涉及面向对象技术、编程语言、软件验证(包括测试、并发和规范方法)。他也是一名活跃的顾问和讲师。
Mitchell是MIT架构和媒体艺术与科学系的Alexander Dreyfoos教授,他领导着MIT媒体实验室和MIT设计实验室的Smart Cities团队。他以前曾担任MIT架构和计划学院的院长。他最近的新书是“World’s Greatest Architect”和“Imagining MIT”(都由MIT出版社出版)。
Derek Murray是剑桥大学计算机实验室的博士生。他在2006年加入Xen项目,主要工作是通过重新设计控制栈来改进Xen的安全性。他现在的研究主要是改进大规模分布式系统的容错性,但他还是偶尔会涉及系统核心。Derek在2006年从爱丁堡大学获得了高性能计算专业的硕士学位,2005年获得了Glasgow大学的计算机学士学位。
Rhy Newman在十多年前于牛津大学完成博士学位时,就开始使用Java,那时Java还只有几年历史。在他早期的研究中,他利用纯Java环境展示了高性能实时场景处理的实现方法,即使当时还是使用早期JIT化的JVM。从那时起,他同时在学界和业界工作,一次次证明Java平台实际上有多灵活、多高效、多快。在超过20年的软件工程生涯中,他获得了多个业界杰出技术奖项,最近他回到了牛津,承担了网格计算领域的突破性研究。JPC是最新研究工作的一部分。
Michael Nygard致力于在全国帮助开发者提高水平和减少痛苦。他和他遇到的每一个人分享他对改进的热情和活力,有时甚至没有得到对方的同意。Michael花了20年中的大部分时间学习对专业程序员有意义的事,他关心艺术、品质和技艺。他总是愿意在那些全职的、真心投入工作的开发者(那些“觉醒的”开发者)身上花时间。在另一方面,他不能容忍缺乏兴趣或浪费潜力。Michael在近20年来一直是专业的程序员和架构师。在这段时间里,他为美国政府、军方、银行、金融业、农业和零售业交付了运营系统。通常,Michael都要面对他自己开发的系统。这种实际运营的经历改变了他对软件架构和开发的看法。他参与了一个Tier 1零售网站的初期开发,并且常常作为其他在线业务的“流动解决问题专家”。这些经验让他对在相当不友好的环境下构建高性能、高可靠性的软件有了独特的看法。最近,Michael编写了“Release It! Design and Deploy Production-Ready Software (Pragmatic Programmers)”,该书获得了2008年的Jolt生产力大奖。
Ian Rogers是曼彻斯特大学高级处理器技术研究组的研究员。他的博士研究工作是关于Dynamite二进制翻译器的,该技术实现了商用,现在是许多二进制翻译器产品的一部分,包括Apple的Rosetta。他最近的学术研究工作一直是编程语言设计、运行时环境和虚拟机环境,特别是如何自动创建它们并有效地使用并行技术。他是Jikes研究虚拟机的主要贡献者,是开发团队的核心成员。
Brian Sletten是自由的、受过艺术教育的软件工程师,关注forward-learning技术。他曾担任过系统架构师、开发者、现场指导者和培训师。他在世界各地的会议上发表演讲,并为一些在线出版物编写关于面向Web技术的文章。他的经验涉及国防、金融和商业领域。他曾设计并建造了网络矩阵式交换控制系统、在线游戏、3D仿真/可视化环境、因特网分布式计算平台、P2P和基于Web的语义系统。他拥有William and Mary大学的计算机科学学士学位,目前居住在弗吉尼亚的Fairfax。他是Bosatsu咨询公司的总裁,该公司为Web架构、面向资源的计算、语义Web、高级用户界面、可伸缩系统、安全和其他20世纪末21世纪初的技术提供专业的咨询服务。
Diomidis Spinellis是希腊雅典经济学和商业大学管理科学与技术系统的副教授。他的研究兴趣包括软件工程、计算机安全和编程语言。他也编写了两本“开放源码方面”的书,由Addison-Wesley出版:“Code Reading(获得了2004年的软件开发生产力大奖)”和“Code Quality(获得了2007年软件开发生产力大奖)”。他也写了几十篇科学论文。他是IEEE Software编辑委员会的成员,负责定期的“Tools of the Trade”栏目。Diomidis是FreeBSD的提交者,也是UMLGraph和其他天源软件包、库和工具的开发者。他拥有软件工程的硕士学位和计算机科学博士学位,都是在Imperial College London获得的。Diomidis是ACM的高级成员,也是IEEE和Usenix Association的成员。
Jim Waldo是Sun微系统实验室的杰出工程师,负责研究下一代大规模分布式系统。他目前是Project Darkstar的技术负责人,该系统是针对大规模多人在线游戏和虚拟世界而设计的多线程、分布式基础设施。在此之,他曾是Jini的首席架构师,Jini是基于Java的分布式编程系统。Jim编写了“The Evolution of C++: Language Design in the Marketplace of Ideas(MIT出版社)”,也是“The Jini Specification (Addison-Wesley)”的合著者之一。他曾是美国国家学术委员会的共同主席,编辑并出版了“Engaging Privacy and Information Technology in a Digital Age”一书。Jim也是哈佛大学的辅助教师,在计算机科学系教授分布式计算和策略与技术相关的内容。Jim拥有马萨诸塞大学(Amherst)的哲学博士学位。
David Weiss拥有Union College的计算机科学学士学位,并拥有马里兰大学的计算机科学硕士和博士学位。他目前是Avaya实验室的软件技术研究部的领导,他关注软件开发效率改进的普遍问题和Avaya软件开发过程改进的特殊问题。在第二个问题上,他领导了Avaya软件技术研究中心。以前,他曾是朗迅技术贝尔实验室软件生产研究部的主任,该部门负责研究如何改进软件开发的效率。在加入贝尔实验室之前,他是软件生产力协会(SPC)复用和度量部门的主任,该协会由14个大型的美国航空公司组成。在加入SPC之前,Weiss博士在技术评估办公室度过了一年的时间,在那里他与同事共同完成了Strategic Defense Initiative的技术评估。在1985-1986学年,他是Wang Institute的访问学者,在许多年里,他一直是华盛顿特区Naval研究实验室(NRL)计算机科学和系统部门的研究员。他也是一名程序员和数学家。Dave的主要研究兴趣是软件工程领域,特别是软件开发过程和方法学、软件设计和软件测量。他最为人知的是发明了软件测量的“目标-问题-测量指标”方法,软件系统模块化结构的工作,以及软件生产线工程的工作。他是Synthesis过程和继承者FAST过程的共同发明人。他与别人共同编著了两本书:“Software Product-Line Engineering”和“Software Fundamentals: Collected Papers of David L. Parnas ”(都由Addison-Wesley出版)
【译者简介】
王海鹏 1994年毕业于华东师范大学。拥有理学士(物理)和文学士(英国语言文学)学位。独立的咨询顾问、培训讲师、译者和软件开发者。已翻译十余本软件开发书籍,主题涵盖敏捷方法学、需求工程、UML建模和测试。拥有15年软件开发经验,目前主要的研究领域是软件架构和方法学,致力于提高软件开发的品质和效率。
蔡黄辉 江苏启东人。1999年毕业于上海交通大学,毕业后一直从事软件开发工作,主要使用Java做Web方面的底层开发。现居住在上海。
徐锋 中国系统分析员顾问团(CSAI)软件工程首席顾问,中国软件技术大会杰出贡献专家,资深咨询顾问。主要研究领域为需求工程、系统分析与设计、软件估算,致力于推动软件工程方法论的落地应用。曾在《程序员》等媒体发表了《实战OO》、《项目管理三步曲》、《大话Design》等多个专栏文章,著有《软件需求最佳实践》、《UML面向对象建模基础》等多本书籍,翻译了《UML 2.0实战》、《AOSD中文版》、《Cloud to Code中文版》等多本相关技术书籍。
目录 · · · · · ·
前言
第一部分 论架构
第1章 架构概述
1.1 简介
1.2 创建软件架构
1.3 架构结构
1.4 好的架构
1.5 美丽的架构
致谢
参考文献
第2章 两个系统的故事:现代软件神话
2.1 混乱大都市
2.2 设计之城
2.3 说明什么问题
2.4 轮到你了
参考文献
第二部分 企业级应用架构
第3章 伸缩性架构设计
3.1 简介
3.2 背景
3.3 架构
3.4 关于架构的思考
第4章 记忆留存
4.1 功能和约束
4.2 工作流
4.3 架构关注点
4.4 用户反应
4.5 结论
参考文献
第5章 面向资源的架构:在Web中
5.1 简介
5.2 传统的Web服务
5.3 Web
5.4 面向资源的架构
5.5 数据驱动的应用
5.6 应用面向资源的架构
5.7 结论
第6章 数据增长:Facebook平台的架构
6.1 简介
6.2 创建一个社会关系Web服务
6.3 创建社会关系数据查询服务
6.4 创建一个社会关系Web门户:FBML
6.5 系统的支持功能
6.6 总结
第三部分 系统架构
第7章 Xen和虚拟化之美
7.1 简介
7.2 Xenoservers
7.3 虚拟化的挑战
7.4 半虚拟化
7.5 Xen的变换形式
7.6 改变的硬件,改变的Xen
7.7 经验教训
7.8 延伸阅读
第8章 Guardian:一个容错操作系统环境
8.1 Tandem/16,将来所有的计算机都会像这样构建
8.2 硬件
8.3 物理布局
8.4 处理器架构
8.5 处理器间总线
8.6 输入/输出
8.7 进程结构
8.8 消息系统
8.9 文件系统
8.10 轶闻趣事
8.11 弊端
8.12 后继者
8.13 延伸阅读
第9章 JPC:一个纯Java的x86 PC模拟程序
9.1 简介
9.2 概念验证
9.3 PC架构
9.4 Java性能技巧
9.5 把4GB放入4GB:这不起作用
9.6 保护模式的危险
9.7 从事一项毫无成功希望的斗争
9.8 劫持JVM
9.9 终极灵活性
9.10 终极安全性
9.11 第二次做会更好
第10章 元循环虚拟机的力量:Jikes RVM
10.1 背景
10.2 与运行时环境相关的传言
10.3 Jikes RVM简史
10.4 一个自足执行的运行时自举
10.5 运行时组件
10.6 经验教训
参考文献
第四部分 最终用户应用架构
第11章 GNU Emacs:滋长的特性是其优势
11.1 使用中的Emacs
11.2 Emacs的架构
11.3 滋长的特性
11.4 另外两个架构
第12章 当集市开始构建教堂
12.1 简介
12.2 KDE项目的历史和组织结构
12.3 Akonadi
12.4 ThreadWeaver
第五部分 语言与架构
第13章 软件架构:面向对象与面向函数
13.1 概述
13.2 函数式示例
13.3 函数式解决方案的模块性评价
13.4 面向对象视图
13.5 面向对象模块性的评价和改进
13.6 代理:将操作封装到对象中
致谢
参考文献
第14章 重读经典
14.1 所有东西都是对象
14.2 类型是隐式定义的
14.3 问题
14.4 砖块和灰浆建筑架构
参考资料
跋 漂亮地构建
· · · · · ·
发表回复
要发表评论,您必须先登录。