Skip to content

Вопросы на собеседовании: Angular-разработчик

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior Angular-инженер.

Смотреть пример резюме: Angular-разработчик

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

angular

Я разделю код по бизнес-доменам и оставлю у каждого домена один небольшой публичный API.

  • Каждый домен владеет своими роутами, UI, доступом к данным и состоянием, а общие библиотеки содержат только нейтральные к домену примитивы.
  • Между доменами импорты проходят через типизированные контракты или оркестрацию уровня приложения, но не через внутренние пути компонентов или store.
  • Правила зависимостей Nx проверяют теги доменов и слоёв, поэтому недопустимая связь ломает CI.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат превратить владение доменами в контролируемое направление зависимостей.

componentsangularmodules

Я буду использовать standalone-компоненты по умолчанию, оставив NgModules только на доказанной границе совместимости.

  • Каждый компонент импортирует директивы, пайпы и компоненты своего шаблона, поэтому зависимости остаются локальными и статически видимыми.
  • Возможности приложения собираются при bootstrap через providers вроде provideRouter и provideHttpClient, а не через AppModule.
  • Границы фич по-прежнему задают роуты, библиотеки и публичные API, потому что standalone сам по себе не определяет архитектуру.

Зачем это спрашивают: Сильный ответ использует standalone как современный способ композиции, но не путает его с доменной архитектурой.

activationcloud

Я зарегистрирую аналитику в EnvironmentInjector приложения, а состояние checkout в ElementInjector компонента checkout shell.

  • bootstrapApplication получает глобальный environment provider, поэтому все роуты используют один экземпляр адаптера аналитики.
  • Checkout shell предоставляет свой state service, поэтому каждый экземпляр компонента создаёт одно состояние и уничтожает его вместе с view.
  • Route EnvironmentInjector подходит для общего сервиса дочерних роутов, но нельзя считать, что он сбрасывается при каждой навигации.

Зачем это спрашивают: Интервьюер оценивает размещение providers по точному времени жизни инжектора, а не по общему правилу global-versus-local.

cssangular

Я выберу @if, чтобы во view существовали только выбранная панель и её зависимости.

  • @if и @else напрямую выражают взаимоисключающие ветки без импорта NgIf в standalone-компонент.
  • Удаление неактивной ветки также уничтожает её дочерние views и принадлежащие им подписки вместо фоновой работы скрытой панели.
  • Состояние, которое должно пережить переключение панелей, находится выше условной границы, а не внутри пересоздаваемой панели.

Зачем это спрашивают: Интервьюер проверяет понимание последствий встроенного control flow для жизненного цикла.

Я буду отслеживать строку по неизменяемому ID заказа, а не по ссылке на объект или $index.

  • track order.id позволяет Angular перемещать существующие views строк при сортировке вместо их уничтожения и пересоздания.
  • $index безопасен только для статического списка, у которого никогда не меняются порядок и состав.
  • Повторяющиеся или изменяемые ключи ломают идентичность, поэтому API-контракт гарантирует один стабильный ID на заказ.

Зачем это спрашивают: Сильный ответ связывает track в @for со стабильной идентичностью, переиспользованием DOM и корректностью при сортировке.

pricingapicomponents

Я размещу преобразование транспорта за типизированным адаптером на границе каждого семейства роутов.

  • Адаптеры HttpClient владеют URL, сгенерированными DTO, обработкой статусов и преобразованием в общий контракт Price.
  • Компоненты потребляют доменную модель и не ветвятся по версии API или необязательным полям транспорта.
  • Providers роута выбирают нужную реализацию адаптера через InjectionToken без изменения кода компонентов.

Зачем это спрашивают: Интервьюер оценивает, локализована ли изменчивость API на конкретной архитектурной границе.

angularsessions

Я сделаю каждый целостный workflow ленивым поддеревом роутов, оставив eager только оболочку и первый роут.

  • loadChildren или loadComponent сохраняет границу динамического импорта вокруг каждого workflow.
  • Вложенные роуты держат guards, resolvers и providers рядом с workflow, который они координируют.
  • Общая библиотека может содержать стабильные примитивы, но импорт lazy-фичи из оболочки разрушит разделение.

