Pytania do rozmowy kwalifikacyjnej z programistą Pro JavaScript (z odpowiedziami) [zamknięte]

131

Jakie są dobre pytania, aby ustalić, czy kandydat jest naprawdę programistą JavaScript (po stronie przeglądarki)?

Pytania, które pozwalają odróżnić, czy ktoś nie jest ad-hoc programistą JavaScript, ale tak naprawdę zajmuje się profesjonalnym programowaniem JavaScript, zorientowanym obiektowo, wielokrotnego użytku i możliwym do utrzymania.

Proszę o udzielenie odpowiedzi , aby średniozaawansowani i ad-hoc programiści JavaScript mogli przeprowadzić rozmowę z kimś bardziej doświadczonym, wymyślając odpowiedzi na kilka z tych zaawansowanych pytań. Unikaj otwartych pytań .

Proszę zachować jedno pytanie / odpowiedź do rozmowy kwalifikacyjnej na każdą odpowiedź SO, aby uzyskać lepsze wrażenia z czytania i łatwiejsze przygotowanie do rozmowy kwalifikacyjnej.

WooYek
źródło
21
Nigdy nie przeprowadzaj wywiadu dla średnio zaawansowanych programistów JS z kimś, kto powinien być bardziej zaawansowany! To po prostu szalone. Poproś kogoś wykwalifikowanego o przeprowadzenie rozmowy.
James,
22
@JP - więc jeśli twój starszy programista zrezygnuje, to po prostu masz przerąbane?
tvanfosson
15
@JP Próbuję zatrudnić kogoś lepszego od siebie. To mały startup, więc nie mam lepszego wyboru, chyba że skorzystam z pomocy z zewnątrz ... ale wtedy musiałbym z nim porozmawiać;)
Janusz Skonieczny
13
@JP: Jeśli zatrudniasz ludzi, którzy są co najwyżej tak dobrzy jak ty, pewnego dnia zostaniesz otoczony przez głupich idiotów. Zawsze staraj się zatrudnić kogoś, kto jest lepszy od ciebie.
Gumbo
1
@Nick: Problemem jest to, że to pytanie jest zbyt szeroki zakres i ma poprawną odpowiedź (patrz FAQ komentarze „w tej sprawie). Dobrze nadaje się do postów na blogu, ale nie jest tak dobrze dostosowany do formatu pytań i odpowiedzi. W dawnych czasach mogliśmy przejść na inżynierię oprogramowania , ale po licznych groźbach obrażeń ciała ze strony modów programistów musieliśmy zmienić nasze sposoby.
Michael Myers

Odpowiedzi:

118

Ponieważ JavaScript jest tak małym językiem, ale ma niesamowitą złożoność, powinieneś być w stanie zadać stosunkowo podstawowe pytania i dowiedzieć się, czy są one naprawdę dobre, na podstawie ich odpowiedzi. Na przykład moje standardowe pierwsze pytanie do oceny reszty wywiadu brzmi:

W JavaScript, jaka jest różnica między var x = 1i x = 1? Odpowiadaj tak dużo lub tak mało szczegółów, jak chcesz.

Początkujący programiści JS mogą mieć podstawową odpowiedź na temat lokalnych i globalnych. Faceci od średniozaawansowanych JS zdecydowanie powinni mieć tę odpowiedź i prawdopodobnie powinni wspomnieć o zakresie na poziomie funkcji. Każdy, kto nazywa siebie „zaawansowanym” programistą JS, powinien być przygotowany na rozmowę o lokalizacjach, domniemanych globalnych, windowobiekcie, zakresie funkcji, podnoszeniu deklaracji i łańcuchach zasięgu. Ponadto chciałbym usłyszeć o [[DontDelete]]pierwszeństwie podnoszenia (parametry vs varvs function) i undefined.

Innym dobrym pytaniem jest poproszenie ich o napisanie sum()funkcji, która przyjmuje dowolną liczbę argumentów i zwraca ich sumę. Następnie poproś, aby użyli tej funkcji (bez modyfikacji) do zsumowania wszystkich wartości w tablicy. Powinni napisać funkcję, która wygląda następująco:

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

