# Do ogranięcia ## Javascript - Co to jest Event Loop (Stack, Queue, Heap)? Mikrotaski vs taski. Co to `queueMicrotask`? Na czym polega model współbieżności w JS oraz czym są Web Workery? - Asynchroniczność - callbacki, generatory, Promise, timeouty, interval - Płynne posługiwanie się metodami tablicowymi (map, filter, reduce itd). Rozróżnianie metod mutujących od niemutujących. Do czego służy `Array.from`? Jakie są inne sposoby konwersji na tablicę? - Jak działa model obiektowości w JS? Czym jest i jak działa `Object.create` - Jak działa this w JS? Jak możemy wpływać na to zachowanie - Czym jest hoisting? - Jak działają kolekcje: Map, WeakMap, Set, WeakSet? Do czego można je wykorzystać? - Iterable vs enumerable? `for..in`, `for..of` vs `.forEach` - Znajomość niektórych HTML5 APIs * Media API * Drag&Drop API * History API * Web Storage API * Web Animations API * Geolocation API * itd. https://developer.mozilla.org/en-US/docs/Web/API - Task runners (Gulp, Grunt, npm scripts) - Bundlowanie aplikacji za pomocą Webpacka (Rollup, Parcel) - Strategie Pull-Push oraz ich implementacje w JS (na obrazku, Observable na razie jedynie jako proposal)![Pull-Push Grid](https://i.imgur.com/QbCBBBM.png) - Czym jest tryb strict i co zmienia? - Co dają `Object.preventExtensions`, `Object.seal` oraz `Object.freeze`? - Czym są deskryptory właściwości w obiekcie? Co się na nie składa, jak można je pobrać? Co daje `Object.defineProperty` względem prostego `obj.property = value`? - Jak przerwać wysyłanie zapytania do serwera? Czym są i jak unikać race conditions? - Czym się różni `null` od `undefined`? - Czym różni się sprawdzanie za pomocą `in` od `hasOwnProperty`? - Jak działa słowo kluczowe `new`? - Dlaczego rozszerzanie prototypów wbudowanych obiektów uznaje się za złą praktykę? - Czym jest wzorzec IIFE i czemu już nie jest tak potrzebny? - Wyrażenia regularne: do czego służą i z czego się składają? - Czym charakteryzuje się typ `Symbol`? - Czym są i do czego służą `Proxy` oraz `Reflect`? ## Programowanie ogólnie - Podstawy paradygmatu obiektowego - klasy, dziedziczenie, polimorfizm, enkapsulacja. Co to wzorce projektowe i jakie problemy rozwiązują? Wymienić kilka popularnych. - Podstawy paradygmatu funkcyjnego? Co to rekurencja, funkcja wyższego rzędu, czysta funkcja, funkcja jako obywatel pierwszej kategorii (first-class citizen), niemutowalność, deklaratywność vs imperatywność, kompozycja funkcji - Rozwinięcie skrótu SOLID i krótki opis każdej literki. Jak w to wpasowuje się Dependency Injection? - Akronimy DRY, KISS, AHA i kilka słów o ich znaczeniu - Dlaczego TDD jest tak istotne w procesie CI/CD(CircleCI, Buddy, Jenkins, GitlabCI itd)? Rodzaje testów: jednostkowe, integracyjne, mutacyjne, E2E - Podstawowe zasady programowania zwinnego (Agile, Scrum) - Wzorzec MVC. Podstawy MVVM, MVP - Czym jest memoizacja i dlaczego warto ją stosować? ## Typescript - Jakie są zalety statycznego typowania? Dlaczego system typów w TS nie miałbyć nigdy w założeniach idealny? - Dlaczego lepiej stosować `unknown` zamiast `any`? - Co robią typy pomocnicze: Pick, Omit, Required, Partial, Readonly, ReturnType? - Jak radzić sobię w przypadku braku typów w bibliotece JS przy dołączaniu jej do projektu. - Dlaczego warto używać trybu strict kompilatora? ## React - Wymień metody cyklu życia komponentu klasowego(https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/) i ich ewentualne odpowiedniki w komponentach funkcyjnych? Których metod nie możemy używać podczas korzystania z SSR? - Jak działa JSX pod spodem? Dlaczego komponenty nazywamy wielką literą? - Jak zintegrować biblioteki operujące na DOM z React? - Znajomość wzorców występujących w React: Higher Order Components, Render Props, Compound Components oraz w jaki sposób Hooki mogą zastąpić je? - Czym się różnią kontrolowane od niekontrolowanych komponentów? - Co dają nam biblioteki typu Redux, Mobx itp. względem zarządzania stanem przy pomocy Contextu oraz stanu wewnętrznego komponentów? - Czym jest Suspense oraz React Fiber i jakie daje to możliwości względem obecnego systemu? - Co to jest SyntheticEvent? - Co to jest Reconcillation? ## CSS - Stylowanie z JSX - styled-components, emotion, (s)css-modules, pure (s)css ## Node.js - Co to jest Node.js i dlaczego warto go używać? - Co to Event Driven Development? Co to jest Event Emmiter? - Co to są streamy? Jakie ich mamy rodzaje? Co to są pipy? - Co to są middleware? Do czego służą? - Jak skonfigurować Node do pracy w środowisku developerskim oraz produkcyjnym? - Co to jest `setImmediate` i do czego służy? - Jaka będzie kolejność logów w skrypcie poniżej? Dlaczego tak się dzieje? ```javascript= console.log('script start'); setTimeout(function () { console.log('setTimeout'); }, 0); Promise.resolve() .then(function () { console.log('promise1'); }) .then(function () { console.log('promise2'); }); console.log('script end'); ``` - Jak unikać `callback hell` pracując z wbudowanymi modułami Node? - Rest vs grapqhl - `Authorization` vs `Authentication`, czym się różnią i jakie są najpopularniejsze metody do ich implementacji? ## Architektura - Dlaczego dzielimy architekturę na warstwy? Co daje podział w pionie i poziomie? - Co to jest architektura heksagonalna? Jakie są jej założenia? - Czym są poziomy abstrakcji? - Czym są granice architekturalne i jak powinniśmy je wyznaczać? Jakie są rodzaje granic? - Czym się różnią `reguły biznesowe` od `przypadków użycia`? - Jakie znaczenie w czystej architekturze mają testy? - Mikroserwisy vs monolit. Jakie są wady i zalety każdego z tych rozwiązań? - Po co są wzorce projektowe? Opisz na jakie 3 grupy je dzielimy. Jakie znasz wzorce? Opisz je. ## Praca z gitem Czyli znajomość podstaw pracy w zespole programistycznym. Branche, pull requesty, przywracanie historii. Github, BitBucket, Gitlab. Umiejętność rozwiązywania konfliktów.