MiddlePython Developer > Основы Python > Функции и области видимости
Короткий ответ Код выведет [1], а затем [1, 2]. Причина — изменяемый список как значение аргумента по умолчанию: такой объект создаётся один раз и разделяется между всеми вызовами функции. Как это работает подробнее Значения аргументов по умолчанию вычисляются в момент определения функции, а не при каждом вызове. Единственный экземпляр. Когда Python выполняет строку с def, список [] создаётся один раз, и ссылка на него сохраняется как значение по умолчанию. Разделение между вызовами. Первый вызов добавляет в общий список 1, второй обращается к тому же объекту и добавляет 2 — получается [1, 2]. Накопление состояния. Такой список ведёт себя как глобальное состояние, сохраняя значения между вызовами, — это классический источник трудноуловимых багов. Другие изменяемые типы. Та же проблема возникает со словарями и множествами, поэтому их тоже избегают в значениях по умолчанию. Пример кода Что использовать на практике None как маркер. Используй None в значении по умолчанию и создавай новый список внутри функции — э
default-argumentsfunctions
JuniorData Analyst > SQL и данные > SQL-запросы
Тип соединения определяет, какие строки останутся в результате, если совпадения по ключу нет.
SQLДанные
JuniorJava Developer > Java Core > Исключения
Короткий ответ Разница — в том, проверяет ли исключение компилятор. Checked-исключения проверяются на этапе компиляции: их нужно обработать в try-catch или объявить в throws, иначе код не соберётся. Unchecked-исключения (RuntimeException и её наследники, а также Error) компилятор не проверяет: они возникают в рантайме, и обрабатывать их не обязательно. Как это работает подробнее Checked-исключения — подклассы Exception, кроме RuntimeException: IOException, SQLException, ClassNotFoundException, InterruptedException и другие. Они обычно сигнализируют о проблемах внешней среды (файл не найден, сеть недоступна), поэтому язык заставляет разработчика обрабатывать их явно. Unchecked-исключения — RuntimeException и все её наследники (NullPointerException, ArithmeticException, ArrayIndexOutOfBoundsException, NumberFormatException, ClassCastException), а также Error и его наследники. Они, как правило, означают ошибки логики или программиста: обработка и объявление в throws не обязательны. Пример кода Что использовать н
checked-exceptionsexceptions
JuniorJava Developer > Java Core > Тестирование
Короткий ответ Unit-тест проверяет отдельный компонент — один класс или метод — в изоляции от остальной системы: это «белый ящик», такие тесты быстрые и обычно пишутся самим разработчиком. Интеграционный тест проверяет взаимодействие модулей или слоёв приложения (сервиса с базой, контроллера с сервисом) и корректность работы с внешними зависимостями; он выполняется после unit-тестов и работает медленнее. Как это работает подробнее Коротко: unit-тест отвечает на вопрос «корректно ли работает этот класс сам по себе», а интеграционный — «корректно ли модули работают вместе». Тестирование нужно, чтобы находить дефекты на ранних стадиях (это дешевле исправления в проде), проверять соответствие требованиям, снижать риск отказов и повышать уверенность при изменении кода. JUnit — основной фреймворк unit-тестирования; в JUnit 5 используются @Test, @BeforeEach/@AfterEach, @BeforeAll/@AfterAll и классы-ассерты. Mockito — библиотека моков: when(...).thenReturn(...) задаёт ожидаемое поведение, verify(...) проверяет, что м
integration-testingjunit
MiddleData Analyst > Метрики и эксперименты > A/B-тесты
Значимость говорит о вероятности увидеть такой результат при отсутствии реального эффекта, а не о размере выгоды.
A/B-тестыСтатистика
JuniorPython Developer > Основы Python > Функции и области видимости
Короткий ответ *args и **kwargs — это специальный синтаксис Python для передачи в функцию произвольного числа аргументов. *args собирает все неименованные аргументы в кортеж, а **kwargs — все именованные аргументы в словарь. Как это работает подробнее Порядок параметров в сигнатуре строго фиксирован: сначала идут обычные аргументы, затем *args, затем **kwargs. Механизм сборки. Когда функция объявлена со звёздочкой, все лишние позиционные аргументы упаковываются в кортеж, а все аргументы вида ключ=значение — в словарь. Имена не обязательны. args и kwargs — лишь общепринятое соглашение: синтаксически важны звёздочки, поэтому допустимы и *numbers, и **options. Обратная распаковка. При вызове func(*seq) разворачивает последовательность в позиционные аргументы, а func(**mapping) — словарь в именованные. Пример кода Что использовать на практике Гибкие API. Применяй, когда заранее неизвестно количество передаваемых значений, чтобы функция не зависела от конкретной сигнатуры. Декораторы. Обёртки почти всегда принимаю
argsarguments
MiddleJava Developer > Java Core > Spring
Короткий ответ @Transactional — аннотация декларативного управления транзакциями: все операции с базой данных внутри помеченного метода (или класса) выполняются в рамках одной транзакции и либо целиком фиксируются (commit), либо при ошибке откатываются (rollback). Аннотация применяется на уровне метода или класса. Как это работает подробнее Spring оборачивает бин в AOP-прокси. Когда помеченный метод вызывается через этот прокси, Spring перед вызовом открывает транзакцию — берёт соединение из пула — а после успешного завершения метода выполняет commit. Если метод бросает исключение, транзакция откатывается, и база данных остаётся в согласованном состоянии. Откат по умолчанию: происходит только при непроверяемых исключениях — RuntimeException и Error. Checked-исключения: если метод бросает проверяемое исключение, нужно явно указать rollbackFor, например @Transactional(rollbackFor = Exception.class). Self-invocation: когда один метод бина вызывает другой @Transactional-метод того же бина через this, вызов идёт в
aopjava
MiddlePython Developer > Основы Python > Генераторы и итераторы
Короткий ответ Генераторы — простой и экономный по памяти способ создавать итераторы в Python. Функция становится генераторной, если в её теле встречается ключевое слово yield: при вызове она возвращает объект-генератор, который выдаёт значения по одному, только когда их запрашивают. Как это работает подробнее Ленивый механизм позволяет не хранить всю последовательность в памяти, что важно для больших и даже бесконечных данных. Приостановка. Каждый раз при выполнении yield функция приостанавливается, возвращает текущее значение и запоминает своё состояние. Продолжение. При запросе следующего значения через for или next() выполнение возобновляется ровно с места остановки. Полноценный итератор. Генератор автоматически реализует методы __iter__() и __next__(). Завершение. Когда функция доходит до конца или встречает return, выбрасывается исключение StopIteration, сигнализирующее об исчерпании. Пример кода Что использовать на практике Большие данные. Для чтения потоков и обработки больших последовательностей испо
generatorsiterators
MiddlePython Developer > Основы Python > Декораторы
Короткий ответ Декоратор — способ изменить или расширить поведение функции, метода или класса без изменения их исходного кода. По сути это функция, которая принимает другую функцию и возвращает новую функцию с расширенной функциональностью. Как это работает подробнее Синтаксический сахар. Запись @decorator перед определением эквивалентна строке func = decorator(func) после него. Обёртка. Внутри декоратора обычно определяется функция wrapper, которая выполняет дополнительные действия и затем вызывает исходную функцию. Применение. Декораторы используют для логирования, проверки прав, кэширования, валидации аргументов и подобных сквозных задач. Переиспользование. Общая логика выносится из тела функций в декоратор и применяется в чистом виде к разным функциям. Пример кода Что использовать на практике Сквозная логика. Выноси в декоратор повторяющиеся действия — логирование, замер времени, контроль доступа. Переиспользование. Часто нужные обёртки оформляй в отдельном модуле и применяй к разным функциям. Метаданные.
closuresdecorators
JuniorFrontend Developer > JavaScript > Core JS
Замыкание — это функция вместе с лексическим окружением, в котором она была создана.
Core JSFrontend