Otázky k pohovoru; front-end vývojár
Otázky k pohovoru: front-end vývojár
Tento repozitár obsahuje rad otázok, ktoré môžete položiť pri pohovore kandidátovi na pozíciu front-end vývojár a overiť si tak jeho znalosti v tomto odbore. Nie je zamýšľané položiť všetky tieto otázky (ich korektné zodpovedanie by trvalo hodiny), bohato postačí len určitú časť vyhovujúcu vašim potrebám.
Za prečítanie stojí tiež Baseline For Front-End Developers (anglicky) od Rebecci Murphey.
Poznámka: Majte na pamäti, že tieto otázky majú viesť skôr k diskusii na danú tému a prezradiť tak niečo viac o schopnostiach daného vývojára, než aby boli zodpovedané jedným slovom alebo vetou.
Obsah
- Pôvodní prispievatelia
 - Všeobecné otázky
 - HTML otázky
 - CSS otázky
 - JS otázky
 - jQuery otázky
 - Otázky z kódu
 - Zábavné otázky
 - Ďalšie zaujímave referencie
 
[⬆] Pôvodní prispievatelia:
Väčšina otázok bola prevzatá z oksoclap pôvodne vytvoreného Paulom Irishom (@paul_irish) a následne doplnená týmito osobami:
- @bentruyman - http://bentruyman.com
 - @cowboy - http://benalman.com
 - @ajpiano - http://ajpiano.com
 - @SlexAxton - http://alexsexton.com
 - @boazsender - http://boazsender.com
 - @miketaylr - http://miketaylr.com
 - @vladikoff - http://vladfilippov.com
 - @gf3 - http://gf3.ca
 - @jon_neal - http://twitter.com/jon_neal
 - @wookiehangover - http://wookiehangover.com
 - @iansym - http://twitter.com/iansym
 
[⬆] Všeobecné otázky:
- Čo ste sa naučili včera/minulý týždeň nové?
 - Čo vás vzrušuje alebo zaujíma na kódovaní?
 - Povedzte niečo o vašom obľúbenom vývojovom prostredí (operačný systém, editor, prehliadač, nástroje, …).
 - Opíšte ako postupujete pri vytváraní novej webovej stránky.
 - Dokážete vysvetliť rozdiel medzi pozvoľným degradovaním (graceful degradation) a postupným vylepšovaním (progressive enhancement)?
* Body navyše za opis detekcie pokročilej funkcionality - Vysvetlite pojem “sémantické HTML”.
 - Ako by ste optimalizovali zdroje (obrázky, JS, CSS, …) webovej stránky?
* K dispozícii je celý rad optimalizácií napr.:
* spájanie súborov
* minifikácia súborov
* CDN hosťovanie
* caching, … - Prečo je lepšie posielať zdroje webovej stránky z viacerých domén?
* Koľko súborov môže z danej domény sťahovať prehliadač naraz? - Vymenujte tri spôsoby ako znížiť dobu nahrávania webovej stránky (vnímanú alebo skutočnú dobu nahrávania).
 - Ak nastúpite do projektu, kde sa namiesto odsadzovania tabulátormi používajú medzery, čo urobíte?
