Навчання на Java‑розробника містить 5 модулів з лекціями, практикою та підсумковими проєктами (від новачка до рівня Junior-розробника), а також фінальний груповий проєкт.
Вступне заняття. Команди та перша програма на Java
- про переваги Java та її сфери застосування
- про JavaRush та Java‑університет
- структура програми, метод
main sout- знайомство з сайтом та WebIDE
Робота зі змінними, типи int та String
- збереження тексту до змінної, виведення її в консолі
- оголошення та ініціалізація змінних
String - коментарі в коді
- елементарні математичні операції зі змінними типу
int - інкремент, декремент
- конкатенація
Integer.parseInt(),String.valueOf()
Знайомство з типами та введення з клавіатури. Знайомство з IDEA
- зберігання примітивних змінних у пам’яті
- зберігання String змінних у пам’яті
byte,short,char,long,float,doubleSystem.in,Scanner- методи
Scanner - встановлення IDEA, завантаження проєкту, завантаження JDK (версія 11)
- встановлення плагіна, знайомство з його функціоналом
Умовний оператор
if,if-else,if-else-if- блоки команд
- вкладені блоки команд (вкладені
if-и) - тип boolean
- оператори порівняння, у т.ч.
double - логічні
AND,OR,NOT,XOR - тернарний оператор
- порівняння примітивів та
String
Факультатив
- підтягуємо новачків
- досвідченим студентам розповідаємо про фішки IDEA тощо
- компіляція класу в байт-код з консолі, запуск програми
Цикли
- проблематика на прикладі задачі, у якій потрібно виконати дію багато разів
whilebreak,continuefordo-while- порівняння різних циклів, роз’яснення, де і який краще використовувати
Масиви
- створення та заповнення масивів
- обхід масиву
- зберігання масивів у пам’яті
Двомірні масиви
- двомірні масиви
- зубчаті масиви
- n-мірні масиви
Функції
- оголошення та виклик методів
- параметри
- повертаєме значення,
void - модифікатори доступу
- локальні змінні методу
- модифікатори методів, метод
main
Робота з рядками та продовження попередньої теми
- константи
- приховування змінних (shadowing)
- екранування символів
- основні методи класу
String
Факультатив
- літерали
- кодування
- допоміжні класи для роботи з рядками:
StringBuilder,String.format - утилітний клас
Arrays
Типи даних. Знайомство з ООП
- примітивні типи
- приведення типів даних
- посилальні (зсилочні) типи
- об’єкти
null- знайомство з ООП
- наслідування
Об’єкти
- створення об’єктів (
new) - конструктор, конструктор за замовчуванням
- конструктор з параметрами
- порядок виклику конструкторів під час наслідування
- доступ до полів об’єкта (геттер, сеттер)
hashCode,equals
Класи та static
- статичні змінні
- порівняння статичних та нестатичних змінних
- статичні методи
- порядок ініціалізациії при використанні конструкторів та статичних блоків
- внутрішні класи
Факультатив
- життєвий цикл об’єкта
- завантаження класу
Списки та Generics
- класи-обгортки
ArrayListArrayVSArrayList- типізація
ArrayList(дженерики)
Колекції
- ієрархія колекцій
Set,HashSetiterator,for-each
Колекції
Map,HashMap- для яких задач які колекції краще використовувати
Collections
Факультатив
LinkedListArrayListVSLinkedListQueueSortedMap,TreeMap
Singleton, Enum, switch
- для чого потрібні перераховування
- оголошення
Enum Enum– найкращий сінглтонswitch
Винятки
- нормальне виконання коду та помилки в рантаймі
try-catch- ієрархія винятків
multicatchthrowcheckedіuncheckedвиняткиthrows
Винятки
finally- створення власних винятків
Throwable- stack trace
try-with-resourcesAutoCloseable
Факультатив
- обгортання винятку
Error
Потоки введення-виведення
InputStreamReaderBufferedReaderOutputStreamWriterBufferedWriter
Потоки введення-виведення. Pattern Decorator
ByteArrayInputStreamByteArrayOutputStream- комбінування потоків
Потоки введення-виведення. java.nio
- io VS nio
FileChannelSelectorPathPathsFiles
Робота з часом та датою
DateDateFormatCalendarLocalDate,LocalTime,LocalDateTimeInstantZonedDateTimeDateTimeFormatter
Git. Підсумковий проєкт (криптоаналізатор)
ООП: інкапсуляція, поліморфізм. Інтерфейси
- інкапсуляція
- поліморфізм
- приведення типів
this,super- інтерфейси
ООП: Перевантаження, перевизначення, абстрактні класи
- абстрактний клас
- реалізація абстрактних методів предка
- перевантаження (overload) методів – однакові назви
- перевизначення (override) методів
Stream API
- анонімний внутрішній клас
- реалізація абстрактних методів предка
- лямбда-вирази
- функціональні інтерфейси
- method reference
Stream- проміжні та термінальні методи
Stream-у map-reduce
ООП: композиція, агрегація, наслідування
- асоціація: композиція та агрегація
- наслідування
Інтерфейси: порівняння з абстрактним класом, множинне наслідування
- оголошення поведінки
- дефолтні методи
- реалізація декількох інтерфейсів
- проблема “ромба”
- порівняння абстрактних класів та інтерфейсів
Приведення типів, instanceof switch-expression
instanceof- приведення типів (розширення та звуження)
switchexpression,Enum
Особливості виклику конструкторів. Блок static
- процес створення об’єкту
- порядок виклику конструкторів
- порядок ініціалізації змінних
Як влаштований Object: equals, hashCode, clone, toString(). Immutable objects
- клас
Object - методи класу
Object - mutable та immutable objects
Рекурсія
Знайомство з потоками (нитками, тредами): Thread, Runnable, start, sleep
ThreadRunnablestartsleepinterrupt
Знайомство з потоками (нитками, тредами): synchronized, volatile, wait, notify.DeadLock
synchronizedvolatilejoinwait,notify- проблема
DeadLock
Executors
ExecutorService- патерн (шаблон) “фабричний метод”
- додавання задач до сервісу
Callable- отримання результату:
Future - зупинка
ExecutorService FixedThreadPoolCachedThreadPoolScheduledExecutorService
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
SocketServerSocket- live coding: написання примітивного чату для групи
Підсумковий проєкт
Збирання сміття та типи посилань у 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,BiMapMultiset- незмінні колекції
- Objects:
hashCode,equals ThrowablesCollectionUtilsStringUtils
JUnit
- для чого потрібне тестування
- типи тестування
@Test@Before,@After@BeforeClass,@AfterClass- параметризовані тести
Mockito
- моки
mockіspywhenіthenReturnverifyany,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,doPostredirectVSforward- фільтри
Контейнери сервлетів: Tomcat, розгортання додатку, налаштування сервера
- практика з теми попередньої лекції
Знайомство з MVC (Model-View-Controller). JSP
- набір архітектурних принципів та ідей MVC
- схеми MVC
- MVC у вебі
- типова помилка: бізнес-логіка в контролері
- MVC на прикладі задачі
- JSP
Вебсервіс
- що таке вебсервіс
- протоколи http, jms, ftp, …
- синхронні та асинхронні запити
- хмарні сервіси: IaaS, PaaS, SaaS (що завгодно як сервіс)
HTML-факультатив
- що таке HTML
- структура HTML-документа
- теги та їхні атрибути
- CSS, його синтаксис
- класи та ідентифікатори
- селектори
Підсумковий проєкт. Servlet-quest конкурс
- Написати на сервлетах текстову покрокову гру-квест
Вступ до баз даних. Встановлення СУБД (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
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 (генерація запиту за назвою метода в рантаймі)


























