შენ გაქვს გამოცდილება ასინქრონული პროცესების განვითარების ან გამოყენების სფეროში?
Python
რამდენი გამოცდილება გაქვთ პროგრამული უზრუნველყოფის განვითარების სფეროში?
როდის იყავით ბოლო ჯერ, როდესაც გადაწყვეტდით ალგორითმული ამოცანების პრაქტიკის ან პროექტებისთვის?
როგორ განვახორციელოთ მარტივი ბლოკირების (lock) მექანიზმი მეხსიერებაში კონკურენტული წვდომისგან დაცვისთვის, გარეგანი დამოკიდებულებების გამოყენების გარეშე?
შეგიძლიათ შეაფასოთ ამ გადაწყვეტილების სირთულე (დროისა და მეხსიერების თვალსაზრისით)? და რატომ არ არის სირთულე O(n^2)?
# ბანკომატი, რომელიც იტვირთება კასეტებით ბილეთებით, ჩვენი აპლიკაციით ბორტზე # უნდა შეძლოს ბილეთების გამოტანა მითითებული თანხისთვის ან უარის მიცემა # ბილეთების გამოტანის დროს, ისინი ამოღებულია ბანკომატის ბალანსიდან. # დაშვებული ნომინალები: 50R, 100R, 500R, 1000R, 5000R. class ATM: pass # კოდის ადგილი # ბანკომატის მოწყობილობა: # - ფული განთავსებულია კასეტებში ბანკომატში, რომლებიც იტვირთება ინკასანტის მიერ და განახლდება; # - თითოეულ კასეტაში მდებარეობს თავისი ნომინალის ბილეთები; # - ბანკომატი შეუძლია ითვალოს დარჩენილი ბილეთები კასეტებში, მაგრამ ეს ოპერაცია გრძელია - უნდა იძახოს რაც შეიძლება იშვიათად. # API ბანკომატის აპარატურისთან ურთიერთქმედებისთვის: # SDK ინტერფეისი შეიძლება შეიცვალოს/გაფართოვდეს მხარეების შეთანხმებით, თუ ეს აუცილებელია 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
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("კატა", "ძაღლი") -> არასწორია # OneEditApart("კატა", "კატები") -> სწორი # OneEditApart("კატა", "გაჭრა") -> სწორი # OneEditApart("კატა", "კასტელი") -> სწორი # OneEditApart("კატა", "მ") -> სწორი # OneEditApart("კატა", "მოქმედებები") -> არასწორია def OneEditApart(s1, s2) -> bool:
გაქვს გამოცდილება განაწილებული სისტემების მხარდაჭერაში ან განვითარების სფეროში?
რომელ ქვეყნებში განიხილავთ სამუშაო ან თანამშრომლობის ვარიანტებს?
სადაც თქვენი სამუშაოს ან პროექტის ძიება ახლა მდებარეობს?
გაქვს გამოცდილება განაწილებული არქიტექტურებზე დაფუძნებული სისტემების შექმნასა და მომსახურებაში?
კანდიდატმა სთხოვა შეთავაზებული გადაწყვეტილების ახსნა (რატომ არის საჭირო მინიმალური და მაქსიმალური წყვილების გამრავლების შედარება).
შეგიძლიათ ჩვენთან როლთან ან კომპანიასთან დაკავშირებით კითხვები გქონდეთ?
ინტერვიურმა განმარტა, ხედავს თუ არა კანდიდატი ამოცანის პირობას.
თქვენი პრაქტიკის განმავლობაში რა იყო მაქსიმალური მონაცემების ზომა, რომელსაც ოდესმე შეინახეთ ან დამუშავეთ?
```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 ```
# სირთულე # ახლა გვაქვს ახალი პროდუქტის ფუნქცია: თანხის განთავსება მობილური აპლიკაციის საშუალებით. # ამისთვის, ATM კლასში უნდა დავამატოთ ახალი მეთოდი reserve(amount). ასევე უნდა გავითვალისწინოთ HardwareError-ის შესაძლებლობა SDK მეთოდებში.
როგორ წარმოვაჩენთ ამ დავისთვის საჭირო გრაფს და როგორ მივიღებთ პასუხს (მარშრუტს) მასიდან?