Jakie masz doświadczenie w dziedzinie rozwoju oprogramowania?
Python
Czy masz doświadczenie w tworzeniu lub korzystaniu z procesów asynchronicznych?
Kiedy ostatni raz rozwiązywałeś zadania algorytmiczne do ćwiczeń lub projektów?
# Bankomat, który jest ładowany kasetami z banknotami, z naszą aplikacją na pokładzie # powinien umieć wydawać banknoty na zadany kwotę lub odpowiadać odmową # Przy wydawaniu banknotów, są one odliczane od salda bankomatu. # Dozwolone nominały: 50R, 100R, 500R, 1000R, 5000R. class ATM: pass # miejsce na kod # Urządzenie bankomatu: # - pieniądze są umieszczone w kasetach wewnątrz bankomatu, które są ładowane przez inkasenta i uzupełniane; # - w każdej kasecie znajdują się banknoty swojego nominału; # - bankomat może policzyć pozostałe banknoty w kasetach, ale ta operacja zajmuje dużo czasu - należy ją wywoływać jak najrzadziej. # API do interakcji z hardwarem bankomatu. # interfejs SDK może być zmieniany/rozszerzany za porozumieniem stron, jeśli jest to konieczne class SDK(ABC): @abstractmethod def count_banknotes(self, banknote: int) -> int: pass @abstractmethod def move_banknote_to_dispenser(self, banknote: int, count: int) -> None: pass @abstractmethod def open_dispenser(self) -> None: pass
Czy możesz ocenić złożoność tego rozwiązania (pod względem czasu i pamięci)? I dlaczego złożoność nie jest O(n^2)?
Jak zaimplementować prosty mechanizm blokady (lock) w pamięci w celu ochrony przed dostępem współbieżnym bez użycia zewnętrznych zależności?
class ATM(SKD): def __init__(self, atm_api: "SKD"): self.atm_api: SKD = atm_api self.bills_count: dict[int:int] = {bill: self.atm_api.count_banknotes(bill) for bill in BILLS} def withdraw(self, amount: int) -> bool: bills_plan: dict[int: int] = {} remaining = amount for bill in BILLS: available = self.bills_count[bill] take = min(remaining // bill, available) if take > 0: bills_plan[bill] = take remaining -= take * bill if remaining != 0: return False bills_count_const = {50: 0, 100: 2, 500: 0, 1000: 0, ...}, expected = True @pytest.mark.parametrize( "bills_count_const,expected", [ ({5000: 0, 1000: 0, 500: 0, 100: 0, 50: 0}, False), ({5000: 100, 1000: 100, 500: 100, 100: 100, 50: 100}, True), ({5000: 1, 1000: 0, 500: 0, 100: 2, 50: 0}, True) ] ) def test_false(bills_count_const, expected): atm = ATM(FakeSDK()) atm.bills_count = bills_count_const amount = 1000 res = atm.withdraw(amount) assert res == expected
# OneEditApart("kot", "pies") -> fałsz # OneEditApart("kot", "koty") -> prawda # OneEditApart("kot", "cięcie") -> prawda # OneEditApart("kot", "cast") -> prawda # OneEditApart("kot", "na") -> prawda # OneEditApart("kot", "akcje") -> fałsz def OneEditApart(s1, s2) -> bool:
Czy masz doświadczenie w wsparciu lub rozwoju systemów rozproszonych?
Kandydat prosi o wyjaśnienie proponowanego rozwiązania (dlaczego trzeba porównywać iloczyny minimalnych i maksymalnych par).
Na jakim etapie jest obecnie Twoje poszukiwanie pracy lub projektu?
Czy masz doświadczenie w tworzeniu i utrzymaniu systemów opartych na architekturach rozproszonych?
W jakich krajach rozważasz opcje pracy lub współpracy?
Czy masz do nas pytania dotyczące roli lub firmy?
Jaki był maksymalny rozmiar danych, które kiedykolwiek przechowywałeś lub przetwarzałeś w swojej praktyce?
Osoba przeprowadzająca wywiad wyjaśnia, czy kandydat widzi warunek zadania.
```python from collections import Counter def min_s(a: str, s: str) -> str: need = set(a) window = Counter() res = "" c = 0 left = 0 best_len = float('inf') for right, char in enumerate(s): if char in need and \ window[char] += 1 if window[char] == 1: c += 1 while c == len(need): if right - left + 1 < best_len: res = s[left:right + 1] best_len = right - left + 1 if s[left] in need: window[s[left]] -= 1 if window[s[left]] == 0: c -= 1 left += 1 return res ```
Jak przedstawilibyśmy graf, którego potrzebujemy do tego zadania, i jak uzyskać z niego odpowiedź (trasę)?
# Skomplikowanie # Pojawiła się nowa funkcja produktu: rezerwacja pieniędzy przez aplikację mobilną. # W tym celu w klasie ATM należy dodać nową metodę reserve(amount). Należy również uwzględnić możliwość wystąpienia HardwareError w metodach SDK.