Главная страница

Необходимые hard skills по стеку. Фундаментальные знания Иванов Иван Иванович


Скачать 79.09 Kb.
НазваниеФундаментальные знания Иванов Иван Иванович
Дата07.06.2022
Размер79.09 Kb.
Формат файлаpdf
Имя файлаНеобходимые hard skills по стеку.pdf
ТипДокументы
#574573

Hard skills
JavaScript и браузер
Стек
Веб
Инструменты
Фундаментальные знания
Иванов Иван Иванович
JavaScript и браузер
Суммарный уровень считается по среднему всех навыков.
Навык
Уровень 1
Уровень 2
Уровень 3
Уровень 4
Контекст выполнени я, this
Знать:
Что такое контекст
Для чего он применяется в методах объектов и классов
Как вычисляется контекст и чему равен по умолчанию
Особенности поведения и вычисления контекста в стрелочных функциях
Уметь:
Привязывать и сохранять контекст через call, apply, bind
Сохранять контекст через переменную self
(опционально)
Знать:
Игнорирование контекста (например, вызов bind с первым аргументом null)
Потеря контекста
Связывание контекста через вызов с new

Области видимости,
замыкания
Знать:
Функциональная область видимости
Блочная область видимости
Разница let
/const и var
Поднятие переменных
(всплытие)
Что такое
Function
Declaration и его особенности
Что такое
Function
Expression и его особенности
Что такое анонимные и самовызывающи еся функции
Уметь:
Применять Funct ion Declaration
Применять Funct ion Expression
Применять анон имные и самовызывающи еся функции
Знать:
Замыкание и когда его стоит применять
Общие принципы работы сборщика мусора (достижимость, применяемые оптимизации)
Лексическое окружение
Механизм поиска переменных
Псевдомассив arguments
Уметь:
Применять замыкание
Знать:
Как работает V8
Лексический анализ
Уметь:
Применять каррирование
Прототипы,
классы
Знать:
Наследование через прототипы
Уметь:
Создавать экземпляры класса с помощью функции- конструктора
Знать:
Как работает прототипное наследование
Механизм поиска метода или свойства в цепочке прототипов
Работа классов, синтаксис и во что они фактически преобразуются
Основные парадигмы
ООП
Особенности прототипов у стрелочных функций
Знать:
Шаблон делегирования и его риски

DOM
Знать:
Методы поиска
DOM узлов
(минимум 3 метода)
Методы изменения содержимого в
DOM узлах
Методы добавления
DOM узлов
Понятие и как работают "живые коллекции"
Основные браузерные события
Уметь:
Использовать все вышеперечисле нные методы
Знать:
Этапы отрисовки страницы в браузере
Всплытие и погружение событий, предотвращение этого механизма
Делегирование событий
Уметь:
Использовать события браузера
Использовать делегирование событий
Реализовать валидацию полей формы нативными методами
Знать:
MutationObserver
Возможные способы рендеринга страницы (Server, Static, Client) + rehydration
Уметь:
Проводить сравнительный анализ способов рендеринга и применять наиболее подходящий
Знать:
WebComponents
ShadowDom
Custom elements
HTML templates
Асинхронн ость
Знать:
JS - однопоточный и синхронный язык
Как используются:
callback
Promises async/await
Уметь:
Применять на практике callback
Promises async/await
Знать:
Механизм Event loop
Как работают Promises
Знать почему в цепочке then/catch после ошибки может быть новый then
Как работают таски
/микротаски
Уметь:
Комбинировать
Promises
Обрабатывать ошибки в цепочке then/catch
Использовать генераторы
(опционально)
Знать:
Как работают генераторы
В каких случаях имеет смысл использовать генераторы
Уметь:
Применять генераторы и строить решения на основе их, в том числе с применением бесконечного цикла и комбинированием генераторов
Браузер
Знать:
localStorage cookies
Знать:
Что ещё, помимо localstorage, можно применять для хранения данных на клиенте iframe
Знать:
WebSocket
Service workers
Какие существуют Web APIs
(Payment Request API, Push API,
Web Share API и т.д.)
Уметь:
Выбрать подходящий Web API исходя из задачи
Реализовывать PWA (опционально)
Знать:
Web-workers
WebGL
Wasm

