Hej,
mam pytanie odnośnie etapu interview Solution Desing / System Design na java developera. Nigdy nie brałem udziału w tego typu interview. Orientuje się ktoś jak coś takiego wygląda w praktyce? Mam tylko informację, że "trzeba będzie zaprojektować system". Nie jest to związane z programowaniem.
Dzieki
Dostaniesz pytanie jak zrobiłbyś prosty system XYZ
, gdzie pod XYZ może kryć się cokolwiek - url shortener, jakieś zwykłe REST API itp. Najważniejsze to zadawać dużo pytań, na każdym etapie rozmowy (czyli nie tylko na początku) - zwykły Jirowy Epic w korpo wymaga często rozmów i analiz kilku PO / team leadów / architektów przez miesiąc, więc jest jak najbardziej normalne, że wypowiedziane przez rekrutera kilka zdań nie klaryfikuje wszystkiego - pytaj o każdy szczegół - co ma się stać jeśli będzie to i to, czy użytkownik może robić to i tamto, w ogóle ile jest użytkowników, czy liczy się szybkość odpowiedzi, jak reagować na błędne dane itp.
Najpierw mówisz jak to byś rozwiązał - w javie najpewniej będzie to jakaś spring bootowa aplikacja (bo szybko idzie wyklikać), ale oczywiście odpowiedź na każde pytanie co do wyboru rozwiązania jest to zależy, można jeszcze użyć A lub B, ale wybrałem obecne rozwiązanie z uwagi na ...
. W przypadku uderzania do jakiegoś external API lub bazy danych, warto pomyśleć nad jakimś cachem.
Jak już opiszesz proste rozwiązanie spełniające wymogi biznesowe, czas na skalowanie - co jak będzie 1000x więcej danych, resiliency, throughput, latency i inne keywordy spod zalet Apache Kafka czy Kubernetesa. W jaki sposób to skalować, czemu tak a nie inaczej (znowu - to zależy, ale wybrałem to rozwiązanie, ponieważ...).
Wmiędzyczasie rekruter na pewno będzie naprowadzał Cię na możliwe rozwiązanie, jeśli w którymś momencie utkniesz. Także cały czas pozostawaj z nim w przytomnym kontakcie i będzie git :)
Polecam to: https://www.amazon.pl/System-Design-Interview-insiders-Second/dp/B08CMF2CQF
Pokrywa się z tym co miałem w Amazon na interview.
dzieki Panowie
vpiotr napisał(a):
Polecam to: https://www.amazon.pl/System-Design-Interview-insiders-Second/dp/B08CMF2CQF
Pokrywa się z tym co miałem w Amazon na interview.
Ja polecam: https://www.audible.com/pd/A-Guide-to-System-Design-Interviews-Audiobook/B08VLTPQ2R
Z takich "systemow" ktore pojawiaja sie na "design interview" a na ogol nie ma lub sa slabo opisane w ksiazkach typu "Grokking design interview" dorzucilbym do rozkminki:
- aplikacje zwiazane platnosciami/wymiana/walut/bitcoinow etc powiedzmy tego typu np: Google Pay/Revolut i inne kombinacje
- aplikacje typu Uber/Bolt
- systemy gieldowe/tradingowe itp itd
TL;DR
Taka rozmowa zwykle sprawdza umiejetność projektowania większego kawałka systemu uwzględniając podstawowe elementy jak web, security, storage, skalowalność, messaging, HA, batch itd. Mogą się pojawić pytania wykraczające poza implementacje - testowanie, wdrażanie, utrzymanie na produkcji. Bardziej na zasadzie top-down niż projektowanie tabelek w bazie danych.
Sprawdzane jest praktyczne doświadczenie i „zakres widzenia” kandydata (np. czy Twój exp nie ogranicza się tylko do kodowania serwisów w Springu). Często pojawiają się pytania o to jak pod spodem działa dane rozwiązanie, np. Kafka, K8s czy Cassandra.
Proszę: https://github.com/donnemartin/system-design-primer
Przykładowe z życia:
- zaprojektuj koszyk w aplikacji e-commerce
- zaprojektuj system reklam PPC
- zaprojektuj system releasujący nowe wersje systemu operacyjnego na urządzenia mobilne
- zaprojektuj listing zamówień z możliwością wyszukiwania
- zaprojektuj serwis typu tinyurl
Nawiasem mówiąc, fajnie, że w firmie jest taki etap, bo to może wskazywać, że zespół jest angażowany w decyzje architektoniczne i inżynierowie (nie koderzy) są na przyzwoitym poziomie seniority.