Spark內核設計的藝術:架構設計與實現

Spark內核設計的藝術:架構設計與實現 pdf epub mobi txt 電子書 下載 2025

耿嘉安 著
圖書標籤:
  • Spark
  • 內核
  • 架構設計
  • 分布式計算
  • 大數據
  • 高性能
  • Java
  • Scala
  • 源碼分析
  • 技術棧
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 機械工業齣版社
ISBN:9787111584391
版次:1
商品編碼:12302500
品牌:機工齣版
包裝:平裝
叢書名: 大數據技術叢書
開本:16開
齣版時間:2018-01-01
用紙:膠版紙
頁數:690

具體描述

編輯推薦

適讀人群 :本書主要適閤於以下讀者:1.想要學習Scala語言的開發人員2.想要學習Spark原理的數據開發人員3.服務器和分布式係統開發人員4.分布式係統架構師5.Spark集群運維、部署及性

多位專傢聯袂推薦,360大數據專傢撰寫,剖析Spark 2.1.0架構與實現精髓

細化到方法級,提煉齣多個流程圖,立體呈現架構、環境、調度、存儲、計算、部署、API七大核心設計


內容簡介

多位專傢聯袂推薦,360大數據專傢撰寫,剖析Spark 2.1.0架構與實現精髓。細化到方法級,提煉齣多個流程圖,立體呈現架構、環境、調度、存儲、計算、部署、API七大核心設計。本書一共有10章內容,主要包括以下部分。


準備部分:介紹Spark的環境搭建和基本原理,有效降低瞭讀者進入Spark世界的門檻,同時對Spark背景知識及整體設計能有宏觀的認識。

基礎部分:介紹Spark的基礎設施(包括配置、RPC、度量等)、初始化、執行環境等內容,使讀者深入理解RPC框架的設計、執行環境功能,是瞭解核心內容的前提。

核心部分:該部分是Spark*為核心的部分,涵蓋存儲體係、調度係統、計算引擎、部署模式等。讀者將充分瞭解Spark的數據處理與實現細節,透視本質,是進行定製化、性能優化、精準排查的基礎,學習和工作更加高效。

API部分:這部分主要對Spark的新老API進行對比,對新API進行簡單介紹。


作者簡介

耿嘉安 10餘年IT行業相關經驗。先後就職於阿裏巴巴、藝龍、360,專注於開源和大數據領域。在大量的工作實踐中,對J2EE、JVM、Tomcat、Spring、Hadoop、Spark、MySQL、Redis都有深入研究,尤其喜歡剖析開源項目的源碼實現。早期從事J2EE企業級應用開發,對Java相關技術有獨到見解。著有《深入理解Spark:核心思想與源碼分析》一書。


目錄

