Java
Vysvětlete princip fungování metody optimistického zámku při správě konkurenčního přístupu k datům.
Co může vést ke zhoršení výkonu funkce?
Máte zkušenosti s komunikací s dodavateli dat nebo zdrojů?
Můžete vysvětlit koncept Stream API v Javě a jak se používá pro zpracování dat?
Jaké jsou výhody a nevýhody používání indexů pro jednotlivé sloupce v databázi?
Mohou cyklické závislosti vést k únikům paměti v programu?
Jak zjistit provedený SQL dotaz v PostgreSQL?
Proč při současné modifikaci ArrayList během iterace dochází k výjimce ConcurrentModificationException?
Přečtěte si kód a zvýrazněte chyby /** * Klient s koupeným lístkem může za příplatek vybrat konkrétní místo. * Základní cena míst je určena tarify (externí služba). * Pro klienty s určitými tarify (PREMIUM, ULTRA) je třeba při platbě poskytnout slevu. * Při rezervaci je vystavena faktura k úhradě. Správa plateb probíhá v externí službě. */ @Service public class SeatBookingService { @Autowired private SeatBookingRepository seatBookingRepository; @Autowired private TicketRepository ticketRepository; @Autowired private TariffClient tariffClient; @Autowired private CustomerClient customerClient; @Autowired private PaymentClient paymentClient; /** * Rezervace. * @param seatCode kód místa (např. 19A) * @param ticketId ID lístku */ @Transactional public void bookSeat(String seatCode, UUID ticketId) { var ticket = ticketRepository.findById(ticketId); //rezervujeme var seatBooking = new SeatBooking(seatCode, ticket.get().getFlightId(), ticketId, BookingStatus.BOOKED); seatBookingRepository.save(seatBooking); //najdeme základní tarif pro místo v letadle var basePrice = tariffClient.getBasePrice(ticket.get().getPlaneModel(), seatCode); //najdeme údaje o zákazníkovi Long userId = (Long) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); var userData = customerClient.getCustomer(userId); System.out.println("Nalezen uživatel " + userData.getFio() + " číslo dokumentu " + userData.getDocument()); var price = basePrice; if (userData.getTariff() == "PREMIUM") { //50% sleva price = basePrice * 0.5d; } if (userData.getTariff() == "ULTRA") { //20% sleva price = basePrice * 0.8d; } var invoice = new Invoice(price, ticketId, userId); //vystavíme fakturu paymentClient.sendInvoice(invoice); System.out.println("Faktura odeslána"); } @Data @Table("seat_booking") public class SeatBooking { @Column private String seatCode; @Column private UUID flightId; @Column private UUID ticketId; @Column private BookingStatus status; } public enum BookingStatus { BOOKED, PAID; }
Jakými způsoby můžeš zvýšit rychlost provádění této metody?
Jaké kroky podniknete, pokud při zvýšení zátěže systému se stanou zpoždění při provádění dotazů do databáze významnými?
Můžete vysvětlit, co se rozumí pod atomárním typem dat?
Jaké metody lze použít ke zvýšení rychlosti hledání v tabulce?
Můžete vysvětlit princip fungování pesimistického zámku a v čem se liší od jiné strategie zámku?
Můžete vysvětlit, jak je struktura dědičnosti výjimek v programovacím jazyce uspořádána?
Jak je nastavování a registrace Bean prováděna v rámci Spring Framework?
Vysvětlete koncept typu erasure a jeho hlavní účel v programování.
Existují operace, jejichž provádění je v rámci transakcí vyloučeno?