産品特色
內容簡介
Scala是一種多範式的編程語言,它既支持麵嚮對象編程,也支持函數式編程的各種特性。
《深入理解Scala》深入探討瞭Scala裏幾個較為復雜的領域,包括類型係統的高階內容、隱式轉換、特質的組閤技巧、集閤、Actor、函數式編程的範疇論等,而且不是乾巴巴地講述語言和庫的概念。《深入理解Scala》充滿各種實用的建議和佳實踐,可以來幫助讀者學習怎樣把Scala裏較少被掌握的部分應用到工作中。
《深入理解Scala》不是Scala的入門級教程,而是適閤有經驗的Scala程序員嚮專傢水平進階的參考讀物。《深入理解Scala》適閤想要瞭解Scala語言的底層機製和技術細節的讀者閱讀參考。
作者簡介
Josh Suereth,是Typesafe公司的一名軟件工程師,它是Scala的Committer之一,也是scala-tools.org的維護者。
內頁插圖
精彩書評
★“quanwei並且易於理解”。
——Martin Odersky Scala之父
★“帶你深入Scala的內部工作機製”。
——John C Tyler PROS Pricing
★“目前為止,我在技術書裏讀到過的zui好的示例”。
——Eric Weinberg Wagger Designs
★“一本開拓眼界的書,現在我對Scala知其所以然瞭”。
——John Criffin Hibernate Search in Action閤著者
目錄
第1章 Scala——一種混閤式編程語言
1.1 Scala的設計哲學
1.2 當函數式編程遇見麵嚮對象
1.2.1 重新發現函數式概念
1.2.2 Google Collections中的函數式概念
1.3 靜態類型和錶達力
1.3.1 換邊
1.3.2 類型推斷
1.3.3 拋開語法1
1.3.4 隱式轉換概念早已有之
1.3.5 使用Scala的implicit關鍵字
1.4 與JVM的縫集成
1.4.1 Scala調用Java
1.4.2 Java調用Scala
1.4.3 JVM的優越性
1.5 總結
第2章 核心規則
2.1 學習使用Scala交互模式(REPL)
2.1.1 實驗驅動開發
2.1.2 繞過積極(eaglerly)解析
2.1.3 法錶現的語言特性
2.2 優先采用麵嚮錶達式編程
2.2.1 方法和模式匹配
2.2.2 可變性
2.3 優先選擇不變性
2.3.1 判等
2.3.2 並發
2.4 用None不用null
2.5 多態場景下的判等
2.5.1 例子:時間綫庫
2.5.2 多態判等實現
2.6 總結
第3章 來點樣式-編碼規範
3.1 避免照搬其他語言的編碼規範
3.2 空懸的操作符和括號錶達式
3.3 使用有意義的命名
3.3.1 命名時避免$符號
3.3.2 使用命名和默認參數
3.4 總是標記覆蓋(overriden)方法
3.5 對期望的優化進行標注
3.6 總結
第4章 麵嚮對象編程
4.1 限製在對象或特質的body裏初始化邏輯的代碼
4.1.1 延遲構造
4.1 2多重繼承又來瞭
4.2 為特質的抽象方法提供空實現
4.3 組閤可以包含繼承
4.3.1 通過繼承組閤成員
4.3.2 經典構造器withatwist
4.3.3 總結
4.4 提升抽象接口為獨立特質
4.4.1 和接口交互
4.4.2 從曆史中吸取教訓
4.4.3 結論
4.5 public接口應當提供返迴值
4.6 總結
第5章 利用隱式轉換寫更有錶達力
5.1 介紹隱式轉換係統
5.1.1 題外話:標識符
5.1.2 作用域和綁定
5.1.3 隱式解析
5.1.4 通過類型參數獲得隱式作用域
5.1.5 通過嵌套獲得隱式作用域
5.2 隱式視圖:強化已存在的類
5.3 隱式參數結閤默認參數
5.4 限製隱式係統的作用域
5.4.1 為導入創建隱式轉換
5.4.2 沒有導入稅(importtax)的隱式轉換
5.5 總結1
第6章 類型係統
6.1 類型
6.1.1 類型和路徑
6.1.2 type關鍵字
6.1.3 結構化類型
6.2 類型約束130
6.3 類型參數和高階類型(Higher Kinded Types)
6.3.1 類型參數約束
6.3.2 高階類型
6.4 型變(Variance)
6.5 存在類型
6.6 總結
第7章 隱式轉換和類型係統結閤應用
7.1 上下文邊界和視圖邊界
7.2 用隱式轉換來捕捉類型
7.2.1 捕獲類型用於運行時計算(capturing types for runtime evaluation)
7.2.2 使用Manifest
7.2.3 捕捉類型約束
7.2.4 特定方法(Specialized method)
7.3 使用類型類(type class)
7.3.1 作為類型類的FileLike
7.3.2 類型類的好處
7.4 用類型係統實現條件執行
7.4.1 異構類型List
7.4.2 IndexedView
7.5 總結
第8章 Scala集閤庫
8.1 使用正確的集閤類型
8.1.1 集閤庫繼承層次
8.1.2 Traversable
8.1.3 Iterable
8.1.4 Seq
8.1.5 LinearSeq
8.1.6 IndexedSeq
8.1.7 Set
8.1.8 Map
8.2 不可變集閤
8.2.1 Vector
8.2.2 List
8.2.3 Stream(流)
8.3 可變集閤
8.3.1 ArrayBuffer
8.3.2 混入修改事件發布特質
8.3.3 混入串行化特質
8.4 用視圖和並行集閤來改變計算策略
8.4.1 視圖
8.4.2 並行集閤
8.5 編寫能處理所有集閤類型的方法
8.6 總結
第9章 Actors
9.1 使用Actor的時機
9.2 使用有類型的、透明的引用
9.3 把故障限製在故障區裏
9.3.1 發散搜集故障區
9.3.2 通常的故障處理實踐
9.4 利用排期區控製負載
9.5 動態Actor拓撲
9.6 總結
第10章 Scala和Java集成
10.1 Scala/Java不匹配
10.1.1 基礎類型自動打包的差異
10.1.2 可見性的差異
10.1.3 不可錶達的語言特性
10.2 謹慎使用隱式轉換
10.2.1 對象標識和判等
10.2.2 鏈式隱式轉換
10.3 小心Java序列化
10.4 注解你的注解
10.4.1 注解目標
10.4.2 Scala和靜態屬性
10.5 總結
第11章 函數式編程
11.1 計算機科學領域的範疇論
11.2 函子(Functor),Monad及它們與範疇的關係
11.3 咖喱化和可應用風格(Applicative style)
11.3.1 咖喱化
11.3.2 可應用風格
11.4 用作工作流的單子
11.5 總結
前言/序言
《洞悉Java:從JVM到並發編程的深度探索》 內容簡介: 這是一本為 Java 開發者量身打造的深度技術專著,旨在引領讀者超越語言錶麵的語法糖,直抵 Java 虛擬機(JVM)的運行機製、內存模型以及並發編程的核心原理。書中不以介紹新特性或語法為主要目的,而是專注於解析 Java 語言在底層是如何工作的,以及如何有效地利用這些底層機製來構建高性能、高可伸縮性的應用程序。 本書分為三個主要部分: 第一部分:Java 虛擬機與運行時深度剖析 本部分將帶領讀者深入 Java 虛擬機的世界,揭示類加載機製的每一個細節,包括加載、鏈接(驗證、準備、解析)和初始化等階段。我們將詳細講解 ClassLoader 的層級結構,以及自定義 ClassLoader 的應用場景,例如熱部署和插件化框架的實現。 接著,本書將聚焦於 JVM 的內存管理,深入剖析 Java 內存區域的劃分,包括堆(Heap)、棧(Stack)、方法區(Metaspace)以及程序計數器(PC Register)等。我們會詳細講解垃圾迴收(GC)的原理,覆蓋主流的 GC 算法,如 Serial、Parallel、CMS 和 G1,並探討它們的特點、適用場景以及調優策略。通過對 GC 日誌的分析,讀者將學會如何診斷和解決常見的內存溢齣(OOM)和內存泄漏問題。 此外,本部分還會探討 JVM 的性能監控與分析工具,如 JVisualVM、JMC(Java Mission Control)、JStack、JMap 等,指導讀者如何利用這些工具來監測 JVM 的運行狀態,定位性能瓶頸,以及進行底層的性能調優。理解 JVM 的編譯過程,包括字節碼生成和即時編譯(JIT)的工作原理,將有助於讀者更深刻地理解 Java 代碼的執行效率。 第二部分:Java 並發編程的基石與實踐 本部分將全麵深入地探討 Java 並發編程的方方麵麵,從最基礎的綫程創建、綫程生命周期管理,到更高級的綫程同步機製和並發工具。我們將詳細講解 `volatile` 關鍵字的內存語義,理解它如何保證可見性和防止指令重排,以及在多綫程環境下的應用。 本書將重點闡述 Java 內存模型(JMM),這是理解並發編程的關鍵。我們會深入分析 JMM 的happens-before原則,這是判斷綫程安全性的核心依據。通過大量實例,讀者將理解為什麼某些並發操作需要加鎖,而另一些則不需要。 之後,我們將詳細解析 Java 提供的並發工具,包括 `synchronized` 關鍵字、`Lock` 接口及其實現類(如 `ReentrantLock`),以及 `Condition` 接口。我們將深入理解它們底層的實現機製,例如 `synchronized` 的偏嚮鎖、輕量級鎖和重量級鎖的演進,以及 `ReentrantLock` 的公平鎖與非公平鎖的特性。 本部分還將重點介紹 `java.util.concurrent` 包中的強大並發工具,如 `ExecutorService` 框架(用於綫程池的管理)、`CountDownLatch`、`CyclicBarrier`、`Semaphore` 等同步器,以及 `ConcurrentHashMap`、`CopyOnWriteArrayList` 等綫程安全的集閤類。我們將分析它們的具體用法,以及在不同場景下的最佳實踐。 最後,本部分將觸及一些更復雜的並發模式,如生産者-消費者模式、讀寫鎖模式,並探討如何設計和實現高並發的係統,以及如何避免常見的並發陷阱,如死鎖、活鎖和競態條件。 第三部分:Java 性能優化與案例分析 在掌握瞭 JVM 和並發編程的深度知識後,本部分將迴歸實際應用,通過一係列典型的性能優化案例,將理論知識轉化為實踐能力。我們將分析代碼層麵的優化技巧,例如如何避免不必要的對象創建、如何有效地使用集閤、如何優化字符串操作等。 本書還將深入探討 I/O 性能優化,包括 NIO(Non-blocking I/O)和 Netty 等異步 I/O 框架的應用。我們將分析如何通過 buffer、channel 和 selector 來提高 I/O 吞吐量。 數據庫連接池的原理與優化也將是本部分的重點。讀者將理解連接池如何提高數據庫訪問效率,以及如何配置連接池以適應不同的應用負載。 最後,本書將通過多個真實世界的案例,例如高並發 Web 應用的性能瓶頸分析、大規模分布式係統的並發設計等,來鞏固讀者所學知識。通過對這些案例的深入剖析,讀者將學會如何綜閤運用 JVM 調優、並發編程和代碼優化等技術,來解決實際生産環境中遇到的復雜性能問題。 目標讀者: 擁有紮實的 Java 基礎,希望深入理解 JVM 工作原理的開發者。 正在進行或計劃進行高並發、高性能係統開發的 Java 工程師。 對 Java 內存模型、垃圾迴收機製、綫程安全等底層技術感興趣的技術愛好者。 希望提升 Java 應用性能,並掌握性能調優方法的開發者。 本書特色: 深度與廣度兼備: 深入剖析 JVM 和並發編程的核心概念,並覆蓋廣泛的實踐技巧。 理論與實踐結閤: 講解清晰的理論基礎,並輔以豐富的代碼示例和實際案例分析。 麵嚮實戰: 旨在幫助讀者解決實際開發中遇到的性能和並發難題。 循序漸進: 從基礎概念到高級主題,層層遞進,讓讀者逐步掌握復雜的技術。 閱讀本書,你將不再滿足於知其然而不知其所以然,而是能夠真正理解 Java 語言的強大之處,並有能力構建齣更加健壯、高效的 Java 應用程序。