Front-end Job Interview Questions - HTML Questions ã®åçéã§ããææ¡ãèšæ£ã®ãã«ãªã¯ãšã¹ãã¯å€§æè¿ã§ãïŒ
DOCTYPE
ã¯äœã®ããã«ãããã®ã§ããïŒ- ã©ã®ããã«ããã°è€æ°ã®èšèªã®ã³ã³ãã³ããå«ãããŒãžãæäŸã§ããŸããïŒ
- å€èšèªãµã€ããèšèšã»éçºããéã«ã¯ãã©ããªããšã«æ³šæãæããªããã°ãªããªãã§ããïŒ
data-
å±æ§ã¯äœã®ããã«äœ¿ãããã®ã§ããïŒ- HTML5 ããªãŒãã³ãŠã§ããã©ãããã©ãŒã ãšããŠèãä»ãšãã«ãHTML5 ãšã¯ã©ããªèŠçŽ ããæããã®ã§ããïŒ
cookie
ãsessionStorage
ãlocalStorage
ã®éããæããŠãã ããã<script>
ã<script async>
ã<script defer>
ã®éããæããŠãã ããã- ãªãäžè¬çã«ãCSSã®
<link>
ã<head></head>
ã®éã«ãJSã®<script>
ã</body>
ã®çŽåã«çœ®ãããšãè¯ããšèšãããŠããã®ã§ããããïŒãããã¹ãã§ãªãäŸå€ãç¥ã£ãŠããŸããïŒ - ããã°ã¬ãã·ãã¬ã³ããªã³ã°ãšã¯äœã§ããïŒ
- img ã¿ã°ã«
srcset
å±æ§ã䜿çšããçç±ã¯ïŒãã®å±æ§ããã€èŠçŽ ãè©äŸ¡ãããšãã«ãã©ãŠã¶ãè¡ãããã»ã¹ã説æããŠãã ããã - HTMLãã³ãã¬ãŒãèšèªãããã€ã䜿çšããçµéšã¯ãããŸããïŒ
DOCTYPE
㯠"document type" ã®ç¥ã§ããããã¯ãæšæºã¢ãŒããšåŸæ¹äºæ(quirks)ã¢ãŒããåºå¥ããããã«HTMLã§äœ¿çšããã宣èšã§ããããããããšãæšæºã¢ãŒãã§WebããŒãžãã¬ã³ããªã³ã°ããããã«ãã©ãŠã¶ã«æ瀺ããŸãã
æèš - ããŒãžã®å
é ã«ã¯ <!DOCTYPE html>
ãè¿œå ããŸãããã
- https://stackoverflow.com/questions/7695044/what-does-doctype-html-do
- https://www.w3.org/QA/Tips/Doctype
- https://quirks.spec.whatwg.org/#history
ã©ã®ããã«ããã°è€æ°ã®èšèªã®ã³ã³ãã³ããå«ãããŒãžãæäŸã§ããŸããïŒ
ãã®è³ªåã¯å°ãææ§ãªã®ã§ãæãäžè¬çãªã±ãŒã¹ãã€ãŸãè€æ°ã®èšèªã§å©çšå¯èœãªã³ã³ãã³ããæäŸããæ¹æ³ãèãããŠãããšããŸãã1ã€ã®ããŒãžå ã®ã³ã³ãã³ãã¯1ã€ã®èšèªã§ã®ã¿è¡šç€ºãããã¹ãã§ãã
HTTPãªã¯ãšã¹ãããµãŒãã«å¯ŸããŠè¡ããããšãããªã¯ãšã¹ãããŠãããŠãŒã¶ãšãŒãžã§ã³ãã¯éåžž Accept-Language
ãããã®ãããªèšèªèšå®ã«é¢ããæ
å ±ãéä¿¡ããŸãããµãŒããŒã¯ãã®æ
å ±ã䜿çšããŠé©åãªèšèªã®ããŒãžã§ã³ã§ææžãè¿ãããšãã§ããŸããè¿ãããHTMLææžã«ãããŠã <html lang="ja">...</html>
ã®ãã㪠<html>
ã¿ã°ã§ lang
å±æ§ã宣èšããã¹ãã§ãã
ããã¯ãšã³ãã§ã¯ãHTML ããŒã¯ã¢ããã«ã¯ YML 圢åŒãŸã㯠JSON 圢åŒã§æ ŒçŽãããåèšèªã® i18n
ãã¬ãŒã¹ãã«ããšã³ã³ãã³ããå«ããããšãã§ããŸãããµãŒããŒã¯éåžžãããã¯ãšã³ããã¬ãŒã ã¯ãŒã¯ã®å©ããåããŠåèšèªã®ã³ã³ãã³ããå«ã HTML ããŒãžãåçã«çæããŸãã
å€èšèªãµã€ããèšèšã»éçºããéã«ã¯ãã©ããªããšã«æ³šæãæããªããã°ãªããªãã§ããïŒ
- HTML ã«
lang
å±æ§ã䜿ããŸãã - ãŠãŒã¶ãŒãæ¯åœèªã«èªå°ãã - ãŠãŒã¶ãŒãå°é£ãªããåœ/èšèªãç°¡åã«å€æŽã§ããããã«ããŸãã
- ç»åã«ããããã¹ãã䜿çšããããšã¯ã¹ã±ãŒã©ãã«ãªæ¹æ³ã§ã¯ãªã - 確ãã«ç»åã«ããã¹ããé 眮ããããšã¯ãã·ã¹ãã ã«ç¡ãèŠæ ãã®è¯ããã©ã³ããããããã³ã³ãã¥ãŒã¿ã«è¡šç€ºãããããã®äžè¬çãªæ¹æ³ã§ããããããç»åã«ããããã¹ãã翻蚳ããã«ã¯ããã¹ãããšã«åèšèªçšã®å¥ã ã®ç»åãå¿ èŠã«ãªããŸãããã®ãããªç»åã®å€æã¯ã»ãã®å°ããªããããã®ã®ãå¢ããŠãããšããã«ç®¡çã§ããªããªã£ãŠããŸããŸãã
- å¶éçãªèšè/æç« ã®é·ã - å¥ã®èšèªã§æžããšã³ã³ãã³ãã®é·ããå€ããã®ã§ããã¶ã€ã³ã®ã¬ã€ã¢ãŠãããªãŒããŒãããŒã®åé¡ã«æ³šæããŸããããã¹ãéã§ãã¶ã€ã³ã決ããã®ã¯é¿ããã¹ãã§ããæåæ°ã¯ãèŠåºããã©ãã«ããã¿ã³ãªã©ã®ãã®ããããŸãããããã¯ãæ¬æãã³ã¡ã³ããªã©èªç±ã«æµããããã¹ãã®åé¡ã§ã¯ãããŸããã
- è²ãã©ã®ããã«èªèãããŠãããã«æ³šæããŸããè²ã¯èšèªãæåã«ãã£ãŠéã£ãŠèŠããŸãããã¶ã€ã³ã¯é©åã«è²ã䜿çšããå¿ èŠããããŸãã
- æ¥ä»ãšé貚ã®æžåŒèšå® - ã«ã¬ã³ããŒã®æ¥ä»ãç°ãªãæ¹æ³ã§è¡šç€ºãããããšããããŸããäŸãã°ãç±³åœã® "May 31, 2012" ãšãšãŒãããã® "31 May 2012" ã§ãã
- 翻蚳ãããæååãé£çµããªã -
"ä»æ¥ã®æ¥ä»ã¯" + date
ã®ããšã§ããç°ãªãèšèªã§åèªã®é åºã¯å€åããã®ã§ãããããã«åèšèªã®ãã©ã¡ãŒã¿çœ®æã䌎ããã³ãã¬ãŒãæååã䜿çšããŸããããšãã°ã次ã®2ã€ã®æç« ãããããæ¥æ¬èªãšè±èªã§èŠãŠã¿ãŸãããïŒç§ã¯{% date %}ã«æ è¡ããŸã
ãšI will travel on {% date %}
ã§ããå€æ°ã®äœçœ®ã¯ãèšèªã®ææ³èŠåã«ãã£ãŠç°ãªãããšã«æ³šæããå¿ èŠããããŸãã - èšèªã®èªãæ¹å - è±èªã§ã¯ãå·Šããå³ãäžããäžãžåãã£ãŠèªã¿ãŸãããæ¥æ¬èªã§ã¯äŒçµ±çã«ãäžããäžãžãå³ããå·Šãžåãã£ãŠèªã¿ãŸãã
JavaScript ãã¬ãŒã ã¯ãŒã¯ãæ®åããåã«ãããã³ããšã³ãã®éçºè
ã¯ãéæšæºå±æ§ãDOM ã®äœåãªããããã£ãªã©ã®ä»ã®ãããã³ã°ãªãã§ãDOM å
ã«äœåãªããŒã¿ãæ ŒçŽãã data-
å±æ§ã䜿çšããŸãããã«ã¹ã¿ã ããŒã¿ãããŒãžãã¢ããªã±ãŒã·ã§ã³ã«æ ŒçŽããéã«ãé©åãªå±æ§ãèŠçŽ ãååšããªãæã®ããã«å©çšãããã®ã§ãã
ãããè¿é 㯠data-
å±æ§ã䜿ãããšã¯æšå¥šãããŠããŸããããã®çç±ã®1ã€ã¯ããŠãŒã¶ãŒããã©ãŠã¶ã®ãæ€èšŒãã䜿çšããŠããŒã¿å±æ§ãç°¡åã«å€æŽã§ããããšã§ããããŒã¿ã¢ãã«ã¯ JavaScript èªäœã®äžã«ä¿åãããã®ãè¯ããã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã«ããããŒã¿ãã€ã³ãã£ã³ã°ã«ãã£ãŠ DOM ãšãšãã«æŽæ°ãããç¶æ
ã«ä¿ãããããšãæãŸããã§ãã
- http://html5doctor.com/html5-custom-data-attributes/
- https://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes
HTML5 ããªãŒãã³ãŠã§ããã©ãããã©ãŒã ãšããŠèãããšãã«ãHTML5 ãšã¯ã©ããªèŠçŽ ããæããã®ã§ããïŒ
- ã»ãã³ãã£ã¯ã¹ - ã³ã³ãã³ããæ£ç¢ºã«èšè¿°ã§ããããã«ããŸãã
- æ¥ç¶æ§ - æ°ããé©æ°çãªæ¹æ³ã§ãµãŒããŒãšéä¿¡ããããšãã§ããŸãã
- ãªãã©ã€ã³ãšã¹ãã¬ãŒãž - ãŠã§ãããŒãžã«ã¯ã©ã€ã¢ã³ãåŽã®ããŒã¿ãããŒã«ã«ã«æ ŒçŽãããªãã©ã€ã³ã§ããå¹ççã«æäœã§ããããã«ããŸãã
- ãã«ãã¡ãã£ã¢ - ãªãŒãã³ãŠã§ãã§ãããªãšãªãŒãã£ãªã第äžçŽãªããžã§ã¯ãã«ããã
- 2D/3D ã°ã©ãã£ãã¯ã¹ãšãšãã§ã¯ã - ããå€æ§ãªãã¬ãŒã³ããŒã·ã§ã³ãªãã·ã§ã³ãå¯èœã«ããŸãã
- ããã©ãŒãã³ã¹ãšçµ±å - ããé«éãªæé©åãšã³ã³ãã¥ãŒã¿ããŒããŠã§ã¢ã®äœ¿ãæ¹ãæäŸããŸãã
- ããã€ã¹ã¢ã¯ã»ã¹ - ããŸããŸãªå ¥åºåããã€ã¹ã®äœ¿çšãèš±å¯ããŸãã
- ã¹ã¿ã€ãªã³ã° - èè ã¯ããæŽç·ŽãããããŒããæžãããšãã§ããŸãã
ãããã®æè¡ã¯ãã¯ã©ã€ã¢ã³ãåŽã® key-value ã¹ãã¬ãŒãžã¡ã«ããºã ã§ãã圌ãã¯æååãšããŠå€ãæ ŒçŽããããšã ããã§ããŸãã
cookie |
localStorage |
sessionStorage |
|
---|---|---|---|
ã€ãã·ãšãŒã¿ | ã¯ã©ã€ã¢ã³ãããµãŒãããµãŒã㯠Set-Cookie ããã䜿çšå¯ |
ã¯ã©ã€ã¢ã³ã | ã¯ã©ã€ã¢ã³ã |
æå¹æé | æåã§èšå®ã | æ°žç¶ã | ã¿ããéãããŸã§ |
ãã©ãŠã¶ã»ãã·ã§ã³éã§ä¿æããã | æå¹æéãèšå®ãããŠãããã©ããã«ãã£ãŠç°ãªããŸã | ã¯ã | ããã |
ãã¡ã€ã³ãé¢é£ä»ããããŠããã | ã¯ã | ããã | ããã |
ãã¹ãŠã®HTTPãªã¯ãšã¹ãã§ãµãŒããŒã«éä¿¡ | ã¯ãããŒã¯èªåçã« Cookie ãããçµç±ã§éä¿¡ãããŸã |
ããã | ããã |
ãã¡ã€ã³ããšã®å®¹é | B | 5MB | 5MB |
ã¢ã¯ã»ã·ããªã㣠| ãŠã£ã³ããŠå šãŠ | ãŠã£ã³ããŠå šãŠ | åãã¿ã |
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
- http://tutorial.techaltum.com/local-and-session-storage.html
<script>
- HTML解æããããã¯ãããã¹ã¯ãªããããã§ãããããŠããã«å®è¡ãããã¹ã¯ãªããã®å®è¡åŸã«HTML解æãåéãããŸãã<script async>
- ã¹ã¯ãªããã¯HTML解æãšäžŠè¡ããŠååŸãããå©çšå¯èœã«ãªããšããã«ïŒHTML解æãå®äºããåã«ïŒå®è¡ãããŸããã¹ã¯ãªãããããŒãžäžã®ä»ã®ã¹ã¯ãªããïŒã¢ããªãã£ãã¯ã¹ãªã©ïŒãšç¬ç«ããŠããå Žåã¯ãasync
ã䜿çšããŸãã<script defer>
- ã¹ã¯ãªããã¯HTML解æãšäžŠè¡ããŠååŸãããããŒãžã®è§£æãå®äºãããšå®è¡ãããŸããè€æ°ã®ã¹ã¯ãªãããããå Žåãåé 延ã¹ã¯ãªããã¯ããã¥ã¡ã³ãå ã§ééããé åºã§å®è¡ãããŸããã¹ã¯ãªãããå®å šã«è§£æãããDOMã«äŸåããŠããå Žåãdefer
å±æ§ã¯HTMLãå®è¡åã«å®å šã«è§£æãããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãã<body>
ã®æåŸã«éåžžã®<script>
ã眮ãããšãšå€§ããéãã¯ãããŸãããé 延ãããã¹ã¯ãªããã¯document.write
ãå«ãã§ã¯ãããŸããã
泚æïŒ src
å±æ§ãæããªãã¹ã¯ãªããã§ã¯ async
ãš defer
å±æ§ã¯ç¡èŠãããŸãã
- http://www.growingwiththeweb.com/2014/02/async-vs-defer-attributes.html
- https://stackoverflow.com/questions/10808109/script-tag-async-defer
- https://bitsofco.de/async-vs-defer/
ãªãäžè¬çã«ãCSSã® <link>
ã <head></head>
ã®éã«ãJSã® <script>
ã </body>
ã®çŽåã«çœ®ãããšãè¯ããšèšãããŠããã®ã§ããããïŒãããã¹ãã§ãªãäŸå€ãç¥ã£ãŠããŸããïŒ
<link>
ã <head>
ã«çœ®ã
<link>
ãé ã«çœ®ãããšã¯ä»æ§ã®äžéšã§ããããã«å ããŠãäžéšã«é
眮ãããšããŒãžãåŸã
ã«ã¬ã³ããªã³ã°ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸããããã¥ã¡ã³ãã®äžéšã«ã¹ã¿ã€ã«ã·ãŒãã眮ãããšã®åé¡ã¯ãInternet Explorerãå«ãå€ãã®ãã©ãŠã¶ã§ã¯ãããã°ã¬ãã·ãã¬ã³ããªã³ã°ãçŠæ¢ãããŠããããšã§ããäžéšã®ãã©ãŠã¶ã§ã¯ãã¹ã¿ã€ã«ãå€æŽãããå Žåã«ããŒãžã®èŠçŽ ãåæç»ããªãããã«ã¬ã³ããªã³ã°ããããã¯ããŠããŸãããŠãŒã¶ãŒã空çœã®çœãããŒãžãèŠãŠãããããã¯ãã¹ã¿ã€ã«ã®ãªãã³ã³ãã³ãã®ãã©ãã·ã¥ãé²ããŸãã
<script>
ã </body>
ã®çŽåã«çœ®ã
<script>
ã¯ãããŠã³ããŒããããŠå®è¡ãããŠããéã«HTML解æããããã¯ããŸããã¹ã¯ãªãããæäžéšã«ããŠã³ããŒããããšãHTMLã解æããŠæåã«ãŠãŒã¶ãŒã«è¡šç€ºããããšãã§ããŸãã
äžã® <script>
ã®äœçœ®ä»ãã®äŸå€ã¯ãããªãã®ã¹ã¯ãªããã« document.write()
ãå«ãŸããŠãããšãã§ãããæè¿ã¯ document.write()
ã䜿ãã®ã¯è¯ãç¿æ
£ã§ã¯ãããŸããããŸãã <script>
ãäžçªäžã«çœ®ãããšã¯ãããã¥ã¡ã³ãå
šäœã解æããããŸã§ãã©ãŠã¶ãã¹ã¯ãªããã®ããŠã³ããŒããéå§ã§ããªãããšãæå³ããŸãã1ã€ã®åé¿çã¯ã<head>
ã« <script>
ãå
¥ãã defer
å±æ§ã䜿ãããšã§ãã
ããã°ã¬ãã·ãã¬ã³ããªã³ã°ã¯ããŠã§ãããŒãžã®ããã©ãŒãã³ã¹ãåäžãããïŒç¹ã«ãæèŠçãªèªã¿èŸŒã¿æéãæ¹åããïŒããã«äœ¿çšãããæè¡ã«äžããããååã§ãããã§ããã ãæ©ã衚瀺ããããã«ã³ã³ãã³ããã¬ã³ããªã³ã°ããŸãã
ãããŒããã³ãã€ã³ã¿ãŒãããã®æ®å以åã«äœ¿ãããŠããŸããããã¢ãã€ã«ããŒã¿æ¥ç¶ã®æ®åïŒããã³ä¿¡é Œæ§äœäžïŒãé²ãã§ããçŸåšãçŸä»£çãªéçºã«ã¯ãŸã 圹ç«ã¡ãŸãã
ãã®ãããªæè¡ã®äŸïŒ
- ç»åã®é 延èªã¿èŸŒã¿ - ããŒãžäžã®ç»åãäžåºŠã«èªã¿èŸŒãŸããããšã¯ãããŸããããŠãŒã¶ãŒãç»åã衚瀺ããããŒãžã®éšåã«ã¹ã¯ããŒã«ãããšãJavaScriptã䜿çšãããŠç»åãããŒããããŸãã
- ç®ã«èŠããã³ã³ãã³ãã®åªå
é äœä»ãïŒãŸãã¯æãç³ã¿ã®äžã®ã¬ã³ããªã³ã°ïŒ - ã§ããã ãæ©ã衚瀺ããããã«ãŠãŒã¶ãŒã®ãã©ãŠã¶ã§ã¬ã³ããªã³ã°ãããããŒãžã®éã«å¿
èŠãªæå°ã®CSS/ã³ã³ãã³ã/ã¹ã¯ãªããã®ã¿ãå«ãããã¹ã¯ãªãããåŒã³åºããã
DOMContentLoaded
/load
ã€ãã³ããä»ã®ãªãœãŒã¹ãã³ã³ãã³ããèªã¿èŸŒãã®ãåŸ ã¡ãŸãã - éåæHTMLãã©ã°ã¡ã³ã - HTMLã®äžéšããã©ãŠã¶ã«ãã©ãã·ã¥ããããŒãžãããã¯ãšã³ãäžã«æ§ç¯ãããŸãããã®æè¡ã®è©³çŽ°ã¯ãã¡ãã«ãããŸãã
- https://stackoverflow.com/questions/33651166/what-is-progressive-rendering
- http://www.ebaytechblog.com/2014/12/08/async-fragments-rediscovering-progressive-html-rendering-with-marko/
img ã¿ã°ã« srcset
å±æ§ã䜿çšããçç±ã¯ïŒãã®å±æ§ããã€èŠçŽ ãè©äŸ¡ãããšãã«ãã©ãŠã¶ãè¡ãããã»ã¹ã説æããŠãã ããã
ããã€ã¹ã®è¡šç€ºå¹
ã«å¿ããŠç°ãªãã€ã¡ãŒãžããŠãŒã¶ãŒã«æäŸãããå Žåã¯ã srcset
å±æ§ã䜿çšããŸãã網èãã£ã¹ãã¬ã€ã䜿çšããŠããã€ã¹ã«é«å質ã®ã€ã¡ãŒãžã衚瀺ããäœè§£å床ã®ã€ã¡ãŒãžãããŒãšã³ãã®ããã€ã¹ã«æäŸããªããããã©ãŒãã³ã¹ãåäžããã ïŒå€§ããªç»åã«ã¯ç®ã«èŠããéãããªãããïŒããŒã¿ã®æ¶èãæžãããŸããäŸïŒ <img srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 2000w" src="..." alt="">
ã¯ãã©ãŠã¶ã«å°ãäžã倧ã®ããããã衚瀺ããããã«æ瀺ããŸããã¯ã©ã€ã¢ã³ãã®è§£å床ã«å¿ããŠãjpgãã°ã©ãã£ãã¯ã衚瀺ããŸããæåã®å€ã¯ã€ã¡ãŒãžåã§ã2çªç®ã®å€ã¯ã€ã¡ãŒãžã®ãã¯ã»ã«åäœã®å¹
ã§ãã320pxã®ããã€ã¹å¹
ã®å Žåã次ã®èšç®ãè¡ãããŸãã
- 500/320 = 1.5625
- 1000/320 = 3.125
- 2000/320 = 6.25
ã¯ã©ã€ã¢ã³ãã®è§£å床ã1xã®å Žåã1.5625ãæãè¿ããsmall.jpg
ã«å¯Ÿå¿ãã 500w
ããã©ãŠã¶ã«ãã£ãŠéžæãããŸãã
解å床ã網èïŒ2åïŒã®å Žåããã©ãŠã¶ã¯æå°ä»¥äžã®æãè¿ã解å床ã䜿çšããŸããããã¯1ãã倧ãããç»åãæªãèŠãããããããªãã®ã§ã500wïŒ1.5625ïŒãéžæããªãããšãæå³ããŸãããã©ãŠã¶ã¯ãåŸãããæ¯çã2ã«è¿ã1000wïŒ3.125ïŒã®ç»åãéžæããŸãã
srcset
ã¯ããã¹ã¯ããããã£ã¹ãã¬ã€ã®ãããªå·šå€§ãªç»åãå¿
èŠãšããªããããå°ããªç»åãã¡ã€ã«ãç»é¢ã®çãããã€ã¹ã«é
ä¿¡ããããšããåé¡ã解決ããŸãããªãã·ã§ã³ã§ãç°ãªã解å床ã®ç»åãé«å¯åºŠ/é«å¯åºŠã¹ã¯ãªãŒã³ã
- https://stackoverflow.com/questions/33651166/what-is-progressive-rendering
- http://www.ebaytechblog.com/2014/12/08/async-fragments-rediscovering-progressive-html-rendering-with-marko/
ã¯ããäŸãããããšãPug (æ§ Jade)ãERBãSlimãHandlebarsãJinjaãLiquid ã䜿ã£ãããšããããŸããç§ã®æèŠã§ã¯ããããã¯ããããåããããªãã®ã§ããã衚瀺ãããããŒã¿ãæäœããããã®ãšã¹ã±ãŒãããã³ã³ãã³ãã圹ç«ã€ãã£ã«ã¿ãšåæ§ã®æ©èœãæäŸããŸããã»ãšãã©ã®ãã³ãã¬ãŒããšã³ãžã³ã§ã¯ã衚瀺åã«ã«ã¹ã¿ã åŠçãå¿ èŠãªã€ãã³ãã«ç¬èªã®ãã£ã«ã¿ãæ¿å ¥ããããšãã§ããŸãã
- https://neal.codes/blog/front-end-interview-questions-html/
- http://peterdoes.it/2015/12/03/a-personal-exercise-front-end-job-interview-questions-and-my-answers-all/