ورود به حساب

نام کاربری گذرواژه

گذرواژه را فراموش کردید؟ کلیک کنید

حساب کاربری ندارید؟ ساخت حساب

ساخت حساب کاربری

نام نام کاربری ایمیل شماره موبایل گذرواژه

برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید


09117307688
09117179751

در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید

دسترسی نامحدود

برای کاربرانی که ثبت نام کرده اند

ضمانت بازگشت وجه

درصورت عدم همخوانی توضیحات با کتاب

پشتیبانی

از ساعت 7 صبح تا 10 شب

دانلود کتاب The Well-Grounded Java Developer

دانلود کتاب توسعه‌دهنده جاوا خوب

The Well-Grounded Java Developer

مشخصات کتاب

The Well-Grounded Java Developer

ویرایش: [2 ed.] 
نویسندگان: , ,   
سری:  
ISBN (شابک) : 1617298875, 9781617298875 
ناشر: Manning Publications 
سال نشر: 2022 
تعداد صفحات: 704
[702] 
زبان: English 
فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) 
حجم فایل: 19 Mb 

قیمت کتاب (تومان) : 32,000

در صورت ایرانی بودن نویسنده امکان دانلود وجود ندارد و مبلغ عودت داده خواهد شد



ثبت امتیاز به این کتاب

میانگین امتیاز به این کتاب :
       تعداد امتیاز دهندگان : 3


در صورت تبدیل فایل کتاب The Well-Grounded Java Developer به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.

توجه داشته باشید کتاب توسعه‌دهنده جاوا خوب نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.


توضیحاتی در مورد کتاب توسعه‌دهنده جاوا خوب

درک جاوا از JVM به بالا به شما یک پایه محکم برای رشد تخصص خود و استفاده از تکنیک های پیشرفته برای عملکرد، همزمانی، کانتینرسازی و موارد دیگر می دهد. The Well-Grounded Java Developer, Second Edition یک بازبینی کامل از نسخه اصلی کلاسیک با آخرین نوآوری های پلت فرم جاوا است. مهارت‌های جاوا موجود شما را با اصول JVM مانند بایت کد و ویژگی‌های جدید قدرتمند مانند ماژول‌ها و مدل‌های همزمان ارتقا می‌دهد. با کاوش در کاتلین و سایر زبان‌های JVM درک خود را از آنچه ممکن است گسترش می‌دهید و یاد می‌گیرید که چگونه برنامه‌نویسی کاربردی می‌تواند دیدگاه جدید قدرتمندی را ارائه دهد. هر مفهوم با مثال‌های عملی، از جمله یک اپلیکیشن/کتابخانه کاملاً مدولار شده، تنظیمات ساخت Maven و Gradle، و ایجاد اپلیکیشن چند رشته‌ای خود، نشان داده شده است. خرید کتاب چاپی شامل یک کتاب الکترونیکی رایگان در قالب‌های PDF، Kindle و ePub از انتشارات منینگ است.


توضیحاتی درمورد کتاب به خارجی

Understanding Java from the JVM up gives you a solid foundation to grow your expertise and take on advanced techniques for performance, concurrency, containerization, and more. The Well-Grounded Java Developer, Second Edition is a complete revision of the classic original with the latest innovations of the Java platform. It upgrades your existing Java skills with both JVM fundamentals like bytecode, and powerful new features such as modules and concurrency models. You’ll broaden your understanding of what’s possible by exploring Kotlin and other JVM languages, and learn how functional programming can offer a powerful new perspective. Each concept is illustrated with hands-on examples, including a fully modularized application/library, build setups for Maven and Gradle, and creating your own multithreaded application. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications.



فهرست مطالب

The Well-Grounded Java Developer, Second Edition
Praise for the First Edition
brief contents
contents
foreword
preface
acknowledgements
	From Jason
	From Martijn
	From Ben
about this book
	Who should read this book?
	How to use this book
	About the code
	liveBook DIscussion Forum
	Other online resources