目錄 Contents
本書贊譽
前言
第1章 環境準備 1
1.1 運行環境準備 2
1.1.1 安裝JDK 2
1.1.2 安裝Scala 2
1.1.3 安裝Spark 3
1.2 Spark初體驗 4
1.2.1 運行spark-shell 4
1.2.2 執行word count 5
1.2.3 剖析spark-shell 9
1.3 閱讀環境準備 14
1.3.1 安裝SBT 15
1.3.2 安裝Git 15
1.3.3 安裝Eclipse Scala IDE插件 15
1.4 Spark源碼編譯與調試 17
1.5 小結 23
第2章 設計理念與基本架構 24
2.1 初識Spark 25
2.1.1 Hadoop MRv1的局限25
2.1.2 Spark的特點 26
2.1.3 Spark使用場景 28
2.2 Spark基礎知識 29
2.3 Spark基本設計思想 31
2.3.1 Spark模塊設計 32
2.3.2 Spark模型設計 34
2.4 Spark基本架構 36
2.5 小結 38
第3章 Spark基礎設施 39
3.1 Spark配置 40
3.1.1 係統屬性中的配置 40
3.1.2 使用SparkConf配置的API 41
3.1.3 剋隆SparkConf配置 42
3.2 Spark內置RPC框架 42
3.2.1 RPC配置TransportConf 45
3.2.2 RPC客戶端工廠Transport- ClientFactory 47
3.2.3 RPC服務端TransportServer 53
3.2.4 管道初始化 56
3.2.5 TransportChannelHandler詳解 57
3.2.6 服務端RpcHandler詳解 63
3.2.7 服務端引導程序Transport-ServerBootstrap 68
3.2.8 客戶端TransportClient詳解 71
3.3 事件總綫 78
3.3.1 ListenerBus的繼承體係 79
3.3.2 SparkListenerBus詳解 80
3.3.3 LiveListenerBus詳解 83
3.4 度量係統 87
3.4.1 Source繼承體係 87
3.4.2 Sink繼承體係 89
3.5 小結 92
第4章 SparkContext的初始化 93
4.1 SparkContext概述 94
4.2 創建Spark環境 97
4.3 SparkUI的實現 100
4.3.1 SparkUI概述 100
4.3.2 WebUI框架體係 102
4.3.3 創建SparkUI 107
4.4 創建心跳接收器 111
4.5 創建和啓動調度係統112
4.6 初始化塊管理器BlockManager 114
4.7 啓動度量係統 114
4.8 創建事件日誌監聽器115
4.9 創建和啓動ExecutorAllocation-Manager 116
4.10 ContextCleaner的創建與啓動 120
4.10.1 創建ContextCleaner 120
4.10.2 啓動ContextCleaner 120
4.11 額外的SparkListener與啓動事件總綫 122
4.12 Spark環境更新 123
4.13 SparkContext初始化的收尾 127
4.14 SparkContext提供的常用方法 128
4.15 SparkContext的伴生對象130
4.16 小結 131
第5章 Spark執行環境 132
5.1 SparkEnv概述 133
5.2 安全管理器SecurityManager 133
5.3 RPC環境 135
5.3.1 RPC端點RpcEndpoint 136
5.3.2 RPC端點引用RpcEndpointRef 139
5.3.3 創建傳輸上下文TransportConf 142
5.3.4 消息調度器Dispatcher 142
5.3.5 創建傳輸上下文Transport-Context 154
5.3.6 創建傳輸客戶端工廠Transport-ClientFactory 159
5.3.7 創建TransportServer 160
5.3.8 客戶端請求發送 162
5.3.9 NettyRpcEnv中的常用方法 173
5.4 序列化管理器SerializerManager 175
5.5 廣播管理器BroadcastManager 178
5.6 map任務輸齣跟蹤器 185
5.6.1 MapOutputTracker的實現 187
5.6.2 MapOutputTrackerMaster的實現原理 191
5.7 構建存儲體係 199
5.8 創建度量係統 201
5.8.1 MetricsCon?g詳解 203
5.8.2 MetricsSystem中的常用方法 207
5.8.3 啓動MetricsSystem 209
5.9 輸齣提交協調器 211
5.9.1 OutputCommitCoordinator-Endpoint的實現 211
5.9.2 OutputCommitCoordinator的實現 212
5.9.3 OutputCommitCoordinator的工作原理 216
5.10 創建SparkEnv 217
5.11 小結 217
第6章 存儲體係 219
6.1 存儲體係概述 220
6.1.1 存儲體係架構 220
6.1.2 基本概念 222
6.2 Block信息管理器 227
6.2.1 Block鎖的基本概念 227
6.2.2 Block鎖的實現 229
6.3 磁盤Block管理器 234
6.3.1 本地目錄結構 234
6.3.2 DiskBlockManager提供的方法 236
6.4 磁盤存儲DiskStore 239
6.5 內存管理器 242
6.5.1 內存池模型 243
6.5.2 StorageMemoryPool詳解 244
6.5.3 MemoryManager模型 247
6.5.4 Uni?edMemoryManager詳解 250
6.6 內存存儲MemoryStore 252
6.6.1 MemoryStore的內存模型 253
6.6.2 MemoryStore提供的方法 255
6.7 塊管理器BlockManager 265
6.7.1 BlockManager的初始化 265
6.7.2 BlockManager提供的方法 266
6.8 BlockManagerMaster對Block-Manager的管理 285
6.8.1 BlockManagerMaster的職責 285
6.8.2 BlockManagerMasterEndpoint詳解 286
6.8.3 BlockManagerSlaveEndpoint詳解 289
6.9 Block傳輸服務 290
6.9.1 初始化NettyBlockTransfer-Service 291
6.9.2 NettyBlockRpcServer詳解 292
6.9.3 Shuf?e客戶端 296
6.10 DiskBlockObjectWriter詳解 305
6.11 小結 308
第7章 調度係統 309
7.1 調度係統概述 310
7.2 RDD詳解 312
7.2.1 為什麼需要RDD 312
7.2.2 RDD

前言/序言

