java佈道者耗盡20年功力整理完結的社招面試進阿里P6必備java實戰第2版文件

程式設計師高階碼農1發表於2020-11-20

前言

簡單地說,Java 8中的新增功能以及Java 9引入的變化(雖然並不顯著)是自Java 1.0釋出21年以來,Java發生的最大變化。這一演進沒有去掉任何東西,因此你原有的Java程式碼都能工作,但新功能提供了更強大的新習語和新設計模式,能幫助你編寫更清晰、更簡潔的程式碼。就像遇到所有新功能時那樣,你一開始可能會想:“為什麼又要去改我的語言呢?”但稍加練習之後,你就會發覺自己只用預期的一半時間,就用新功能寫出了更短、更清晰的程式碼,這時你會意識到自己永遠無法返回到“舊Java”了。

本文會幫助你跨過“原理聽起來不錯,但還是有點兒新,不太適應”的門檻,從而熟練地程式設計。

“也許吧,”你可能會想,“可是Lambda、函數語言程式設計,這些不是那些留著鬍子、穿著涼鞋的學究們在象牙塔裡面琢磨的東西嗎?”或許是的,但Java 8中加入的新想法的分量剛剛好,它們帶來的好處也可以被普通的Java程式設計師所理解。

本文會從普通程式設計師的角度來敘述,偶爾談談“這是怎麼來的”。

“Lambda,聽起來跟天書一樣!”是的,也許是這樣,但它是一個很好的想法,讓你可以編寫簡明的Java程式。許多人都熟悉事件處理器和回撥函式,即註冊一個物件,它包含會在事件發生時使用的一個方法。

Lambda使人更容易在Java中廣泛應用這種思想。簡單來說,Lambda和它的朋友“方法引用”讓你在做其他事情的過程中,可以簡明地將程式碼或方法作為引數傳遞進去執行。

在本文中,你會看到這種思想出現得比預想的還要頻繁:從加入做比較的程式碼來簡單地引數化一個排序方法,到利用新的Stream API在一組資料上表達複雜的查詢指令。

“流(stream)是什麼?”這是Java 8的一個新功能。它的特點和集合(collection)差不多,但有幾個明顯的優點,讓我們可以使用新的程式設計風格。首先,如果你使用過SQL等資料庫查詢語言,就會發現用幾行程式碼寫出的查詢語句要是換成Java要寫好長。Java 8的流支援這種簡明的資料庫查詢式程式設計——但用的是Java語法,而無須瞭解資料庫!其次,流被設計成無須同時將所有的資料調入記憶體(甚至根本無須計算),這樣就可以處理無法裝入計算機記憶體的流資料了。但Java 8可以對流做一些集合所不能的優化操作,例如,它可以將對同一個流的若干操作組合起來,從而只遍歷一次資料,而不是花很大成本去多次遍歷它。更妙的是,Java可以自動將流操作並行化(集合可不行)。

“還有函數語言程式設計,這又是什麼?”就像物件導向程式設計一樣,它是另一種程式設計風格,其核心是把函式作為值,前面在討論Lambda的時候提到過。

Java 8的好處在於,它把函數語言程式設計中一些最好的想法融入到了大家熟悉的Java語法中。有了這個優秀的設計選擇,你可以把函數語言程式設計看作Java 8中一個額外的設計模式和習語,讓你可以用更少的時間,編寫更清晰、更簡潔的程式碼。想想你的程式設計兵器庫中的利器又多了一樣。

當然,除了這些在概念上對Java有很大擴充的功能,我們也會解釋很多其他有用的Java 8功能和更新,如預設方法、新的Optional類、CompletableFuture,以及新的日期和時間API。

Java 9的更新包括一個支援通過Flow API進行反應式程式設計的模組系統,以及其他各種增強功能。

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

下面將帶大家,從目錄、主要內容一步步來走進java實戰第二版,因為全文包含的內容比較多,所以小編只把部分知識點拿出來給大家做一個介紹,希望本文能夠得到大家的喜歡!!

