Для новичков
Сложно порекомендовать книги для новичков. Читайте наш курс. :)
Для программистов среднего уровня
Thinking in Java
Людям с опытом программирования на Си-подобных языках рекомендую книгу Брюса Эккеля (Bruce Eckel) «Thinking in Java». Автор довольно подробно описывает, чем Java отличается от C++, а в чём они схожи.
Effective Java
Автор книги, Джошуа Блох (Joshua Bloch), — один из разработчиков стандартной библиотеки Java. Описывает различные аспекты языка Java и стандартной библиотеки. О том, какие конструкции языка как можно применить, а как лучше не применять; какие библиотечные классы можно использовать для каких задач, какие использовать с осторожностью, а какие вовсе не использовать — всё в этой книге. Она разбита на достаточно мелкие главы. Последние, в свою очередь, объединены в небольшие группы. При этом главы можно читать в произвольном порядке.
При всей значимости автора, некоторые советы из этой книги мне не нравятся, так что, как всегда, стоит пропускать прочитанное через призму здорового скептицизма.
Для матёрых разработчиков
Bitter Java
Книга описывает антишаблоны (antipatterns) проектирования, ситуации, в которых они могут возникать, и способы исправления «горького» кода. Автор, Брюс Тейт (Bruce Tate), долгое время занимался консультированием в области разработки enterprise-приложений, и этих антишаблонов проектирования повидал достаточно.
Java Performance: The Definitive Guide
О том, как выжать больше производительности из виртуальной машины. Какие есть профайлеры, какие алгоритмы сборки мусора как работают. Какие области памяти для чего используются, как правильно настроить их размеры. Как профилировать код при использовании Continious Integration, какие инструменты подходят для автоматического профилирования.
Автор книги, Скотт Оукс (Scott Oaks), работает в Oracle над производительностью виртуальной машины.
Java Generics FAQ
Всеобъемлющий и исчерпывающий справочник о самой интересной и сложной части системы типов Java — Generics. Построен в форме вопрос-ответ и хорошо структурирован.
The Well-Grounded Java Developer
Benjamin J. Evans, Martijn Verburg
Содержит очень много информации о Java и экосистеме JVM в целом.
Что интересного в Java 7. NIO из 1.4 против NIO2 из 1.7. Асинхронные каналы.
Executors и ForkJoinPool, блокировки и атомики.
Загрузка, линковка, верификация классов. Байт-код, инструмент javap, опкоды. Как работают и зачем нужны invokedynamic и MethodHandle.
Что такое оптимизация, что и как измерять. Доступ к памяти и кэши процессора. Сборка мусора. Флаги виртуальной машины. Escape-анализ, оптимизации и деоптимизации.
Идиомы функционального программирования. Основы Groovy, Scala, Clojure и сравнение их с Java.
Тестирование и TDD. Dummy vs. Stub vs. Fake vs. Mock.
Инструменты: Maven, Jenkins, FindBugs, Checkstyle, Leiningen.
Фреймворки и библиотеки: Grails, GORM, Compojure, Ring, Hiccup.
Любимая цитата:
The first, and most obvious, way to share state is not to.