I powinni wywołać to na twojej tablicy w ten sposób (kontekst applymoże być dowolny, zwykle używam nullw tym przypadku):

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

Jeśli mają te odpowiedzi, prawdopodobnie znają swój JavaScript. Następnie powinieneś zapytać ich o rzeczy niezwiązane z JS, takie jak testowanie, przepływy pracy, kontrola wersji itp., Aby dowiedzieć się, czy są dobrym programistą .

bcherry
źródło
4
Dobre pytanie. Mały czubek: myślę, że masz na myśli „wynik zwrotu” zamiast „zwrot i”. Porada od specjalistów: przygotuj przyjemne, małe środowisko testowe do testowania kodu przed wysłaniem ;-)
MisterMister,
4
wow, to głupi błąd. Testuję większość swojego kodu na jsFiddle przed wysłaniem, ale nie testowałem tego. Dzięki :)
bcherry
5
Funkcja sumy powinna być odporna na typy nieliczbowe bez generowania błędów. Ponadto powinien być w stanie obsługiwać liczby jako ciągi znaków dla dodatkowego kredytu.
Abadaba,
2
+1 za wspaniałą wzmiankę i oderwanie się od sprawdzenia, czy są dobrym programistą.
Demonslay335
3
Ta linia: for (i = 0, l = arguments.length; i <l; i ++) jest zła, ponieważ arguments.length będzie oceniana w każdej iteracji. Jeśli przypiszesz l = arguments.length przed pętlą for, będzie lepiej. Dobrze?
thomallen
94

Podstawowe programowanie w JS

  • Scope of variable
  • Co to jest Associative Array? Jak tego używamy?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • Co to jest difference between private variable, public variable and static variable? Jak to osiągamy w JS?
  • Jak add/remove properties to objectw czasie wykonywania?
  • Jak to osiągnąć inheritance?
  • Jak to zrobić extend built-in objects?
  • Dlaczego extending array is bad idea?

DOM i JS

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

Różne

  • Graceful Degradation V/s Progressive Enhancement
pramodc84
źródło
17
to dotyczy zatrudnienia JS Guru.
Andreas
22
Przygotuj się na to, że programista JS powie coś takiego: JavaScript nie ma tablic asocjacyjnych. JavaScript ma jednak literały obiektowe, których można używać jak tablic asocjacyjnych. Dostęp do właściwości obiektów można również uzyskać za pomocą notacji z kropkami lub nawiasów kwadratowych i ciągów znaków.
Christopher Parker
8
Są to podstawy dla kogoś, kto nazwałby siebie „programistą JavaScript”. Myślę, że głębia odpowiedzi jest taka, jak oceniasz ich jako guru, czy nie.
Ryan Ore
8
Masz na myśli „dziedziczenie prototypowe”. Powszechny błąd.
wizzard
4
@wizzard, miałeś na myśli „typowy błąd”: p
Nick,
18

(Zakładam, że masz na myśli JavaScript po stronie przeglądarki)

Zapytaj go, dlaczego pomimo jego nieskończonej znajomości JavaScript, nadal dobrym pomysłem jest korzystanie z istniejących frameworków, takich jak jQuery, Mootools, Prototype itp.

Odpowiedź: Dobry kod dla programistów, świetne ponowne wykorzystanie przez programistów. Tysiące roboczogodzin zostało przelanych na te biblioteki, aby wyodrębnić możliwości DOM z dala od implementacji specyficznych dla przeglądarki. Nie ma powodu, aby samodzielnie przechodzić przez wszystkie różne problemy DOM przeglądarki, aby na nowo wymyślić poprawki.

