Подборка практических задач с собеседований #1

Поделиться
HTML-код
  • Опубликовано: 6 янв 2023
  • Небольшая подборка лайф-коддинга с различных собеседований на позиции middle/senior python developer.
    00:00 - throttling декоратор
    32:57 - retry декоратор
    42:56 - сжатие строк
    51:40 - multiarg декоратор

Комментарии • 47

  • @python_interview
    @python_interview  Год назад +25

    Как вам такой формат с подборками? Или лучше стандартные вопросы с собесов выкладывать?)

    • @gvadellupa9335
      @gvadellupa9335 Год назад +3

      Хороший формат, в паре с теорией полезно

    • @xacan191182
      @xacan191182 Год назад +1

      супер

    • @user-uo7ko7ej9x
      @user-uo7ko7ej9x Год назад

      Супер, и то и то заходит!

    • @nameother6213
      @nameother6213 Год назад

      Согласен с другими комментаторами. Хороший формат. Тоже нужен.
      Спасибо за видео.

    • @yourbehaviour7027
      @yourbehaviour7027 Год назад

      Мне нравиться я думаю всем это полезно . Можно миксовать если есть материал для этого . Спасибо .

  • @IvanIvanov-xd2rb
    @IvanIvanov-xd2rb 7 месяцев назад +2

    Парень ты просто красавчик. Реальных собесов вроде ни у кого нет , кроме тебя . спасибо .

  • @imadna5810
    @imadna5810 4 дня назад

    это вообще нормально что я все эти задачи на джуна решал

  • @rostislavk3230
    @rostislavk3230 6 месяцев назад +1

    спасибо что выкладываешь)

  • @artemshumeiko
    @artemshumeiko Год назад

    Прикольные задачи. Спасибо

  • @bujik
    @bujik Год назад

    Круто, много интересного

  • @zurababduev1809
    @zurababduev1809 Год назад

    классные задачи

  • @dasshrs
    @dasshrs 5 месяцев назад +1

    Предлагаю такой подход к первой задаче (сделал более адванст версию)
    У нас есть фабрика, которая может сделать декоратор под разные лимиты.
    def limit_function_fabric(limit):
    def limit_function(func):
    times = []
    def wrapper():
    nonlocal times
    if len(times)>=limit:
    # Clear extra items (no need store more than limit)
    times = times[-limit:]
    if time.time()-times[-limit] < 1:
    print('Skip function')
    return
    func()
    times.append(time.time())
    return wrapper
    return limit_function
    @limit_function_fabric(4)
    def func():
    print('Executed')
    func()
    func()
    func()
    func()
    func()
    func()
    time.sleep(2)
    func()
    func()
    func()
    func()

    • @user-io2kp7jm6z
      @user-io2kp7jm6z 4 месяца назад

      def dec_f(func: Callable) -> Callable:
      count = 0
      last_call = time.time()
      def inner_func(*args, **kwargs):
      nonlocal count
      nonlocal last_call
      if time.time() - last_call < 3 and count >= 3:
      print(f'Вызов функции пропущен, {func.__name__}')
      return
      func(*args, **kwargs)
      count = count + 1 if count < 3 else 1
      last_call = time.time()
      return inner_func

  • @HeXataB
    @HeXataB Год назад +3

    Все задачи очень простые, но как их решать именно на собесе загадка)

  • @VintHeXer
    @VintHeXer 3 месяца назад

    Я уже кидал год назад задачку от Сбера, привожу один из ответов, который на данный момент не был описан. "# Задача: найти 1 уникальное значение, дубликатов всегда по 2: values = [1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6]"
    Как многие догадались, можно и через dict, counter, дополнительные структурки для временного хранения (в тот же список добавлять элемент, если его в списке нет, убирать если есть), и всё идёт к вопросу алгоритмической сложности. Сам виноват с условием, что не указал про элементы - исключительно цифры (со строками не сработает)
    Один из ответов - использовать xor (^, крышечку):
    values = [1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6]
    def find_unique(values: list) -> int:
    result = 0
    for elem in values:
    result = result ^ elem
    return result
    print(find_unique(values))
    Прикол данного решения заключается в том, что написав такой ответ можно показать себя "шибко умным" в контексте собеса на определённую должность, и из-за этого не пройти, т.к. написанный вами код должен понимать другой разработчик, а не все вспомнят про XOR. Так что необходимо будет хотя бы обозначить этот момент при прохождении интервью

  • @gvadellupa9335
    @gvadellupa9335 Год назад +1

    from datetime import datetime
    def time_required(func):
    calls = []
    def wrapper(*args, **kwargs):
    current_call = datetime.now()
    if len(calls) >= 3 and (current_call - calls[-3]).seconds < 1:
    print('skip')
    return
    del calls[:-2]
    calls.append(current_call)
    func(*args, **kwargs)
    return wrapper
    Первую как-то так накидал. Надо, конечно, нормально тестить, но вродь работает :D

    • @nda861
      @nda861 Год назад +2

      жееесть, лучше не пиши так на собесах)

    • @python_interview
      @python_interview  Год назад +1

      @@nda861 почему?)

    • @gvadellupa9335
      @gvadellupa9335 Год назад +1

      @@nda861 тот же вопрос, почему?)
      если распишешь конструктивно, буду благодарен

    • @Feoness
      @Feoness Год назад +1

      def throttle(fn):
      stack = [0, 0, 0]
      def wrapper(*args, **kwargs):
      if (time.time() - stack[0]) < 1:
      return
      fn(*args, **kwargs)
      stack.pop(0)
      stack.append(time.time())
      return wrapper
      Мне кажется, так по-красивее будет, не считая .pop(0) + .append(), возможно что-то более лаконичное есть
      Но это я вне собеседования Лев Толстой, а на собеседовании поплавился бы точно также)
      за 10 минут, стронг мидл

  • @user-xg8qt8ky1s
    @user-xg8qt8ky1s Год назад +1

    Полчаса веселился когда просматривал мучения с первой задачей :)

    • @user-xg8qt8ky1s
      @user-xg8qt8ky1s Год назад

      Вот моё решение, если кому интересно :)
      import time
      INTERVAL_TIME = 0.34
      def foo():
      if time.time() - foo.time_call > INTERVAL_TIME:
      print("...")
      foo.time_call = time.time()
      foo.time_call = time.time()

    • @python_interview
      @python_interview  Год назад

      @@user-xg8qt8ky1s Если я правильно понял вашу идею, то во-первых, там наверное должен быть знак меньше, а во-вторых, вроде будет немного не то, что требуется по условию. Получается у вас ограничение на вызов функции раз в 1/3 секунды? Но мы же можем за 0.01 вызвать ее хоть все 3 раза, главное чтобы 4 вызов в течение секунды не прошел)

    • @user-xg8qt8ky1s
      @user-xg8qt8ky1s Год назад

      @@python_interview Знак правильный. По условию меня "биржа" не должна забанить. И сделаю я для этого обёртку над функцией или нет. Кстати я бы на месте собеседующего поставил бы тебе большой минус за использование декоратора ;)

    • @Lelouch-
      @Lelouch- 8 месяцев назад

      ​@@user-xg8qt8ky1sрешение не оптимальное т.к. даже при возможности за долю секунды выполнить функцию 3 раза мы заставляем ждать все вызовы 0.3 секунды. Во вторых чем тут декоратор вас не устроил если есть кейс того что сервис принимает 3 вызова в секунду то возможно и на другие функции пригодится декоратор к тому же собеседующий уточнил что лезть в основной код функции не хочется. если интересует моё решение то вот декоратор
      def throttle(func):
      stack = [time.time(), time.time(), time.time()]
      def inner(*args, **kwargs):
      if stack[0] < time.time()-1:
      func(*args, **kwargs)
      del stack[0]
      stack.append(time.time())
      else:
      print('throttle')
      return inner

  • @quansumonner
    @quansumonner 5 месяцев назад

    Извените, Я бы хотел узнать ваше мнение.
    Как вы относитесь к накрутки опыта в разработке?
    Если другие варианты?
    У меня сейчас 2 резюме и единственное, что в них различается, это количество опыта, но на одном 2 отлика (о опыта), а на другом 26 (1.6 опыта).

    • @python_interview
      @python_interview  5 месяцев назад

      Зависит от ситуации. Если у тебя год опыта, но знаний на 3 года, то не будет ничего плохого, если ты эти 2 года накрутишь, чтобы пройти отбор в лице HR. Если ты знаешь больше своего опыта, то работодатель не расстроится)
      Другое дело, если знаний на 1 год, а пишешь, что опыт 5 лет. Тогда тут тебя раскроют на собеседовании, и получится, что зря потратил время интервьювера.

    • @quansumonner
      @quansumonner 5 месяцев назад

      @@python_interview спасибо за ответ. Я не хочу накручивать более 2 лет, это не очень:)
      Я просто хочу сделать своё резюме, где 1.6 - основным и подаваться по нему. Не очень кайфово, когда проходишь интвью во 'фейку', а по реальному тупо не зовут.
      Как вы считаете это можно сделать?)
      Извените за обилие текса. Спасибо!

    • @python_interview
      @python_interview  5 месяцев назад

      @@quansumonner отчаянные времена требуют отчаянных мер) не вижу в этом чего-то криминального, но и не мне судить

    • @quansumonner
      @quansumonner 5 месяцев назад

      @@python_interview Cпасибо, мне действильно было это интересно,
      Последний вопрос, вы бы так сделали?

    • @python_interview
      @python_interview  5 месяцев назад

      @@quansumonner ну я несколько месяцев прибавлял как-то к опыту, чтобы солиднее выглядело)

  • @VintHeXer
    @VintHeXer Год назад +2

    Закину сюда задачку от Сбера на будущие поколения:
    # Задача: найти 1 уникальное значение, дубликатов всегда по 2
    values = [1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6]
    def find_unique(values: list) -> int:
    pass
    print(find_unique(values))

    • @python_interview
      @python_interview  Год назад

      Я бы через Counter решил

    • @snobou12
      @snobou12 Год назад

      @@python_interview Что если в словарь добавлять ключом которого будет 2:2, 1:2... 4:1, найти ключ значение которого 1?

    • @python_interview
      @python_interview  Год назад

      @@snobou12 цикл по d.items() и проверка значений?

    • @HeXataB
      @HeXataB Год назад

      reduce по исключающему или, только как до этого догадаться во время собеса если изначально не знать). Еще по наркомании можно отсортировать список и итерироваться беря по два элемента их сравнивая. Проблема алгоритмических задач - не знаешь( не саму задачу, а фишку помогающую ее решить: черепаха-заяц, метод двух указателей и т.д.) не решишь, они на знание а не логику.

    • @KKholin
      @KKholin 3 месяца назад

      лучше уж поздно, чем никогда)
      values = [1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6]
      def find_unique(values: list) -> int:
      d = {}
      for i in values:
      if i in d:
      d[i] += 1
      else:
      d[i] = 1
      for k, v in d.items():
      if v == 1:
      return k
      print(find_unique(values))
      Скорость кода o(n), использованы хэш-таблицы, сбер явно оценит))

  • @chasubavil
    @chasubavil Год назад

    2:15 Сильно затянута постановка задачи. И после встречного вопроса ещё раз то же самое. Пять минут формулировать вопрос это как то много... ;) Не хватает живости диалога