目錄

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

主要內容

本文分為六個部分,分別是:“基礎知識”“使用流進行函式式資料處理”“使用流和Lambda進行高效程式設計”“無所不在的Java”“提升Java的併發性”和“函數語言程式設計以及Java未來的演進”。我們強烈建議你按順序閱讀前兩部分的內容,因為很多概念都需要前面的章節作為基礎,後面四個部分的內容你可以按照任意順序閱讀。大多數章節都附有幾個測驗,可以幫助你學習和掌握這些內容。

第一部分旨在幫助你初步使用Java 8。學完這一部分,你將會對Lambda表示式有充分的瞭解,並可以編寫簡潔而靈活的程式碼,能夠輕鬆適應不斷變化的需求。

第1章總結Java的主要變化(Lambda表示式、方法引用、流和預設方法),為學習後面的內容做準備。

本章內容

  • Java怎麼又變了
  • 日新月異的計算應用背景
  • Java改進的壓力
  • Java 8和Java 9的核心新特性

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第2章介紹行為引數化,這是Java 8非常依賴的一種軟體開發模式,也是引入Lambda表示式的主要原因。

本章內容

  • 應對不斷變化的需求
  • 行為引數化
  • 匿名類
  • Lambda表示式預覽
  • 真實示例:Comparator、Runnable和GUI

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第3章對Lambda表示式和方法引用進行全面介紹,每一步都提供了程式碼示例和測驗。

本章內容

  • Lambda管中窺豹
  • 在哪裡以及如何使用Lambda
  • 環繞執行模式
  • 函式式介面,型別推斷
  • 方法引用
  • Lambda複合

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第二部分詳細討論新的Stream API。通過Stream API,你將能夠寫出功能強大的程式碼,以宣告性方式處理資料。學完這一部分,你將充分理解流是什麼,以及如何在Java應用程式中使用它們來簡潔而高效地處理資料集。

第4章介紹流的概念,並解釋它們與集合有何異同。

本章內容

  • 什麼是流
  • 集合與流
  • 內部迭代與外部迭代
  • 中間操作與終端操作

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第5章詳細討論為了表達複雜的資料處理查詢可以使用的流操作。其間會談到很多模式,如篩選、切片、查詢、匹配、對映和歸約。

本章內容

  • 篩選、切片和對映
  • 查詢、匹配和歸約
  • 使用數值範圍等數值流
  • 從多個源建立流
  • 無限流

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第6章介紹收集器——Stream API的一個功能,可以讓你表達更為複雜的資料處理查詢。

本章內容

  • 用Collectors類建立和使用收集器
  • 將資料流歸約為一個值
  • 彙總:歸約的特殊情況
  • 資料分組和分割槽
  • 開發你的自定義收集器

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第7章探討流如何得以自動並行執行,並利用多核架構的優勢。此外,你還會學到為正確而高效地使用並行流,要避免的若干陷阱。

本章內容

  • 用並行流並行處理資料
  • 並行流的效能分析
  • 分支/合併框架
  • 使用Spliterator分割流

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第三部分探索Java 8和Java 9的多個主題,這些主題中的技巧能讓你的Java程式碼更高效,並能幫助你利用現代的程式設計習語改進程式碼庫。這一部分的出發點是介紹高階程式設計思想,本書後續內容並不依賴於此。

第8章是這一版新增的,作為Java程式設計師,如果你不知道或者沒有使用過Collection API,就太孤陋寡聞了。幾乎每一個Java應用都或多或少會用到Collection。通過前面章節的學習,你已經看到將Collection API和Stream API結合起來構造資料處理查詢有多強大。不過,Collection API也存在種種不盡如人意的地方,使其使用起來比較煩瑣,很多時候還容易出錯。

通過本章,你會了解Java 8和Java 9中Collection API的新特性,這些特效能讓你的程式設計工作事半功倍。首先,我們會介紹Java 9新引入的集合工廠,它可以極大地簡化建立小規模List、Set以及Map的流程。接下來會介紹如何使用Java 8的增強功能,移除或者替換List和Set中的元素。最後會學習處理Map的一些新方法

