Sobes.tech

Python

Kiedy ostatni raz rozwiązywałeś zadania algorytmiczne do ćwiczeń lub projektów?

Junior — Middle
141

Czy obecnie możesz pracować w swojej obecnej firmie?

Intern — Junior
141

# 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

140

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)?

140

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?

140

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

140

# 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:

138

Czy masz doświadczenie w wsparciu lub rozwoju systemów rozproszonych?

138

Kandydat prosi o wyjaśnienie proponowanego rozwiązania (dlaczego trzeba porównywać iloczyny minimalnych i maksymalnych par).

137

Na jakim etapie jest obecnie Twoje poszukiwanie pracy lub projektu?

Junior — Middle
137

Czy masz doświadczenie w tworzeniu i utrzymaniu systemów opartych na architekturach rozproszonych?

Junior — Middle
137

W jakich krajach rozważasz opcje pracy lub współpracy?

Junior — Middle
137

Jaki był maksymalny rozmiar danych, które kiedykolwiek przechowywałeś lub przetwarzałeś w swojej praktyce?

Junior — Middle
134

Osoba przeprowadzająca wywiad wyjaśnia, czy kandydat widzi warunek zadania.

133

```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 ```

133

Jak przedstawilibyśmy graf, którego potrzebujemy do tego zadania, i jak uzyskać z niego odpowiedź (trasę)?

129

# 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.

129
/5