about the authors
about the cover illustration
Part 1: From 8 to 11 and beyond!
	Chapter 1: Introducing modern Java
		1.1 The language and the platform
		1.2 The new Java release model
		1.3 Enhanced type inference (var keyword)
		1.4 Changing the language and the platform
			1.4.1 Sprinkling some sugar
			1.4.2 Changing the language
			1.4.3 JSRs and JEPs
			1.4.4 Incubating and preview features
		1.5 Small changes in Java 11
			1.5.1 Collections factories (JEP 213)
			1.5.2 Remove enterprise modules (JEP 320)
			1.5.3 HTTP/2 (Java 11)
			1.5.4 Single-file source-code programs (JEP 330)
	Chapter 2: Java modules
		2.1 Setting the scene
			2.1.1 Project Jigsaw
			2.1.2 The module graph
			2.1.3 Protecting the internals
			2.1.4 New access control semantics
		2.2 Basic modules syntax
			2.2.1 Exporting and requiring
			2.2.2 Transitivity
		2.3 Loading modules
			2.3.1 Platform modules
			2.3.2 Application modules
			2.3.3 Automatic modules
			2.3.4 Unnamed module
		2.4 Building a first modular app
			2.4.1 Command-line switches for modules
			2.4.2 Executing a modular app
			2.4.3 Modules and reflection
		2.5 Architecting for modules
			2.5.1 Split packages
			2.5.2 Java 8 Compact Profiles
			2.5.3 Multi-release JARs
		2.6 Beyond modules
	Chapter 3: Java 17
		3.1 Text Blocks
		3.2 Switch Expressions
		3.3 Records
			3.3.1 Nominal typing
			3.3.2 Compact record constructors
		3.4 Sealed Types
		3.5 New form of instanceof
		3.6 Pattern Matching and preview features
