Как проектировать пустые состояния и состояния ошибки?
Пустое состояние — не отсутствие интерфейса, а точка входа: оно объясняет причину и предлагает действие.
Все вопросы из всех профессий в одном списке: краткая суть, развёрнутые ответы, примеры и практические задания.
Пустое состояние — не отсутствие интерфейса, а точка входа: оно объясняет причину и предлагает действие.
Позиция определяется не только ставкой: показатель качества может дать дешёвый показ выше конкурента.
Короткий ответ put(key, value) сначала вычисляет хэш ключа и индекс корзины, затем ищет в ней узел с равным ключом: если такой ключ уже есть — значение заменяется на новое, а старое возвращается; если нет — в корзину добавляется новый узел. Высчитывать позицию бакета нужно, чтобы не перебирать все записи: ключ сразу приводит к месту хранения, поэтому в среднем операции занимают O(1). Как это работает подробнее Индекс вычисляется как (n - 1) & hash. Если корзина пуста, в неё просто помещается новый узел. Если занята, узлы проверяются: сначала сверяется хэш, затем ключи через equals(). При совпадении значение заменяется, при несовпадении узел добавляется в цепочку корзины; в Java 8+, если цепочка превысила порог, она превращается в дерево, и вставка идёт по его правилам. После вставки проверяется порог ёмкость × load factor — при превышении выполняется resize с пересчётом позиций. Метод get работает симметрично: корзина по хэшу, затем сравнение ключей через equals. Зачем бакет: адресация по хэшу избавляет от ли
ClassLoader загружает байт-код классов в JVM по принципу делегирования родителю.
Короткий ответ ClassLoader — компонент JVM, отвечающий за загрузку классов: он находит бинарное представление класса (байт-код из .class-файла, JAR-архива, сети или БД) и создаёт объект java.lang.Class. Загрузка выполняется лениво — при первом использовании класса. Встроенные загрузчики работают по модели делегирования родителю: запрос уходит вверх по иерархии, и класс загружает первый загрузчик, который сможет его найти. Как это работает подробнее В JVM три встроенных загрузчика: Bootstrap ClassLoader (написан на нативном коде, загружает ядро JDK: rt.jar в Java 8 или базовые модули runtime image в Java 9+), Platform (в Java 8 — Extension) ClassLoader для расширений и платформенных библиотек и Application (System) ClassLoader для классов приложения из classpath. По модели делегирования загрузчик сначала передаёт запрос родительскому загрузчику, и только если родитель вплоть до Bootstrap не нашёл класс, ищет его сам. Если класс не найден нигде — выбрасывается ClassNotFoundException. Из делегирования следуют ви
Короткий ответ Garbage Collector автоматически управляет памятью кучи: он находит объекты, которые больше не нужны программе, и освобождает занимаемую ими память. Мусором считается объект, до которого нельзя добраться по цепочке ссылок от корней GC (GC Roots). Современные JVM используют трассирующие (tracing) алгоритмы, а не подсчёт ссылок (reference counting), из-за проблемы циклических ссылок. Как это работает подробнее Reference counting — исторический подход: у каждого объекта ведётся счётчик ссылок; когда он уменьшается до нуля, объект удаляется сразу. Минус — не справляется с циклическими ссылками: если A ссылается на B, а B на A, и извне ссылок нет, счётчики не обнуляются и память утекает. Tracing-сборщик стартует от корней GC (локальные переменные потоков, статические поля и т. д.) и обходит граф объектов, помечая (mark) все достижимые. Всё непомеченное считается мусором и удаляется (sweep), при необходимости выполняется уплотнение (compact) против фрагментации. Для скорости куча делится на поколения:
Канал окупается, когда прибыль с клиента превышает стоимость его привлечения в приемлемый срок.
Прибыль в отчёте и деньги на счёте — разные величины: их связывает изменение баланса.
ConcurrentHashMap обеспечивает потокобезопасность на уровне отдельных сегментов (в Java 7) или через CAS и synchronized бакетов (в Java 8+)...
Короткий ответ FastAPI поддерживает асинхронную обработку запросов через ключевые слова async и await. Эндпоинт, объявленный как async def, становится корутиной, которую можно приостанавливать, освобождая ресурсы для других задач, а обычные def-эндпоинты FastAPI выполняет в пуле потоков. Как это работает подробнее Асинхронность позволяет конкурентно обрабатывать запросы и эффективнее использовать ресурсы. Корутины. async def превращает функцию пути в корутину, которую можно приостанавливать и возобновлять. Переключение задач. При вызове await выполнение возвращается циклу событий, и время ожидания сети или диска используется для других запросов. Масштабирование. Неблокирующий ввод-вывод позволяет обслуживать больше запросов меньшим числом ресурсов. Простота. Асинхронный код избавляет от ада колбэков и сложностей многопоточности. Синхронные эндпоинты. Быстрые def-функции FastAPI запускает в пуле потоков, не блокируя цикл событий. Пример кода Что использовать на практике Типичные сценарии. Применяй async в серв