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.


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ą .


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

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.


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

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.


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.