本章內容

  • 如何使用集合工廠
  • 學習使用新的慣用模式處理List和Set
  • 學習通過慣用模式處理Map

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第9章探討如何利用Java 8的新功能和一些祕訣來改善你現有的程式碼。此外,該章還探討了一些重要的軟體開發技術,如設計模式、重構、測試和除錯。

通過本文的前八章,我們瞭解了Lambda和Stream API的強大威力。你可能主要在新專案的程式碼中使用這些特性。如果你建立的是全新的Java專案,這是極好的時機,你可以輕裝上陣,迅速地將新特性應用到專案中。然而不幸的是,大多數情況下你沒有機會從頭開始一個全新的專案。很多時候,你不得不面對的是用老版Java介面編寫的遺留程式碼。

這些就是本章要討論的內容。我們會介紹幾種方法,幫助你重構程式碼,以適配使用Lambda表示式,讓你維護的程式碼具備更好的可讀性和靈活性。除此之外,還會討論目前比較流行的幾種物件導向的設計模式,包括策略模式、模板方法模式、觀察者模式、責任鏈模式,以及工廠模式,在結合Lambda表示式之後變得更簡潔的情況。最後會介紹如何測試和除錯使用Lambda表示式和Stream API的程式碼。

本章內容

  • 如何使用Lambda表示式重構程式碼
  • Lambda表示式對物件導向的設計模式的影響
  • Lambda表示式的測試
  • 如何除錯使用Lambda表示式和Stream API的程式碼

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第10章也是這一版新增的,介紹依據領域特定語言(domain-specific language,DSL)實現API的思想。這不僅是一種強大的API設計方法,而且正變得越來越流行。Java中已經有API採用這種模式實現,譬如Comparator、Stream以及Collector介面。

本章內容

  • 領域特定語言(domain-specifc language, DSL)及其形式
  • 為你的API新增DSL都有哪些優缺點
  • 除了簡單的基於Java的DSL之外,JVM還有哪些領域特定語言可供選擇
  • 從現代Java介面和類中學習領域特定語言
  • 高效實現基於Java的DSL都有哪些模式和技巧
  • 常見Java庫以及工具是如何使用這些模式的

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第四部分介紹Java 8和Java 9中新增的多個特性,這些特效能幫助程式設計師事半功倍地編寫程式碼,讓程式更加穩定可靠。我們首先從Java 8新增的兩個API入手。

第11章介紹java.util.Optional類,它能讓你設計出更好的API,並減少空指標異常。

本章內容

  • null引用引發的問題,以及為什麼要避免null引用
  • 從null到Optional:以null安全的方式重寫你的域模型
  • 讓Optional發光發熱: 去除程式碼中對null的檢查
  • 讀取Optional中可能值的幾種方法
  • 對可能缺失值的再思考

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第12章探討新的日期和時間API,這相對於以前涉及日期和時間時容易出錯的API是一大改進。

本章內容

  • 為什麼在Java 8中需要引入新的日期和時間庫
  • 同時為人和機器表示日期和時間
  • 定義時間的度量
  • 操縱、格式化以及解析日期
  • 處理不同的時區和曆法

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第13章討論預設方法是什麼,如何利用它們來以相容的方式演變API,一些實際的應用模式,以及有效使用預設方法的規則。

本章內容

  • 什麼是預設方法
  • 如何以一種相容的方式改進API
  • 預設方法的使用模式
  • 解析規則

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第14章是這一版新增的,探討Java的模組系統——它是Java 9的主要改進,使大型系統能夠以文件化和可執行的方式進行模組化,而不是簡單地將一堆包雜亂無章地堆在一起。

本章內容

  • 推進Java模組化之路的動力
  • 模組的主體結構:模組宣告以及requires和exports指令
  • 針對Java歸檔檔案(JAR)的自動模組
  • 模組化以及JDK庫
  • 使用Maven構建多個模組
  • 概述requires和exports之外的模組指令

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第五部分探討如何使用Java的高階特性構建併發程式——注意,我們要討論的不是第6章和第7章中介紹的流的併發處理。

