Перейти к основному содержимому

Мосты практики

Эта страница показывает, как превращать материалы LazyOffer в тренировку навыка.

Если нужно понять, какой навык стоит за вопросом или задачей, используйте таксономию интервью-паттернов.

Формула маршрута:

прочитать урок -> ответить exact q-id -> сделать practice action -> пройти readiness-check -> повторить слабое место.

Frontend: базовое покрытие

НавыкЧитатьОтветитьПрактикаГотовность
JS basics: scope, equality, TDZJS lesson 1Junior JS q-1..q-5Hoisting/TDZ, Prototype, References; затем Two Sum и объяснение let, const, Map, TDZ в решенииЗа 60 секунд объясняете отличие var/let/const, ==/===, null/undefined и предсказываете мини-пример
JS functions and objectsJS lesson 1-2Junior JS q-6..q-8Closure, this, Prototype; затем Get By Path + 3 примера this и closureОбъясняете lexical scope, this, closure и prototype chain через working code
Async runtimeJS lesson 2Junior JS q-9..q-11, Middle q-17..q-18Event Loop и Async Race; затем free-practice: 5 async-log snippets + fetchWithTimeoutAndAbortПредсказываете порядок sync/microtask/macrotask и называете защиту от stale response
Collections and immutable dataJS lesson 3Junior JS q-12..q-17References / Memory; затем Merge Sorted Arrays, Move Zeroes, Group By FieldВыбираете map/filter/reduce, доказываете отсутствие мутации и объясняете shallow/deep boundary
Browser storage and CORSSecurity lesson 2, Web lesson 3Junior JS q-18..q-20, Senior q-11Free-practice: storage risk table + CORS preflight response for dev/stage/prodОтличаете XSS, CSRF, CORS, AuthN/AuthZ и объясняете, почему frontend не чинит CORS
HTML, CSS and renderingHTML/CSS lesson 1-4, Rendering lesson 1-2Senior q-3, Senior q-9, Next.js q-14Browser Rendering: layout change, transform composite, layout thrashing; затем audit one page for semantic structure, responsive layout, LCP/INP risk and a11y issueПоказываете конкретный DOM/layout/performance bug и называете проверку в DevTools
React rendering and effectsReact lesson 1-2Middle q-1..q-5React Effects: cleanup guard, missing dependency; затем component render trace + stale useEffect reproduction; coding drill: First PositionОбъясняете reconciliation, key, effect dependencies, controlled forms and memoization risk
React state and performanceReact lesson 3-4Middle q-6..q-10, Senior q-5..q-7Free-practice: state ownership map for filterable list + optimistic update failure modeНазываете owner state, derived state, Context limits, error boundary limits and rollback strategy
TypeScript boundariesTypeScript lesson 1-4Middle q-13..q-16Free-practice: fetchJson<T>(), DTO -> domain -> UI mapping, discriminated union for async stateОтличаете type safety at compile time from runtime validation at API boundary
Testing frontendTesting lesson 1-4Senior q-16..q-17, Playbook q-7Free-practice: test plan for login form, quality gates, one negative path and one flaky-test hypothesisВыбираете unit/integration/e2e by risk and умеете объяснить, что защищает каждый тест
Tooling and bundle qualityPackage Managers and BundlersBundlers q-1..q-20, Middle q-20Free-practice: bundle growth incident report + CI cache failure triageОбъясняете lockfile, npm ci, tree shaking, code splitting, env handling and release gates

Backend / SQL

НавыкЧитатьОтветитьПрактикаГотовность
SQL query basicsDatabases lesson 2Databases q-2, q-8..q-9Активные клиенты, Три последних заказаПишете SELECT/WHERE/ORDER BY/LIMIT, объясняете стабильный порядок и edge-case с одинаковыми датами
Join and row cardinalityDatabases lesson 1-2Databases q-2, q-5, q-11Клиенты без потери нулевых заказов, Оплаченные заказы без дублейДо запуска предсказываете, какие строки потеряются или размножатся, и выбираете COUNT/COUNT(DISTINCT) осознанно
Aggregation and reportingDatabases lesson 2Databases q-3, q-10, q-19Города с выручкой выше порога, Средний оплаченный чек по городамОтличаете WHERE от HAVING, фильтруете нужные строки до агрегата и не считаете отмененные записи
Cursor and window thinkingDatabases lesson 2Databases q-8..q-10, q-19Следующая страница заказов, Второй заказ пользователя, Накопительная выручкаОбъясняете cursor condition, tie-breaker, ROW_NUMBER и deterministic window order

Backend: интеграция data access

НавыкЧитатьОтветитьПрактикаГотовность
ORM/query-builder decisionNode lesson 2, Databases lesson 2Node q-18, Databases q-10, q-19Города с выручкой выше порога + decision table: ORM include, query builder, raw SQLВы называете query count, expected rows, index, transaction boundary and test before choosing abstraction
N+1 diagnosis in service layerNode lesson 3, Databases lesson 2Node q-19, Databases q-5, Nest q-11Оплаченные заказы без дублей + query-count guard: page size 20 must not create 21 SQL queriesДо оптимизации показываете 1 + N, после - bounded query count, no duplicate rows and no overfetch
Nest repository transaction boundaryNest lesson 4, Databases lesson 3Nest q-11..q-12, Databases q-6, q-15Free-practice: repository transaction checklist for create order + items + stock reserve; then run Клиенты без потери нулевых заказов to verify join reasoningВы отделяете controller/use-case/repository, держите внешние calls вне transaction and define rollback/commit tests
Cache and DB observability loopNode lesson 3, Nest lesson 4Node q-15, Nest q-13..q-14, Databases q-16..q-18Free-practice: cache invalidation table + DB signal map; use Средний оплаченный чек по городам as the expensive read exampleВы связываете cache key, invalidation, query p95, pool usage, hit rate and stale-data risk in one runbook