Part 2: Under the hood
	Chapter 4: Class files and bytecode
		4.1 Class loading and class objects
			4.1.1 Loading and linking
			4.1.2 Class objects
		4.2 Class loaders
			4.2.1 Custom class loading
			4.2.2 Modules and class loading
		4.3 Examining class files
			4.3.1 Introducing javap
			4.3.2 Internal form for method signatures
			4.3.3 The constant pool
		4.4 Bytecode
			4.4.1 Disassembling a class
			4.4.2 The runtime environment
			4.4.3 Introduction to opcodes
			4.4.4 Load and store opcodes
			4.4.5 Arithmetic opcodes
			4.4.6 Execution flow control opcodes
			4.4.7 Invocation opcodes
			4.4.8 Platform operation opcodes
			4.4.9 Shortcut opcode forms
		4.5 Reflection
			4.5.1 Introducing reflection
			4.5.2 Combining class loading and reflection
			4.5.3 Problems with reflection
	Chapter 5: Java concurrency fundamentals
		5.1 Concurrency theory primer
			5.1.1 But I already know about Thread
			5.1.2 Hardware
			5.1.3 Amdahl’s law
			5.1.4 Explaining Java’s threading model
			5.1.5 Lessons learned
		5.2 Design concepts
			5.2.1 Safety and concurrent type safety
			5.2.2 Liveness
			5.2.3 Performance
			5.2.4 Reusability
			5.2.5 How and why do the forces conflict?
			5.2.6 Sources of overhead
		5.3 Block-structured concurrency (pre-Java 5)
			5.3.1 Synchronization and locks
			5.3.2 The state model for a thread
			5.3.3 Fully synchronized objects
			5.3.4 Deadlocks
			5.3.5 Why synchronized?
			5.3.6 The volatile keyword
			5.3.7 Thread states and methods
			5.3.8 Immutability
		5.4 The Java Memory Model (JMM)
		5.5 Understanding concurrency through bytecode
			5.5.1 Lost Update
			5.5.2 Synchronization in bytecode
			5.5.3 Synchronized methods
			5.5.4 Unsynchronized reads
			5.5.5 Deadlock revisited
			5.5.6 Deadlock resolved, revisited
			5.5.7 Volatile access
	Chapter 6: JDK concurrency libraries
		6.1 Building blocks for modern concurrent applications
		6.2 Atomic classes
		6.3 Lock classes
			6.3.1 Condition objects
		6.4 CountDownLatch
		6.5 ConcurrentHashMap
			6.5.1 Understanding a simplified HashMap
			6.5.2 Limitations of Dictionary
			6.5.3 Approaches to a concurrent Dictionary
			6.5.4 Using ConcurrentHashMap
		6.6 CopyOnWriteArrayList
		6.7 Blocking queues
			6.7.1 Using BlockingQueue APIs
			6.7.2 Using WorkUnit
		6.8 Futures
			6.8.1 CompletableFuture
		6.9 Tasks and execution
			6.9.1 Modeling tasks
			6.9.2 Executors
			6.9.3 Single-threaded executor
			6.9.4 Fixed-thread pool
			6.9.5 Cached thread pool
			6.9.6 ScheduledThreadPoolExecutor
	Chapter 7: Understanding Java performance
		7.1 Performance terminology: Some basic definitions
			7.1.1 Latency
			7.1.2 Throughput
			7.1.3 Utilization
			7.1.4 Efficiency
			7.1.5 Capacity
			7.1.6 Scalability
			7.1.7 Degradation
		7.2 A pragmatic approach to performance analysis
			7.2.1 Know what you’re measuring
			7.2.2 Know how to take measurements
			7.2.3 Know what your performance goals are
			7.2.4 Know when to stop
			7.2.5 Know the cost of achieving higher performance
			7.2.6 Know the dangers of premature optimization
		7.3 What went wrong? Why do we have to care?
			7.3.1 Moore’s law
			7.3.2 Understanding the memory latency hierarchy
		7.4 Why is Java performance tuning hard?
			7.4.1 The role of time in performance tuning
			7.4.2 Understanding cache misses
		7.5 Garbage collection
			7.5.1 Basics
			7.5.2 Mark and sweep
			7.5.3 Areas of memory
			7.5.4 Young collections
			7.5.5 Full collections
			7.5.6 Safepoints
			7.5.7 G1: Java’s default collector
			7.5.8 The Parallel collector
			7.5.9 GC configuration parameters
		7.6 JIT compilation with HotSpot
			7.6.1 Why have dynamic compilation?
			7.6.2 Introduction to HotSpot
			7.6.3 Inlining methods
			7.6.4 Dynamic compilation and monomorphic calls
			7.6.5 Reading the compilation logs
			7.6.6 Deoptimization
		7.7 JDK Flight Recorder
			7.7.1 Flight Recorder
			7.7.2 Mission Control
Part 3: Non-Java languages on the JVM
	Chapter 8: Alternative JVM languages
		8.1 Language zoology
			8.1.1 Interpreted vs. compiled languages
			8.1.2 Dynamic vs. static typing
			8.1.3 Imperative vs. functional languages
			8.1.4 Reimplementation vs. original
		8.2 Polyglot programming on the JVM
			8.2.1 Why use a non-Java language?
			8.2.2 Up-and-coming languages
			8.2.3 Languages we could have picked but didn’t
		8.3 How to choose a non-Java language for your project
			8.3.1 Is the project area low-risk?
			8.3.2 Does the language interoperate well with Java?
			8.3.3 Is there good tooling and test support for the language?
			8.3.4 How hard is the language to learn?
			8.3.5 Are there lots of developers using this language?
		8.4 How the JVM supports alternative languages
			8.4.1 Performance
			8.4.2 Runtime environments for non-Java languages
			8.4.3 Compiler fictions
	Chapter 9: Kotlin
		9.1 Why use Kotlin?
			9.1.1 Installing
		9.2 Convenience and conciseness
			9.2.1 Starting with less
			9.2.2 Variables
			9.2.3 Equality
			9.2.4 Functions
			9.2.5 Collections
			9.2.6 Express yourself
		9.3 A different view of classes and objects
			9.3.1 Data classes
		9.4 Safety
			9.4.1 Null safety
			9.4.2 Smart casting
		9.5 Concurrency
		9.6 Java interoperability
	Chapter 10: Clojure: A different view of programming
		10.1 Introducing Clojure
			10.1.1 Hello World in Clojure
			10.1.2 Getting started with the REPL
			10.1.3 Making a mistake
			10.1.4 Learning to love the brackets
		10.2 Looking for Clojure: Syntax and semantics
			10.2.1 Special forms bootcamp
			10.2.2 Lists, vectors, maps, and sets
			10.2.3 Arithmetic, equality, and other operations
			10.2.4 Working with functions in Clojure
			10.2.5 Loops in Clojure
			10.2.6 Reader macros and dispatch
		10.3 Functional programming and closures
		10.4 Introducing Clojure sequences
			10.4.1 Sequences and variable-arity functions
		10.5 Interoperating between Clojure and Java
			10.5.1 Calling Java from Clojure
			10.5.2 The nature of Clojure calls
			10.5.3 The Java type of Clojure values
			10.5.4 Using Clojure proxies
			10.5.5 Exploratory programming with the REPL
			10.5.6 Using Clojure from Java
		10.6 Macros