Preface 前 言為什麼寫這本書給本書寫前言時,讓我想起瞭兩年前給《深入理解Spark:核心思想與源碼分析》一書寫前言的經曆。我不禁想起崔護的《題都城南莊》這首詩,詩的內容是:
去年今日此門中,人麵桃花相映紅。
人麵不知何處去,桃花依舊笑春風。
從核心思想和架構來看,Spark依然是那個Spark,但是我已經找瞭一個新的“東傢”。我的年齡不知不覺中又長瞭兩歲,Spark也在大數據領域從“新貴”變成瞭“老人”。Spark的版本從0.x.x到2.x.x基本上也是用瞭兩年時間。
自從《深入理解Spark:核心思想與源碼分析》一書齣版後,引起瞭一些市場反響,更難得的是得到瞭很多讀者的反饋。一些熱心的讀者通過微信或者郵件嚮我指齣瞭書中內容的很多不足之處,包括錯彆字、錯誤的描述、代碼分析有點像流水賬、提綱挈領的內容偏少、代碼版本過低等。一些錯誤在修訂的版本中得到瞭解決,有些修正的內容則通過單獨寫博客來補充。在與讀者的溝通過程中,也糾正瞭我對一些問題的理解偏差。再次深深地感謝廣大讀者的支持與幫助!
一些讀者對《深入理解Spark:核心思想與源碼分析》一書的內容非常肯定,希望能夠齣第2版,高婧雅編輯也一再“慫恿”我,但是我一直沒有寫第2版的打算。我當時希望有人能夠以更好的方式寫一本介紹和分析Spark 2.0版本的源碼分析書籍,因為我感覺之前的寫作方式的確不是很好。在我心中一直有個矛盾:如果源碼太少,源碼分析的書籍將退化成單純講原理的書籍,對於想深入理解Spark實現的讀者來說這是不夠的;如果源碼太多,又讓人有堆砌代碼或者“混”篇幅的感覺。很多源碼分析的書隻是簡單說說接口或者方法的功能,讓人始終有種“霧裏看花”的感覺。所以我一直很期待能有更好的方式來寫作源碼分析類的書。
在一年多的等待中,我始終沒有發現類似書籍的齣現,於是我打算再做一次嘗試。這次擯棄瞭《深入理解Spark:核心思想與源碼分析》一書中按照代碼執行流程分析的方式,改為先從整體上介紹一個係統,然後逐個分析每個組件的功能,最後將這些組件之間的關係用流程圖的方式串聯起來。本書的寫作方式依然犯有代碼過多的“毛病”,但我還是期待本書能帶來一些新的氣象。
本書的主要特色按照源碼分析的習慣設計,從腳本分析到初始化,再到核心內容。整個過程遵循由淺入深的基本思路。
每一章先對本章的內容有個總體介紹,然後深入分析各個組件的實現原理,最後將各個組件之間的關係通過執行流程來展現。
本書盡可能地用圖來展示原理,以加速讀者對內容的掌握。
本書講解的很多實現及原理都值得藉鑒,可以幫助讀者提升架構設計、程序設計等方麵的能力。
本書盡可能保留較多的源碼,以便於初學者能夠在脫離辦公環境的地方(如地鐵、公交等),也能輕鬆閱讀。
讀者對象源碼閱讀是一項苦差事,人力和時間成本都很高,尤其對於剛剛接觸Spark的人來說更是如此。本書盡可能保留源碼,使得分析過程不至於産生跳躍感,目的是降低大多數人的學習門檻。如果你是從事IT工作1~3年的新人或者希望開始學習Spark的核心知識,本書非常適閤你。如果你已經對Spark有所瞭解或者已經使用它,還想進一步提高自己,那麼本書更適閤你。如果你是一個開發新手,對Java、Linux等基礎知識還不是很瞭解的話,本書可能不太適閤你。如果你已經對Spark有深入的研究,本書也許可以作為你的參考資料。
總體來說,本書適閤以下人群:
已經瞭解過Spark,但還想深入理解Spark實現原理的人;大數據技術愛好者;對性能優化和部署方案感興趣的運維工程師與架構師;開源代碼愛好者,喜歡研究源碼的同學可以通過本書學到一些閱讀源碼的方式、方法。
本書不會教你如何開發Spark應用程序,而隻拿word count的經典例子做演示。本書會簡單介紹Hadoop MapReduce、Hadoop YARN、Mesos、Alluxio(Tachyon)、ZooKeeper、HDFS、Akka、Jetty、Netty,但不會過多介紹這些框架的使用,因為市場上已經有豐富的書籍供讀者挑選。本書也不會過多介紹Scala、Java、Shell的語法,讀者可以在市場上選擇適閤自己的書籍閱讀。本書將無比適閤那些想要破解“潘多拉魔盒”的人!
如何閱讀本書本書一共有10章內容,主要包括以下部分。
準備部分(第1~2章):簡單介紹瞭Spark的環境搭建和基本原理,幫助讀者瞭解一些背景知識。
基礎部分(第3~5章):介紹Spark的基礎設施、SparkContext的初始化、Spark執行環境等內容。
核心部分(第6~9章):這是Spark最為核心的部分,包括存儲體係、調度係統、計算引擎、部署模式等。
API部分(第10章):這部分主要對Spark的新舊API進行對比,對新API進行介紹。
本書最後的附錄中還包括一些內容:附錄A介紹的是Spark中最常用的工具類Utils;附錄B是Akka的簡介;附錄C為Jetty的簡介和工具類JettyUtils的介紹;附錄D為Metrics庫的簡介和Metrics中部分API的介紹;附錄E演示瞭Hadoop 1.0版本中的word count例子;附錄F
深入解析現代大數據引擎的靈魂:從設計哲學到工程實踐 這是一部旨在揭示高性能、可擴展大數據處理核心秘密的著作。它不滿足於簡單羅列API的使用技巧,而是帶領讀者潛入技術的最深層,探究驅動現代數據分析引擎運轉的精巧架構與深邃的工程智慧。本書將大數據處理的復雜性剝離開一層層錶象,直抵那些奠定其強大能力的基石。 從設計哲學齣發,本書首先會引導讀者理解構建一個卓越大數據處理框架所需要考量的根本性問題。 為什麼需要如此復雜的分布式計算模型?如何纔能在海量數據麵前實現計算的有效並行?如何權衡吞吐量、延遲和資源利用率?這些問題的答案並非一蹴而就,而是需要對計算機科學原理、分布式係統理論以及性能優化策略有著深刻的洞察。本書將從分布式係統的基本範式入手,例如CAP理論在實際應用中的考量,一緻性模型的選擇對係統行為的影響,以及容錯機製的設計對於構建高可用係統的關鍵作用。 接著,我們將深入剖析引擎的核心組件,揭示它們為何如此設計。 想象一下,一個龐大的數據處理任務被分解成無數個小任務,在成百上韆颱機器上同時運行,最終匯聚成精確的結果。這背後離不開精妙的調度器,它需要高效地將任務分配給可用的資源,並實時監控任務的執行狀態,處理節點故障,重試失敗的任務。本書將詳細講解調度器是如何運作的,包括其任務隊列管理、資源分配策略、優先級調度以及與集群管理器的協作機製。 內存計算與緩存策略也是本書重點關注的領域。 在處理PB級彆的數據時,磁盤I/O往往成為巨大的瓶頸。因此,如何最大化地利用內存資源,通過智能的緩存機製減少對磁盤的訪問,是提升性能的關鍵。本書將探討各種內存管理技術,包括數據結構的優化、內存池的運用,以及不同級彆的緩存策略,例如塊級緩存、算子級緩存和DataFrame/Dataset級彆的緩存。我們將分析這些策略如何影響數據訪問的局部性,以及它們在不同計算模式下的適用性。 彈性分布式數據集(RDD)作為許多大數據處理框架的 foundational abstraction,其設計思想和內部機製將得到詳盡的解析。 RDD不僅僅是一個數據集閤,它更重要的是一種不可變、分區、可重算的分布式數據結構。本書將深入剖析RDD的 lineage(血緣關係)是如何構建的,以及當發生節點故障時,RDD的重算機製是如何保證計算的完整性和容錯性的。我們將探討RDD的懶執行(lazy evaluation)策略,以及它如何與DAG(有嚮無環圖)調度器協同工作,實現高效的作業執行。 進入更高級的抽象層麵,DataFrame和Dataset的引入帶來瞭怎樣的變革? 它們在RDD的基礎上引入瞭Schema信息,使得數據結構更加清晰,同時也為編譯器層麵的優化提供瞭可能。本書將深入講解DataFrame和Dataset的內部錶示,以及查詢優化器是如何利用這些結構信息進行謂詞下推(predicate pushdown)、列裁剪(column pruning)和算子融閤(operator fusion)等一係列優化操作,從而生成高效的執行計劃。我們將探討Catalyst Optimizer的工作原理,以及用戶如何通過理解這些優化機製來編寫更高效的數據處理代碼。 除瞭數據處理本身,資源的有效管理和利用也是大數據引擎成功的重要因素。 集群管理器(如YARN、Mesos)扮演著至關重要的角色,它們負責為應用程序分配和管理計算資源。本書將解析集群管理器如何與大數據處理引擎協同工作,包括應用程序提交、資源申請、容器分配以及對應用程序生命周期的管理。我們將探討不同集群管理器的特點,以及它們如何影響大數據作業的部署和伸縮性。 性能調優是大數據工程中不可避免的一環。 即使擁有優秀的架構,不當的使用和配置也可能導緻性能低下。本書將提供一套係統性的性能調優思路和方法。從數據傾斜的識彆與解決,到 Shuffle 過程的優化,再到垃圾迴收(GC)的調優,我們將一步步引導讀者掌握診斷和解決性能瓶頸的技巧。我們將分析各種性能指標的意義,以及如何通過監控工具和日誌分析來定位問題。 在工程實現層麵,本書將深入探討一些關鍵的實現細節。 例如,序列化機製的選擇如何影響數據傳輸的效率,網絡通信協議的設計如何保證數據在分布式節點間的高效傳輸,以及進程間通信(IPC)的實現如何支持引擎內部組件的協同工作。我們還會關注內存泄漏的檢測與避免,以及如何設計能夠應對高並發和大量請求的健壯係統。 最後,本書還將展望大數據處理技術未來的發展趨勢。 隨著數據量的不斷增長和應用場景的日益復雜,對大數據引擎的要求也在不斷提高。我們將探討流式處理、圖計算、機器學習集成等前沿領域的發展,以及這些技術將如何演進,並為讀者提供一個更廣闊的視角來理解大數據處理的未來圖景。 本書的獨特之處在於,它不僅僅是關於“如何用”某個工具,而是關於“為什麼這樣做”。它旨在培養讀者對大數據處理技術底層原理的深刻理解,從而能夠獨立地分析問題、設計解決方案,並在麵對復雜的技術挑戰時,能夠從容應對。無論您是大數據技術的初學者,還是希望進一步精進技能的資深工程師,本書都將為您提供寶貴的洞察和實用的指導,助您在現代大數據處理的浪潮中乘風破浪。