Зачем это спрашивают: Интервьюер проверяет композицию роутов, lazy-границы и защиту от случайных eager-импортов.

componentsconfig

Я опубликую один сфокусированный компонент карточки с явными точками расширения для четырёх областей действий.

  • Типизированные inputs передают данные клиента, outputs сообщают нейтральные к домену намерения пользователя, а content projection добавляет необязательные действия.
  • Общий компонент владеет layout и доступностью, а продуктовые правила остаются в потребляющей фиче.
  • Я не допущу растущую матрицу boolean inputs, потому что их комбинации превращаются во вторую недокументированную продуктовую модель.

Зачем это спрашивают: Интервьюер оценивает переиспользование через стабильные контракты вместо копий или компонента с десятками флагов.

signals

Я оставлю writable только вводимые пользователем значения, а налог и итог получу через computed.

  • Количество, цена, скидка и налоговая юрисдикция являются writable signals, потому что действия пользователя заменяют эти значения.
  • computed мемоизирует итог и перезапускается только при изменении signal, прочитанного во время последнего выполнения.
  • Отдельное сохранение рассчитанного итога создаст два writable-источника, которые могут разойтись.

Зачем это спрашивают: Интервьюер проверяет, отличает ли кандидат исходное состояние от производного состояния signals.

templatesdependencies

Я получу итог корзины через computed, а effect оставлю только для императивной синхронизации графика.

  • Шаблон читает computed напрямую, поэтому Angular отслеживает зависимость без effect, записывающего новое состояние.
  • Effect вызывает API графика и регистрирует очистку, если библиотека удерживает ресурсы или listeners.
  • Копирование одного signal в другой через effect создаёт риски задержки и циклов записи, которых нет у computed.

Зачем это спрашивают: Сильный ответ использует effect только на императивной границе и сохраняет вычисления декларативными.

Я прочитаю accountId обычным способом, а locale внутри effect через untracked.

  • Отслеживаемое чтение accountId перезапускает effect при смене выбранного аккаунта.
  • untracked(() => locale()) получает текущую локаль, не добавляя её в граф зависимостей.
  • Я не буду использовать untracked для сокрытия реальной зависимости, иначе синхронизируемый результат устареет.

Зачем это спрашивают: Интервьюер оценивает точное управление динамическими зависимостями signals, а не бездумное применение untracked.

componentssignalstemplates

Я экспортирую required signal input для dataset и signal input с transform для precision.

  • input.required<Dataset>() превращает отсутствие значения в ошибку типов шаблона и даёт внутреннему коду Signal<Dataset>.
  • Input transform преобразует строковый атрибут в ограниченное число на границе компонента при каждом обновлении binding.
  • Внутренние computed values получают серии графика из этих inputs без копирования в ngOnChanges.

Зачем это спрашивают: Интервьюер проверяет актуальные контракты signal inputs, преобразование и дизайн производного состояния.

components

Я экспортирую model<DateRange>(), если двусторонняя привязка является намеренной частью контракта компонента.

  • Вызов range.set или range.update меняет локальное состояние и отправляет родителю соответствующее событие rangeChange.
  • Значение только для чтения должно остаться input(), потому что model даёт дочернему компоненту право записи.
  • Для компонента в роли form control валидация и touched-состояние всё равно требуют контракта Angular forms.

Зачем это спрашивают: Интервьюер оценивает, когда model inputs выражают реальное общее владение, а когда излишне открывают мутацию.

Я буду обновлять его через уведомления, распознаваемые Angular, а не мутацию незамеченного поля.

  • Изменённый через Angular input, связанный template или host listener и ComponentRef.setInput могут уведомить view.
  • Обновление прочитанного шаблоном signal, emission AsyncPipe или ChangeDetectorRef.markForCheck также планируют проверку.
  • Мутация существующего input-объекта внутри произвольного callback сохраняет ссылку и не даёт надёжного уведомления.

Зачем это спрашивают: Интервьюер проверяет точную семантику уведомлений OnPush вместо мифа, что важны только изменения inputs.

angularsignalschange-detection

