В данном репозитории находится контент для приложения Interview Questions. Это дружелюбное приложение для обучения разработчиков и подготовки к собеседованию.
Вы можете внести свой вклад в развитие проекта: стать автором вопроса или теста, исправить ошибки, отправить issue с описанием бага.
Ниже приводится инструкция, рассчитанная на новичков в open-source. Ещё более подробную инструкцию можно прочитать здесь.
- Форкни этот репозиторий (в твоём аккаунте появится копия этого репозитория)
- Склонируй форкнутый репозитория из своего аккаунта к себе на компьютер
- Создай ветку от ветки develop и внеси в неё необходимые изменения
- Сделай коммит и запуш свою ветку на GitHub
git push -u origin your-branch-name
- В твоём репозитории на GitHub появится кнопка
Compare & pull request
. С помощью неё отправь пулреквест в ветку develop этого репозитория. В скором времени твои изменения будут приняты!
Не забывай периодически подтягивать изменения из исходного репозитория git pull upstream develop
Если возникнут вопросы, можно писать в телеграм: @srStarkov
Основная цель приложения - подготовка к собеседованию. В приложение добавляются вопросы, которые могут прозвучать на собеседовании и проверить глубину знаний. У каждого теста есть уровень сложности - basic, middle, advanced - это ориентировочная оценка сложности входящих в тест вопросов. Условно, это вопросы, которые могут спросить на собеседовании у джуниора, мидла или сеньора.
Приветствуются интересные вопросы из вашей практики, вызывающие желание изучить тему. Будет здорово, если к вопросу будет прикреплено текстовое пояснение, ссылка на статью или видео, раскрывающие его глубину.
Не следует добавлять элементарные/слишком поверхностные вопросы, которые точно не прозвучат на собеседовании. Например, вопрос "Какое ключевое слово создаёт константу в JavaScript" - плохой вопрос.
Не следует копировать вопросы из тестов со сторонних ресурсов! Обычно эти вопросы слишком элементарны и не подходят для целей Interview Questions. Формулирование вопросов и ответов помогают упорядочить знания. Также будет здорово, если вопросы будут отражать ваши собственные открытия, которыми вы хотите поделиться :)
Перед добавлением вопроса, стоит ознакомиться с существующими вопросами в данном тесте, чтобы не повториться.
В тестах может быть любое количество вопросов. Сервер выбирает 10 случайных вопросов для отправки. Можно добавлять вопросы в любой из существующих тестов.
Для каждого теста есть папка (находится в src/data/tasks
), в которой лежат файлы вопросов в формате json. Создай новый json-файл и добавь туда вопрос в формате описанном ниже.
Для предпросмотра вопросов можно воспользоваться созданной для этого страницей.
Пример вопроса без блока кода:
{
"questionText": "Какое значение не может принимать свойство `position`?",
"type": "radio",
"answers": [
{
"text": "`static`",
"isCorrect": false
},
{
"text": "`block`",
"isCorrect": true
},
{
"text": "`absolute`",
"isCorrect": false
},
{
"text": "`sticky`",
"isCorrect": false
}
],
"author": "YourGitHubName"
}
Пример вопроса с блоком кода и примечанием:
{
"questionText": "Как можно сделать глубокую копию этого объекта?",
"type": "checkbox",
"code": {
"lang": "js",
"text": "const user = {\n name: 'Sonya',\n age: 28,\n friends: ['Vasilisa', 'Kate', 'Brendan'],\n}\n\nlet userDeepCopy"
},
"answers": [
{
"text": "Вручную, используя spread-оператор следующим образом: `{...user, friends: [...user.friends]}`",
"isCorrect": true
},
{
"text": "Использовать метод Object.assign: `Object.assign(userDeepCopy, user)`",
"isCorrect": false
},
{
"text": "Использовать методы встроенного JSON-объекта: `JSON.parse(JSON.stringify(user))`",
"isCorrect": true
},
{
"text": "С помощью WebAPI-метода `structuredClone`",
"isCorrect": true
}
],
"author": "YourGitHubName",
"descriptionMarkup": "Следует помнить, что `Object.assign` и spread-оператор делают неглубокую копию (shallow copy).\n\nИспользовать JSON-методы следует с пониманием ограничений JSON-формата. Например, такая копия лишит объект всех методов (JSON не предусматривает функций).\n\n`structuredClone` - новое браузерное API для глубокого копирования. Почитать о нём можно на [MDN](https://developer.mozilla.org/en-US/docs/Web/API/structuredClone)"
}
В созданном json-файле могут быть следующие ключи:
questionText
- текст вопроса в формате markdown-строки (подробнее о формате markdown написано ниже). Лучше ограничиться одним параграфом. Здесь, и в других полях, можно использовать эмодзи😉type
- тип вопроса. В данный момент доступны два варианта:radio
(только один правильный ответ) иcheckbox
(правильных ответов может быть больше одного)code
(опционально) - в вопрос можно добавить блок кода. Значение этого свойства - объект с двумя ключами:text
- код в виде строки. Для переноса строк можно использовать символ переноса строки\n
lang
- язык на котором написан код. Например,css
,js
,jsx
,html
answers
- массив, содержащий варианты ответа в виде объектов. Каждый ответ содержит два поля:text
- текст ответа в формате markdown-строки. Не следует превышать 100 символов. Многострочные блоки кода в ответах не используются.isCorrect
- булевое значение. В зависимости от типа вопроса правильных ответов может быть один или несколько.
author
- твой ник на GitHub - будет отображаться в приложении вместе с вопросом.descriptionMarkup
- (опционально) - примечание к вопросу в формате markdown-строки. Сюда можно добавить дополнительную информацию, ссылки на статьи или YouTube-видео, объясняющие вопрос или ответ.
Для предпросмотра вопросов можно воспользоваться созданной для этого страницей.
Можно добавлять новые тесты по различным технологиям и на различные темы. Для этого нужно:
- Создать новую папку в папке
tasks
(в неё будут добавляться вопросы) - Добавить описание теста в массив
exams
(в файле:src/exams.ts
) в виде объекта:
{
id: 'js-basic', // соответствует названию созданной папки, в которой хранятся вопросы
title: 'JS Basic',
category: 'JavaScript', // язык или технология
level: 'basic', // 'basic' | 'middle' | 'advanced'
labels: ['frontend', 'backend'] // будут использоваться как теги
}
Новый тест будет добавлен в приложение, как только в нём будет хотя бы 5 вопросов.
В json-файлах, описывающих вопросы, используются строки markdown-текста. Markdown - простой язык текстовой разметки, который легко конвертируется в HTML. Ниже представлены примеры использования markdown:
- Ссылки
Список [анимируемых CSS-свойств](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties) на MDN.
Результат: Список анимируемых CSS-свойств на MDN.
- Строки кода
Используй `Array.prototype.shift()`
Результат: Используй Array.prototype.shift()
- Для переноса текста на следующую строку можно использовать
\n\n
Первый параграф. \n\n Второй параграф.
Результат:
Первый параграф.
Второй параграф.
Больше примеров использования markdown можно найти здесь. Впрочем, для составления вопросов в Interview Questions, синтаксиса, продемонстрированного выше, вполне хватит.