# 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)
- 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.