用戶評價

評分

這是一本令人驚嘆的著作,它以一種近乎藝術的筆觸,描繪瞭Spark內核的精妙設計。作者將抽象的概念轉化為生動的語言,讓Spark如此龐大的技術體係變得觸手可及。從最初的Motivation,到Spark的分布式基礎,再到RDD這一核心抽象的誕生和發展,書中的每一個環節都銜接得天衣無縫。我特彆欣賞作者對Spark的“惰性計算”和“DAG調度”的講解,這不僅解釋瞭Spark為何如此高效,也讓我對函數式編程在分布式係統中的應用有瞭更深的認識。在講解Shuffle時,作者更是將這個復雜的環節拆解得淋灕盡緻,從Map端到Reduce端的整個數據流轉過程,再到不同的Shuffle管理器,都得到瞭細緻的闡述,這對於解決實際工作中遇到的Shuffle性能問題非常有幫助。讀這本書的過程,就像是與一位經驗豐富的大師進行深入交流,我受益匪淺,也對Spark的未來發展有瞭更清晰的認識。

評分

說實話,在翻開《Spark內核設計的藝術:架構設計與實現》之前,我對Spark的理解主要停留在API層麵,知道如何使用它進行數據處理,但其內部運轉機製一直是個謎。這本書就像一把金鑰匙,為我打開瞭通往Spark“心髒”的大門。作者的敘述方式非常獨特,他並沒有一開始就堆砌大量的技術術語,而是循序漸進地引導讀者進入Spark的世界。從Spark的誕生背景、核心思想,再到RDD的演進,DAG的構建與優化,以及令人頭疼的Shuffle機製,書中的每一個章節都充滿瞭作者對Spark的深刻洞察。我印象最深刻的是關於Spark的內存管理部分,作者詳細闡述瞭內存的劃分、垃圾迴收策略,以及如何通過序列化等方式來優化內存使用,這對於理解Spark的性能瓶頸和調優策略至關重要。整本書讀下來,我感覺自己不僅僅是在學習一個技術框架,更是在學習一種解決復雜問題的思維方式。它教會我如何去剖析一個大型分布式係統的架構,如何理解其設計背後的權衡與取捨。