Регулярки
Знать:
Про глобальный объект RegExp
Методы работы со строкой: replace, match, search
Уметь:
Создавать экземпляры регулярок и методы: exec, test, match
Использовать основные флаги: g, i, m и др.
Знать:
О создании регулярки через литерал
,
(/ab+c/)
отличие от RegExp.
Основные спец. символы:
\d, \s и другие, в том числе границы: ^, $ и т.д.
Уметь:
Написать регулярное выражение с помощью специальных сервисов (
https://regex
)
101.com/
Уметь:
Использовать группировки
( x ),
\n, x
(?: )
Использовать квантификаторы
– x
*
и другие
, x(?=y)
Уметь:
Оптимизировать производительность регулярок (жадный и ленивый поиск, критический возврат)
Обработка исключени й, логировани е, дебаг
Уметь:
Использовать try-catch
Использовать различные виды console
(log, error, warn и т.д.) для дебага
Знать
Про необходимость логирования ошибок
Уметь:
Дебажить клиентский и серверный код через браузер, в том числе состояние redux
Использовать
ErrorBoundary в реакт- приложениях, продумывать возможные негативные сценарии
Настраивать логирование ошибок
(sentry и др.)
Стек
Навык
Уровень 1
Уровень 2
Уровень 3
Уровень 4
React
Знать:
Зачем нужен React
VirtualDom
Жизненный цикл компонента
Механизм Props
Механизм State
Refs
Порталы
Уметь:
Писать классовый компонент
Писать функциональный компонент
Использовать Props & State
Знать:
HOC. Как использовать и какие есть особенности
Хуки. Понимать отличие классового и функционального компонентов
Роутинг в приложении, программное изменение страницы
Механизм Context API
SSR и механизмы реализации
Уметь:
Осознано выбирать классовый или функциональный компонент, исходя из задачи
Настроить SSR
Использовать хуки
Знать:
Render-props
Compound components
Form managers
Уметь:
Реализовывать render-props
Реализовывать compound components
Проводить сравнительный анализ и выбирать Form manager
Настраивать storybook/style guidist
Знать:
Механизм
Reconciliation
Архитектура Fiber
Оптимизация производительност и React приложения

Redux
Знать:
Понятие и принципы однонаправленного потока данных
Преимущества однонаправленного потока данных
Связывание redux и react
Стандартных подход к организации структуры приложения (из документации Redux)
redux-thunk
Уметь:
Использовать reducers
Использовать Action creators
Использовать redux-thunk
Привязывать redux store к react компонентам mapStateToProps и mapDispatchToProps / хуки
Знать:
redux-sagas, их преимущества и недостатки redux-ducks, преимущества и недостатки reselect, преимущества redux-actions / typesafe-actions
(опционально)
Уметь:
Использовать redux-sagas
Использовать redux-ducks подход
Использовать reselect
Знать:
Immutable, область применения, преимущества и недостатки
Нормализация данных, преимущества и недостатки, когда использовать
Уметь:
Проектировать масштабируемый стор для многостраничного приложения
TS
Знать:
Область применения TS
Базовые типы: string, array, object и т.д.
Интерфейсы
Enum
Уметь:
Подключать TS к проекту
Описать простые типы данных
Знать:
Классы и модификаторы доступа
Advanced types: Omit, Pick, и тд.
Generics
Optional chaining
Conditional types
Модули, пространство имён
Уметь:
Применять все вышеперечисленное
Знать:
Декораторы
Перегрузка функций
Миксины
Уметь:
Реализовывать все вышеперечисленное
NodeJS
Знать:
Основы работы с process
Основы работы с fs
Базовые знания express/hapi
Уметь:
Собрать с нуля приложение на express/hapi
Работать с fs
Знать:
Как работать с MongoDB
Отличие и особенности SQL и NoSQL баз данных
Аутентификация и авторизация
Уметь:
Подключать MongoDB к проекту
Выполннять манипуляции с данными в базе данных
(CRUD)
Реализовывать аутентификации и авторизации
Знать:
Кеширование
(через node-cache, например)
Параллелизация через workers_threads
Уметь:
Реализовывать кеш ирование
Реализовывать мно гопоточность
Веб
Навык
Уровень 1
Уровень 2
Уровень 3
Уровень 4
Вёрстка
Знать:
Блочная модель
Базовые теги HTML5
Базовые CSS свойства
БЭМ
Векторная и растровая графика.
Преимущества и недостатки
Уметь:
Базово верстать
Использовать БЭМ для именования классов
Знать:
Типографика. Типы шрифтов.
Свойства для изменения шрифтов.
Подключение шрифтов
Базовые псевдоклассы
Современные пре/постпроцессоры
(SCSS, PostCSS)
Современные подходы к организации стилей (CSS-Modules,
CSS-in-JS)
Flexbox
Уметь:
Использовать шрифты и работать с ними
Использовать псевдоклассы
Адаптивно верстать (media queries, адаптивные изображения)
Верстать семантично
Знать:
Grid
Доступность
(aria, tabindex & etc.)
Микроразметка
Анимация
Контекст наложения
Уметь:
Применять Grid
Верстать доступные для скринридеров страницы
Использовать
W3C валидаторы

