新書推薦:

《
她本自由:女性破除心理束缚、治愈父权创伤之旅
》
售價:HK$
65.8

《
大学问·天津工人:1900—1949(海外汉学家贺萧代表作)
》
售價:HK$
107.8

《
加密货币与金融大变局 稳定币重塑金融体系
》
售價:HK$
86.9

《
莆田南少林武术桩功功法
》
售價:HK$
184.8

《
逊清奉天残留特权研究
》
售價:HK$
151.0

《
分职文昌:中国古代尚书省及六部体制研究
》
售價:HK$
115.6

《
弗里德里希二世皇帝:一部传记
》
售價:HK$
221.8

《
阿非利加征服者:比拿破仑更伟大的西庇阿
》
售價:HK$
69.6
|
編輯推薦: |
资深软件开发专家20多年从业经验总结及心血之作:
深入剖析Java并发编程、I/O体系等核心知识;
手把手教你高效阅读源码,快速提升编程能力;
实战案例 源码解读,助你成为Java高手;
体系化讲解中文编码问题与高阶调试技巧。
《码农野蛮生长——Java源码阅读方法论》为所有打算深入掌握Java编程的人士编写,适合有一定Java基础的软件开发人员、系统设计人员、架构师等阅读和参考,也适合用作大学教育、培训机构的Java教材。
|
內容簡介: |
如何克服阅读经典源码的畏难情绪?如何将零散的 Java 高级知识串联为一个整体?如何将 Java 高级知识的学习与实践融为一体?阅读本书,你将获得想要的答案。本书向流畅阅读集高并发、高可用于一体的 ZooKeeper 源码的终极目标出发,从环境搭建开始点滴积累,提供了一种与众不同的 Java 语言学习路径。
來源:香港大書城megBookStore,http://www.megbook.com.hk 本书首先讲解了源码阅读环境选型、必要插件准备、快捷操作高级技巧、源码跟踪调试高级技巧及常见问题分析,介绍了如何构建 ZooKeeper 源码及多个底层开源组件的源码阅读环境;其次完整地论述了字符集的基础知识,说明了字符乱码产生的原因及根本的解决办法;接着以装饰模式为核心构建一套新的I/O 学习方法,并结合源码深入分析了线程、线程池、ThreadFactory 和 ThreadLocal;然后以 JCStress 压测为辅助手段深入讲解 Java 内存模型,并深入分析了高并发常用编程组件;最后围绕案例讲解基于 BIO、NIO、AIO 的网络编程模型,以实战形式分析 RMI、WebService、RPC、HttpServer、HttpClient 等 JDK 内置组件。
|
關於作者: |
沈进群,人民大学软件工程硕士,中级经济师,持有DBA证书。本书作者拥有超过20年的资深行业经验,专注于大型金融系统架构设计与研发管理,长期服务于银行、保险等国家级金融机构,深度参与多项亿级规模核心业务系统的战略级项目,近期研究方向为生成式AI,对大模型网络架构、预训练和微调等有比较深入的探索及实践。
|
目錄:
|
第1章 打磨源码阅读环境
1.1 集成开发环境准备
1.1.1 Eclipse IDE安装与优化
1.1.2 IntelliJ IDEA社区版安装与优化
1.2 Eclipse开发环境高级设置
1.2.1 高效编程必 备设置
1.2.2 全键盘操作修炼之道
1.3 IDEA快捷操作进阶
1.3.1 快捷操作之Live Templates
1.3.2 快捷操作之Postfix Completion
1.4 编码效率提升利器――Vrapper与IdeaVim速成
1.4.1 命令模式
1.4.2 文本编辑模式
1.4.3 尾行模式
1.5 JDK版本选型、安装和配置
1.5.1 版本选型――OpenJDK 11
1.5.2 Eclipse环境设置Java Module可访问性
1.5.3 IDEA中设置JDK Module可见性
1.6 本章小结
第2章 创建示例工程,开启源码调试研究
2.1 示例工程的设计原则
2.2 创建标准工作区――Eclipse
2.3 创建标准工作区――IntelliJ IDEA
2.4 源码跟踪及调试实用技巧――Eclipse
2.4.1 六种显式断点各尽其用
2.4.2 六种隐式断点深度揭秘
2.4.3 揭秘断点调试中的八大“灵异”事件
2.4.4 持续提升Debug技能
2.5 基于IntelliJ IDEA的源码跟踪及调试实用技巧
2.5.1 IDEA调试功能“平替”Eclipse
2.5.2 IDEA高阶调试技巧
2.5.3 调试侵入干扰程序功能和性能
2.6 本章小结
第3章 导入、编译与运行ZooKeeper源码
3.1 ZooKeeper 3.4.14源码阅读准备
3.1.1 ZooKeeper 3.4.14源码导入Eclipse
3.1.2 ZooKeeper 3.4.14源码导入IDEA
3.2 极速简易法开启ZK工程验证
3.2.1 ZK编译常见问题处理
3.2.2 突破源码阅读第一关
3.2.3 ZK服务端启动
3.2.4 ZK客户端启动连接
3.3 JDK 11源码解压缩及导入
3.4 Log4j源码阅读准备
3.4.1 源码搜索方法汇总
3.4.2 将日志组件源码导入到示例工程
3.4.3 补充导入循环依赖组件
3.5 SLF4J源码阅读准备
3.6 JUnit源码阅读准备
3.7 本章小结
第4章 根治中文乱码――Java字符集考证
4.1 常见字符集与字符编码辨识
4.1.1 ASCII码回顾
4.1.2 单字节拉丁字符集ISO-8859-1
4.1.3 双字节中文字符集GB2312
4.1.4 汉字扩展库GBK与CP936代码页
4.1.5 Windows操作系统中的ANSI
4.2 统一码(Unicode)
4.2.1 动手制作Unicode字典表
4.2.2 Unicode字符集知识体系
4.2.3 基于Unicode字符集的六大编码辨析
4.3 发掘Java端字符集控制的工具箱
4.3.1 JDK命令行工具与字符集控制参数
4.3.2 操作系统对字符集的影响
4.3.3 IDE中的字符编码设置
4.4 让乱码原地现形的组合拳
4.4.1 解决乱码的策略
4.4.2 字符集有损转换与无损转换实践
4.4.3 常见乱码典型特征识别
4.4.4 Java命令行参数解决乱码问题
4.4.5 IDE设置与乱码处置
4.4.6 通过代码转换解决乱码(String类)
4.4.7 操作系统侧修正乱码
4.5 字符集控制底层逻辑与JDK源码解读
4.5.1 UTF-16字符编码关联Character类
4.5.2 String类中的显式或隐式编码转换
4.5.3 所有字符集或编码的祖先――Charset类
4.5.4 Java序列化之DataOutputStream类
4.5.5 Java反序列化之DataInputStream类
4.5.6 属性文件处理与Properties类
4.5.7 标准输入、标准输出与System类
4.6 本章小结
第5章 摒弃死记硬背,全方位精通Java I/O体系
5.1 Java I/O迂回学习归纳总结
5.1.1 深扒Java I/O体系学习十大槽点
5.1.2 Java I/O学习的必要性
5.1.3 Java I/O学习范式
5.2 字节流基础应用及源码分析
5.2.1 向本地磁盘写Java对象
5.2.2 两种方式从本地磁盘获取文本内容
5.2.3 自定义输入流――按指定分隔符读取
5.2.4 字节输出流源码解读
5.2.5 字节输入流源码解读
5.3 节点流、过滤流与序列化的综合应用
5.3.1 八个原生数据类型的字节码输入输出
5.3.2 自定义原生数据类型可视化输出
5.3.3 Java对象的序列化与反序列化
5.3.4 回退流应用原理解析
5.4 字符流基础应用及源码分析
5.4.1 字符输入流的整行读取
5.4.2 从源码看字符流与字节流的关系
5.5 字符流与半个汉字读写问题
5.5.1 字符输出流对SMP文字的支持
5.5.2 用混编字符串考查字符输出流
5.6 从BIO到NIO的延伸阅读
5.6.1 NIO中的通道和缓冲区
5.6.2 自定义字节缓冲区MyByteBuffer
5.6.3 模拟Netty中的双向指针字节缓冲区
5.6.4 NIO中的性能优化
5.7 本章小结
第6章 盘点线程、线程状态与线程池
6.1 轻松入门多线程编程
6.1.1 三种线程初始化方法比较
6.1.2 返回式线程的回调与阻塞
6.1.3 源码解读之java.lang.Thread类
6.2 枚举全部线程状态,探究状态跳转规则
6.2.1 枚举线程运行时的六种状态
6.2.2 区分Thread类中的interrupt关键字
6.2.3 线程中断不能立即生效的例外情况
6.3 线程池与线程工厂应用
6.3.1 线程池中的单例多线程
6.3.2 静态变量无惧多线程干扰
6.3.3 带返回参数的线程池应用
6.3.4 ThreadFactory简单应用
6.4 线程本地对象与线程安全
6.4.1 ThreadLocal类应用实例
6.4.2 从源码再认识ThreadLocal
6.5 非侵入式多线程优化重构
6.6 本章小结
第7章 挖掘Java高并发支撑体系
7.1 线程安全基础之synchronized关键字
7.1.1 synchronized关键字锁定对象验证
7.1.2 线程通信与wait、notify和notifyAll
7.2 Java内存模型与高并发陷阱
7.2.1 JMM原子性检验及实现策略
7.2.2 JMM可见性验证及应对策略
7.2.3 用JCStress验证JMM的有序性
7.2.4 final关键字语义分析
7.3 ZK组件之高并发Lock应用
7.3.1 LockSupport功能演示
7.3.2 重入锁ReentrantLock详细解读
7.3.3 AQS底层的原子性与可见性
7.3.4 读写分离与ReentrantReadWriteLock
7.4 ZK组件之高并发同步工具应用
7.4.1 ZK应用之CountDownLatch
7.4.2 CountDownLatch源码解析
7.5 ZK组件之高性能List、Set和Map
7.5.1 ArrayList线程不安全分析
7.5.2 线程安全的List实现及Vector类解析
7.5.3 读多写少之CopyOnWriteArrayList
7.6 ZK组件之高并发Queue应用
7.6.1 单锁数组队列ArrayBlockingQueue
7.6.2 双锁链表队列LinkedBlockingQueue
7.6.3 无锁无界队列ConcurrentLinkedQueue
7.7 本章小结
第8章 探索网络原理与网络应用的边界
8.1 阻塞式网络编程模型
8.1.1 Java阻塞式网络编程
8.1.2 基于BIO的双向简易聊天室实现
8.1.3 基于NIO的阻塞式网络编程模型
8.2 非阻塞、多路复用和异步网络编程模型
8.2.1 基于NIO的非阻塞式网络编程模型
8.2.2 基于Selector的多路复用网络编程模型
8.2.3 基于AIO的异步网络编程模型
8.3 JDK内置网络组件应用
8.3.1 远程方法调用(RMI)
8.3.2 WebService远程调用
8.3.3 远程过程调用(RPC)
8.3.4 JDK内置HTTP协议支持
8.4 ZK组件之网络应用
8.4.1 Netty模式应用
8.4.2 ZK工程中的NIO模式应用分析
8.4.3 ZK工程中Netty应用分析
8.4.4 粘包拆包问题处理
8.5 本章小结
|
內容試閱:
|
从庞大到以30吨计的电子计算机到轻量便携可穿戴式的计算设备,计算机的发展只不过经历了短短数十年。在这数十年间,信息产业从无到有、从弱到强,这离不开无数计算机从业人员的日夜打拼。计算机行业是一个新陈代谢极其快速的行业,它代谢的不只是硬件、软件和厂商,还迭代着软件从业人员的知识体系。笔者在实际工作中先后使用了13门开发语言,其更新迭代速度几乎不逊于由摩尔定律支撑的硬件技术的飞速发展。技术的进步为广大终端用户带来不断提升的体验和享受,但它也是广大软件从业人员的魔咒。软件的快速发展驱使着从业者不断地自我提升,码农逐步演化成型,这是一个需要不断学习、不断追赶的群体。如何从码农晋升到“码工”,再从“码工”升级成为“码皇”,是本书需要解决的问题。
笔者常年工作在软件研发一线,参与了众多不同设计语言、不同架构风格和不同团队规模的项目。在多年的工作实践中,笔者始终致力于推动并督促团队成员彼此之间的技术分享,分享个人所学、所思、所长,促进团队共同成长。多年的技术分享汇成了一个知识的宝库,这个宝库里面既有时髦的技术,又有从实践中摸索出来的学习方法。现将部分经验积累分享给更多渴望技术进步的人。
本书为何而写 Java语言作为一门静态编译型语言,拥有严谨的语法结构,这使Java语言具有简单易学的特点,拥有海量的忠实用户。Java生态开源的优势,促进了Java社区的持续繁荣,但是大量Java开源框架,又成为精通Java的阻拦索。作为分布式互联网发展的基石,开源组件ZooKeeper是分布式一致性协调服务的首选,大量的中间件依托于ZooKeeper部署和管理。ZooKeeper集数据管理、集群管理、网络控制、远程过程调用传输、命令行交互、Paxos算法于一身,具有代码简洁、设计精巧和技术密集的特点。挑战阅读ZooKeeper底层源码,将成为学习Java语言的试金石。
本书是一本关于Java源码阅读方法的书,但是书中并没有安排单独的章节来叙述源码阅读方法,事实上也无此必要。因为读完本书的第1章到第8章,也就相当于掌握了Java源码阅读的方法。贯穿全书的主线是读懂ZooKeeper源码,而具体的战术则是从深入剖析Java I/O、多线程、高并发和网络编程等基础知识入手,为ZooKeeper源码阅读积蓄力量。
内容结构
本书共8章,第1章至第3章属于学习的预备内容,第4章至第8章介绍编程基础知识,具体如下:
第1章 图文并茂地讲解源码阅读环境的搭建,包括安装源码阅读必要插件,优化环境相关配置;选择主流且官方长期支持的Java 开发工具包版本,下载并导入源码。
第2章 为全书创建统一标准的示例工程,并上传至GitHub网站;对源码跟踪技巧进行集中举例说明,对常见问题进行深入分析。
第3章 下载并导入ZooKeeper源码到本地工作区,以本地命令行方式进行最小化启动;下载并导入Log4j、SLF4J、JUnit等关联组件的源码包,完成编译调试等工作。
第4章 全书重点章节之一,对字符集知识进行了完整而详细的归纳,通过示例程序验证了字符编码规范及其底层的转换逻辑;介绍了与字符集控制相关的参数,对字符集相关的JDK源码进行深入解读,为深入理解Java I/O打下良好的基础。
第5章 通过结合示例程序源码分析,辨析输入流与输出流,字节流与字符流;在理解装饰模式的层层嵌套格式的基础上,达到Java I/O功能读得懂、写得出的目标,为理解网络编程奠定基础。
第6章 结合示例代码介绍线程、线程池的多种用法;通过源码解读,详细分析线程状态流转的规律。熟练掌握多线程后,将为进入下一章的学习做好准备。
第 7 章 概述Java高并发支撑体系,研究wait、notify、notifyAll与synchronized关键字之间的相互作用,研究AQS类对并发控制的积极作用。
第8章 演示C/S结构的网络编程技巧,针对网络编程中的重点和难点知识进行深入挖掘。
怎样阅读本书 阅读源码当然不是做阅读理解题,也不是划重点提炼中心思想,而是需要反复磨炼和实践,从而摸清系统的骨骼结构和经络走向。本书按照技术难度逐层递进,并给出相应的示例,所举的例子力求精练简洁,一般都不会超过30行代码,既方便了对代码的分析和理解,也为上机实验带来了极大的方便。本书避免在代码中间插入注释,从而保证读者的阅读体验。本书的技术跨度比较大,涉猎内容较广,因此在学习过程中避免不了查阅基础资料,力求学以致用,而不是浅尝辄止。本书从前到后难度逐渐增加,建议读者按章节顺序阅读。
特别约定本书以缩写“ZK”统一表示ZooKeeper开源组件。代码左上方标记分类:“【源码】”为截取自ZK、JDK或其他开源组件中的代码,“【示例源码】”为作者编写的功能演示代码,相应的一级包名范围为chap01~chap08。为提升图书的阅读体验,对代码中的Java关键字用下划线标记,对代码中的局部变量和成员变量使用斜体表示。本书截取的代码力求精简,对于阅读难度不大或与主题无关的代码,采用省略号代替。本书对部分文字较长的包名采用缩略的书写方式,例如util.concurrent被表述为j.u.c。本书所有的代码中间没有夹杂注释信息,以留白的方式让读者可以更加深入地思考。本书以类似于write(...)的方式泛指代码中的方法定义,而类似于write()的方式则特指没有输入参数的方法。适用人群
本书围绕读懂优秀的Java源码这一主线展开,从最初的阅读环境准备到最后的Java重点难点综合运用,各章节之间环环相扣,层层递进。
如果你对阅读优秀的源码感兴趣,那么你可以从本书学到源码阅读的方法,还可以跟随本书领略经典源码的魅力。如果你有一定基础,希望继续提高Java编程能力,那么本书不但提供了大量的Java编程技巧,还可以使读者对Java语言的认知从“知其然”转变为“知其所以然”。如果你从事软件设计或系统架构相关的工作,那么本书对多线程、高并发和网络编程的深度剖析将为架构选型及性能优化提供方向指引。联系作者
为了更好地服务于读者,搭建一个Java用户之间的沟通、分享、交流平台,各位读者可以访问和关注我的个人公众号及视频号(@码农野蛮生长),笔者将在公众号上分享学习、工作中遇到的各种新技术、新架构。同时,由于篇幅所限及个人精力有限,本书有些技术点未能完全深入展开,读者或许有未能尽兴之憾,请各位读者不吝分享自己的读书心得,对于本书的疏漏之处,恳请批评指正。
感谢
本书得以出版,离不开亲朋好友的支持。首先要感谢我的妻子王思萍,她作为一个圈外人士从纯文学的角度通读了本书,并提出众多宝贵意见,她是本书的第一位读者。其次要感谢阅读初稿的刘军伟、李伟、张泽泽和范真诚,他们对书稿的修改提出了许多很有价值的建议。
谨以此书献给我的女儿沈宁,希望她能谅解爸爸没有给予她更多的陪伴、更多的鼓励和呵护。希望她永远快乐,从容面对生活!
|
|