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

Тестове

  • написати мікросервісний додаток [до години часу]

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

3.3KПрочитань
1Автори
62Читачі
На Друкарні з 19 квітня

Більше від автора

  • Хешування паролів: використання солі та bcrypt

    Хешування паролів - це важливий елемент захисту інформації в сучасних системах. Використання солі в хешуванні додає додатковий рівень безпеки, а алгоритм BCrypt дозволяє забезпечити високу стійкість до атак грубою силою та інших видів атак.

    Теми цього довгочиту:

    Security
  • Java. Повний огляд мережевих моделей. Socket API, forking, non-blocking sockets, event-driven API

    Хоча сокет - це один файловий дескриптор, він є двонаправленим каналом комунікації, який використовується для одночасного відправлення і отримання даних. Операційна система та мережеві протоколи забезпечують управління потоками даних, що дозволяє коректно розрізняти дані

    Теми цього довгочиту:

    Java
  • Java. WebSocket. Spring WebSocket

    Сервер в свою чергу повертає відповідь із 101 статус кодом — що так, давай змінимо протокол між тобою і мною. Тепер будемо використовувати вебсокети. Потім, після з’єднання, я розсилаю всім клієнтам інфомацію про нового користуча (і собі також, не робив додаткових перевірок).

    Теми цього довгочиту:

    Java

Вам також сподобається

Коментарі (7)

А де відповіді ? ))

Вам також сподобається