Part 4: Build and deployment
	Chapter 11: Building with Gradle and Maven
		11.1 Why build tools matter for a well-grounded developer
			11.1.1 Automating tedious operations
			11.1.2 Managing dependencies
			11.1.3 Ensuring consistency between developers
		11.2 Maven
			11.2.1 The build lifecycle
			11.2.2 Commands/POM intro
			11.2.3 Building
			11.2.4 Controlling the manifest
			11.2.5 Adding another language
			11.2.6 Testing
			11.2.7 Dependency management
			11.2.8 Reviewing
			11.2.9 Moving beyond Java 8
			11.2.10 Multirelease JARs in Maven
			11.2.11 Maven and modules
			11.2.12 Authoring Maven plugins
		11.3 Gradle
			11.3.1 Installing Gradle
			11.3.2 Tasks
			11.3.3 What’s in a script?
			11.3.4 Using plugins
			11.3.5 Building
			11.3.6 Work avoidance
			11.3.7 Dependencies in Gradle
			11.3.8 Adding Kotlin
			11.3.9 Testing
			11.3.10 Automating static analysis
			11.3.11 Moving beyond Java 8
			11.3.12 Using Gradle with modules
			11.3.13 Customizing
	Chapter 12: Running Java in containers
		12.1 Why containers matter for a well-grounded developer
			12.1.1 Host operating systems vs. virtual machines vs. containers
			12.1.2 Benefits of containers
			12.1.3 Drawbacks of containers
		12.2 Docker fundamentals
			12.2.1 Building Docker images
			12.2.2 Running Docker containers
		12.3 Developing Java applications with Docker
			12.3.1 Selecting your base image
			12.3.2 Building an image with Gradle
			12.3.3 Running the build in Docker
			12.3.4 Ports and hosts
			12.3.5 Local development with Docker Compose
			12.3.6 Debugging in Docker
			12.3.7 Logging with Docker
		12.4 Kubernetes
		12.5 Observability and performance
			12.5.1 Observability
			12.5.2 Performance in containers
	Chapter 13: Testing fundamentals
		13.1 Why we test
		13.2 How we test
		13.3 Test-driven development
			13.3.1 TDD in a nutshell
			13.3.2 A TDD example with a single use case
		13.4 Test doubles
			13.4.1 Dummy object
			13.4.2 Stub object
			13.4.3 Fake object
			13.4.4 Mock object
			13.4.5 Problems with mocking
		13.5 From JUnit 4 to 5
	Chapter 14: Testing beyond JUnit
		14.1 Integration testing with Testcontainers
			14.1.1 Installing testcontainers
			14.1.2 An example with Redis
			14.1.3 Gathering container logs
			14.1.4 An example with Postgres
			14.1.5 An example for end-to-end testing with Selenium
		14.2 Specification-style testing with Spek and Kotlin
		14.3 Property-based testing with Clojure
			14.3.1 clojure.test
			14.3.2 clojure.spec
			14.3.3 test.check
			14.3.4 clojure.spec and test.check
