О чём курс
Данный курс ориентирован на углубленное понимание языка программирования Java, которое позволит программистам писать более чистый и надежный код с меньшим количеством ошибок и с расширенными возможностями для повторного использования. В курсе подробно рассматриваются паттерны проектирования и языковые идиомы, а также демонстрируется, как максимально эффективно использовать различные возможности от обобщенных типов до перечислений, от аннотаций до автоупаковки.
Каждый
раздел этого курса состоит из нескольких пунктов, каждый из которых представлен
в форме короткого отдельного обзора, в котором даются конкретные советы и приводятся примеры
отличного кода. Полное описание и разъяснения по каждому пункту помогут
слушателям понять, что нужно и чего не нужно делать, и почему.
Цели
Улучшить навыки разработки на языке Java на основе обсуждения и анализ практических примеров.
Целевая аудитория
Java-разработчики начального и среднего уровня.
Предварительная подготовка
Для кого
Разработчик
Улучшаемые навыки
Оптимизация производительности приложений
Управление памятью
Параллельное и многопоточное программирование
Использование оптимизированных коллекций
Тестирование и мониторинг производительности
Расписание курсов
Программа курса
01
Создание и уничтожение объектов [Теория 2 ч.; Практика 2 ч.]
- Выбор статических фабричных методов вместо конструкторов
- Шаблон Builder в случае большого количества параметров конструктора
- Применение семантики шаблона Singleton с приватным конструктором или enum
- Применение приватного конструктора
- Как избежать создания ненужных объектов
- Удаление устаревших ссылок на объекты
- Отказ от использования финализаторов
02
Методы, применяемые ко всем объектам [Теория 1ч.; Практика 1 ч.]
- Выполнение общего контракта при переопределении метода equals
- Обязательное переопределение hashCode при переопределении метода equals
- Обязательное переопределение toString
- Осмысленное переопределение клонов
- Выбор реализации Comparable
03
Классы и интерфейсы [Теория 2 ч.; Практика 2 ч.]
- Минимизация доступности классов и компонентов
- Использование методов доступа вместо public полей
- Минимизация изменчивости
- Предпочтение композиции наследованию
- Проектирование с учётом дальнейшего наследования
- Предпочтение интерфейсов абстрактным классам
- Использование только интерфейсов для определения типов
- Используйте иерархии классов вместо "тег-классов"
- Использование объектов-функций для представления стратегий
- Отдавайте предпочтение статическим внутренним классам над не статическими
04
Обобщенные типы [Теория 1 ч.; Практика 2 ч.]
- В новом коде всегда используйте generic типы
- Исключение непроверенных предупреждений
- Предпочтение списков массивам
- Предпочтение generic типов
- Предпочтение generic методов
- Использование ограниченных обобщений для повышения гибкости API
- Выбор однородных контейнеров typesafe
05
Enums и аннотации [Теория 1 ч.; Практика 2 ч.]
- Использование enums вместо констант int
- Использование полей экземпляра вместо ordinals
- Использование EnumSet вместо битовых полей
- Использование EnumMap вместо порядкового индексирования
- Эмуляция расширяемых enums с интерфейсами
- Предпочтение аннотаций паттернам именования
- Всегда используйте аннотацию Override
- Использование интерфейсов-маркеров для определения типов
06
Методы [Теория 1 ч.; Практика 2 ч.]
- Проверка параметров на валидность
- Использование защитного копирования при необходимости
- Тщательное проектирование сигнатур методов
- Осмысленное использование перегрузки
- Осмысленное использование varargs
- Возврат пустых массивов или коллекций, вместо null
- Написание документации для всех public элементов API
07
Общее программирование [Теория 2 ч.; Практика 2 ч.]
- Минимизация области видимости локальных переменных
- Предпочтение циклов for-each традиционным циклам for
- Знание и использование библиотек
- Отказ от использования float и double, если требуются точные ответы
- Предпочтение примитивных типов "классам обвёрткам"
- Избегайте строк, где более подходящими являются другие типы
- Учитывайте производительность во время выполнения конкатенации строк
- Ссылки на объекты по их интерфейсам
- Предпочтение интерфейсов к reflection
- Осмысленное использование нативных методов
- Осмысленная оптимизация
- Соблюдение общепринятых норм именования
08
Исключения [Теория 1 ч.; Практика 2 ч.]
- Использование исключений только для исключительных условий
- Использование checked exceptions для проверки условий и unchecked exceptions для ошибок программирования
- Отказ от ненужного использования checked exceptions
- Предпочтительное использование стандартных исключений
- Выброс исключений соответствующих абстракции
- Документирование всех исключений, выданных каждым методом
- Включение информации о failure-capture в подробные сообщения
- Стремление к атомарности сбоев
- Не допускайте игнорирования исключений
09
Параллелизм [Теория 1 ч.; Практика 1 ч.]
- Синхронизация доступа к общим изменяемым данным
- Исключение чрезмерной синхронизации
- Предпочтение использованию Executor-ов
- Предпочтение утилит параллелизма методам wait и notify
- Документирование безопасности потоков
- Осмысленное использование отложенной инициализации
- Независимость от планировщика потоков
- Исключение групп потоков
10
Сериализация [Теория 1 ч.; Практика 1 ч.]
- Осмысленная реализация Serializable
- Использование настраиваемой сериализированной формы
- Безопасное написание методов readObject
- Для контроля экземпляров лучше выбрать типы enum вместо readResolve
- Выбор прокси сериализации вместо сериализированных экземпляров
11
Итого на курс 30 часов: теория – 13 ч (43%), практика – 17 ч (56%)
Чему вы научитесь
01
Научитесь применять различные методы и техники для оптимизации производительности Java-приложений
02
Освоите принципы работы с памятью в Java, включая управление сборкой мусора и использование различных типов памяти
03
Научитесь создавать многопоточные приложения и использовать параллелизм для повышения производительности
04
Освоите выбор и использование оптимизированных коллекций и структур данных в Java
05
Научитесь использовать инструменты для тестирования и мониторинга производительности Java-приложений
Курс проводят
Соколов Михаил
Эксперт в области разработки и архитектуры ПО