24940
Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd
📚 Django Styleguide — готовый гайд по архитектуре проектов для Django-разработки, основанные на опыте коммерческих проектов. Здесь сделан акцент на разделение бизнес-логики: сервисы для записи данных, селекторы для чтения и чёткие правила валидации в моделях.
Особенно полезен среди прочих раздел про обработку ошибок в DRF и примеры тестирования сложных сценариев. Авторы предлагают адаптировать подходы под конкретные задачи, а полный пример проекта вынесен в отдельный репозиторий.
🤖 GitHub
@python_job_interview
👩💻 Хочется выделить свой Github профиль для вашего резюме?
🔥 Просто скачайте этот скрипт и он создаст вам фейковую активность путем отправки множества пустых коммитов в случайном количестве!
🔐 Лицензия: Apache-2.0
🖥 Github
@python_job_interview
📝 Как составить резюме, чтобы попасть в 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/портфолио.
✅ Релевантные навыки.
---
🔥 Совет:
Ваше резюме — это реклама вас как продукта.
Покажите пользу, которую вы можете принести, а не просто список обязанностей.
➡️ Статья
Порекомендуйте друга в Ozon Tech и получите 150 000 ₽.
Важно: IT-команда ведущего e-com ищет специалистов уровня senior+ в Data Science. Программа работает для тех, кто не работает в Ozon.
Подробнее о том, за какие вакансии можно получить вознаграждение, здесь ⬅️
🚀 FastUI — фреймворк, позволяющий собирать React-интерфейсы, описывая их декларативно на Python. Под капотом у проекта набор Pydantic-моделей, которые автоматически преобразуются в TypeScript-типы и React-компоненты.
Хотя инструмент еще находится в стадии активной разработки, он уже демонстрирует интересный подход — бэкенд полностью определяет UI, а фронтенд становится исполнителем без собственной бизнес-логики.
🤖 GitHub
@python_job_interview
🖥 Linux — топ среди обучающих каналов для быстрого погружения Linux.
Наглядные картинки и короткие видео - мы расскажем о всех секртетах Linux администрирования.
Подписаться: t.me/linuxacademiya
⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:
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
Разработка игр: /channel/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: /channel/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: /channel/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: /channel/addlist/BkskQciUW_FhNjEy
🚀 Python-разработчик — от основ до синьора.
Если вы ищете структурированный roadmap в бэкенд-разработке на Python, обратите внимание на дорожную карту от Boot.dev. Она начинается с базовых навыков (Linux, Git, ООП) и ведёт к сложным темам: алгоритмы, HTTP-серверы, безопасность и DevOps-инструменты.
Создатели сделали акцент на практике. После каждого теоретического блока предлагается создать проект: от простого бота до агрегатора блогов с использованием SQL и облачных хранилищ.
🤖 GitHub
@python_job_interview
💡🐍 Задача на бинарный поиск на 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-хитрая задача + решение
🖍️ Условие:
У тебя есть список логов (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])
👩💻 Docker — лучший канал для ускоренного обучения DevOps.
С помощью инфографики, наглядных визуализаций и коротких обучающих видео, вам будут доступны все ключевые концепции работы с Docker и методики DevOps.
Прокачать скиллы: t.me/DevopsDocker
🚀 SQLModel — удобное решение для работы с базами данных в Python, объединяющее силу SQLAlchemy и валидацию Pydantic. Проект устраняет главную боль разработчиков: необходимость дублировать модели для БД и API.
Инструмент имеет синтаксис на основе аннотаций типов. Один класс одновременно описывает таблицу в БД и схему для FastAPI, а встроенная поддержка IDE сразу подсказывает поля и выявляет ошибки. Например, модель Hero с полями name и secret_name готова к использованию и в миграциях, и в эндпоинтах без лишнего кода.
🤖 GitHub
@python_job_interview
Хотите освоить программирование или сменить работу в IT?
А вы готовы всего за час создать и опубликовать целое приложение?
Отлично! Тогда присоединяйтесь к онлайн-конференции «Как создать первый проект на Python и Java с нуля»!
Новички в IT узнают:
- какой язык программирования лучше выбрать для старта
- как быстро создать и развернуть приложение
- как работают Python и Java на практике
- как размещать код на GitHub и работать с репозиториями
- какие дополнительные инструменты использовать для профессионального роста
Программисты на других языках, и те, кто ищет новые возможности в IT:
- поймёте, какие IT-технологии сейчас востребованы
- узнаете, какие навыки прокачивать для успешной смены деятельности
- отработаете навыки быстрой сборки и быстрого развёртывания проекта
- узнаете о новых возможностях для обучения и развития
Также вас ждёт квиз с призами!
Спикеры:
Сурен Хоренян: бэкенд-разработчик на Python, руководитель команды в «VK Рекламе»
Сергей Прощаев: Java-разработчик
Бонус! Скидка 7% на любой курс OTUS и полезные материалы в подарок!
18 апреля, 19:00 МСК
Бесплатно
Записаться на событие - https://otus.pw/hO1Y/?erid=2W5zFG4xtxx
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
🖥 simplejson — это библиотека для Python, обеспечивающая простое, быстрое и расширяемое кодирование и декодирование JSON!
🌟 Она полностью написана на Python и не имеет внешних зависимостей, но включает необязательное C-расширение для повышения производительности. Поддерживает Python версии 3.3 и выше, а также имеет обратную совместимость с Python 2.5+.
🔐 Лицензия: MIT
🖥 Github
@python_job_interview
🖥 Создание секретного токена с помощью Python!
@python_job_interview
🐍 Задача с подвохом на Python. Что выведет данный код?
def update_dict(key, value, d={}):
d[key] = value
return d
dict1 = update_dict('a', 1)
dict2 = update_dict('b', 2, {})
dict3 = update_dict('c', 3)
print("dict1 =", dict1)
print("dict2 =", dict2)
print("dict3 =", dict3)
dict1 = {'a': 1}
dict2 = {'b': 2}
dict3 = {'c': 3}dict1 = {'a': 1, 'c': 3}
dict2 = {'b': 2}
dict3 = {'a': 1, 'c': 3}dict1 = {'a': 1}
dict2 = {'b': 2}
dict3 = {'a': 1, 'c': 3}
🐍 Новая функция в Python 3.14: шаблонные строки — необходимость или излишняя сложность?
Python 3.14 готовит к выходу новую возможность — шаблонные строки (template strings, или t-строки), предложенные в PEP 750. Несмотря на интересный замысел, эта функция уже вызвала горячие споры в сообществе разработчиков. Давайте разберёмся, что это и зачем нужно.
Что такое t-строки?
T-строки — это новый способ форматирования строк, внешне похожий на f-строки. Принцип прост: добавляем префикс t перед строкой, например:
t"Привет, {name}!"
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-строкой
query = f"SELECT * FROM users WHERE name = '{user_input}'"
.format(),
🌟 Dynaconf — управление конфигурациями в Python без головной боли. Этот проект предлагает унифицированный способ работы с конфигурациями: от простых .toml-файлов до интеграции с Hashicorp Vault для хранения секретов.
Проект выделяет из общей массы поддержка 5+ форматов с автоматическим парсинго, разделение настроек по средам, защита секретов через .gitignore и возможность использовать Redis/Vault. Для старта достаточно pip install dynaconf и одной команды dynaconf init, которая сгенерирует все необходимые файлы.
🤖 GitHub
@python_job_interview
🧩 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": {} }
}
}
>=a,<b.
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.packaging.version/packaging.specifiers (pip‑compatible сравнение версий).
🖥 В этой статье автор делится опытом компиляции первой стабильной версии Python 1.0, выпущенной 27 января 1994 года, используя современные инструменты виртуализации!
🌟 Для этого автор использует контейнеризацию с помощью Podman, разворачивая старую версию Debian (Debian 4.0) для создания подходящей среды. В процессе описываются шаги по настройке окружения, установке необходимых инструментов сборки и решению возникающих проблем, таких как несовместимость современных протоколов SSL/TLS при загрузке исходных кодов. После успешной компиляции Python 1.0 автор исследует его возможности, отмечая наличие высокоуровневых структур данных и поддержку работы с процессами, текстом, файлами и сетью, а также указывает на некоторые забавные особенности и ограничения той эпохи.
🔗 Ссылка: *клик*
@python_job_interview
🖥Задача: "Динамическое кэширование с ограничением памяти и частотой запросов"
🔖 Условие:
Реализуйте класс 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
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
— Входные данные
В первой строке заданы два натуральных числа 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 3.14: t-строки — типобезопасные f-строки
Python 3.14 вводит t"..." — новый синтаксис для строк, ориентированных на безопасность типов и интеграцию с системами шаблонов, SQL, HTML и др.
🔹 Что такое t-строка?
t"..." — это как f"...", но:
- интерполяция ограничена и контролируема;
- поддерживается строгое соответствие шаблону;
- можно передавать переменные явно, предотвращая SQL-инъекции и XSS.
🔸 Пример:
name = "Alice"
greeting = t"Hello, {name}!" # t-строка
Вместо немедленной подстановки, как в f"...", t"..." создает шаблон с выражениями как параметрами.
def html(template: T[str]) -> SafeHTML:
...
html(t"<div>{user_input}</div>")
f"SELECT * FROM users WHERE name = '{user_name}'"
может привести к SQL-инъекциям и XSS.
t-строки — безопасная альтернатива с встроенной защитой.
template = t"<p>{user_input}</p>"
html_output = html(template)
# <p><script>alert('bad')</script></p>
template = t"Hello {name}!"
template.strings # ("Hello ", "!")
template.values # (name,)
template.interpolations[0].format_spec # ">8"
Template("Hello ", Interpolation(value="World", expression="name"), "!")
❓ Задача: "Исчезающие процессы"
На сервере с Linux (Ubuntu 22.04) установлен некий демон (например, mydaemon), который запускается через systemd unit и, согласно логам, должен работать постоянно.
❓ Но вот странность:systemctl status mydaemon показывает, что сервис активен.
Однако при выполнении ps aux | grep mydaemon — процесса в списке нет.top, htop, pgrep, pidof — тоже ничего не показывают.
Но при перезапуске systemd-сервиса (systemctl restart mydaemon) — в логах появляется запись о запуске, ошибок нет, а поведение не меняется.
Вопрос:
что происходит и как найти реальный процесс?
. systemctl show -p MainPID mydaemon?
🧠 Задача с подвохом: Что выведет код?
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)
list2 = [123]
list3 = ['a']
list2 = [123]
list3 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
list2 = [123]
list3 = ['a']
❓ Что выведет этот код на Python?
x = [1, 2, 3]
y = x
x += [4]
print(x)
print(y)
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3]
x = [1, 2, 3] и y = x — ссылка на один и тот же список.x += [4] модифицирует список на месте.y тоже видит изменение.+=, который работает не как x = x + [...].
Читать полностью…
❓ Что выведет этот код на Python?
def append_to(element, to=[]):
to.append(element)
return to
print(append_to(1))
print(append_to(2))
print(append_to(3, []))
print(append_to(4))
[2]
[3]
[4]
[1, 2]
[3]
[1, 2, 4]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2]
[3]
[4]
to=[] сохраняется и используется повторно, если явно не передан другой. append_to(1), append_to(2) и append_to(4) работают с одним и тем же списком.
Читать полностью…
🧩 Сложная задача по Python для опытных разработчиков
Что выведет следующий код?
def func(a, L=[]):
L.append(a)
return L
print(func(1))
print(func(2))
print(func(3))
[2]
[3]
[1, 2]
[1, 2, 3]
[1]
[1]
[2]
[3]
L=[]) в Python инициализируются один раз при определении функции, а не каждый раз при вызове. Поэтому изменения сохраняются между вызовами func. Это классическая "ловушка" со значениями по умолчанию!
🧠 Python-задача на внимательность и знание подводных камней
Что выведет этот код?
def make_funcs():
funcs = []
for i in range(3):
def wrapper(x=i):
return lambda: x
funcs.append(wrapper())
return funcs
a, b, c = make_funcs()
print(a(), b(), c())