評分

《Spark內核設計的藝術:架構設計與實現》不僅僅是一本技術書籍,更是一次對分布式計算思想的深刻探索。作者以其深厚的功底和獨特的視角,將Spark這個分布式計算的佼佼者剖析得淋灕盡緻。我一直覺得Spark是一個“黑盒子”,雖然用起來很方便,但對其內部原理總是霧裏看花。而這本書,則為我揭開瞭這個神秘麵紗。從Spark的集群部署模式,到任務的提交與執行流程,再到內存和磁盤的交互,書中的每一個細節都充滿瞭智慧的光芒。作者對Spark SQL的架構設計和查詢優化也進行瞭深入的探討,這對於需要處理結構化數據的開發者來說,無疑是寶貴的財富。我尤其喜歡書中關於Spark的容錯機製和高可用性的講解,這讓我能夠更放心地在生産環境中使用Spark。這本書讓我看到瞭Spark在設計上的優雅和在實現上的精巧,也讓我對大數據處理的未來充滿瞭期待。

評分

這本《Spark內核設計的藝術:架構設計與實現》絕對是近期讀到的最令人振奮的技術書籍之一。我一直對大數據處理框架的底層原理充滿好奇,但市麵上很多書籍要麼流於錶麵,要麼過於晦澀難懂,讓我望而卻步。然而,這本書徹底改變瞭我的看法。它以一種非常係統且深入的方式,將Spark這個龐大而復雜的係統解剖開來,從最核心的架構設計理念,到具體的實現細節,都娓娓道來。讀這本書的過程,就像在經曆一場精彩的頭腦風暴,作者通過引人入勝的比喻和清晰的邏輯,將Spark的RDD、DAG、Shuffle、內存管理等關鍵概念串聯起來,讓我不再覺得它們是孤立的技術名詞,而是組成Spark強大引擎的有機整體。特彆是在理解Spark如何進行任務調度和資源管理時,那種茅塞頓開的感覺,至今仍讓我記憶猶新。我尤其喜歡書中對一些經典設計模式在Spark中的應用講解,這不僅加深瞭我對Spark的理解,也讓我對如何在自己的項目中應用這些模式有瞭更深的啓發。這本書不僅適閤Spark的初學者,也絕對是資深工程師梳理知識、查漏補缺的絕佳讀物。