Я добавлю provideZonelessChangeDetection() при bootstrap и удалю Zone.js из polyfills приложения.

  • Записи в signals, читаемые шаблонами, emissions AsyncPipe, связанные listeners, setInput и markForCheck дают распознаваемые уведомления.
  • Сторонние callbacks оборачиваются на одной границе адаптера, который записывает signal или отмечает владеющий view.
  • Тесты ожидают фактическую async-операцию или отрендеренное состояние, а не стабилизацию Zone.js.

Зачем это спрашивают: Сильный ответ рассматривает zoneless как явную модель уведомлений, а не переключатель производительности.

Я уберу позднюю мутацию и сделаю title стабильным до проверки завершённого прохода Angular.

  • Ошибка означает, что binding вернул одно значение при проверке и другое во время development-прохода верификации.
  • Title, производный от inputs, находится в computed или более ранней инициализации, а пользовательские изменения происходят в последующем event handler.
  • Вызов detectChanges или перенос записи в timer маскирует проблему владения вместо исправления потока данных.

Зачем это спрашивают: Интервьюер проверяет понимание инварианта ошибки и исправление причинности вместо её подавления.

rxjssignalshttp

Я оставлю текущие фильтры и производное UI-состояние в signals, а время запросов в одном RxJS pipeline.

  • toObservable один раз преобразует signal фильтра, после чего debounceTime и switchMap реализуют отмену устаревших запросов.
  • toSignal один раз преобразует итоговую read model для шаблона с явным начальным состоянием.
  • Повторные преобразования в отдельных компонентах создадут неясное владение подписками и дубли холодной работы.

Зачем это спрашивают: Интервьюер оценивает осознанную границу взаимодействия, сохраняющую семантику signals и потоков.

Я добавлю debounce и использую switchMap, потому что каждый новый запрос заменяет предыдущий.

  • switchMap отписывается от устаревшего внутреннего Observable HttpClient при появлении нового запроса.
  • distinctUntilChanged не позволяет повторно запрашивать одинаковую нормализованную строку.
  • Ответ обновляет состояние только последнего запроса, поэтому медленный старый ответ не перезапишет новый результат.

Зачем это спрашивают: Интервьюер проверяет, следует ли политика отмены продуктовому требованию о последнем результате.

Я использую concatMap, потому что принятую ревизию нельзя отменить или переставить.

  • Каждая ревизия ждёт завершения Observable предыдущего сохранения, прежде чем запустить свой запрос.
  • Очередь нужно ограничить через debounce или объединение снимков, если пользователь создаёт ревизии быстрее, чем API их сохраняет.
  • Ошибка внутреннего сохранения обрабатывается внутри projection, чтобы один сбой не завершил навсегда последующие сохранения.

Зачем это спрашивают: Сильный ответ выбирает упорядоченную очередь и учитывает её рост при использовании concatMap.

auth

Я использую exhaustMap, потому что первое нажатие владеет окном авторизации, а пересечения нужно игнорировать.

  • Пока внутренний запрос активен, exhaustMap отбрасывает последующие emissions кликов вместо их отмены или постановки в очередь.
  • UI также отключает кнопку для обратной связи, но семантика оператора остаётся защитой корректности.
  • Запрос всё равно передаёт idempotency key, потому что подавление кликов на клиенте не гарантирует корректность платежа.

Зачем это спрашивают: Интервьюер оценивает точную семантику пересечений и понимание того, что RxJS не является backend-границей корректности.

