Java特种兵(上册)(含CD光盘1张)

来自站长百科
跳转至: 导航、​ 搜索
  • == 图书版权 ==
  • Java特种兵(上册)(含CD光盘1张)(全面提升Java单兵作战能力!中国版的Thinking in Java!专注Java排雷避坑!)
  • 谢宇 编著
  • ISBN 978-7-121-23935-9
  • 2014年9月出版
  • 定价:79.00元
  • 492页
  • 16开

Java特种兵(上册)(含CD光盘1张).jpg

  • == 编辑推荐 ==
  • 淘宝网Java技术专家,CSDN 超人气博主作品,全面提升Java单兵作战能力!
  • 该书“雕琢”的系统,为阿里超大规模的数据库集群服务!
  • 完全突破Java图书从环境搭建到语法点罗列再到案例总结的写作惯例,直逼底层,懂原理,看源码,奠定Java老A的坚实基础!
  • 没有数页代码的简单堆砌,有的是新颖的思考方法;没有各类语法的无聊罗列,更多的是在探索技术背后的思路; 没有难懂术语的枯燥晦涩,用的是对话和探讨;轻松,愉快,读来不忍释卷,要学Java,这本书不容错过!
  • == 内容提要 ==
  • 《Java特种兵(上册)(含CD光盘1张)》分上、下册,上册强调个人修为的提升,也是本书主旨所在,希望能帮助各位读者朋友提升“功力”;下册将基于上册的内容融入设计、实现的细节。
  • 《Java特种兵(上册)(含CD光盘1张)》上册共10章,主要内容包括:从简单的角度来验证功底,通过一些简单的例子来说明我们应当如何去掌握Java的基础;关于计算机的工作原理和Java虚拟机的基础知识;Java通信;Java并发;数据库知识;源码基础,说明Java常见的框架基础知识,比如反射、AOP、ORM、Annotation和配置文件的原理;JDBC、Spring的源码讲解,通过几种不同类型的框架源码,希望读者能体会源码之中的思维方式、设计、架构,以及了解到不同源码的区别所在;最后是知识总结。
  • 《Java特种兵(上册)(含CD光盘1张)》既适合有一定Java基础,并希望能在Java技术上有所成长的人阅读,也适合能静心看书的初学者,以及以自我提升为主要目的的读者阅读,还适合工作一段时间,对知识和发展的方向很迷茫,甚至对某些观念也比较迷茫,但是又渴望去解决这些问题,渴望自己成长,渴望自己能找到道路的人阅读。
  • == 目录 ==
  • 第1篇 Java功底篇
  • 第1章 扎马:看看功底如何 2
  • 1.1 String的例子,见证下我们的功底 2
  • 1.1.1 关于“==” 3
  • 1.1.2 关于“equals()” 3
  • 1.1.3 编译时优化方案 6
  • 1.1.4 补充一个例子 6
  • 1.1.5 跟String较上劲了 8
  • 1.1.6 intern()/equals() 9
  • 1.1.7 StringBuilder.append()与String“+”的PK 11
  • 1.2 一些简单算法,你会如何理解 15
  • 1.2.1 从一堆数据中找max和min 16
  • 1.2.2 从100万个数字中找最大的10个数字 17
  • 1.2.3 关于排序,实际场景很重要 17
  • 1.2.4 数据库是怎么找数据的 18
  • 1.2.5 Hash算法的形象概念 18
  • 1.3 简单数字游戏玩一玩 20
  • 1.3.1 变量A、B交换有几种方式 20
  • 1.3.2 将无序数据Hash到指定的板块 20
  • 1.3.3 大量判定“是|否”的操作 21
  • 1.3.4 简单的数据转换 22
  • 1.3.5 数字太大,long都存放不下 23
  • 1.4 功底概述 25
  • 1.4.1 什么是功底 25
  • 1.4.2 功底有何用途 25
  • 1.4.3 如何磨练功底 26
  • 1.5 功底补充 27
  • 1.5.1 原生态类型 27
  • 1.5.2 集合类 30
  • 1.6 常见的目录与工具包 32
  • 1.7 面对技术,我们纠结的那些事儿 34
  • 1.7.1 为什么我这里好用,哪里不好用 34
  • 1.7.2 你的程序不好用,你会不会用,环境有问题 35
  • 1.7.3 经验是否能当饭吃 36
  • 1.8 老A是在逆境中迎难而上者 37
  • 第2章 Java程序员要知道计算机工作原理 41
  • 2.1 Java程序员需要知道计算机工作原理吗 41
  • 2.2 CPU的那些事儿 42
  • 2.2.1 从CPU联系到Java 42
  • 2.2.2 多核 46
  • 2.2.3 Cache line 47
  • 2.2.4 缓存一致性协议 49
  • 2.2.5 上下文切换 50
  • 2.2.6 并发与征用 51
  • 2.3 内存 54
  • 2.4 磁盘 57
  • 2.5 缓存 60
  • 2.5.1 缓存的相对性 60
  • 2.5.2 缓存的用途和场景 62
  • 2.6 关于网络与数据库 63
  • 2.6.1 Java基本I/O 63
  • 2.6.2 Java的网络基本原则 64
  • 2.6.3 Java与数据库的交互 71
  • 2.7 总结 72
  • 第3章 JVM,Java程序员的OS 73
  • 3.1 学习Java虚拟机对我们有什么好处 73
  • 3.2 跨平台与字节码基本原理 74
  • 3.2.1 javap命令工具 74
  • 3.2.2 Java字节码结构 85
  • 3.2.3 Class字节码的加载 93
  • 3.2.4 字节码增强 98
  • 3.3 从虚拟机的板块开始 108
  • 3.3.1 Hotspot VM板块划分 108
  • 3.3.2 “对象存放位置”小总结 114
  • 3.3.3 关于永久代 115
  • 3.4 常见的虚拟机回收算法 116
  • 3.4.1 串行GC 117
  • 3.4.2 ParallelGC与ParallelOldGC 118
  • 3.4.3 CMS GC与未来的G1 121
  • 3.4.4 简单总结 124
  • 3.4.5 小小补充 125
  • 3.5 浅析Java对象的内存结构 126
  • 3.5.1 原始类型与对象的自动拆装箱 126
  • 3.5.2 对象内存结构 127
  • 3.5.3 对象嵌套 130
  • 3.5.4 常见类型 & 集合类的内存结构 131
  • 3.5.5 程序中内存拷贝和垃圾 134
  • 3.5.6 如何计算对象大小 134
  • 3.5.7 轻松玩一玩int[2][100] PK int[100][2] 135
  • 3.6 常见的OOM现象 136
  • 3.6.1 HeapSize OOM 136
  • 3.6.2 PermGen OOM 139
  • 3.6.3 DirectBuffer OOM 142
  • 3.6.4 StackOverflowError 144
  • 3.6.5 其他的一些内存溢出现象 146
  • 3.7 常见的Java工具 146
  • 3.7.1 jps 147
  • 3.7.2 jstat 147
  • 3.7.3 jmap 148
  • 3.7.4 jstack 148
  • 3.7.5 jinfo 149
  • 3.7.6 JConsole 150
  • 3.7.7 Visual VM 154
  • 3.7.8 MAT(Memory Analyzer Tool) 156
  • 3.7.9 BTrace 160
  • 3.7.10 HSDB 165
  • 3.7.11 工具总结 166
  • 3.8 总结 167
  • 3.8.1 写代码 167
  • 3.8.2 心理上战胜虚拟机带来的恐惧 170
  • 第4章 Java通信,交互就需要通信 171
  • 4.1 通信概述 171
  • 4.1.1 Java通信的基本过程 171
  • 4.1.2 Java通信的协议包装 173
  • 4.1.3 编写自定义通信协议 173
  • 4.1.4 Java的I/O流是不是很难学 186
  • 4.2 Java I/O与内存的那些事 191
  • 4.2.1 常规I/O操作的运作过程 191
  • 4.2.2 DirectBuffer的使用 191
  • 4.2.3 关于Buffer 195
  • 4.2.4 FileChannel的加锁 197
  • 4.3 通信调度方式 197
  • 4.3.1 同步与异步 197
  • 4.3.2 阻塞与非阻塞 198
  • 4.3.3 Linux OS调度IO模型 199
  • 4.3.4 Java中的BIO、NIO 199
  • 4.3.5 Java AIO 210
  • 4.4 Tomcat中对I/O的请求处理 214
  • 4.4.1 Tomcat的配置&一个请求的响应 214
  • 4.4.2 Request、Response对象生成 221
  • 4.4.3 拉与推 226
  • 第5章 Java并发,你会遇到吗 228
  • 5.1 基础介绍 228
  • 5.1.1 线程基础 228
  • 5.1.2 多线程 231
  • 5.1.3 线程状态 231
  • 5.1.4 反面教材suspend()、
  • resume()、stop() 236
  • 5.1.5 调度优先级 238
  • 5.1.6 线程合并(Join) 239
  • 5.1.7 线程补充小知识 241
  • 5.2 线程安全 243
  • 5.2.1 并发内存模型概述 243
  • 5.2.2 一些并发问题描述 246
  • 5.2.3 volatile 248
  • 5.2.4 final 251
  • 5.2.5 栈封闭 254
  • 5.2.6 ThreadLocal 255
  • 5.3 原子性与锁 261
  • 5.3.1 synchronized 261
  • 5.3.2 什么是乐观锁 262
  • 5.3.3 并发与锁 263
  • 5.3.4 Atomic 264
  • 5.3.5 Lock 272
  • 5.3.6 并发编程核心AQS原理 273
  • 5.3.7 锁的自身优化方法 281
  • 5.4 JDK 1.6并发编程的一些集合类 282
  • 5.5 常见的并发编程工具 284
  • 5.5.1 CountDownLatch 284
  • 5.5.2 CyclicBarrier 286
  • 5.5.3 Semaphor 288
  • 5.5.4 其他工具简介 290
  • 5.6 线程池&调度池 293
  • 5.6.1 阻塞队列模型 293
  • 5.6.2 ThreadPoolExecutor 294
  • 5.6.3 调度器ScheduleThread PoolExecutor 306
  • 5.7 总结:编写并发程序要注意些什么 317
  • 5.7.1 锁粒度 317
  • 5.7.2 死锁 321
  • 5.7.3 “坑”很多 323
  • 5.7.4 并发效率一定高吗 329
  • 5.8 其他的并发编程知识 330
  • 5.8.1 ShutdownHook(钩子线程) 330
  • 5.8.2 Future 332
  • 5.8.3 异步并不等价于多线程 333
  • 第6章 好的程序员应当知道数据库基本原理 335
  • 6.1 开发人员为什么要知道数据库原理 335
  • 6.2 从开发人员角度看数据库原理 337
  • 6.2.1 实例与存储 338
  • 6.2.2 数据库基本原理 339
  • 6.2.3 索引基本原理 348
  • 6.2.4 数据库主从基本原理 354
  • 6.2.5 我们经常相信的那些经验 354
  • 6.3 从程序员角度看数据库优化方法 355
  • 6.3.1 不同领域的SQL区别 355
  • 6.3.2 执行计划 356
  • 6.3.3 SQL逻辑的例子 365
  • 6.3.4 模型结构设计的优化 366
  • 6.3.5 临时表 367
  • 6.3.6 分页知识补充 368
  • 6.3.7 计算count值 369
  • 6.3.8 分布式事务探讨 369
  • 6.3.9 其他 371
  • 6.4 学会最基本的性能诊断 372
  • 6.4.1 进入云数据库时代 372
  • 6.4.2 从程序员角度关注的数据库诊断信息 373
  • 6.5 数风流存储,还看今朝 373
  • 第2篇 源码篇
  • 第7章 源码基础 380
  • 7.1 为何会出现框架 380
  • 7.2 阅读框架前的技术储备 384
  • 7.2.1 反射基础知识 384
  • 7.2.2 AOP基础 390
  • 7.2.3 ORM基础 395
  • 7.2.4 Annotation与配置文件 398
  • 第8章 部分JDBC源码讲解 403
  • 8.1 JDBC通用接口规范 403
  • 8.2 JDBC Driver注册 404
  • 8.3 创建Connection 411
  • 8.4 SQL执行及处理 417
  • 8.4.1 创建Statement 417
  • 8.4.2 Batch设置批处理 419
  • 8.4.3 fetchSize与maxRows 424
  • 8.4.4 setQueryTimeout()与cancel() 429
  • 第9章 部分Spring源码讲解 433
  • 9.1 Spring MVC 433
  • 9.1.1 Spring加载 433
  • 9.1.2 Spring MVC处理一个简单请求 443
  • 9.2 Spring事务管理器 447
  • 9.2.1 JDBC事务的基本思想 447
  • 9.2.2 Spring事务管理器的基本架构 448
  • 9.2.3 Spring如何保存Connection 449
  • 9.2.4 Spring如何保证程序中多次获取到的连接是同一个 451
  • 9.3 思考:自己做框架有眉目了吗 454
  • 第10章 看源码的一些总结 457
  • 10.1 高手看API的能力 457
  • 10.2 通过源码能否量化性能与稳定性 461
  • 10.3 思考相似方案和技术的优缺点 463
  • 10.4 明确场景和业务,不做技术控 464
  • 10.4.1 谈谈技术控的那些事 464
  • 10.4.2 明确业务背景的例子 466
  • 10.5 胖哥对框架的浅析 468
  • 10.5.1 框架由来的一个补充 468
  • 10.5.2 开源框架与扩展 469
  • 10.5.3 框架与解决问题 473
  • 10.6 学海无涯,心境无限 474
  • == 媒体评论 ==
  • 在阿里,成为老A,特别是成为作者这样技术专家的level,其“雕琢”的系统必须是经历双十一的洗礼和摧残而巍然鼎立的系统。本书从Java功底基础、源码介绍(特别是JDBC和Spring方面)、Java设计模式、Java实现方面,介绍Java后端开发需要的一个一个的核心点,所以非常合适在互联网公司、软件公司等从事java核心系统开发的小伙伴们。全书内容充实,并附有大量的代码、数据和图表,比较符合大多数程序员的喜好,也非常具有指导实践落地的能力,另值一提的是,作者充分使用业余时间编撰,已经年载有余,期间更是数易其稿,且精工细雕,充分体现了技术人员的完美追求。本书的主题一则是java特种兵的成长历程,二则是希望此历程的“得道”思想为导向,让读者形成自身的独自思考和总结的能力。
  • 朱金清(阿里花名:穆公)
  • 本书全面地描述了一个合格的Java程序员所必须理解的基本知识,内容深入浅出,语言幽默诙谐,知识点覆盖面广,阐述理论又不拘泥于理论,例子丰富,实战性极强,显示出小胖哥对JVM的深入理解和丰富的Java实践经验,非常适合Java初学者作为入门教程。对有一定的Java编程经验,但是渴望对Java代码背后隐藏的JVM基础知识有更深入理解的同学来说,更是一本不可多得的好书。同时,本书也凝聚了小胖哥和他的同事们对Java系统架构与设计的独特理解,处处体现了Java程序员应有的工作和学习方法。相信读者在读完此书后,学到的不仅仅是扎实JVM及Java基础知识,迅速成为Java开发领域的老A,更能学到胖哥的追根究底的学习态度,受益终生。
  • 洪熙
  • 资深Java工程师,主要从事JVM内核研发工作
  • 阿里云-核心系统研发部-专用计算组
  • 入职不久,就听说谢宇在写一本面向Java开发人员的书籍,那个时候在想市场上JAVA方面的书籍已经够多了,还有什么内容可以写的呢?但在不久后当我拿到前面几章的手稿的时候,就迫不及待地阅读,我发现,对于已经在这个行业内从事多年研发的从业人员来说,有很多知识点在过去的时间都没有重视而被忽略,而作者不但用一种诙谐幽默的方式表达出来,而且还引导读者一起思考,无处不体现出作者深厚的功底。
  • 锐意(真名:廖科)
  • 资深Java工程师
  • 多年SNS开发的经验
  • 阿里数据库方案-iDB组担任leader
  • 如果想要一本普及Java基础的书,这本可能并不合适;这本书适合有一些Java基础,想要深入的同学;内容涵盖了作者多年使用Java的经验,对初学者,犹如中国人写的Think In Java,内容广泛深入而又不拖沓,专注Java排雷避坑;期间还穿插了一些作者对于程序员职业生涯的感悟,如果你初入IT这行感到迷茫,在这本书里可以找到方向。
  • 顼阳(真名:许飞飞)
  • 数据方案-大数据方案,资深数据库工程师
  • Hbase方面有较深的造诣。
  • 淘宝80%的开发工程师都在使用Java,书中很多的技术问题在淘宝的业务场景下均已遇到。全书不仅介绍了各种Java的技术,还融入了作者在淘宝多年的学习心得和想法,非常适合初学者业余阅读和技术提升。这是我读过的最有意思,最轻松愉快的一本Java基础书籍。
  • 方腾飞
  • 并发编程网(http://ifeve.com/)网站主编
  • 支付宝资深Java工程师
  • 前言
  • 本书书名为《Java特种兵》,又名《Java老A》,目的很简单,希望作为读者朋友的你,有一天能够成为一个单兵作战能力极度强悍的Java程序员。众所周知,Java程序员多如牛毛,我希望学习本书的读者有志者事竟成、出类拔萃,练就一身好本领,成为Java界的特种兵。
  • == 关于本书 ==
  • 冰冻三尺,非一日之寒。本书不是什么神功秘籍,所以它无法让你在短时间内从一个小鸟变成一个牛人,更无法让你从牛人成为大师,这本书是希望读者朋友能够在纠结的时候想起还可依赖它。因为本书不仅仅在讲解一些知识,同时也包含了作者以及作者同事的一些工作经历,以及工作经历中的那些痛苦与纠结,我们希望在这本书的陪伴下,你在纠结之时选择的不是放弃自我,而是坚持到胜利的那一刻。
  • 作者本人也不是什么牛人,更不是绝顶高手,只能说我们经历的某些事情也许值得去分享,这些内容不仅仅包含一些知识,同时也包含了很多思想、方法和面对问题的态度,注重功底和修为的提升。如果有一天你发现这本书带给你更多的是方法,从而让你建立起自己的许多思路,能够快速学习和成长,那么本书的一个重要目的就达到了;如果有一天你发现再去看某些“牛人秘籍”会比以前轻松和愉悦,那么也许这本书有点小功劳。
  • 本书不是什么代码大全,也不是专门讲解某些指定的知识板块的书籍(例如JVM),并不会针对某些专门的知识板块去做过细的说明,也不会去说明详细的API,更不会全面地说明它们的源码,这是没有意义的。通过本书,希望你能从内心认识到“知识无涯”,我们总会遇到自己没有见过的问题,需要学会的就是如何面对这些问题,即如何去思考和定位,如何去学习和成长。
  • 在本书中,可能会以各种“换位思考”的方式来探讨一些技术内容,从技术本身的角度来讲,侧重于讲解技术之中蕴藏的各种奥秘以及探索奥秘的一些思路,而不是讲解一些技术的使用,希望读者在这个过程中开始有意识地去理解知识应有深浅之分,并同时真正掌握Java基础,提升自我的功底,同时还能找到提升功底的方法。
  • 本书中许多对话和探讨的模式,适合像小说一样来静心品味,我相信如果你能静心,那么不论是初学者还是有一定功底的人,都能从本书中受益。作者本人在刚进入大学的时候,是一个连计算机是什么都不知道的人,也曾经有过为了通过C语言考试而死记硬背代码的经历,后来通过不断努力,才有能力写出这本书。因此,本书会结合当时胖哥从一个计算机界的“文盲”开始成长的过程中所拥有的一些“可爱”的思想经历,如果你有类似的思想经历,希望这本书能够帮助你,也同时希望你理解到:只要你愿意,你就一定行的!
  • 本书有的内容风格会偏于娱乐,这些内容所描述的技术肯定不会那么严谨,由于不严谨,可能会让不同的读者产生仁者见仁、智者见智的情况。对于某些有着同样工作经历的人看来,也许会有着发自内心的共鸣,对于初学者可以是一个大概的形象理解。虽然书中的许多解释并不是技术点上的准确解释,但我不希望初学者“小伙伴们”仅仅注重娱乐本身的话题,而要想想这种娱乐的例子所带给自己的一些感性认识。
  • 本书会谈到一些成长性的内容,因此我们可以先大概定位一下一些不同层次的人会怎样思考,怎样做事情,让大家有个形象上的认识。
  • Java学习三段位
  • 许多初学者,就像是无头苍蝇,四处乱撞,什么都想学,学了就丢,而且喜欢钻牛角尖,甚至没有独立思考的习惯,遇到问题总是先问,再解决问题。他们经常会问:“为什么我的东西在这好用,在那不好用?”因为你还根本不知道问题的原因,当然不知道这么多的为什么了,任何问题都需要定位分析,再解决,再总结。面对问题要静下心来通过自己对基础的认识来分析可能的原因,然后逐步缩小范围,再定位问题。如果抛出一个错误就能知道原因,那么直接设计一个答题的机器就可以了,而不需要任何人为的介入。
  • 学到一定程度的人,懂得思考,懂得换位思考,能解决大多实际问题,他们不仅仅能开始自己定位问题,而且开始具有“前瞻性”,思考一些问题未来可能存在的潜在情况,也开始逐步关注一些内在原理。不过,可能是艺高人胆大,这些人有可能会犯一些不该犯的错误,他们通常是一些十分优秀的程序设计者,很多时候可能是为了展现自己的技术能力,会将一些不值得去做的事情不断细化和优化,或者去做一些别人做过的事情,如果因为这样丢掉主业务,则通常说它是过度优化、过度设计、重复制造。作者本身也有同样的亲身经历,而矛盾在于是否真的是过度设计,在不同的场景下会有不同的看法和评价,因此这个阶段的同学,通常会有一个纠结期。在这个阶段的人开始讲究内外双修,也同样是一个积土成山、积水成渊的过程,因为有一定的功底,学习很多知识都很快,在知识面上会有很大的突破,在知识点上也会逐步加深,可能在工作中不论是业务还是技术上都有了很多的选择,被认为是工作能力很强的人。一些很“牛”的开发人员就会开始意识到很多代码如何去编写会更优雅、更加高效,用更简单的代码搞定更多的问题,但还未上升到系统级别和架构级别。
  • 可能更高级别的人开始具有很强的全局观,让系统全局更加具有可维护性和伸缩性,系统性能良好,稳定性十足,能搞定各类架构、部署、规范化等相关的问题,在某些领域上也是说话很有分量的人物。他们可能会花很多时间去写通用模型和设计,将难题简单化,解决大家解决不了的难题。通常会尽量让系统的维护变成一条配置或是几条简单代码,但是可以顶得上一群人写一堆代码,这就是特种兵程序员的“快”、“准”、“狠”、“稳”。
  • 这里的各种级别仅仅是作者“自言自语”,并不代表什么,要做到没有级别在心中才能真正让自己快速成长。另外,看了这些级别并不代表今天我是初学者,明天将不好的习惯改掉后就“脱胎换骨”了,也并不代表自己在某件小事情上有了大师的风范就代表自己是大师了。这些东西都是经历一些事情后才会形成一些自然意识,我们只是有意识地去学习他们为什么会这样做事情,为什么年轻人比老员工有活力,但通常来讲“姜还是老的辣”。
  • 本书读者对象
  • □ 适合对象
  • (1)有一定Java基础,并希望能在Java技术上有所成长的人。
  • 本书学习有一定门槛,如果是初学者,则可以先以书中的一些例子为引导,希望了解为什么的时候,再来看其中的解释。
  • (2)对于能静心看书的初学者,可以迭代着看本书。
  • 虽然有一定门槛,不过初学者只要能静心地迭代着读几次后,你或许也能体会出里面有很多思想、方法、解决问题的手段、看问题的侧面,甚至面对问题的心态,那么也可以受益良多。
  • (3)本书是一个载体,一个推崇自我修为、内外双修的载体,修行看个人,所以适合于想要以自我提升为主要目的的读者。
  • (4)工作一段时间,对知识和发展的方向很迷茫,甚至对某些观念也比较迷茫,但是又渴望去解决这些问题,渴望自己成长,渴望自己能找到道路的人。
  • □ 不适合对象
  • (1)Java方面的高手和牛人,因为这本书并不能助你从牛人变成大师。
  • (2)做客户端(如Android)或嵌入式的Java程序员,因为书中大多内容是以服务器端Java来讲解的,极少考虑客户端的问题。
  • (3)如果你对自己或周围的一切很绝望,看到的所有东西都是邪恶、虚伪的,也没有想过要让自己进步。
  • (4)希望这本书成为技术字典的同学不适合读,因为这本书不是代码大全,也不是知识点精准解释的汇聚,更不是API的列表。
  • (5)希望系统性学习某些专业知识的同学不适合看本书,因为本书讲解的是一种“碎片化”学习方式,或者说是以一些小例子为基础,进一步处理相关问题的方式。
  • 如何阅读本书
  • 作为书籍的作者,希望读者能够快乐地学到知识,每天空余时间看看而不是一种压力,面对技术拥有独自思考问题的能力,而并非掌握某种技术本身,通过轻松地接触很多知识并且能有所体会,不断地去总结、抽象,能得出自己的分析问题、解决问题的方法,磨炼出超越普通程序员的功底,最终成为Java老A。
  • 本书其实是一本Java的野书、杂谈,会尽量用通俗易懂的方式来讲解一些复杂的问题和技术。不过,这毕竟不是一本娱乐的书,某些内容胖哥还是会说得比较严谨。书中除了讲解一些“功底类”的技术,大部分技术不会讲得太深,大多只是抛砖引玉给你一个思路,当你需要去接触更深的技术的时候,在这本书中可能会有一个较为形象的例子供你参考,也许就大概知道了如何去理解。若功底够好,就会发现万变不离其宗,一切都可以归于基础,而且大多复杂的思路都源自于生活的灵感。
  • 如果是初学者,希望你不要期望每天看太多内容,而是希望你看了后尽量去思考,不用完全看懂,每天能够有一个心得,当你在实践中遇到某些问题开始拥有灵感时,本书或许会印证这一切。
  • 本书提到的技术仅仅是一个引导、一种探讨、一种思路,在阐述一件事情好与不好的时候,通常会以多种角度去看待问题的不同侧面,再来说明为什么会有这样的经验,同时也可能会探讨这些经验是否能够受用终身。因为技术的时代在不断革命,现在的技术十分泛滥,但都殊途同归,我们要跟上时代又要归纳总结,也许很多时候我们没有精力去学习所有的知识,但有精力让自己提升学习能力从而来学习更多的东西,也有精力来探索工作领域内的知识奥秘,而前提是应当有探索奥秘的习惯以及足够的功底。
  • 本书的目的在于个人成长,极少谈到关于团队合作与规范化等方面的知识,当然作为一个单兵作战能力极强的人,应当有这方面的意识和思维,即使本书中没有提及,大家也应当去掌握。同时也请读者朋友注意本书所提倡的单兵作战能力,并不是期望大家去做一个技术上的孤独者,而是为了更好地去工作。
  • 约定
  • □ 本书将采用Hotspot VM 1.6作为讲解的例子(可通过命令“java –version”得到JVM版本),而测试的例子如果是在具体的OS环境下测试,则会单独说明。书中也会提到JDK 1.7的内容,相应的代码如果要运行,也要选择JDK 1.7。
  • □ 本书中“部分例子”,必须采用-server模式来运行和模拟,尤其是第5章并发编程中的许多例子,在例子中通常会有专门的备注和说明,请读者注意参看。
  • □ 篇幅所限,本书中的例子大多只是片段,以说明实际的问题为主,需要完整的例子,请参看配书光盘中的相关demo信息,书中的例子都有与之对应的实际代码,除十分复杂的代码外,从demo中获取的代码进行相关的配置后,均可直接在对应平台上按照指定结果运行。
  • □ 本书的代码分源码和代码两种,源码为第三方源码,可以到官方网站下载参看,书中会介绍源码的版本和思路,并贴出部分关键源码的功能和设计思路。
  • □ 本书从第2篇开始,每一篇都会有“致读者言”,目的是让读者更好地了解这部分内容应该从何种角度去理解,它会说些什么,会给你带来什么,你为什么需要这些。
  • □ 网络上大家都称作者为“小胖哥”或“胖哥”,所以在本书中,也会以这两个称呼作为作者本人的代名词。
  • 内容简介
  • 本书分上、下册,总共5篇,上册两篇内容分别是Java功底篇和源码篇,强调个人修为的提升,也是本书主旨所在,希望能帮助各位读者朋友提升“功力”;下册中,将基于上册的内容融入设计、实现的细节。
  • 上册
  • 第1篇 Java功底篇
  • 建议所有本书的读者朋友都读一下本篇的内容,所谓“练武不练功,到老一场空”,你若要成为一个老A级程序员,功底的提升是十分重要的。通过对第1篇的学习,希望读者能知道如何验证自己的功底,如何提升自己的功底,而能提升多少,完全要靠你自己的属性哦!
  • 第1章从简单的角度来验证功底,通过一些简单的例子来说明我们应当如何去掌握Java的基础,同时也包含一个“老A级程序员”除功底外还需要有面对逆境的心态。
  • 第2章和第3章分别介绍关于计算机的工作原理和Java虚拟机的基础知识。胖哥认为一个优秀的Java程序员,应当知道自己的程序在计算机内部是如何运行的,更需要知道虚拟机是如何运行的,效率对比怎样,此好比“习武之人,需要知道何为武学”。
  • 第4章讲解Java通信,在了解了运行基本原理后,你应当了解很多网络交互已经被Java的框架包装得不再像通信程序了,就像是“被装修后的房子,你不再知道房屋本身是用什么建造的”。但如果你是老A,就应当知道这些,这样才能知道遇到各种怪异的问题时如何去解决,你会发现:“一切源自基础,偶然问题隐藏必然”。
  • 第5章讲解Java并发,如果读者朋友确实遇不到,则可以跳过,但要成为Java的老A,这应该算是基础知识,老A应该知道Java并发是怎么样的。除了客户端程序及单片机等,Java并发程序处理其实无处不在,就好比“一个城市的交通,很多的车辆需要通信,应当如何调度来提高流量,避免交通事故”。
  • 第6章讲解数据库知识,大部分程序员都应该使用过数据库、文件,通过学习第4章通信方面的内容,应该会有一些概念,但是面对存储,你是否想要了解一些内在,了解一个程序员所需要知道的内在,这样可能会使得你的工作更加得心应手。说了这么多,你是否发觉学习Java为何要了解如此多的东西?是的,你需要知道“多个门派的武学,面对不同的思想碰撞来切磋,才会有更多的体会”。作为一个老A,才会拥有单兵作战能力极强的作战素质。
  • 第2篇 源码篇
  • 达到一定程度的程序员一般会开始对实现本身感兴趣,想了解为什么,了解别人是如何设计和实现的。
  • 起初在面对框架的时候,可能会去猜测或测试它是如何实现的,但逐渐发现猜测和测试并不那么靠谱,因为版本和环境影响因素太大,我们开始想要知道一些内在,看源码成为一个必然。源码面前没有秘密可言,看过源码,你会对问题定位和编写代码拥有自信,开始对技术本身有量化的认识。
  • 本篇并不是网罗天下源码,也不会对某种源码做全面讲解,而是通过阅读源码来说明我们应当如何阅读源码。
  • 在本篇开始部分会先介绍为何要阅读源码,讲解哪些源码,如何阅读源码,请有疑问的小伙伴们关注一下哦。
  • 第7章讲解源码基础,说明Java常见的框架基础知识,主要包括:反射、AOP、ORM、Annotation和配置文件的原理。在这里不仅仅会阐述技术本身,同时也会联系一些实际框架的可能实现方法。老A一定要:知其然,知其所以然。
  • 第8章和第9章分别讲解JDBC、Spring的源码,这里不会说明这些三方包的所有源码和关键点。但通过几种不同类型的框架源码,希望读者能体会源码之中的“思维方式、设计、架构”,以及了解到不同源码的区别所在。虽然区别很多,但如果你有一些“百川纳海、源自同门”的感受,那么小伙伴们就成长了很多。
  • 第10章是对第2篇的知识总结,在阅读源码后不是读完就完了,而是应当有所体会。通过对源码基础知识的初步了解和对一些源码的阅读,我们逐步有能力在接触一个自己从未见到的框架时,可以大概知道它的大致内在,并且大多数情况下可以轻松搞定它,即使有一定难度也会从根本的角度去看待这些技术问题,进一步快速地通过看它的代码了解内在,而不会被浮于表面的使用所迷惑。这就好比虽然魔术师的表演眼花缭乱,但是在他们同行眼中都是知根见底的,因为我们也是专业的,所以不应当被一些东西所迷惑。
  • 下册
  • 第1篇 设计篇
  • 老A虽然不像军师那样:“运筹帷幄之中,决胜千里之外”,但也同样需要有全局的部署思想,对临场应变以及撤退方案和路径要有全局把控,能“在万军之中取上将首级”,使用最低牺牲得到最高的成果。
  • 在设计篇中,胖哥希望给你带来的不仅仅是现有老A的技术,也包含了他们的许多思想。既然是思想,自然是结合场景最佳,它需要融入老A的智慧,不限于表达的形式,因为这些形式只是一种思想传承的载体。
  • 在第1章中,胖哥会用平时工作中的例子说明一些常用的设计模式,但并不会将Java所有的设计模式全部详细讲解,因为这不是本书的主旨,而且那样并没有多大意义。在实际的应用中,场景是非常重要的,变化远远大于这些设计模式本身所提供的“招式”。模式本身提供一种建议性的设计方法,就好比武学中的“招式是死的,人是活的”,不同年龄段修炼同样的武学,与不同的对手较量,不论是招式的顺序还是临场的动作都会有很大的变化。如果在实战对决中一再用套路来较量,就会被套路牵引着走,也会被对手打乱节奏,而套路本身给我们提供了一种处理场景的方法,灵活应用才能用以实战,这样才能达到“无招胜有招”的境界。
  • 第2章和第3章介绍两个实例的设计,它们是两种完全不同类型的程序,在这个过程中尝试应用设计模式中的一些知识和思路,也就是需要知道如何利用招式来对敌。但大家不要仅仅局限于这两章所给出的例子,因为实际场景可以千变万化,针对自己所遇到的场景,需要去揣摩和思考。我们的例子通常不会写到实现部分,到设计部分基本结束,希望你能理解到“思想和方法应当源于生活和自然”。
  • 第2篇 实现篇
  • 在原计划中胖哥并没有打算写关于“实现”方面的内容,不过胖哥发现在实际工作中,小白“童鞋”们所面对的可能最多是实现,于是增加了这部分内容。但是在实现篇并不是拿一个业务实例来写代码,谈什么呢?
  • 第4章谈谈项目中各种工作人的交互、开发模式、心态、技术上的思维方式、一些优化思路。第5章简单谈谈UI的一些用途、繁杂的点在那里。第6章谈谈实际工作中经常会遇到的“坑”,这些坑不容易被发现,但是我们经常容易掉进去,希望大家知道的不仅仅是这些坑,而是通过这些坑了解到,众多技术都是一把“双刃剑,有好处必有坏处”,只有最佳的场景选择最合适的技术,学会如何去量化与选择,同时需要了解到现在的工作对个人素质的要求越来越高。
  • 第3篇 扩展篇之论道
  • 扩展篇为杂谈,也是论道篇,读者可以先看第5篇的内容,本篇是对知识面和思想的一个扩展。一个老A,应当知道业界的一些技术,所谓:“知己知彼,百战百胜”,接触任何一种问题,都要有相应的解决方案。
  • 第7章和第8章以走马观花的方式来介绍一些集群知识、分布式知识(但并不意味着实际的技术和走马观花那样简单)。作为老A程序员,胖哥认为需要知道这些,这样才能更好地做好一些事情,或者说有机会去做更有挑战的事情。也许你今天用不到这些,但当你用到时,便能更加得心应手。
  • 第9章讲解技术量化与权衡的一些事情,会谈一些时间管理、团队合作、过度优化、预知问题、不同项目的实现思路等。这里阐述的中心思想是,我们应当在技术追求的道路上,考虑各种成本与价值的问题,从个人做起,再看看团队协作。
  • 第10章是完结章,主要是探讨一些心态以及励志,有兴趣的小伙伴们可以看看,没有兴趣的无须关注本章。现代老A,除素质过硬外,更要拥有智慧,智慧包含了丰富的知识面,同时也包含了对于世界的理解,静心做好当下,有机会去做好创新,在芸芸众生之中脱颖而出。
  • 下册即将出版,敬请期待!
  • 联系作者
  • 写代码是逻辑的,代码写出来就会有漏洞和Bug,写书更多是感性的,问题自然会更多,作为刚开始写书的我,会尽我所能将书中的错误尽量减少,但不能减少书中内容的含金量。
  • 本书以灌输思想为导向,更多的是希望读者通过自身独自思考和总结的能力,在一定基础之上进行进一步提升。当然,若读者对本书有任何意见,或者对书中某些问题百思不得其解,,我会将有效的勘误结果公布在博客http://blog. csdn.net/u010345637中,并会在修订版本中尽快修改。
  • 鸣谢
  • 胖哥第一次写书,而且这本书大部分内容是从键盘上敲出来的,所以深感写书也是不容易的事情,尤其是在炎热的夏天,几次想要放弃,不过最终能够坚持下来,我内心之中想要感谢家人、朋友、同事、与我一起玩Java的小伙伴们的支持和鼓励,感谢老婆背后默默的付出,再谢谢2013年刚出生的女儿,你的每一个依依哇哇的古怪表情都让爸爸有了动力与灵感,最后谢谢电子工业出版社给予我出版本书的机会,特别感谢出版社孙老师对我的指导与鼓励,以及葛娜编辑在这个过程中所付出的努力。