Sobes.tech

Python

Vai šobrīd jūs varat strādāt savā pašreizējā uzņēmumā?

Intern — Junior
141

# Bankomāts, kas tiek uzpildīts ar kasetēm ar banknotiem, ar mūsu lietotni uz klāja # tam jāspēj izsniegt banknotes par norādīto summu vai atbildēt ar atteikumu # Izsniedzot banknotes, tās tiek atskaitītas no bankomāta bilances. # Atļautie nominālvērtības: 50R, 100R, 500R, 1000R, 5000R. class ATM: pass # vieta kodam # Bankomāta iekārta: # - nauda atrodas kasetēs iekšā bankomatā, kuras ielādē inspektors un papildina; # - katrā kasetē ir banknotes ar savu nominālvērtību; # - bankomāts var saskaitīt atlikušās banknotes kasetēs, bet šī operācija aizņem ilgu laiku - to vajadzētu izsaukt pēc iespējas retāk. # API saskarne bankomāta aparatūrai: # SDK saskarne var tikt mainīta/paplašināta pēc pušu vienošanās, ja tas ir nepieciešams 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

Kad jūs pēdējo reizi risinājāt algoritmiskas uzdevumus praksei vai projektiem?

Junior — Middle
140

Kā īstenot vienkāršu bloķēšanas (lock) mehānismu atmiņā, lai aizsargātu pret konkurējošu piekļuvi bez ārējām atkarībām?

139

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

139

Vai vari novērtēt šī risinājuma sarežģītību (laikā un atmiņā)? Un kāpēc sarežģītība nav O(n^2)?

139

Kādās valstīs apsverat darba vai sadarbības iespējas?

Junior — Middle
137

# OneEditApart("kaķis", "suņš") -> nepareizi # OneEditApart("kaķis", "kaķi") -> pareizi # OneEditApart("kaķis", "griešana") -> pareizi # OneEditApart("kaķis", "cietoksnis") -> pareizi # OneEditApart("kaķis", "uz") -> pareizi # OneEditApart("kaķis", "darbības") -> nepareizi def OneEditApart(s1, s2) -> bool:

137

Kurā posmā šobrīd ir jūsu darba vai projekta meklējumi?

Junior — Middle
137

Kandidāts lūdz paskaidrot piedāvāto risinājumu (kāpēc ir nepieciešams salīdzināt minimālo un maksimālo pāru reizinājumus).

135

Vai jums ir pieredze sistēmu izveidē un uzturēšanā, kas balstītas uz izplatītām arhitektūrām?

Junior — Middle
135

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

Intervijas veicējs precizē, vai kandidāts redz uzdevuma nosacījumu.

133

Vai jums ir pieredze sadalītu sistēmu atbalstē vai izstrādē?

132

Kāda bija maksimālā datu apjoma, ko jūs kādreiz esat glabājis vai apstrādājis savā praksē?

Junior — Middle
132

# Sarežģītība # Tagad mums ir jauna produkta funkcija: naudas rezervēšana caur mobilo lietotni. # Tam nepieciešams pievienot jaunu metodi reserve(amount) ATM klasē. Tāpat jāņem vērā HardwareError iespēja SDK metodēs.

129

Kā mēs attēlotu grafiku, kas mums nepieciešams šiai uzdevumam, un kā no tā iegūt atbildi (maršrutu)?

128
/5