es
Feedback
Python вопросы с собеседований

Python вопросы с собеседований

Ir al canal en Telegram

Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd

Mostrar más

📈 Análisis del canal de Telegram Python вопросы с собеседований

El canal Python вопросы с собеседований (@python_job_interview) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 24 967 suscriptores, ocupando la posición 5 488 en la categoría Tecnologías y Aplicaciones y el puesto 26 804 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 24 967 suscriptores.

Según los últimos datos del 05 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -153, y en las últimas 24 horas de -5, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 6.12%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 3.05% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 527 visualizaciones. En el primer día suele acumular 762 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 8.
  • Intereses temáticos: El contenido se centra en temas clave como github, api, собеседование, git, docker.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 06 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

24 967
Suscriptores
-524 horas
-437 días
-15330 días
Archivo de publicaciones
🐍 Новая функция в Python 3.14: шаблонные строки — необходимость или излишняя сложность? Python 3.14 готовит к выходу новую возможность — шаблонные строки (template strings, или t-строки), предложенные в PEP 750. Несмотря на интересный замысел, эта функция уже вызвала горячие споры в сообществе разработчиков. Давайте разберёмся, что это и зачем нужно. Что такое t-строки? T-строки — это новый способ форматирования строк, внешне похожий на f-строки. Принцип прост: добавляем префикс t перед строкой, например:

t"Привет, {name}!"
Но ключевое отличие: вместо немедленного преобразования переменных в строку, как это делает f-строка, t-строка создаёт объект Template, который можно обработать позже. Это позволяет, например, безопасно подставлять пользовательские данные, снижая риск атак (XSS, SQL-инъекции и др.). Пример использования:

from string.templatelib import Template

user_input = "<script>alert('XSS')</script>"
template = t"<p>{user_input}</p>"

# Предположим, функция html() экранирует опасные символы
safe_output = html(template)
Зачем это нужно? Идея проста: обеспечить безопасность по умолчанию при работе с внешними данными. Сегодня f-строки невероятно удобны, но могут стать причиной уязвимостей, если не учитывать контекст. Пример:

