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

  Рет қаралды 2,837

Python собеседования

Python собеседования

Жыл бұрын

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

Пікірлер: 46
@python_interview
@python_interview Жыл бұрын
Как вам такой формат с подборками? Или лучше стандартные вопросы с собесов выкладывать?)
@gvadellupa9335
@gvadellupa9335 Жыл бұрын
Хороший формат, в паре с теорией полезно
@xacan191182
@xacan191182 Жыл бұрын
супер
@user-uo7ko7ej9x
@user-uo7ko7ej9x Жыл бұрын
Супер, и то и то заходит!
@nameother6213
@nameother6213 Жыл бұрын
Согласен с другими комментаторами. Хороший формат. Тоже нужен. Спасибо за видео.
@yourbehaviour7027
@yourbehaviour7027 Жыл бұрын
Мне нравиться я думаю всем это полезно . Можно миксовать если есть материал для этого . Спасибо .
@IvanIvanov-xd2rb
@IvanIvanov-xd2rb 7 ай бұрын
Парень ты просто красавчик. Реальных собесов вроде ни у кого нет , кроме тебя . спасибо .
@rostislavk3230
@rostislavk3230 6 ай бұрын
спасибо что выкладываешь)
@artemshumeiko
@artemshumeiko Жыл бұрын
Прикольные задачи. Спасибо
@bujik
@bujik Жыл бұрын
Круто, много интересного
@dasshrs
@dasshrs 5 ай бұрын
Предлагаю такой подход к первой задаче (сделал более адванст версию) У нас есть фабрика, которая может сделать декоратор под разные лимиты. 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
@VintHeXer
@VintHeXer 2 ай бұрын
Я уже кидал год назад задачку от Сбера, привожу один из ответов, который на данный момент не был описан. "# Задача: найти 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. Так что необходимо будет хотя бы обозначить этот момент при прохождении интервью
@zurababduev1809
@zurababduev1809 Жыл бұрын
классные задачи
@HeXataB
@HeXataB Жыл бұрын
Все задачи очень простые, но как их решать именно на собесе загадка)
@gvadellupa9335
@gvadellupa9335 Жыл бұрын
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 Жыл бұрын
жееесть, лучше не пиши так на собесах)
@python_interview
@python_interview Жыл бұрын
@@nda861 почему?)
@gvadellupa9335
@gvadellupa9335 Жыл бұрын
@@nda861 тот же вопрос, почему?) если распишешь конструктивно, буду благодарен
@Feoness
@Feoness Жыл бұрын
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 минут, стронг мидл
@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 ну я несколько месяцев прибавлял как-то к опыту, чтобы солиднее выглядело)
@user-xg8qt8ky1s
@user-xg8qt8ky1s Жыл бұрын
Полчаса веселился когда просматривал мучения с первой задачей :)
@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
@VintHeXer
@VintHeXer Жыл бұрын
Закину сюда задачку от Сбера на будущие поколения: # Задача: найти 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 2 ай бұрын
лучше уж поздно, чем никогда) 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 Сильно затянута постановка задачи. И после встречного вопроса ещё раз то же самое. Пять минут формулировать вопрос это как то много... ;) Не хватает живости диалога
Собеседование на позицию Backend Developer Python + Django Middle #2
40:26
Python собеседования
Рет қаралды 12 М.
Pokey pokey 🤣🥰❤️ #demariki
00:26
Demariki
Рет қаралды 8 МЛН
Be kind🤝
00:22
ISSEI / いっせい
Рет қаралды 21 МЛН
I Need Your Help..
00:33
Stokes Twins
Рет қаралды 145 МЛН
Программисты разучились оптимизировать
23:43
Азы программирования в 1С за 3 часа
3:46:49
IRONSKILLS - Курсы по 1С
Рет қаралды 3,3 МЛН
Собеседование на позицию Senior Python Developer 5000$ #12
21:18
Python собеседования
Рет қаралды 2,9 М.
Kubernetes 101 workshop - complete hands-on
3:56:03
Kubesimplify
Рет қаралды 1,6 МЛН
Собеседование на позицию Backend Developer Python Middle #5
36:26
Python собеседования
Рет қаралды 5 М.
Дальний Восток Слив заданий (1 часть) от Абеля ПРОФИЛЬ ЕГЭ 2024
15:47
АБЕЛЬ ЕГЭ Математика Физика
Рет қаралды 6 М.