Middle/Middle+/Senior
Intro
Розкажи коротко про себе і свій професійний досвід (з чим працював, зараз працюєш), яку роль виконував на цих проєктах
Які найскладніші задачі ти виконував або просто що тобі найбільше запам’яталось як розробнику
Чи пишеш/писав для себе пет-проєкти? Найцікавіший?
Чи доводилось тобі керувати командою / менторити молодших розробників?
Чи виникали конфліктні ситуації з іншими розробниками, як ти їх вирішував?
Уточнюючі питання по досвіду, стеку → відповідно попередніх відповідей відбирати найбільш доцільні питання із нижчеперелічених
Java Core (основне)
як працює хешмапа
що таке колізія
чи може елемент в хешмапі змінити свій бакет за якихось обставин?
чи завжди в бакеті лінкедліст чи може бути якась інша структура даних
яким чином може виникнути меморі лік в хешмапі?
*на подумати – яким чином хешмапа перебудовує елементи з лінкедліста в дерево, якщо ключі не є Comparable
hashmap vs treemap (використання, особливості кожної)
що таке імутабельний об’єкт
Дженерики
що таке класлоудер, для чого потрібен і чому їх 3 (чи зможеш назвати)
JVM – ділянки памяті (stack, heap(+metaspace)) (string pool, integer pool)
як працює GC? Чув за Stop-the-World pause?
(чи може нагрузитися CPU якщо в нас проблеми тільки з пам’яттю? Чому?)чому важливо перевизначати equals разом із hashcode?
розкажи за hashcode все що ти знаєш
колекції, ексепшини, стріми, файлові потоки, серіалізація
Java NIO. Channel, Buffer, etc
AOP. Що краще використовувати рефлексію, чи АОП?
Lombok & AspectJ
Методології розробки, поясни + і - ООП/ФП
Jar types Fat/Uber/Lightweight різниця і приклади використання
Networking
Що таке сокет в контексті мереж?
Чи можемо ми працювати в джава з сокетами?
Які основні протоколи існують в мережевому стеці? (http, ssl, tcp/ip)
Чи ти чув щось за модель OSI?
TCP handshake
Connection timeout
WebSocket
Tests / CI/CD
Які методології, практики написання та інтеграції тестів ти знаєш?
Наведи бест практіс використання тест контейнерів
Які методології, практики CI/CD ти знаєш для забезпечення надійної системи?
Для чого потрбіно агрегувати метрики по часу?
Security
Що таке аутентифікація vs авторизація
Що таке сервлет фільтри
SecurityFilterChain, DelegatingFilteProxy
Як підсунути свій фільтр
Типи шифрування (симетричне асиметричне)
JWT, токени загалом, OIDC, OAuth2
SSL сертифікати
HTTP/HTTPS
Поясни процес аутентифікації у Spring Security. Як відбувається взаємодія з SecurityContextHolder? Чому він тредлокал? Що було б, якщо б він був не threadsafe?
Authentication/Principal objects
J2EE
Що таке томкат, його архітектура, флоу обробки запиту
Сервлет (чи є threadsafe), структура HTTP запиту
поняття ідемпотентності та як реалізувати ідемпотентність http запиту
Як би ти реалізував свій менеджмент сесій? (кукі, etc)
Spring
Для чого потрібен спрінг бут і в чому його особливості?
Для чого потрібен @Conditional?
Можливо ти щось чув за @ConfigurationProperties?
Як працює Spring MVC. Що таке MVC? (DispatcherServler -> /get -> invoke Controller getMapping using reflection passing needed arguments)
Різниця Controller vs RestController
Що таке RESTful API
Як працює анотація @Transactional?
Transaction propagation and isolation
Як працює/що робить анотація @EnableSmth?
Як працює анотація @Scheduled, який тредпул юзає? Чи можемо ми це конфігурувати?
Spring плагіни для Maven, як модифікувати конфігурації збірки Spring project
Що таке dependencyManagement plugin, призначення
Як обробляти помилки на рівні Spring? (ExceptionHandler’s)
Multithreading
Різниця потоку і процесу
Що таке потік
Для чого потрібні потоки
Чому не можна створювати потоки через new Thread() – які аналоги? Кращі підходи?
Які основні проблеми виникають при роботі з багатопотоковістю?
Як можна вирішати дані проблеми? (синхронізація – sync, locks)
Чи знаєш, що таке монітор?
Що таке volatile? Для чого він потрібен? Чув щось за JMM? (*happens-before, operation reordering)
Різниця між synchronized і locks
Асинхронний код. CompletableFuture. Як обробляти помилки?
Що таке дедлок
*усна задачка: є в тебе 2 потоки, які одночасно інкрементують змінну. Чи допомже в такому випадку volatile? (зрозуміти, чи кандидат розуміє для чого взагалі volatile і чи він розуміє як працює взаємодія з пам’яттю – інкрементація не є атомарною операцією)
Чи є в джава якісь класи для роботи з при примітавами в контексті багатопотковості?
Які знаєш багатопотокові колекції? Як працюють?
ThreadLocal
Docker & k8s & клауди
Чи використовував докер і кубернетес? Для чого це потрібно?
Для чого нам клауди? Які сервіси юзав і для чого? (EC2, S3, SQS, SNS)
Де б ти зберігав конфіденційну інформацію? (api ключі, токени, паролі, для внутрішньої роботи застосунку)
Перечисли API k8s і для чого вони потрібні?
Що таке ingress?
Як і для чого використовувати kube secrets?
Які типи масштабування забезпечує k8s?
Як призупинити под?
под vs контейнер
SQL & JDBC & Hibernate
Як ми можемо працювати з БД використовуючи Java? Чи є в нас якийсь відповідний API?
Як створити запит і отримати результат в JDBC?
Які основні класи є на рівні JDBC?
Які основні проблеми і для чого нам потрібен Hibernate?
Як сконфігурувати Hibernate і які там основні класи?
Що таке Session/SessionFactory/Transaction?
Чи використовує Hibernate кешування?
Життєвий цикл сутності в Hibernate?
Чому виникає LazyInitializationException
Чув щось за HQL?
Як нам витягнути лише декілька полів з нашої сутності? (projections). Які нюанси такого підходу?
В нас дуже багато даних в таблиці, нам потрібно їх якось обробити. Якщо ми просто викличемо findAll(), в нас впаде застосунок. Як би ти це вирішив? Що б використовував? (Streaming Query — Stream<Entity> fetchBlaBla(..))
QueryDSL, Criteria, etc?
Що таке транзакція?
Міграція
Тупить SQL. З чого почнеш дебаг і оптимізацію? :)
Рівні ізоляції транзакцій?
Чому просто не використовувати serializable?
Знаєш щось за ACID?
*локи в БД – optimistic, pessimistic
Що таке партиціювання в БД? Для чого потрібно?
Що таке шардинг БД?
Опиши що буде відбуватися при видаленні великої к-ті рядків в БД
Microservices
Які інструменти в джава існують для написання мікрсоервісних додатків?
Як би ти зробив інтеграцію із зовнішнім сервісом?
Різниця між синхронною і асинхронною комунікаціями. Коли краще яку використовувати? Мінуси і плюси кожної.
Які патерни знаєш, що використовував? (retry, circuit breaker, fallback pattern, etc)
Що таке сервіс діскавері?
Що таке меседж брокер? Працював з кафкою?
Що таке брокер в кафці?
Дефолтний ACK в Kafka
Як би ти організував зчитування з різних консьюмер груп?
Чи працював ти зі схема реджистрі, як це виглядало?
Як і де в кафці зберігаються данні? Коли вони видаляються? (retention policy)
Що таке zookeeper і для чого він потрібен?
Acknowledgements, MDS в Kafka, як вирішити типові проблеми (послідовність і дублікати)
DLQ паттерн
Що таке CQRS?
яким чином тестуються 3d party інтегрейшн сервіси? ми знаємо +- їхню поведінку, як їх замокати?
Протоколи комунікації (gPRC, HTTP, AMQP, WebSocket, etc)
Як відслітковувати флоу реквестів між різними сервісами? (Distributed tracing) (Sleuth, Zipkin)
CAP теорема. Розподілені система. Що це, чому це важливо, як саме вони забезпечують надійність системи. За рахунок чого? Можливо знаєш якісь алгоритми?
Розподілені транзакції (2PC, Saga)
*Additional
Чи приймав ти якісь архітектурні рішення, можливо використовував патерни, або займався якоюсь оптимізацією або моніторингом перформансу?
Що для тебе є ідеальною архітектурою?
З чого ти почав би міграцію монолітної архітектури на мікросервісну?
З чого починається розробка проєкту?
Що таке функціональні та нефункціональні вимоги?
Яким чином системи витримують high-load навантаження? Як би ти розробив таку систему?
Як можна моніторити Java-додатки в продакшні?
Які методи можуть бути використані для ефективного логування без впливу на продуктивність? (асинхронне логування (буферизація і флашинг пізніше на диск), плюси мінуси)
ELK stack
Кешування (коли треба юзати, проблеми з кешами).
Різниця між (і чи взагалі чув за →): Read-Through, Write-Through, Write-Behind, and Refresh-Ahead Cachingусна задачака*: Десь вискочив OutOfMemoryException і як взнати що є причиною(об’єкти яких класів і в якому місці спричинили меморі лік)? Чи достатньо буде треддампу (в нас є декілька потоків, аутофмеморі міг викинутися в іншому потоці, який просто десь створив нову стрічку, але реальна проблема в іншому потоці)?(хіпдамп + треддамп)
Використовував профайлери? Для чого? Які? Що там можна подивитися?
Java Agent, що і для чого
Які юзаєш плагіни в IntelIj
Різниця між різними GC
Тестове
написати мікросервісний додаток [до години часу]