diff --git a/.helper/db.json b/.helper/db.json index 2dbeef70cab90d72f34995c2de3807b3da34ce82..148631b38827f33e56dca227d1d70a7ba8d81b31 100644 --- a/.helper/db.json +++ b/.helper/db.json @@ -1 +1 @@ -{"9787111255833":{"rating":{"max":10,"numRaters":1466,"average":"9.0","min":0},"subtitle":"","author":["Joshua Bloch"],"pubdate":"2009-1-1","tags":[{"count":1171,"name":"java","title":"java"},{"count":830,"name":"Java","title":"Java"},{"count":624,"name":"编程","title":"编程"},{"count":396,"name":"effective","title":"effective"},{"count":347,"name":"计算机","title":"计算机"},{"count":320,"name":"程序设计","title":"程序设计"},{"count":269,"name":"经典","title":"经典"},{"count":220,"name":"软件开发","title":"软件开发"}],"origin_title":"Effective Java Second Edition","image":"https://img3.doubanio.com/view/subject/m/public/s3479802.jpg","binding":"平装","translator":["俞黎敏"],"catalog":"译者序\n序\n前言\n致谢\n第1章 引言\n第2章 创建和销毁对象\n第1条:考虑用静态工厂方法代替构造器\n第2条:遇到多个构造器参数时要考虑用构建器\n第3条:用私有构造器或者枚举类型强化Singleton属性\n第4条:通过私有构造器强化不可实例化的能力\n第5条:避免创建不必要的对象\n第6条:消除过期的对象引用\n第7条:避免使用终结方法\n第3章 对于所有对象都通用的方法\n第8条:覆盖equals时请遵守通用约定\n第9条:覆盖equals时总要覆盖hashCode\n第10条:始终要覆盖toString\n第11条:谨慎地覆盖clone\n第12条:考虑实现Comparable接口\n第4章 类和接口\n第13条:使类和成员的可访问性最小化\n第14条:在公有类中使用访问方法而非公有域\n第15条:使可变性最小化\n第16条:复合优先于继承\n第17条:要么为继承而设计,并提供文档说明,要么就禁止继承\n第18条:接口优于抽象类\n第19条:接口只用于定义类型\n第20条:类层次优于标签类\n第21条:用函数对象表示策略\n第22条:优先考虑静态成员类\n第5章 泛型\n第23条:请不要在新代码中使用原生态类型\n第24条:消除非受检警告\n第25条:列表优先于数组\n第26条:优先考虑泛型\n第27条:优先考虑泛型方法\n第28条:利用有限制通配符来提升API的灵活性\n第29条:优先考虑类型安全的异构容器\n第6章 枚举和注解\n第30条:用enum代替int常量\n第31条:用实例域代替序数\n第32条:用EnumSet代替位域\n第33条:用EnumMap代替序数索引\n第34条:用接口模拟可伸缩的枚举\n第35条:注解优先于命名模式\n第36条:坚持使用Override注解\n第37条:用标记接口定义类型\n第7章 方法\n第38条:检查参数的有效性\n第39条:必要时进行保护性拷贝\n第40条:谨慎设计方法签名\n第41条:慎用重载\n第42条:慎用可变参数\n第43条:返回零长度的数组或者集合,而不是:null\n第44条:为所有导出的API元素编写文档注释\n第8章 通用程序设计\n第45条:将局部变量的作用域最小化\n第46条:for-each循环优先于传统的for循环\n第47条:了解和使用类库\n第48条:如果需要精确的答案,请避免使用float和double\n第49条:基本类型优先于装箱基本类型\n第50条:如果其他类型更适合,则尽量避免使用字符串\n第51条:当心字符串连接的性能\n第52条:通过接口引用对象\n第53条:接口优先于反射机制\n第54条:谨慎地使用本地方法\n第55条:谨慎地进行优化\n第56条:遵守普遍接受的命名惯例\n第9章 异常\n第57条:只针对异常的情况才使用异常\n第58条:对可恢复的情况使用受检异常,对编程错误使用运行时异常\n第59条:避免不必要地使用受检的异常\n第60条:优先使用标准的异常\n第61条:抛出与抽象相对应的异常\n第62条:每个方法抛出的异常都要有文档\n第63条:在细节消息中包含能捕获失败的信息\n第64条:努力使失败保持原子性\n第65条:不要忽略异常\n第10章 并发\n第66条:同步访问共享的可变数据\n第67条:避免过度同步\n第68条:executor和task优先干线程\n第69条:并发工具优先于wait和notify\n第70条:线程安全性的文档化\n第71条:慎用延迟初始化\n第72条:不要依赖于线程调度器\n第73条:避免使用线程组\n第11章 序列化\n第74条:谨慎地实现Serializable接口\n第75条:考虑使用自定义的序列化形式\n第76条:保护性地编写readObject方法\n第77条:对于实例控制,枚举类型优先于readResolve\n第78条:考虑用序列化代理代替序列化实例\n附录 第1版与第2版条目对照\n中英文术语对照\n参考文献","pages":"287","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s3479802.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s3479802.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s3479802.jpg"},"alt":"https://book.douban.com/subject/3360807/","id":"3360807","publisher":"机械工业出版社","isbn10":"7111255836","isbn13":"9787111255833","title":"Effective java 中文版(第2版)","url":"https://api.douban.com/v2/book/3360807","alt_title":"Effective Java Second Edition","author_intro":"Joshua Bloch是Google公司的首席Java架构师。是Jolt大奖的获得者。他曾是Sun公司的杰出工程师,和Transarc公司的高级系统设计师。Bloch曾带领团队设计和实现过无数的Java平台特性,包括JDK 5.0语言增强版和获奖的Java Collections Framework。他的著作还包括:《Java Puzzlers》、《Java Concurrency in Practive》等。","summary":"本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。\n本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。","series":{"id":"28333","title":"Sun公司核心技术丛书"},"price":"52.00元"},"9787508353937":{"rating":{"max":10,"numRaters":2700,"average":"9.2","min":0},"subtitle":"","author":["弗里曼"],"pubdate":"2007-9","tags":[{"count":2800,"name":"设计模式","title":"设计模式"},{"count":822,"name":"计算机","title":"计算机"},{"count":648,"name":"编程","title":"编程"},{"count":563,"name":"软件工程","title":"软件工程"},{"count":499,"name":"Headfirst","title":"Headfirst"},{"count":489,"name":"软件设计","title":"软件设计"},{"count":414,"name":"java","title":"java"},{"count":335,"name":"软件开发","title":"软件开发"}],"origin_title":"","image":"https://img3.doubanio.com/view/subject/m/public/s2686916.jpg","binding":"平装","translator":["O'Reilly Taiwan公司"],"catalog":"引子\n谁适合读这本书?\n我们知道你的大脑在想什么\n元认知\n让你的大脑就范\n技术审校\n致谢\n1 欢迎来到设计模式世界:设计模式入门\n模拟鸭子应用\nJoe想到继承\n利用接口如何?\n软件开发的不变真理\n分开变化和不变部分\n设计鸭子的行为\n测试鸭子的代码\n动态地设置行为\n封装行为的大局观\n“有一个”比“是一个”更好\n策略模式\n共享模式词汇的威力\n我如何使用设计模式?\n设计箱内的工具\n习题解答\n2 让你的对象知悉现况\n气象观测站\n认识观察者模式\n出版者+订阅者=观罕者模式\n五分钟短剧:观察主题\n定义观察者模式\n松耦合的威力\n设计气象站\n实现气象站\n使用Java内建的观察者模式\njava.util.Observable的黑暗面\n设计箱内的工具\n习题解答\n……\n3 装饰者模式:装饰对象\n4 工厂模式:烘烤OO的精华\n5 单件模式:独一无二的对象\n6 命令模式:封装调用\n7 适配器模式与外观模式:随遇而安\n8 模板方法模式:封装算法\n9 送代器与组合模式:管理良好的集合\n10 状态模式:事物的状态\n11 代理模式:控制对象访问\n12 复合模式:模式中的模式\n13 与设计模式相处:真实世界中的模式\nA 附录A:剩下的模式","pages":"637","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s2686916.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s2686916.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s2686916.jpg"},"alt":"https://book.douban.com/subject/2243615/","id":"2243615","publisher":"中国电力出版社","isbn10":"7508353935","isbn13":"9787508353937","title":"Head First 设计模式(中文版)","url":"https://api.douban.com/v2/book/2243615","alt_title":"","author_intro":"","summary":"《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别。第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式等主题,至于第14章则很快地浏览尚未介绍的设计模式,包括Bridge、Builder、Chain of Responsibility、Flyweight、Interpreter、Mediator、Memento、Prototype,Visitor。第1章还介绍了四个○○基本概念(抽象、封装、继承、多态),而第1章到第9章也陆续介绍了九个○○原则(Principle)。千万不要轻视这些○○原则,因为每个设计模式背后都包含了几个○○原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到○○原则,以方便判断取舍。可以这么说:○○原则是我们的目标,而设计模式是我们的做法。","series":{"id":"10044","title":"O'Reilly深入浅出系列"},"price":"98.00元"},"9787115419347":{"rating":{"max":10,"numRaters":252,"average":"9.2","min":0},"subtitle":"","author":["厄马(Raoul-Gabriel Urma)","弗斯科(Mario Fusco)","米克罗夫特(Alan Mycroft)"],"pubdate":"2016-4-1","tags":[{"count":238,"name":"Java","title":"Java"},{"count":143,"name":"java8","title":"java8"},{"count":79,"name":"编程","title":"编程"},{"count":74,"name":"函数式编程","title":"函数式编程"},{"count":62,"name":"java","title":"java"},{"count":59,"name":"计算机","title":"计算机"},{"count":39,"name":"软件开发","title":"软件开发"},{"count":22,"name":"开发","title":"开发"}],"origin_title":"","image":"https://img1.doubanio.com/view/subject/m/public/s29343267.jpg","binding":"平装","translator":["陆明刚","劳佳"],"catalog":"第一部分 基础知识\n第1章 为什么要关心Java 8  2\n1.1 Java怎么还在变  4\n1.1.1 Java在编程语言生态系统中的位置  4\n1.1.2 流处理  6\n1.1.3 用行为参数化把代码传递给方法  7\n1.1.4 并行与共享的可变数据  7\n1.1.5 Java需要演变  8\n1.2 Java中的函数  8\n1.2.1 方法和Lambda作为一等公民  9\n1.2.2 传递代码:一个例子  11\n1.2.3 从传递方法到Lambda  12\n1.3 流  13\n1.4 默认方法  17\n1.5 来自函数式编程的其他好思想  18\n1.6 小结  19\n第2章 通过行为参数化传递代码  20\n2.1 应对不断变化的需求  21\n2.1.1 初试牛刀:筛选绿苹果  21\n2.1.2 再展身手:把颜色作为参数  21\n2.1.3 第三次尝试:对你能想到的每个属性做筛选  22\n2.2 行为参数化  23\n2.3 对付啰嗦  27\n2.3.1 匿名类  28\n2.3.2 第五次尝试:使用匿名类  28\n2.3.3 第六次尝试:使用Lambda表达式  30\n2.3.4 第七次尝试:将List类型抽象化  31\n2.4 真实的例子  31\n2.4.1 用Comparator来排序  31\n2.4.2 用Runnable执行代码块  32\n2.4.3 GUI事件处理  32\n2.5 小结  33\n第3章 Lambda表达式  34\n3.1 Lambda管中窥豹  35\n3.2 在哪里以及如何使用Lambda  37\n3.2.1 函数式接口  37\n3.2.2 函数描述符  39\n3.3 把Lambda付诸实践:环绕执行模式  41\n3.3.1 第1步记得行为参数化  41\n3.3.2 第2步:使用函数式接口来传递行为  42\n3.3.3 第3步:执行一个行为  42\n3.3.4 第4步:传递Lambda  42\n3.4 使用函数式接口  43\n3.4.1 Predicate  44\n3.4.2 Consumer  44\n3.4.3 Function  45\n3.5 类型检查、类型推断以及限制  49\n3.5.1 类型检查  49\n3.5.2 同样的Lambda,不同的函数式接口  50\n3.5.3 类型推断  51\n3.5.4 使用局部变量  52\n3.6 方法引用  53\n3.6.1 管中窥豹  53\n3.6.2 构造函数引用  55\n3.7 Lambda和方法引用实战  57\n3.7.1 第1步:传递代码  58\n3.7.2 第2步:使用匿名类  58\n3.7.3 第3步:使用Lambda表达式  58\n3.7.4 第4步:使用方法引用  59\n3.8 复合Lambda表达式的有用方法  59\n3.8.1 比较器复合  60\n3.8.2 谓词复合  60\n3.8.3 函数复合  61\n3.9 数学中的类似思想  62\n3.9.1 积分  62\n3.9.2 与Java 8的Lambda联系起来  63\n3.10 小结  64\n第二部分 函数式数据处理\n第4章 引入流  68\n4.1 流是什么  68\n4.2 流简介  72\n4.3 流与集合  74\n4.3.1 只能遍历一次  75\n4.3.2 外部迭代与内部迭代  76\n4.4 流操作  78\n4.4.1 中间操作  78\n4.4.2 终端操作  79\n4.4.3 使用流  80\n4.5 小结  81\n第5章 使用流  82\n5.1 筛选和切片  83\n5.1.1 用谓词筛选  83\n5.1.2 筛选各异的元素  83\n5.1.3 截短流  84\n5.1.4 跳过元素  85\n5.2 映射  86\n5.2.1 对流中每一个元素应用函数  86\n5.2.2 流的扁平化  87\n5.3 查找和匹配  90\n5.3.1 检查谓词是否至少匹配一个元素  90\n5.3.2 检查谓词是否匹配所有元素  90\n5.3.3 查找元素  91\n5.3.4 查找第一个元素  92\n5.4 归约  92\n5.4.1 元素求和  93\n5.4.2 最大值和最小值  94\n5.5 付诸实践  97\n5.5.1 领域:交易员和交易  98\n5.5.2 解答  99\n5.6 数值流  101\n5.6.1 原始类型流特化  101\n5.6.2 数值范围  102\n5.6.3 数值流应用:勾股数  103\n5.7 构建流  105\n5.7.1 由值创建流  106\n5.7.2 由数组创建流  106\n5.7.3 由文件生成流  106\n5.7.4 由函数生成流:创建无限流  107\n5.8 小结  110\n第6章 用流收集数据  111\n6.1 收集器简介  112\n6.1.1 收集器用作高级归约  112\n6.1.2 预定义收集器  113\n6.2 归约和汇总  114\n6.2.1 查找流中的最大值和最小值  114\n6.2.2 汇总  115\n6.2.3 连接字符串  116\n6.2.4 广义的归约汇总  117\n6.3 分组  120\n6.3.1 多级分组  121\n6.3.2 按子组收集数据  122\n6.4 分区  126\n6.4.1 分区的优势  126\n6.4.2 将数字按质数和非质数分区  128\n6.5 收集器接口  129\n6.5.1 理解Collector接口声明的方法  130\n6.5.2 全部融合到一起  134\n6.6 开发你自己的收集器以获得更好的性能  135\n6.6.1 仅用质数做除数  136\n6.6.2 比较收集器的性能  139\n6.7 小结  140\n第7章 并行数据处理与性能  141\n7.1 并行流  141\n7.1.1 将顺序流转换为并行流  142\n7.1.2 测量流性能  144\n7.1.3 正确使用并行流  147\n7.1.4 高效使用并行流  148\n7.2 分支/合并框架  149\n7.2.1 使用RecursiveTask  149\n7.2.2 使用分支/合并框架的最佳做法  153\n7.2.3 工作窃取  154\n7.3 Spliterator  155\n7.3.1 拆分过程  155\n7.3.2 实现你自己的Spliterator  157\n7.4 小结  162\n第三部分 高效Java 8编程\n第8章 重构、测试和调试  164\n8.1 为改善可读性和灵活性重构代码  164\n8.1.1 改善代码的可读性  165\n8.1.2 从匿名类到Lambda表达式的转换  165\n8.1.3 从Lambda表达式到方法引用的转换  166\n8.1.4 从命令式的数据处理切换到Stream  167\n8.1.5 增加代码的灵活性  168\n8.2 使用Lambda重构面向对象的设计模式  170\n8.2.1 策略模式  171\n8.2.2 模板方法  172\n8.2.3 观察者模式  173\n8.2.4 责任链模式  175\n8.2.5 工厂模式  177\n8.3 测试Lambda表达式  178\n8.3.1 测试可见Lambda函数的行为  179\n8.3.2 测试使用Lambda的方法的行为  179\n8.3.3 将复杂的Lambda表达式分到不同的方法  180\n8.3.4 高阶函数的测试  180\n8.4 调试  181\n8.4.1 查看栈跟踪  181\n8.4.2 使用日志调试  183\n8.5 小结  184\n第9章 默认方法   185\n9.1 不断演进的API   187\n9.1.1 初始版本的API  188\n9.1.2 第二版API  188\n9.2 概述默认方法  190\n9.3 默认方法的使用模式  192\n9.3.1 可选方法  192\n9.3.2 行为的多继承  192\n9.4 解决冲突的规则  196\n9.4.1 解决问题的三条规则  196\n9.4.2 选择提供了最具体实现的默认方法的接口  197\n9.4.3 冲突及如何显式地消除歧义  198\n9.4.4 菱形继承问题  200\n9.5 小结  201\n第10章 用Optional取代null  202\n10.1 如何为缺失的值建模   203\n10.1.1 采用防御式检查减少Null-PointerException  203\n10.1.2 null带来的种种问题  204\n10.1.3 其他语言中null的替代品  205\n10.2 Optional类入门  206\n10.3 应用Optional的几种模式   207\n10.3.1 创建Optional对象  208\n10.3.2 使用map从Optional对象中提取和转换值  208\n10.3.3 使用flatMap链接Optional对象  209\n10.3.4 默认行为及解引用Optional对象  213\n10.3.5 两个Optional对象的组合  213\n10.3.6 使用filter剔除特定的值  214\n10.4 使用Optional的实战示例   216\n10.4.1 用Optional封装可能为null的值  216\n10.4.2 异常与Optional的对比  217\n10.4.3 把所有内容整合起来  218\n10.5 小结  219\n第11章 CompletableFuture:组合式异步编程  220\n11.1 Future接口  222\n11.1.1 Future接口的局限性  223\n11.1.2 使用CompletableFuture构建异步应用  223\n11.2 实现异步API   224\n11.2.1 将同步方法转换为异步方法  225\n11.2.2 错误处理  227\n11.3 让你的代码免受阻塞之苦  228\n11.3.1 使用并行流对请求进行并行操作  229\n11.3.2 使用CompletableFuture发起异步请求  230\n11.3.3 寻找更好的方案  232\n11.3.4 使用定制的执行器  233\n11.4 对多个异步任务进行流水线操作  234\n11.4.1 实现折扣服务  235\n11.4.2 使用Discount服务  236\n11.4.3 构造同步和异步操作  237\n11.4.4 将两个Completable-Future对象整合起来,无论它们是否存在依赖  239\n11.4.5 对Future和Completable-Future的回顾  241\n11.5 响应CompletableFuture的completion事件  242\n11.5.1 对最佳价格查询器应用的优化  243\n11.5.2 付诸实践  244\n11.6 小结  245\n第12章 新的日期和时间API  246\n12.1 LocalDate、LocalTime、Instant、Duration以及Period  247\n12.1.1 使用LocalDate和LocalTime  247\n12.1.2 合并日期和时间  248\n12.1.3 机器的日期和时间格式  249\n12.1.4 定义Duration或Period  249\n12.2 操纵、解析和格式化日期  251\n12.2.1 使用TemporalAdjuster  253\n12.2.2 打印输出及解析日期-时间对象  255\n12.3 处理不同的时区和历法  256\n12.3.1 利用和UTC/格林尼治时间的固定偏差计算时区  257\n12.3.2 使用别的日历系统  258\n12.4 小结  259\n第四部分 超越Java 8\n第13章 函数式的思考  262\n13.1 实现和维护系统  262\n13.1.1 共享的可变数据  263\n13.1.2 声明式编程  264\n13.1.3 为什么要采用函数式编程  265\n13.2 什么是函数式编程  265\n13.2.1 函数式Java编程  266\n13.2.2 引用透明性  268\n13.2.3 面向对象的编程和函数式编程的对比   268\n13.2.4 函数式编程实战  269\n13.3 递归和迭代  271\n13.4 小结  274\n第14章 函数式编程的技巧  275\n14.1 无处不在的函数  275\n14.1.1 高阶函数  275\n14.1.2 科里化  277\n14.2 持久化数据结构  278\n14.2.1 破坏式更新和函数式更新的比较  279\n14.2.2 另一个使用Tree的例子  281\n14.2.3 采用函数式的方法  282\n14.3 Stream的延迟计算  283\n14.3.1 自定义的Stream   283\n14.3.2 创建你自己的延迟列表  286\n14.4 模式匹配  290\n14.4.1 访问者设计模式  291\n14.4.2 用模式匹配力挽狂澜  292\n14.5 杂项  295\n14.5.1 缓存或记忆表  295\n14.5.2 “返回同样的对象”意味着什么  296\n14.5.3 结合器  296\n14.6 小结  297\n第15章 面向对象和函数式编程的混合:Java 8和Scala的比较   299\n15.1 Scala简介  300\n15.1.1 你好,啤酒  300\n15.1.2 基础数据结构:List、Set、Map、Tuple、Stream以及Option  302\n15.2 函数  306\n15.2.1 Scala中的一等函数  307\n15.2.2 匿名函数和闭包  307\n15.2.3 科里化  309\n15.3 类和trait  310\n15.3.1 更加简洁的Scala类  310\n15.3.2 Scala的trait与Java 8的接口对比  311\n15.4 小结  312\n第16章 结论以及Java的未来  313\n16.1 回顾Java 8的语言特性   313\n16.1.1 行为参数化(Lambda 以及方法引用)  314\n16.1.2 流  314\n16.1.3 CompletableFuture  315\n16.1.4 Optional  315\n16.1.5 默认方法  316\n16.2 Java 的未来  316\n16.2.1 集合  316\n16.2.2 类型系统的改进  317\n16.2.3 模式匹配  318\n16.2.4 更加丰富的泛型形式  319\n16.2.5 对不变性的更深层支持  321\n16.2.6 值类型  322\n16.3 写在最后的话  325\n附录A 其他语言特性的更新  326\n附录B 类库的更新  330\n附录C 如何以并发方式在同一个流上执行多种操作  338\n附录D Lambda表达式和JVM 字节码  346","pages":"349","images":{"small":"https://img1.doubanio.com/view/subject/s/public/s29343267.jpg","large":"https://img1.doubanio.com/view/subject/l/public/s29343267.jpg","medium":"https://img1.doubanio.com/view/subject/m/public/s29343267.jpg"},"alt":"https://book.douban.com/subject/26772632/","id":"26772632","publisher":"人民邮电出版社","isbn10":"7115419345","isbn13":"9787115419347","title":"Java 8实战","url":"https://api.douban.com/v2/book/26772632","alt_title":"","author_intro":"作者简介:\nRaoul-Gabriel Urma\n剑桥大学计算机科学博士,软件工程师,演讲者,培训师,Cambridge Coding Academy联合创始人、CEO。曾与谷歌、eBay、甲骨文和高盛集团等大公司合作,并参与过多个创业项目。撰写过十余篇经同行审阅的技术文章,并在国际会议上发表过40多篇演讲。\nMario Fusco\nRed Hat高级软件工程师,负责JBoss规则引擎Drools的核心开发。拥有丰富的Java开发经验,曾领导媒体公司、金融部门等多个行业的企业级项目开发。对函数式编程和领域特定语言等有浓厚兴趣,并创建了开放源码库lambdaj。\nAlan Mycroft\n剑桥大学计算机实验室计算学教授,剑桥大学罗宾逊学院研究员,欧洲编程语言和系统协会联合创始人,树莓派基金会联合创始人和理事。发表过大约100篇研究论文,指导过20多篇博士论文。他的研究主要关注编程语言及其语义、优化和实施。他与业界联系紧密,曾于学术休假期间在AT&T实验室和英特尔工作,还创立了Codemist公司,该公司设计了最初的ARM C编译器Norcroft。\n译者简介:\n陆明刚\n毕业于四川大学,目前在EMC中国卓越研发集团任首席工程师,曾任趋势科技中国软件研发中心技术经理,在信息科学和工程领域有十余年的实践和研究经验,拥有多项中国及美国专利。关注JVM性能调优和大数据及其实践,喜欢挖掘技术背后的内幕并乐此不疲。\n劳佳\n硕士毕业于上海交通大学,现在SAP美国任高级软件支持顾问。业余爱好语言、数学、设计,近年翻译出版了《咨询的奥秘》《卓越程序员密码》等书。","summary":"本书全面介绍了Java 8 这个里程碑版本的新特性,包括Lambdas、流和函数式编程。有了函数式的编程特性,可以让代码更简洁,同时也能自动化地利用多核硬件。全书分四个部分:基础知识、函数式数据处理、高效Java 8 编程和超越Java 8,清晰明了地向读者展现了一幅Java 与时俱进的现代化画卷。","price":"CNY 79.00"},"9787111321545":{"rating":{"max":10,"numRaters":690,"average":"8.2","min":0},"subtitle":"","author":["许晓斌"],"pubdate":"2010年12月","tags":[{"count":559,"name":"Maven","title":"Maven"},{"count":312,"name":"Java","title":"Java"},{"count":246,"name":"系统构建&自动化","title":"系统构建&自动化"},{"count":106,"name":"编程","title":"编程"},{"count":94,"name":"计算机","title":"计算机"},{"count":85,"name":"软件工程","title":"软件工程"},{"count":79,"name":"软件开发","title":"软件开发"},{"count":57,"name":"敏捷开发","title":"敏捷开发"}],"origin_title":"","image":"https://img3.doubanio.com/view/subject/m/public/s4524240.jpg","binding":"平装","translator":[],"catalog":"1. Maven简介\n1.1 何为Maven\n1.2 为什么需要Maven\n1.3 Maven与极限编程\n1.4 被误解的Maven\n2. Maven安装\n2.1 在Windows上安装Maven\n2.2 在基于Unix的系统上安装Maven\n2.3 安装目录分析\n2.4 设置HTTP代理\n2.5 安装m2eclipse\n2.6 安装NetBeans Maven插件\n2.7 Maven安装最佳实践\n3. Hello World\n3.1 编写POM\n3.2 编写主代码\n3.3 编写测试代码\n3.4 打包和运行\n3.5 使用Archetype生成项目骨架\n3.6 m2eclipse简单使用\n3.7 NetBeans Maven插件简单使用\n4. 背景案例\n4.1 简单的账户注册服务\n4.2 需求阐述\n4.3 简要设计\n5. 坐标和依赖\n5.1 何为Maven坐标\n5.2 坐标详解\n5.3 account-email\n5.4 依赖的配置\n5.5 依赖范围\n5.6 传递性依赖\n5.7 依赖调解\n5.8 可选依赖\n5.9 最佳实践\n6. 仓库\n6.1 何为Maven仓库\n6.2 仓库的布局\n6.3 仓库的分类\n6.4 远程仓库的配置\n6.5 快照版本\n6.6 从仓库解析依赖的机制\n6.7 镜像\n6.8 仓库搜索服务\n7. 生命周期和插件\n7.1 何为生命周期\n7.2 生命周期详解\n7.3 插件目标\n7.4 插件绑定\n7.5 插件配置\n7.6 获取插件信息\n7.7 从命令行调用插件\n7.8 插件解析机制\n8. 聚合与继承\n8.1 account-persist\n8.2 聚合\n8.3 继承\n8.4 聚合与继承的关系\n8.5 约定优于配置\n8.6 反应堆\n9. 使用 Nexus 创建私服\n9.1 Nexus简介\n9.2 安装Nexus\n9.3 Nexus的仓库与仓库组\n9.4 Nexus的索引与构件搜索\n9.5 配置Maven从Nexus下载构件\n9.6 部署构件至Nexus\n9.7 Nexus的权限管理\n9.8 Nexus的调度任务\n9.9 其他私服软件\n10. 使用 Maven 进行测试\n10.1 account-captcha\n10.2 maven-surefire-plugin简介\n10.3 跳过测试\n10.4 动态指定要运行的测试用例\n10.5 包含与排除测试用例\n10.6 测试报告\n10.7 运行TestNG测试\n10.8 重用测试代码\n11. 使用 Hudson 进行持续集成\n11.1 持续集成的作用、过程和优势\n11.2 Hudson简介\n11.3 安装Hudson\n11.4 准备Subversion仓库\n11.5 Hudson的基本系统设置\n11.6 创建Hudson任务\n11.7 监视Hudson任务状态\n11.8 Hudson用户管理\n11.9 邮件反馈\n11.10 Hudson工作目录\n12. 构建 Web 应用\n12.1 Web项目的基本结构\n12.2 account-service\n12.3 account-web\n12.4 使用jetty-maven-plugin进行测试\n12.5 使用Cargo实现自动化部署\n13. 版本管理\n13.1 何为版本管理\n13.2 Maven的版本号定义约定\n13.3 主干、标签与分支\n13.4 自动化版本发布\n13.5 自动化创建分支\n13.6 GPG签名\n14. 灵活的构建\n14.1 Maven属性\n14.2 构建环境的差异\n14.3 资源过滤\n14.4 Maven Profile\n14.5 Web资源过滤\n14.6 在Profile中激活集成测试\n15. 生成项目站点\n15.1 最简单的站点\n15.2 丰富项目信息\n15.3 项目报告插件\n15.4 自定义站点外观\n15.5 创建自定义页面\n15.6 国际化\n15.7 部署站点\n16. m2eclipse\n16.1 m2eclipse简介\n16.2 安装m2eclipse\n16.3 新建Maven项目\n16.4 导入Maven项目\n16.5 执行mvn命令\n16.6 访问Maven仓库\n16.7 管理项目依赖\n16.8 其它实用功能\n17. 编写 Maven 插件\n17.1 编写Maven插件的一般步骤\n17.2 代码行统计Maven插件\n17.3 Mojo标注\n17.4 Mojo参数\n17.5 错误处理和日志\n17.6 测试Maven插件\n18. Archetype\n18.1 Archetype使用再叙\n18.2 编写Archetype\n18.3 Archetype Catalog","ebook_url":"https://read.douban.com/ebook/15131794/","pages":"361","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s4524240.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s4524240.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s4524240.jpg"},"alt":"https://book.douban.com/subject/5345682/","id":"5345682","publisher":"机械工业出版社","isbn10":"7111321545","isbn13":"9787111321545","title":"Maven实战","url":"https://api.douban.com/v2/book/5345682","alt_title":"","author_intro":"许晓斌(Juven Xu),国内社区公认的Maven技术专家、Maven中文用户组创始人、Maven技术的先驱和积极推动者。对Maven有深刻的认识,实战经验丰富,不仅撰写了大量关于Maven的技术文章,而且还翻译了开源书籍《Maven权威指南》,对Maven技术在国内的普及和发展做出了很大的贡献。就职于Maven之父的公司,负责维护Maven中央仓库,是Maven仓库管理器Nexus(著名开源软件)的核心开发者之一,曾多次受邀到淘宝等大型企业开展Maven方面的培训。此外,他还是开源技术的积极倡导者和推动者,擅长Java开发和敏捷开发实践。","summary":"你是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven——这一Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等超酷的特性,已经有无数的开源项目使用它来构建项目并促进团队交流,每天都有数以万计的开发者在访问中央仓库以获取他们需要的依赖。\n本书内容全面而系统,Maven的原理、使用方法和高级应用尽含其中;注重实战是本书的另一个特点,不仅在各个知识点都辅有大量的小案例,而且还有一个综合性的案例贯穿全书。如果你想使用Maven,或正在使用Maven,本书将给你绝佳的指导。\n本书讨论专区:http://www.juvenxu.com/mvn-in-action/","ebook_price":"25.00","series":{"id":"19972","title":"实战系列"},"price":"65.00元"},"9787115453686":{"rating":{"max":10,"numRaters":108,"average":"7.8","min":0},"subtitle":"Netty IN ACTION","author":["诺曼·毛瑞尔(Norman Maurer)","马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal)"],"pubdate":"2017-5-1","tags":[{"count":121,"name":"Netty","title":"Netty"},{"count":76,"name":"Java","title":"Java"},{"count":63,"name":"网络编程","title":"网络编程"},{"count":35,"name":"Netty实战","title":"Netty实战"},{"count":21,"name":"网络","title":"网络"},{"count":20,"name":"计算机","title":"计算机"},{"count":14,"name":"分布式","title":"分布式"},{"count":12,"name":"性能优化","title":"性能优化"}],"origin_title":"Netty IN ACTION","image":"https://img3.doubanio.com/view/subject/m/public/s29444565.jpg","binding":"平装","translator":["何品"],"catalog":"第一部分 Netty的概念及体系结构\n第1 章 Netty——异步和事件驱动 3\n1.1 Java 网络编程 4\n1.1.1 Java NIO 5\n1.1.2 选择器 6\n1.2 Netty 简介 6\n1.2.1 谁在使用Netty 7\n1.2.2 异步和事件驱动 8\n1.3 Netty 的核心组件 9\n1.3.1 Channel 9\n1.3.2 回调 9\n1.3.3 Future 10\n1.3.4 事件和ChannelHandler 11\n1.3.5 把它们放在一起 12\n1.4 小结 13\n第2 章 你的第一款Netty应用程序 14\n2.1 设置开发环境 14\n2.1.1 获取并安装Java 开发工具包 14\n2.1.2 下载并安装IDE 15\n2.1.3 下载和安装Apache Maven 15\n2.1.4 配置工具集 16\n2.2 Netty 客户端/服务器概览 16\n2.3 编写Echo 服务器 17\n2.3.1 ChannelHandler 和业务逻辑 17\n2.3.2 引导服务器 18\n2.4 编写Echo 客户端 21\n2.4.1 通过ChannelHandler 实现客户端逻辑 21\n2.4.2 引导客户端 22\n2.5 构建和运行Echo 服务器和客户端 24\n2.5.1 运行构建 24\n2.5.2 运行Echo 服务器和客户端 27\n2.6 小结 29\n第3 章 Netty 的组件和设计 30\n3.1 Channel、EventLoop 和ChannelFuture 30\n3.1.1 Channel 接口 31\n3.1.2 EventLoop 接口 31\n3.1.3 ChannelFuture 接口 32\n3.2 ChannelHandler 和ChannelPipeline 32\n3.2.1 ChannelHandler 接口 32\n3.2.2 ChannelPipeline 接口 33\n3.2.3 更加深入地了解ChannelHandler 34\n3.2.4 编码器和解码器 35\n3.2.5 抽象类SimpleChannelInboundHandler 35\n3.3 引导 36\n3.4 小结 37\n第4 章 传输 38\n4.1 案例研究:传输迁移 38\n4.1.1 不通过Netty 使用OIO和NIO 39\n4.1.2 通过Netty 使用OIO和NIO 41\n4.1.3 非阻塞的Netty 版本 42\n4.2 传输API 43\n4.3 内置的传输 45\n4.3.1 NIO——非阻塞I/O 46\n4.3.2 Epoll——用于Linux的本地非阻塞传输 47\n4.3.3 OIO——旧的阻塞I/O 48\n4.3.4 用于JVM 内部通信的Local 传输 48\n4.3.5 Embedded 传输 49\n4.4 传输的用例 49\n4.5 小结 51\n第5 章 ByteBuf 52\n5.1 ByteBuf 的API 52\n5.2 ByteBuf 类——Netty的数据容器 53\n5.2.1 它是如何工作的 53\n5.2.2 ByteBuf 的使用模式 53\n5.3 字节级操作 57\n5.3.1 随机访问索引 57\n5.3.2 顺序访问索引 57\n5.3.3 可丢弃字节 58\n5.3.4 可读字节 58\n5.3.5 可写字节 59\n5.3.6 索引管理 59\n5.3.7 查找操作 60\n5.3.8 派生缓冲区 60\n5.3.9 读/写操作 62\n5.3.10 更多的操作 64\n5.4 ByteBufHolder 接口 65\n5.5 ByteBuf 分配 65\n5.5.1 按需分配:ByteBufAllocator 接口 65\n5.5.2 Unpooled 缓冲区 67\n5.5.3 ByteBufUtil 类 67\n5.6 引用计数 67\n5.7 小结 68\n第6 章 ChannelHandler 和ChannelPipeline 70\n6.1 ChannelHandler 家族 70\n6.1.1 Channel 的生命周期 70\n6.1.2 ChannelHandler的生命周期 71\n6.1.3 ChannelInboundHandler接口 71\n6.1.4 ChannelOutboundHandler接口 73\n6.1.5 ChannelHandler 适配器 74\n6.1.6 资源管理 74\n6.2 ChannelPipeline 接口 76\n6.2.1 修改ChannelPipeline 78\n6.2.2 触发事件 79\n6.3 ChannelHandlerContext接口 80\n6.3.1 使用ChannelHandlerContext 82\n6.3.2 ChannelHandler 和ChannelHandlerContext 的高级用法 84\n6.4 异常处理 86\n6.4.1 处理入站异常 86\n6.4.2 处理出站异常 87\n6.5 小结 88\n第7 章 EventLoop 和线程模型 89\n7.1 线程模型概述 89\n7.2 EventLoop 接口 90\n7.2.1 Netty 4 中的I/O 和事件处理 92\n7.2.2 Netty 3 中的I/O 操作 92\n7.3 任务调度 93\n7.3.1 JDK 的任务调度API 93\n7.3.2 使用EventLoop调度任务 94\n7.4 实现细节 95\n7.4.1 线程管理 95\n7.4.2 EventLoop/线程的分配 96\n7.5 小结 98\n第8 章 引导 99\n8.1 Bootstrap 类 99\n8.2 引导客户端和无连接协议 101\n8.2.1 引导客户端 102\n8.2.2 Channel 和EventLoopGroup 的兼容性 103\n8.3 引导服务器 104\n8.3.1 ServerBootstrap 类 104\n8.3.2 引导服务器 105\n8.4 从Channel引导客户端 107\n8.5 在引导过程中添加多个ChannelHandler 108\n8.6 使用Netty 的ChannelOption 和属性 110\n8.7 引导DatagramChannel 111\n8.8 关闭 112\n8.9 小结 112\n第9 章 单元测试 113\n9.1 EmbeddedChannel概述 113\n9.2 使用EmbeddedChannel测试ChannelHandler 115\n9.2.1 测试入站消息 115\n9.2.2 测试出站消息 118\n9.3 测试异常处理 119\n9.4 小结 121\n第二部分 编解码器\n第10 章 编解码器框架 125\n10.1 什么是编解码器 125\n10.2 解码器 125\n10.2.1 抽象类ByteToMessageDecoder 126\n10.2.2 抽象类ReplayingDecoder 127\n10.2.3 抽象类MessageToMessageDecoder 128\n10.2.4 TooLongFrameException 类 130\n10.3 编码器 131\n10.3.1 抽象类MessageToByteEncoder 131\n10.3.2 抽象类MessageToMessageEncoder 132\n10.4 抽象的编解码器类 133\n10.4.1 抽象类ByteToMessageCodec 133\n10.4.2 抽象类MessageToMessageCodec 134\n10.4.3 CombinedChannelDuplexHandler 类 137\n10.5 小结 138\n第11 章 预置的ChannelHandler和编解码器 139\n11.1 通过SSL/TLS 保护Netty 应用程序 139\n11.2 构建基于Netty 的HTTP/HTTPS 应用程序 141\n11.2.1 HTTP 解码器、编码器和编解码器 141\n11.2.2 聚合HTTP 消息 143\n11.2.3 HTTP 压缩 144\n11.2.4 使用HTTPS 145\n11.2.5 WebSocket 146\n11.3 空闲的连接和超时 148\n11.4 解码基于分隔符的协议和基于长度的协议 150\n11.4.1 基于分隔符的协议 150\n11.4.2 基于长度的协议 153\n11.5 写大型数据 155\n11.6 序列化数据 1 57\n11.6.1 JDK 序列化 157\n11.6.2 使用JBoss Marshalling进行序列化 157\n11.6.3 通过Protocol Buffers序列化 159\n11.7 小结 160\n第三部分 网络协议\n第12 章 WebSocket 163\n12.1 WebSocket 简介 163\n12.2 我们的WebSocket 示例应用程序 164\n12.3 添加WebSocket支持 165\n12.3.1 处理HTTP 请求 165\n12.3.2 处理WebSocket 帧 168\n12.3.3 初始化ChannelPipeline 169\n12.3.4 引导 171\n12.4 测试该应用程序 173\n12.5 小结 176\n第13章 使用UDP 广播事件 177\n13.1 UDP 的基础知识 177\n13.2 UDP 广播 178\n13.3 UDP 示例应用程序 178\n13.4 消息 POJO:LogEvent 179\n13.5 编写广播者 180\n13.6 编写监视器 185\n13.7 运行LogEventBroadcaster 和LogEventMonitor 187\n13.8 小结 189\n第四部分 案例研究\n第14 章 案例研究,第一部分 193\n14.1 Droplr—构建移动服务 193\n14.1.1 这一切的起因 193\n14.1.2 Droplr 是怎样工作的 194\n14.1.3 创造一个更加快速的上传体验 194\n14.1.4 技术栈 196\n14.1.5 性能 199\n14.1.6 小结——站在巨人的肩膀上 200\n14.2 Firebase—实时的数据同步服务 200\n14.2.1 Firebase 的架构 201\n14.2.2 长轮询 201\n14.2.3 HTTP 1.1 keep-alive和流水线化 204\n14.2.4 控制SslHandler 205\n14.2.5 Firebase 小结 207\n14.3 Urban Airship—构建移动服务 207\n14.3.1 移动消息的基础知识 207\n14.3.2 第三方递交 208\n14.3.3 使用二进制协议的例子 209\n14.3.4 直接面向设备的递交 211\n14.3.5 Netty 擅长管理大量的并发连接 212\n14.3.6 Urban Airship 小结——跨越防火墙边界 213\n14.4 小结 214\n第15 章 案例研究,第二部分 215\n15.1 Netty 在Facebook 的使用:Nifty 和Swift 215\n15.1.1 什么是Thrift 215\n15.1.2 使用Netty 改善Java Thrift 的现状 216\n15.1.3 Nifty 服务器的设计 217\n15.1.4 Nifty 异步客户端的设计 220\n15.1.5 Swift:一种更快的构建Java Thrift 服务的方式 221\n15.1.6 结果 221\n15.1.7 Facebook 小结 224\n15.2 Netty 在Twitter的使用:Finagle 224\n15.2.1 Twitter 成长的烦恼 224\n15.2.2 Finagle 的诞生 224\n15.2.3 Finagle 是如何工作的 225\n15.2.4 Finagle 的抽象 230\n15.2.5 故障管理 231\n15.2.6 组合服务 232\n15.2.7 未来:Netty 232\n15.2.8 Twitter 小结 233\n15.3 小结 233\n附录 Maven 介绍 234","pages":"276","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s29444565.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s29444565.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s29444565.jpg"},"alt":"https://book.douban.com/subject/27038538/","id":"27038538","publisher":"人民邮电出版社","isbn10":"7115453683","isbn13":"9787115453686","title":"Netty实战","url":"https://api.douban.com/v2/book/27038538","alt_title":"Netty IN ACTION","author_intro":"Norman Maurer,是苹果公司的资深软件工程师,同时也是Netty的核心开发人员。\nMarvin Allen Wolfthal,是Dell Services的顾问,他使用Netty实现了多个任务关键型的企业系统。\n何品,目前是淘宝的一名资深软件工程师,热爱网络、并发、异步相关的主题以及函数式编程,同时也是Netty、Akka等项目的贡献者,活跃于Scala社区,目前也在从事GraphQL相关的开发工作。","summary":"编辑推荐\n\n- Netty之父”Trustin Lee作序推荐\n- 阿里巴巴中间件高级技术专家为本书中文版作序推荐\n- 系统而详细地介绍了Netty的各个方面并附带了即用型的优质示例\n- 附带行业一线公司的案例研究\n- 极实用的Netty技术书\n无论是构建高性能的Web、游戏服务器、推送系统、RPC框架、消息中间件还是分布式大数据处理引擎,都离不开Netty,在整个行业中,Netty广泛而成功的应用,使其成为了Java高性能网络编程的卓绝框架。\nNetty的现Tech Lead Norman在本书中循序渐进地讲解了Netty的各个关键部分,在看完本书后,你不但可以熟练地使用Netty来构建以上系统,并且还可以避免很多常见的陷阱。\n无论是想要学习Spring 5 、Spark、Cassandra等这样的系统,还是通过学习Netty来构建自己的基于Java的高性能网络框架,或者是更加具体的高性能Web或者游戏服务器等,本书都将是你的超强拍档。\n本书中文版基于Netty4.1.9做了修订,希望本书能够给你带来一个接近完美的阅读体验,并能帮到你。\n内容提要\n本书是为想要或者正在使用Java从事高性能网络编程的人而写的,循序渐进地介绍了Netty各个方面的内容。\n本书共分为4个部分:第一部分详细地介绍Netty的相关概念以及核心组件,第二部分介绍自定义协议经常用到的编解码器,第三部分介绍Netty对于应用层高级协议的支持,会覆盖常见的协议及其在实践中的应用,第四部分是几个案例研究。此外,附录部分还会简单地介绍Maven,以及如何通过使用Maven编译和运行本书中的示例。\n阅读本书不需要读者精通Java网络和并发编程。如果想要更加深入地理解本书背后的理念以及Netty源码本身,可以系统地学习一下Java网络编程、NIO、并发和异步编程以及相关的设计模式。\n本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。","price":"69.00"},"9787121258015":{"rating":{"max":10,"numRaters":96,"average":"6.7","min":0},"subtitle":"","author":["李林锋"],"pubdate":"2015-4-20","tags":[{"count":105,"name":"netty","title":"netty"},{"count":53,"name":"Java","title":"Java"},{"count":44,"name":"nio","title":"nio"},{"count":34,"name":"网络编程","title":"网络编程"},{"count":19,"name":"java","title":"java"},{"count":12,"name":"编程","title":"编程"},{"count":12,"name":"netty权威指南","title":"netty权威指南"},{"count":10,"name":"网络","title":"网络"}],"origin_title":"李林锋","image":"https://img3.doubanio.com/view/subject/m/public/s28055322.jpg","binding":"平装","translator":[],"catalog":"基础篇走进Java NIO\n第1 章Java 的I/O 演进之路.2\n1.1 I/O 基础入门...............3\n1.1.1 Linux 网络I/O 模型简介.......3\n1.1.2 I/O 多路复用技术.................6\n1.2 Java 的I/O 演进..........8\n1.3 总结............................ 10\n第2 章NIO 入门.................... 11\n2.1 传统的BIO 编程....... 11\n2.1.1 BIO 通信模型图.................. 12\n2.1.2 同步阻塞式I/O 创建的TimeServer 源码分析............. 13\n2.1.3 同步阻塞式I/O 创建的TimeClient 源码分析.......... 16\n2.2 伪异步I/O 编程........ 18\n2.2.1 伪异步I/O 模型图.............. 19\n2.2.2 伪异步I/O 创建的TimeServer 源码分析..... 19\n2.2.3 伪异步I/O 弊端分析........... 21\n2.3 NIO 编程.................... 24\n2.3.1 NIO 类库简介.. 24\n2.3.2 NIO 服务端序列图.............. 28\n2.3.3 NIO 创建的TimeServer 源码分析................ 30\n2.3.4 NIO 客户端序列图.............. 36\n2.3.5 NIO 创建的TimeClient 源码分析................ 39\n2.4 AIO 编程.................... 45\n2.4.1 AIO 创建的TimeServer 源码分析................ 46\n2.4.2 AIO 创建的TimeClient 源码分析................ 51\n2.4.3 AIO 版本时间服务器运行结果.................... 56\n2.5 4 种I/O 的对比......... 58\n2.5.1 概念澄清.......... 58\n2.5.2 不同I/O 模型对比.............. 59\n2.6 选择Netty 的理由..... 60\n2.6.1 不选择Java 原生NIO 编程的原因............... 61\n2.6.2 为什么选择Netty ................ 62\n2.7 总结............................ 63\n入门篇 Netty NIO 开发指南\n第3 章Netty 入门应用.......... 66\n3.1 Netty 开发环境的搭建................ 66\n3.1.1 下载Netty 的软件包........... 67\n3.1.2 搭建Netty 应用工程........... 67\n3.2 Netty 服务端开发...... 68\n3.3 Netty 客户端开发...... 73\n3.4 运行和调试................ 76\n3.4.1 服务端和客户端的运行...... 76\n3.4.2 打包和部署...... 77\n3.5 总结............................ 77\n第4 章TCP 粘包/拆包问题的解决之道...... 79\n4.1 TCP 粘包/拆包.......... 79\n4.1.1 TCP 粘包/拆包问题说明..... 80\n4.1.2 TCP 粘包/拆包发生的原因....... 80\n4.1.3 粘包问题的解决策略.......... 81\n4.2 未考虑TCP 粘包导致功能异常案例................. 82\n4.2.1 TimeServer 的改造.............. 82\n4.2.2 TimeClient 的改造............... 83\n4.2.3 运行结果.......... 84\n4.3 利用LineBasedFrameDecoder 解决TCP 粘包问题................ 85\n4.3.1 支持TCP 粘包的TimeServer ....................... 86\n4.3.2 支持TCP 粘包的TimeClient........................ 88\n4.3.3 运行支持TCP 粘包的时间服务器程序........ 90\n4.3.4 LineBasedFrameDecoder 和StringDecoder 的原理分析........... 91\n4.4 总结............................ 92\n第5 章分隔符和定长解码器的应用...... 93\n5.1 DelimiterBasedFrameDecoder 应用开发............. 94\n5.1.1 DelimiterBasedFrameDecoder 服务端开发.... 94\n5.1.2 DelimiterBasedFrameDecoder 客户端开发.... 97\n5.1.3 运行DelimiterBasedFrameDecoder 服务端和客户端............... 99\n5.2 FixedLengthFrameDecoder 应用开发............... 101\n5.2.1 FixedLengthFrameDecoder 服务端开发...... 101\n5.2.2 利用telnet 命令行测试EchoServer 服务端......103\n5.3 总结.......................... 104\n中级篇 Netty 编解码开发指南\n第6 章编解码技术.............. 106\n6.1 Java 序列化的缺点 ...... 107\n6.1.1 无法跨语言.... 107\n6.1.2 序列化后的码流太大........ 107\n6.1.3 序列化性能太低................ 110\n6.2 业界主流的编解码框架............ 113\n6.2.1 Google 的Protobuf 介绍.... 113\n6.2.2 Facebook 的Thrift 介绍.... 115\n6.2.3 JBoss Marshalling 介绍..... 116\n6.3 总结.......................... 117\n第7 章MessagePack 编解码............... 118\n7.1 MessagePack 介绍... 118\n7.1.1 MessagePack 多语言支持.. 119\n7.1.2 MessagePack Java API 介绍........................ 119\n7.1.3 MessagePack 开发包下载. 120\n7.2 MessagePack 编码器和解码器开发................. 120\n7.2.1 MessagePack 编码器开发....... 120\n7.2.2 MessagePack 解码器开发 ...... 121\n7.2.3 功能测试........ 121\n7.3 粘包/半包支持......... 124\n7.4 总结.......................... 127\n第8 章Google Protobuf 编解码.......... 128\n8.1 Protobuf 的入门....... 129\n8.1.1 Protobuf 开发环境搭建..... 129\n8.1.2 Protobuf 编解码开发......... 131\n8.1.3 运行Protobuf 例程............ 133\n8.2 Netty 的Protobuf 服务端开发.. 133\n8.2.1 Protobuf 版本的图书订购服务端开发........ 134\n8.2.2 Protobuf 版本的图书订购客户端开发........ 136\n8.2.3 Protobuf 版本的图书订购程序功能测试.... 139\n8.3 Protobuf 的使用注意事项......... 140\n8.4 总结.......................... 142\n第9 章JBoss Marshalling 编解码....... 143\n9.1 Marshalling 开发环境准备........ 143\n9.2 Netty 的Marshalling 服务端开发..................... 144\n9.3 Netty 的Marshalling 客户端开发..................... 147\n9.4 运行Marshalling 客户端和服务端例程........... 149\n9.5 总结.......................... 150\n高级篇 Netty 多协议开发和应用\n第10 章HTTP 协议开发应用............... 154\n10.1 HTTP 协议介绍..... 155\n10.1.1 HTTP 协议的URL .......... 155\n10.1.2 HTTP 请求消息(HttpRequest).............. 155\n10.1.3 HTTP 响应消息(HttpResponse)........... 158\n10.2 Netty HTTP 服务端入门开发....... 159\n10.2.1 HTTP 服务端例程场景描述..................... 160\n10.2.2 HTTP 服务端开发........... 160\n10.2.3 Netty HTTP 文件服务器例程运行结果.... 166\n10.3 Netty HTTP+XML 协议栈开发....................... 170\n10.3.1 开发场景介绍................. 171\n10.3.2 HTTP+XML 协议栈设计.......174\n10.3.3 高效的XML 绑定框架JiBx ..................... 175\n10.3.4 HTTP+XML 编解码框架开发.................. 183\n10.3.5 HTTP+XML 协议栈测试....... 199\n10.3.6 小结............. 201\n10.4 总结........................ 202\n第11 章WebSocket 协议开发............. 203\n11.1 HTTP 协议的弊端....... 204\n11.2 WebSocket 入门..... 204\n11.2.1 WebSocket 背景............... 205\n11.2.2 WebSocket 连接建立....... 206\n11.2.3 WebSocket 生命周期....... 207\n11.2.4 WebSocket 连接关闭....... 208\n11.3 Netty WebSocket 协议开发..... 209\n11.3.1 WebSocket 服务端功能介绍..................... 209\n11.3.2 WebSocket 服务端开发.... 210\n11.3.3 运行WebSocket 服务端... 218\n11.4 总结........................ 219\n第12 章私有协议栈开发.... 221\n12.1 私有协议介绍........ 221\n12.2 Netty 协议栈功能设计............ 223\n12.2.1 网络拓扑图.. 223\n12.2.2 协议栈功能描述.............. 224\n12.2.3 通信模型...... 224\n12.2.4 消息定义...... 225\n12.2.5 Netty 协议支持的字段类型...................... 226\n12.2.6 Netty 协议的编解码规范. 227\n12.2.7 链路的建立.. 229\n12.2.8 链路的关闭.. 230\n12.2.9 可靠性设计.. 230\n12.2.10 安全性设计 232\n12.2.11 可扩展性设计................ 232\n12.3 Netty 协议栈开发.. 233\n12.3.1 数据结构定义................. 233\n12.3.2 消息编解码.. 237\n12.3.3 握手和安全认证.............. 241\n12.3.4 心跳检测机制................. 245\n12.3.5 断连重连...... 248\n12.3.6 客户端代码.. 249\n12.3.7 服务端代码.. 251\n12.4 运行协议栈............ 252\n12.4.1 正常场景...... 252\n12.4.2 异常场景:服务端宕机重启.................... 253\n12.4.3 异常场景:客户端宕机重启.................... 256\n12.5 总结........................ 256\n第13 章服务端创建............ 258\n13.1 原生NIO 类库的复杂性......... 259\n13.2 Netty 服务端创建源码分析.... 259\n13.2.1 Netty 服务端创建时序图. 260\n13.2.2 Netty 服务端创建源码分析...................... 263\n13.3 客户端接入源码分析.............. 272\n13.4 总结........................ 275\n第14 章客户端创建............ 276\n14.1 Netty 客户端创建流程分析.... 276\n14.2.1 Netty 客户端创建时序图. 276\n14.2.2 Netty 客户端创建流程分析...................... 277\n14.2 Netty 客户端创建源码分析.... 278\n14.2.1 客户端连接辅助类Bootstrap.................... 278\n14.2.2 客户端连接操作.............. 281\n14.2.3 异步连接结果通知.......... 283\n14.2.4 客户端连接超时机制...... 284\n14.3 总结........................ 286\n源码分析篇 Netty 功能介绍和源码分析\n第15 章ByteBuf 和相关辅助类........... 288\n15.1 ByteBuf 功能说明. 288\n15.1.1 ByteBuf 的工作原理........ 289\n15.1.2 ByteBuf 的功能介绍........ 294\n15.2 ByteBuf 源码分析. 308\n15.2.1 ByteBuf 的主要类继承关系..................... 309\n15.2.2 AbstractByteBuf 源码分析........................ 310\n15.2.3 AbstractReferenceCountedByteBuf 源码分析.................. 319\n15.2.4 UnpooledHeapByteBuf 源码分析.............. 321\n15.2.5 PooledByteBuf 内存池原理分析............... 326\n15.2.6 PooledDirectByteBuf 源码分析................. 329\n15.3 ByteBuf 相关的辅助类功能介绍.................... 332\n15.3.1 ByteBufHolder................. 332\n15.3.2 ByteBufAllocator ............. 333\n15.3.3 CompositeByteBuf ........... 334\n15.3.4 ByteBufUtil .. 336\n15.4 总结........................ 337\n第16 章Channel 和Unsafe ................. 338\n16.1 Channel 功能说明. 338\n16.1.1 Channel 的工作原理........ 339\n16.1.2 Channel 的功能介绍........ 340\n16.2 Channel 源码分析. 343\n16.2.1 Channel 的主要继承关系类图.................. 343\n16.2.2 AbstractChannel 源码分析........................ 344\n16.2.3 AbstractNioChannel 源码分析.................. 347\n16.2.4 AbstractNioByteChannel 源码分析........... 350\n16.2.5 AbstractNioMessageChannel 源码分析..... 353\n16.2.6 AbstractNioMessageServerChannel 源码分析.............. 354\n16.2.7 NioServerSocketChannel 源码分析........... 355\n16.2.8 NioSocketChannel 源码分析..................... 358\n16.3 Unsafe 功能说明... 364\n16.4 Unsafe 源码分析... 365\n16.4.1 Unsafe 继承关系类图...... 365\n16.4.2 AbstractUnsafe 源码分析. 366\n16.4.3 AbstractNioUnsafe 源码分析.................... 375\n16.4.4 NioByteUnsafe 源码分析. 379\n16.5 总结........................ 387\n第17 章ChannelPipeline 和ChannelHandler........... 388\n17.1 ChannelPipeline 功能说明....... 389\n17.1.1 ChannelPipeline 的事件处理.................... 389\n17.1.2 自定义拦截器................. 391\n17.1.3 构建pipeline 392\n17.1.4 ChannelPipeline 的主要特性.................... 393\n17.2 ChannelPipeline 源码分析....... 393\n17.2.1 ChannelPipeline 的类继承关系图............. 393\n17.2.2 ChannelPipeline 对ChannelHandler 的管理........... 393\n17.2.3 ChannelPipeline 的inbound 事件.............. 396\n17.2.4 ChannelPipeline 的outbound 事件............ 397\n17.3 ChannelHandler 功能说明....... 398\n17.3.1 ChannelHandlerAdapter 功能说明............ 399\n17.3.2 ByteToMessageDecoder 功能说明............ 399\n17.3.3 MessageToMessageDecoder 功能说明...... 400\n17.3.4 LengthFieldBasedFrameDecoder 功能说明............... 400\n17.3.5 MessageToByteEncoder 功能说明............. 404\n17.3.6 MessageToMessageEncoder 功能说明....... 404\n17.3.7 LengthFieldPrepender 功能说明............... 405\n17.4 ChannelHandler 源码分析....... 406\n17.4.1 ChannelHandler 的类继承关系图............. 406\n17.4.2 ByteToMessageDecoder 源码分析............ 407\n17.4.3 MessageToMessageDecoder 源码分析...... 410\n17.4.4 LengthFieldBasedFrameDecoder 源码分析............ 411\n17.4.5 MessageToByteEncoder 源码分析............. 415\n17.4.6 MessageToMessageEncoder 源码分析....... 416\n17.4.7 LengthFieldPrepender 源码分析............... 417\n17.5 总结........................ 418\n第18 章EventLoop 和EventLoopGroup.................... 419\n18.1 Netty 的线程模型.. 419\n18.1.1 Reactor 单线程模型......... 420\n18.1.2 Reactor 多线程模型......... 421\n18.1.3 主从Reactor 多线程模型 422\n18.1.4 Netty 的线程模型............ 423\n18.1.5 最佳实践...... 424\n18.2 NioEventLoop 源码分析......... 425\n18.2.1 NioEventLoop 设计原理.. 425\n18.2.2 NioEventLoop 继承关系类图................... 426\n18.2.3 NioEventLoop.................. 427\n18.3 总结........................ 436\n第19 章Future 和Promise .................. 438\n19.1 Future 功能............ 438\n19.2 ChannelFuture 源码分析......... 443\n19.3 Promise 功能介绍. 445\n19.4 Promise 源码分析. 447\n19.4.1 Promise 继承关系图........ 447\n19.4.2 DefaultPromise ................ 447\n19.5 总结........................ 449\n架构和行业应用篇 Netty 高级特性\n第20 章Netty 架构剖析..... 452\n20.1 Netty 逻辑架构...... 452\n20.1.1 Reactor 通信调度层......... 453\n20.1.2 职责链ChannelPipeline ... 453\n20.1.3 业务逻辑编排层(Service ChannelHandler)........... 454\n20.2 关键架构质量属性.................. 454\n20.2.1 高性能.......... 454\n20.2.2 可靠性.......... 457\n20.2.3 可定制性...... 460\n20.2.4 可扩展性...... 460\n20.3 总结........................ 460\n第21 章Java 多线程编程在Netty 中的应用............. 461\n21.1 Java 内存模型与多线程编程.. 461\n21.1.1 硬件的发展和多任务处理........................ 461\n21.1.2 Java 内存模型................. 462\n21.2 Netty 的并发编程实践............ 464\n21.2.1 对共享的可变数据进行正确的同步......... 464\n21.2.2 正确使用锁.. 465\n21.2.3 volatile 的正确使用......... 467\n21.2.4 CAS 指令和原子类......... 470\n21.2.5 线程安全类的应用.......... 472\n21.2.6 读写锁的应用................. 476\n21.2.7 线程安全性文档说明...... 477\n21.2.8 不要依赖线程优先级...... 478\n21.3 总结........................ 479\n第22 章高性能之道............ 480\n22.1 RPC 调用性能模型分析.......... 480\n22.1.1 传统RPC 调用性能差的三宗罪............... 480\n22.1.2 I/O 通信性能三原则........ 481\n22.2 Netty 高性能之道.. 482\n22.2.1 异步非阻塞通信.............. 482\n22.2.2 高效的Reactor 线程模型 482\n22.2.3 无锁化的串行设计.......... 485\n22.2.4 高效的并发编程.............. 486\n22.2.5 高性能的序列化框架...... 486\n22.2.6 零拷贝.......... 487\n22.2.7 内存池.......... 491\n22.2.8 灵活的TCP 参数配置能力....................... 494\n22.3 主流NIO 框架性能对比......... 495\n22.4 总结........................ 497\n第23 章可靠性.................... 498\n23.1 可靠性需求............ 498\n23.1.1 宕机的代价.. 498\n23.1.2 Netty 可靠性需求............ 499\n23.2 Netty 高可靠性设计................ 500\n23.2.1 网络通信类故障.............. 500\n23.2.2 链路的有效性检测.......... 507\n23.2.3 Reactor 线程的保护......... 510\n23.2.4 内存保护...... 513\n23.2.5 流量整形...... 516\n23.2.6 优雅停机接口................. 519\n23.3 优化建议................ 520\n23.3.1 发送队列容量上限控制... 520\n23.3.2 回推发送失败的消息...... 521\n23.4 总结........................ 521\n第24 章安全性.................... 522\n24.1 严峻的安全形势.... 522\n24.1.1 OpenSSL Heart bleed 漏洞.......... 522\n24.1.2 安全漏洞的代价.............. 523\n24.1.3 Netty 面临的安全风险..... 523\n24.2 Netty SSL 安全特性................. 525\n24.2.1 SSL 单向认证.................. 525\n24.2.2 SSL 双向认证.................. 532\n24.2.3 第三方CA 认证.............. 536\n24.3 Netty SSL 源码分析................. 538\n24.3.1 客户端.......... 538\n24.3.2 服务端.......... 541\n24.3.3 消息读取...... 544\n24.3.4 消息发送...... 545\n24.4 Netty 扩展的安全特性............ 546\n24.4.1 IP 地址黑名单机制.......... 547\n24.4.2 接入认证...... 548\n24.4 总结........................ 550\n第25 章Netty 未来展望..... 551\n25.1 应用范围................ 551\n25.2 技术演进................ 552\n25.3 社区活跃度............ 552\n25.4 Road Map ............... 552\n25.5 总结........................ 553\n附录A Netty 参数配置表.... 554","pages":"572","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s28055322.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s28055322.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s28055322.jpg"},"alt":"https://book.douban.com/subject/26373138/","id":"26373138","publisher":"电子工业出版社","isbn10":"7121258013","isbn13":"9787121258015","title":"Netty权威指南(第2版)","url":"https://api.douban.com/v2/book/26373138","alt_title":"李林锋","author_intro":"李林锋:Netty中国推广者,现华为技术有限公司平台中间件架构与设计部设计师,公司总裁技术创新奖获得者。长期从事高性能通信软件的架构设计和开发工作,有多年在NIO领域的设计、开发和运维经验,精通NIO编程和Netty、Mina等主流NIO框架。目前负责华为软件公司下一代SOA中间件和PaaS平台的架构设计工作。","summary":"《Netty 权威指南(第2 版)》是异步非阻塞通信领域的经典之作,基于最新版本的Netty 5.0 编写,是国内首本深入介绍Netty 原理和架构的书籍,也是作者多年实战经验的总结和浓缩。内容不仅包含Java NIO入门知识、Netty 的基础功能开发指导、编解码框架定制等,还包括私有协议栈定制和开发、Netty 核心类库源码分析,以及Netty 的架构剖析。\n\n《Netty 权威指南(第2 版)》适合架构师、设计师、软件开发工程师、测试人员以及其他对Java NIO 框架、Netty 感兴趣的相关人士阅读,通过《Netty 权威指南(第2 版)》的学习,读者不仅能够掌握Netty 基础功能的使用和开发,更能够掌握Netty 核心类库的原理和使用约束,从而在实际工作中更好地使用Netty。","price":"89"},"9787115433145":{"rating":{"max":10,"numRaters":194,"average":"7.3","min":0},"subtitle":"","author":["[美]克雷格·沃斯"],"pubdate":"2016-9","tags":[{"count":118,"name":"SpringBoot","title":"SpringBoot"},{"count":116,"name":"Spring","title":"Spring"},{"count":108,"name":"Java","title":"Java"},{"count":37,"name":"计算机","title":"计算机"},{"count":36,"name":"编程","title":"编程"},{"count":29,"name":"微服务","title":"微服务"},{"count":22,"name":"软件开发","title":"软件开发"},{"count":22,"name":"技术","title":"技术"}],"origin_title":"Spring Boot in Action","image":"https://img3.doubanio.com/view/subject/m/public/s28983685.jpg","binding":"平装","translator":["丁雪丰"],"catalog":"第1章 入门  1\n1.1 Spring风云再起  1\n1.1.1 重新认识Spring  2\n1.1.2 Spring Boot精要  3\n1.1.3 Spring Boot不是什么  6\n1.2 Spring Boot入门  6\n1.2.1 安装Spring Boot CLI  7\n1.2.2 使用Spring Initializr初始化Spring Boot项目  10\n1.3 小结  18\n第2章 开发第一个应用程序  19\n2.1 运用Spring Boot  19\n2.1.1 查看初始化的Spring Boot新项目  21\n2.1.2 Spring Boot项目构建过程解析  24\n2.2 使用起步依赖  27\n2.2.1 指定基于功能的依赖  28\n2.2.2 覆盖起步依赖引入的传递依赖  29\n2.3 使用自动配置  30\n2.3.1 专注于应用程序功能  31\n2.3.2 运行应用程序  36\n2.3.3 刚刚发生了什么  38\n2.4 小结  41\n第3章 自定义配置  42\n3.1 覆盖Spring Boot自动配置  42\n3.1.1 保护应用程序  43\n3.1.2 创建自定义的安全配置  44\n3.1.3 掀开自动配置的神秘面纱  48\n3.2 通过属性文件外置配置  49\n3.2.1 自动配置微调  50\n3.2.2 应用程序Bean的配置外置  55\n3.2.3 使用Profile进行配置  59\n3.3 定制应用程序错误页面  62\n3.4 小结  64\n第4章 测试  66\n4.1 集成测试自动配置  66\n4.2 测试Web应用程序  68\n4.2.1 模拟Spring MVC  69\n4.2.2 测试Web安全  72\n4.3 测试运行中的应用程序  74\n4.3.1 用随机端口启动服务器  75\n4.3.2 使用Selenium测试HTML页面  76\n4.4 小结  78\n第5章 Groovy与Spring Boot CLI  80\n5.1 开发Spring Boot CLI应用程序  80\n5.1.1 设置CLI项目  81\n5.1.2 通过Groovy消除代码噪声  81\n5.1.3 发生了什么  85\n5.2 获取依赖  86\n5.2.1 覆盖默认依赖版本  87\n5.2.2 添加依赖仓库  88\n5.3 用CLI运行测试  89\n5.4 创建可部署的产物  91\n5.5 小结  91\n第6章 在Spring Boot中使用Grails  93\n6.1 使用GORM进行数据持久化  93\n6.2 使用Groovy Server Pages定义视图  98\n6.3 结合Spring Boot与Grails 3  100\n6.3.1 创建新的Grails项目  100\n6.3.2 定义领域模型  103\n6.3.3 开发Grails控制器  104\n6.3.4 创建视图  105\n6.4 小结  107\n第7章 深入Actuator  108\n7.1 揭秘Actuator的端点  108\n7.1.1 查看配置明细  109\n7.1.2 运行时度量  115\n7.1.3 关闭应用程序  121\n7.1.4 获取应用信息  121\n7.2 连接Actuator的远程shell  122\n7.2.1 查看autoconfig报告  123\n7.2.2 列出应用程序的Bean  124\n7.2.3 查看应用程序的度量信息  124\n7.2.4 调用Actuator端点  125\n7.3 通过JMX监控应用程序  126\n7.4 定制Actuator  128\n7.4.1 修改端点ID  128\n7.4.2 启用和禁用端点  129\n7.4.3 添加自定义度量信息  129\n7.4.4 创建自定义跟踪仓库  132\n7.4.5 插入自定义健康指示器  134\n7.5 保护Actuator端点  136\n7.6 小结  138\n第8章 部署Spring Boot应用程序  139\n8.1 衡量多种部署方式  139\n8.2 部署到应用服务器  140\n8.2.1 构建WAR文件  141\n8.2.2 创建生产Profile  142\n8.2.3 开启数据库迁移  145\n8.3 推上云端  150\n8.3.1 部署到Cloud Foundry  150\n8.3.2 部署到Heroku  153\n8.4 小结  155\n附录A Spring Boot开发者工具  157\n附录B Spring Boot起步依赖  163\n附录C 配置属性  169\n附录D Spring Boot依赖  202","pages":"209","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s28983685.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s28983685.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s28983685.jpg"},"alt":"https://book.douban.com/subject/26857423/","id":"26857423","publisher":"人民邮电出版社","isbn10":"7115433143","isbn13":"9787115433145","title":"Spring Boot实战","url":"https://api.douban.com/v2/book/26857423","alt_title":"Spring Boot in Action","author_intro":"Craig Walls\nPivotal高级工程师,Spring Social及Spring Sync项目领导者,著名技术博主,畅销书《Spring实战》作者。他致力于推广Spring框架,笔耕不辍,亦时常作为演讲嘉宾出席各类相关会议。\n译者简介:\n丁雪丰  资深开发及运维工程师,活跃的技术图书译者,致力于推动优秀技术在国内的发展,出版了《Spring攻略》《MongoDB实战》《RESTful Web Service Cookbook中文版》等6部译著。","summary":"本书以Spring应用程序开发为中心,全面讲解如何运用Spring Boot提高效率,使应用程序的开发和管理更加轻松有趣。作者行文亲切流畅,以大量示例讲解了Spring Boot在各类情境中的应用,内容涵盖起步依赖、Spring Boot CLI、Groovy、Grails、Actuator。对于Spring Boot开发应用中较为繁琐的内容,附录奉上整理完毕的表格,一目了然,方便读者查阅。","price":"59.00元"},"9787121313011":{"rating":{"max":10,"numRaters":130,"average":"7.9","min":0},"subtitle":"","author":["翟永超"],"pubdate":"2017-5","tags":[{"count":117,"name":"微服务","title":"微服务"},{"count":90,"name":"SpringCloud","title":"SpringCloud"},{"count":81,"name":"Spring","title":"Spring"},{"count":61,"name":"Java","title":"Java"},{"count":41,"name":"架构","title":"架构"},{"count":37,"name":"计算机","title":"计算机"},{"count":32,"name":"Cloud","title":"Cloud"},{"count":23,"name":"编程","title":"编程"}],"origin_title":"","image":"https://img3.doubanio.com/view/subject/m/public/s29434190.jpg","binding":"平装","translator":[],"catalog":"第1章 基础知识\t1\n什么是微服务架构\t1\n-- 与单体系统的区别\t1\n-- 如何实施微服务\t2\n为什么选择Spring Cloud\t6\nSpring Cloud简介\t7\n版本说明\t8\n第2章 微服务构建:Spring Boot\t11\n框架简介\t12\n快速入门\t13\n-- 项目构建与解析\t13\n-- 实现RESTful API\t17\n配置详解\t20\n-- 配置文件\t20\n-- 自定义参数\t22\n-- 参数引用\t22\n-- 使用随机数\t23\n-- 命令行参数\t23\n-- 多环境配置\t24\n-- 加载顺序\t25\n监控与管理\t26\n-- 初识actuator\t27\n-- 原生端点\t28\n小结\t38\n第3章 服务治理:Spring Cloud Eureka\t39\n服务治理\t39\n-- Netflix Eureka\t40\n--搭建服务注册中心\t41\n--注册服务提供者\t43\n--高可用注册中心\t46\n--服务发现与消费\t48\nEureka详解\t51\n--基础架构\t52\n--服务治理机制\t52\n--源码分析\t56\n配置详解\t65\n--服务注册类配置\t65\n--服务实例类配置\t67\n跨平台支持\t71\n第4章 客户端负载均衡:Spring Cloud Ribbon\t73\n客户端负载均衡\t73\nRestTemplate详解\t75\n-- GET请求\t75\n-- POST请求\t77\n-- PUT请求\t79\n-- DELETE请求\t79\n源码分析\t80\n-- 负载均衡器\t91\n-- 负载均衡策略\t109\n配置详解\t123\n--自动化配置\t124\n-- Camden版本对RibbonClient配置的优化\t125\n-- 参数配置\t127\n-- 与Eureka结合\t127\n重试机制\t128\n第5章 服务容错保护:Spring Cloud Hystrix\t130\n快速入门\t131\n原理分析\t135\n-- 工作流程\t135\n-- 断路器原理\t144\n-- 依赖隔离\t148\n使用详解\t151\n-- 创建请求命令\t151\n-- 定义服务降级\t154\n-- 异常处理\t157\n-- 命令名称、分组以及线程池划分\t158\n-- 请求缓存\t159\n-- 请求合并\t166\n属性详解\t172\n-- Command属性\t174\n-- collapser属性\t184\n-- threadPool属性\t185\nHystrix仪表盘\t187\nTurbine集群监控\t192\n-- 构建监控聚合服务\t192\n-- 与消息代理结合\t196\n第6章 声明式服务调用:Spring Cloud Feign\t199\n快速入门\t200\n参数绑定\t202\n继承特性\t205\nRibbon配置\t209\n全局配置\t209\n指定服务配置\t209\n重试机制\t210\nHystrix配置\t211\n全局配置\t211\n禁用Hystrix\t211\n指定命令配置\t212\n服务降级配置\t212\n其他配置\t214\n第7章 API网关服务:Spring Cloud Zuul\t217\n快速入门\t219\n-- 构建网关\t220\n-- 请求路由\t221\n-- 请求过滤\t223\n路由详解\t226\n-- 传统路由配置\t226\n-- 服务路由配置\t228\n-- 服务路由的默认规则\t229\n-- 自定义路由映射规则\t229\n-- 路径匹配\t230\n-- 路由前缀\t233\n-- 本地跳转\t234\n-- Cookie与头信息\t235\n-- Hystrix和Ribbon支持\t236\n过滤器详解\t238\n-- 过滤器\t238\n-- 请求生命周期\t239\n-- 核心过滤器\t240\n-- 异常处理\t244\n-- 禁用过滤器\t256\n动态加载\t257\n-- 动态路由\t257\n-- 动态过滤器\t261\n第8章 分布式配置中心:Spring Cloud Config\t267\n快速入门\t267\n-- 构建配置中心\t268\n-- 配置规则详解\t269\n-- 客户端配置映射\t272\n服务端详解\t274\n-- 基础架构\t274\n-- Git配置仓库\t276\n-- SVN配置仓库\t279\n-- 本地仓库\t279\n-- 本地文件系统\t279\n-- 健康监测\t280\n-- 属性覆盖\t281\n-- 安全保护\t281\n-- 加密解密\t282\n-- 高可用配置\t286\n客户端详解\t286\n-- URI指定配置中心\t287\n-- 服务化配置中心\t287\n-- 失败快速响应与重试\t290\n-- 获取远程配置\t292\n-- 动态刷新配置\t293\n第9章 消息总线:Spring Cloud Bus\t295\n消息代理\t295\nRabbitMQ实现消息总线\t296\n-- 基本概念\t297\n-- 安装与使用\t298\n-- 快速入门\t302\n-- 整合Spring Cloud Bus\t306\n-- 原理分析\t307\n-- 指定刷新范围\t308\n-- 架构优化\t309\n-- RabbitMQ配置\t310\nKafka实现消息总线\t312\n-- Kafka简介\t312\n-- 快速入门\t313\n--整合Spring Cloud Bus\t315\n-- Kafka配置\t318\n深入理解\t318\n-- 源码分析\t320\n-- 其他消息代理的支持\t342\n第10章 消息驱动的微服务:Spring Cloud Stream\t344\n快速入门\t344\n核心概念\t349\n-- 绑定器\t350\n-- 发布-订阅模式\t351\n-- 消费组\t353\n-- 消息分区\t354\n使用详解\t355\n-- 开启绑定功能\t355\n-- 绑定消息通道\t356\n-- 消息生产与消费\t360\n-- 响应式编程\t366\n-- 消费组与消息分区\t368\n-- 消息类型\t370\n绑定器详解\t373\n-- 绑定器SPI\t373\n-- 自动化配置\t374\n-- 多绑定器配置\t374\n-- RabbitMQ与Kafka绑定器\t376\n配置详解\t376\n-- 基础配置\t377\n-- 绑定通道配置\t377\n-- 绑定器配置\t379\n第11章 分布式服务跟踪:Spring Cloud Sleuth\t386\n快速入门\t386\n-- 准备工作\t386\n-- 实现跟踪\t389\n跟踪原理\t390\n抽样收集\t392\n与Logstash整合\t394\n与Zipkin整合\t397\n-- HTTP收集\t398\n-- 消息中间件收集\t402\n-- 收集原理\t404\n-- 数据存储\t414\n-- API接口\t417\n附录A Starter POMs\t419\n后记\t421","pages":"440","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s29434190.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s29434190.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s29434190.jpg"},"alt":"https://book.douban.com/subject/27025912/","id":"27025912","publisher":"电子工业出版社","isbn10":"7121313014","isbn13":"9787121313011","title":"Spring Cloud微服务实战","url":"https://api.douban.com/v2/book/27025912","alt_title":"","author_intro":"","summary":"《Spring Cloud微服务实战》从时下流行的微服务架构概念出发,详细介绍了Spring Cloud针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,《Spring Cloud微服务实战》主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。\n《Spring Cloud微服务实战》适合所有Java开发人员,尤其适合正在做微服务架构技术选型或正在实施微服务架构的团队查阅和参考。","price":"89"},"9787115209429":{"rating":{"max":10,"numRaters":234,"average":"9.1","min":0},"subtitle":"","author":["王福强"],"pubdate":"2009.8","tags":[{"count":491,"name":"Spring","title":"Spring"},{"count":297,"name":"Java","title":"Java"},{"count":166,"name":"框架","title":"框架"},{"count":100,"name":"Web开发","title":"Web开发"},{"count":88,"name":"J2EE","title":"J2EE"},{"count":80,"name":"编程","title":"编程"},{"count":76,"name":"计算机","title":"计算机"},{"count":60,"name":"Framework","title":"Framework"}],"origin_title":"","image":"https://img1.doubanio.com/view/subject/m/public/s3949449.jpg","binding":"平装","translator":[],"catalog":"第一部分 掀起Spring的盖头来\n第1章 Spring框架的由来 2\n1.1 Spring之崛起 2\n1.2 Spring框架概述 3\n1.3 Spring大观园 5\n1.4 小结 8\n第二部分 Spring的IoC容器\n第2章 IoC的基本概念 10\n2.1 我们的理念是:让别人为你服务 10\n2.2 手语,呼喊,还是心有灵犀 13\n2.2.1 构造方法注入 13\n2.2.2 setter方法注入 13\n2.2.3 接口注入 14\n2.2.4 三种注入方式的比较 15\n2.3 IoC的附加值 15\n2.4 小结 17\n第3章 掌管大局的IoC Service Provider 18\n3.1 IoC Service Provider的职责 18\n3.2 运筹帷幄的秘密——IoC Service Provider如何管理对象间的依赖关系 19\n3.2.1 直接编码方式 19\n3.2.2 配置文件方式 20\n3.2.3 元数据方式 21\n3.3 小结 21\n第4章 Spring的IoC容器之BeanFactory 22\n4.1 拥有BeanFactory之后的生活 24\n4.2 BeanFactory的对象注册与依赖绑定方式 26\n4.2.1 直接编码方式 26\n4.2.2 外部配置文件方式 28\n4.2.3 注解方式 31\n4.3 BeanFactory的XML之旅 33\n4.3.1 beans和bean 33\n4.3.2 孤孤单单一个人 35\n4.3.3 Help Me, Help You 36\n4.3.4 继承?我也会! 50\n4.3.5 bean的scope 51\n4.3.6 工厂方法与FactoryBean 56\n4.3.7 偷梁换柱之术 61\n4.4 容器背后的秘密 66\n4.4.1 “战略性观望” 66\n4.4.2 插手“容器的启动” 67\n4.4.3 了解bean的一生 74\n4.5 小结 85\n第5章 Spring IoC容器ApplicationContext 86\n5.1 统一资源加载策略 86\n5.1.1 Spring中的Resource 87\n5.1.2 ResourceLoader,“更广义的URL” 88\n5.1.3 ApplicationContext与ResourceLoader 91\n5.2 国际化信息支持(I18n MessageSource) 97\n5.2.1 Java SE提供的国际化支持 97\n5.2.2 MessageSource与ApplicationContext 98\n5.3 容器内部事件发布 102\n5.3.1 自定义事件发布 102\n5.3.2 Spring的容器内事件发布类结构分析 105\n5.3.3 Spring容器内事件发布的应用 107\n5.4 多配置模块加载的简化 109\n5.5 小结 110\n第6章 Spring IoC容器之扩展篇 111\n6.1 Spring 2.5的基于注解的依赖注入 111\n6.1.1 注解版的自动绑定(@Autowired) 111\n6.1.2 @Autowired之外的选择——使用JSR250标注依赖注入关系 115\n6.1.3 将革命进行得更彻底一些(class-path-scanning功能介绍) 116\n6.2 Spring 3.0展望 119\n6.3 小结 120\n第三部分 Spring AOP框架\n第7章 一起来看AOP 122\n7.1 AOP的尴尬 124\n7.2 AOP走向现实 125\n7.2.1 静态AOP时代 125\n7.2.2 动态AOP时代 126\n7.3 Java平台上的AOP实现机制 126\n7.3.1 动态代理 126\n7.3.2 动态字节码增强 126\n7.3.3 Java代码生成 127\n7.3.4 自定义类加载器 127\n7.3.5 AOL扩展 127\n7.4 AOP国家的公民 128\n7.4.1 Joinpoint 128\n7.4.2 Pointcut 130\n7.4.3 Advice 131\n7.4.4 Aspect 133\n7.4.5 织入和织入器 133\n7.4.6 目标对象 133\n7.5 小结 134\n第8章 Spring AOP概述及其实现机制 135\n8.1 Spring AOP概述 135\n8.2 Spring AOP的实现机制 136\n8.2.1 设计模式之代理模式 136\n8.2.2 动态代理 139\n8.2.3 动态字节码生成 141\n8.3 小结 142\n第9章 Spring AOP一世 143\n9.1 Spring AOP中的Joinpoint 143\n9.2 Spring AOP中的Pointcut 144\n9.2.1 常见的Pointcut 146\n9.2.2 扩展Pointcut(Customize Pointcut) 151\n9.2.3 IoC容器中的Pointcut 152\n9.3 Spring AOP中的Advice 153\n9.3.1 per-class类型的Advice 153\n9.3.2 per-instance类型的Advice 159\n9.4 Spring AOP中的Aspect 163\n9.4.1 PointcutAdvisor家族 164\n9.4.2 IntroductionAdvisor分支 167\n9.4.3 Ordered的作用 168\n9.5 Spring AOP的织入 170\n9.5.1 如何与ProxyFactory打交道 170\n9.5.2 看清ProxyFactory的本质 175\n9.5.3 容器中的织入器——ProxyFactoryBean 179\n9.5.4 加快织入的自动化进程 185\n9.6 TargetSource 190\n9.6.1 可用的TargetSource实现类 191\n9.6.2 自定义TargetSource 195\n9.7 小结 197\n第10章 Spring AOP二世 198\n10.1 @AspectJ形式的Spring AOP 198\n10.1.1 @AspectJ形式AOP使用之先睹为快 199\n10.1.2 @AspectJ形式的Pointcut 201\n10.1.3 @AspectJ形式的Advice 211\n10.1.4 @AspectJ中的Aspect更多话题 220\n10.2 基于Schema的AOP 223\n10.2.1 基于Schema的AOP配置概览 223\n10.2.2 向基于Schema的AOP迁移 225\n10.2.3 @AspectJ到“基于Schema的AOP”迁移 227\n10.3 小结 235\n第11章 AOP应用案例 237\n11.1 异常处理 237\n11.1.1 Java异常处理 237\n11.1.2 Fault Barrier 238\n11.2 安全检查 239\n11.3 缓存 240\n11.4 小结 240\n第12章 Spring AOP之扩展篇 241\n12.1 有关公开当前调用的代理对象的探讨 241\n12.1.1 问题的现象 241\n12.1.2 原因的分析 242\n12.1.3 解决方案 243\n12.2 小结 245\n第四部分 使用Spring访问数据\n第13章 统一的数据访问异常层次体系 249\n13.1 DAO模式的背景 249\n13.2 梦想照进现实 251\n13.3 发现问题,解决问题 252\n13.4 不重新发明轮子 254\n13.5 小结 257\n第14章 JDBC API的最佳实践 258\n14.1 基于Template的JDBC使用方式 258\n14.1.1 JDBC的尴尬 258\n14.1.2 JdbcTemplate的诞生 261\n14.1.3 JdbcTemplate和它的兄弟们 274\n14.1.4 Spring中的DataSource 296\n14.1.5 JdbcDaoSupport 301\n14.2 基于操作对象的JDBC使用方式 302\n14.2.1 基于操作对象的查询 303\n14.2.2 基于操作对象的更新 310\n14.2.3 基于操作对象的存储过程调用 313\n14.3 小结 316\n第15章 Spring对各种ORM的集成 317\n15.1 Spring对Hibernate的集成 318\n15.1.1 旧日“冬眠”时光 318\n15.1.2 “春天”里的“冬眠” 321\n15.2 Spring对iBATIS的集成 329\n15.2.1 iBATIS实践之“前生”篇 329\n15.2.2 iBATIS实践之“今世”篇 331\n15.3 Spring中对其他ORM方案的集成概述 337\n15.3.1 Spring对JDO的集成 337\n15.3.2 Spring对TopLink的集成 340\n15.3.3 Spring对JPA的集成 341\n15.4 小结 344\n第16章 Spring数据访问之扩展篇 345\n16.1 活用模板方法模式及Callback 345\n16.1.1 FTPClientTemplate 345\n16.1.2 HttpClientTemplate 349\n16.2 数据访问中的多数据源 350\n16.2.1 “主权独立”的多数据源 350\n16.2.2 “合纵连横”的多数据源 352\n16.2.3 结束语 354\n16.3 Spring 3.0展望 356\n16.4 小结 356\n第五部分 事务管理\n第17章 有关事务的楔子 358\n17.1 认识事务本身 358\n17.2 初识事务家族成员 360\n17.3 小结 362\n第18章 群雄逐鹿下的Java事务管理 363\n18.1 Java平台的局部事务支持 363\n18.2 Java平台的分布式事务支持 365\n18.2.1 基于JTA的分布式事务管理 366\n18.2.2 基于JCA的分布式事务管理 367\n18.3 继续前行之前的反思 367\n18.4 小结 369\n第19章 Spring事务王国的架构 370\n19.1 统一中原的过程 371\n19.2 和平年代 376\n19.2.1 TransactionDefinition 376\n19.2.2 TransactionStatus 382\n19.2.3 PlatformTransac-tionManager 382\n19.3 小结 392\n第20章 使用Spring进行事务管理 393\n20.1 编程式事务管理 393\n20.1.1 直接使用PlatformTran-sactionManager进行编程式事务管理 393\n20.1.2 使用TransactionTemp-late进行编程式事务管理 394\n20.1.3 编程创建基于Savepoint的嵌套事务 396\n20.2 声明式事务管理 397\n20.2.1 引子 397\n20.2.2 XML元数据驱动的声明式事务 399\n20.2.3 注解元数据驱动的声明式事务 410\n20.3 小结 413\n第21章 Spring事务管理之扩展篇 414\n21.1 理解并活用ThreadLocal 414\n21.1.1 理解ThreadLocal的存在背景 414\n21.1.2 理解ThreadLocal的实现 415\n21.1.3 ThreadLocal的应用场景 416\n21.1.4 使用ThreadLocal管理多数据源切换的条件 417\n21.2 谈Strategy模式在开发过程中的应用 420\n21.3 Spring与JTA背后的奥秘 423\n21.4 小结 427\n第六部分 Spring的Web MVC框架\n第22章 迈向Spring MVC的旅程 430\n22.1 Servlet独行天下的时代 430\n22.2 繁盛一时的JSP时代 433\n22.3 Servlet与JSP的联盟 436\n22.4 数英雄人物,还看今朝 438\n22.5 小结 440\n第23章 Spring MVC初体验 441\n23.1 鸟瞰Spring MVC 442\n23.2 实践出真知 446\n23.2.1 Spring MVC应用的物理结构 447\n23.2.2 按部就班地开始工作 451\n23.3 小结 459\n第24章 近距离接触Spring MVC主要角色 460\n24.1 忙碌的协调人HandlerMapping 460\n24.1.1 可用的HandlerMapping 461\n24.1.2 HandlerMapping执行序列(Chain Of HandlerMapping) 463\n24.2 我们的亲密伙伴Controller 464\n24.2.1 AbstractController 465\n24.2.2 MultiActionController 468\n24.2.3 SimpleFormController 476\n24.2.4 AbstractWizard-FormController 496\n24.2.5 其他可用的Controller实现 503\n24.3 ModelAndView 505\n24.3.1 ModelAndView中的视图信息 505\n24.3.2 ModelAndView中的模型数据 506\n24.4 视图定位器ViewResolver 506\n24.4.1 可用的ViewResolver实现类 507\n24.4.2 ViewResolver查找序列(Chain Of ViewResolver) 511\n24.5 各司其职的View 511\n24.5.1 View实现原理回顾 512\n24.5.2 可用的View实现类 515\n24.5.3 自定义View实现 521\n24.6 小结 523\n第25章 认识更多Spring MVC家族成员 524\n25.1 文件上传与MultipartResolver 525\n25.1.1 使用MultipartResolver进行文件上传的简单分析 526\n25.1.2 文件上传实践 527\n25.2 Handler与HandlerAdaptor 530\n25.2.1 问题的起源 530\n25.2.2 深入了解Handler 531\n25.2.3 近看HandlerAdaptor的奥秘 533\n25.2.4 告知Handler与Handler-Adaptor的存在 535\n25.3 框架内处理流程拦截与Handler-Interceptor 536\n25.3.1 可用的Handler-Interceptor实现 537\n25.3.2 自定义实现Handler-Interceptor 538\n25.3.3 HandlerInterceptor寻根 540\n25.3.4 HandlerInterceptor之外的选择 541\n25.4 框架内的异常处理与Handler-ExceptionResolver 544\n25.5 国际化视图与LocalResolver 548\n25.5.1 可用的LocaleResolver 549\n25.5.2 LocaleResolver的足迹 550\n25.5.3 Locale的变更与LocaleChangeHandler 551\n25.6 主题(Theme)与ThemeResolver 552\n25.6.1 提供主题资源的ThemeSource 552\n25.6.2 管理主题的ThemeResolver 554\n25.6.3 切换主题的ThemeChange-Interceptor 555\n25.7 小结 556\n第26章 Spring MVC中基于注解的Controller 557\n26.1 初识基于注解的Controller 557\n26.2 基于注解的Controller原型分析 558\n26.2.1 自定义用于基于注解的Contro-ller的HandlerMapping 558\n26.2.2 自定义用于基于注解的Contro-ller的HandlerAdaptor 560\n26.3 近看基于注解的Controller 563\n26.3.1 声明基于注解的Controller 563\n26.3.2 请求参数到方法参数的绑定 569\n26.3.3 使用@ModelAttribute访问模型数据 572\n26.3.4 通过@SessionAttribute管理Session数据 574\n26.4 小结 576\n第27章 Spring MVC之扩展篇 577\n27.1 Spring MVC也Convention Over Configuration 577\n27.1.1 Convention Over Configuration简介 577\n27.1.2 Spring MVC中的Convention Over Configuration 578\n27.2 Spring 3.0展望 581\n27.3 小结 582\n第七部分 Spring框架对J2EE服务的集成和支持\n第28章 Spring框架内的JNDI支持 584\n28.1 JNDI简单回顾 584\n28.2 Spring框架内JNDI访问的基石——JndiTemplate 585\n28.3 JNDI对象的依赖注入——JndiObjectFactoryBean 587\n28.4 小结 588\n第29章 Spring框架对JMS的集成 589\n29.1 说说JMS的身世 589\n29.2 使用JMS API进行应用开发的传统套路 590\n29.3 Spring改进后的JMS实战格斗术 592\n29.3.1 消息发送和同步接收 592\n29.3.2 异步消息接收 601\n29.3.3 JMS相关异常处理 607\n29.3.4 框架内的事务管理支持 608\n29.4 小结 609\n第30章 使用Spring发送E-mail 610\n30.1 思甜前,先忆苦 610\n30.2 Spring的E-mail抽象层分析 612\n30.2.1 直接创建邮件消息并发送 614\n30.2.2 使用MimeMessage-Preparator发送邮件 615\n30.3 Spring的E-mail支持在实际开发中的应用 616\n30.4 小结 622\n第31章 Spring中的任务调度和线程池支持 623\n31.1 Spring与Quartz 623\n31.1.1 初识Quartz 623\n31.1.2 融入Spring大家庭的Quartz 626\n31.2 Spring对JDK Timer的集成 631\n31.2.1 JDK Timer小记 631\n31.2.2 Spring集成后的JDK Timer 632\n31.3 Executor的孪生兄弟TaskExecutor 634\n31.3.1 可用的TaskExecutor 635\n31.3.2 TaskExecutor使用实例 637\n31.4 小结 639\n第32章 Spring框架对J2EE服务的集成之扩展篇 640\n32.1 MailMonitor的延伸 640\n32.2 Spring 3.0展望 642\n32.3 小结 642\n第33章 Spring远程方案 643\n33.1 从“对面交谈”到“千里传声” 643\n33.2 Spring Remoting架构分析 645\n33.2.1 Spring Remoting之远程访问异常体系 645\n33.2.2 统一风格的远程服务公开与访问方式 646\n33.3 Spring Remoting提供的远程服务支持 648\n33.3.1 基于RMI的Remoting方案 648\n33.3.2 基于HTTP的轻量级Remoting方案 651\n33.3.3 基于Web服务的远程方案 655\n33.3.4 基于JMS的远程方案 658\n33.4 扩展Spring Remoting 660\n33.5 Spring Remoting之扩展篇 663\n33.5.1 拉开JMX演出的序幕 663\n33.5.2 Spring 3.0展望 664\n参考文献 665","pages":"680","images":{"small":"https://img1.doubanio.com/view/subject/s/public/s3949449.jpg","large":"https://img1.doubanio.com/view/subject/l/public/s3949449.jpg","medium":"https://img1.doubanio.com/view/subject/m/public/s3949449.jpg"},"alt":"https://book.douban.com/subject/3897837/","id":"3897837","publisher":"人民邮电出版社","isbn10":"7115209421","isbn13":"9787115209429","title":"Spring揭秘","url":"https://api.douban.com/v2/book/3897837","alt_title":"","author_intro":"王福强,资深软件开发专家和系统架构师,原任花旗软件(大连)资深软件工程师,现任阿里巴巴B2B平台技术部架构师。多年来一直专注于Java平台的技术发展,以及一线产品的技术选型和框架设计。拥有多年金融行业软件开发经历,负责过信贷、外汇交易、固定收益等金融系统的分析、设计、开发、维护、集成、扩展和性能调优等,对各种大型金融机构体系的技术架构和实现有丰富经验和独到的见解。作为国内最早使用Spring的开发者之一,他对Spring的使用、设计和实现原理有着非常深入的了解。在本书中,他与读者分享了多年的Spring开发经验和探索企业级解决方案的心得。","summary":"没有教程似的训导,更多的是说故事般的娓娓道来,本书是作者在多年的工作中积累的第一手Spring框架使用经验的总结,深入剖析了Spring框架各个模块的功能、出现的背景、设计理念和设计原理,揭开了Spring框架的神秘面纱,使你“知其然,更知其所以然”。每部分的扩展篇帮助读者活学活用Spring框架的方方面面,同时可以触类旁通,衍生出新的思路和解决方案。\n本书内容全面,论述深刻入理,必将成为每个Java专业开发人员必备的Spring图书。","price":"99.00元"},"9787121273049":{"rating":{"max":10,"numRaters":157,"average":"8.3","min":0},"subtitle":"","author":["葛一鸣","郭超"],"pubdate":"2015-10-1","tags":[{"count":207,"name":"Java","title":"Java"},{"count":175,"name":"并发编程","title":"并发编程"},{"count":105,"name":"并发","title":"并发"},{"count":52,"name":"java","title":"java"},{"count":45,"name":"编程","title":"编程"},{"count":33,"name":"计算机","title":"计算机"},{"count":24,"name":"软件开发","title":"软件开发"},{"count":22,"name":"Java并发实战","title":"Java并发实战"}],"origin_title":"","image":"https://img1.doubanio.com/view/subject/m/public/s29405037.jpg","binding":"平装","translator":[],"catalog":"第1章 走入并行世界\t1\n1.1 何去何从的并行计算 \t1\n1.1.1 忘掉那该死的并行\t2\n1.1.2 可怕的现实:摩尔定律的失效\t4\n1.1.3 柳暗花明:不断地前进\t5\n1.1.4 光明或是黑暗\t6\n1.2 你必须知道的几个概念\t6\n1.2.1 同步(Synchronous)和异步(Asynchronous)\t7\n1.2.2 并发(Concurrency)和并行(Parallelism)\t8\n1.2.3 临界区\t9\n1.2.4 阻塞(Blocking)和非阻塞(Non-Blocking)\t9\n1.2.5 死锁(Deadlock)、饥饿(Starvation)和活锁(Livelock)\t9\n1.3 并发级别\t11\n1.3.1 阻塞(Blocking)\t11\n1.3.2 无饥饿(Starvation-Free)\t11\n1.3.3 无障碍(Obstruction-Free)\t12\n1.3.4 无锁(Lock-Free)\t12\n1.3.5 无等待(Wait-Free)\t13\n1.4 有关并行的两个重要定律\t13\n1.4.1 Amdahl定律\t13\n1.4.2 Gustafson定律\t16\n1.4.3 Amdahl定律和Gustafson定律是否相互矛盾\t16\n1.5 回到Java:JMM\t17\n1.5.1 原子性(Atomicity)\t18\n1.5.2 可见性(Visibility)\t20\n1.5.3 有序性(Ordering)\t22\n1.5.4 哪些指令不能重排:Happen-Before规则\t27\n1.6 参考文献\t27\n第2章 Java并行程序基础\t29\n2.1 有关线程你必须知道的事\t29\n2.2 初始线程:线程的基本操作\t32\n2.2.1 新建线程\t32\n2.2.2 终止线程\t34\n2.2.3 线程中断\t38\n2.2.4 等待(wait)和通知(notify)\t41\n2.2.5 挂起(suspend)和继续执行(resume)线程\t44\n2.2.6 等待线程结束(join)和谦让(yield)\t48\n2.3 volatile与Java内存模型(JMM)\t50\n2.4 分门别类的管理:线程组\t52\n2.5 驻守后台:守护线程(Daemon)\t54\n2.6 先干重要的事:线程优先级\t55\n2.7 线程安全的概念与synchronized\t57\n2.8 程序中的幽灵:隐蔽的错误\t61\n2.8.1 无提示的错误案例\t61\n2.8.2 并发下的ArrayList\t62\n2.8.3 并发下诡异的HashMap\t63\n2.8.4 初学者常见问题:错误的加锁\t66\n2.9 参考文献\t68\n第3章 JDK并发包\t70\n3.1 多线程的团队协作:同步控制\t70\n3.1.1 synchronized的功能扩展:重入锁\t71\n3.1.2 重入锁的好搭档:Condition条件\t80\n3.1.3 允许多个线程同时访问:信号量(Semaphore)\t83\n3.1.4 ReadWriteLock读写锁\t85\n3.1.5 倒计时器:CountDownLatch\t87\n3.1.6 循环栅栏:CyclicBarrier\t89\n3.1.7 线程阻塞工具类:LockSupport\t92\n3.2 线程复用:线程池\t95\n3.2.1 什么是线程池\t96\n3.2.2 不要重复发明轮子:JDK对线程池的支持\t97\n3.2.3 刨根究底:核心线程池的内部实现\t102\n3.2.4 超负载了怎么办:拒绝策略\t106\n3.2.5 自定义线程创建:ThreadFactory\t109\n3.2.6 我的应用我做主:扩展线程池\t110\n3.2.7 合理的选择:优化线程池线程数量\t112\n3.2.8 堆栈去哪里了:在线程池中寻找堆栈\t113\n3.2.9 分而治之:Fork/Join框架\t117\n3.3 不要重复发明轮子:JDK的并发容器\t121\n3.3.1 超好用的工具类:并发集合简介\t121\n3.3.2 线程安全的HashMap\t122\n3.3.3 有关List的线程安全\t123\n3.3.4 高效读写的队列:深度剖析ConcurrentLinkedQueue\t123\n3.3.5 高效读取:不变模式下的CopyOnWriteArrayList\t129\n3.3.6 数据共享通道:BlockingQueue\t130\n3.3.7 随机数据结构:跳表(SkipList)\t134\n3.4 参考资料\t136\n第4章 锁的优化及注意事项\t138\n4.1 有助于提高“锁”性能的几点建议\t139\n4.1.1 减小锁持有时间\t139\n4.1.2 减小锁粒度\t140\n4.1.3 读写分离锁来替换独占锁\t142\n4.1.4 锁分离\t142\n4.1.5 锁粗化\t144\n4.2 Java虚拟机对锁优化所做的努力\t146\n4.2.1 锁偏向\t146\n4.2.2 轻量级锁\t146\n4.2.3 自旋锁\t146\n4.2.4 锁消除\t146\n4.3 人手一支笔:ThreadLocal\t147\n4.3.1 ThreadLocal的简单使用\t148\n4.3.2 ThreadLocal的实现原理\t149\n4.3.3 对性能有何帮助\t155\n4.4 无锁\t157\n4.4.1 与众不同的并发策略:比较交换(CAS)\t158\n4.4.2 无锁的线程安全整数:AtomicInteger\t159\n4.4.3 Java中的指针:Unsafe类\t161\n4.4.4 无锁的对象引用:AtomicReference\t162\n4.4.5 带有时间戳的对象引用:AtomicStampedReference\t165\n4.4.6 数组也能无锁:AtomicIntegerArray\t168\n4.4.7 让普通变量也享受原子操作:AtomicIntegerFieldUpdater\t169\n4.4.8 挑战无锁算法:无锁的Vector实现\t171\n4.4.9 让线程之间互相帮助:细看SynchronousQueue的实现\t176\n4.5 有关死锁的问题\t179\n4.6 参考文献\t183\n第5章 并行模式与算法\t184\n5.1 探讨单例模式\t184\n5.2 不变模式\t187\n5.3 生产者-消费者模式\t190\n5.4 高性能的生产者-消费者:无锁的实现\t194\n5.4.1 无锁的缓存框架:Disruptor\t195\n5.4.2 用Disruptor实现生产者-消费者案例\t196\n5.4.3 提高消费者的响应时间:选择合适的策略\t199\n5.4.4 CPU Cache的优化:解决伪共享问题\t200\n5.5 Future模式\t204\n5.5.1 Future模式的主要角色\t206\n5.5.2 Future模式的简单实现\t207\n5.5.3 JDK中的Future模式\t210\n5.6 并行流水线\t212\n5.7 并行搜索\t216\n5.8 并行排序\t218\n5.8.1 分离数据相关性:奇偶交换排序\t218\n5.8.2 改进的插入排序:希尔排序\t221\n5.9 并行算法:矩阵乘法\t226\n5.10 准备好了再通知我:网络NIO\t230\n5.10.1 基于Socket的服务端的多线程模式\t230\n5.10.2 使用NIO进行网络编程\t235\n5.10.3 使用NIO来实现客户端\t243\n5.11 读完了再通知我:AIO\t245\n5.11.1 AIO EchoServer的实现\t245\n5.11.2 AIO Echo客户端实现\t248\n5.12 参考文献\t249\n第6章 Java 8与并发\t251\n6.1 Java 8的函数式编程简介\t251\n6.1.1 函数作为一等公民\t252\n6.1.2 无副作用\t252\n6.1.3 申明式的(Declarative)\t253\n6.1.4 不变的对象\t254\n6.1.5 易于并行\t254\n6.1.6 更少的代码\t254\n6.2 函数式编程基础\t255\n6.2.1 FunctionalInterface注释\t255\n6.2.2 接口默认方法\t256\n6.2.3 lambda表达式\t259\n6.2.4 方法引用\t260\n6.3 一步一步走入函数式编程\t263\n6.4 并行流与并行排序\t267\n6.4.1 使用并行流过滤数据\t267\n6.4.2 从集合得到并行流\t268\n6.4.3 并行排序\t268\n6.5 增强的Future:CompletableFuture\t269\n6.5.1 完成了就通知我\t269\n6.5.2 异步执行任务\t270\n6.5.3 流式调用\t272\n6.5.4 CompletableFuture中的异常处理\t272\n6.5.5 组合多个CompletableFuture\t273\n6.6 读写锁的改进:StampedLock\t274\n6.6.1 StampedLock使用示例\t275\n6.6.2 StampedLock的小陷阱\t276\n6.6.3 有关StampedLock的实现思想\t278\n6.7 原子类的增强\t281\n6.7.1 更快的原子类:LongAdder\t281\n6.7.2 LongAdder的功能增强版:LongAccumulator\t287\n6.8 参考文献\t288\n第7章 使用Akka构建高并发程序\t289\n7.1 新并发模型:Actor\t290\n7.2 Akka之Hello World\t290\n7.3 有关消息投递的一些说明\t293\n7.4 Actor的生命周期\t295\n7.5 监督策略\t298\n7.6 选择Actor\t303\n7.7 消息收件箱(Inbox)\t303\n7.8 消息路由\t305\n7.9 Actor的内置状态转换\t308\n7.10 询问模式:Actor中的Future\t311\n7.11 多个Actor同时修改数据:Agent\t313\n7.12 像数据库一样操作内存数据:软件事务内存\t316\n7.13 一个有趣的例子:并发粒子群的实现\t319\n7.13.1 什么是粒子群算法\t320\n7.13.2 粒子群算法的计算过程\t320\n7.13.3 粒子群算法能做什么\t322\n7.13.4 使用Akka实现粒子群\t323\n7.14 参考文献\t330\n第8章 并行程序调试\t331\n8.1 准备实验样本\t331\n8.2 正式起航\t332\n8.3 挂起整个虚拟机\t334\n8.4 调试进入ArrayList内部\t336","pages":"339","images":{"small":"https://img1.doubanio.com/view/subject/s/public/s29405037.jpg","large":"https://img1.doubanio.com/view/subject/l/public/s29405037.jpg","medium":"https://img1.doubanio.com/view/subject/m/public/s29405037.jpg"},"alt":"https://book.douban.com/subject/26663605/","id":"26663605","publisher":"电子工业出版社","isbn10":"7121273047","isbn13":"9787121273049","title":"实战Java高并发程序设计","url":"https://api.douban.com/v2/book/26663605","alt_title":"","author_intro":"葛一鸣,51CTO特约讲师,国家认证系统分析师,获得OracleOCP认证。长期从事Java软件开发工作,对Java程序设计、JVM有深入的研究,对设计模式、人工智能、神经网络、数据挖掘等技术有浓厚兴趣,著有《自己动手写神经网路》电子书和《实战Java虚拟机》一书。\n郭超,就职于杭州市道路运输管理局信息中心,主要从事大型交通管理系统的分布式管理和并发模型设计,对Java的研究比较深入,专注于分布式应用和并发应用。","summary":"在过去单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发就显得尤为重要。\n《实战Java高并发程序设计》主要介绍基于Java的并行程序设计基础、思路、方法和实战。第一,立足于并发程序基础,详细介绍Java中进行并行程序设计的基本方法。第二,进一步详细介绍JDK中对并行程序的强大支持,帮助读者快速、稳健地进行并行程序开发。第三,详细讨论有关“锁”的优化和提高并行程序性能级别的方法和思路。第四,介绍并行的基本设计模式及Java 8对并行程序的支持和改进。第五,介绍高并发框架Akka的使用方法。最后,详细介绍并行程序的调试方法。\n《实战Java高并发程序设计》内容丰富,实例典型,实用性强,适合有一定Java基础的技术开发人员阅读。","price":"CNY 69.00"},"9787111421900":{"rating":{"max":10,"numRaters":1136,"average":"8.9","min":0},"subtitle":"JVM高级特性与最佳实践","author":["周志明"],"pubdate":"2013-9-1","tags":[{"count":981,"name":"JVM","title":"JVM"},{"count":865,"name":"Java","title":"Java"},{"count":636,"name":"虚拟机","title":"虚拟机"},{"count":265,"name":"计算机","title":"计算机"},{"count":263,"name":"java","title":"java"},{"count":218,"name":"编程","title":"编程"},{"count":117,"name":"软件开发","title":"软件开发"},{"count":92,"name":"程序设计","title":"程序设计"}],"origin_title":"","image":"https://img3.doubanio.com/view/subject/m/public/s27458236.jpg","binding":"平装","translator":[],"catalog":"前言\n第一部分走近Java\n第1章走近Java2\n1.1概述2\n1.2Java技术体系3\n1.3Java发展史5\n1.4Java虚拟机发展史9\n1.4.1SunClassicExactVM9\n1.4.2SunHotSpotVM11\n1.4.3SunMobile—EmbeddedVMMeta—CircularVM12\n1.4.4BEAJRockitIBMJ9VM13\n1.4.5AzulVMBEALiquidVM14\n1.4.6ApacheHarmonyGoogleAndroidDalvikVM14\n1.4.7MicrosoftJVM及其他15\n1.5展望Java技术的未来16\n1.5.1模块化17\n1.5.2混合语言17\n1.5.3多核并行19\n1.5.4进一步丰富语法20\n1.5.564位虚拟机21\n1.6实战:自己编译JDK22\n1.6.1获取JDK源码22\n1.6.2系统需求24\n1.6.3构建编译环境25\n1.6.4进行编译26\n1.6.5在IDE工具中进行源码调试31\n1.7本章小结35\n第二部分自动内存管理机制\n第2章Java内存区域与内存溢出异常38\n2.1概述38\n2.2运行时数据区域38\n2.2.1程序计数器39\n2.2.2Java虚拟机栈39\n2.2.3本地方法栈40\n2.2.4Java堆41\n2.2.5方法区41\n2.2.6运行时常量池42\n2.2.7直接内存43\n2.3HotSpot虚拟机对象探秘43\n2.3.1对象的创建44\n2.3.2对象的内存布局47\n2.3.3对象的访问定位48\n2.4实战:OutOfMemoryError异常50\n2.4.1Java堆溢出51\n2.4.2虚拟机栈和本地方法栈溢出53\n2.4.3方法区和运行时常量池溢出56\n2.4.4本机直接内存溢出59\n2.5本章小结60\n第3章垃圾收集器与内存分配策略61\n3.1概述61\n3.2对象已死吗62\n3.2.1引用计数算法62\n3.2.2可达性分析算法64\n3.2.3再谈引用65\n3.2.4生存还是死亡66\n3.2.5回收方法区68\n3.3垃圾收集算法69\n3.3.1标记—清除算法69\n3.3.2复制算法70\n3.3.3标记—整理算法71\n3.3.4分代收集算法72\n3.4HotSpot的算法实现72\n3.4.1枚举根节点72\n3.4.2安全点73\n3.4.3安全区域74\n3.5垃圾收集器75\n3.5.1Serial收集器76\n3.5.2ParNew收集器77\n3.5.3ParallelScavenge收集器79\n3.5.4SerialOld收集器80\n3.5.5ParallelOld收集器80\n3.5.6CMS收集器81\n3.5.7G1收集器84\n3.5.8理解GC日志89\n3.5.9垃圾收集器参数总结90\n3.6内存分配与回收策略91\n3.6.1对象优先在Eden分配91\n3.6.2大对象直接进入老年代93\n3.6.3长期存活的对象将进入老年代95\n3.6.4动态对象年龄判定97\n3.6.5空间分配担保98\n3.7本章小结100\n第4章虚拟机性能监控与故障处理工具101\n4.1概述101\n4.2JDK的命令行工具101\n4.2.1jps:虚拟机进程状况工具104\n4.2.2jstat:虚拟机统计信息监视工具105\n4.2.3jinfo:Java配置信息工具106\n4.2.4jmap:Java内存映像工具107\n4.2.5jhat:虚拟机堆转储快照分析工具108\n4.2.6jstack:Java堆栈跟踪工具109\n4.2.7HSDIS:JIT生成代码反汇编111\n4.3JDK的可视化工具114\n4.3.1JConsole:Java监视与管理控制台115\n4.3.2VisualVM:多合一故障处理工具122\n4.4本章小结131\n第5章调优案例分析与实战132\n5.1概述132\n5.2案例分析132\n5.2.1高性能硬件上的程序部署策略132\n5.2.2集群间同步导致的内存溢出135\n5.2.3堆外内存导致的溢出错误136\n5.2.4外部命令导致系统缓慢137\n5.2.5服务器JVM进程崩溃138\n5.2.6不恰当数据结构导致内存占用过大139\n5.2.7由Windows虚拟内存导致的长时间停顿141\n5.3实战:Eclipse运行速度调优142\n5.3.1调优前的程序运行状态142\n5.3.2升级JDK1.6的性能变化及兼容问题145\n5.3.3编译时间和类加载时间的优化150\n5.3.4调整内存设置控制垃圾收集频率153\n5.3.5选择收集器降低延迟157\n5.4本章小结160\n第三部分虚拟机执行子系统\n第6章类文件结构162\n6.1概述162\n6.2无关性的基石162\n6.3Class类文件的结构164\n6.3.1魔数与Class文件的版本166\n6.3.2常量池167\n6.3.3访问标志173\n6.3.4类索引、父类索引与接口索引集合174\n6.3.5字段表集合175\n6.3.6方法表集合178\n6.3.7属性表集合180\n6.4字节码指令简介196\n6.4.1字节码与数据类型197\n6.4.2加载和存储指令199\n6.4.3运算指令200\n6.4.4类型转换指令202\n6.4.5对象创建与访问指令203\n6.4.6操作数栈管理指令203\n6.4.7控制转移指令204\n6.4.8方法调用和返回指令204\n6.4.9异常处理指令205\n6.4.10同步指令205\n6.5公有设计和私有实现206\n6.6Class文件结构的发展207\n6.7本章小结208\n第7章虚拟机类加载机制209\n7.1概述209\n7.2类加载的时机210\n7.3类加载的过程214\n7.3.1加载214\n7.3.2验证216\n7.3.3准备219\n7.3.4解析220\n7.3.5初始化225\n7.4类加载器227\n7.4.1类与类加载器228\n7.4.2双亲委派模型229\n7.4.3破坏双亲委派模型233\n7.5本章小结235\n第8章虚拟机字节码执行引擎236\n8.1概述236\n8.2运行时栈帧结构236\n8.2.1局部变量表238\n8.2.2操作数栈242\n8.2.3动态连接243\n8.2.4方法返回地址243\n8.2.5附加信息244\n8.3方法调用244\n8.3.1解析244\n8.3.2分派246\n8.3.3动态类型语言支持258\n8.4基于栈的字节码解释执行引擎269\n8.4.1解释执行269\n8.4.2基于栈的指令集与基于寄存器的指令集270\n8.4.3基于栈的解释器执行过程272\n8.5本章小结275\n第9章类加载及执行子系统的案例与实战276\n9.1概述276\n9.2案例分析276\n9.2.1Tomcat:正统的类加载器架构276\n9.2.2OSGi:灵活的类加载器架构279\n9.2.3字节码生成技术与动态代理的实现282\n9.2.4Retrotranslator:跨越JDK版本286\n9.3实战:自己动手实现远程执行功能289\n9.3.1目标290\n9.3.2思路290\n9.3.3实现291\n9.3.4验证298\n9.4本章小结299\n第四部分程序编译与代码优化\n第10章早期(编译期)优化302\n10.1概述302\n10.2Javac编译器303\n10.2.1Javac的源码与调试303\n10.2.2解析与填充符号表305\n10.2.3注解处理器307\n10.2.4语义分析与字节码生成307\n10.3Java语法糖的味道311\n10.3.1泛型与类型擦除311\n10.3.2自动装箱、拆箱与遍历循环315\n10.3.3条件编译317\n10.4实战:插入式注解处理器318\n10.4.1实战目标318\n10.4.2代码实现319\n10.4.3运行与测试326\n10.4.4其他应用案例327\n10.5本章小结328\n第11章晚期(运行期)优化329\n11.1概述329\n11.2HotSpot虚拟机内的即时编译器329\n11.2.1解释器与编译器330\n11.2.2编译对象与触发条件332\n11.2.3编译过程337\n11.2.4查看及分析即时编译结果339\n11.3编译优化技术345\n11.3.1优化技术概览346\n11.3.2公共子表达式消除350\n11.3.3数组边界检查消除351\n11.3.4方法内联352\n11.3.5逃逸分析354\n11.4Java与C/C++的编译器对比356\n11.5本章小结358\n第五部分高效并发\n第12章Java内存模型与线程360\n12.1概述360\n12.2硬件的效率与一致性361\n12.3Java内存模型362\n12.3.1主内存与工作内存363\n12.3.2内存间交互操作364\n12.3.3对于volatile型变量的特殊规则366\n12.3.4对于long和double型变量的特殊规则372\n12.3.5原子性、可见性与有序性373\n12.3.6先行发生原则375\n12.4Java与线程378\n12.4.1线程的实现378\n12.4.2Java线程调度381\n12.4.3状态转换383\n12.5本章小结384\n第13章线程安全与锁优化385\n13.1概述385\n13.2线程安全385\n13.2.1Java语言中的线程安全386\n13.2.2线程安全的实现方法390\n13.3锁优化397\n13.3.1自旋锁与自适应自旋398\n13.3.2锁消除398\n13.3.3锁粗化400\n13.3.4轻量级锁400\n13.3.5偏向锁402\n13.4本章小结403\n附录\n附录A编译Windows版的OpenJDK406\n附录B虚拟机字节码指令表414\n附录CHotSpot虚拟机主要参数表420\n附录D对象查询语言(OQL)简介424\n附录EJDK历史版本轨迹430","ebook_url":"https://read.douban.com/ebook/15233695/","pages":"433","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s27458236.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s27458236.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s27458236.jpg"},"alt":"https://book.douban.com/subject/24722612/","id":"24722612","publisher":"机械工业出版社","isbn10":"7111421906","isbn13":"9787111421900","title":"深入理解Java虚拟机(第2版)","url":"https://api.douban.com/v2/book/24722612","alt_title":"","author_intro":"周志明,资深Java技术专家,对JavaEE企业级应用开发、OSGi、Java虚拟机和工作流等都有深入的研究,并在大量的实践中积累了丰富的经验。尤其精通Java虚拟机,撰写了大量与JVM相关的经典文章,被各大技术社区争相转载,是ITeye等技术社区公认的Java虚拟机方面的领袖人物之一。除本书外,还著有经典著作《深入理解OSGi:Equinox原理、应用与最佳实践》,广获读者好评。现任远光软件股份有限公司开发部总经理兼架构师,先后参与过国家电网、南方电网等多个国家级大型ERP项目的平台架构工作,对软件系统架构也有深刻的认识和体会。","summary":"《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》内容简介:第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的改进:根据最新的JDK 1.7对全书内容进行了全面的升级和补充;增加了大量处理各种常见JVM问题的技巧和最佳实践;增加了若干与生产环境相结合的实战案例;对第1版中的错误和不足之处的修正;等等。第2版不仅技术更新、内容更丰富,而且实战性更强。\n《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。\n第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解书中后面内容有重要帮助。\n第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。\n第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。\n第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果;\n第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。","ebook_price":"25.00","price":"79.00元"},"9787121022982":{"rating":{"max":10,"numRaters":3578,"average":"9.3","min":0},"subtitle":"","author":["[美] 史蒂夫·迈克康奈尔"],"pubdate":"2006-3","tags":[{"count":3183,"name":"编程","title":"编程"},{"count":2899,"name":"代码大全","title":"代码大全"},{"count":1649,"name":"软件开发","title":"软件开发"},{"count":1502,"name":"计算机","title":"计算机"},{"count":1444,"name":"软件工程","title":"软件工程"},{"count":1199,"name":"程序设计","title":"程序设计"},{"count":837,"name":"programming","title":"programming"},{"count":785,"name":"代码","title":"代码"}],"origin_title":"Code Complete","image":"https://img1.doubanio.com/view/subject/m/public/s1495029.jpg","binding":"平装","translator":["金戈","汤凌","陈硕","张菲 译","裘宗燕 审校"],"catalog":"第 1 章 欢迎进入软件构建的世界  3\n第 2 章 用隐喻来更充分地理解软件开发  9\n第 3 章 三思而后行:前期准备  23\n第 4 章 关键的“构建”决策  61\n第 5 章 软件构建中的设计  73\n第 6 章 可以工作的类  125\n第 7 章 高质量的子程序  161\n第 8 章 防御式编程  187\n第 9 章 伪代码编程过程  215\n第 10 章 使用变量的一般事项  237\n第 11 章 变量名的力量  259\n第 12 章 基本数据类型  291\n第 13 章 不常见的数据类型  319\n第 14 章 组织直线型代码  347\n第 15 章 使用条件语句  355\n第 16 章 控制循环  367\n第 17 章 不常见的控制结构  391\n第 18 章 表驱动法  411\n第 19 章 一般控制问题  431\n第 20 章 软件质量概述  463\n第 21 章 协同构建  479\n第 22 章 开发者测试  499\n第 23 章 调试  535\n第 24 章 重构  563\n第 25 章 代码调整策略  587\n第 26 章 代码调整技术  609\n第 27 章 程序规模对构建的影响  649\n第 28 章 管理构建  661\n第 29 章 集成  689\n第 30 章 编程工具  709\n第 31 章 布局与风格  729\n第 32 章 自说明代码  777\n第 33 章 个人性格  819\n第 34 章 软件工艺的话题  837\n第 35 章 何处有更多信息  855\n参考文献   863\n索引 883","pages":"944","images":{"small":"https://img1.doubanio.com/view/subject/s/public/s1495029.jpg","large":"https://img1.doubanio.com/view/subject/l/public/s1495029.jpg","medium":"https://img1.doubanio.com/view/subject/m/public/s1495029.jpg"},"alt":"https://book.douban.com/subject/1477390/","id":"1477390","publisher":"电子工业出版社","isbn10":"7121022982","isbn13":"9787121022982","title":"代码大全(第2版)","url":"https://api.douban.com/v2/book/1477390","alt_title":"Code Complete","author_intro":"史蒂夫·迈克康奈尔(Steve McConnell)被公认为软件开发社区中的首要作者和发言人之一。他是Construx Software公司的首席软件工程师。他所编著的图书包括曾被《软件开发》杂志授予优异产品震撼大奖的《代码大全》和《快速软件开发》,以及《软件项目生存指南》和《专业软件开发》等等。","summary":"第2版的《代码大全》是著名IT畅销书作者史蒂夫·迈克康奈尔11年前的经典著作的全新演绎:第2版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。这本书中所论述的技术不仅填补了初级与高级编程技术之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。这本书对经验丰富的程序员、技术带头人、自学的程序员及几乎不懂太多编程技巧的学生们都是大有裨益的。可以说,无论是什么背景的读者,阅读这本书都有助于在更短的时间内、更容易地写出更好的程序。","series":{"id":"6628","title":"传世经典书丛"},"price":"128.00元"},"9787115470669":{"rating":{"max":10,"numRaters":122,"average":"7.8","min":0},"subtitle":"","author":["张鑫旭"],"pubdate":"2017-12","tags":[{"count":108,"name":"CSS","title":"CSS"},{"count":82,"name":"前端","title":"前端"},{"count":24,"name":"前端开发","title":"前端开发"},{"count":15,"name":"css","title":"css"},{"count":14,"name":"编程","title":"编程"},{"count":14,"name":"Web前端开发","title":"Web前端开发"},{"count":9,"name":"计算机","title":"计算机"},{"count":8,"name":"入门好书","title":"入门好书"}],"origin_title":"","image":"https://img1.doubanio.com/view/subject/m/public/s29651678.jpg","binding":"平装","translator":[],"catalog":"第 1章 概述 1\n1.1 CSS世界的“世界观” 1\n1.2 世界都是创造出来的 3\n1.3 CSS完胜SVG的武器—流 4\n1.3.1 何为“流” 5\n1.3.2 流是如何影响整个CSS世界的 6\n1.3.3 什么是流体布局 6\n1.4 CSS世界的开启从IE8开始 6\n1.5 table自己的世界 7\n1.6 CSS新世界—CSS3 7\n第 2章 需提前了解的术语和概念 8\n2.1 务必了解的CSS世界的专业术语 8\n2.2 了解CSS世界中的“未定义行为” 11\n第3章 流、元素与基本尺寸 13\n3.1 块级元素 13\n3.1.1 为什么list-item元素会出现项目符号 15\n3.1.2 display:inline-table的盒子是怎样组成的 16\n3.1.3 width/height作用在哪个盒子上 16\n3.2 width/height作用的具体细节 16\n3.2.1 深藏不露的width:auto 17\n3.2.2 width值作用的细节 24\n3.2.3 CSS流体布局下的宽度分离原则 27\n3.2.4 改变width/height作用细节的box-sizing 29\n3.2.5 相对简单而单纯的height:auto 33\n3.2.6 关于height:100% 33\n3.3 CSS min-width/max-width和min-height/max-height二三事 37\n3.3.1 为流体而生的min-width/max-width 38\n3.3.2 与众不同的初始值 38\n3.3.3 超越!important 39\n3.3.4 任意高度元素的展开收起动画技术 40\n3.4 内联元素 42\n3.4.1 哪些元素是内联元素 42\n3.4.2 内联世界深入的基础—内联盒模型 42\n3.4.3 幽灵空白节点 44\n第4章 盒尺寸四大家族 45\n4.1 深入理解content 45\n4.1.1 content与替换元素 45\n4.1.2 content内容生成技术 57\n4.2 温和的padding属性 73\n4.2.1 padding与元素的尺寸 73\n4.2.2 padding的百分比值 77\n4.2.3 标签元素内置的padding 79\n4.2.4 padding与图形绘制 80\n4.3 激进的margin属性 81\n4.3.1 margin与元素尺寸以及相关布局 82\n4.3.2 margin的百分比值 87\n4.3.3 正确看待CSS世界里的margin合并 87\n4.3.4 深入理解CSS中的margin:auto 94\n4.3.5 margin无效情形解析 97\n4.4 border属性 100\n4.4.1 为什么border-width不支持百分比值 100\n4.4.2 了解各种border-style类型 101\n4.4.3 border-color和color 105\n4.4.4 border与透明边框技巧 106\n4.4.5 border与图形构建 108\n4.4.6 border等高布局技术 109\n第5章 内联元素与流 111\n5.1 字母x—CSS世界中隐匿的举足轻重的角色 111\n5.1.1 字母x与CSS世界的基线 111\n5.1.2 字母x与CSS中的x-height 112\n5.1.3 字母x与CSS中的ex 113\n5.2 内联元素的基石line-height 114\n5.2.1 内联元素的高度之本—line-height 114\n5.2.2 为什么line-height可以让内联元素“垂直居中” 119\n5.2.3 深入line-height的各类属性值 121\n5.2.4 内联元素line-height的“大值特性” 124\n5.3 line-height的好朋友vertical-align 126\n5.3.1 vertical-align家族基本认识 127\n5.3.2 vertical-align作用的前提 129\n5.3.3 vertical-align和line-height之间的关系 131\n5.3.4 深入理解vertical-align线性类属性值 135\n5.3.5 深入理解vertical-align文本类属性值 141\n5.3.6 简单了解vertical-align上标下标类属性值 142\n5.3.7 无处不在的vertical-align 143\n5.3.8 基于vertical-align属性的水平垂直居中弹框 144\n第6章 流的破坏与保护 147\n6.1 魔鬼属性float 147\n6.1.1 float的本质与特性 147\n6.1.2 float的作用机制 151\n6.1.3 float更深入的作用机制 154\n6.1.4 float与流体布局 155\n6.2 float的天然克星clear 157\n6.2.1 什么是clear属性 157\n6.2.2 成事不足败事有余的clear 158\n6.3 CSS世界的结界—BFC 160\n6.3.1 BFC的定义 160\n6.3.2 BFC与流体布局 160\n6.4 结界overflow 164\n6.4.1 overflow剪裁界线border box 165\n6.4.2 了解overflow-x和overflow-y 166\n6.4.3 overflow与滚动条 166\n6.4.4 依赖overflow的样式表现 169\n6.4.5 overflow与锚点定位 170\n6.5 float的兄弟position:absolute 177\n6.5.1 absolute的包含块 178\n6.5.2 具有相对特性的无依赖absolute定位 184\n6.5.3 absolute与text-align 191\n6.6 absolute与overflow 193\n6.7 absolute与clip 195\n6.7.1 重新认识的clip属性 196\n6.7.2 深入了解clip的渲染 198\n6.8 absolute的流体特性 199\n6.8.1 当absolute遇到left/top/right/bottom属性 199\n6.8.2 absolute的流体特性 200\n6.8.3 absolute的margin:auto居中 202\n6.9 position:relative才是大哥 202\n6.9.1 relative对absolute的限制 203\n6.9.2 relative与定位 203\n6.9.3 relative的zui小化影响原则 206\n6.10 强悍的position:fixed固定定位 207\n6.10.1 position:fixed不一样的“包含块” 207\n6.10.2 position:fixed的absolute模拟 208\n6.10.3 position:fixed与背景锁定 209\n第7章 CSS世界的层叠规则 211\n7.1 z-index只是CSS层叠规则中的一叶小舟 211\n7.2 理解CSS世界的层叠上下文和层叠水平 212\n7.2.1 什么是层叠上下文 212\n7.2.2 什么是层叠水平 212\n7.3 理解元素的层叠顺序 212\n7.4 务必牢记的层叠准则 214\n7.5 深入了解层叠上下文 214\n7.5.1 层叠上下文的特性 214\n7.5.2 层叠上下文的创建 214\n7.5.3 层叠上下文与层叠顺序 217\n7.6 z-index负值深入理解 219\n7.7 z-index“不犯二”准则 223\n第8章 强大的文本处理能力 225\n8.1 line-height的另外一个朋友font-size 225\n8.1.1 font-size和vertical-align的隐秘故事 225\n8.1.2 理解font-size与ex、em和rem的关系 227\n8.1.3 理解font-size的关键字属性值 229\n8.1.4 font-size:0与文本的隐藏 231\n8.2 字体属性家族的大家长font-family 232\n8.2.1 了解衬线字体和无衬线字体 233\n8.2.2 等宽字体的实践价值 234\n8.2.3 中文字体和英文名称 236\n8.2.4 一些补充说明 237\n8.3 字体家族其他成员 238\n8.3.1 貌似粗犷、实则精细无比的font-weight 238\n8.3.2 具有近似姐妹花属性值的font-style 241\n8.3.3 不适合国情的font-variant 242\n8.4 font属性 242\n8.4.1 作为缩写的font属性 242\n8.4.2 使用关键字值的font属性 243\n8.4.3 font关键字属性值的应用价值 246\n8.5 真正了解@font face规则 247\n8.5.1 @font face的本质是变量 247\n8.5.2 @font face与字体图标技术 255\n8.6 文本的控制 258\n8.6.1 text-indent与内联元素缩进 258\n8.6.2 letter-spacing与字符间距 261\n8.6.3 word-spacing与单词间距 263\n8.6.4 了解word-break和word-wrap的区别 264\n8.6.5 white-space与换行和空格的控制 265\n8.6.6 text-align与元素对齐 267\n8.6.7 如何解决text-decoration下划线和文本重叠的问题 271\n8.6.8 一本万利的text-transform字符大小写 273\n8.7 了解:first-letter/:first-line伪元素 274\n8.7.1 深入:first-letter伪元素及其实例 274\n8.7.2 故事相对较少的:first-line伪元素 277\n第9章 元素的装饰与美化 280\n9.1 CSS世界的color很单调 280\n9.1.1 少得可怜的颜色关键字 280\n9.1.2 不支持的transparent关键字 282\n9.1.3 不支持的currentColor变量 282\n9.1.4 不支持的rgba颜色和hsla颜色 282\n9.1.5 支持却鸡肋的系统颜色 283\n9.2 CSS世界的background很单调 285\n9.2.1 隐藏元素的background-image到底加不加载 285\n9.2.2 与众不同的background-position百分比计算方式 286\n9.2.3 background-repeat与渲染性能 287\n9.2.4 外强中干的background-attachment:fixed 288\n9.2.5 background-color背景色永远是很低的 289\n9.2.6 利用多背景的属性hack小技巧 290\n9.2.7 渐变背景和rgba背景色的兼容处理 290\n第 10章 元素的显示与隐藏 292\n10.1 display与元素的显隐 294\n10.2 visibility与元素的显隐 296\n10.2.1 不仅仅是保留空间这么简单 296\n10.2.2 了解visibility:collapse 301\n第 11章 用户界面样式 302\n11.1 和border形似的outline属性 302\n11.1.1 万万不可在全局设置outline:0 none 302\n11.1.2 真正的不占据空间的outline及其应用 304\n11.2 光标属性cursor 307\n11.2.1 琳琅满目的cursor属性值 307\n11.2.2 自定义光标 314\n第 12章 流向的改变 315\n12.1 改变水平流向的direction 315\n12.1.1 direction简介 315\n12.1.2 direction的黄金搭档unicode-bidi 318\n12.2 改变CSS世界纵横规则的writing-mode 320\n12.2.1 writing-mode原本的作用 321\n12.2.2 writing-mode不经意改变了哪些规则 324\n12.2.3 writing-mode和direction的关系 328","pages":"328","images":{"small":"https://img1.doubanio.com/view/subject/s/public/s29651678.jpg","large":"https://img1.doubanio.com/view/subject/l/public/s29651678.jpg","medium":"https://img1.doubanio.com/view/subject/m/public/s29651678.jpg"},"alt":"https://book.douban.com/subject/27615777/","id":"27615777","publisher":"人民邮电出版社","isbn10":"7115470669","isbn13":"9787115470669","title":"CSS世界","url":"https://api.douban.com/v2/book/27615777","alt_title":"","author_intro":"张鑫旭,前端开发工程师,国内知名前端博客“鑫空间-鑫生活”博主,目前就职于阅文集团用户体验设计部(YUX),担任技术经理。2007年开始接触前端,10年来一直工作在前端开发一线,在HTML/CSS等与交互体验关系密切的领域花了大量的时间学习和研究,有比较多的心得体会。","summary":"本书从前端开发人员的需求出发,以“流”为线索,从结构、内容到美化装饰等方面,全面且深入地讲解前端开发人员必须了解和掌握的大量的CSS知识点。同时,作者结合多年的从业经验,通过大量的实战案例,详尽解析CSS的相关知识与常见问题。作者还为本书开发了专门的配套网站,进行实例展示、问题答疑。\n作为一本CSS深度学习的书,书中介绍大量许多前端开发人员都不知道的CSS知识点。通过阅读本书,读者会对CSS世界的深度和广度有一个全新的认识。","price":"CNY 69.00"},"9787115416940":{"rating":{"max":10,"numRaters":255,"average":"9.4","min":0},"subtitle":"","author":["[希] Lea Verou"],"pubdate":"2016-4","tags":[{"count":385,"name":"CSS","title":"CSS"},{"count":197,"name":"前端开发","title":"前端开发"},{"count":122,"name":"前端","title":"前端"},{"count":67,"name":"网页设计","title":"网页设计"},{"count":53,"name":"Web前端开发","title":"Web前端开发"},{"count":51,"name":"CSS秘笈","title":"CSS秘笈"},{"count":47,"name":"编程","title":"编程"},{"count":37,"name":"计算机","title":"计算机"}],"origin_title":"CSS Secrets: Better Solutions to Everyday Web Design Problems","image":"https://img1.doubanio.com/view/subject/m/public/s28659699.jpg","binding":"平装","translator":["CSS魔法"],"catalog":"译者序\n序\n前言\n第1章 引言\n第2章 背景与边框\n第3章 形状\n第4章 视觉效果\n第5章 字体排印\n第6章 用户体验\n第7章 结构与布局\n第8章 过渡与动画\n按规范分类","pages":"260","images":{"small":"https://img1.doubanio.com/view/subject/s/public/s28659699.jpg","large":"https://img1.doubanio.com/view/subject/l/public/s28659699.jpg","medium":"https://img1.doubanio.com/view/subject/m/public/s28659699.jpg"},"alt":"https://book.douban.com/subject/26745943/","id":"26745943","publisher":"人民邮电出版社","isbn10":"711541694X","isbn13":"9787115416940","title":"CSS揭秘","url":"https://api.douban.com/v2/book/26745943","alt_title":"CSS Secrets: Better Solutions to Everyday Web Design Problems","author_intro":"Lea Verou\nW3C CSS工作组特邀专家,设计CSS语言的委员之一,此前曾在W3C担任开发者代言人。目前,她在麻省理工学院从事人机交互领域的研究。她还是一位博客作家,并经常在国际性的技术会议上担任讲师;她创建的多个开源项目广受开发者欢迎。\nCSS魔法\n原名张鹏,国内知名的CSS技术专家,百姓网前端架构师。拥有近十年的网站开发经验,在移动前端领域积累颇深,自称“披着工程师外衣的设计师”。他是CMUI、Action、GHX等开源项目的作者,曾为GitHub、Gulp、Stylus等网站和项目翻译过大量文档;其生动活泼、循序渐进的博客写作风格深受读者喜爱;在CSS Conf等技术会议上所作的演讲广受好评。","summary":"本书是一本注重实践的教程,作者为我们揭示了 47 个鲜为人知的 CSS 技巧,主要内容包括背景与边框、形状、 视觉效果、字体排印、用户体验、结构与布局、过渡与动画等。本书将带领读者循序渐进地探寻更优雅的解决方案,攻克每天都会遇到的各种网页样式难题。\n本书的读者对象为前端工程师、网页开发人员。","price":"99.00元"},"9787121238369":{"rating":{"max":10,"numRaters":176,"average":"8.2","min":0},"subtitle":"","author":["阮一峰"],"pubdate":"2014-8","tags":[{"count":97,"name":"JavaScript","title":"JavaScript"},{"count":66,"name":"ECMAScript6","title":"ECMAScript6"},{"count":49,"name":"前端","title":"前端"},{"count":18,"name":"Web前端开发","title":"Web前端开发"},{"count":17,"name":"编程","title":"编程"},{"count":15,"name":"Javascript","title":"Javascript"},{"count":12,"name":"计算机","title":"计算机"},{"count":9,"name":"Web","title":"Web"}],"origin_title":"","image":"https://img3.doubanio.com/view/subject/m/public/s28315395.jpg","binding":"平装","translator":[],"catalog":"第一章ECMAScript6简介............................ 1\nECMAScript和JavaScript的关系 3\nECMAScript的历史 4\n部署进度 5Traceur编译器 7\nECMAScript7 11\n第二章let和const命令..............................13\nlet命令 15\n块级作用域 17\nconst命令 19\n第三章 变量的解构赋值..............................21\n数组的解构赋值 23\n对象的解构赋值 25\n用途 27\n第四章 字符串的扩展 ................................31\ncodePointAt方法 33\nString.fromCodePoint方法 34\n字符的Unicode表示法 35\n正则表达式的u修饰符 36\ncontains(),startsWith(),endsWith() 36\nrepeat() 37\n正则表达式的y修饰符 38\n模板字符串 39\n第五章 数值的扩展 ..................................41\n二进制和八进制数值表示法 43\nNumber.isFinite(),Number.isNaN() 43\nNumber.parseInt(),Number.parseFloat() 44\nNumber.isInteger()和安全整数 44\nMath对象的扩展 45\nMath.trunc() 45\n数学方法 45\n第六章 数组的扩展 ..................................47\nArray.from() 49\nArray.of() 50\n数组实例的fnd()和fndIndex() 50\n数组实例的fll() 51\n数组实例的entries(),keys()和values() 52\n数组推导 53\nArray.observe(),Array.unobserve() 55\n第七章 对象的扩展 ..................................57\nObject.is() 59\nObject.assign() 59\n__proto__属性,Object.setPrototypeOf(),\nObject.getPrototypeOf() 60\n__proto__属性 60\nObject.setPrototypeOf() 61\nObject.getPrototypeOf() 61\n增强的对象写法 62\n属性名表达式 63Symbol 64\nProxy 66Object.observe(),Object.unobserve() 68\n第八章 函数的扩展 ..................................71\n函数参数的默认值 73rest参数 74\n扩展运算符 75箭头函数 77\n第九章 Set和Map数据结构..........................81Set 83Map 86\n基本用法 86\n属性和方法 88\n遍历 89WeakMap 91\n第十章Iterator和for...of循环.......................93\nIterator(遍历器) 95for...of循环 97\n第十一章Generator函数..............................103\n含义 105\nnext方法的参数 108\n异步操作的应用 109\nfor...of循环 112\nyield*语句 112\n第十二章Promise对象 ...............................115\n基本用法 117\n链式操作 120\ncatch方法:捕捉错误 121\nPromise.all方法 121\nPromise.resolve方法 122\nasync函数 123\n第13章 Class和Module.............................125\nClass 127\nModule的基本用法 129\nexport和import 129\n模块的整体加载 130\nexportdefault语句 131\n模块的继承 132\n参考链接.............................................135\n索引.................................................143","pages":"145","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s28315395.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s28315395.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s28315395.jpg"},"alt":"https://book.douban.com/subject/25966265/","id":"25966265","publisher":"电子工业出版社","isbn10":"7121238365","isbn13":"9787121238369","title":"ECMAScript6入门","url":"https://api.douban.com/v2/book/25966265","alt_title":"","author_intro":"阮一峰:著名技术博客作者,JavaScript专家。专注于网站开发技术,超过十年。畅销书《黑客与画家》《软件随想录》的译者。","summary":"《ECMAScript6入门》全面介绍了ECMAScript6新引入的语法特性,覆盖了ECMAScript6与ECMAScript5的所有不同之处,对涉及的语法知识给予了详细介绍,并给出了大量简洁易懂的示例代码。\n《ECMAScript6入门》为中级难度,适合已有一定JavaScript语言基础的读者,用来了解这门语言的最新发展;也可当作参考手册,查寻新增的语法点。","price":"49.00元"},"9787115388889":{"rating":{"max":10,"numRaters":293,"average":"9.1","min":0},"subtitle":"","author":["曾探"],"pubdate":"2015-5","tags":[{"count":439,"name":"JavaScript","title":"JavaScript"},{"count":286,"name":"设计模式","title":"设计模式"},{"count":184,"name":"前端开发","title":"前端开发"},{"count":94,"name":"前端","title":"前端"},{"count":82,"name":"Web前端","title":"Web前端"},{"count":69,"name":"编程","title":"编程"},{"count":65,"name":"javascript","title":"javascript"},{"count":59,"name":"计算机","title":"计算机"}],"origin_title":"","image":"https://img3.doubanio.com/view/subject/m/public/s28065006.jpg","binding":"平装","translator":[],"catalog":"第一部分 基础知识\n第1章 面向对象的JavaScript\n1.1 动态类型语言和鸭子类型  2\n1.2 多态  4\n1.3 封装  12\n1.4 原型模式和基于原型继承的JavaScript对象系统  14\n第2章 this、call和apply\n2.1 this  24\n2.2 call和apply  29\n第3章 闭包和高阶函数\n3.1 闭包 35\n3.2 高阶函数  44\n3.3 小结  58\n第二部分 设计模式\n第4章 单例模式\n4.1 实现单例模式  60\n4.2 透明的单例模式  61\n4.3 用代理实现单例模式  62\n4.4 JavaScript中的单例模式  63\n4.5 惰性单例  65\n4.6 通用的惰性单例  68\n4.7 小结  70\n第5章 策略模式\n5.1 使用策略模式计算奖金  72\n5.2 JavaScript 版本的策略模式  75\n5.3 多态在策略模式中的体现  76\n5.4 使用策略模式实现缓动动画  76\n5.5 更广义的“算法”  80\n5.6 表单校验  80\n5.7 策略模式的优缺点  86\n5.8 一等函数对象与策略模式  86\n5.9 小结  87\n第6章 代理模式\n6.1 第一个例子——小明追MM的故事  88\n6.2 保护代理和虚拟代理  91\n6.3 虚拟代理实现图片预加载  91\n6.4 代理的意义  93\n6.5 代理和本体接口的一致性  94\n6.6 虚拟代理合并HTTP 请求  95\n6.7 虚拟代理在惰性加载中的应用  97\n6.8 缓存代理  99\n6.9 用高阶函数动态创建代理  100\n6.10 其他代理模式  101\n6.11 小结  102\n第7章 迭代器模式\n7.1 jQuery 中的迭代器  103\n7.2 实现自己的迭代器  104\n7.3 内部迭代器和外部迭代器  104\n7.4 迭代类数组对象和字面量对象  106\n7.5 倒序迭代器  106\n7.6 中止迭代器  107\n7.7 迭代器模式的应用举例  107\n7.8 小结  109\n第8章 发布—订阅模式\n8.1 现实中的发布—订阅模式  110\n8.2 发布—订阅模式的作用  110\n8.3 DOM 事件  111\n8.4 自定义事件  112\n8.5 发布—订阅模式的通用实现  113\n8.6 取消订阅的事件  115\n8.7 真实的例子——网站登录  115\n8.8 全局的发布—订阅对象  117\n8.9 模块间通信  119\n8.10 必须先订阅再发布吗  120\n8.11 全局事件的命名冲突  121\n8.12 JavaScript实现发布—订阅模式的便利性  124\n8.13 小结  124\n第9章 命令模式\n9.1 命令模式的用途  125\n9.2 命令模式的例子——菜单程序  126\n9.3 JavaScript中的命令模式  128\n9.4 撤销命令  130\n9.5 撤消和重做  132\n9.6 命令队列  134\n9.7 宏命令  134\n9.8 智能命令与傻瓜命令  135\n9.9 小结  136\n第10章 组合模式\n10.1 回顾宏命令  138\n10.2 组合模式的用途  139\n10.3 请求在树中传递的过程  139\n10.4 更强大的宏命令  140\n10.5 抽象类在组合模式中的作用  143\n10.6 透明性带来的安全问题  144\n10.7 组合模式的例子——扫描文件夹  145\n10.8 一些值得注意的地方  147\n10.9 引用父对象  148\n10.10 何时使用组合模式  150\n10.11 小结  150\n第11章 模板方法模式\n11.1 模板方法模式的定义和组成  151\n11.2 第一个例子——Coffee or Tea  151\n11.3 抽象类  156\n11.4 模板方法模式的使用场景  159\n11.5 钩子方法  160\n11.6 好莱坞原则  162\n11.7 真的需要“继承”吗  162\n11.8 小结  164\n第12章 享元模式\n12.1 初识享元模式  165\n12.2 内部状态与外部状态  166\n12.3 享元模式的通用结构  167\n12.4 文件上传的例子  167\n12.5 享元模式的适用性  173\n12.6 再谈内部状态和外部状态  173\n12.7 对象池  175\n12.8 小结  178\n第13章 职责链模式\n13.1 现实中的职责链模式  179\n13.2 实际开发中的职责链模式  180\n13.3 用职责链模式重构代码  181\n13.4 灵活可拆分的职责链节点  183\n13.5 异步的职责链  184\n13.6 职责链模式的优缺点  185\n13.7 用AOP 实现职责链  186\n13.8 用职责链模式获取文件上传对象  187\n13.9 小结  188\n第14章 中介者模式\n14.1 现实中的中介者  190\n14.2 中介者模式的例子——泡泡堂游戏  191\n14.3 中介者模式的例子——购买商品  199\n14.4 小结  207\n第15章 装饰者模式\n15.1 模拟传统面向对象语言的装饰者模式  210\n15.2 装饰者也是包装器  211\n15.3 回到JavaScript 的装饰者  212\n15.4 装饰函数  212\n15.5 用AOP 装饰函数  214\n15.6 AOP 的应用实例  216\n15.7 装饰者模式和代理模式  222\n15.8 小结  223\n第16章 状态模式\n16.1 初识状态模式  224\n16.2 状态模式的定义  230\n16.3 状态模式的通用结构  230\n16.4 缺少抽象类的变通方式   231\n16.5 另一个状态模式示例——文件上传  232\n16.6 状态模式的优缺点  241\n16.7 状态模式中的性能优化点  241\n16.8 状态模式和策略模式的关系  241\n16.9 JavaScript版本的状态机  242\n16.10 表驱动的有限状态机  244\n16.11 实际项目中的其他状态机  245\n16.12 小结  245\n第17章 适配器模式\n17.1 现实中的适配器  246\n17.2 适配器模式的应用  247\n17.3 小结  250\n第三部分 设计原则和编程技巧\n第18章 单一职责原则\n18.1 设计模式中的SRP原则  252\n18.2 何时应该分离职责  256\n18.3 违反SRP原则  256\n18.4 SRP 原则的优缺点  257\n第19章 最少知识原则\n19.1 减少对象之间的联系  258\n19.2 设计模式中的LKP原则  259\n19.3 封装在LKP 原则中的体现  261\n第20章 开放-封闭原则\n20.1 扩展window.onload函数  263\n20.2 开放和封闭  264\n20.3 用对象的多态性消除条件分支  265\n20.4 找出变化的地方  266\n20.5 设计模式中的开放—封闭原则  268\n20.6 开放—封闭原则的相对性  270\n20.7 接受第一次愚弄  270\n第21章 接口和面向接口编程\n21.1 回到Java的抽象类  271\n21.2 interface  276\n21.3 JavaScript 语言是否需要抽象类和interface  275\n21.4 用鸭子类型进行接口检查  277\n21.5 用TypeScript 编写基于interface的命令模式  278\n第22章 代码重构\n22.1 提炼函数  282\n22.2 合并重复的条件片段  283\n22.3 把条件分支语句提炼成函数  284\n22.4 合理使用循环  285\n22.5 提前让函数退出代替嵌套条件分支  285\n22.6 传递对象参数代替过长的参数列表  286\n22.7 尽量减少参数数量  287\n22.8 少用三目运算符  288\n22.9 合理使用链式调用  288\n22.10 分解大型类  289\n22.11 用return退出多重循环  290\n参考文献  293","pages":"294","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s28065006.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s28065006.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s28065006.jpg"},"alt":"https://book.douban.com/subject/26382780/","id":"26382780","publisher":"人民邮电出版社","isbn10":"7115388881","isbn13":"9787115388889","title":"JavaScript设计模式与开发实践","url":"https://api.douban.com/v2/book/26382780","alt_title":"","author_intro":"曾探\n2007年毕业于吉林大学软件学院。就职于国内知名前端团队腾讯AlloyTeam,高级工程师。\n曾参与Web QQ、QQ群、Q+开发者网站、微云、QQ兴趣部落等大型前端项目的开发。有过Java、Python和JavaScript的开发经验,业余作品有HTML5版街头霸王等。\n平时喜欢电影和音乐,业务时间也是一名健身教练。","summary":"本书在尊重《设计模式》原意的同时,针对JavaScript语言特性全面介绍了更适合JavaScript程序员的了16个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。本书将教会你如何把经典的设计模式应用到JavaScript语言中,编写出优美高效、结构化和可维护的代码。","series":{"id":"13000","title":"图灵原创"},"price":"59.00元"},"9787115275790":{"rating":{"max":10,"numRaters":1926,"average":"9.3","min":0},"subtitle":"","author":["[美] Nicholas C. Zakas"],"pubdate":"2012-3-29","tags":[{"count":2302,"name":"JavaScript","title":"JavaScript"},{"count":1064,"name":"Web前端开发","title":"Web前端开发"},{"count":667,"name":"前端开发","title":"前端开发"},{"count":511,"name":"前端","title":"前端"},{"count":498,"name":"javascript","title":"javascript"},{"count":452,"name":"编程","title":"编程"},{"count":409,"name":"计算机","title":"计算机"},{"count":404,"name":"Web开发","title":"Web开发"}],"origin_title":"Professional JavaScript for Web","image":"https://img3.doubanio.com/view/subject/m/public/s8958650.jpg","binding":"平装","translator":["李松峰","曹力"],"catalog":"目  录\n第1章 JavaScript简介  1\n1.1 JavaScript简史  1\n1.2 JavaScript实现  2\n1.2.1 ECMAScript  3\n1.2.2 文档对象模型(DOM)  5\n1.2.3 浏览器对象模型(BOM)  8\n1.3 JavaScript版本  8\n1.4 小结  9\n第2章 在HTML中使用JavaScript  10\n2.1