Matt
źródło
5
@Tim Down: z pewnością, ale jeśli znajdziesz pakiet o dobrej reputacji, prawie wszystkie części pakietu zostaną sprawdzone przez zdolnych ludzi. Jako użytkownik pakietu open source możesz zgłaszać poprawki, gdy znajdziesz błędy, dodając również swoją wiedzę.
PanCrit
To prawda, znasz koło - ale nie zawsze używaj tych samych opon do różnych terenów. Na przykład. Po co używać całej biblioteki jQuery, skoro wszystko, czego potrzebujesz, to transport Ajax itp. (Dla twojego projektu) - microjs.com
Ali
1
Odpowiedzią na to pytanie jest samo pytanie - dlaczego używamy IDE, a nie prostego notatnika do edycji naszego kodu? :)
Navin Israni
11

Zapytaj ich, w jaki sposób zapewniają, że ich strony będą nadal użyteczne, gdy użytkownik ma wyłączony JavaScript lub gdy JavaScript jest niedostępny.

Nie ma jednej prawdziwej odpowiedzi, ale szukasz odpowiedzi mówiącej o niektórych strategiach progresywnego ulepszania .

Progresywne ulepszanie składa się z następujących podstawowych zasad:

  • podstawowe treści powinny być dostępne dla wszystkich przeglądarek
  • podstawowe funkcje powinny być dostępne dla wszystkich przeglądarek
  • rzadkie, semantyczne znaczniki zawierają całą treść
  • ulepszony układ jest dostarczany przez zewnętrznie połączony CSS
  • ulepszone zachowanie zapewnia [[Unobtrusive JavaScript | unobtrusive]], zewnętrznie połączony kod JavaScript
  • respektowane są preferencje przeglądarki użytkownika końcowego
WooYek
źródło
1
NAJLEPSZE pytanie, aby zatrudnić gościa JS na poziomie architekta :)
Navin Israni
Przede wszystkim przekonaj mnie, że osoba z wyłączonym JS jest warta zainwestowania w real web a nie dark web. ci użytkownicy są prawdopodobnie zbyt paranoikami lub nie mają pojęcia o korzystaniu z przeglądarki i przez pomyłkę wyłączają JS, tak czy inaczej, ich szanse na konwersję są nikłe lub zerowe.
vsync,
6

Zapytaj „Jakiego frameworka testowania jednostkowego używasz? I dlaczego?”

Możesz zdecydować, czy rzeczywiście korzystanie z frameworka testowego jest naprawdę konieczne, ale rozmowa może ci wiele powiedzieć o tym, jak ekspertem jest dana osoba.

tvanfosson
źródło
1
Jako odniesienie, QUnit jest niesamowity: docs.jquery.com/QUnit
Goyuix
0

średniozaawansowani programiści powinni posiadać biegłość techniczną w zakresie swoich narzędzi.

jeśli zdał powyższe pytania techniczne dotyczące ekranu telefonu, niech od razu naszkicuje coś głupiego, na przykład skracacz adresu URL Ajax. następnie grilluj go w swoim portfolio. brak niesamowitego portfolio = średniozaawansowany programista w tej domenie, a nie facet, którego chcesz zarządzać swoim nowym, błyszczącym projektem.

Dustin Getz
źródło
5
Portfele to w najlepszym razie kiepska miara - w dzisiejszym świecie JS jest narzędziem doskonale akceptowanym w świecie przedsiębiorstw, gdzie projekty prawdopodobnie przebijają wszelkie portfolio, które możesz zobaczyć, a publiczne repozytoria nie są czymś.
Ilya Ayzenshtok
1
@IlyaAyzenshtok TO część mojego dylematu. Trudno mi pochwalić się portfelem, gdy 99% mojej pracy jest zastrzeżona / za ścianą płac / wewnętrzną ...
Spartacus
1
@Spartacus - możesz zrobić zrzuty ekranu i wyjaśnić ankieterowi swoją zasadę i przeszkody po drodze. jeśli chodzi o projekty open source, są świetnym sposobem na ocenę osoby przed rozmową kwalifikacyjną w celu dostosowania pytań do poziomu kodowania osoby widzianego w projektach.
vsync,