# Опасный подход с f-строкой
query = f"SELECT * FROM users WHERE name = '{user_input}'"
С t-строками можно заранее создать шаблон и безопасно вставить данные позже, минимизируя риски. Почему мнения разделились? Многие разработчики задаются вопросом: зачем ещё один способ форматирования строк, если уже есть: - старые добрые `%`-форматирование, - метод .format(), - f-строки, - и сторонние шаблонизаторы вроде Jinja2. Некоторые опасаются, что добавление нового синтаксиса лишь усложнит язык без серьёзной необходимости. Сторонники t-строк, однако, видят их потенциал в упрощении безопасной работы с текстом прямо в стандартной библиотеке Python. Заключение T-строки — это попытка добавить в Python инструмент, который обеспечит безопасность шаблонов без привлечения сторонних библиотек. Будет ли это востребовано или останется малоиспользуемой функцией? Время покажет. 🔗 Полное описание: [PEP 750](https://peps.python.org/pep-0750/) А как ты относишься к новым t-строкам? 💬

📝 Как составить резюме, чтобы попасть в Magnificent 7: анализ кейса Недавно инженер поделился своим резюме, которое помогло
📝 Как составить резюме, чтобы попасть в Magnificent 7: анализ кейса Недавно инженер поделился своим резюме, которое помогло ему получить предложение работы от одной из rjvgfybb Magnificent 7 (Apple, Microsoft, Google, Amazon, Meta, Nvidia, Tesla). Magnificent 7 (в переводе — «Великолепная семёрка») — это современное неофициальное название семи крупнейших и самых влиятельных технологических компаний США, которые лидируют на фондовом рынке, в инновациях и в масштабе бизнеса. Разберём, что сделало его резюме успешным и чему можно научиться. 📌 Главные выводы из резюме: 1. Фокус на достижениях, а не обязанностях. Многие кандидаты в резюме просто перечисляют, *что они делали*, например: - “Разрабатывал API” - “Поддерживал базу данных” - “Писал скрипты для автоматизации” ⚠️ Это описывает обязанности, но не показывает ценность или результат работы. В успешном резюме инженер вместо этого написал, чего он достиг благодаря своей работе: ✅ “Разработал API, который сократил время обработки данных на 30%” ✅ “Оптимизировал запросы к базе данных, уменьшив среднее время ответа с 2 секунд до 0.5 секунд” ✅ “Автоматизировал процесс деплоя, снизив количество ошибок на 15%” Такой подход показывает, как конкретно ваша работа помогла команде или бизнесу. Работодатель видит результаты, которые вы приносите, а не просто описание того, что вы делали. 💡 Почему это важно? Big Tech-компании ищут инженеров, которые: - Умеют оценивать влияние своей работы - Думают о метриках успеха - Приносят измеримый результат Если в резюме нет цифр, улучшений или влияния на процесс — работодатель сам должен это додумывать. А успешное резюме снимает вопросы и сразу показывает: “Вот что я сделал, вот как я улучшил продукт/процесс/результат.” 2. Лаконичность и компактность. ✅ 1 страница ✅ Чёткая структура: “Опыт”, “Навыки”, “Образование” ✅ Без фото, графиков, цветных рамок — чистый текст 3. Цифры везде, где это возможно. Любое достижение сопровождается конкретной метрикой: улучшение производительности, сокращение времени, рост количества пользователей. Даже небольшие улучшения указаны численно. 4. Поддержка через проекты с открытым кодом. Инженер приложил ссылку на GitHub с реальными проектами — это усилило доверие к нему Как с специалисту. 5. Навыки — только релевантные вакансии. В разделе Skills нет «MS Word» или «PowerPoint». Только языки, технологии, инструменты, которые нужны для позиции (Python, Kubernetes, CI/CD, etc.). 6. Интерншипы и стажировки — это опыт. Каждый опыт, даже в рамках стажировки, описан с результатами. Вакансии в топ-компаниях ценят любую практику в реальной команде. --- 🎯 Что важно для Big Tech:Результаты > Задачи.Цифры.1 страница.GitHub/портфолио.Релевантные навыки. --- 🔥 Совет: Ваше резюме — это реклама вас как продукта. Покажите пользу, которую вы можете принести, а не просто список обязанностей. ➡️ Статья

🌟 Dynaconf — управление конфигурациями в Python без головной боли. Этот проект предлагает унифицированный способ работы с ко
🌟 Dynaconf — управление конфигурациями в Python без головной боли. Этот проект предлагает унифицированный способ работы с конфигурациями: от простых .toml-файлов до интеграции с Hashicorp Vault для хранения секретов. Проект выделяет из общей массы поддержка 5+ форматов с автоматическим парсинго, разделение настроек по средам, защита секретов через .gitignore и возможность использовать Redis/Vault. Для старта достаточно pip install dynaconf и одной команды dynaconf init, которая сгенерирует все необходимые файлы. 🤖 GitHub @python_job_interview

Порекомендуйте друга в Ozon Tech и получите 150 000 ₽. Важно: IT-команда ведущего e-com ищет специалистов уровня senior+ в Da
Порекомендуйте друга в Ozon Tech и получите 150 000 ₽. Важно: IT-команда ведущего e-com ищет специалистов уровня senior+ в Data Science. Программа работает для тех, кто не работает в Ozon. Подробнее о том, за какие вакансии можно получить вознаграждение, здесь ⬅️

🧩 Python‑задача: построить резолвер зависимостей для «мини‑PyPI» Нужно написать ядро пакетного менеджера — алгоритм, выбирающий набор совместимых версий библиотек под заданные ограничения. Задача напоминает работу pip, npm или cargo, но в упрощённом формате, достаточном для тренировки графовых алгоритмов, backtracking и оптимизаций. ## 📜 Входные данные 1. catalog.json — «репозиторий» пакетов.

   {
     "pandas": {
       "1.1.0": { "depends": { "numpy": ">=1.17,<1.20" } },
       "1.3.5": { "depends": { "numpy": ">=1.19,<1.22", "python-dateutil": ">=2.7" } }
     },
     "numpy": {
       "1.18.5": { "depends": {} },
       "1.19.2": { "depends": {} },
       "1.21.0": { "depends": {} }
     },
     "python-dateutil": {
       "2.8.0": { "depends": { "six": ">=1.5" } },
       "2.8.2": { "depends": { "six": ">=1.5" } }
     },
     "six": {
       "1.14.0": { "depends": {} },
       "1.16.0": { "depends": {} }
     }
   }
   
*Ключ* — имя пакета; *значения* — версии → словарь зависимостей (`depends`). У каждой зависимости указан диапазон версий по SemVer‑синтаксису >=a,<b. 2. requirements.txt — то, что хочет пользователь:
   pandas>=1.1,<1.4
   python-dateutil==2.8.2
   
## 🔧 Задача Написать функцию

resolve(catalog: dict[str, dict[str, dict]],
        requirements: list[str]) -> dict[str, str]
которая возвращает словарь {package: chosen_version} — единственную консистентную конфигурацию, удовлетворяющую всем ограничениям, *либо* возбуждает UnresolvableError. ### Правила 1. Версия должна лежать в пересечении *всех* диапазонов, навешанных на пакет. 2. Если диапазон пуст — конфликты нельзя игнорировать. 3. Разрешение идёт по принципу «самая новая подходящая версия» (Greedy‑latest), но если она приводит к заведомому конфликту, надо откатиться («backtrack») и попробовать более старую. 4. Каталог может быть большим (≥ 10 000 пакетов), алгоритм должен укладываться в секунды. 5. Допустимо использовать только стандартную библиотеку + packaging.version/packaging.specifiers (pip‑compatible сравнение версий). ## 🏁 Дополнительные челленджи * Кэшировать результаты проверки диапазонов, чтобы не пересчитывать одно и то же. * Оптимизировать порядок обхода графа (например, сначала пакеты с меньшим числом разрешимых версий). * Добавить «экзотики»: опциональные зависимости, extras (`pandas[perf]`) или marker‑выражения (`sys_platform == "linux"`). --- # ✅ Референс‑решение (однофайловое, python 3.11) > *Не читайте решение в комментариях, пока не попробуете решить сами!* @python_job_interview

🚀 FastUI — фреймворк, позволяющий собирать React-интерфейсы, описывая их декларативно на Python. Под капотом у проекта набор
🚀 FastUI — фреймворк, позволяющий собирать React-интерфейсы, описывая их декларативно на Python. Под капотом у проекта набор Pydantic-моделей, которые автоматически преобразуются в TypeScript-типы и React-компоненты. Хотя инструмент еще находится в стадии активной разработки, он уже демонстрирует интересный подход — бэкенд полностью определяет UI, а фронтенд становится исполнителем без собственной бизнес-логики. 🤖 GitHub @python_job_interview

🖥 В этой статье автор делится опытом компиляции первой стабильной версии Python 1.0, выпущенной 27 января 1994 года, использ
🖥 В этой статье автор делится опытом компиляции первой стабильной версии Python 1.0, выпущенной 27 января 1994 года, используя современные инструменты виртуализации! 🌟 Для этого автор использует контейнеризацию с помощью Podman, разворачивая старую версию Debian (Debian 4.0) для создания подходящей среды. В процессе описываются шаги по настройке окружения, установке необходимых инструментов сборки и решению возникающих проблем, таких как несовместимость современных протоколов SSL/TLS при загрузке исходных кодов. После успешной компиляции Python 1.0 автор исследует его возможности, отмечая наличие высокоуровневых структур данных и поддержку работы с процессами, текстом, файлами и сетью, а также указывает на некоторые забавные особенности и ограничения той эпохи. 🔗 Ссылка: *клик* @python_job_interview

🖥 Linux — топ среди обучающих каналов для быстрого погружения Linux. Наглядные картинки и короткие видео - мы расскажем о вс
+5
🖥 Linux — топ среди обучающих каналов для быстрого погружения Linux. Наглядные картинки и короткие видео - мы расскажем о всех секртетах Linux администрирования. Подписаться: t.me/linuxacademiya

🖥Задача: "Динамическое кэширование с ограничением памяти и частотой запросов" 🔖 Условие: Реализуйте класс SmartCache, который работает следующим образом: - Метод put(key: str, value: Any): - Сохраняет значение по ключу. - Если суммарный объем памяти, занимаемый всеми элементами, превышает лимит (например, 10 MB), автоматически удаляются наименее "ценные" элементы. - Метод get(key: str) -> Any: - Возвращает значение по ключу. - Увеличивает счётчик использования элемента. - Если элемент отсутствует — возвращает None. Что значит "ценность" элемента: - Ценность = количество обращений (`hit count`) к элементу. - При очистке кэша сначала удаляются элементы с наименьшим количеством обращений. Ограничения: - Класс должен корректно считать объём памяти, занимаемый элементами. - Нужно учитывать, что элементы могут быть сложными структурами (`dict`, list, вложенные объекты). - Решение должно быть эффективным: операции должны быть быстрыми даже при большом количестве элементов. --- ▪️ Подсказки: - Для оценки размера объектов можно использовать модуль sys.getsizeof, но для сложных вложенных структур нужен рекурсивный подсчет. - Для хранения частоты обращений стоит использовать дополнительную структуру данных (`collections.Counter` или `dict`). - При очистке лучше сначала группировать элементы по "ценности", а затем удалять самые "дешевые". --- ▪️ Что оценивается: - Умение работать с ограничениями по памяти. - Аккуратная обработка ссылок и размеров объектов. - Эффективность очистки кэша. - Чистота и читаемость кода. --- ▪️ Разбор возможного решения: Идея архитектуры: - Храним: - storage: словарь {key: value}. - hits: счётчик {key: hit_count}. - size: общий размер всех объектов. - При put(): - Добавляем элемент. - Пересчитываем суммарный размер. - Если размер превышает лимит: - Удаляем наименее популярные элементы до тех пор, пока не уложимся в лимит. - При get(): - Увеличиваем hit_count элемента. - Возвращаем значение или None. Оценка размера объектов: - Простого sys.getsizeof недостаточно для коллекций. - Нужна функция, рекурсивно подсчитывающая размер всех вложенных объектов. Мини-пример функции подсчета размера:

import sys

def deep_getsizeof(obj, seen=None):
    """Рекурсивно считает память объекта и его вложенных объектов"""
    size = sys.getsizeof(obj)
    if seen is None:
        seen = set()
    obj_id = id(obj)
    if obj_id in seen:
        return 0
    seen.add(obj_id)

    if isinstance(obj, dict):
        size += sum([deep_getsizeof(v, seen) + deep_getsizeof(k, seen) for k, v in obj.items()])
    elif isinstance(obj, (list, tuple, set, frozenset)):
        size += sum(deep_getsizeof(i, seen) for i in obj)
    return size
Мини-пример интерфейса `SmartCache`:

class SmartCache:
    def __init__(self, max_size_bytes):
        self.max_size = max_size_bytes
        self.storage = {}
        self.hits = {}
        self.total_size = 0

    def put(self, key, value):
        # добавить логику добавления и очистки при переполнении
        pass

    def get(self, key):
        # увеличить hit_count и вернуть значение
        pass
🔖 Дополнительные вопросы: - Как ускорить очистку кэша без полного перебора всех элементов? - Как сделать потокобезопасную версию кэша? - Как адаптировать SmartCache для распределённой архитектуры (кэш между несколькими машинами)? @python_job_interview

⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь: Python: t.me/pythonl Linux: t.me/linuxacademiya Собеседования DS: t.me/machinelearning_interview Нерйросети t.me/ai_machinelearning_big_data C++ t.me/cpluspluc Docker: t.me/DevopsDocker Хакинг: t.me/linuxkalii Devops: t.me/DevOPSitsec Data Science: t.me/data_analysis_ml Javascript: t.me/javascriptv C#: t.me/csharp_ci Java: t.me/javatg Базы данных: t.me/sqlhub Python собеседования: t.me/python_job_interview Мобильная разработка: t.me/mobdevelop Golang: t.me/Golang_google React: t.me/react_tg Rust: t.me/rust_code ИИ: t.me/vistehno PHP: t.me/phpshka Android: t.me/android_its Frontend: t.me/front Big Data: t.me/bigdatai МАТЕМАТИКА: t.me/data_math Kubernets: t.me/kubernetc Разработка игр: https://t.me/gamedev Haskell: t.me/haskell_tg Физика: t.me/fizmat 💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy 😆ИТ-Мемы: t.me/memes_prog 🇬🇧Английский: t.me/english_forprogrammers 🧠ИИ: t.me/vistehno 🎓954ГБ ОПЕНСОРС КУРСОВ: @courses 📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy

👾 Задача на работу с множествами в Python — Входные данные
В первой строке заданы два натуральных числа N и M (0 < N, M ≤ 100 000). Во второй строке перечислены N элементов первого множества (целые числа через пробел). В третьей строке — M элементов второго множества (целые числа через пробел). Все числа по модулю не превышают 10<sup>9</sup>.
— Выходные данные
Для каждого из M чисел выведите в отдельной строке: - "IN", если число присутствует в обоих множествах - "OUT", если число есть только в одном из множеств - "MISS", если числа нет ни в одном множестве
— Примеры: Входные данные:
5 4 10 20 30 40 50 20 25 40 60
Выходные данные:
IN OUT IN MISS
Жду ваших вариантов решений 📝 @python_job_interview

🚀 Python-разработчик — от основ до синьора. Если вы ищете структурированный roadmap в бэкенд-разработке на Python, обратите
🚀 Python-разработчик — от основ до синьора. Если вы ищете структурированный roadmap в бэкенд-разработке на Python, обратите внимание на дорожную карту от Boot.dev. Она начинается с базовых навыков (Linux, Git, ООП) и ведёт к сложным темам: алгоритмы, HTTP-серверы, безопасность и DevOps-инструменты. Создатели сделали акцент на практике. После каждого теоретического блока предлагается создать проект: от простого бота до агрегатора блогов с использованием SQL и облачных хранилищ. 🤖 GitHub @python_job_interview

Repost from Python/ django
🖥 Новинка в Python 3.14: t-строки — типобезопасные f-строки Python 3.14 вводит t"..." — новый синтаксис для строк, ориентиро
🖥 Новинка в Python 3.14: t-строки — типобезопасные f-строки Python 3.14 вводит t"..." — новый синтаксис для строк, ориентированных на безопасность типов и интеграцию с системами шаблонов, SQL, HTML и др. 🔹 Что такое t-строка? t"..." — это как f"...", но: - интерполяция ограничена и контролируема; - поддерживается строгое соответствие шаблону; - можно передавать переменные явно, предотвращая SQL-инъекции и XSS. 🔸 Пример:

name = "Alice"
greeting = t"Hello, {name}!"  # t-строка
Вместо немедленной подстановки, как в f"...", t"..." создает шаблон с выражениями как параметрами.
🔐 Зачем это нужно? ✅ Безопасность при генерации SQL, HTML, JSON ✅ Улучшение инструментов и проверки типов (через static analysis) ✅ Контроль над контекстом исполнения (больше нельзя просто вставить переменную как есть — нужно передать её явно) 📦 Использование: t-строки — это первый шаг к "template string literals" как в TypeScript. Можно использовать с функциями:

def html(template: T[str]) -> SafeHTML:
    ...

html(t"<div>{user_input}</div>")
💡 Почему это важно? Старый код:

f"SELECT * FROM users WHERE name = '{user_name}'"
может привести к SQL-инъекциям и XSS.
t-строки — безопасная альтернатива с встроенной защитой.
🛡 Пример: безопасный HTML

template = t"<p>{user_input}</p>"
html_output = html(template)
# <p>&lt;script&gt;alert('bad')&lt;/script&gt;</p>
Функция html() может вернуть не просто строку, а полноценный HTMLElement. Больше никакой "грязи" — всё чисто и типобезопасно. 🔍 Работа с шаблоном t-строки позволяют получить доступ к содержимому:

template = t"Hello {name}!"
template.strings      # ("Hello ", "!")
template.values       # (name,)
template.interpolations[0].format_spec  # ">8"
Можно и вручную собрать шаблон:

Template("Hello ", Interpolation(value="World", expression="name"), "!")
🚀 Вывод: t"..." — шаг к безопасным шаблонам и типизации строк в Python. Готовься к будущему Python — безопасному по умолчанию. 📌 Подробнее здесь @pythonl

💡🐍 Задача на бинарный поиск на Python — Входные данные
В первой строке входных данных содержатся натуральные числа N и К ( 0 < N, K ≤ 100 000). Во второй строке задаются N элементов первого массива, отсортированного по возрастанию, а в третьей строке - К элементов второго массива. Элементы обоих массивов - целые числа, каждое из которых по модулю не превосходит 109
— Выходные данные
Требуется для каждого из К чисел вывести в отдельную строку "YES", если это число встречается в первом массиве, и "NO" в противном случае.
— Примеры: входные данные
10 5 123 4 5 6 7 8 9 10 -2 0 4 9 12
выходные данные
NO NO YES YES NO
Скидывайте свои решения в комментарии🧐 @python_job_interview

Задача: "Исчезающие процессы" На сервере с Linux (Ubuntu 22.04) установлен некий демон (например, mydaemon), который запускается через systemd unit и, согласно логам, должен работать постоянно. ❓ Но вот странность: systemctl status mydaemon показывает, что сервис активен. Однако при выполнении ps aux | grep mydaemon — процесса в списке нет. top, htop, pgrep, pidof — тоже ничего не показывают. Но при перезапуске systemd-сервиса (systemctl restart mydaemon) — в логах появляется запись о запуске, ошибок нет, а поведение не меняется. Вопрос:
что происходит и как найти реальный процесс?
Подсказки: Попробуйте посмотреть, какой тип сервиса указан в systemd unit-файле. Изучите, куда уходит stdout/stderr. Подумайте, может ли ExecStart запускать shell-обёртку, а не сам процесс. Что покажет systemctl show -p MainPID mydaemon? Подвох и решение: Часто в unit-файле могут писать: ```ini Type=simple ExecStart=/bin/bash -c 'sleep 9999'``` Systemd считает, что bash — это основной процесс (MainPID), но он сразу завершается, передав выполнение sleep. Однако поскольку Type=simple, systemd не отслеживает дочерние процессы, и MainPID исчезает — ps и pgrep по имени mydaemon ничего не покажут, а дочерний процесс (sleep 9999) работает, но под другим именем. Решение: Либо указать Type=forking и использовать PIDFile. Либо не использовать bash -c, а запускать нужный бинарь напрямую. Либо использовать Type=exec (в systemd >240) или Type=notify с proper daemon tools.

🧠 Python-хитрая задача + решение 🖍️ Условие: У тебя есть список логов (user, login/logout). Найди тех, кто зашел, но не вышел. 📜 Пример:

logs = [
    ("alice", "login"),
    ("bob", "login"),
    ("alice", "logout"),
    ("dave", "login"),
    ("bob", "logout"),
    ("carol", "login"),
    ("dave", "logout")
]
________ 💻 Решение:

from collections import defaultdict

def find_stuck_users(logs):
    counter = defaultdict(int)
    for user, action in logs:
        if action == "login":
            counter[user] += 1
        elif action == "logout":
            counter[user] -= 1
    return sorted([user for user, count in counter.items() if count > 0])
🛠Ответ: "carol" #Python #Challenge #DevPuzzle @python_job_interview

🧠 Задача с подвохом: Что выведет код?

def extendList(val, list=[]):
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123, [])
list3 = extendList('a')

