Про інтерв'ю щодо програміста JavaScript (з відповідями) [закрито]


131

Які хороші питання, щоб визначити, чи справді заявник є розробником Pro JavaScript (на стороні браузера)?

Питання, які можна розрізнити, якщо хтось не є спеціальним JavaScript-програмістом, але справді займається професійною розробкою JavaScript, орієнтованою на об'єкти, багаторазовим використанням та ремонтом.

Будь ласка, надайте відповіді , щоб проміжні та спеціальні JavaScript-програмісти могли взяти інтерв'ю у когось більш досвідченого, а відповіді на досить небагато із цих розширених питань уникнуть мене. Будь ласка, уникайте відкритих питань .

Будь ласка, зберігайте одне запитання / відповідь на відповідь SO для кращого досвіду читання та легшої підготовки до інтерв'ю.


21
Ніколи не проводьте проміжне інтерв'ю розробника JS у когось, хто повинен бути більш просунутим! Це просто божевільно. Нехай хтось кваліфікується для опитування.
Джеймс

22
@JP - тож якщо ваш старший розробник кине, то ви просто накрутили?
tvanfosson

15
@JP Я намагаюся найняти когось кращого за себе. Це невеликий запуск, тому я не маю кращого вибору, якщо не скористаюся зовнішньою допомогою ... але тоді мені доведеться взяти інтерв'ю з ним;)
Janusz Skonieczny

13
@JP: Якщо ви просто наймаєте людей, які є максимум такими ж хорошими, як і ви, одного дня вас оточить дурні ідіоти. Завжди намагайтеся найняти когось, хто кращий за вас.
Gumbo

1
@ Nick: Проблема в тому, що це питання занадто широке за обсягом і не має правильної відповіді (див. Коментарі faq до цього питання). Він добре підходить для публікації в блозі, але не дуже підходить для цього формату запитань та запитань. За старих часів ми могли перейти на інженерію програмного забезпечення , але після численних загроз нанесення тілесних ушкоджень з боку мод програмістів нам довелося змінити свій шлях.
Майкл Майерс

Відповіді:


118

Оскільки JavaScript - це така невелика мова, але з неймовірною складністю, ви повинні мати можливість задати відносно основні питання та дізнатися, чи справді вони такі хороші, виходячи з їхніх відповідей. Наприклад, моє стандартне перше питання щодо оцінки решти інтерв'ю:

У JavaScript в чому різниця між var x = 1і x = 1? Відповідайте стільки ж, скільки деталей, як вам комфортно.

Новачки-програмісти JS можуть мати основну відповідь про місцевих жителів проти глобальних. Хлопці з проміжних JS обов'язково повинні відповісти на це питання, і, мабуть, повинні згадати область функціонального рівня. Кожен, хто називає себе «просунутим» програмістом JS, повинен бути готовим розповідати про місцевих жителів, загальноприйнятих глобальних об єктах, windowоб'єкті, області функцій, підйомі декларацій та ланцюгах областей. Крім того, я хотів би почути про [[DontDelete]], піднімаючи пріоритет (параметри varпроти function) та undefined.

Ще одне добре запитання - попросити їх написати sum()функцію, яка приймає будь-яку кількість аргументів, і повертає їх суму. Потім попросіть їх використовувати цю функцію (без змін) для підсумовування всіх значень у масиві. Вони повинні записати функцію, яка виглядає приблизно так:

function sum() {
  var i, l, result = 0;
  for (i = 0, l = arguments.length; i < l; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1,2,3); // 6

І вони повинні викликати його у своєму масиві так (контекст для цього applyможе бути будь-яким, я зазвичай використовую nullв такому випадку):

var data = [1,2,3];
sum.apply(null, data); // 6

Якщо вони отримали ці відповіді, вони, напевно, знають свій JavaScript. Тоді слід перейти до розпитування про речі, що не стосуються JS, як-от тестування, робочі процеси, контроль версій тощо, щоб з’ясувати, чи добре вони програміст .


4
Гарне питання. Малий нітпік: Я вважаю, ви маєте на увазі "результат повернення" замість "повернення i". Порада: налаштуйте приємне тестове середовище для тестування коду перед публікацією ;-)
MisterMister

4
вау, це дурна помилка. Я перевіряю більшість свого коду на jsFiddle перед публікацією, але не перевіряв цей. Дякую :)
bcherry

5
Функція сума повинна бути стійкою до типів без числа, не викидаючи помилок. Крім того, він повинен мати можливість обробляти числа як рядки для додаткового кредитування.
Абадаба

2
+1 за велику згадку та розбіжність щодо того, щоб дізнатись, чи вони хороші програмісти.
Demonslay335

3
Цей рядок: для (i = 0, l = argument.length; i <l; i ++) є поганим, оскільки аргументи.length будуть оцінені під час кожної ітерації. Якщо ви призначите l = argument.length перед циклом for, то краще. Правильно?
thomallen

94

Основне програмування JS

  • Scope of variable
  • Що таке Associative Array? Як ми ним користуємося?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • Що таке difference between private variable, public variable and static variable? Як ми цього досягаємо в JS?
  • Як add/remove properties to objectу час виконання?
  • Як досягти inheritance?
  • Як це зробити extend built-in objects?
  • Чому extending array is bad idea?

