Подходы AsForJS к собесам JS

Собес мечты — это диалог равных, где важна не память, а живая мысль. Любой простой вопрос можно превратить в глубокое путешествие по спецификации.

Суть

AsForJS проводит публичные интервью, в которых разворачивает фундаментальные конструкции JS до уровня спецификации. Цель — не загнать кандидата, а показать, как в той же задаче можно увидеть глубину, недоступную при поверхностном изучении.

Метод: эволюция простой задачи

  • Стартовая задача: программа из одной строки 7
  • Что вернёт? «Семь» — неточный ответ
  • 7 — это numeric literal, statement, который возвращает результат 7
  • Параллель с console.log("Hello World") — каждая часть это вычисляемая конструкция
  • Дальше задача растёт до {valueof}+{} и Promise

Типичные вопросы и подходы

console.log("Hello World")

  • console.log — это property accessor
  • (...) — это callable expression
  • "Hello World" — string literal, статemenт
  • ; — empty statement и разделитель
  • Точка с запятой обязательна по спеке (ASI — мифический «авторасстановщик»)

Способы вызова функции без ``

  • ~17-19 способов вызвать функцию без внешнего API
  • Tagged template: console.log`Hello`
  • new — это легальный вызов любой ordinary function (отличие — this)
  • Конструктора как отдельной сущности в JS нет

this

  • this никогда не контекст с точки зрения спеки
  • Особый идентификатор, устанавливается при вызове ordinary function
  • У arrow function this не устанавливается вообще
  • f.call(1)this может быть примитивом (доказательство, что это не контекст)
  • Reference type — артефакт спеки для описания внутренних процессов
  • Метод не «принадлежит» объекту — это идентификатор со ссылкой на функцию

Окружения вместо «области видимости»

  • В спеке — environments, а не scope
  • «Область видимости» — неточный перевод
  • В окружении хранится больше, чем идентификаторы

Принципы хорошего собеса от AsForJS

  • Программист = тот, кто умеет решать проблемы (а не объём заученного)
  • Живая мысль важнее памяти — с ChatGPT по объёму знаний не поспоришь
  • Глубина инструмента = эффективность — кто видит только молоток, видит везде гвозди
  • Доброжелательность к коду студента, критичность к своему — закон Постела

Типы кандидатов

  • Implementer — реализует идеи, в детали лезет при проблеме
  • Researcher — сначала исследует инструмент, потом применяет
  • Оба нужны, у каждого свой профиль и сильные стороны

Антипаттерны

  • Социально-одобряемые ответы вместо понимания
  • Учить «правильные» ответы под собес, не понимая сути
  • Считать console.log = чистый JS Hello World (это внешний API)
  • Игнорировать спецификацию, опираясь только на туториалы

🎓 Источники

  • 🎓 [Нормальное собеседование Николай и я] · AsForJS · 2025-08-14 · YouTube
    • Тезисы: собес мечты — диалог равных; программист = решает проблемы; JS — «сферический конь в вакууме»; 17-19 способов вызова функции; new — обычный вызов с this
  • 🎓 [автор на собеседовании] · AsForJS · 2025-03-02 · YouTube
    • Тезисы: this — не контекст, особый идентификатор; reference type; метод не «прибит» к объекту; окружения вместо scope
  • 🎓 [Лучшая из задач для собеседования] · AsForJS · 2025-02-21 · YouTube
    • Тезисы: эволюция задачи от 7 к головоломке; каждый литерал — вызов алгоритма спеки; comma-оператор vs ;