Навчання на 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
,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
VSArrayList
- типізація
ArrayList
(дженерики)
Колекції
- ієрархія колекцій
Set
,HashSet
iterator
,for-each
Колекції
Map
,HashMap
- для яких задач які колекції краще використовувати
Collections
Факультатив
LinkedList
ArrayList
VSLinkedList
Queue
SortedMap
,TreeMap
Singleton, Enum, switch
- для чого потрібні перераховування
- оголошення
Enum
Enum
– найкращий сінглтонswitch
Винятки
- нормальне виконання коду та помилки в рантаймі
try-catch
- ієрархія винятків
multicatch
throw
checked
іunchecked
виняткиthrows
Винятки
finally
- створення власних винятків
Throwable
- stack trace
try-with-resources
AutoCloseable
Факультатив
- обгортання винятку
Error
Потоки введення-виведення
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. Підсумковий проєкт (криптоаналізатор)
ООП: інкапсуляція, поліморфізм. Інтерфейси
- інкапсуляція
- поліморфізм
- приведення типів
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
- пам’ять 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
VSforward
- фільтри
Контейнери сервлетів: 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 (генерація запиту за назвою метода в рантаймі)