Part 5: Java frontiers
	Chapter 15: Advanced functional programming
		15.1 Introduction to functional programming concepts
			15.1.1 Pure functions
			15.1.2 Immutability
			15.1.3 Higher-order functions
			15.1.4 Recursion
			15.1.5 Closures
			15.1.6 Laziness
			15.1.7 Currying and partial application
		15.2 Limitations of Java as a FP language
			15.2.1 Pure functions
			15.2.2 Mutability
			15.2.3 Higher-order functions
			15.2.4 Recursion
			15.2.5 Closures
			15.2.6 Laziness
			15.2.7 Currying and partial application
			15.2.8 Java’s type system and collections
		15.3 Kotlin FP
			15.3.1 Pure and higher-order functions
			15.3.2 Closures
			15.3.3 Currying and partial application
			15.3.4 Immutability
			15.3.5 Tail recursion
			15.3.6 Lazy evaluation
			15.3.7 Sequences
		15.4 Clojure FP
			15.4.1 Comprehensions
			15.4.2 Lazy sequences
			15.4.3 Currying in Clojure
	Chapter 16: Advanced concurrent programming
		16.1 The Fork/Join framework
			16.1.1 A simple F/J example
			16.1.2 Parallelizing problems for F/J
			16.1.3 Work-stealing algorithms
		16.2 Concurrency and functional programming
			16.2.1 CompletableFuture revisited
			16.2.2 Parallel streams
		16.3 Under the hood with Kotlin coroutines
			16.3.1 How coroutines work
			16.3.2 Coroutine scoping and dispatching
		16.4 Concurrent Clojure
			16.4.1 Persistent data structures
			16.4.2 Futures and pcalls
			16.4.3 Software transactional memory
			16.4.4 Agents
	Chapter 17: Modern internals
		17.1 Introducing JVM internals: Method invocation
			17.1.1 Invoking virtual methods
			17.1.2 Invoking interface methods
			17.1.3 Invoking “special” methods
			17.1.4 Final methods
		17.2 Reflection internals
		17.3 Method handles
			17.3.1 MethodHandle
			17.3.2 MethodType
			17.3.3 Looking up method handles
			17.3.4 Reflection vs. proxies vs. method handles
		17.4 Invokedynamic
			17.4.1 Implementing lambda expressions
		17.5 Small internal changes
			17.5.1 String concatenation
			17.5.2 Compact strings
			17.5.3 Nestmates
		17.6 Unsafe
		17.7 Replacing Unsafe with supported APIs
			17.7.1 VarHandles
			17.7.2 Hidden classes
	Chapter 18: Future Java
		18.1 Project Amber
		18.2 Project Panama
			18.2.1 Foreign Function and Memory API
		18.3 Project Loom
			18.3.1 Virtual threads
			18.3.2 Thread builders
			18.3.3 Programming with virtual threads
			18.3.4 When will Project Loom arrive?
		18.4 Project Valhalla
			18.4.1 Changing the language model
			18.4.2 Consequences of value objects
			18.4.3 Generics revisited
		18.5 Java 18
appendix A: Selecting your Java
	A.1 Java is still free
		A.1.1 Java SE/OpenJDK/Oracle OpenJDK Builds/Oracle JDK
	A.2 Staying with Java SE 8
		A.2.1 $Free (as in beer) and free (as in use) Java SE 8
	A.3 Getting Java SE 11
		A.3.1 $Free (as in beer) and free (as in use) Java SE 11
	A.4 Getting Java SE 17 (LTS)
		A.4.1 $Free (as in beer) and free (as in use) Java SE 17
	A.5 Paid support
appendix B: Recap of streams in Java 8
	B.1 Backward compatibility
	B.2 Default methods
	B.3 Streams
		B.3.1 Example
	B.4 The limits of collections
	B.5 Infinite streams
	B.6 Handling primitives
	B.7 Parallel operations?
index
	Symbols
	A
	B
	C
	D
	E
	F
	G
	H
	I
	J
	K
	L
	M
	N
	O
	P
	Q
	R
	S
	T
	U
	V
	W
	X
	Y
	Z




نظرات کاربران