Сеть
Знать:
Понимание протокола HTTP
XMLHttpRequest fetch
Уметь:
Использовать
XMLHttpRequest
Использовать fetch
(axios)
Знать:
REST
Уметь:
Писать серверную (NodeJS) и клиентскую часть для обмена данными
Знать:
Теория работы сетей. TCP/IP
Произво дительн ость
Знать:
Метрики клиентской производительности
Async, defer
Уметь:
Замерять производительность страницы (devtools,
)
lighthouse
Использовать async, defer
Знать:
Механизмы уменьшения размера бандла
CDN
Preload, prefetch
Мемоизация
Уметь:
Использовать инструменты уменьшения размера бандла
Выносить тяжелые операции на сервер
Использовать мемоизацию
Знать:
Метрики серверной производительн ости lazy-loading
Оптимизация критичного пути рендеринга
Уметь:
Замерять серверную производительн ость
Оптимизировать критичный путь рендеринга
Знать:
Web-workers
Уметь:
Web-workers
Профилировать клиент и сервер
Безопас ность
Знать:
Основные уязвимые функции (eval, dange
)
rouslySetInnerHTML
Уметь:
Не допускать использования уязвимый функций
Выполнять проверки пакетов с помощью n pm/yarn audit
Знать:
CSP
CORS
Атрибут rel и его значения noreferr er, noopener, nofollow
XSS
SQL-injections
Влияние HTTPS и HTTP2 на безопасность
Уметь:
Настраивать CSP
Настраивать CORS
Использовать noreferrer, noopener, nofollow
Защищаться от XSS
Защищаться от SQL-injections
Знать:
CSRF
Безопасность cookie
Знать:
OWASP top-10
Уметь:
Защищаться от OWASP top-
10
Тестиро вание
Знать:
Назначение unit тестов
Назначение e2e тестов
Уметь:
Писать unit тесты с использованием jest для функций
Знать:
Принцип TDD
Принцип AAA
Моки. Зачем нужны и как применять
Стабы. Зачем нужны и как применять
Уметь:
Писать unit тесты с использованием jest + enzyme / для реакт-
React testing library компонентов
Писать e2e тесты с использованием cypress
Знать :
Принцип BDD
Оценка эффекти тестов вности
Уметь:
Подключать инструменты для измерения coverage
Знать:
1-2 дополнительных инструмента для тестирования
Уметь:
Проводить анализ инструментов тестирования и выбрать наиболее подходящий
Писать тесты с помощью других инструментов
Инструменты
Навык
Уровень 1
Уровень 2
Уровень 3
Уровень 4

