რომელ ტესტ შემთხვევებს უნდა განვიხილოთ join მეთოდისთვის? რა ოპტიმიზაციებს შეიძლება დავამატოთ?
Kotlin
// ბუკინგი(სხედილი_ნომერი, მომხმარებელი_ნომერი) PostgreSQL Begin Transaction(read_commited) seat = select * from seats where id = seat_id for update if(seat == null || seat.status == "booked") rollback return error("სკამი ხელმისაწვდომი არაა") 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()
რატომ არის Map-ში გასაღები დახურვის კოვზი, ხოლო მნიშვნელობა გახსნის? რა შეიცვლება, თუ საპირისპიროდ გავაკეთებთ? რა არის containsValue-ის სირთულე შედარებით get-ის მიხედვით გასაღზე?
/* არჩევანი მარცხენა.K, მარცხენა.V1, მარჯვენა.V2 მარცხნიდან შეუერთეთ მარჯვენა ON მარცხენა.K = მარჯვენა.K; */ public <K extends Comparable<K>, V1, V2> List<Triple<K, V1, V2>> join(List<Pair<K, V1>> მარცხენა, List<Pair<K, V2>> მარჯვენა) { return null; } private static class Pair<A, B> { private A პირველი; private B მეორე; Pair(A პირველი, B მეორე) { this.პირველი = პირველი; this.მეორე = მეორე; } } private static class Triple<A, B, C> { private A პირველი; private B მეორე; private C მესამე; Triple(A პირველი, B მეორე, C მესამე) { this.პირველი = პირველი; this.მეორე = მეორე; this.მესამე = მესამე; } }
/*Տրված է տող, անհրաժեշտ է իրականացնել ֆունկցիա փակագծերի նշման ճիշտությունը ստուգելու համար: Յուրաքանչյուր բացվող փակագիծ պետք է համապատասխան լինի փակվող փակագծին: Բացվող և փակվող փակագծերը պետք է լինեն ճիշտ հերթականությամբ: Փակագծերի տեսակները: "{", "}", "(", ")", "[", "]". Ներմուծում: "([]){}[(()())()]" Արդյունք: ճշմարիտ Ներմուծում: "[(])" Արդյունք: կեղծ Քանի որ 2-րդ և 3-րդ փակագծերը սխալ են նշված, փակվող ']'-ը հայտնվում է նախքան փակվող '(' */ 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(); }