prompter: Я хочу, щоб ти уявив себе в ролі інтерв'юера. Я буду кандидатом, а ти задаватимеш мені питання для співбесіди на позицію Senior Java Developer. Я хочу, щоб ти відповідав лише як інтерв’юер. Задавай мені запитання і чекай моїх відповідей. Не пиши пояснень, якщо я про це не питав. Став мені запитання одне за одним, як це робить інтерв’юер, і чекай моїх відповідей. Моє перше речення: "Привіт."

assistant: Привіт і тобі. Я б хотів почути про твій досвід - з якого типу аплікаціями ти працював, у яких доменах? Які були твої обов‘язки?

prompter: Я розроблював та підтримував різні типи додатків - від звичайних todo списків та органайзерів до високонавантажених сервісів, які отримують більше ніж 50000 запитів за секунду.
Домени були наступними: фінтех, банківська сфера, страхування та ігрова індустрія.
Мої головні обов'язки як програміста включали:
1. Спілкування із замовником, виявлення технічних вимог до майбутнього продукту;
2. Проєктування, розробка архітектури, програмних модулів;
3. Безпосереднє написання коду та покриття його тестами для надійності;
4. Тестування — перевірка на наявність помилок;
5. Виправлення помилок, якщо вони помічені під час роботи з продуктом;
6. Розгортання на платформах (переважно клаудах) та подальша технічна підтримка.

assistant: У випадку highload сервісів, 50000 запитів за секунду - це було пікове чи середнє навантаження?

prompter: Пікове. В середньому запитів було десь 4500 в секунду.

assistant: Привіт. Радий з тобою зустрітись. 

Розкажи мені будь ласка про свій досвіди роботи та попередні проекти.

prompter: У мене 5 років досвіду як Java developer, я працював в основному із Spring та різного роду reactive бібліотеками.
Мої попередні проекти в основному відносяться до adtech, marketing, але також мав досвід з healthcare сферою на одному з проектів.
Використовував продукти з таких клаудів як AWS (SQS, S3, Aurora), Google Cloud (BigQuery). Також використовував Apache Kafka для стрімінгу івентів для зв'язку між мікросервісами на кількох проектах.

assistant: Чудово, у нас на проекті теж використовується Kafka для подібних цілей. Власне моїм першим технічним питанням буде: які гарантії доставки (delivery guarantees) підтримує Kafka? Як їх можна налаштувати?

prompter: at-most-once, at-least-once, exactly once.

В першому випадку, клієнт не відсилатиме повідомлення повторно у випадку помилки, щоб уникнути дублювання. Однак деколи це може призвести до втрати даних. Повідомлення може прийти один раз, або ніколи.
В другому, клієнт пробуватиме надсилати повідомлення повторно, доки буде отримувати повідомлення про помилку від брокера. Таким чином дані ніколи не будуть втрачені. Але допускається дублювання.
І нарешті у exactly once, повідомлення буде отримано лише один раз, гарантовано.

Пр замовчуванню, Кафка використовує стратегію at-least-once, але можна відключити retries на продюсері, щоб отримати at-most-once. Для exactly once, потрібно переконатись, що увімкнено налаштування для ідемпотентного запису, тоді Kafka зможе бачити і маркувати дублікати по певному ID ще в процесі запису.

assistant: Добре! Оскільки ти вже згадав про це - зможеш розповісти, що таке "ідемпотентність"?

assistant: А можеш розповісти детальніше про Aurora? Які в неї переваги над self-hosted солюшином?

prompter: Amazon Aurora (Aurora) — це повністю керована реляційна база даних, сумісна з MySQL і PostgreSQL. Ви вже знаєте, як MySQL і PostgreSQL поєднують швидкість і надійність комерційних баз даних високого класу з простотою та економічною ефективністю баз даних з відкритим кодом. Код, інструменти та програми, які ви використовуєте сьогодні з існуючими базами даних MySQL і PostgreSQL, також можна використовувати з Aurora. Для деяких робочих навантажень Aurora може забезпечити до 5 разів пропускну здатність MySQL і до 3 разів пропускну здатність PostgreSQL без зміни більшості ваших існуючих програм.

Aurora містить високопродуктивну підсистему зберігання. Двигуни баз даних, сумісні з MySQL і PostgreSQL, адаптовані для використання переваг цього швидкого розподіленого сховища. Базове сховище автоматично збільшується за потреби. Максимальний розмір скупчення Аврори може досягати 128 тебібайт (TiB). Aurora також автоматизує та стандартизує кластеризацію та реплікацію бази даних, що зазвичай є одним із найскладніших аспектів конфігурації й керування базою даних.