📝 Структуры данных: ТОП-30 вопросов и ответов для собеседований в 2025 году
Техническое собеседование на позицию разработчика, дата-сайентиста и ML-инженера часто включает вопросы по структурам данных и связанным с ними алгоритмами.
В нашей статье мы рассмотрим базовые и продвинутые темы, разберем типичные задачи и обсудим оптимальные способы их решения.
📄 Прочитайте статью и укрепите свои знания — https://proglib.io/sh/1uYAygzIxr
Библиотека питониста
Техническое собеседование на позицию разработчика, дата-сайентиста и ML-инженера часто включает вопросы по структурам данных и связанным с ними алгоритмами.
В нашей статье мы рассмотрим базовые и продвинутые темы, разберем типичные задачи и обсудим оптимальные способы их решения.
📄 Прочитайте статью и укрепите свои знания — https://proglib.io/sh/1uYAygzIxr
Библиотека питониста
❤5👍3😁1
Команда дня: сравнение объектов с помощью __eq__
В Python, когда вы используете оператор
❌ Поведение по умолчанию:
Без переопределения ‘__eq__’, Python сравнивает объекты на основе их ссылок в памяти. То есть, два объекта будут считаться равными только в том случае, если они являются одним и тем же объектом.
Пример:
Здесь, несмотря на то, что у объектов
✅ С методом ‘__eq__’ (пользовательское сравнение):
Чтобы изменить поведение сравнения объектов, вы можете переопределить метод ‘__eq__’ в вашем классе. Этот метод будет определять, что именно считать равенством для объектов вашего класса.
Пример:
В этом примере мы определяем, что объекты считаются равными, если их атрибуты
Библиотека питониста #буст
В Python, когда вы используете оператор
==
для сравнения объектов, по умолчанию проверяется, ссылаются ли объекты на один и тот же экземпляр в памяти. Однако, если вы хотите настроить, как должны сравниваться объекты вашего класса, вам нужно переопределить метод ‘__eq__’.❌ Поведение по умолчанию:
Без переопределения ‘__eq__’, Python сравнивает объекты на основе их ссылок в памяти. То есть, два объекта будут считаться равными только в том случае, если они являются одним и тем же объектом.
Пример:
class MyClass:
def __init__(self, value):
self.value = value
a, b = MyClass(1), MyClass(1)
print(a == b) # False
Здесь, несмотря на то, что у объектов
a
и b
одинаковые значения атрибутов, они считаются неравными, так как это разные экземпляры класса.✅ С методом ‘__eq__’ (пользовательское сравнение):
Чтобы изменить поведение сравнения объектов, вы можете переопределить метод ‘__eq__’ в вашем классе. Этот метод будет определять, что именно считать равенством для объектов вашего класса.
Пример:
class MyClass:
def __init__(self, value):
self.value = value
def __eq__(self, other):
if isinstance(other, MyClass):
return self.value == other.value
return False
a, b = MyClass(1), MyClass(1)
print(a == b) # True
В этом примере мы определяем, что объекты считаются равными, если их атрибуты
value
одинаковы. Теперь вывод будет True
, так как у a
и b
одинаковые значения.Библиотека питониста #буст
👍16🔥2❤1
Чек-лист: 5 приемов ускорения Python
👍 JIT-компиляция с Numba:
Numba — это JIT-компилятор, который переводит код Python в быстрый машинный код. Добавив декоратор
Пример:
Результат: прирост производительности до 10-30 раз.
👍 Многозадачность:
Python ограничивает многозадачность из-за GIL, но для вычислительно сложных задач можно использовать многопроцессорность, чтобы обойти это ограничение.
Пример:
👍 Cython и PyPy:
Cython компилирует Python в C, что ускоряет выполнение кода. PyPy — это JIT-компилятор, который улучшает производительность без изменения кода.
Пример: С использованием Cython можно ускорить код, написав его в файле
👍 Правильные структуры данных:
Используйте более эффективные структуры данных, такие как массивы NumPy, вместо списков Python для числовых вычислений. Это ускоряет выполнение и экономит память.
Пример:
Векторизация операций с NumPy может быть в 50 раз быстрее.
👍 Инструменты профилирования:
Профилирование помогает понять, какие части кода нуждаются в оптимизации. Используйте cProfile и line_profiler для анализа производительности.
Пример:
Это поможет найти узкие места и ускорить работу.
Библиотека питониста #буст
👍 JIT-компиляция с Numba:
Numba — это JIT-компилятор, который переводит код Python в быстрый машинный код. Добавив декоратор
@jit
, вы можете ускорить вычисления в циклах и операциях с массивами.Пример:
from numba import jit
import numpy as np
import time
@jit(nopython=True)
def sum_squares(arr):
total = 0
for i in range(arr.shape[0]):
total += arr[i] * arr[i]
return total
data = np.arange(1000000)
start = time.time()
result = sum_squares(data)
end = time.time()
print("Numba JIT:", result, "Time:", end - start)
Результат: прирост производительности до 10-30 раз.
👍 Многозадачность:
Python ограничивает многозадачность из-за GIL, но для вычислительно сложных задач можно использовать многопроцессорность, чтобы обойти это ограничение.
Пример:
import multiprocessing as mp
def process_image(image):
return image ** 2
if __name__ == '__main__':
images = range(20)
with mp.Pool(mp.cpu_count()) as pool:
results = pool.map(process_image, images)
print(results)
👍 Cython и PyPy:
Cython компилирует Python в C, что ускоряет выполнение кода. PyPy — это JIT-компилятор, который улучшает производительность без изменения кода.
Пример: С использованием Cython можно ускорить код, написав его в файле
.pyx
, а с PyPy просто сменив интерпретатор.👍 Правильные структуры данных:
Используйте более эффективные структуры данных, такие как массивы NumPy, вместо списков Python для числовых вычислений. Это ускоряет выполнение и экономит память.
Пример:
import numpy as np
data = np.arange(1000000)
result = data * 2
Векторизация операций с NumPy может быть в 50 раз быстрее.
👍 Инструменты профилирования:
Профилирование помогает понять, какие части кода нуждаются в оптимизации. Используйте cProfile и line_profiler для анализа производительности.
Пример:
import cProfile
def heavy_computation():
return sum([i * i for i in range(1000000)])
cProfile.run('heavy_computation()')
Это поможет найти узкие места и ускорить работу.
Библиотека питониста #буст
👍21❤3🔥3
🔥 Делимся Python-репозиториями
Давайте обсудим самые интересные и полезные Python-репозитории!
✔️ Какие репозитории вы используете чаще всего?
✔️ Какие проекты вас впечатлили, но пока не получили широкой известности?
✔️ Какой Python-репозиторий можно поковырять для удовольствия?
Библиотека питониста #междусобойчик
Давайте обсудим самые интересные и полезные Python-репозитории!
✔️ Какие репозитории вы используете чаще всего?
✔️ Какие проекты вас впечатлили, но пока не получили широкой известности?
✔️ Какой Python-репозиторий можно поковырять для удовольствия?
Библиотека питониста #междусобойчик
❤5👍2🔥1
🎙️ Подкаст: когда не стоит начинать с юнит-тестов
Всегда ли тестирование начинается с юнит-тестов? Или иногда лучше сразу писать интеграционные или end-to-end тесты?
В новом выпуске The Real Python Podcast вы узнаете:
🔸 С чего лучше начинать тестирование кода
🔸 Как использовать pytest для интеграционных тестов
🔸 Что важно при создании тестового набора
🔸 Когда юнит-тесты действительно необходимы
🔗 Подкаст доступен по ссылке: https://clc.to/rcPHEw
Библиотека питониста #буст
Всегда ли тестирование начинается с юнит-тестов? Или иногда лучше сразу писать интеграционные или end-to-end тесты?
В новом выпуске The Real Python Podcast вы узнаете:
🔸 С чего лучше начинать тестирование кода
🔸 Как использовать pytest для интеграционных тестов
🔸 Что важно при создании тестового набора
🔸 Когда юнит-тесты действительно необходимы
🔗 Подкаст доступен по ссылке: https://clc.to/rcPHEw
Библиотека питониста #буст
👍7❤1
Forwarded from Proglib.academy | IT-курсы
Можно ли стать разработчиком, если в школе ненавидел математику? А если наоборот — тащился от алгебры и геометрии, но кодить не умеешь? Эта статья раскладывает всё по полочкам: где без математики никуда, а где можно и без неё.
✓ Почему все считают, что программисты — математики
✓ В каких сферах разработки можно вообще не знать математику
✓ Где хватит готовых библиотек, а где придётся разбираться в формулах
✓ Какие области программирования требуют мощного математического бэкграунда
✓ Что делать, если математика — это боль, но хочется освоить ML или Data Science
✓ Топ книг, которые помогут понять и даже полюбить математику
Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
Когда изучить, как оно работает, в шаге от тебя, но ты снова выбираешь путь страданий... 😭
Библиотека питониста #развлекалово
Библиотека питониста #развлекалово
😁15💯5❤3
📊 Тестовые задания — любовь или боль?
По данным исследования, 81% IT-специалистов в России просто игнорируют вакансии с тестовыми заданиями. Программисты оказались самыми «неприступными» — только 19% согласны их выполнять.
😆 Только тестировщики, которые сами по долгу службы гоняют тесты, готовы пройти их ради работы (63%). Профессиональная эмпатия?
Как вы относитесь к тестовым заданиям при трудоустройстве? Делитесь мнением в комментах! 👇
🔥 — готов(-а) выполнить, если вакансия интересная
👍 — только если тестовое оплачивается
🌚 — игнорю такие вакансии сразу
🤔 — я уже делал(-а) тестовое, а его использовали в проде бесплатно
Библиотека питониста #междусобойчик
По данным исследования, 81% IT-специалистов в России просто игнорируют вакансии с тестовыми заданиями. Программисты оказались самыми «неприступными» — только 19% согласны их выполнять.
😆 Только тестировщики, которые сами по долгу службы гоняют тесты, готовы пройти их ради работы (63%). Профессиональная эмпатия?
Как вы относитесь к тестовым заданиям при трудоустройстве? Делитесь мнением в комментах! 👇
🔥 — готов(-а) выполнить, если вакансия интересная
👍 — только если тестовое оплачивается
🌚 — игнорю такие вакансии сразу
🤔 — я уже делал(-а) тестовое, а его использовали в проде бесплатно
Библиотека питониста #междусобойчик
🔥43🌚18👍14🤔5
🐍 Твой Python-код жрёт память? 11 способов это исправить!
Высокая производительность и масштабируемость невозможны, если приложение неэффективно расходует RAM. Разберём лучшие техники оптимизации памяти в Python, которые помогут сократить потребление ресурсов и ускорить работу кода.
👉 Читать статью
Библиотека питониста
Высокая производительность и масштабируемость невозможны, если приложение неэффективно расходует RAM. Разберём лучшие техники оптимизации памяти в Python, которые помогут сократить потребление ресурсов и ускорить работу кода.
👉 Читать статью
Библиотека питониста
👍10😁1
🐍 Новости недели
🔹 PEP 736 отклонён — предложение о краткой записи именованных аргументов отвергнуто.
🔹 Polars Cloud — новый облачный сервис для удалённого выполнения запросов.
🔹 Опасные PyPI-пакеты — вредоносные библиотеки похитили облачные токены 14 100 пользователей.
🔹 Ошибка в бенчмарках CPython 3.14 — прирост производительности tail-call интерпретатора завышен из-за некорректных тестов.
🔹 Django на FOSDEM 2025 — секция «Inclusive Web» о доступности и инклюзивности в вебе.
🎥 Что посмотреть:
🔹 Создание Google Docs с Python
🔹 12 встроенных функций Python
🛠 Полезности:
🔹 Справочник инструментов разработчика Python
📚 Что почитать:
🔹 Анонимный чат в Telegram: бот с MiniApp интерфейсом
🔹 Как работают dict, slots и weakref
🔹 Аннотации типов
🔹 Python-разработчик изучает C++
🏗 Репозитории:
🔹 Pydoll — автоматизация браузеров
🔹 Nodezator — графический редактор узлов
🔹 phmutest — отладка неработающих примеров в Markdown
Библиотека питониста #свежак
🔹 PEP 736 отклонён — предложение о краткой записи именованных аргументов отвергнуто.
🔹 Polars Cloud — новый облачный сервис для удалённого выполнения запросов.
🔹 Опасные PyPI-пакеты — вредоносные библиотеки похитили облачные токены 14 100 пользователей.
🔹 Ошибка в бенчмарках CPython 3.14 — прирост производительности tail-call интерпретатора завышен из-за некорректных тестов.
🔹 Django на FOSDEM 2025 — секция «Inclusive Web» о доступности и инклюзивности в вебе.
🎥 Что посмотреть:
🔹 Создание Google Docs с Python
🔹 12 встроенных функций Python
🛠 Полезности:
🔹 Справочник инструментов разработчика Python
📚 Что почитать:
🔹 Анонимный чат в Telegram: бот с MiniApp интерфейсом
🔹 Как работают dict, slots и weakref
🔹 Аннотации типов
🔹 Python-разработчик изучает C++
🏗 Репозитории:
🔹 Pydoll — автоматизация браузеров
🔹 Nodezator — графический редактор узлов
🔹 phmutest — отладка неработающих примеров в Markdown
Библиотека питониста #свежак
👍7❤🔥2❤1
Это база: быстрая проверка списка на пустоту
При проверке списка на пустоту часто используют два варианта:
✅ Pythonic способ:
⏳ Медленный способ:
Хотя оба варианта работают, первый быстрее почти в 2 раза!
if not mylist быстрее, потому что:
✔️ Использует 2 инструкции виртуальной машины (LOAD_GLOBAL, TO_BOOL).
✔️ Инструкция
if len(mylist) == 0 медленнее, потому что:
📍 Требует 5 инструкций (LOAD_GLOBAL, LOAD_FAST, CALL, LOAD_CONST, COMPARE_OP).
📍 Вызывает
Вывод:
Используйте
👉 Подробности можно узнать в детальной статье: https://clc.to/rd3OQg
Библиотека питониста #буст
При проверке списка на пустоту часто используют два варианта:
✅ Pythonic способ:
if not mylist:
⏳ Медленный способ:
if len(mylist) == 0:
Хотя оба варианта работают, первый быстрее почти в 2 раза!
if not mylist быстрее, потому что:
✔️ Использует 2 инструкции виртуальной машины (LOAD_GLOBAL, TO_BOOL).
✔️ Инструкция
TO_BOOL_LIST
оптимизирована под списки и читает размер за 1 операцию.if len(mylist) == 0 медленнее, потому что:
📍 Требует 5 инструкций (LOAD_GLOBAL, LOAD_FAST, CALL, LOAD_CONST, COMPARE_OP).
📍 Вызывает
len()
, что добавляет функциональные вызовы и лишние обращения к памяти.Вывод:
Используйте
if not mylist
— это и короче, и быстрее. Особенно важно в критичных к скорости местах кода! 👉 Подробности можно узнать в детальной статье: https://clc.to/rd3OQg
Библиотека питониста #буст
❤21👍14😁4😢1🥱1
🚀 Вышел NumPy 2.2.4
Свежий патч-релиз NumPy 2.2.4 включает важные исправления ошибок и значительные улучшения в системе типов. Также обновлена поддержка платформ.
Основные фиксы:
✔️ Исправлены ошибки в numpy.loadtxt, np.nonzero, bincount, searchsorted
✔️ Улучшена безопасность многопоточного выполнения
✔️ Исправлена сборка на s390x с clang
✔️ Обновлена поддержка FreeBSD и тестов на QEMU
✔️ Существенные улучшения типизации
Ссылка на релиз: https://clc.to/4AxrTw
Вы обновляетесь на патч-релизы вроде 2.2.4 или ждёте крупных обновлений, таких как 2.3 или 2.4?
👍 Обновляемся на патчи
🤔 Ждём крупных релизов
Библиотека питониста #свежак
Свежий патч-релиз NumPy 2.2.4 включает важные исправления ошибок и значительные улучшения в системе типов. Также обновлена поддержка платформ.
Основные фиксы:
✔️ Исправлены ошибки в numpy.loadtxt, np.nonzero, bincount, searchsorted
✔️ Улучшена безопасность многопоточного выполнения
✔️ Исправлена сборка на s390x с clang
✔️ Обновлена поддержка FreeBSD и тестов на QEMU
✔️ Существенные улучшения типизации
Ссылка на релиз: https://clc.to/4AxrTw
Вы обновляетесь на патч-релизы вроде 2.2.4 или ждёте крупных обновлений, таких как 2.3 или 2.4?
👍 Обновляемся на патчи
🤔 Ждём крупных релизов
Библиотека питониста #свежак
👍15🤔7❤3
❗️Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
👍3
🧠 Шпаргалка по алгоритмам
Готовитесь к техническому интервью или хотите прокачать алгоритмическое мышление? Мы нашли отличный репозиторий-шпаргалку с ключевыми концепциями, которые помогут вам уверенно решать задачи.
Внутри:
🔹 Разбор основных структур данных
🔹 Популярные алгоритмы и их применение
🔹 Советы по оптимизации решений
🔹 Подходы к решению задач на кодинг-интервью
Ссылка на репозиторий: https://clc.to/_fEkZg
Библиотека питониста #буст
Готовитесь к техническому интервью или хотите прокачать алгоритмическое мышление? Мы нашли отличный репозиторий-шпаргалку с ключевыми концепциями, которые помогут вам уверенно решать задачи.
Внутри:
🔹 Разбор основных структур данных
🔹 Популярные алгоритмы и их применение
🔹 Советы по оптимизации решений
🔹 Подходы к решению задач на кодинг-интервью
Ссылка на репозиторий: https://clc.to/_fEkZg
Библиотека питониста #буст
👍9❤1
Media is too big
VIEW IN TELEGRAM
Proglib рассказывает базу в формате рилса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2
🖥️ Обзор: какую Python GUI-библиотеку выбрать в 2025 году?
Хотите добавить графический интерфейс в ваше приложение, но не знаете, с чего начать? Тогда эта статья для вас!
Что вас ждет в статье:
✔️ Сравнение самых популярных Python GUI-фреймворков и их ключевых преимуществ.
✔️ Лицензионные моменты, которые могут повлиять на ваш выбор.
✔️ Примеры кода с простыми приложениями «Hello, World!» для каждой библиотеки.
🎯 Зачем читать?
Вы найдете полезную информацию, которая поможет выбрать идеальную библиотеку для вашего проекта, будь то простое приложение или сложная система с графическим интерфейсом.
👉 Ссылка на статью: https://clc.to/j3l2Zw
Библиотека питониста #буст
Хотите добавить графический интерфейс в ваше приложение, но не знаете, с чего начать? Тогда эта статья для вас!
Что вас ждет в статье:
✔️ Сравнение самых популярных Python GUI-фреймворков и их ключевых преимуществ.
✔️ Лицензионные моменты, которые могут повлиять на ваш выбор.
✔️ Примеры кода с простыми приложениями «Hello, World!» для каждой библиотеки.
🎯 Зачем читать?
Вы найдете полезную информацию, которая поможет выбрать идеальную библиотеку для вашего проекта, будь то простое приложение или сложная система с графическим интерфейсом.
👉 Ссылка на статью: https://clc.to/j3l2Zw
Библиотека питониста #буст
👍9❤4🔥1
⚙️ How to: оптимизируем код с помощью профилировщика
Хотите узнать, что замедляет ваш код? Используйте встроенный профилировщик cProfile. Этот мощный инструмент поможет выявить проблемные участки и ускорить выполнение.
Пример использования:
Что показывает результат:
▪️ Общее время: 4 вызова функций за 0.000 CPU секунд.
▪️ Подробная статистика:
-
-
-
-
-
Пример вывода:
Как оптимизировать:
1. Анализируйте
2. Сократите вызовы: если ncalls высок, рассмотрите оптимизацию логики.
3. Тестируйте изменения: повторяйте профилирование после оптимизации.
Библиотека питониста #буст
Хотите узнать, что замедляет ваш код? Используйте встроенный профилировщик cProfile. Этот мощный инструмент поможет выявить проблемные участки и ускорить выполнение.
Пример использования:
import hashlib
import cProfile
cProfile.run('hashlib.md5("abcdefghiijkl").digest()')
Что показывает результат:
▪️ Общее время: 4 вызова функций за 0.000 CPU секунд.
▪️ Подробная статистика:
-
ncalls
: количество вызовов.-
tottime
: общее время в функции.-
percall
: время на один вызов.-
cumtime
: кумулятивное время.-
filename:lineno(function)
: расположение функции.Пример вывода:
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {hashlib._md5}
1 0.000 0.000 0.000 0.000 {method 'digest' of '_hashlib.HASH' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
Как оптимизировать:
1. Анализируйте
tottime
и cumtime
: ищите функции с наибольшим временем выполнения.2. Сократите вызовы: если ncalls высок, рассмотрите оптимизацию логики.
3. Тестируйте изменения: повторяйте профилирование после оптимизации.
Библиотека питониста #буст
👍14❤3
В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.
⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.
❓Почему так: Shieldy отправляет капчу в сам чат, а не в комментарии под конкретный пост. Из-за этого капчу можно не увидеть, не отправить ответ на нее, и бот автоматически заблокирует вас.
— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат
После этого бот отправит приветственное сообщение и вы сможете оставлять комментарии. Эту проверку нужно пройти только один раз при вступлении в чат.
❗️ Если вас все-таки забанили
— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу
Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.
👾 Спасибо, что активно участвуете в обсуждении наших постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9