JuniorPython Developer > Основы Python > Основы Python
Короткий ответ Изменяемые типы позволяют менять содержимое объекта после его создания — это списки, словари, множества и другие. Неизменяемые типы — строки, кортежи, числа и другие: их содержимое изменить нельзя, поэтому любая «правка» на самом деле создаёт новый объект. Как это работает подробнее Деление определяется возможностью изменять объект «на месте», и оно напрямую влияет на поведение кода. Изменяемые объекты. У списка есть методы вроде append и sort, которые меняют объект на месте, поэтому все ссылки на него видят изменения. Неизменяемые объекты. У строки нет методов изменения на месте: конкатенация строк или сложение чисел создаёт новый объект, а старая ссылка перепривязывается. Хешируемость. Неизменяемые объекты можно использовать как ключи словаря и элементы множества, а также безопасно передавать в функции — случайно изменить их нельзя. Что использовать на практике Ключи словаря. Для ключей словаря и элементов множества выбирай неизменяемые типы — они хешируемы. Накопление данных. Когда коллекцию
data-typesimmutable
MiddleJava Developer > Java Core > SQL и БД
Короткий ответ Индекс — объект базы данных, который ускоряет поиск и выборку строк: по аналогии с алфавитным указателем в книге он позволяет СУБД быстро находить нужные данные, не сканируя всю таблицу подряд. Индексы ускоряют SELECT с условиями в WHERE, с JOIN и с сортировкой ORDER BY. Как это работает подробнее Плата за индекс — дополнительное место для хранения структур и нагрузка на операции записи: при каждом INSERT, UPDATE и DELETE индексы нужно обновлять. Индекс эффективен на колонках, которые часто используются в WHERE, условиях JOIN и ORDER BY, и когда колонка имеет хорошую селективность — много различных значений. Кластеризованный: определяет физический порядок хранения строк, может быть только один на таблицу, обычно строится на первичном ключе. Некластеризованный: отдельная структура с указателями на строки; таких индексов может быть несколько. Уникальный и составной: уникальный гарантирует отсутствие дубликатов, составной строится по нескольким колонкам. Когда индекс не сработает: функция над коло
databaseindexes
JuniorJava Developer > Java Core > ООП
Короткий ответ ООП — объектно-ориентированное программирование: методология, в которой программа строится как совокупность взаимодействующих объектов. Каждый объект — экземпляр класса — объединяет состояние (поля) и поведение (методы). В Java выделяют четыре принципа: инкапсуляцию, наследование, полиморфизм и абстракцию. Как это работает подробнее Принципы связаны между собой: инкапсуляция прячет данные, наследование выстраивает иерархии, полиморфизм позволяет единому коду работать с разными типами, абстракция отделяет «что делать» от «как». Инкапсуляция. Сокрытие внутреннего устройства объекта: поля делают private, а доступ к ним дают через публичные геттеры и сеттеры. Это защищает данные от некорректного изменения. Наследование. Новый класс создаётся на основе существующего через extends: наследник получает поля и методы родителя и может расширять или переопределять их. Например, Cat наследуется от Animal. Полиморфизм. Одноимённые методы ведут себя по-разному: вызов animal.voice() для Dog даст «Гав», а для
abstractionencapsulation
MiddleJava Developer > Архитектура и данные > Design Patterns
Singleton гарантирует единственный экземпляр класса, но усложняет тестирование и скрывает зависимости.
CommonDesign Patterns
MiddleJava Developer > Java Core > SQL и БД
Короткий ответ Транзакция — последовательность операций с базой данных, которая выполняется как единое целое (unit of work): либо все операции успешно применяются, либо, если что-то пошло не так, все изменения откатываются, и база остаётся в прежнем состоянии. ACID — набор свойств, которым должна удовлетворять надёжная транзакция: Atomicity, Consistency, Isolation, Durability. Как это работает подробнее Классический пример — банковский перевод: если не прошло ни списание, ни зачисление, перевод целиком откатывается, и остатки не теряются. ACID особенно важен для систем с параллельным доступом и финансовыми операциями, где целостность данных критична. Atomicity — атомарность: транзакция выполняется полностью или не выполняется вовсе; при ошибке одной операции все изменения откатываются. Consistency — согласованность: после завершения база остаётся в валидном состоянии, соблюдены правила и ограничения (например, остаток на складе не отрицательный). Isolation — изоляция: параллельные транзакции не влияют друг на
aciddatabase
JuniorPython Developer > Основы Python > Коллекции и структуры данных
Короткий ответ Comprehensions (включения) — это лаконичный синтаксис Python для создания коллекций на основе итерируемых объектов: list, dict и set. Списковое включение выглядит как [выражение for элемент in итерируемое if условие] и заменяет цикл с накоплением элементов. Как это работает подробнее Включение описывает, что нужно получить, а не как: элементы собираются по правилу из выражения, цикла и необязательного условия-фильтра. Единая конструкция. List comprehension объединяет цикл for, опциональное условие if и выражение для нового элемента в одну строку. Декларативность. Вместо ручного append код описывает результат, что делает его более выразительным и «питоничным». Производительность. Включение часто работает быстрее цикла с накоплением элементов и при этом заметно короче. Другие виды. По аналогии есть dict comprehension {ключ: значение for ...}, set comprehension {значение for ...} и выражение-генератор в круглых скобках. Пример кода Что использовать на практике Построение списков. Применяй включени
comprehensionsdict-comprehension
JuniorPython Developer > Основы Python > Алгоритмы и типовые задачи
Короткий ответ FizzBuzz — классическая задача, которой проверяют базовые навыки программирования: циклы, условия и работу с остатком от деления. Для каждого числа от 1 до n нужно вывести FizzBuzz, если оно делится и на 3, и на 5; Fizz, если только на 3; Buzz, если только на 5; иначе — само число в виде строки. Как это работает подробнее Решение строится на простом цикле с проверками делимости, а главное в нём — корректный порядок условий. Правила вывода. Для каждого числа i от 1 до n выбирается ровно один вариант ответа: FizzBuzz, Fizz, Buzz или само число строкой. Оператор остатка. Делимость проверяется через %: i % 3 == 0 истинно, когда число кратно трём, аналогично для пяти. Порядок веток. Комбинированное условие «делится и на 3, и на 5» обязано идти первым, иначе число 15 попадёт в ветку Fizz. Вывод числа. В ветке else число преобразуется в строку через str(i), чтобы результат был однородным списком. Пример кода Что использовать на практике Простой цикл. Аккуратного цикла с elif достаточно для собеседован
algorithmsfizzbuzz
JuniorPython Developer > Основы Python > Инструменты разработки
Короткий ответ Git — это распределённая система контроля версий для отслеживания изменений исходного кода. В отличие от централизованных систем вроде SVN или CVS, каждый разработчик имеет полную копию репозитория со всей историей. Commit — это запись изменений с метаданными: автор, дата и ссылка на родительский коммит. Как это работает подробнее Каждый файл в репозитории в любой момент находится в одном из четырёх состояний, между которыми его перемещают команды Git. Untracked. Новый файл, ещё не добавленный в Git. Modified. Файл изменён после последнего коммита, но ещё не подготовлен. Staged. Файл добавлен командой git add и готов к коммиту. Committed. Изменения сохранены в репозиторий командой git commit. Целостность. Каждый коммит идентифицируется уникальным SHA-1-хэшем, а git push и git pull синхронизируют локальный репозиторий с удалённым. Пример кода Что использовать на практике Частые коммиты. Делай небольшие коммиты с осмысленными сообщениями, чтобы историю было легко читать. Проверка состояния. Регул
commitgit
MiddlePython Developer > Основы Python > Многопоточность и асинхронность
Короткий ответ GIL (Global Interpreter Lock) — блокировка в эталонной реализации CPython, которая позволяет только одному потоку исполнять байткод Python в любой момент времени. Она появилась из-за непотокобезопасного подсчёта ссылок, ограничивает вычислительные задачи, а вот задачи ввода-вывода от потоков по-прежнему выигрывают. Как это работает подробнее Многопоточность в Python существует, но из-за GIL реально параллельно по байткоду исполняется только один поток. Суть механизма. GIL — мьютекс, удерживаемый единственным потоком: даже в многоядерной системе два потока одного процесса не выполняют Python-байткод одновременно. Причина появления. Управление памятью в CPython, в частности подсчёт ссылок, не потокобезопасно; GIL упрощает его и избавляет разработчиков от множества ошибок с общими объектами. Что страдает. CPU-bound программы не ускоряются от добавления потоков, тогда как I/O-bound задачи дают выигрыш благодаря ожиданиям ввода-вывода. Обходные пути. Настоящий параллелизм дают отдельные процессы чер
cpythongil
MiddleJava Developer > Java Core > JPA и Hibernate
Короткий ответ JPA (Java Persistence API) — это стандарт (спецификация) ORM в Java: он определяет API и набор аннотаций — @Entity, EntityManager, JPQL — но сам по себе реализацией не является. Hibernate — самая популярная реализация этой спецификации: он реализует интерфейсы JPA и добавляет собственные расширения: HQL, тонкую настройку кэша второго уровня и дополнительные возможности. Как это работает подробнее Разница в уровне абстракции: JPA — это правила и интерфейсы, у которых есть несколько реализаций, а Hibernate — одна из них, наиболее функциональная. Если писать код только на стандартном JPA-API, он будет переносимым между ORM-провайдерами; расширенные же возможности доступны через Hibernate. JPA — стандарт: набор правил, интерфейсов и аннотаций; реализации — Hibernate, EclipseLink, OpenJPA. Hibernate — реализация JPA с самым широким набором возможностей и расширений. HQL — собственный язык запросов Hibernate, работающий на высоком уровне абстракции. На практике: в Spring Boot по умолчанию JPA-провайд
hibernatejava