Как пользоваться картой

  1. Выберите одну строку, а не весь раздел сразу.
  2. Потратьте 25-40 минут на блок Читать.
  3. Ответьте на связанные вопросы до открытия полного ответа.
  4. Сделайте точную задачу в песочнице или named free-practice prompt.
  5. Отметьте результат как ready, partial или not ready.

Ready / Partial / Not Ready

СостояниеEvidence
ReadyВы объясняете механизм, называете production failure mode, проходите practice action и отвечаете на два follow-up
PartialВы знаете определение, но просите подсказки по edge-cases, поведению кода или production risk
Not readyВы повторяете общую формулировку, не предсказываете поведение кода или не можете выбрать practice action

Практика для пробелов

Эти pack'и закрывают места, где пока нет исполняемой песочницы. Делайте их как no-code drills: результатом должен быть конкретный артефакт, который можно проверить по readiness.

DOM/a11y audit pack

Use after: HTML/CSS lesson 1, Rendering lesson 1, Senior q-3, Senior q-9.

Action:

  1. Возьмите одну реальную страницу или компонент: форма, карточка товара, таблица, меню, модалка.
  2. Проверьте landmarks, heading order, label/name у интерактивных элементов, keyboard path, visible focus, responsive overflow, contrast risk, LCP/INP suspects; для performance-части сверяйтесь с Browser Rendering: text update и layout thrashing.
  3. Заполните audit table: area/selector, risk, evidence, fix, verification.
  4. Выберите два фикса: один semantic/a11y, один layout/performance.

Ready when: вы показываете минимум 5 наблюдений, каждое связано с пользовательским риском, и для каждого есть проверка в DevTools, keyboard-only walkthrough или accessibility tree.

React effect/state debug pack

Use after: React lesson 2, React lesson 3, Middle q-3, Middle q-6, Senior q-5, Senior q-6.

Action:

  1. Опишите компонент с search, filters, items, loading, error и useEffect, который делает запрос при изменении query.
  2. Пройдите React Effects: stale response и запишите reproduction: быстрый ввод a -> ab -> abc, медленный ответ на a, быстрый ответ на abc, stale result перетирает экран.
  3. Напишите before/after snippet: в fix должны быть cleanup, AbortController или requestId, корректный dependency list и правило, где живет state.
  4. Сверьте fix через cleanup guard и добавьте state ownership map: server data, local draft, derived data, UI-only state.

Ready when: вы объясняете stale closure, stale response, cleanup timing, dependency tradeoff и почему конкретный state владеет конкретный компонент.

TypeScript boundary pack

Use after: TypeScript lesson 1, TypeScript lesson 4, Middle q-13, Middle q-14, Middle q-16.

Action:

  1. Возьмите API response с минимум одним unknown, null, optional field и enum-like string.
  2. Разделите ApiDto, DomainModel, ViewState.
  3. Заполните mapping table: field, raw shape, domain shape, fallback/error, runtime check.
  4. Опишите fetchJson<T>() как compile-time helper и отдельно runtime guard/decoder как защиту на boundary.
  5. Сделайте discriminated union для async UI state: idle, loading, success, error.

Ready when: вы можете назвать, что TypeScript доказывает на compile time, что он не доказывает после сети, и где появляется runtime validation.

Testing strategy pack

Use after: Testing lesson 1, Testing lesson 4, Senior q-16, Senior q-17, Playbook q-7.

Action:

  1. Выберите feature: login form, checkout step, search results или settings form.
  2. Заполните risk matrix: risk, user impact, unit, integration, e2e, manual/monitoring.
  3. Добавьте минимум один negative path, один boundary case, один accessibility assertion и один flaky-test hypothesis.
  4. Запишите gate: какие проверки блокируют merge, какие идут nightly, какие остаются ручной smoke-проверкой.

Ready when: каждый тест связан с риском, у каждого есть expected assertion, и вы можете объяснить, что этот слой тестов намеренно не покрывает.

Чего еще нет в исполняемой песочнице

Пока в состоянии missing как исполняемая практика:

  1. DOM/a11y sandbox with browser-backed checks.
  2. Component sandbox for effect-lifecycle and render-ownership.
  3. TypeScript type-checking sandbox for DTO/domain boundary tasks.
  4. Test-runner sandbox for quality-gate.

Эта страница намеренно держит эти пункты как no-code drills, пока отдельная задача по песочнице не изменит route behavior and validation.

Следующий шаг

  1. Для ежедневного плана используйте 7/14/30-дневные маршруты.
  2. Для распознавания паттернов используйте таксономию интервью-паттернов.
  3. Для ремонта слабого навыка выберите самую слабую строку на этой карте.
  4. Для полировки ответа используйте Playbook ответов.