Python
slots в Python
В этой статье рассматривается механизм slots
в Python — незаменимый инструмент для тех, кто работает с большим количеством объектов. Вместо привычного хранения атрибутов в словаре dict
, slots
выделяет для каждого атрибута строго определенное место в памяти, что позволяет сократить использование ресурсов и ускорить работу программы. Однако, это накладывает определенные ограничения, например, нельзя добавлять новые атрибуты на лету. Примеры из практики показывают, как slots
помогает экономить память в высоконагруженных системах и данных, таких как ML/ETL пайплайны и серверные приложения.
Как работают dict, slots и weakref в Python (и зачем это знать)
Разберем три ключевых механизма Python — dict
, slots
и weakref
— и их роль в оптимизации работы с памятью, ускорении доступа к данным и предотвращении утечек. Рассмотрим, как стандартный dict
может быть неэффективен при большом количестве объектов, а slots
помогает снизить нагрузку, исключая лишние словари и фиксируя набор атрибутов. Также раскрывается, как слабые ссылки через weakref
позволяют эффективно управлять памятью, не препятствуя удалению объектов сборщиком мусора. Примеры показывают, как комбинировать эти подходы для экономии памяти и гибкости работы с аттрибутами объектов.
Joblib: максимум из параллельных вычислений в Python
В этой статье объясняется, как библиотека Joblib ускоряет Python-код с помощью параллельных вычислений и кэширования. Рассматривается распараллеливание задач, таких как вычисления на больших данных, с использованием процессов и потоков. Также освещается работа с большими объемами данных через memory-mapped файлы и кэширование вычислений, чтобы избежать повторной работы. Joblib помогает ускорить выполнение задач, сокращая код и улучшая производительность.
Отладка с sys._getframe в Python
В коротком формате разберемся с тем, что же творится внутри CPython, когда функции вызывают друг друга: sys._getframe
, f_back
, f_globals
, f_locals
, а также создадим свои декораторы.
Аннотации типов в Python: коротко о главном
В этой статье рассмотрим, как Python, оставаясь динамически типизированным, может приближаться к строгой типизации. Всё дело в аннотациях типов, которые позволяют явно указывать, какие данные ожидаются в переменных, аргументах функций и возвращаемых значениях.
CPython C API: 5 вопросов на собеседовании
В статье рассматриваются важные вопросы по CPython и его C API, включая:
- Как Python взаимодействует с C через PyObject?
- Роль Py_INCREF() и Py_DECREF() в C-расширениях.
- Минимальный модуль на C для сложения чисел.
- Как работает Buffer Protocol и memoryview?
- Почему нельзя просто вызвать free(ptr) в C-коде с объектами Python?
Сериализация в Python с Pickle
В этой статье мы поговорим о библиотеке pickle
и её роли в сериализации объектов в Python. Вы узнаете, как эффективно сохранять и восстанавливать данные с помощью разных протоколов, а также как настроить кастомную сериализацию для своих классов. Мы также затронем важные аспекты работы с несериализуемыми атрибутами и рассмотрим, как защититься от угроз при использовании pickle
. Примеры, такие как база данных котиков, помогут вам понять, как всё это работает на практике.
Java
SOLID на котиках: коротко и по делу
Каждый разработчик знает, каково это — увидеть код, который страшно трогать. В нём всё ломается, стоит добавить пару строк. Чтобы такого не было, мир придумал SOLID — набор из пяти принципов, которые делают ваш код понятным, надёжным и лёгким в поддержке.
В этой статье рассмотрим, как внедрять эти принципы с умом, и да, будет немного котиков — куда без них.
3 вопроса на собеседование о многопоточности в Java
В этой статье мы рассмотрим три важнейших вопроса, которые могут возникнуть на собеседовании по многопоточности в Java. Проблемы, связанные с синхронизацией, правилами happens-before и особенностями работы с ConcurrentHashMap.computeIfAbsent()
, обсудим всё это через примеры и практические рекомендации.
Как бросить исключение без throws в Java: технический разбор с примерами
В Java существует старое, но всё ещё актуальное ограничение: если метод бросает checked‑исключение (например, IOException), он обязан явно объявить это с помощью throws. Это требование — не от JVM, а от компилятора. Компилятор жёстко следит за декларациями, но вот JVM — нет. Что создаёт любопытную лазейку: обойти компилятор, оставаясь при этом в рамках спецификации JVM.
В этой статье разберёмся, как это сделать с помощью Unsafe.throwException()
, почему это вообще работает, где это может пригодиться, и на что стоит обратить внимание при использовании Java 17, 21 и 24.
C++
Линейная алгебра в C++ с Eigen
Кто хоть раз пытался работать с матрицами в C++, знает, что это удовольствие сродни написанию своего STL — возможно, но зачем? Eigen — это библиотека, которая избавит вас от ручного управления памятью, оптимизирует вычисления и позволит писать код, похожий на чистую математику. Поэтому в этой статье мы разберем эту прекрасную библиотеку.
Range-v3 в C++
В этой статье рассмотрим Range-v3 — библиотеку, которая изменила подход к обработке последовательностей в C++ и стала основой для std::ranges
в C++20. Это библиотека, расширяющая стандартную библиотеку C++ возможностью работать с диапазонами вместо begin()
/end()
. В основе идеи лежат три концепции:
- Views — ленивые представления данных
- Actions — eager-операции над контейнерами
- Pipeline (|) — декларативный синтаксис для обработки последовательностей
Golang
Алгоритм Кнута-Морриса-Пратта для поиска подстрок на Go
Поиск подстроки в строке — важная задачка в текстовой обработке. В Go стандартная библиотека имеет strings.Index
, но он использует простой перебор символов, который работает с O(n × m) в худшем случае, где n
— длина текста, m
— длина подстроки.
Алгоритм Кнута-Морриса-Пратта решает эту проблему, используя префикс-функцию, которая позволяет пропускать заведомо ненужные сравнения. В результате его сложность O(n + m), что делает его подходящим для больших текстов и множественных поисковых запросов.
FissionGo: как запускать Go-функции в Kubernetes
В этой статье мы разберём фреймворк FissionGo, который упрощает работу с серверлес-функциями в Kubernetes. С помощью FissionGo можно писать Go-функции, загружать их в Kubernetes, привязывать триггеры и запускать без необходимости работать с контейнерами или YAML-манифестами. Мы рассмотрим, как установить Fission, создать простые HTTP-функции и управлять их ресурсами, а также кэшировать данные с помощью Redis для улучшения производительности.
Интерактивный тур по Go 1.24
В Go 1.24 появилось множество полезных обновлений, включая обобщённые псевдонимы типов, улучшенные слабые указатели и финализаторы. Также значительно оптимизирована работа с map, что ускоряет операции с большими коллекциями. Были добавлены новые функции для тестирования и бенчмаркинга, улучшая работу с конкурентным кодом. К тому же, релиз включает поддержку SHA-3 и другие криптографические улучшения, повышающие производительность и удобство работы с языком.
Реализация Paxos на Go: создаем алгоритм консенсуса без готовых решений
Paxos — это алгоритм, который позволяет нескольким узлам прийти к единому мнению, даже если не все из них работают идеально. Даже если один или два узла оказываются недоступными, Paxos всё равно помогает согласовать решение, а остальным — узнать о том, что вообще было принято.
Вот такие вещи — согласование, отказоустойчивость, выбор лидера — по сути, и составляют ядро распределённых систем. Они позволяют избежать катастроф.