DOM та JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

Різне

  • Graceful Degradation V/s Progressive Enhancement

17
це для найму Дж. С. Гуру.
Андреас

22
Будьте готові, щоб розробник JS сказав щось подібне: JavaScript не має асоціативних масивів. Однак у JavaScript є об'єктні літерали, які можна використовувати як асоціативні масиви. Крім того, до властивостей об’єктів можна отримати доступ, використовуючи або крапкові позначення, або квадратні дужки та рядки.
Крістофер Паркер

8
Це базовий рівень для того, хто назвав би себе "розробником JavaScript". Я думаю, що глибина відповіді полягає в тому, як ти оціниш їх як Гуру чи ні.
Райан Руд

8
Ви маєте на увазі "Прототипне успадкування". Поширена помилка.
чарівник

4
@wizzard ви мали на увазі "типову помилку": p
Нік

24

Запитайте про "це". Це одне хороше питання, яке може бути справжнім тестом розробника JavaScript.


Чи можете ви надати посилання на якусь хорошу статтю?
Януш Сконієчний

2
Я думаю , що це питання допоможе stackoverflow.com/questions/2148451 / ...
Аніл Namde

15


17

(Я припускаю, що ви маєте на увазі JavaScript на стороні браузера)

Запитайте його, чому, незважаючи на його нескінченні знання JavaScript, все ще гарна ідея використовувати існуючі рамки, такі як jQuery, Mootools, Prototype тощо.

Відповідь: хороший код кодерів, великі кодери повторно використовують. Тисячі людино-годин вилили в ці бібліотеки, щоб абстрагувати можливості DOM далеко від конкретних реалізацій браузера. Немає жодних підстав самостійно перебирати всі головні болі DOM у браузері, щоб лише винайти виправлення.


5
@Tim Down: звичайно, але якщо ви знайдете надійний пакет, то майже всі частини пакета будуть переглянуті здібними людьми. І як користувач пакету з відкритим кодом, ви можете вносити виправлення, коли виявляєте помилки, додаючи також свій досвід.
PanCrit

Правда, знайте колесо - але не завжди використовуйте однакові шини для різних місцевостей. Напр. Навіщо використовувати всю вкладку jQuery, коли все, що вам потрібно, - це транспорт Ajax тощо (для вашого проекту) - microjs.com
Алі

1
Відповідь на це питання - це саме питання - чому ми використовуємо IDE, а не простий блокнот для редагування нашого коду? :)
Navin Israni

11

Запитайте їх, як вони гарантують, що їх сторінки продовжують користуватися, коли у користувача вимкнено JavaScript або JavaScript недоступний.

Немає жодного правдивого відповіді, але ви шукаєте відповідь, говорячи про деякі стратегії прогресивного вдосконалення .

Прогресивне удосконалення складається з таких основних принципів:

  • основний контент повинен бути доступним для всіх браузерів
  • основна функціональність повинна бути доступною для всіх браузерів
  • розріджена, семантична розмітка містить весь вміст
  • розширений макет забезпечується зовнішньо пов'язаним CSS
  • посилену поведінку надає [[ненав’язливий JavaScript | ненав’язливий]], зовнішньо пов'язаний JavaScript
  • Налаштування браузера кінцевого користувача дотримуються

1
Найкраще питання, як найняти хлопця на рівні архітектора JS :)
Navin Israni

Перш за все, переконайте, що людині з відключеним JS варто інвестувати в реальну мережу, а не на темну веб. ці користувачі, мабуть, занадто параноїдальні чи не зрозумілі щодо використання браузера та відключили JS помилково, в будь-якому випадку, їхні шанси на конверсію невеликі.
vsync


6

Запитайте "Яку одиницю тестування рамки ви використовуєте? І чому?"

Ви можете вирішити, чи насправді використовувати рамку тестування дійсно потрібно, але розмова може вам сказати багато про те, наскільки досвідчена людина.


1
В якості довідки, QUnit дивовижний: docs.jquery.com/QUnit
Goyuix

0

Проміжні програмісти повинні мати технічне оволодіння своїми інструментами.

якщо він передавав вищезазначені питання технічного телефону на екрані, змусьте його на місці намалювати щось дурне, на зразок коротшого URL-адреси Ajax. потім гриль його на своєму портфоліо. немає дивовижного портфоліо = проміжний розробник у цьому домені, а не той хлопець, якого ви хочете, відповідальний за ваш блискучий новий проект.


4
Портфелі - це поганий показник у кращому випадку - у сучасному світі JS - це ідеально прийнятий інструмент у світі бізнесу, де проекти, ймовірно, перемагають будь-який портфель, який ви можете бачити, і де публічні репости - це не річ.
Ілля Айзеншток

1
@IlyaAyzenshtok ЦЕ є частиною моєї дилеми. Мені важко показати портфоліо, коли 99% моєї роботи є власником / за стіною оплати / внутрішнім ...
Спартак

1
@Spartacus - ви можете зробити знімки екрана і пояснити інтерв'юеру своє правило в ньому і перешкоджати на шляху. що стосується проектів з відкритим кодом, вони є прекрасним способом оцінити людину перед інтерв'ю для коригування питань щодо рівня кодування людини, що спостерігається в проектах.
vsync
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.