Git
Знать:
Базовые команды init config pull push commit checkout merge
Договоренности по именованию коммитов
Уметь:
Использовать вышеописанное
Решать конфликты
Знать:
git-flow/github-flow
Сложные команды amend fixup revert cherry-pick stash reset tag log diff reflog
Уметь:
Делать ребейз
Делать интерактивный ребейз
Работать с историей коммитов
Знать:
git-lfs bisect hooks worktree
Уметь:
Использовать все вышеперечисленное
Docker
Знать:
Что такое docker, зачем нужен
Уметь:
Запустить существующий контейнер
Посмотреть логи запущенного контейнера
Уметь:
Написать свой
Dockerfile
Подключиться к уже существующему контейнеру
Посмотреть, что запущено, найти нужный контейнер
Знать:
Как устроены слои в docker-образе
Что такое multi-stage build
Знать:
Что такое docker-compose
Уметь:
Реализовать структуру из нескольких контейнеров через compose
CI/CD
Знать:
Зачем нужен CI/CD
Зачем нужны системы управления кластерами
Jenkins
Mesos/Marathon
Уметь:
Читать логи сборки в Jenkins
Читать логи контейнера в
Marathon
Уметь:
Настраивать прекоммитные проверки
Уметь:
Конфигурировать имеющиеся системы Jenkins, Marathon и другие, используемые в банке
Уметь:
Поднять CI/CD с нуля, выбрав подходящие системы
Webpack
Знать:
Что такое Webpack
Как работает конфигурация
Зачем нужны лоадеры
Зачем нужны плагины
Семантическое версионирование
Уметь:
Собрать базовую конфигурацию для простого проекта
Настроить стартовые скрипты в package.json
Знать:
HMR. Зачем нужен и как работает
Tree shaking
Разделение бандла на чанки
Минификация
Автоматическое сжатие картинок
Разделение конфига на prod
/dev
Уметь:
Встраивать в сборку все вышеперечисленное
Использовать bundl e-analyzer
Знать:
Manifest. Зачем и как применять
Механизмы ускорения горячей
/холодной сборки проекта
Как писать свои плагины для babel и postcss
Уметь:
Использовать все вышеперечисленное

Фундаментальные знания
Навык
Уровень 1
Уровень 2
Уровень 3
Уровень 4
Алгоритм ы и структур ы данных
Знать:
Нотация Big O
Стандартные алгоритмы сортировки
Уметь:
Оценивать сложность написанного алгоритма
Выбирать верную структуру данных исходя из задачи
Знать:
Структура графов и деревьев
Уметь:
Написать алгоритм обхода графа и дерева
Оптимизировать алгоритмы по потребляемой памяти
Реализовывать стандартные алгоритмы сортировки и поиска
Уметь оптимально подходить к решению различных алгоритмических задач
Архитект урное проектир ование
Знать:
MVC
Уметь:
Выделять глобальное состояние приложения
Реализовывать MVC
Знать:
MVP
MVVM
Уметь:
Разделять большие сервисы на небольшие функциональные модули
Реализовывать MVP,
MVVM
Уметь:
Реализовывать монолитную архитектуру
Реализовывать микросервисную архитектуру
Выбирать архитектуру проекта исходя из бизнес требований, уровня команды, дальнейших планов на масштабирование и поддержку
Паттерны
Знать:
Порождающие паттерны
Фабрика
Синглтон
Прототип
Структурные паттерны
Адаптер
Декоратор
Фасад
Поведенческие паттерны
Состояние
Итератор
Наблюдатель
Уметь:
Реализовывать все вышеперечисленное
Знать:
Подход
Dependency
Injection
Уметь:
Выделять различные паттерны в существующем коде
Декомпозировать задачу на несколько подходящих паттернов
Чистый код
Знать:
DRY
KISS
YAGNI
Принцип единой ответственности
(SOLID)
Необходимость код-ревью и единого стиля кода внутри команды
Уметь:
Соблюдать все вышеперечислен ные принципы
Знать:
Принцип открытости/закрытости
(SOLID)
Принцип разделения интерфейсов
(SOLID)
APO – избегание преждевременной оптимизации
BDUF – масштабное проектирование превыше всего
Уметь:
Писать в подавляющем большинстве чистые функции и прибегать к мутациям и сайд- эффектам только в крайних случаях
Использовать комментарии для документирования кода
Знать:
Принцип подстановки
Барбары Лисков
(SOLID)
Принцип инверсии зависимостей (SOLID)
Уметь:
Анализировать и выбирать между ООП и функциональным подходом исходя из задачи

Рефактор инг
Знать:
Основные принципы рефакторинга:
Код должен становиться чище, при этом не должна создаваться новая функциональность
Предварительно должны быть написаны тесты
Уметь:
Выявлять необходимость рефакторинга на основе базовых свойств "грязного" кода:
размер файла трудность чтения дублирование сложность изменения
Оценивать масштаб предполагаемого рефакторинга и выбирать правильный путь его проведения
Уметь:
Уверенно находить свойства "грязного" кода:
Избыточные комментарии
Неинформативные комментарии
Высокая связанность кода
Большое количество аргументов в функции etc
Применять различные методы рефакторинга:
Извлечение метода или переменной
Инкапсуляция полей
Разбиение условного оператора etc
Применять метод рефакторинга через паттерны проектирования
Оценивать объемы рефакторинга, планировать его и грамотно организовывать


написать администратору сайта