Python вопросы с собеседований
24.7K subscribers
508 photos
15 videos
17 files
403 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
🐳 Что если вам нужно запустить чужой (возможно небезопасный) код?

Представьте: вам прислали бинарник, Python-скрипт или npm-пакет, и его надо выполнить.
Вы не знаете, что внутри — а вдруг там rm -rf /, попытка выйти из контейнера, майнер или установка root-доступа?

🔥 Первый инстинкт: запустить в Docker. Кажется, контейнер спасёт?
⚠️ На самом деле — не всегда.


🛑 Docker ≠ песочница
Контейнеры по умолчанию не изолированы от ядра, сетей и сокетов хоста.
Даже простое docker run -it ubuntu запускает процесс с root-доступом внутри контейнера.

🛡️ Что делать, если код небезопасен:


# Запуск без root-доступа
docker run --user 1000:1000 my-image

# Только для чтения
docker run --read-only my-image

# Удалить все cap-привилегии ядра
docker run --cap-drop=ALL my-image

# Использовать seccomp-профиль
docker run --security-opt seccomp=default.json my-image

# Отключить сеть
docker run --network=none my-image


Также стоит:
• Настроить AppArmor / SELinux
• Запретить монтирование Docker сокета
• Ограничить доступ к /proc, /sys

💡 Вывод:
Docker — это удобный инструмент упаковки, но не синоним безопасной изоляции.
Если запускаете сторонний или user-generated код (плагины, CI-скрипты, sandbox-сервисы) — относитесь к нему как к потенциально опасному.

Безопасность — это не "чеклист", а постоянная практика.

#Docker #Security #Sandbox #DevOps #Isolation
This media is not supported in your browser
VIEW IN TELEGRAM
Что выведет этот Python код ? #junior #python

Задача для новичков.

s = set()
a = [1, 2, 3]
s.add(tuple(a))
print(s)


Списки изменяемы и не могут быть элементами множества, но кортежи — неизменяемы и хэшируемы, поэтому кортеж из списка успешно добавится во множество.
🐍 Задача для собеседования на Python

Условие:
def mystery(x, y):
if x == 0:
return y
else:
return mystery(x - 1, x + y)

result = mystery(3, 2)
print(result)

— Вопрос: что будет выведено в результате выполнения этого кода?

Варианты ответов:
А. 5
B. 8
C. 11
D. Ошибка рекурсии

Правильный ответ: B.

Пояснение:
Функция
mystery — это рекурсивная функция, которая накапливает сумму чисел от x до 1, прибавляя y в конце.

@python_job_interview
👨‍💻 Executing — как заглянуть внутрь работающего Python-кода. Необычная библиотека, которая позволяет во время выполнения программы определить, какой именно AST-узел выполняется в данный момент. Это может быть полезно для отладки, анализа кода или создания инструментов вроде умных traceback'ов.

Проект использует хитрый трюк с модификацией AST и наблюдением за изменениями в байт-коде, чтобы точно определить текущую операцию. Хотя функционал кажется узкоспециализированным, его уже используют в нескольких известных инструментах: stack_data, snoop и даже IPython для улучшенного вывода ошибок.

🤖 GitHub

@python_interview
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
📚 ArXiv Research Agent — отличный помощник для научных исследований.

Агент самостоятельно:
• Найдёт релевантные статьи с arXiv, bioRxiv, medRxiv и Semantic Scholar
• Проведёт полноценный обзор и поиск нужных материалов
• Покажет, что упущено, и предложит, что добавить
• Даст инсайты и цитаты из миллионов научных работ
• Генерирует готовые конспекты
И др.

Вскоре обещают добавить поддержку MCP.

🔜 Попробовать: https://www.alphaxiv.org/assistant

@ai_machinelearning_big_data


#agent #ArXiv #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 7 000+ упражнений на 76 языках программирования

Exercism — бесплатная платформа для прокачки навыков программирования с нуля. Каждый язык — отдельный путь, наполненный практическими задачами.

Главный плюс — обратная связь от опытных менторов. Ответы здесь не быстрые, зато по делу и без токсичности, как это бывает на Stack Overflow.

https://exercism.org/
🐍 Python-совет: ускоряй импорт и запуск с помощью `__main__` guard и lazy imports

Когда ты пишешь утилиту или CLI‑скрипт, важно не загружать всё сразу. Используй if __name__ == "__main__" + отложенный импорт, чтобы ускорить запуск и избежать лишней инициализации.

🔧 Пример:


# script.py

def main():
import argparse
import time

parser = argparse.ArgumentParser()
parser.add_argument("--sleep", type=int, default=1)
args = parser.parse_args()

print("Start sleeping...")
time.sleep(args.sleep)
print("Done.")

if __name__ == "__main__":
main()


📌 Почему это важно:

• Импорты происходят только при запуске, а не при импорте модуля из другого файла
• Снижается время запуска CLI-инструмента
• Уменьшается нагрузка при unit-тестировании, если main() не нужен
• Позволяет использовать файл как модуль и как скрипт

🛠️ Особенно эффективно при:
• больших CLI-инструментах (`argparse`, rich, pandas и др.)
• работе в средах, где startup time критичен (например, serverless)

🧠 Вывод: if __name__ == "__main__" + локальные импорты = чище, быстрее, гибче.
🐍 Хитрая задача для опытных Python-разработчиков
Почему этот код не работает как ожидается?


def magic():
return [lambda: i for i in range(5)]

funcs = magic()
results = [f() for f in funcs]
print(results)

На первый взгляд, ты ожидаешь результат:


[0, 1, 2, 3, 4]

Но на деле вывод будет:


[4, 4, 4, 4, 4]

🔍 Что пошло не так

