Kokius testavimo atvejus reikia apsvarstyti jungimo metodui? Kokias optimizacijas galima pridėti?
Kotlin
// rezervacija(sedynis_numeris, naudotojo_numeris) PostgreSQL Begin Transaction(read_commited) seat = select * from seats where id = seat_id for update if(seat == null || seat.status == "booked") rollback return error("Vieta nėra prieinama") insert into bookings (user_id, seat_id, status, created_at) values (user_id, ...) update seats set status = 'booked' where id = seat_id commit return success()
Kodėl Map'e raktas yra uždarymo skliaustas, o reikšmė atviroji? Kas pasikeistų, jei padarytume atvirkščiai? Kokia yra containsValue sudėtingumas lyginant su get pagal raktą?
/* PASIRINKIMAS kairė.K, kairė.V1, dešinė.V2 IŠ kairės PRISIJUNGIMAS dešinė ON kairė.K = dešinė.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> kairė, List<Pair<K, V2>> dešinė) { return null; } private static class Pair<A, B> { private A pirmas; private B antras; Pair(A pirmas, B antras) { this.pirmas = pirmas; this.antras = antras; } } private static class Triple<A, B, C> { private A pirmas; private B antras; private C trečias; Triple(A pirmas, B antras, C trečias) { this.pirmas = pirmas; this.antras = antras; this.trečias = trečias; } }
/*Duotas eilutės, reikalinga įgyvendinti funkciją, kuri patikrintų skliaustų teisingumą. Kiekvienas atviras skliaustas turi atitikti uždarą skliaustą. Atviri ir uždaryti skliaustai turi būti teisinga tvarka. Skliaustų tipai: "{", "}", "(", ")", "[", "]". Įvestis: "([]){}[(()())()]" Rezultatas: true Įvestis: "[(])" Rezultatas: false Kadangi 2 ir 3 skliaustai yra neteisingai nurodyti, uždarymas ']' pasirodo anksčiau nei uždarymas '(' */ public boolean check(String s){ Deque<Character> stack = new ArrayDeque<>(); Map<Character, Character> map = Map.of( ')', '(', ']', '[', '}', '{' ); // ((( for( char c : s.toCharArray()){ if(map.containsValue(c)){ stack.push(c); } else if(map.containsKey(c)){ if( stack.isEmpty() || stack.pop() != map.get(c)){ return false; } } } return stack.isEmpty(); }