Java для опытных разработчиков. 2 изд

Оглавление⌄
Отзывы о первом издании....21 Предисловие....22 Введение....24 Благодарности....27 Об этой книге....30 Для кого эта книга....30 Как использовать эту книгу....31 О коде....32 Форум liveBook....33 Другие сетевые ресурсы....33 Об авторах....34 Иллюстрация на обложке....35 От издательства....36 Часть I От 8 до 11 и дальше....37 Глава 1. Современный язык Java....38 1.1. Язык и платформа....39 1.2. Новый цикл выпуска Java....41 1.3. Расширенное выведение типов (синтаксис var)....45 1.4. Изменения языка и платформы....49 1.4.1. Синтаксический сахар....50 1.4.2. Изменения языка....50 1.4.3. Документы JSR и JEP....51 1.4.4. Инкубационная и предварительная функциональность....52 1.5. Небольшие изменения в Java 11....53 1.5.1. Фабрики коллекций (JEP 213)....53 1.5.2. Удаление корпоративных модулей (JEP 320)....55 1.5.3. HTTP/2 (Java 11)....56 1.5.4. Однофайловое выполнение (JEP 330)....61 Итоги....63 Глава 2. Модули Java....64 2.1. Модули Java: общая картина....65 2.1.1. Проект Jigsaw....66 2.1.2. Граф модулей....69 2.1.3. Защита внутреннего устройства....71 2.1.4. Новая семантика управления доступом....72 2.2. Основы синтаксиса модулей....73 2.2.1. exports и requires....75 2.2.2. Транзитивность....76 2.3. Загрузка модулей....77 2.3.1. Платформенные модули....78 2.3.2. Прикладные модули....78 2.3.3. Автоматические модули....79 2.3.4. Анонимные модули....79 2.4. Создание первого модульного приложения....80 2.4.1. Параметры командной строки для модулей....81 2.4.2. Выполнение модульного приложения....83 2.4.3. Модули и рефлексия....85 2.5. Проектирование архитектуры для модулей....86 2.5.1. Расщепленные пакеты....87 2.5.2. Компактные профили Java 8....88 2.5.3. Многоверсионные файлы JAR....90 2.6. Не только модули....93 Итоги....95 Глава 3. Java 17....97 3.1. Текстовые блоки....97 3.2. Выражения switch....99 3.3. Записи....103 3.3.1. Номинативная типизация....109 3.3.2. Компактные конструкторы записей....110 3.4. Запечатанные типы....113 3.5. Новая форма instanceof....118 3.6. Сопоставление с шаблонами и предварительная функциональность....119 Итоги....122 Часть II Что там внутри?....123 Глава 4. Файлы классов и байт-код....124 4.1. Загрузка классов и объекты классов....125 4.1.1. Загрузка и компоновка....126 4.1.2. Объекты Class....129 4.2. Загрузчики классов....130 4.2.1. Нестандартная загрузка классов....132 4.2.2. Модули и загрузка классов....140 4.3. Анализ файлов классов....140 4.3.1. Введение в javap....141 4.3.2. Внутренняя форма сигнатур методов....141 4.3.3. Пул констант....143 4.4. Байт-код....146 4.4.1. Дизассемблирование классов....146 4.4.2. Среда выполнения....149 4.4.3. Введение в коды операций....150 4.4.4. Операции загрузки и сохранения....152 4.4.5. Арифметические операции....153 4.4.6. Операции управления порядком выполнения....154 4.4.7. Операции вызова....155 4.4.8. Платформенные операции....158 4.4.9. Сокращенные формы кодов операций....159 4.5. Рефлексия....159 4.5.1. Введение в рефлексию....160 4.5.2. Загрузка классов в сочетании с рефлексией....163 4.5.3. Проблемы с рефлексией....163 Итоги....165 Глава 5. Основы конкурентности в Java....166 5.1. Краткий курс конкурентности....167 5.1.1. Но я уже знаю о Thread....167 5.1.2. Оборудование....168 5.1.3. Закон Амдала....169 5.1.4. Потоковая модель Java....170 5.1.5. Полезный опыт....171 5.2. Факторы проектирования....172 5.2.1. Безопасность и конкурентная типобезопасность....172 5.2.2. Живость....173 5.2.3. Производительность....174 5.2.4. Повторное использование....174 5.2.5. Как и почему возникают конфликты между факторами?....174 5.2.6. Источники затрат....175 5.3. Конкурентное выполнение с блоковой структурой (до Java 5)....176 5.3.1. Синхронизация и блокировки....176 5.3.2. Модель состояний потока....178 5.3.3. Полностью синхронизированные объекты....180 5.3.4. Взаимная блокировка....181 5.3.5. Почему synchronized?....184 5.3.6. Ключевое слово volatile....186 5.3.7. Состояния и методы потока....187 5.3.8. Неизменяемость....193 5.4. Модель памяти Java (JMM)....197 5.5. Конкурентность в байт-коде....200 5.5.1. Потерянное обновление....201 5.5.2. Синхронизация в байт-коде....204 5.5.3. Синхронизированные методы....208 5.5.4. Несинхронизированное чтение....209 5.5.5. Снова о взаимной блокировке....211 5.5.6. Снова об устранении взаимных блокировок....213 5.5.7. Обращения к volatile....218 Итоги....220 Глава 6. Конкурентные библиотеки Java....221 6.1. Структурные элементы современных конкурентных приложений....221 6.2. Атомарные классы....222 6.3. Классы Lock....224 6.3.1. Объекты условий....226 6.4. CountDownLatch....226 6.5. ConcurrentHashMap....228 6.5.1. Упрощенное представление HashMap....228 6.5.2. Ограничения Dictionary....232 6.5.3. Конкурентная реализация Dictionary....232 6.5.4. ConcurrentHashMap....235 6.6. CopyOnWriteArrayList....238 6.7. Блокирующие очереди....241 6.7.1. Интерфейсы BlockingQueue....247 6.7.2. WorkUnit....249 6.8. Преднамеченные объекты....250 6.8.1. CompletableFuture....252 6.9. Задачи и выполнение....254 6.9.1. Моделирование задач....255 6.9.2. Исполнители....256 6.9.3. Однопоточный исполнитель....257 6.9.4. Пул фиксированного размера....258 6.9.5. Пул потоков с кэшированием....259 6.9.6. ScheduledThreadPoolExecutor....260 Итоги....261 Глава 7. Производительность кода на Java....262 7.1. Терминология производительности: основные определения....265 7.1.1. Задержка....265 7.1.2. Пропускная способность....265 7.1.3. Загруженность....266 7.1.4. Эффективность....266 7.1.5. Емкость....267 7.1.6. Масштабируемость....267 7.1.7. Деградация....267 7.2. Прагматичный подход к анализу производительности....268 7.2.1. Понимайте, что измеряете....268 7.2.2. Как выполнять измерения....269 7.2.3. Установите цели по быстродействию....271 7.2.4. Знайте, когда остановиться....271 7.2.5. Учитывайте цену повышения быстродействия....272 7.2.6. Преждевременная оптимизация опасна....272 7.3. Что пошло не так? Почему мы должны этим заниматься?....274 7.3.1. Закон Мура....274 7.3.2. Иерархия задержек памяти....276 7.4. Почему так сложно оптимизировать производительность кода на Java?....278 7.4.1. Роль времени в оптимизации производительности....279 7.4.2. Промахи кэша....280 7.5. Сборка мусора....282 7.5.1. Основы....282 7.5.2. Пометка и очистка....283 7.5.3. Области памяти....285 7.5.4. Сборка мусора в молодом поколении....286 7.5.5. Полная сборка мусора....286 7.5.6. Безопасные точки....286 7.5.7. G1: сборщик мусора по умолчанию в Java....287 7.5.8. Сборщик мусора Parallel....289 7.5.9. Параметры конфигурации сборщика мусора....290 7.6. JIT-компиляция с HotSpot....292 7.6.1. Зачем нужна динамическая компиляция?....293 7.6.2. Введение в HotSpot....293 7.6.3. Встраивание методов....295 7.6.4. Динамическая компиляция и мономорфные вызовы....295 7.6.5. Чтение журналов компиляции....296 7.6.6. Деоптимизация....297 7.7. JDK Flight Recorder....298 7.7.1. Flight Recorder....298 7.7.2. Mission Control....300 Итоги....306 Часть III Другие языки на JVM....307 Глава 8. Альтернативные языки на JVM....308 8.1. Классификация языков....309 8.1.1. Интерпретируемые и компилируемые языки....309 8.1.2. Динамическая и статическая типизация....310 8.1.3. Императивные и функциональные языки....311 8.1.4. Оригинал и повторная реализация....312 8.2. Многоязычное программирование на JVM....314 8.2.1. Зачем нужны другие языки?....315 8.2.2. Перспективные языки....317 8.2.3. Языки, которые мы могли выбрать (но не выбрали)....318 8.3. Как выбрать альтернативный язык для проекта....320 8.3.1. Является ли область проекта низкорискованной?....321 8.3.2. Насколько просто язык взаимодействует с Java?....322 8.3.3. Насколько развита инструментальная и тестовая поддержка для языка?....323 8.3.4. Легко ли изучить язык?....323 8.3.5. Насколько популярен этот язык среди разработчиков?....324 8.4. Как JVM поддерживает альтернативные языки....324 8.4.1. Производительность....325 8.4.2. Среды выполнения для альтернативных языков....326 8.4.3. Фикции компилятора....326 Итоги....328 Глава 9. Kotlin....329 9.1. Почему стоит использовать Kotlin....330 9.1.1. Установка....330 9.2. Удобство и компактность....330 9.2.1. Начиная с меньшего....331 9.2.2. Переменные....331 9.2.3. Проверка равенства....332 9.2.4. Функции....333 9.2.5. Коллекции....336 9.2.6. Выражения....339 9.3. Новый взгляд на классы и объекты....341 9.3.1. Классы данных....347 9.4. Безопасность....348 9.4.1. Null-безопасность....348 9.4.2. Умное приведение типа....350 9.5. Конкурентность....352 9.6. Совместимость с Java....355 Итоги....359 Глава 10. Clojure: другой взгляд на программирование....360 10.1. Введение в Clojure....361 10.1.1. Программа «Hello World» на Clojure....363 10.1.2. Основы работы с REPL....365 10.1.3. Ошибки....367 10.1.4. Привыкаем к круглым скобкам....370 10.2. Clojure: синтаксис и семантика....371 10.2.1. Краткий курс специальных форм....371 10.2.2. Списки, векторы, отображения и множества....374 10.2.3. Арифметические действия, проверка равенства и другие операции....378 10.2.4. Работа с функциями в Clojure....379 10.2.5. Циклы в Clojure....383 10.2.6. Макросы считывателя и диспетчеризация....384 10.3. Функциональное программирование и замыкания....386 10.4. Знакомство с последовательностями Clojure....388 10.4.1. Последовательности и функции переменной арности....393 10.5. Взаимодействие между Clojure и Java....394 10.5.1. Вызов Java из Clojure....395 10.5.2. Как устроены вызовы Clojure....396 10.5.3. Тип Java для значений Clojure....396 10.5.4. Заместители в Clojure....397 10.5.5. Исследовательское программирование в REPL....398 10.5.6. Использование Clojure из Java....399 10.6. Макросы....400 Итоги....406 Часть IV Сборка и развертывание....407 Глава 11. Сборка в Gradle и Maven....408 11.1. Почему средства сборки важны для опытного разработчика....408 11.1.1. Автоматизация рутинных операций....409 11.1.2. Управление зависимостями....409 11.1.3. Согласование усилий разработчиков....413 11.2. Maven....414 11.2.1. Жизненный цикл сборки....414 11.2.2. Команды и знакомство с POM....415 11.2.3. Сборка....417 11.2.4. Управление манифестом....418 11.2.5. Добавление нового языка....419 11.2.6. Тестирование....422 11.2.7. Управление зависимостями....425 11.2.8. Анализ покрытия....429 11.2.9. За пределами Java 8....430 11.2.10. Многоверсионные файлы JAR в Maven....431 11.2.11. Maven и модули....435 11.2.12. Разработка плагинов для Maven....438 11.3. Gradle....441 11.3.1. Установка Gradle....442 11.3.2. Задачи....443 11.3.3. Сценарии сборки....444 11.3.4. Использование плагинов....445 11.3.5. Сборка....445 11.3.6. Эффективность....448 11.3.7. Зависимости в Gradle....449 11.3.8. Добавление кода на Kotlin....454 11.3.9. Тестирование....455 11.3.10. Автоматизация статического анализа....456 11.3.11. За пределами Java 8....457 11.3.12. Gradle и модули....458 11.3.13. Настройка Gradle....465 Итоги....467 Глава 12. Выполнение Java в контейнерах....469 12.1. Почему контейнеры важны для опытных разработчиков....470 12.1.1. Управляющие операционные системы, виртуальные машины и контейнеры....470 12.1.2. Преимущества контейнеров....473 12.1.3. Недостатки контейнеров....474 12.2. Основы работы с Docker....475 12.2.1. Построение образов Docker....475 12.2.2. Запуск контейнеров Docker....478 12.3. Разработка приложений на Java с Docker....480 12.3.1. Выбор базового образа....481 12.3.2. Сборка образа в Gradle....482 12.3.3. Сборка в Docker....483 12.3.4. Порты и узлы....486 12.3.5. Локальная разработка с Docker Compose....488 12.3.6. Отладка в Docker....491 12.3.7. Протоколирование в Docker....493 12.4. Kubernetes....495 12.5. Наблюдаемость и производительность....503 12.5.1. Наблюдаемость....503 12.5.2. Производительность в контейнерах....506 Итоги....507 Глава 13. Основы тестирования....509 13.1. Зачем нужно тестирование....509 13.2. Как проводить тестирование....510 13.3. Разработка через тестирование....514 13.3.1. TDD в двух словах....516 13.3.2. Пример TDD с одним сценарием использования....516 13.4. Тестовые дублеры....522 13.4.1. Пустышка....523 13.4.2. Заглушка....525 13.4.3. Суррогаты....527 13.4.4. Макеты....530 13.4.5. Проблемы с макетами....531 13.5. От JUnit 4 к 5....533 Итоги....539 Глава 14. Тестирование за пределами JUnit....540 14.1. Интеграционное тестирование с Testcontainers....540 14.1.1. Установка testcontainers....541 14.1.2. Пример с Redis....541 14.1.3. Получение логов контейнеров....545 14.1.4. Пример с Postgres....546 14.1.5. Пример сквозного тестирования с Selenium....548 14.2. Спецификационное тестирование в Spek и Kotlin....550 14.3. Тестирование на основе свойств в Clojure....556 14.3.1. clojure.test....556 14.3.2. clojure.spec....558 14.3.3. test.check....561 14.3.4. clojure.spec и test.check....567 Итоги....568 Часть V Передовые рубежи Java....569 Глава 15. Продвинутое функциональное программирование....570 15.1. Введение в понятия функционального программирования....571 15.1.1. Чистые функции....571 15.1.2. Неизменяемость....571 15.1.3. Функции высшего порядка....572 15.1.4. Рекурсия....573 15.1.5. Замыкания....574 15.1.6. Отложенные вычисления....574 15.1.7. Каррирование и частичное применение....575 15.2. Ограничения функционального программирования на Java....576 15.2.1. Чистые функции....576 15.2.2. Изменяемость....577 15.2.3. Функции высшего порядка....579 15.2.4. Рекурсия....580 15.2.5. Замыкания....583 15.2.6. Отложенные вычисления....585 15.2.7. Каррирование и частичное применение....587 15.2.8. Система типов Java и коллекции....588 15.3. Функциональное программирование на Kotlin....590 15.3.1. Чистые функции и функции высшего порядка....590 15.3.2. Замыкания....591 15.3.3. Каррирование и частичное применение....592 15.3.4. Неизменяемость....593 15.3.5. Хвостовая рекурсия....596 15.3.6. Отложенное вычисление....600 15.3.7. Последовательности....601 15.4. Функциональное программирование на Clojure....606 15.4.1. Включения....606 15.4.2. Отложенные последовательности....607 15.4.3. Каррирование в Clojure....610 Итоги....611 Глава 16. Продвинутое конкурентное программирование....612 16.1. Фреймворк Fork/Join....613 16.1.1. Простой пример F/J....614 16.1.2. Параллелизация задач для F/J....617 16.1.3. Алгоритмы перехвата работы....618 16.2. Конкурентность и функциональное программирование....620 16.2.1. Снова о CompletableFuture....620 16.2.2. Параллельные потоки данных....624 16.3. Как работают корутины Kotlin....626 16.3.1. Как работают корутины....626 16.3.2. Области видимости и диспетчеризация корутин....631 16.4. Конкурентное выполнение в Clojure....633 16.4.1. Перманентные структуры данных....634 16.4.2. Преднамеченные объекты и pcalls....641 16.4.3. Программная транзакционная память....643 16.4.4. Агенты....647 Итоги....648 Глава 17. Внутреннее устройство современной JVM....649 17.1. Знакомство с внутренним устройством JVM: вызов методов....650 17.1.1. Вызов виртуальных методов....650 17.1.2. Вызов методов интерфейсов....653 17.1.3. Вызов «специальных» методов....655 17.1.4. Конечные методы....656 17.2. Внутренняя реализация рефлексии....657 17.3. Дескрипторы методов....661 17.3.1. MethodHandle....662 17.3.2. MethodType....663 17.3.3. Как получать дескрипторы методов....664 17.3.4. Рефлексия, заместители и дескрипторы методов....665 17.4. invokedynamic....668 17.4.1. Реализация лямбда-выражений....670 17.5. Небольшие внутренние изменения....673 17.5.1. Конкатенация строк....673 17.5.2. Компактные строки....675 17.5.3. Общие контексты....677 17.6. Unsafe....680 17.7. Замена Unsafe поддерживаемыми API....684 17.7.1. VarHandle....685 17.7.2. Скрытые классы....687 Итоги....689 Глава 18. Будущее Java....690 18.1. Проект Amber....691 18.2. Проект Panama....693 18.2.1. API внешних функций и памяти....693 18.3. Проект Loom....700 18.3.1. Виртуальные потоки....704 18.3.2. Строители потоков....705 18.3.3. Программирование с помощью виртуальных потоков....706 18.3.4. Когда проект Loom станет доступным?....708 18.4. Проект Valhalla....709 18.4.1. Изменение модели языка....713 18.4. Последствия внедрения объектов-значений....714 18.4.3. Снова об обобщениях....717 18.5. Java 18....718 Итоги....718 Приложения....721 Приложение А. Выбор версии Java....722 A.1. Java остается бесплатным....722 A.1.1. Java SE / OpenJDK / Сборки Oracle OpenJDK / Oracle JDK....722 A.2. Для тех, кто остается на Java SE 8....723 A.2.1. Бесплатное использование Java SE 8....723 A.3. Как получить Java SE 11....723 A.3.1. Бесплатное использование Java SE 11....724 A.4. Как получить Java SE 17 (LTS)....724 A.4.1. Бесплатное использование Java SE 17....724 A.5. Платная поддержка....724 Приложение Б. Потоки данных в Java 8....725 Б.1. Обратная совместимость....725 Б.2. Методы по умолчанию....726 Б.3. Потоки данных....727 Б.3.1. Пример....728 Б.4. Ограничения коллекций....731 Б.5. Бесконечные потоки данных....732 Б.6. Работа с примитивами....732 Б.7. Параллельные операции?....733
Описание
Коротко и по делу о том, что важно знать про java.
Если программист хорошо знает Java, он без особого труда найдет интересную работу. Язык Java – сердце корпоративного ПО. Поднимите ваши навыки Java на новый уровень вместе с экспертами. Освойте ценные приемы конкурентного выполнения и оптимизации быстродействия, а еще ключевые методы сборки, тестирования и развертывания. Основательно изучите такие мощные инструменты, как модели конкурентного выполнения и модули, и даже раскройте некоторые глубинные тайны Java.Узнайте, как Java работает на уровне байт-кода. Также рассмотрите альтернативные языки для JVM – Kotlin и Clojure. Изучив материал, вы будете выделяться на фоне других разработчиков!
На этом основные моменты по теме закрыты.
Поделиться
Частые вопросы
Можно ли скачать «Java для опытных разработчиков. 2 изд» бесплатно?
Да, «Java для опытных разработчиков. 2 изд» доступна для бесплатного скачивания на нашем сайте в формате PDF. Ссылка на файл находится на этой странице.
В каком формате и какого размера файл?
Книга предоставляется в формате PDF.
Кто автор и когда вышла книга?
автор — Кларк Джейсон , Фербург Мартин , Эванс Бенджамин, издательство Питер, год выпуска 2024, 736 страниц.
О чём книга «Java для опытных разработчиков. 2 изд»?
Язык Java – сердце корпоративного ПО.