lambda: i не захватывает значение i, а замыкается на саму переменную i, которая одна и та же для всех лямбд.
К моменту вызова всех функций i = 4 (последнее значение цикла), и все лямбды возвращают одно и то же.

Это классический пример late binding — лямбда "вспоминает" переменную, а не её значение в момент создания.

Как исправить

Способ 1: фиксируем значение i через аргумент по умолчанию


def magic():
return [lambda i=i: i for i in range(5)]

funcs = magic()
results = [f() for f in funcs]
print(results)


Теперь вывод:


[0, 1, 2, 3, 4]


Способ 2: functools.partial


from functools import partial

def f(x): return x
funcs = [partial(f, i) for i in range(5)]
results = [f() for f in funcs]
print(results)


🧠 Почему это важно

Такие баги встречаются:

- в колбэках и ивентах (например, при работе с GUI или CLI)

- в генерации функций внутри циклов
- в async-замыканиях и DSL-интерпретаторах
- в тестовых фреймворках, где создаются сценарии динамически

Понимание области видимости, замыканий и позднего связывания (late binding) — необходимый навык для confident-сеньора.

@python_interview
🐍 Python-совет: используй `functools.lru_cache` для ускорения "дорогих" функций

Если у тебя есть функция, результат которой зависит только от входных данных, — кешируй её! Это может ускорить программы в 10–1000 раз, особенно при рекурсии или повторяющихся запросах.

🔧 Пример:


from functools import lru_cache

@lru_cache(maxsize=128)
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

print(fib(100))


📌 Что делает lru_cache:
• сохраняет результаты вызова функции
• повторные вызовы с теми же аргументами → мгновенный возврат
maxsize ограничивает объём кэша (по принципу LRU — least recently used)

🔥 Без кеша fib(100) занимает минуты
С кешем — менее 1 секунды

🛠️ Применимо к:
• рекурсивным вычислениям
• функциям, вызывающим API
• любым дорогим операциям с неизменяемыми аргументами

🧠 Вывод: @lru_cache — это одна строка, которая превращает тяжёлую функцию в реактивную. Идеально для оптимизации без изменения логики.
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Теперь официально Google выпустили Gemini CLI - AI-агента для работы прямо в терминале

• Лёгкий и мощный инструмент для разработки в командной строке
• Работает на базе Gemini 2.5 Pro
• Код агента в открытом доступе (Apache 2.0)
• Поддержка контекста в 1 миллион токенов
• Бесплатный тариф: до 60 запросов в минуту и 1000 в день
Привязка к Google Search
• Поддержка плагинов и скриптов
• Интеграция с VS Code (Gemini Code Assist)

Запуск в cli: npx https://github.com/google-gemini/gemini-cli

🔜 Анонс: https://blog.google/technology/developers/introducing-gemini-cli-open-source-ai-agent/
🔜 Github: https://github.com/google-gemini/gemini-cli/

@ai_machinelearning_big_data

#AI #ML #agent #Google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как написать худший возможный Python-код

Иногда проще показать, как не надо, чем объяснять, как надо.
Вот список «правил», которые помогут вам гарантированно испортить любой Python-проект.

1. 🔒 Используйте непонятные имена переменных
Называйте переменные x, y, a, thing. Абстракция — залог путаницы.


def f(x, y, z=None):
a = x * 2
b = y + a if z else y - a
c = [i for i in range(a) if i % 2]
return sum(c) + b

2.🧠 Пихайте максимум логики в одну строку
Сложные тернарные выражения и вложенные list comprehension — всё в одной строке.


result = [x if x > 0 else (y if y < 0 else z) for x in data if x or y and not z]

3.⚠️ Используйте eval() и exec()
Это медленно, небезопасно и глупо — но зато эффектно.


eval("d['" + key + "']")


4.🔁 Переиспользуйте переменные с разными типами
Пусть одна переменная будет и строкой, и числом, и списком — динамическая типизация же!


value = "42"
value = int(value)
value = [value] * value

5.🌍 Используйте глобальные переменные
Изменяйте состояние приложения откуда угодно. Особенно изнутри функций.


counter = 0

def increment():
global counter
counter += 1

6.🔮 Используйте магические числа и строки
Без пояснений. Пусть коллеги гадают, почему именно 42 или "xyz".


if user.role == "xyz" and user.level > 42:
access_granted()

7.📏 Игнорируйте стиль и отступы
Никаких PEP8, никаких правил. Пиши, как хочешь.


def foo():print("start")
if True:
print("yes")
else:
print("no")

8.🧱 Копируйте код из Stack Overflow, не вникая
Ctrl+C — это тоже разработка.


def complex_logic(x):
return (lambda y: (lambda z: z**2)(y + 1))(x)

9.🧩 Придумывайте абстракции без надобности
Вместо простой функции — классы, фабрики и стратегии.


class HandlerFactory:
def get_handler(self):
class Handler:
def handle(self, x): return x
return Handler()


10. 💤 Добавляйте мёртвый код
Никогда не удаляй — вдруг пригодится. И пусть он грузится в каждый запуск.


def legacy_feature():
print("This feature is deprecated")
return
# нигде не вызывается


11.🔀 Не пишите документацию
Комментарии только мешают. Кто захочет — разберётся.


def a(x): return x+1


12.🧪 Пиши без тестов
Если код работает — зачем его проверять?


# Просто запускай и смотри глазами
process_user(data)


13. 🤖 Не используй AI и автодополнение
Только ручной кодинг, без подсказок. Ошибки — путь мастера.

🧠 Заключение

Все эти советы — примеры того, как не стоит писать код.
Если вы узнали себя — пора остановиться. Ведь Python задуман как язык, где важна читаемость, простота и явность.

"Beautiful is better than ugly.
Explicit is better than implicit.
Readability counts."
— The Zen of Python

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM