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

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

Эта страница показывает, как превращать материалы 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 ответов.