Курс від нуля до Junior-спеціаліста за 12 місяців. Протягом навчання Ви вивчите всі навики та технології необхідні для майбутньої професії.
Програма курсу
Java Syntax
Вступне заняття. Команди та перша програма на Java
- Про переваги Java та її сфери застосування
- Про JavaRush та Java‑університет
- Структура програми, метод main
- sout
- Знайомство з сайтом та WebIDE
Робота зі змінними, типи int та String
- Збереження тексту до змінної, виведення її в консолі
- Оголошення та ініціалізація змінних String
- Коментарі в коді
- Елементарні математичні операції зі змінними типу int
- Інкремент, декремент
- Конкатенація
- Integer.parseInt(), String.valueOf()
Знайомство з типами та введення з клавіатури. Знайомство з IDEA
- Зберігання примітивних змінних у пам'яті
- Зберігання String змінних у пам'яті
- byte, short, char, long, float, double
- System.in, Scanner
- Методи Scanner
- Встановлення IDEA, завантаження проєкту, завантаження JDK (версія 11)
- Встановлення плагіна, знайомство з його функціоналом
Умовний оператор
- if, if-else, if-else-if
- Блоки команд
- Вкладені блоки команд (вкладені if-и)
- Тип boolean
- Оператори порівняння, double
- Логічні AND, OR, NOT, XOR
- Тернарний оператор
- Порівняння примітивів та String
Факультатив
- Підтягуємо новачків
- Досвідченим студентам розповідаємо про фішки IDEA тощо
- Компіляція класу в байт-код з консолі, запуск програми
Цикли
- Проблематика на прикладі задачі, у якій потрібно виконати дію багато разів
- while
- break, continue
- for
- do-while
- Порівняння різних циклів, роз'яснення, де і який краще використовувати
Масиви
- Створення та заповнення масивів
- Обхід масиву
- Зберігання масивів у пам'яті
Двомірні масиви
- Двомірні масиви
- Зубчаті масиви
- n-мірні масиви
Функції
- Оголошення та виклик методів
- Параметри
- Повертаєме значення, void
- Модифікатори доступу
- Локальні змінні методу
- Модифікатори методів, метод main
Робота з рядками та продовження попередньої теми
- Константи
- Приховування змінних (shadowing)
- Екранування символів
- Основні методи класу String
Факультатив
- Літерали
- Кодування
- Допоміжні класи для роботи з рядками: StringBuilder, String.format
- Утилітний клас Arrays
Типи даних. Знайомство з ООП
- Примітивні типи
- Приведення типів даних
- Посилальні (зсилочні) типи
- об'єкти
- null
- Знайомство з ООП
- Наслідування
Об'єкти
- Створення об'єктів (new)
- Конструктор, конструктор за замовчуванням
- Конструктор з параметрами
- Порядок виклику конструкторів під час наслідування
- Доступ до полів об'єкта (геттер, сеттер)
- hashCode, equals
Класи та static
- Статичні змінні
- Порівняння статичних та нестатичних змінних
- Статичні методи
- Порядок ініціалізациії при використанні конструкторів та статичних блоків
- Внутрішні класи
Факультатив
- Життєвий цикл об'єкта
- Завантаження класу
Списки та Generics
- Класи-обгортки
- ArrayList
- Array VS ArrayList
- Типізація ArrayList (дженерики)
Колекції
- Ієрархія колекцій
- Set, HashSet
- iterator, for-each
- Map, HashMap
- Для яких задач які колекції краще використовувати
- Collections
Факультатив
- LinkedList
- ArrayList VS LinkedList
- Queue
- SortedMap, TreeMap
Singleton, Enum, switch
- Для чого потрібні перераховування
- Оголошення Enum
- Enum - найкращий сінглтон
- switch
Винятки
- Нормальне виконання коду та помилки в рантаймі
- try-catch
- Ієрархія винятків
- multicatch
- throw
- checked і unchecked винятки
- throws
- finally
- Створення власних винятків
- Throwable
- stack trace
- try-with-resources
- AutoCloseable
Факультатив
Потоки введення-виведення
- InputStream
- Reader
- BufferedReader
- OutputStream
- Writer
- BufferedWriter
Потоки введення-виведення. Pattern Decorator
- ByteArrayInputStream
- ByteArrayOutputStream
- Комбінування потоків
Потоки введення-виведення. Java.nio
- io VS nio
- FileChannel
- Selector
- Path
- Paths
- Files
Робота з часом та датою
- Date
- DateFormat
- Calendar
- LocalDate, LocalTime, LocalDateTime
- Instant
- ZonedDateTime
- DateTimeFormatter
Git. Підсумковий проєкт (криптоаналізатор)
Java Core
ООП: інкапсуляція, поліморфізм. Інтерфейси
- Інкапсуляція
- Поліморфізм
- Приведення типів
- this, super
- Інтерфейси
ООП: перевантаження, перевизначення, абстрактні класи
- Абстрактний клас
- Реалізація абстрактних методів предка
- Перевантаження (overload) методів - однакові назви
- Перевизначення (override) методів
Stream API
- Анонімний внутрішній клас
- Реалізація абстрактних методів предка
- Лямбда-вирази
- Функціональні інтерфейси
- method reference
- Stream
- Проміжні та термінальні методи Stream-у
- map-reduce
ООП: композиція, агрегація, наслідування
- Асоціація: композиція та агрегація
- Наслідування
Інтерфейси: порівняння з абстрактним класом, множинне наслідування
- Оголошення поведінки
- Дефолтні методи
- Реалізація декількох інтерфейсів
- Проблема "ромба"
- Порівняння абстрактних класів та інтерфейсів
Приведення типів, instanceof switch-expression
- instanceof
- Приведення типів (розширення та звуження)
- switch expression, Enum
Особливості виклику конструкторів. Блок static
- Процес створення об'єкту
- Порядок виклику конструкторів
- Порядок ініціалізації змінних
Як влаштований Object: equals, hashCode, clone, toString(). Immutable objects
- Клас Object
- Методи класу Object
- mutable та immutable objects
Рекурсія
Знайомство з потоками (нитками, тредами): Thread, Runnable, start, sleep
- Thread
- Runnable
- start
- sleep
- interrupt
Знайомство з потоками (нитками, тредами): synchronized, volatile, wait, notify.DeadLock
- synchronized
- volatile
- join
- wait, notify
- Проблема DeadLock
Executors
- ExecutorService
- Патерн (шаблон) "фабричний метод"
- Додавання задач до сервісу
- Callable
- Отримання результату: Future
- Зупинка ExecutorService
- FixedThreadPool
- CachedThreadPool
- ScheduledExecutorService
ThreadLocal, Callable, Future
- ThreadLocal контекст
- ThreadLocalRandom
Внутрішні/вкладені класи, приклади: Map.Entry
- Вкладені класи
- Внутрішні класи
- Внутрішні статичні класи
- Внутрішні анонімні класи
- Приклади різних типів класів з JDK
Серіалізація JSON/XML/YAML
- java серіалізація
- Формати даних xml, json, yaml
- jackson ObjectMapper
Reflection API
- Для чого потрібен Reflection API
- Отримання даних: класу, метода, конструктора, поля
- Створення об'єкту
- Зміна внутрішнього стану об'єкту
- Проксі
- RMI
Анотації в Java
- Декларативний та імперативний підхід до написання коду
- Популярні анотації: @Deprecated, @Override, @Nullable
- Створення анотацій
- Обробка анотацій у рантаймі
Факультатив
Робота зі Swing.
Sockets
- Socket
- ServerSocket
- live coding: написання примітивного чату для групи
Підсумковий проєкт
Java professional
Збирання сміття та типи посилань у Java
- Пам'ять JVM: stack і heap
- CG: Serial, Parallel, CMS, G1, Shenandoah, ZGC
- Кеш
- WeakReference, SoftReference, PhantomReference
Патерни проєктування
- Поведінкові:
- ланцюжок обов'язків
- команда
- ітератор
- посередник
- знімок
- спостерігач
- стан
- стратегія
- відвідувач
- шаблонний метод
- Породжувальні:
- прототип
- будівельник
- сінглтон
- абстрактна фабрика
- фабричний метод
- Структурні:
- декоратор
- компонувальник
- фасад
- адаптер
- проксі (замісник)
Методології розробки
- waterfall
- v-model
- incremental
- RAD model
- agile
- iterative
- spiral
Основи Maven. Встановлення Maven, керування залежностями, види Maven-репозиторіїв, збирання Java-проєкту
- Завантаження, прописування змінних оточення
- Створення maven-проєкту
- Залежності
- Плагіни
- Фази (lifecycle)
- Профілі
- Білд артефактів
Досвід роботи з Guava, Apache Commons Collections
- Multimap, BiMap
- Multiset
- Незмінні колекції
- Objects: hashCode, equals
- Throwables
- CollectionUtils
- StringUtils
JUnit
- Для чого потрібне тестування
- Типи тестування
- @Test
- @Before, @After
- @BeforeClass, @AfterClass
- Параметризовані тести
Mockito
- Моки
- mock і spy
- when і thenReturn
- verify
- any, once, times
Логування
- Для чого потрібні логи
- Рівні логування
- slf4j
- Реалізації: log4j, JUL, logback, common-loggins
- Аппендери
Як влаштована мережа. Мережева модель
- Топологія мережі
- Модель OSI
- DNS
Архітектура ПЗ. Клієнт-серверна архітектура та її складові, трирівнева архітектура, архітектурні шаблони
- Клієнт-серверна архітектура
- Трирівнева архітектура (клієнт-сервер-БД)
- Критерії вдалої архітектури:
- ефективність
- гнучкість
- розширюваність
- масштабованість
- зручність тестування
- зрозумілий та легкий для читання код
- Модульна архітектура, декомпозиція
Протоколи HTTP/HTTPS. Протокол передачі даних, HTTP-запити та відповіді, відмінності HTTP та HTTPS. Cookies, Session
- Протоколи передачі даних в мережі
- http методи (GET, POST, PUT)
- Параметри запитів
- Тіло запиту
- Хедери
- Коди відповідей
- http VS https
- http сессії
- Кукі
- http/2
HttpClient
- AJAX
- java http client
- Синхронні та асинхронні запити
- Задача на отримання даних з інтернету (наприклад, прогноз погоди)
Сервлети, Java servlet API. Пишемо простий вебзастосунок
- Що таке сервлет
- Життєвий цикл
- Сервлет-контейнер Tomcat
- doGet, doPost
- redirect VS forward
- Фільтри
Контейнери сервлетів: Tomcat, розгортання додатку, налаштування сервера
Практика з теми попередньої лекції.
Знайомство з MVC (Model-View-Controller). JSP
- Набір архітектурних принципів та ідей MVC
- Схеми MVC
- MVC у вебі
- Типова помилка: бізнес-логіка в контролері
- MVC на прикладі задачі
- JSP
Вебсервіс
- Що таке вебсервіс
- Протоколи http, jms, ftp
- Синхронні та асинхронні запити
- Хмарні сервіси: IaaS, PaaS, SaaS (що завгодно як сервіс)
HTML-факультатив
- Що таке HTML
- Структура HTML-документа
- Теги та їхні атрибути
- CSS, його синтаксис
- Класи та ідентифікатори
- Селектори
Підсумковий проєкт. Servlet-quest конкурс
Написати на сервлетах текстову покрокову гру-квест.
Работа з базами даних. Hibernate.
Вступ до баз даних. Встановлення СУБД (MySQL). ddl, dml
- Для чого потрібні БД
- Реляційні та нереляційні БД
- Реляційна модель
- CAP теорема
- Встановлення MySQL developer
- Групи SQL (ddl, dml, dcl, tcl)
Типи даних. Створення таблиці. Написання insert, select, update, delete
- Створення схеми
- Створення таблиць
- Зміна структури таблиць
- insert
- select
- update
- delete
Вибір даних
- select з умовою
- Перелік даних, що обираються
- subselect
- join: left, right, inner, cross
- group by та агрегатні функції
- index
Транзакції БД
- Концепції ACID (Atomicity, Consistency, Isolation, Durability)
- Управління транзакціями
- Рівні ізоляції даних
Проєктування баз даних
- Перша нормальна форма
- Друга нормальна форма
- Третя нормальна форма
- Ключі (foreign key)
- Відношення: one to, many to
JDBC 1
- Для чого потрібен
- Основні інтерфейси
- Отримання даних у додатку з БД
- Оновлення та видалення даних у додатку з БД
JDBC 2
- Транзакції
- Рівні ізоляції
- Обробка checker винятків
ORM. Hibernate
- Нестиковки об'єктної та реляційної моделей даних
- ORM (Hibernate), JPA
- Архітектура Hibernate
- Конфігурація, основні анотації
- Отримання даних у додатку з БД
- Оновлення та видалення даних у додатку з БД
- Hibernate VS JDBC
Hibernate. OneTo, ManyTo
Відносини (робота з колекціями).
Наслідування Entity for ORM
- Одна таблиця для кожного класу
- Одна таблиця для кожного класу з предками
- Єдина таблиця для всієї ієрархії класів
- Одна таблиця для кожного класу з використанням з'єднань (join)
Підсумковий проєкт
hash for passwords.
Spring + Spring Boot
IoC, DI. Spring. Components. Beans
- Чому Spring став де-факто стандартом галузі (переваги)
- Принципи IoC і DI
- Бін
- Контекст (ApplicationContext)
- AOP
Spring modules general. Spring Web MVC
- core (beans, core, context, SpEL)
- data access
- testing
- web
- integration
- web mvc
Проєктування REST API
- Оперування ресурсами, а не методами
- http методи
- http коди відповідей
- Помилки
- Запит колекції
- Запит кількості об'єктів у колекції
- Запит об'єкта коллекції
- Додавання даних у колекцію
- Редагування
- Видалення
- Домашнє завдання: спроєктувати 2-ранговий REST API
App controller-service-dao
- Ієрархія контекстів
- servlet config
- Контролер - прийом запиту
- Сервіс - бізнес-логіка
- dao - зберігання стану
Spring ORM. @Transaction
- Абстракція "транзакція"
- Декларативні транзакції
- transaction propagation
- Переваги ORM + Spring
- Налаштування hibernate SessionFactory
- live coding example
Spring Test. AOP (logging)
- unit testing
- integration testing
- Основні анотації
- TestContext
- live coding example (тестування API-метода або пари методів)
- spring commons logging bridge
Spring Security (memory, DB)
- Ключові об'єкти контексту spring security:
- SecurityContextHolder
- Authentication
- UserDetails
- GrantedAuthority
- Авторизація та аутентифікація
- OAuth2
- Сесії в пам'яті
- Сесії в БД
Spring Boot. Spring JPA
- Стартери
- Автоконфігурація
- Вбудований tomcat
- Анотації конфігурації
- Демонстрація spring data jpa (генерація запиту за назвою метода в рантаймі)
Особливості курсу
- Заняття у невеликих групах
- Постійна підтримка ментора
- Великі курсові проєкти для портфоліо
- Можливі додаткові факультативи за запитом студентів
- Диплом після закінчення навчання
- Допомога у працевлаштуванні (складання резюме, навички самопрезентації, тестові співбесіди)
Викладачі курсу
- Василь Малік - Team lead команди програмістів JavaRush
- Володимир Крохмалюк - Software engineer
- Вадим Новаковський - Senior Java Software Engineer
- Олександр Чорноус - Software Engineer, Full Stack Developer
- Валерій Попов - Java Team Lead
- Роман Прищепа - Java Developer
- Павло Плинько - Java Developer
Більше інформації