随着核心平台以及生态系统的不断创新,java技术一直在快速向前发展。《java程序员修炼之道》涵盖了java7的*新特性和java开发的关键技术,对当前大量开源技术并存,多核处理器、并发以及海量数据给java开发带来的挑战作出了精辟的分析,提供了实践前沿的深刻洞见,涉及依赖注入、现代并发、类与字节码、性能调优等底层概念的剖析。今天,掌握jvm上的新语言对java开发人员的意义非比寻常。因此深入探讨java关键技术,还用较大篇幅全面讨论了jvm上的多语言开发和项目控制,包括groovy、scala和clojure这些优秀的新语言。这些技术可以帮助java开发人员构建下一代商业软件。java开发人员若要修炼进阶,本书绝对不容错过!
《java程序员修炼之道》分为四部分,**部分全面介绍java7的新特性,第二部分探讨java关键编程知识和技术,第三部分讨论jvm上的新语言和多语言编程,第四部分将平台和多语言编程知识付诸实践。从介绍java7的新特性入手,《java程序员修炼之道》涵盖了java开发中*重要的技术,比如依赖注入、测试驱动的开发和持续集成,探索了jvm上的非java语言,并详细讲解了多语言项目,特别是涉及groovy、scala和clojure语言的项目。此外,书中含有大量代码示例,帮助读者从实践中理解java语言和平台。《java程序员修炼之道》适合java开发人员以及对java7和jvm新语言感兴趣的各领域人士阅读。
**部分用java 7做开发
第1章初识java 7
1.1 语言与平台
1.2 coin项目:浓缩的都是精华
1.3 coin项目中的修改
1.3.1 switch语句中的string
1.3.2 更强的数值文本表示法
1.3.3 改善后的异常处理
1.3.4 try-with-resources(twr)
1.3.5 钻石语法
1.3.6 简化变参方法调用
1.4 小结
第2章新i/o
2.1 java i/o简史
2.1.1 java 1.0到1.3
2.1.2 在java 1.4中引入的nio
2.1.3 下一代i/o-nio.2
2.2 文件i/o的基石:path
2.2.1 创建一个path
2.2.2 从path中获取信息
2.2.3 移除冗余项
2.2.4 转换path
2.2.5 nio.2 path和java已有的file类
2.3 处理目录和目录树
2.3.1 在目录中查找文件
2.3.2 遍历目录树
2.4 nio.2的文件系统i/o
2.4.1 创建和删除文件
2.4.2 文件的复制和移动
2.4.3 文件的属性
2.4.4 快速读写数据
2.4.5 文件修改通知
2.4.6 seekablebytechannel
2.5 异步 i/o操作
2.5.1 将来式
2.5.2 回调式
2.6 socket和channel的整合
2.6.1 networkchannel
2.6.2 multicastchannel
2.7 小结
第二部分关键技术
第3章依赖注入
3.1 知识注入:理解ioc和di
3.1.1 控制反转
3.1.2 依赖注入
3.1.3 转成di
3.2 java中标准化的di
3.2.1 @inject注解
3.2.2 @qualifier注解
3.2.3 @named注解
3.2.4 @scope注解
3.2.5 @singleton注解
3.2.6 接口provider
3.3 java中的di参考实现:guice 3
3.3.1 guice新手指南
3.3.2 水手绳结:guice的各种绑定
3.3.3 在guice中限定注入对象的生命周期
3.4 小结
第4章现代并发
4.1 并发理论简介
4.1.1 解释java线程模型
4.1.2 设计理念
4.1.3 这些原则如何以及为何会相互冲突
4.1.4 系统开销之源
4.1.5 一个事务处理的例子
4.2 块结构并发(java 5之前)
4.2.1 同步与锁
4.2.2 线程的状态模型
4.2.3 完全同步对象
4.2.4 死锁
4.2.5 为什么是synchronized
4.2.6 关键字volatile
4.2.7 不可变性
4.3 现代并发应用程序的构件
4.3.1 原子类:java.util. concurrent.atomic
4.3.2 线程锁:java.util. concurrent.locks
4.3.3 countdownlatch
4.3.4 concurrenthashmap
4.3.5 copyonwritearraylist
4.3.6 queue
4.4 控制执行
4.4.1 任务建模
4.4.2 scheduledthread-poolexecutor
4.5 分支/合并框架
4.5.1 一个简单的分支/合并例子
4.5.2 forkjointask与工作窃取
4.5.3 并行问题
4.6 java内存模型
4.7 小结
第5章类文件与字节码
5.1 类加载和类对象
5.1.1 加载和连接概览
5.1.2 验证
5.1.3 class对象
5.1.4 类加载器
5.1.5 示例:依赖注入中的类加载器
5.2 使用方法句柄
5.2.1 methodhandle
5.2.2 methodtype
5.2.3 查找方法句柄
5.2.4 示例:反射、代理与方法句柄
5.2.5 为什么选择methodhandle
5.3 检查类文件
5.3.1 介绍javap
5.3.2 方法签名的内部形式
5.3.3 常量池
5.4 字节码
5.4.1 示例:反编译类
5.4.2 运行时环境
5.4.3 操作码介绍
5.4.4 加载和储存操作码
5.4.5 数学运算操作码
5.4.6 执行控制操作码
5.4.7 调用操作码
5.4.8 平台操作操作码
5.4.9 操作码的快捷形式
5.4.10 示例:字符串拼接
5.5 invokedynamic
5.5.1 invokedynamic如何工作
5.5.2 示例:反编译invokedynamic调用
5.6 小结
第6章理解性能调优
6.1 性能术语
6.1.1 等待时间
6.1.2 吞吐量
6.1.3 利用率
6.1.4 效率
6.1.5 容量
6.1.6 扩展性
6.1.7 退化
6.2 务实的性能分析法
6.2.1 知道你在测量什么
6.2.2 知道怎么测量
6.2.3 知道性能目标是什么
6.2.4 知道什么时候停止优化
6.2.5 知道高性能的成本
6.2.6 知道过早优化的危险
6.3 哪里出错了?我们担心的原因
6.3.1 过去和未来的性能趋势:摩尔定律
6.3.2 理解内存延迟层级
6.3.3 为什么java性能调优存在困难
6.4 一个来自于硬件的时间问题
6.4.1 硬件时钟
6.4.2 麻烦的nanotime()
6.4.3 时间在性能调优中的作用
6.4.4 案例研究:理解缓存未命中
6.5 垃圾收集
6.5.1 基本算法
6.5.2 标记和清除
6.5.3 jmap
6.5.4 与gc相关的jvm参数
6.5.5 读懂gc日志
6.5.6 用visualvm查看内存使用情况
6.5.7 逸出分析
6.5.8 并发标记清除
6.5.9 新的收集器:g1
6.6 hotspot的jit编译
6.6.1 介绍hotspot
6.6.2 内联方法
6.6.3 动态编译和独占调用
6.6.4 读懂编译日志
6.7 小结
第三部分jvm上的多语言编程
第7章备选jvm语言
7.1 java 太笨?纯粹诽谤
7.1.1 整合系统
7.1.2 函数式编程的基本原理
7.1.3 映射与过滤器
7.2 语言生态学
7.2.1 解释型与编译型语言
7.2.2 动态与静态类型
7.2.3 命令式与函数式语言
7.2.4 重新实现的语言与原生语言
7.3 jvm上的多语言编程
7.3.1 为什么要用非java语言
7.3.2 崭露头角的语言新星
7.4 如何挑选称心的非java语言
7.4.1 低风险
7.4.2 与java的交互操作
7.4.3 良好的工具和测试支持
7.4.4 备选语言学习难度
7.4.5 使用备选语言的开发者
7.5 jvm对备选语言的支持
7.5.1 非java语言的运行时环境
7.5.2 编译器小说
7.6 小结
第8章groovy:java的动态伴侣
8.1 groovy入门
8.1.1 编译和运行
8.1.2 groovy控制台
8.2 groovy 101:语法和语义
8.2.1 默认导入
8.2.2 数字处理
8.2.3 变量、动态与静态类型、作用域
8.2.4 列表和映射语法
8.3 与java的差异--新手陷阱
8.3.1 可选的分号和返回语句
8.3.2 可选的参数括号
8.3.3 访问限定符
8.3.4 异常处理
8.3.5 groovy中的相等
8.3.6 内部类
8.4 java不具备的groovy特性
8.4.1 groovybean
8.4.2 安全解引用操作符
8.4.3 猫王操作符
8.4.4 增强型字符串
8.4.5 函数字面值
8.4.6 内置的集合操作
8.4.7 对正则表达式的内置支持
8.4.8 简单的xml处理
8.5 groovy与java的合作
8.5.1 从groovy调用java
8.5.2 从java调用groovy
8.6 小结
第9章scala:简约而不简单
9.1 走马观花scala
9.1.1 简约的scala
9.1.2 match表达式
9.1.3 case类
9.1.4 actor
9.2 scala能用在我的项目中吗
9.2.1 scala和java的比较
9.2.2 何时以及如何开始使用scala
9.2.3 scala可能不适合当前项目的迹象
9.3 让代码因scala重新绽放
9.3.1 使用编译器和repl
9.3.2 类型推断
9.3.3 方法
9.3.4 导入
9.3.5 循环和控制结构
9.3.6 scala的函数式编程
9.4 scala对象模型:相似但不同
9.4.1 一切皆对象
9.4.2 构造方法
9.4.3 特质
9.4.4 单例和伴生对象
9.4.5 case类和match表达式
9.4.6 警世寓言
9.5 数据结构和集合
9.5.1 list
9.5.2 map
9.5.3 泛型
9.6 actor介绍
9.6.1 代码大舞台
9.6.2 用mailbox跟actor通信
9.7 小结
第10章clojure:更安全地编程
10.1 clojure介绍
10.1.1 clojure的hello world
10.1.2 repl入门
10.1.3 犯了错误
10.1.4 学着去爱括号
10.2 寻找clojure:语法和语义
10.2.1 特殊形式新手营
10.2.2 列表、向量、映射和集
10.2.3 数学运算、相等和其他操作
10.3 使用函数和循环
10.3.1 一些简单的clojure函数
10.3.2 clojure中的循环
10.3.3 读取器宏和派发器
10.3.4 函数式编程和闭包
10.4 clojure序列
10.4.1 懒序列
10.4.2 序列和变参函数
10.5 clojure与java的互操作
10.5.1 从clojure中调用java
10.5.2 clojure值的java类型
10.5.3 使用clojure代理
10.5.4 用repl做探索式编程
10.5.5 在java中使用clojure
10.6 clojure并发
10.6.1 未来式与并行调用
10.6.2 ref形式
10.6.3 代理
10.7 小结
第四部分多语种项目开发
第11章测试驱动开发
11.1 tdd概览
11.1.1 一个测试用例
11.1.2 多个测试用例
11.1.3 深入思考红-绿-重构循环
11.1.4 junit
11.2 测试替身
11.2.1 虚设对象
11.2.2 存根对象
11.2.3 伪装替身
11.2.4 模拟对象
11.3 scalatest
11.4 小结
第12章构建和持续集成
12.1 与maven 3相遇
12.2 maven 3入门项目
12.3 用maven 3构建java7developer项目
12.3.1 pom
12.3.2 运行示例
12.4 jenkins:满足ci需求
12.4.1 基础配置
12.4.2 设置任务
12.4.3 执行任务
12.5 maven和jenkins代码指标
12.5.1 安装jenkins插件
12.5.2 用checkstyle保持代码一致性
12.5.3 用findbugs设定质量标杆
12.6 leiningen
12.6.1 leiningen入门
12.6.2 leiningen的架构
12.6.3 hello lein
12.6.4 用leiningen做面向repl的tdd
12.6.5 用leiningen打包和部署
12.7 小结
第13章快速web开发
13.1 java web框架的问题
13.1.1 java编译为什么不好
13.1.2 静态类型为什么不好
13.2 选择web框架的标准
13.3 grails入门
13.4 grails快速启动项目
13.4.1 创建域对象
13.4.2 测试驱动开发
13.4.3 域对象持久化
13.4.4 创建测试数据
13.4.5 控制器
13.4.6 gsp/jsp页面
13.4.7 脚手架和ui的自动化创建
13.4.8 快速周转的开发
13.5 深入grails
13.5.1 日志
13.5.2 gorm:对象关系映射
13.5.3 grails插件
13.6 compojure入门
13.6.1 hello compojure
13.6.2 ring和路由
13.6.3 hiccup
13.7 我是不是一只水獭
13.7.1 项目设置
13.7.2 核心函数
13.8 小结
第14章保持优秀
14.1 对java 8的期待
14.1.1 lambda表达式(闭包)
14.1.2 模块化(拼图jigsaw)
14.2 多语言编程
14.2.1 语言的互操作性及元对象协议
14.2.2 多语言模块化
14.3 未来的并发趋势
14.3.1 多核的世界
14.3.2 运行时管理的并发
14.4 jvm的新方向
14.4.1 vm的合并
14.4.2 协同程序
14.4.3 元组
14.5 小结
附录a java7developer:源码安装
附录b glob模式语法及示例
附录c 安装备选jvm语言
附录d jenkins的下载和安装
附录e java7developer:maven pom
我自认为是一名java专家:用java写了15年程序,发表了几百篇文章,在各种会议中演讲,还执教java高级课程。可阅读ben和martijn的这本大作,经常能给我一些意料之外的启发。
——heinz kabutz博士,知名java技术教育家、the java specialists'newsletter创始人
如果你想在java专业领域占有一席之地,本书绝对值得拥有。
——stephen harrison,firstfuel软件公司首席软件架构师
本书为那些对于编程有极大热情的java开发人员提供了绝佳的资源。
——读者
本书最棒的部分是依赖注入、多语言编程还有现代并发……老实说,这本书的所有内容都很棒!
——读者
今天,掌握jvm上的新语言对java开发人员的意义非比寻常。因此本书除了深入探讨java关键技术,还用较大篇幅全面讨论了jvm上的多语言开发和项目控制,包括groovy、scala和clojure这些优秀的新语言。这些技术可以帮助java开发人员构建下一代商业软件。java开发人员若要修炼进阶,本书绝对不容错过!
——读者
Benjamin J. Evans是伦敦Java用户组发起人、Java社区过程执行委员会成员。他拥有多年Java开发经验,现在是一家面向金融业的Java技术公司的CEO。Martijn Verburg是jClarity的CTO、伦敦Java用户组领导人。作为一名技术专家和众多初创企业的OSS导师,他拥有十多年的经验。Martijn经常应邀出席Java界的大型会议(JavaOne、Devoxx、OSCON、FOSDEM等)并发表演讲,人送雅号“开发魔头”,赞颂他敢于向行业现状挑战的精神。
《并行程序设计原理》内容新颖,涉及现代并行硬件和软件技术,包括多核体系结构及其并行程序设计技术。《并行程序设计原理》侧重
《CSS精粹(第2版)》采用问答的形式,为CSS使用过程中一些有价值的经典问题提供了精彩的实践解决方案。《CSS精粹(第2版)》内容包括
《人生三舍》内容简介:本书是关于探索人生哲学的通俗读物。本书包括了把过程当作一种享受;直的不行就绕个弯;宽广胸襟,无忧也无
谁是极客?谁在改写人类的运程?100年以前,可能是科学怪人弗兰肯斯坦;20年以前,是微软的比尔•盖茨和苹果的斯蒂夫•乔布斯;今天
《新概念编程C语言篇习题解答》对《新概念编程C语言篇》教材中的习题进行了系统全面的分析和解答。习题精选了C语言编程中典型题型
多智能体系统及应用 本书特色多智能体和多智能体技术是人工智能领域活跃的研究分支。本书在2014年度“中国智能体及多智能体系统”研讨会的基础上结集而成,全书共分1...
《赛雷三分钟漫画三国演义3》内容简介:电影式全场景,爆笑还原三国演义!超立体,超生动,超涨知识!《三国演义》可以说是中国较为
JamesF.Kurose是美国马萨诸塞大学阿默斯特分校的计算机科学系教授。他曾多次荣获杰出教师奖,并获得IEEETaylorBooth教育奖章,还
《空间的语言》介绍了:这部独特的理论著作为我们提供了一个完事的建筑空间理念论述。布莱恩·劳森用最精炼通俗的语言对这个理念
《不畏将来 不念过去2》内容简介:畅销两百万册作者十二升华之作。时隔6年十二用全新观点,告诉你如何从容面对恋爱、婚姻和原生家庭
《概念物理(英文版•原书第11版)》内容简介:在美国有超过2/3的教师使用保罗。休伊特教授的这本最畅销的概念物理教材。休伊特教授
《2014年会计从业资格考试专用标准化辅导教材系列:会计基础》内容简介:《2014年会计从业资格考试专用标准化辅导教材系列:会计基
《C语言程序设计》内容简介:C语言是国内外广泛使用的计算机语言,是理工类专业人员应掌握的一种程序设计工具。本书以能力培养为目
《未来零售》内容简介:“新零售”概念提出至今,各家零售企业已触发了一系列迭代动作,而突如其来的疫情,更是给整个新零售行业按
空间碎片的危害正受到科学、商业等领域空间用户越来越广泛的关注。《空间碎片--模型与风险分析(精)》(作者克林克瑞德)是一部空间
《异质性的对话》内容简介:本书基于对“独立动画”的一般界定而展开,分析独立动画如何通过媒介实验与多层面批判确立自身,一方面
揭示数字化主流大趋势的最新权威论著《主流》作者的最新力作!与法国秋季新版同步上市!面对数字化时代的到来,美国、欧盟、中国
PDA软件市场不但巨大,而且持续成长。五年之内,全世界将有大量人口使用精明时髦,可上网的移动电话。每个家庭都有一台PC?!或许
《RocketMQ技术内幕》内容简介:这是一本指导读者如何在实践中让RocketMQ实现低延迟、高并发、高可用、高可靠的著作。作者是Rocket
《机器学习与流场数据可视化》内容简介:科学计算可视化(ScientificVisualization,SciVis)是计算机图形学的一个重要研究方向,是