Автопроигрывание
Автозавершение
К ПРЕДЫДУЩЕЙ ЛЕКЦИИ
ОК! ИДЕМ ДАЛЬШЕ!
Java 1
Занятие 1: Абстрактные классы и интерфейсы в Java
Напишите вашему преподавателю
(NEW) Подсказка по клавиатурным сокращениям в IntelliJ IDEA
Повторяем полиморфизм на примере toString() (7:40)
Как пользоваться встроенным редактором (0:59)
(NEW) Как редактировать свой код во встроенном редакторе
Практика: Проверьте знание полиморфизма
Абстрактный класс: Особенности ООП именно в Java (2:53)
Практика: абстрактные классы
Абстрактный метод: Особенности ООП именно в Java (7:00)
Практика: абстрактные методы
Интерфейсы в Java: Особенности ООП именно в Java (17:09)
Практика: интерфейсы в Java
Преобразование типов (3:22)
Практика: преобразование типов
Еще раз об интерфейсах (1:26)
Практика: итоги по интерфейсам
Учимся проектировать программу в ООП-стиле на Java на примере консольного приложения "Космодром" (16:44)
Реализуем паузу в приложении (1:36)
Практика: космопорт
Паттерн проектирования Синглетон (6:14)
Паттерн проектирования Фабрика (4:39)
(🆕NEW) Как искать ошибки в коде, используя stacktrace (3:21)
(NEW) Вопрос о нарушении инкапсуляции, если геттер возвращает ссылку на массив
(NEW) Вопрос об использовании instanceof
Практика: ДЗ обязательное (ATM)
(🆕NEW) Как правильно задавать вопросы
Разбор практики: Тренируемся проектировать и пишем приложение: Банкомат (14:50)
(NEW) Вопросы-ответы
Занятие 2: Проектирование и анонимные внутренние классы
Проектируем программу Космопорт с использованием интерфейсов (7:32)
Тренировка: изложение
Лекция: где применяются интерфейсы в Java? (3:09)
Повторяем: правило инициализации переменных (1:47)
Кодинг: инициализация переменных
Анонимные внутренние классы в Java (12:43)
Кодинг: анонимные внутренние классы
(NEW) Вопросы-ответы
Используем анонимные внутренние классы в программе (1:22)
Лекция: Итоги по ООП в Java (4:49)
Пример кода
Вопросы для самопроверки
Практика: ДЗ на анонимные внутренние классы (обязательное)
Архитектурная задача на весь курс: ДЗ для новичков (beginner)
Архитектурная задача на весь курс: ДЗ для продолжающих (Intermediate)
(NEW) Вопросы-ответы
Занятие 3: Коллекции в Java
Введение в коллекции. Интерфейсы Collection, List, Set (6:32)
Интерфейс List (14:21)
Сложность алгоритмов (6:25)
Особенности ArrayList (3:14)
Удаление элементов из коллекции и паттерн Iterator (9:53)
Коллекция LinkedList (6:56)
Интерфейс Set и реализации HashSet, TreeSet, LinkedHashSet (9:13)
(NEW) Как из Set достать конкретный элемент?
Интерфейс Map и реализация HashMap (5:54)
Что такое хэш (hash), как устроен, что спрашивают на собеседованиях? (6:18)
Что такое коллизия при работе с хэшкодами? (9:03)
Автогенерация hashCode в IDEA (2:19)
Как сравнивать классы? Интерфейс Comparable (3:50)
Интерфейс Comparator (3:09)
(NEW) Контракт между compareTo() и equals (вопросы с собеседований)
Иерархия классов
Пример кода
Вопросы для самопроверки
Задача на повторение пройденного и разработку
Задача на игру Морской бой
(NEW) Вопросы-ответы
Практика 1: ДЗ на коллекции (обязательное)
Практика 2: ДЗ на коллекции (обязательное)
Лабораторная работа на коллекции (Middle уровень) (обязательное)
(NEW) Как запомнить базовую иерархию коллекций (мастер-класс) (60:50)
Занятие 4: Работа с исключениями в Java
Правильная конкатенация строк в Java. Mutable и Immutable. StringBuilder и StringBuffer. (10:47)
Введение в механизм работы с исключениями в Java (19:40)
Контролируемые и неконтролируемые исключения (16:05)
Иерархия исключений
Тонкости по работе с исключениями (8:27)
Несколько блоков catch (7:03)
Блок finally (9:39)
Конструкция try-with-resources (3:48)
Что сильнее finally? (3:15)
Блок finally и return. Тонкости работы (7:21)
(NEW) Вопросы-ответы по finally / лезем "под капот" try-catch-finally
Пример кода
Домашнее задание
Помощь начинающим: пишем простые крестики-нолики (21:16)
Занятие 5: Ввод-вывод в Java
Ввод-вывод (java.io) Байтовые потоки (7:28)
(NEW) Сколько байт уходит на хранение символа в UTF-8?
Диаграмма классов java.io
Ввод-вывод (java.io) Символьные потоки (2:55)
Ввод-вывод (java.io) Буферизованные потоки и конструкция try-with-resourses (3:59)
Сканнер и локализация (2:04)
Класс DataOutputStream (3:43)
Сериализация и ObjectOutputStream (4:28)
Тонкости сериализации и записи экземпляров классов в файл (5:12)
Пример кода
Домашнее задание
(NEW) Вопросы-ответы
Занятие 6: Графический интерфейс пользователя
1. Основы графического интерфейса пользователя (Swing) (9:52)
Создание меню (6:38)
События и их обработка: добавляем слушателей (listeners) (6:17)
Реализуем слушателей через анонимные внутренние классы (4:15)
Реализуем диалоговые окна (6:40)
Используем SwingUtilities (2:14)
Разбираемся с контейнерами интерфейса (9:48)
Изучаем JPanel (2:26)
Используем GridLayout (2:24)
2. Паттерн проектирования MVC (8:42)
3. Приложение "Крестики-нолики" с использованием MVC (29:39)
Пример кода
Домашнее задание
Занятие 7: Многопоточность в Java
Передача данных в простейшем MVC от Model к View (10:22)
Процессы и потоки (6:08)
Способ 1: создаем новые потоки с помощью Runnable (7:38)
Тонкости по работе с потоками (2:30)
Способ 2: создаем новые потоки с помощью Thread (3:50)
Организуем обмен информацией между потоками, volatile (6:59)
Запускаем несколько потоков одновременно (5:23)
Синхронизация методов (10:18)
Блок синхронизации и ключи (8:37)
Ожидаем другие потоки, разбираемся с join() (3:02)
Делаем так, чтобы потоки заснули и будим их (7:53)
Как правильно прервать поток (9:41)
Разбираемся с Thread.yield() (1:40)
Пример кода
Домашнее задание
Занятие 8: Сокеты и работа с сетью
Протоколы и работа с сетью (9:07)
(NEW) IntelliJ IDEA "is not allowed to run in parallel". Запуск нескольких копий программы одновременно
Пишем простой браузер (9:10)
Сокеты и Приложение: Простой веб-сервер (20:41)
Веб-сервер с использованием многопоточности (7:59)
Написание приложения сетевой чат (22:59)
Пишем серверную часть сетевого чата (17:52)
Пример кода
(NEW) Инверсия управления, событийная модель, блокирующие и неблокирующие операции в Java
(NEW) ObjectInputStream и socket.getInputStream() не работают вместе (does not work)
Домашнее задание
Сертификат об окончании
Повторяем полиморфизм на примере toString()
ОК! ИДЕМ ДАЛЬШЕ!