第15章是這一版新增的,從巨集觀的角度介紹非同步API的思想,包括Future、反應式程式設計背後的“釋出–訂閱”協議(封裝在Java 9的Flow API中)。

本章內容

  • 執行緒、Future以及推動Java支援更豐富的併發API的進化動力
  • 非同步API
  • 從“線框與管道”的角度看併發計算
  • 使用CompletableFuture結合器動態地連線線框
  • 構成Java 9反應式程式設計Flow API基礎的“釋出–訂閱”協議
  • 反應式程式設計和反應式系統

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第16章探討CompletableFuture,它可以讓你用宣告性方式表達複雜的非同步計算,從而讓StreamAPI的設計並行化。

本章內容

  • 建立非同步計算,並獲取計算結果
  • 使用非阻塞操作提升吞吐量
  • 設計和實現非同步API
  • 如何以非同步的方式使用同步的API
  • 如何對兩個或多個非同步操作進行流水線和合並操作
  • 如何處理非同步操作的完成狀態

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第17章也是這一版新增的,詳細介紹Java 9的Flow API,並提供反應式程式設計的實戰程式碼解析。

本章內容

  • 什麼是反應式程式設計以及反應式宣言的原則
  • 應用級和系統級的反應式程式設計
  • 採用反應式流(reactive stream)以及Java 9 Flow API實現的一個例子
  • 一種廣泛採用的反應式庫——RxJava
  • 如何使用RxJava轉換和整合多個反應式流
  • 如何使用彈珠圖視覺化地記錄反應式流上的操作

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第六部分是本書最後一部分,我們會談談怎麼用Java編寫高效的函式式程式,還會將Java的功能和Scala做比較。

第18章是一個完整的函數語言程式設計教程,會介紹一些術語,並解釋如何在Java 8中編寫函式式風格的程式。

本章內容

  • 為什麼要進行函數語言程式設計
  • 什麼是函數語言程式設計
  • 宣告式程式設計以及引用透明性
  • 編寫函式式Java的準則
  • 迭代和遞迴

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第19章涵蓋更高階的函數語言程式設計技巧,包括高階函式、柯里化、持久化資料結構、延遲列表和模式匹配。這一章既提供了可以用在程式碼庫中的實際技術,也提供了能讓你成為更淵博的程式設計師的學術知識。

本章內容

  • 一等成員、高階方法、柯里化以及區域性應用
  • 持久化資料結構
  • 生成Java Stream時的延遲計算和延遲列表
  • 模式匹配以及如何在Java中應用
  • 引用透明性和快取

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第20章將對比Java與Scala的功能。Scala和Java一樣,是一種在JVM上實現的語言,近年來發展迅速,在程式語言生態系統中已經威脅到了Java的一些方面。

本章內容

  • 什麼是Scala語言
  • Java與Scala是如何相生相承的
  • Scala中的函式與Java中的函式有哪些區別
  • 類和trait

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

第21章會回顧這段學習Java 8並慢慢走向函數語言程式設計的歷程。此外,我們還會猜測,在Java 8、9以及10中新增的小功能之後,未來可能會有哪些增強和新功能出現。

本章內容

  • Java 8的新特性以及其對程式設計風格顛覆性的影響
  • 全新的Java 9模組系統
  • 每六個月一次的Java遞增–釋出生命週期
  • 構成Java 10的第一個遞增釋出
  • 未來的Java版本中還可能有哪些新東西

java佈道者耗盡20年的功力整理完結java實戰第2版文件

 

這份【java實戰第2版】共有615頁,因為內容過多在這裡就不做過多的介紹了,需要完整版的小夥伴,可以轉發此文關注小編,掃碼來獲取!!!

希望本文能夠幫助到大家的學習,仔細地品讀並且能夠靈活運用,爭取達到精通的效果,也希望本文能夠得到大家的喜歡!

相關文章