Wpis z mikrobloga

Aplikowałem na stanowisko Junior Javowca i dostałem takie zadanie rekrutacyjne:

Using JAVA, write a solution that will take two methods (actions) in the API:

(POST) AddItem (ID, Name),[GET] GetItem (ID)


The application should use the CQRS pattern. The application should not have a database other than in-memory. The application should be configured for highest performance in terms of load:- CPU -RAM

and achieve the best possible performance in terms of number of requests / second.

Prepare a test (any technique, method, mechanism) that you think will best test the solution.


Zrobiłem już całą apkę używając paternu CQRS, tylko zastanawia mnie w jaki sposób można zwiększyć tę wydajność requestów, oraz CPU i RAMu, dodać jakieś stronicowanie?
No i jakie testy będą najlepsze?
Wystarczy przetestowanie commands i events?

#java #programowanie #programista15k #naukaprogramowania #pracait
  • 16
@stanleymorison:

Wg mnie:

Testy:
- unitowe (w izolacji)
- integracyjne - testujące całe use casy
- z ciekawosci możesz dodać microbenchmarkowe testy: https://www.baeldung.com/java-microbenchmark-harness ale o wydajności niżej...

Wydajność: nie wiem czy coś jeszcze z tego wyciśniesz. Dodajesz item z id i potem go pobierasz wg id. Podejrzewam, że masz jakąś hash mapę do trzymania tego in-memory. Czas dostępu do hash mapy jest stały - szybciej się nie da.
@stanleymorison: jak masz podpięta bazę h2, to weź sobie zrób coś takiego że wypisuje Ci SQL jakie lecą do bazy na konsoli i zobacz czy nie masz tam problemu n+1
ale raczej nie bo Ty masz tylko prostego geta
Możesz w sumie opakować return z repo za pomocą optional i nie robić dwóch zapytań najpierw jednego które sprawdza czy coś jest w bazie a potem pobrania tylko od razu pobierasz optional
@stanleymorison: jeśli chodzi o testy wydajności to najwiarygodniej wypadnie JMeter.
Jest trochę zabawy, żeby to skonfigurować dobrze i dużo zależy tak naprawdę jakie przyjmiesz założenia (czy 500ms response time to już za dużo czy nie?). Inna sprawa - jak chcesz wycisnąć więcej z aplikacji to musisz też dołożyć wątków w JMeterze, więc automatycznie spadnie Ci wydajność aplikacji, więc najlepiej gdybyś aplikację miał oddzielnie, a testy oddzielnie. Ale myślę, że nie będą
@stanleymorison: Stronnicowanie + testy integracyjne. Jednostkowo nie ma co testować bo nie masz logiki. W .NET można poprawić wydajność API poprzez wykorzystanie asynchronicznej obsługi requestów (taski i async/await) i tym samym nie blokowanie głównego wątku aplikacji na czas obsługi żądania, co przekłada się na możliwą większą ilość żądań które mogą zostać obsłużone. Nie wiem czy jest coś podobnego w Java.

@wafel93: Id często jest generowane po stronie klienta. Poza tym