* Navrhnutie, že projekt by mohol využívať niečo ako EditorConfig (http://editorconfig.org)
* Prispôsobenie sa konvencii (ale zostať konzistentný).
*issue :retab ! command - Napíšte jednoduchú stránku so slideshow.
* Body navyše pokiaľ nepoužíva JS. - Aké nástroje používate pre testovanie rýchlosti vášho kódu?
* Profiler, JSPerf, Dromaeo - Ak by ste sa chcel/chcela tento rok naučiť jednu novú technológiu, ktorá by to bola?
 - Vysvetlite dôležitosť štandardov a štandardizačných orgánov.
 - Čo to je FOUC? Ako je možné sa vyhnúť FOUC?
 
[⬆] HTML otázky:
- Čo robí 
doctype? - Aký je rozdiel medzi štandardným a tkz. quirks módom?
 - Aké sú obmedzenia pri poskytovaní XHTML stránok?
* Existuje nejaký problém pri poskytovaní stránok akoapplication/xhtml+xml? - Ako poskytujete stránku s viacjazyčným obsahom?
* Na čo všetko si musíte dať pozor pri vytváraní viacjazyčnej stránky? - K čomu sú dobré atribúty 
data-? - Uvažujte o HTML5 ako o otvorenej platorme. Aké sú základné stavebné kamene HTML5?
 - Opíšte rozdiel medzi cookies, sessionStorage a localStorage.
 
[⬆] CSS otázky:
- Opíšte čo robí a na čo je dobrý “reset” CSS súbor.
 - Opíšte obtekanie (floats) a ako funguje.
 - Popíšte rôzne techniky pre zastavenie obtekania (clear fixing) a povedzte, ktoré sa hodia v ktorom kontexte.
 - Vysvetlite, čo to sú CSS sprites a ako by ste ich implementovali.
 - Aká je vaša obľúbená technika pre nahrádzanie obrázkov a ktorú a kedy používate?
 - CSS property hacks, podmienené vkladanie .css súborov alebo niečo ďalšie?
 - Ako poskytujete stránky pre funkcionálne/vlastnosťami obmedzený prehliadač?
* Akú techniku/proces používate? - Aké sú spôsoby pre zneviditeľnie obsahu (a zachovanie jeho dostupnosti pre čítačky)?
 - Použili ste niekedy grid systém a ak áno, ktorý uprednostňujete?
 - Použili ste niekedy mediálne selektory (media query) alebo špecifický layout/CSS pre mobilné zariadenia?
 - Máte nejaké skúsenosti so štýlovaním SVG?
 - Ako optimalizujete stránky pre tlač?
 - Aké sú zásady pre písanie efektívneho CSS?
 - Aké sú výhody/nevýhody použítia CSS preprocesorov (SASS, Compass, Stylus, LESS)?
* Popíšte, čo sa Vám na CSS preprocesoroch, ktoré ste použili, páči/nepáči. - Ako by ste implementovali návrh webovej stránky, ktorá používa neštandardné rezy písma?
* Webfonts (služby typu: Google Webfonts, Typekit, …) - Vysvetlite ako prehliadač určuje, ktorý element zodpovedá CSS selektoru.
 - Vysvetlite vaše chápanie box modelu a ako poviete pomocou CSS prehliadaču, aby váš layout vykreslil v odlišnom box modele
 
[⬆] JS otázky:
- Vysvetlite delegáciu udalostí.
 - Vysvetlite ako funguje 
thisv JavaScripte. - Vysvetlite ako funguje prototypová dedičnosť.
 - Ako testujete JavaScript?
 - AMD vs. CommonJS?
 - Čo je hashovacia tabuľka?
 - Vysvetlite, prečo nasledujúce volanie nebude fungovať ako IIFE : 
function foo(){ }();.
* Čo musíte zmeniť, aby volanie zafungovalo ako IIFE? - Vysvetlite rozdiel medzi premennou, ktorá je 
null,undefinedaleboundeclared?
* Akým spôsobom by ste overili tieto jednotlivé stavy? - Čo to je “closure” a ako/prečo by sme ich mali používať?
 - Aké je typické využitie pre anonymné funkcie?
 - Vysvetlite “JavaScript module pattern” a kedy by ste ho mali použiť.
* Body navyše za zmienku o čistých menných priestoroch.
* Čo ak sú vaše moduly bez menného priestora? - Ako organizujete váš kód? (module pattern, klasická dedičnosť?)
 - Aký je rozdiel medzi natívnymi a hostiteľskými objektami?
 - Rozdiel medzi:
 
function Person(){}
var person = Person()
var person = new Person()- Aký je rozdiel medzi 
.calla.apply? - Aký je rozdiel medzi 
undefinedanull? - Vysvetlite 
Function.prototype.bind. - Kedy optimalizujete váš kód?
 - Vysvetlite, ako funguje dedičnosť v JavaScripte.
 - Kedy by ste použili 
document.write()?
* Väčšina generovaných reklám stále používa tento prístup aj napriek tomu, že je to dlhodobo odsudzované. - Aký je rozdiel medzi detekciou vlastností, odvodením vlastností a použitím UA reťazca?
 - Vysvetlite AJAX čo najpodrobnejšie to ide.
 - Vysvetlite, ako funguje JSONP (a prečo to nie je naozajstný AJAX).
 - Použili ste niekedy JavaScriptové šablóny?
* Ak áno, ktoré knižnice ste použili (mustache.js, Handlebars, …)? - Vysvetlite “hoisting”.
 - Vysvetlite prebublávanie udalostí.
 - Aký je rozdiel medzi atribútom (attribute) a vlastnosťou (property)?
 - Prečo nie je dobrý nápad rozširovať natívne JavaScriptové objekty?
 - Prečo je dobrý nápad rozširovať natívne JavaScriptové objekty?
 - Aký je rozdiel medzi udalosťami “document load” a “document ready”?
 - Aký je rozdiel medzi 
==a===? - Vysvetlite, akým spôsobom získate parameter z URL zadaného v okne prehliadača.
 - Vysvetlite JavaScriptové pravidlo rovnakého pôvodu (same-origin policy).
 - Opíšte prístupy dedenia v JavaScripte.
 - Nasledujúci kód upravte tak, aby fungoval:
 
[1,2,3,4,5].duplicate(); // [1,2,3,4,5,1,2,3,4,5]- Opíšte stratégiu pre memorizáciu (odstránenie opakovaných výpočtov) v JavaScripte.
 - Prečo sa hovorí ternárny operátor, čo označuje slovo ternárny?
 - Čo je označované ako “arita” funkcie?
 - Čo znamená 
"use strict";? Aké sú výhody a nevýhody použitia? 
[⬆] jQuery otázky:
- Vysvetlite reťazenie (chaining).
 - Vysvetlite odkladanie (deferreds).
 - Aké poznáte a viete implementovať optimalizácie špeciálne pre jQuery?
 - Čo robí 
.end()? - Ako a prečo by ste váš “event handler” zaopatrili menným priestorom?
 - Vymenujte štyri rôzne typy hodnôt, ktoré môžete odovzdať ako vstupný parameter metód v jQuery.
* selektor (reťazec), HTML (reťazec), callback (funkcia), HTMLElement, object, polia, polia elementu, jQuery Object, … - Čo to je fronta efektov (alebo fx front)?
 - Aký je rozdiel medzi 
.get(),[]a.eq()? - Aký je rozdiel medzi 
.bind(),.live()a.delegate()? - Aký je rozdiel medzi 
$a$.fn? Alebo len, čo je$.fn? - Zoptimalizujte tento selektor :
 
$(".foo div#bar:eq(0)");- Aký je rozdiel medzi 
.delegate()a.live()? 
[⬆] Otázky z kódu:
modulo(12, 5) // 2Otázka: Implementujte funkciu modulo tak, aby splnila zadanie.
"i'm a lasagna hog".split("").reverse().join("");Otázka: Akú hodnotu vráti uvedený výraz?
Odpoveď:" goh angasal a m’i"
(window.foo || (window.foo = "bar"));Otázka: Akú hodnotu má window.foo?
Odpoveď: “bar” (iba ak window.foo bolo false, inak vráti svojou hodnotu)
var foo = "Hello";
(function() {
    var bar = "World";
    alert(foo + bar);
})();
alert(foo + bar);Otázka: Čo zobrazia uvedené dva alerty?
Odpoveď: “Hello World” a ReferenceError: bar is not defined
var foo = [];
foo.push(1);
foo.push(2);Otázka: Aká je hodnota foo.length?
Odpoveď: 2
[⬆] Zábavné otázky:
- Aká je najúžasnejšia vec, ktorú ste kedy nakódovali, alebo na ktorú ste najviac pyšní?
 - Aké sú vaše obľúbené časti vývojárskych nástrojov, ktoré používate?
 - Máte nejaký vlastný hobby projekt?
 - Aká je Vaša obľúbená vlastnosť Internet Exploreru?