Закрытые вопросы

  • 21

    Экран загрузки может отправить 100 файлов, но API допускает только четыре одновременные загрузки; какую RxJS mapping policy реализовать?

    rxjsapiconcurrency
  • 22

    Роуту нужны текущее значение пользователя, одноразовое событие refresh, три последних сообщения валидации и один финальный результат экспорта; какие типы Subject подходят?

    rxjsvalidation
  • 23

    Dashboard shell подписывается на WebSocket и должен закрыться при каждом уходе shell из outlet; как связать teardown с жизненным циклом Angular?

    angularwebsockets
  • 24

    Live-поиск должен продолжать работу после одного HTTP 500; где разместить catchError относительно switchMap?

    rxjshttp
  • 25

    Шесть виджетов потребляют один pricing-поток уровня роута, а исходный WebSocket должен отключиться без подписчиков; как разделить поток?

    pricingwebsockets
  • 26

    На странице отчёта есть live-фильтр, три одноразовых стартовых запроса и кнопка refresh, которой нужен последний фильтр; какие combination operators назначить?

  • 27

    Экран телеметрии получает 5000 событий в секунду, но может перерисовываться 60 раз в секунду и отправлять batches каждые 100 мс; как контролировать давление?

    renderingbatch
  • 28

    Angular-платформе из 20 доменов нужны междоменные команды с трассировкой через actions, а состояние wizard исчезает при навигации; выбрать classic NgRx Store или SignalStore для каждого?

    angularstate-managementsignals
  • 29

    Lazy-роут обращений владеет 200 000 нормализованных claims, которые не читает ни один другой роут; как зарегистрировать NgRx feature?

    state-managementnormalization
  • 30

    NgRx-effect заказов обрабатывает 50 команд в секунду и нуждается в текущей политике аккаунта; что положить в action, а что прочитать через concatLatestFrom?

    state-management
  • 31

    Дашборд пересчитывает view model на 50 000 строк при несвязанных actions; как переделать NgRx selectors?

    state-management
  • 32

    Десять экранов редактируют одних и тех же 300 000 клиентов по ID; хранить отдельные массивы для экранов или использовать NgRx Entity?

    state-management
  • 33

    SignalStore роута нужен аутентифицированный account из classic NgRx Store и локальное состояние выбора; как избежать двух источников истины?

    state-managementsignals
  • 34

    Pricing-фича из пяти компонентов имеет локальные фильтры, server requests и не имеет потребителей за пределами роута; вводить classic NgRx Store?

    componentsstate-managementpricing
  • 35

    У публичного Angular-магазина 2 миллиона посещений в месяц; какие точные Core Web Vitals сделать критериями релиза?

    angularweb-vitals
  • 36

    У клиентского портала shell размером 250 KB в сжатом виде и двенадцать lazy-роутов по 120 KB; обычно пользователь следующим открывает один из двух роутов, что предзагрузить?

  • 37

    Виджет отзывов ниже первого экрана весит 180 KB, и до него доходят только 30 процентов посетителей; какие @defer triggers выбрать?

  • 38

    Deferred-панель рекомендаций имеет высоту 420 px, а её placeholder сжимается до 40 px перед загрузкой; как предотвратить layout shift?

    web-vitals
  • 39

    На сайте 30 000 стабильных help-страниц, 2000 свежих публичных страниц товаров и приватный дашборд; какой modern @angular/ssr render mode назначить каждому семейству роутов?

    ssrangular
  • 40

    В server-rendered статье есть интерактивный опрос ниже первого экрана, и пользователь может нажать его до загрузки кода; как его гидратировать?

  • 41

    SSR-страница аккаунта делает три GET-запроса с пользовательскими данными; как не повторять их в браузере и не раскрыть данные другому пользователю?

    ssr
  • 42

    Server-rendered роут карты читает window при создании, а его HTML зависит от locale cookie; как сделать рендер детерминированным?

    htmlcookies
  • 43

    Provider приложения и provider поддерева компонента связывают один token; какой экземпляр должна получить директива внутри этого поддерева?

    componentsdirectivestokens
  • 44

    Четыре платёжных плагина должны регистрировать validators без импорта друг друга; как смоделировать DI-контракт и время жизни?

    validation
  • 45

    Сборка библиотеки проходит TypeScript, но шаблон потребителя передаёт string в number input; какие стадии компиляции Angular должны это найти?

    angulartemplatestypescript
  • 46

    Библиотека компонентов поддерживает три major-версии Angular, а потребители импортируют только 20 из 200 компонентов; как упаковать её для совместимости и tree shaking?

    componentsangulartree-shaking
  • 47

    Пять команд работают в одном Angular-репозитории, выпускаются вместе раз в неделю и не требуют независимого деплоя; вводить Module Federation?

    angularfederationdeployment
  • 48

    Host Module Federation деплоится раз в месяц, а три Angular remote ежедневно; какой version contract нужен для общих Angular-пакетов?

    angularfederationdeployment
  • 49

    В Nx workspace 60 Angular-проектов в billing, identity и catalog; как запретить UI-библиотекам обращаться к data-access другого домена?

    angularmonorepo
  • 50

    CI для 60 проектов Nx занимает 45 минут, хотя обычное изменение затрагивает две библиотеки; как использовать affected и cache без устаревших результатов?

    monorepocaching
  • 51

    На торговом экране число проверок компонентов за tick выросло с 1 400 до 9 200, а INP с 180 до 480 мс; production должен оставаться доступным во время диагностики. Что вы сделаете?

    components
  • 52

    Angular DevTools показывает проверку одной из 600 строк таблицы за 95 мс, но Chrome Performance фиксирует 260 мс на layout; в этом спринте можно менять только компонент строки. Как действовать?

    componentsangularperformance
  • 53

    После перевода 80 карточек на OnPush цены зависли у 7% пользователей, хотя WebSocket по-прежнему получает 20 сообщений в секунду; откатывать все 80 карточек нельзя. Как исправить?

    websockets
  • 54

    Live-grid на 12 000 строк после сортировки каждые 5 секунд падает с 55 до 18 fps, потому что @for использует track по $index; виртуализацию DOM нельзя выпустить в этом месяце. Что изменить?

    griddomindexes
  • 55

    Итог checkout показывает старую сумму 1 кадр после платёжного callback через 2 000 мс, а в development воспроизводится ExpressionChangedAfterItHasBeenCheckedError; добавлять setTimeout запрещено. Как исправить поток?

    callbacks
  • 56

    Heap растёт со 180 до 620 МБ после 30 переходов между двумя роутами, и каждый визит добавляет одного RxJS-подписчика; общий API-сервис должен остаться в root scope. Как найти и исправить утечку?

    rxjsapidata-structures
  • 57

    После 40 открытий и закрытий modal Chrome показывает 40 detached-деревьев dialog, а heap вырос на 96 МБ; библиотеку overlay нельзя заменить в этом релизе. Как локализовать проблему?

    data-structures
  • 58

    Route-сервис использует takeUntilDestroyed, но удерживает 25 компонентов редактора после 25 переходов, потому что его DestroyRef взят из кешируемого EnvironmentInjector роута; route reuse нужно сохранить. Что изменить?

    componentsrxjscaching
  • 59

    Отчёт размером 50 МБ остаётся в памяти через 15 минут после закрытия последнего viewer, потому что root-сервис использует shareReplay(1); новым viewers всё ещё нужен один кешированный результат на 60 секунд. Как переделать?

    rxjscaching
  • 60

    Каждое из 6 переподключений добавляет ещё один WebSocket, поэтому одна котировка приходит 7 раз; сервер разрешает только 1 соединение на аккаунт, а автоматический reconnect нужно сохранить. Как исправить владение?

    ownershipwebsockets
  • 61

    Релиз увеличил сжатый initial bundle с 310 до 690 КБ, а mobile LCP с 2,4 до 4,1 секунды; новый график должен остаться доступным сегодня. Как действовать?

  • 62

    Импорт utility размером 90 КБ превращается в 410 КБ в initial chunk, а LCP ухудшается на 0,9 секунды; заменять зависимость нельзя ещё 2 недели. Что проверить?

    dependencies
  • 63

    Lazy admin route добавил 280 КБ к initial bundle размером 420 КБ после одного изменения общего barrel, хотя его посещают только 3% сессий; URL роутов менять нельзя. Как восстановить split?

    sessions
  • 64

    Панель аналитики в @defer всё равно попадает в initial chunk размером 760 КБ и добавляет 1,2 секунды к LCP; trigger должен остаться on viewport. Почему split не сработал?

    css
  • 65

    Виджет отзывов на 240 КБ появляется через 4 секунды и создаёт CLS 0,22, когда @defer заменяет placeholder высотой 48 px; загружать его eagerly нельзя. Что изменить?

  • 66

    Zone.js запускает 1 100 ticks в минуту на dashboard, хотя UI затрагивают только 60 обновлений цены; таймер поставщика с периодом 50 мс удалить нельзя. Как сократить работу?

    procurement
  • 67

    После включения provideZonelessChangeDetection для 10% трафика callback карты обновляет координаты 8 раз в секунду, но marker зависает; глобально возвращать Zone.js нельзя. Что исправить?

    callbacks
  • 68

    Приложение на 140 роутов улучшило INP на 14% в zoneless-пилоте, но 9 из 70 сторонних workflows пропускают обновления; релизное окно составляет 3 недели. Продолжать?

    change-detectiondependencies
  • 69

    Hydration mismatch вырос с 0,1% до 6% в 24 SSR-локалях после релиза с форматированием времени и генерацией ID карточек; отключать SSR запрещено. Как сделать первый render детерминированным?

    hydrationssr
  • 70

    SSR-страница аккаунта при 200 запросах в секунду передаёт 3 API-ответа одного пользователя в другой запрос; TransferState должен по-прежнему предотвращать повторные browser fetches. Как изолировать данные?

    ssrapi
  • 71

    SSR-страница товара остаётся пустой у 12% мобильных пользователей, потому что constructor читает window, а график меняет DOM напрямую до hydration; график должен оставаться индексируемым. Что изменить?

    domhydrationssr
  • 72

    NgRx effect отправляет 24 запроса на 12 нажатий клавиш, а старый ответ перезаписывает новый результат; API менять нельзя. Какую гонку исправить?

    state-managementapi
  • 73

    Effect автосохранения теряет 3 из 10 изменений, потому что switchMap отменяет saves, а backend принимает только 1 запись одновременно и обязан сохранить каждую ревизию. Что использовать?

    rxjs
  • 74

    Одни и те же 80 000 товаров хранятся в NgRx Entity и feature SignalStore, удваивая heap до 340 МБ; 14 экранам нужны локальные фильтры, но одна каноническая цена. Как убрать дублирование?

    state-managementsignalsdata-structures
  • 75

    Selector для 60 000 заказов выполняется 420 раз при 1 изменении фильтра, потому что потребители создают selector factories в шаблонах; API компонентов нельзя менять в этом спринте. Как вернуть memoization?

    componentstemplatesapi
  • 76

    Оптимистичное удаление NgRx скрывает 1 из 500 счетов, API отвечает 409, но счёт не возвращается; заново запрашивать все 500 записей слишком дорого. Как выполнить rollback?

    state-managementapilocking
  • 77

    NgRx effect оплаты списывает деньги дважды после 2 быстрых кликов, потому что mergeMap запускает 2 запроса; UI должен оставаться отзывчивым, а обновление API будет только через 6 недель. Что изменить сейчас?

    responsivestate-managementrxjs
  • 78

    Один NgRx load action запускает 3 HTTP-запроса и 3 success actions после 4 входов в фичу; по правилам effects регистрируются только один раз. Как найти дублирование?

    state-managementhttp
  • 79

    Три вызова toSignal над одним cold-потоком отчёта создают 3 загрузки по 18 МБ; результат нужен 9 компонентам под одной route shell, а отмена при уходе shell должна сохраниться. Как исправить?

    componentsresilience
  • 80

    NgRx effect кеширует tenant ID при открытии фичи, а save action через 500 мс после переключения аккаунта пишет предыдущему клиенту; расширять контракт action в этом релизе нельзя. Как убрать устаревшее чтение?

    state-managementcaching
  • 81

    За 8 недель нужно перевести 120 роутов с NgModules на standalone, при этом один rollback может затрагивать не больше 2 роутов, а семантика providers не должна измениться. Как выстроить работу?

    modulesstandalone-componentsmigrations
  • 82

    После перевода 35 NgModules на standalone состояние checkout переживает 6 повторных входов в роут вместо сброса; rollback ограничен последними 5 модулями. Какую потерю семантики проверить?

    modulesstandalone-componentsrollback
  • 83

    За 10 недель нужно перевести RxJS-состояние 180 компонентов на signals, сохранив всю семантику отмены и ошибок и ограничив rollback 10 компонентами. Как спланировать?

    componentsrxjssignals
  • 84

    После миграции 20 поисковых компонентов на signals в 4 компонентах появляются устаревшие HTTP-результаты, потому что effect заменил switchMap; остальные 16 откатывать нельзя. Как исправить?

    componentssignalsrxjs
  • 85

    Module Federation remote на Angular 21 показывает пустой роут в host на Angular 20 для 18% сессий; remotes деплоятся ежедневно, а host ежемесячно. Как восстановить работу?

    angularfederationdeployment
  • 86

    Минифицированная production-сборка показывает пустой экран у 3 200 пользователей, но source maps доступны только error service, а rollback удалит 2 несвязанных исправления. Как локализовать сбой?

    source-mapsbuildrollback
  • 87

    Nx remote cache сообщает hit после изменения tsconfig paths, но 11 Angular-библиотек используют устаревший JavaScript, а 6 тестов ошибочно проходят; навсегда отключать cache нельзя. Что исправить?

    angularmonorepocaching
  • 88

    Nx affected пропускает 9 Angular-потребителей после изменения сгенерированной OpenAPI-схемы, сокращая CI с 28 до 9 минут, но выпуская устаревшие clients; цель 9 минут нужно сохранить. Как исправить граф?

    angularmonoreposchema
  • 89

    После обновления design system успешное завершение с клавиатуры упало с 92% до 61% в 14 dialogs из-за ухода focus; откатывать остальные 7 исправлений запрещено. Как устранить регрессию?

    system-designdesignsoft-skills
  • 90

    Zoneless-миграция сделала 37 из 1 800 async-тестов flaky, потому что они полагаются на fixture.whenStable(); возвращать Zone.js в production-код нельзя. Как мигрировать тесты?

    flakyfixturesmigrations
  • 91

    Middle-инженер предлагает memoization всех 260 компонентов после роста INP до 360 мс, но Angular DevTools показывает 8 400 проверок из-за 1 родительского signal; до релиза есть 2 парные сессии. Как его менторить?

    componentsangularsignals
  • 92

    Junior допустил 2 RxJS-утечки за 6 недель, а последняя удерживает 70 компонентов после навигации; на менторство можно потратить 3 часа, не забирая исправление себе. Что делать?

    componentsrxjsmentoring
  • 93

    Pull request меняет switchMap на mergeMap в 4 NgRx effects, и тесты проходят, но один медленный ответ может перезаписать новый поиск; review нужно завершить за 45 минут. Как действовать?

    state-managementrxjssoft-skills
  • 94

    Инженер впервые руководит standalone-миграцией 16 роутов, а пилот случайно поднял 3 providers в root; rollback должен оставаться в пределах 1 роута. Как помочь восстановлению?

    standalone-componentsmigrationsrollback
  • 95

    Reviewer одобрил dialog, который проходит 24 unit-теста, но удерживает keyboard focus только в 2 из 5 путей закрытия; релиз через 1 день, а визуальный редизайн запрещён. Что попросить исправить?

    unit
  • 96

    Новый автор тестов использует setTimeout(500) в 18 async-тестах, из-за чего flaky rate CI достиг 7%, а время выросло на 9 минут; фичу нужно merge за 2 дня. Как помочь и разблокировать?

    mentoringasynctesting
  • 97

    Pull request добавляет 330 КБ к initial bundle размером 460 КБ и ухудшает lab LCP на 1,4 секунды, но автор утверждает, что tree shaking исправит production; budget роута составляет 500 КБ. Какие доказательства нужны?

    code-reviewtree-shaking
  • 98

    Коллега исправляет 11 hydration mismatches, оборачивая random IDs в isPlatformBrowser, но SSR теперь показывает пустые карточки 4 секунды; patch должен сохранить SEO-контент. Как провести review и объяснить исправление?

    hydrationssr
  • 99

    Production-инцидент вызвал eager import, который втянул lazy-фичу на 270 КБ в shell, хотя изменение одобрили 6 reviewers; в этом квартале можно добавить только 1 автоматический guard. Какой?

    incidentsrouting
  • 100

    Три инцидента за 60 дней произошли из-за неверных RxJS flattening operators в 12 effects, а команда может потратить на профилактику только 1 день и не хочет запрещать mergeMap. Что внедрить?

    rxjsincidents