print("list1 =", list1)
print("list2 =", list2)
print("list3 =", list3)
Варианты ответа: A.

list2 = [123]
list3 = ['a']
B.

list2 = [123]
list3 = [10, 'a']
C.

list2 = [123]
list3 = [10, 'a']
D.

list2 = [123]
list3 = ['a']
❓ Как думаешь, какой ответ правильный и почему? Подвох: аргументы по умолчанию в Python вычисляются один раз — при определении функции. 🔸 В extendList(val, list=[]) — этот list=[] сохраняется один и тот же объект списка для всех вызовов функции, где не передаётся list. Что происходит: list1 = extendList(10) → list=[] по умолчанию → list = [10] → list1 → [10] list2 = extendList(123, []) → передали новый список → list = [123] → list2 → [123] list3 = extendList('a') → снова использован тот же список, что и в list1 → list = [10, 'a'] → list3 → [10, 'a'] → и list1 тоже теперь [10, 'a'], потому что это один и тот же объект Вывод будет: list1 = [10, 'a'] list2 = [123] list3 = [10, 'a']

👩‍💻 Docker — лучший канал для ускоренного обучения DevOps. С помощью инфографики, наглядных визуализаций и коротких обучающ
+5
👩‍💻 Docker — лучший канал для ускоренного обучения DevOps. С помощью инфографики, наглядных визуализаций и коротких обучающих видео, вам будут доступны все ключевые концепции работы с Docker и методики DevOps. Прокачать скиллы: t.me/DevopsDocker

🚀 SQLModel — удобное решение для работы с базами данных в Python, объединяющее силу SQLAlchemy и валидацию Pydantic. Проект
🚀 SQLModel — удобное решение для работы с базами данных в Python, объединяющее силу SQLAlchemy и валидацию Pydantic. Проект устраняет главную боль разработчиков: необходимость дублировать модели для БД и API. Инструмент имеет синтаксис на основе аннотаций типов. Один класс одновременно описывает таблицу в БД и схему для FastAPI, а встроенная поддержка IDE сразу подсказывает поля и выявляет ошибки. Например, модель Hero с полями name и secret_name готова к использованию и в миграциях, и в эндпоинтах без лишнего кода. 🤖 GitHub @python_job_interview