評分

不得不說,《Spark內核設計的藝術:架構設計與實現》這本書帶給我的衝擊是巨大的。它不僅僅是在講解Spark的“是什麼”,更是在深入探討Spark的“為什麼”和“怎麼做”。作者以一種旁徵博引、邏輯嚴謹的方式,將Spark從一個簡單的計算引擎,逐步構建成一個強大的分布式處理平颱的過程,清晰地呈現在讀者麵前。從RDD的不可變性和容錯性,到DAG的圖狀錶示和調度優化,再到Spark Streaming的微批處理思想,每一個概念的提齣和實現,都充滿瞭對分布式係統挑戰的深刻理解。我印象最深刻的是關於Spark與Hadoop生態係統的集成部分,這讓我對Spark在整個大數據生態中的地位和作用有瞭更宏觀的認識。這本書的閱讀體驗,就像是在爬一座知識的高峰,雖然過程充滿挑戰,但每一次登高望遠,都能看到更開闊的風景。強烈推薦給所有對Spark內核感興趣的開發者和架構師。

評分

好書對程序員很有幫助,不斷學習纔能進步

評分

內容翔實,案例實用,好書,值得一讀!

評分

努力學習,天天嚮上。哈哈哈哈

評分

一本好書 需要有幾個特徵:讀者的認可 能給你帶來你想要的東西 能幫助你增長知識 能給你帶來成就感 能給你帶來最明顯的收益!

評分

快遞速度很快,書的質量不錯,其他的看過再說

評分

京東果真迅速的很,畢業季前給自己製定的書單,現在書單上的書目都已到,期待豆瓣上的強推書目能幫助自己對數據挖掘的認識再上個颱階,寫作書目可以很好地提升一下自己現有水平,未來要加油咯!

評分

還沒看 質量不錯

評分

男票買瞭好幾本 用來補充自己的 好孩子呀

評分

這套書還是挺不錯的,可以搭配著代碼寫

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有