├── src ├── data │ └── tasks │ │ ├── tasksDirPath.ts │ │ ├── js-basic │ │ ├── q6.json │ │ ├── q4.json │ │ ├── q24.json │ │ ├── q28.json │ │ ├── q13.json │ │ ├── q1.json │ │ ├── q8.json │ │ ├── q7.json │ │ ├── q2.json │ │ ├── q16.json │ │ ├── q3.json │ │ ├── q20.json │ │ ├── q12.json │ │ ├── q9.json │ │ ├── q10.json │ │ ├── q11.json │ │ ├── q33.json │ │ ├── q26.json │ │ ├── q14.json │ │ ├── q5.json │ │ ├── q15.json │ │ ├── q19.json │ │ ├── q27.json │ │ ├── q21.json │ │ ├── q30.json │ │ ├── q17.json │ │ ├── q31.json │ │ ├── q22.json │ │ ├── q23.json │ │ └── q32.json │ │ ├── js-function │ │ ├── q2.json │ │ ├── q3.json │ │ ├── q4.json │ │ ├── q6.json │ │ ├── q1.json │ │ ├── q10.json │ │ ├── q7.json │ │ ├── q9.json │ │ ├── q5.json │ │ └── q8.json │ │ ├── react-basic │ │ ├── q13.json │ │ ├── q3.json │ │ ├── q11.json │ │ ├── q4.json │ │ ├── q10.json │ │ ├── q15.json │ │ ├── q6.json │ │ ├── q12.json │ │ ├── q7.json │ │ ├── q9.json │ │ ├── q5.json │ │ ├── q2.json │ │ └── q1.json │ │ ├── backend-beginner │ │ ├── q8.json │ │ ├── q2.json │ │ ├── q7.json │ │ ├── q5.json │ │ ├── q1.json │ │ ├── q3.json │ │ ├── q4.json │ │ └── q6.json │ │ ├── html-basic │ │ ├── q1.json │ │ ├── q3.json │ │ ├── q11.json │ │ ├── q9.json │ │ ├── q10.json │ │ ├── q7.json │ │ ├── q2.json │ │ ├── q6.json │ │ ├── q5.json │ │ └── q8.json │ │ ├── css-flexbox │ │ ├── q1.json │ │ ├── q6.json │ │ ├── q5.json │ │ ├── q4.json │ │ └── q2.json │ │ ├── data-structures │ │ ├── q1.json │ │ ├── q8.json │ │ ├── q5.json │ │ ├── q7.json │ │ ├── q10.json │ │ ├── q11.json │ │ ├── q2.json │ │ ├── q6.json │ │ ├── q3.json │ │ └── q4.json │ │ ├── js-classes │ │ ├── q2.json │ │ ├── q3.json │ │ └── q1.json │ │ ├── html-middle │ │ ├── q7.json │ │ ├── q6.json │ │ ├── q10.json │ │ ├── q5.json │ │ ├── q3.json │ │ ├── q9.json │ │ ├── q2.json │ │ └── q4.json │ │ ├── css-beginner │ │ ├── q3.json │ │ ├── q1.json │ │ ├── q4.json │ │ ├── q5.json │ │ ├── q10.json │ │ ├── q2.json │ │ ├── q6.json │ │ ├── q7.json │ │ ├── q8.json │ │ └── q9.json │ │ ├── css-basic │ │ ├── q12.json │ │ ├── q13.json │ │ ├── q5.json │ │ ├── q4.json │ │ ├── q6.json │ │ ├── q17.json │ │ ├── q9.json │ │ ├── q3.json │ │ ├── q15.json │ │ ├── q8.json │ │ ├── q18.json │ │ ├── q19.json │ │ ├── q24.json │ │ ├── q20.json │ │ ├── q1.json │ │ ├── q11.json │ │ ├── q2.json │ │ ├── q16.json │ │ └── q14.json │ │ ├── react-middle │ │ ├── q3.json │ │ ├── q1.json │ │ ├── q10.json │ │ ├── q14.json │ │ ├── q9.json │ │ ├── q2.json │ │ ├── q4.json │ │ ├── q5.json │ │ └── q6.json │ │ ├── sql-beginner │ │ ├── q2.json │ │ ├── q1.json │ │ ├── q6.json │ │ ├── q5.json │ │ ├── q4.json │ │ ├── q3.json │ │ └── q7.json │ │ ├── js-middle │ │ ├── q11.json │ │ ├── q6.json │ │ ├── q18.json │ │ ├── q9.json │ │ ├── q24.json │ │ ├── q2.json │ │ ├── q21.json │ │ ├── q28.json │ │ ├── q13.json │ │ ├── q17.json │ │ ├── q20.json │ │ ├── q3.json │ │ ├── q15.json │ │ ├── q1.json │ │ ├── q12.json │ │ ├── q14.json │ │ ├── q26.json │ │ ├── q10.json │ │ ├── q23.json │ │ ├── q7.json │ │ ├── q22.json │ │ ├── q5.json │ │ ├── q4.json │ │ └── q27.json │ │ ├── html-beginner │ │ ├── q10.json │ │ ├── q1.json │ │ ├── q8.json │ │ ├── q7.json │ │ ├── q5.json │ │ ├── q4.json │ │ ├── q6.json │ │ ├── q2.json │ │ ├── q9.json │ │ └── q3.json │ │ ├── js-promises │ │ ├── q1.json │ │ ├── q4.json │ │ ├── q5.json │ │ └── q7.json │ │ ├── react-samurai-way-001 │ │ ├── q4.json │ │ ├── q1.json │ │ ├── q6.json │ │ ├── q2.json │ │ ├── q8.json │ │ ├── q3.json │ │ ├── q5.json │ │ └── q7.json │ │ ├── react-samurai-way-000 │ │ ├── q5.json │ │ ├── q3.json │ │ ├── q2.json │ │ ├── q1.json │ │ └── q4.json │ │ ├── css-middle │ │ ├── q1.json │ │ ├── q3.json │ │ ├── q5.json │ │ ├── q4.json │ │ ├── q6.json │ │ ├── q7.json │ │ └── q2.json │ │ ├── js-arrays │ │ ├── q1.json │ │ ├── q3.json │ │ ├── q2.json │ │ ├── q4.json │ │ └── q5.json │ │ ├── react-samurai-way-006 │ │ ├── q3.json │ │ ├── q4.json │ │ └── q1.json │ │ ├── react-advance │ │ ├── q17.json │ │ └── q16.json │ │ ├── computer-science-beginner │ │ ├── q1.json │ │ ├── q3.json │ │ ├── q2.json │ │ ├── q4.json │ │ └── q5.json │ │ ├── react-samurai-way-003 │ │ ├── q2.json │ │ ├── q3.json │ │ ├── q1.json │ │ ├── q4.json │ │ └── q5.json │ │ ├── react-samurai-way-002 │ │ ├── q1.json │ │ ├── q3.json │ │ ├── q4.json │ │ └── q2.json │ │ ├── react-samurai-way-008 │ │ ├── q1.json │ │ ├── q2.json │ │ └── q4.json │ │ ├── react-samurai-way-009 │ │ ├── q4.json │ │ ├── q1.json │ │ ├── q2.json │ │ └── q3.json │ │ ├── js-beginner │ │ ├── q11.json │ │ ├── q4.json │ │ ├── q12.json │ │ ├── q5.json │ │ ├── q1.json │ │ ├── q6.json │ │ ├── q8.json │ │ ├── q2.json │ │ ├── q10.json │ │ └── q7.json │ │ ├── react-samurai-way-004 │ │ ├── q3.json │ │ ├── q2.json │ │ ├── q1.json │ │ └── q4.json │ │ ├── react-samurai-way-007 │ │ ├── q1.json │ │ ├── q2.json │ │ ├── q4.json │ │ └── q3.json │ │ ├── react-samurai-way-0010 │ │ ├── q3.json │ │ ├── q1.json │ │ ├── q4.json │ │ └── q2.json │ │ ├── patterns │ │ ├── q2.json │ │ └── q1.json │ │ ├── react-samurai-way-0012 │ │ ├── q1.json │ │ ├── q2.json │ │ ├── q3.json │ │ └── q4.json │ │ ├── react-samurai-way-0011 │ │ ├── q3.json │ │ ├── q1.json │ │ ├── q4.json │ │ └── q2.json │ │ ├── redux-basic │ │ └── q1.json │ │ ├── js-advanced │ │ └── q14.json │ │ └── react-samurai-way-005 │ │ ├── q4.json │ │ ├── q1.json │ │ └── q2.json ├── utils │ └── shuffle-array.ts ├── types │ └── entities.ts └── repositories │ └── exams-repository.ts ├── preparing-deploy.sh ├── .gitignore ├── package.json ├── deployment.yaml └── Dockerfile /src/data/tasks/tasksDirPath.ts: -------------------------------------------------------------------------------- 1 | export const tasksDirPath = __dirname; 2 | -------------------------------------------------------------------------------- /preparing-deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sed -i -e "s/REGISTRY_HOSTNAME/$1/g" deployment.yaml 3 | sed -i -e "s/PROJECT/$2/g" deployment.yaml 4 | sed -i -e "s/TAG_VERSION/$3/g" deployment.yaml 5 | sed -i -e "s/DEPLOYMENT_NAME/$4/g" deployment.yaml 6 | sed -i -e "s/PORT_CONTAINER/$5/g" deployment.yaml 7 | sed -i -e "s/NAMESPACE/$6/g" deployment.yaml -------------------------------------------------------------------------------- /src/utils/shuffle-array.ts: -------------------------------------------------------------------------------- 1 | export const shuffleArray = (arr: Array | null): Array => { 2 | if (!arr) return [] 3 | 4 | const res = [...arr] 5 | 6 | for (let i = res.length - 1; i > 0; i--) { 7 | let j = Math.floor(Math.random() * (i + 1)) 8 | 9 | ;[res[j], res[i]] = [res[i], res[j]] 10 | } 11 | 12 | return res 13 | } 14 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие методы есть у функций?", 3 | "answers": [ 4 | { 5 | "text": "`call`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "`apply`", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "`bind`", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "`name`", 18 | "isCorrect": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие методы есть у функций?", 3 | "answers": [ 4 | { 5 | "text": "`call`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "`apply`", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "`bind`", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "`name`", 18 | "isCorrect": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | dist 8 | 9 | # testing 10 | /coverage 11 | 12 | # production 13 | /build 14 | 15 | # misc 16 | .DS_Store 17 | .env.local 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | .idea 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q13.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "`React.memo()` мемоизирует:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Результат вызова функции", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "Ссылку на функцию", 12 | "isCorrect":false 13 | }, 14 | { 15 | "text": "Весь компонент", 16 | "isCorrect": true 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Чему равен typeof NaN?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`'number'`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`'object'`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`'NaN'`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`'undefined'`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Назови правила хуков", 3 | "answers": [ 4 | { 5 | "text": "Используются только на верхнем уровне вложенности", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Должны содержать массив зависимостей", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Вызываются только в функциональных компонентах и кастомных хуках", 14 | "isCorrect": true 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой HTTP статус-код обозначает успешный ответ сервера?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "200", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "404", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "500", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "302", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой язык не используется для backend разработки?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Python", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "JavaScript", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "HTML", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Java", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой HTTP метод используется для создания новой записи на сервере?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "GET", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "POST", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "DELETE", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "PUT", 19 | "isCorrect": false 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие значения может принимать атрибут `method` у тега `
`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "get", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "delete", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "put", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "post", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/css-flexbox/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое значение имеет свойство `align-item` по умолчанию?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`stretch`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`start`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`end`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`center`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что из перечисленного НЕ является структурой данных?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Стек", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Массив", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Функция", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Хеш-таблица", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-classes/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "С помощью чего можно расширить класс?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`constructor()`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`super()`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`extends`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`new Object(...)`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q11.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите верные утверждения. Хук `useId`:", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Возвращает уникальный ID", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "Не принимает параметры", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "Можно использовать для генерации keys", 16 | "isCorrect": false 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "С помощью какого тега можно отобразить фавиконку в браузере?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "``", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "``", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "``", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`
`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите линейные структуры данных", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Стек", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "Дерево", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Очередь", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "Массив", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как установить фоновый цвет элемента в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Фоновый цвет элемента устанавливается с помощью свойства `bg-color`, например: `bg-color: #FFFF00;`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Фоновый цвет элемента устанавливается с помощью свойства `background-color`, например: `background-color: #FFFF00;`", 11 | "isCorrect": true 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что делает метод множества `set.clear()`?", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Удаляет все имеющиеся значения", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "Удаляет последнее значение", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Удаляет первое значение и возвращает `true`", 16 | "isCorrect": false 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери элемент, который может быть прямым дочерним элементом для``?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "``", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "``", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "``", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что вернёт оператор `typeof` если вызвать его для функции?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`'object'`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`'string'`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`'undefined'`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`'function'`", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/types/entities.ts: -------------------------------------------------------------------------------- 1 | export type Question = { 2 | id: string 3 | questionText: string 4 | answers: AnswerType[] 5 | type?: QuestionType 6 | code?: { 7 | lang: string 8 | text: string 9 | } 10 | descriptionMarkup?: string 11 | author?: string 12 | } 13 | 14 | export type AnswerType = { 15 | id: string 16 | text: string 17 | isCorrect: boolean 18 | } 19 | 20 | export type QuestionType = 'radio' | 'checkbox' 21 | 22 | export type Questions = { 23 | [techId: string]: Question[] 24 | } 25 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q12.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Полупрозрачность пикселей поддерживается только форматом:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "SVG", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "GIF", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "PNG", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "JPEG", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как можно реализовать каррированную функцию в JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`function add(x) { return function(y) { return x + y } }`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`function add(x, y) { return x + y }`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`function add(x) { return x + x }`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения о методе `bind()`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Вызывает функцию в заданном контексте", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Создаёт *новую* функции, у которой при вызове будет заданный `this`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Не работает для стрелочных функций", 15 | "isCorrect": true 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой тип связывания данных(data binding) реализован в React?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Одностороннее связывание (one-way binding)", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Двухстороннее связывание (two-way binding)", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Одноразовое связывание (one-time binding)", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/sql-beginner/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "С помощью какой команды можно создать новую таблицу в SQL?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`NEW TABLE`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`TABLE CREATE`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`BUILD TABLE`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`CREATE TABLE`", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой из этих инструментов используется для управления зависимостями в проектах на JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "NPM", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Maven", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Pip", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Webpack", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q13.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите относительные единицы измерения, используемые в `CSS`.", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`vh`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`px`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`cm`", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`em`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какая CSS-функция используется для вставки пользовательских свойств(custom property)?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`calc()`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`var()`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`attr()`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`hsl()`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q11.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Чему равен результат выражения `Object.getPrototypeOf(Object)`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`null`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`Function.prototype`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`Object.prototype`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`undefined`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как вставить перенос строки в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Перенос строки добавляется с помощью элемента ``.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Перенос строки добавляется с помощью элемента ``.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Перенос строки добавляется с помощью элемента `
`.", 15 | "isCorrect": true 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q24.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой из вариантов написания строк является допустимым?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`\"It's string\"`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`'It is string'`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`'It's string'`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`\"It is string'`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Структура данных Stack работает по принципам:", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "First In, Last Out", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "First In, First Out", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Last In, First Out", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Last In, Last Out", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-promises/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Укажите статические методы класса `Promise`", 3 | "answers": [ 4 | { 5 | "text": "`catch`", 6 | "isCorrect": false 7 | }, 8 | { 9 | "text": "`all`", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "`then`", 14 | "isCorrect": false 15 | }, 16 | { 17 | "text": "`resolve`", 18 | "isCorrect": true 19 | }, 20 | { 21 | "text": "`race`", 22 | "isCorrect": true 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Логика нативного приложения создаётся в файле с расширением: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`html`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`js`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`json`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`md`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/sql-beginner/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое выражение в SQL используется для установления ограничений на данные в таблице?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`SET`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`ALTER TABLE`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`CONSTRAINT`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`MODIFY`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q11.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Тег `` в HTML-документе следует за тегом:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "``", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "``", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "``", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`<!DOCTYPE html>`", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите верные утверждения о теге `<fieldset>`", 3 | "answers": [ 4 | { 5 | "text": "Атрибут `disabled` будет блокировать все элементы формы внутри тега", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Позволяет сгруппировать элементы формы в блок с визуальным выделением границ", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "Обязательно содержит дочерний тег `<legend>`", 14 | "isCorrect": false 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как можно передать данные в React-компонент?", 3 | "answers": [ 4 | { 5 | "text": "С помощью `React.createContext` и `useContext`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Использовать пропсы", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "Использовать хук `useState`", 14 | "isCorrect": false 15 | }, 16 | { 17 | "text": "С помощью Redux и `useSelector`", 18 | "isCorrect": true 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/repositories/exams-repository.ts: -------------------------------------------------------------------------------- 1 | import { exams } from '../exams' 2 | import { shuffleArray } from '../utils/shuffle-array' 3 | import { questions } from '../questions' 4 | 5 | const MINIMAL_QUESTIONS_QUANTITY = 5 6 | const EXAM_QUESTIONS_QUANTITY = 10 7 | 8 | export const examsRepository = { 9 | getExams() { 10 | return exams.filter(exam => questions[exam.id].length >= MINIMAL_QUESTIONS_QUANTITY) 11 | }, 12 | getExamQuestionsById(id: string) { 13 | return shuffleArray(questions[id]).slice(0, EXAM_QUESTIONS_QUANTITY) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какого цвета будет текст в параграфе?", 3 | "type": "radio", 4 | "code": { 5 | "text": "/* фрагмент CSS-кода */\n#section1 {\n color: tomato;\n}\np {\n color: violet;\n}\n\n<!-- фрагмент HTML-кода -->\n<section id=\"section1\"/>\n <p>some text</p>\n</section>", 6 | "lang": "css" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`violet`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`tomato`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите методы массивов, с помощью которых можно работать с очередью", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`push()`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`pop()`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`unshift()`", 16 | "isCorrect":false 17 | }, 18 | { 19 | "text": "`shift()`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q11.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите методы массива, с помощью который можно работать со стеком", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`push()`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`pop()`", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "`unshift()`", 16 | "isCorrect":false 17 | }, 18 | { 19 | "text": "`shift()`", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать заголовок первого уровня в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Заголовок первого уровня создается с помощью тега `<heading>`.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Заголовок первого уровня создается с помощью тега `<title>`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Заголовок первого уровня создается с помощью тега `<h1>`.", 15 | "isCorrect": true 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q28.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой будет результат при выполнении кода?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "1000 / Infinity" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`NaN`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`Infinity`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`0`", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "`1000`", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-000/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Проект, который будет выполнен по результатам курса: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "учебный", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "тренировочный", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "шуточный", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "реальный продакшн-проект", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Фронтенд-реакт-приложение создаётся внутри файла: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`index.html`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`script.js`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`package.json`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`pnpm-lock.yaml`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q13.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите способы создания объекта", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Конструктор `new Object()`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Метод `Object.create()`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Оператор присваивания: `let newObject = oldObject`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Литерал `let object = {}`", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "С помощью чего можно перебрать не только собственные свойства объекта, но и унаследованные?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`Object.keys()`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`Object.values()`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`for..in`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`for..of`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/data/tasks/css-flexbox/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое значение выравниванивает flex-элементы вдоль поперечной оси?", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`align-self`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`justify-content`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`align-content`", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`align-items`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-middle/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Требуется, чтобы высота контейнера составляла 1 / 3 от задаваемой ширины. Какое CSS-свойство решит эту задачу?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`max-height`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`padding-top`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`position`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`aspect-ratio`", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать ссылку, которая откроется в новой вкладке браузера?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для этого cледует использовать атрибут `target=\"_blank\"`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Для этого cледует использовать атрибут `target=\"_window\"`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Для этого cледует использовать атрибут `target=\"new-window\"`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/js-arrays/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как можно добавить элемент в начало массива?", 3 | "answers": [ 4 | { 5 | "text": "Использовать `Array.prototype.unshift()`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Использовать `Array.prototype.push()`", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Использовать `spread` оператор", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Использовать `Array.prototype.shift()`", 18 | "isCorrect": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как можно добавить элемент в начало массива?", 3 | "answers": [ 4 | { 5 | "text": "Использовать `Array.prototype.unshift()`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Использовать `Array.prototype.push()`", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Использовать `spread` оператор", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Использовать `Array.prototype.shift()`", 18 | "isCorrect": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какого falsy-значения не хватает в массиве?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "[false, null, NaN, undefined, 0]" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`[]`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`-1`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`{}`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`''`", 23 | "isCorrect": true 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В какой вкладке консоли браузера можно найти данные, которые приходят с сервера: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "console", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "sources", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "network", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "application", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое backend разработка?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Разработка пользовательского интерфейса", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Разработка клиентской части приложения", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Разработка серверной части приложения", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Дизайн веб-сайтов", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q18.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "У какого флага значение `false` при создании свойства объекта \"обычным способом\"?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`writable`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`enumerable`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`configurable`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "По умолчанию у всех флагов значение `true`", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/data/tasks/sql-beginner/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как удалить запись из таблицы в SQL?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`REMOVE FROM`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`DISCARD FROM`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`EXPEL FROM`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`DELETE FROM`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Например: `DELETE FROM users WHERE id = 1`" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое значение не может принимать свойство `position`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`static`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`relative`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`block`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`absolute`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`sticky`", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Сколько раз 'Yo' будет выведено в консоль?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "for (let i = 0; i < 7; i += 2) {\n console.log('Yo')\n}" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "0", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "2", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "3", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "4", 23 | "isCorrect": true 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-000/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Уже вчера, по утверждению Димыча, нужно было уметь: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "пользоваться IDE", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "пересесть на Web-Storm", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "деплоить вэб-приложение", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "вайб-кодить", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-006/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В контексте JSX и React, как называется то, что в нативном `HTML` именуется `атрибутами`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "JSX-элементы", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Параметры", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Аргументы", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Пропсы", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "interview-questions-api", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "watch": "tsc -w", 8 | "dev": "nodemon --inspect dist/index.js", 9 | "build": "tsc", 10 | "start": "node dist/index.js" 11 | }, 12 | "dependencies": { 13 | "fastify": "4.26.1", 14 | "uuid": "9.0.1" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "20.11.17", 18 | "@types/uuid": "9.0.8", 19 | "nodemon": "3.0.3", 20 | "ts-node": "10.9.2", 21 | "typescript": "5.3.3" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что характерно для чистых функций?", 3 | "answers": [ 4 | { 5 | "text": "Не имеют side effects", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Могут мутабельно изменять входные данные", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Предсказуемо возвращают один и тот же результат при одинаковых параметрах", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Могут зависеть от внешних переменных", 18 | "isCorrect": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/data/tasks/react-advance/q17.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите обязательные параметры, которые принимает хук `useImperativeHandle()`", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`initialValue`", 8 | "isCorrect":false 9 | }, 10 | { 11 | "text": "функцию `createHandle`", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "функцию `setup`", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`ref`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что характерно для чистых функций?", 3 | "answers": [ 4 | { 5 | "text": "Не имеют side effects", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Могут мутабельно изменять входные данные", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Предсказуемо возвращают один и тот же результат при одинаковых параметрах", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Могут зависеть от внешних переменных", 18 | "isCorrect": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: DEPLOYMENT_NAME 5 | namespace: NAMESPACE 6 | labels: 7 | app: PROJECT 8 | spec: 9 | selector: 10 | matchLabels: 11 | project: PROJECT 12 | template: 13 | metadata: 14 | namespace: NAMESPACE 15 | labels: 16 | project: PROJECT 17 | spec: 18 | imagePullSecrets: 19 | - name: dockerhub-reg 20 | containers: 21 | - name: PROJECT 22 | image: REGISTRY_HOSTNAME/PROJECT:TAG_VERSION 23 | ports: 24 | - containerPort: PORT_CONTAINER -------------------------------------------------------------------------------- /src/data/tasks/computer-science-beginner/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое алгоритм?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Способ кодирования информации", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Набор правил для решения математических операций", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Система последовательных операций для решения задачи", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Программа для управления компьютером", 19 | "isCorrect": false 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/data/tasks/css-flexbox/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое свойство указывает как располагаться flex-элементам: в одну строку или можно занять несколько строк?", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`flex-basic`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`flex-shrink`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`flex-wrap`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`flex-grow`", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-middle/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "За что отвечает CSS-свойство `white-space`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Управляет тем, как обрабатываются пробельные символы", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Определяет, надо ли разрывать длинные слова для переноса на новую строку", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Определяет, где будет установлен перевод на новую строку, в случае превышения текстом границ блока", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/css-middle/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите математические фунцкии CSS", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`min()`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`max()`", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "`clamp()`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`calc()`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Атрибут `action` тега `form` опрелеляет:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Способ отправки данных формы.", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "Уникальное имя формы", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Способ кодирования данных формы", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "URL, куда отправляются данные формы", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какая функция является IIFE (Immediately Invoked Function Expression)?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`const foo = function bar() {}`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`function(){}()`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`(function () {})()`", 15 | "isCorrect": true 16 | } 17 | ], 18 | "descriptionMarkup": "Про IIFE, а также про области видимости можно почитать в [doka](https://doka.guide/js/closures/)." 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/sql-beginner/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как обновить данные в существующей записи в SQL?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`MODIFY`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`CHANGE SET WHERE`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`REFRESH`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`UPDATE`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Например: `UPDATE users SET email = 'newemail@example.com' WHERE id = 1;`" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой протокол прикладного уровня используется для передачи веб-страниц от сервера к клиенту?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "FTP", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "HTTP", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "SMTP", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "TCP", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/computer-science-beginner/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое язык программирования?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Система для перевода текста между людьми", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Набор правил для написания компьютерных программ", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Инструмент для создания документов", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Программа для обработки текстов", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q17.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Ширина окна браузера равна `800px`. `5vw` будет равен:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`16px`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`8px`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`4px`", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`40px`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как вставить горизонтальную линию (разделитель) в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Горизонтальная линия вставляется с помощью тега `<hl>`, например: `<hl>`.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Горизонтальная линия вставляется с помощью тега `<hline>`, например: `<hline>`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Горизонтальная линия вставляется с помощью тега `<hr>`, например: `<hr>`.", 15 | "isCorrect": true 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q16.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие области видимости могут иметь `let` и `const`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Модульная", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Глобальная", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Блочная", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Динамическая", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "Почитать про области видимости можно на [habr](https://habr.com/ru/post/517338)." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "У какой из перечисленных функций отсутствует `this` и его значение берётся снаружи?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Колбэк-функция", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Функция созданная через function declaration", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Стрелочная функция", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Функция созданная через function expression", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой метод жизненного цикла используется для избавления от ненужных побочных эффектов(например, отмена таймера)?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`componentDidMount`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`componentDidUpdate`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`componentWillUnmount`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`shouldComponentUpdate`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/computer-science-beginner/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое программирование?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Использование компьютера для решения математических задач", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Настройка компьютерных сетей", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Процесс создания компьютерных программ", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Изучение аппаратного обеспечения компьютера", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как изменить цвет текста элемента в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Цвет текста изменяется с помощью свойства `text-color`, например: `text-color: red;`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Цвет текста изменяется с помощью свойства `color`, например: `color: red;`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Цвет текста изменяется с помощью свойства `font-color`, например: `font-color: red;`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как добавить внешний отступ вокруг элемента в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Внешний отступ задается с помощью свойства `margin`, например: `margin: 10px;`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Внешний отступ задается с помощью свойства `padding`, например: `padding: 10px;`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Внешний отступ задается с помощью свойства `gap`, например: `gap: 10px;`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как добавить внутренний отступ для элемента в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Внутренний отступ задается с помощью свойства `margin`, например: `margin: 10px;`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Внутренний отступ задается с помощью свойства `gap`, например: `gap: 10px;`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Внутренний отступ задается с помощью свойства `padding`, например: `padding: 5px;`", 15 | "isCorrect": true 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/css-middle/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Свойство `overflow` по умолчанию имеет значение:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`auto`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`hidden`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`scroll`", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`visible`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-middle/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Свойство `object-fit` по умолчанию имеет значение:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`fill`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`cover`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`none`", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`contain`", 20 | "isCorrect":false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как разработчик может задать значение служебному свойству объектов `[[prototype]]`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "С помощью `__proto__`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Метод `Object.setPrototypeOf()`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Метод `Object.create()`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "К служебному свойство `[[prototype]]` нет доступа", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q15.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Хук `useReducer` возвращает: ", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`undefined`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "Текущее состояние и функцию `setState`, которая обновляет состояние ", 12 | "isCorrect":false 13 | }, 14 | { 15 | "text": "Массив с двумя значениями: текущее состояние и функцию `dispatch`", 16 | "isCorrect": true 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-000/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Миссия курса: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Заработать миллион долларов.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Заработать миллиард долларов.", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Подружиться с Цукербергом.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Помочь стать востребованным software-инженером всем желающим.", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-003/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой файл считается основным конфигурационным файлом для проекта Node.js, перечисляющим его зависимости?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`index.html`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`main.tsx`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`package.json`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`vite.config.ts`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/sql-beginner/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как выбрать все записи из таблицы в SQL?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`GET ALL FROM`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`EXTRACT * FROM`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`COLLECT * FROM`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`SELECT * FROM`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Например, `SELECT * FROM users` выберет все столбцы из таблицы `users`" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Где будет располагаться дочерний элемент, если в родительском написать эти свойства: `display: flex; justify-content: space-around; align-items: flex-end;`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Вертикально внизу, горизонтально по центру", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Горизонтально слева, вертикально по центру", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Вертикально в верху, горизонтально по центру", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как изменить размер шрифта текста в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Размер шрифта изменяется с помощью свойства `size`, например: `size: 16px;`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Размер шрифта изменяется с помощью свойства `font-size`, например: `font-size: 16px;`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Размер шрифта изменяется с помощью свойства `size-font`, например: `size-font: 16px;`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите способы приведения строки к числу", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "'2' - '2'", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "оператор `+`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`Number(str)`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "'2' + '2'", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "При '2' + '2' срабатывает конкатенация, т.е. объединение строк. В результате получается строка '22'." 23 | } -------------------------------------------------------------------------------- /src/data/tasks/react-advance/q16.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите хук, который позволяет обновлять состояние, не блокируя пользовательский интерфейс.", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`useSyncExternalStore()`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`useLayoutEffect()`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`useTransition()`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`useDeferredValue()`", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения о рефах", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Когда значение рефа меняется, не происходит ре-рендера", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Значение сохраняется между ре-рендарами", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Являются объектами, имеющими свойство `current`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Значение должно меняться иммутабельно", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-000/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как называется курс?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Реакт. Путь самурая. Без шансов.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Реакт. Путь самурая. Без альтернатив.", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Реакт. Путь самурая. Без тормозов.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Реакт. У самурая нет цели, есть только путь.", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое REST API?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Программа для тестирования сайтов", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Интерфейс для создания графических элементов", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Набор архитектурных принципов для создания масштабируемой и гибкой сети", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Технология для подключения внешних устройств", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери значение, которое необходимо указать `text-align`, чтобы текст растянулся по всей ширине контейнера, увеличив пробелы между словами", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`text-align: center`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`text-align: justify`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`text-align: inherit`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`text-align: auto`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/computer-science-beginner/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое компьютерные сети?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Устройства для хранения информации", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Программы для управления базами данных", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Средства взаимодействия между компьютерами для обмена данными", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Кабели и периферийные устройства компьютера", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Структура данных `Map` - это коллекция", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "уникальных значений (без ключей)", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "уникальных ключей (без значений)", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "ключ/значение, ключи могут быть любого типа", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "ключ/значение, где ключ - строка", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q20.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что произойдет после выполнения кода?", 3 | "type": "checkbox", 4 | "code": { 5 | "lang": "js", 6 | "text": "`let a = [1, 2, 3]; \n delete a[2]; \n a.push(4);`" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`a.length === 3`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`a.length === 4`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`SyntaxError`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`a[2] === undefined`", 23 | "isCorrect": true 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q24.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Для чего используется метод `Object.defineProperty()`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для получения значений флагов объекта", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Для настройки доступа ко всему объекту", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Для поиска свойства в объекте", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Для добавления или изменеия свойств с настройкой их флагов", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/data/tasks/sql-beginner/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как добавить новую запись (строку) в таблицу в SQL?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`ADD RECORD`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`PUSH INTO`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`INSERT RAW`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`INSERT INTO`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Например: `INSERT INTO users (id, name, email) VALUES (1, 'John', 'john@example.com');`" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите неправильные определения списков", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`<dl> <dt>coffee</dt> <dd>black hot drink</dd> </dl>`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`<ul> <li> <li></li> </li> </ul>`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`<dl> <dt>coffee</dt> <dt>tea</dt> </dl>`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`<ol> <li> <ul> <li>1</li> </ul> </li> </ol>`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q12.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой результат будет верным при вызове `'сосулька'.replace('с','р')` ?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "рорулька", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "росулька", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "сорулька", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "рррулька", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "Для замены всех совпадений у строк существует метод `.replaceAll()`" 23 | } 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать объект, который не наследует никаких свойств?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Используя `Object.create`, передав в него `null`: `Object.create(null)`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Используя литерал объекта `{}`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Используя конструктор `new Object()`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Используя метод `Object.assign()`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/computer-science-beginner/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое операционная система?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Устройство для ввода данных в компьютер", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Программа для создания текстовых документов", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Программное обеспечение для управления ресурсами компьютера", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Сеть для обмена данными между компьютерами", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Отличия `Map` от обычного объекта `Object` в JavaScript:", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Что угодно может быть ключом, в том числе и объекты.", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "Ключом могут быть только объекты.", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Есть дополнительные методы.", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "Есть свойство `size`.", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое условие приведёт к выходу из цикла после вывода числа 3 в консоль?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "let i = 0\ndo {\n i += 1\n console.log(i)\n} while ( /*your code*/ )" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "i < 4", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "i > 3", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "i <= 3", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "i < 3", 23 | "isCorrect": true 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что следует использовать, чтобы избежать излишней вложенности в разметке?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`React.Component`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`React.createContext`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`React.createRef`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`React.Fragment`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Можно также использовать сокращённый синтаксис `<></>`" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие из перечисленных CSS-свойств можно анимировать?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`display`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`font-size`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`opacity`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`margin`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Список [анимируемых CSS-свойств](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties) на MDN." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать абзац текста в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Абзац текста создается с помощью тега `<p>`, например: `<p>Это абзац текста.</p>`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Абзац текста создается с помощью тега `<text>`, например: `<text>Это абзац текста.</text>`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Абзац текста создается с помощью тега `<paragraph>`, например: `<paragraph>Это абзац текста.</paragraph>`.", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как изменить шрифт в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Шрифт текста изменяется с помощью свойства `font-style`, например: `font-style: Arial, sans-serif;`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Шрифт текста изменяется с помощью свойства `font-family`, например: `font-family: Arial, sans-serif;`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Шрифт текста изменяется с помощью свойства `font-type`, например: `font-type: Arial, sans-serif;`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/css-flexbox/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое из значений свойства `justify-content` прижимает первый и последний элементы к краям контейнера, а остальные распределяет равномерно между ними?", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`space-around`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`space-evenly`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`space-between`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`stretch`", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Для перебора коллекций `Map` и `Set` существуют встроенные методы:", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`.has(value)`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`.keys()`", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "`.values()`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`.entries()`", 20 | "isCorrect": true 21 | }, 22 | { 23 | "text": "`.get(key)`", 24 | "isCorrect": false 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать нумерованный список в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Нумерованный список создается с помощью тега `<ul>`, а элементы списка - с помощью тега `<li>`.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Нумерованный список создается с помощью тега `<ol>`, а элементы списка - с помощью тега `<li>`.", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Нумерованный список создается с помощью тега `<dl>`, а элементы списка - с помощью тега `<li>`.", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-002/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое NodeJS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Современная IDE для написания кода на языке JavaScript", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Платформа для выполнения кода, написанного на языке JavaScript", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Фреймворк, транспилирующий html-тэги в JSX-разметку", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Разновидность браузера", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-arrays/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как можно обратиться к последнему элементу массива?", 3 | "answers": [ 4 | { 5 | "text": "`array[-1]`", 6 | "isCorrect": false 7 | }, 8 | { 9 | "text": "`array[array.length - 1]`", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "`array.at(-1)`", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "`array.indexOf(-1)`", 18 | "isCorrect": false 19 | } 20 | ], 21 | "descriptionMarkup": "Использовать метод массива `.at()` в этом случае куда приятней, правда? :) Сейчас он поддерживается во всех современных браузерах." 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как можно обратиться к последнему элементу массива?", 3 | "answers": [ 4 | { 5 | "text": "`array[-1]`", 6 | "isCorrect": false 7 | }, 8 | { 9 | "text": "`array[array.length - 1]`", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "`array.at(-1)`", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "`array.indexOf(-1)`", 18 | "isCorrect": false 19 | } 20 | ], 21 | "descriptionMarkup": "Использовать метод массива `.at()` в этом случае куда приятней, правда? :) Сейчас он поддерживается во всех современных браузерах." 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q11.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Чему равно `1 && 4 && undefined && 0`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "4", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "undefined", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "0", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "1", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "При работе с оператором `&&` каждый операнд преобразует в логическое значение. Если результат `false`, останавливается и возвращает исходное значение этого операнда." 23 | } 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Встроенный компонент `<Suspense>`:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Позволяет программно измерить производительность рендеринга дерева `React`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "Включает дополнительные проверки при разработке, которые помогают находить ошибки на ранней стадии", 12 | "isCorrect":false 13 | }, 14 | { 15 | "text": "Позволяет отображать запасной вариант(fallback) во время загрузки дочерних компонентов", 16 | "isCorrect": true 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-008/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое React-компонент?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Модульный файл, который определяет стили приложения", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Функция, которая возвращает JSX-разметку", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Таблица базы данных для хранения данных приложения", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Конфигурационный файл для настроек проекта", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-009/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Каковы базовые суточные лимиты на количество запросов к API в рамках бесплатного использования, упомянутые в видео? ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "1000 запросов в сутки", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "5000 запросов в сутки", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "100 запросов в сутки", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Неограниченное количество запросов", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q21.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что относится к функциям высшего порядка?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Функция выполняющая \"тяжёлые\" вычисления", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Функция, которая возвращает другую функцию", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Функция, которая принимает другую функцию, как аргумент", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Функция, которая детерминирована, идемпотентна и не имеет side effects", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q28.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В чем особенность флага свойства `configurable`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "При значении `false` свойство нельзя изменить", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "По умолчанию имеет значение `false`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "В отличии от других флагов при задании значния `false`, его больше нельзя переопределять", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Можно задать только при создании свойства", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q12.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите верные утверждения:", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Хук `useMemo()` запоминает ссылку на функцию", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "Хук `useMemo()` запоминает результат вызова функции", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "Хук `useCallback` запоминает ссылку на функцию", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "Хук `useCallback` запоминает результат вызова функции", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери теги, которые используются для создания различных типов списков", 3 | "answers": [ 4 | { 5 | "text": "`<ol>`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "`<legend>`", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "`<ul>`", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "`<dl>`", 18 | "isCorrect": true 19 | } 20 | ], 21 | "descriptionMarkup": "`dl` используется для создания списка пар терминов и их описаний. Например, можно применить этот тег, если нужно сверстать список научных терминов и их определений." 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что означает выражение 'браузер парсит': ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "браузер разбирает и анализирует файл со всеми его тэгами и ссылками\nна другие ресурсы", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "браузер передаёт данные на сервер", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "браузер отправляет данные с сервера", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "браузер создаёт DOM-дерево", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-002/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "NodeJS устанавливается вместе: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "с менеджером пакетов для установки утилит, необходимых для разработки", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "с DOM-деревом", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "с Event-Loop, необходимым для асинхронного программирования", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "с модулями, необходимыми для декомпозиции кода", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как установить жирное начертание (жирный шрифт) для текста в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Жирное начертание устанавливается с помощью свойства `text-weight`, например: `text-weight: bold;`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Жирное начертание устанавливается с помощью свойства `text-fat`, например: `text-fat: bold;`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Жирное начертание устанавливается с помощью свойства `font-weight`, например: `font-weight: bold;`", 15 | "isCorrect": true 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как изменить цвет фона элемента в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Цвет фона элемента изменяется с помощью свойства `bg-color`, например: `bg-color: #F0F0F0;`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Цвет фона элемента изменяется с помощью свойства `element-background`, например: `element-background: #F0F0F0;`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Цвет фона элемента изменяется с помощью свойства `background-color`, например: `background-color: #F0F0F0;`", 15 | "isCorrect": true 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать список без нумерации (маркированный список) в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Маркированный список создается с помощью тега `<ul>`, а элементы списка - с помощью тега `<li>`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Маркированный список создается с помощью тега `<ol>`, а элементы списка - с помощью тега `<li>`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Маркированный список создается с помощью тега `<dl>`, а элементы списка - с помощью тега `<li>`.", 15 | "isCorrect": false 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q33.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие особенности можно выделить для объектов в формате JSON?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Не поддерживаются методы и свойства, содержащие `undefined`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "При работе со строками используются только одинарные кавычки `'`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Поддерживаются символьные ключи и значения", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Свойства обязательно заключаются в кавычки", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-classes/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой синтаксис используется для создания приватных полей в классах?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`*name`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`#name`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`_name`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`$name`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "О приватных и защищённых методах и свойствах можно почитать на [learn.javascript](https://learn.javascript.ru/private-protected-properties-methods)" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-000/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что нужно знать, чтобы начать изучать этот курс: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Основы JavaScript, основы вёрстки, иметь представление о Typescript,\n иметь представление о ReactJS", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Ничего не нужно", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Быть профессионалом в DevOps", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Быть работающим фронтенд-разработчиком", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "С помощью какого метода JavaScript мы добавляем элемент (узел) DOM-дерева\n(тэг `html`-разметки) в другой элемент DOM-дерева, то есть вставляем один элемент в другой,\nнаподобие \"матрёшки\": ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`createElement`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`getElement`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`link`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`append`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой заголовок будет отображён на странице", 3 | "type": "radio", 4 | "code": { 5 | "lang": "jsx", 6 | "text": "export const Title = () => {\n const array = []\n\n return <h1>{array.length && 'The title'}</h1>\n}" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "The title", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "0", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "undefined", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "Заголовок без содержимого (пустой `<h1>` тег)", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какая запись инлайновых стилей в JSX будет корректной?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`style={{ background-color: 'green', margin-top: '5px' }}`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`style={ background-color: 'green', margin-top: '5px' }`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`style={ backgroundColor: 'green', marginTop: '5px' }`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`style={{ backgroundColor: 'green', marginTop: '5px' }}`", 19 | "isCorrect": true 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какая ошибка в данном HTML-коде?", 3 | "type": "radio", 4 | "code": { 5 | "text": "<video src=\"media/flower.mp4\" autoplay width=\"250\">", 6 | "lang": "html" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "Требуется закрывающий тег `</video>`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "У атрибута `autoplay` не указано значение", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Отсутствует атрибут `type`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "В этом коде нет ошибок", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/css-middle/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите свойство CSS, которое указывает, как будут расположены строки текста(горизонтально или вертикально).", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`text-justify`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`text-overflow`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`writing-mode`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`word-wrap`", 20 | "isCorrect":false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать ссылку (гиперссылку) в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Ссылка создается с помощью тега `<a>`, например: `<a href=\"https://www.example.com\">Это ссылка</a>`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Ссылка создается с помощью тега `<link>`, например: `<link href=\"https://www.example.com\">Это ссылка</link>`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Ссылка создается с помощью тега `<anchor>`, например: `<anchor href=\"https://www.example.com\">Это ссылка</anchor>`.", 15 | "isCorrect": false 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/sql-beginner/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как выбрать записи из таблицы, удовлетворяющие условию, в SQL?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`FILTER * FROM`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`SELECT MATCHING FROM`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`GET WHERE`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`SELECT WHERE`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Например, чтобы выбрать всех пользователей возрастом 10 лет из таблицы `users`, используется команда `SELECT * FROM users WHERE age = 10`." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать таблицу в HTML?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Таблица создается с помощью элементов `<t>`, `<trow>` (строка), `<thead>` (заголовок ячейки) и `<td>` (ячейка данных).", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Таблица создается с помощью элементов `<table>`, `<tr>` (строка), `<th>` (заголовок ячейки) и `<td>` (ячейка данных).", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Таблица создается с помощью элементов `<table>`, `<td>` (строка), `<th>` (заголовок ячейки) и `<tr>` (ячейка данных).", 15 | "isCorrect": false 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q26.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Для чего используется `!!` (два оператора \"НЕ\" подряд)?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "`false || NaN && true || 0`" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "Не используется запись является ошибочной", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Для приведения числа к 0", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Для приведения аргумента к типу boolean", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "Для придания коду \"восклицательного\" тона)", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q13.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как получить свойство `_title`, используя геттер?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "const book = {\n _title: 'The Lord of the Rings',\n _author: 'J.R.R.Tolkien',\n get title() {\n return this._title\n },\n}" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`book._title`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`book.title`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`book.title()`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`book._title()`", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения об атрибуте `key`", 3 | "answers": [ 4 | { 5 | "text": "Значение атрибута должно быть уникальным", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Требуется для внутренней работы React (алгоритма согласования)", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "Может использоваться дочерним компонентом вместе с передаваемыми пропсами", 14 | "isCorrect": false 15 | }, 16 | { 17 | "text": "В качестве значения допускается использовать индекс элемента массива, если порядок элементов не будет меняться", 18 | "isCorrect": true 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой HTML-код невалиден?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`<img src=\"https://example.com/picture.jpg\">`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`<ul> <li><a href=\"#\">1</a></li> </ul>`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`<ol> <li><ul> <li>1</li> </ul></li> </ol>`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`<img src=\"https://example.com/picture.jpg\" alt=\"alt text\">`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "`img` элементы обязательно должны иметь `alt` атрибут" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q14.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что из перечисленного имеет hoisting?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`let`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`const`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`var`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Функция созданная через `function declaration`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "JavaScript переносит функции, созданные с помощью `Function Declaration`, вверх текущей области видимости,\n\nа также переменные, объявленные с помощью ключевого слова `var`." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q11.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что выведется в `console.log` при выполнении следующего кода?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "for (let i = 1; i <= 10; i++) {\n console.log(i);\n}" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "Числа от 1 до 10", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Результатом будет строка 'i'.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Будет выведена последовательность чисел от 0 до 9.", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "Выведется только число 10.", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/html-beginner/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как вставить изображение в HTML документ?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Изображение вставляется с помощью тега `<img>`, например: `<img src=\"image.jpg\" alt=\"Описание изображения\">`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Изображение вставляется с помощью тега `<image>`, например: `<image src=\"image.jpg\" alt=\"Описание изображения\">`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Изображение вставляется с помощью тега `<icon>`, например: `<icon src=\"image.jpg\" alt=\"Описание изображения\">`.", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q17.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что будет выведено при сравнении?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "console.log(1n > 2)" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`true`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`false`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Будет выведена ошибка", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`undefined`", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Обычные числа `number` и `bigInt` принадлежат к разным типам, при сравнении они приводятся к одному типу" 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q14.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите валидный код:", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`<Profiler id=\"App\" onRender={onRender}><App /></Profiler>`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`<Suspense fallback={<Loading />}><SomeComponent /></Suspense>`", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "`<Profiler fallback={<Loading />}><App /></Profiler>`", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "`<Suspense id=\"App\" onRender={onRender}><SomeComponent /></Suspense>`", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q15.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Изображение `first.png` будет:", 3 | "type": "radio", 4 | "code": { 5 | "text": "/* фрагмент CSS-кода */\nimg {\n position: absolute;\n left: 0px;\n top: 0px;\n z-index: -1;\n}\n\n<!-- фрагмент HTML-кода -->\n<h1>HELLO!</h1>\n<img src=\"first.png\"/>", 6 | "lang": "css" 7 | }, 8 | "author": "KarolinaEsepenok", 9 | "answers": [ 10 | { 11 | "text": "Размещено сразу под текстом, без отступов", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Перекрывать текст", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "Располагаться за текстом", 20 | "isCorrect": true 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/backend-beginner/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое middleware в контексте web-разработки?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Сервер для хранения данных", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Программное обеспечение, обеспечивающее связь между операционной системой и приложениями", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Промежуточное программное обеспечение, обрабатывающее запросы перед их достижением backend сервера", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Инструмент для разработки пользовательских интерфейсов", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/data-structures/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Метод `map.get(key)` коллекции `Map` возвращает:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`true`, если ключ присутствует в коллекции, иначе `false`.", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`true`, если ключ присутствует в коллекции, иначе `undefined`.", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "значение по ключу или `undefined`, если ключ отсутствует.", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "значение по ключу или `null`, если ключ отсутствует.", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите тег, который определяет раздел, цитируемый из другого источника (браузеры обычно делают отступ для этих элементов).", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`<abbr></abbr>`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "`<figure></figure>`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`<blockquote></blockquote>`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`<bdo></bdo>`", 20 | "isCorrect": false 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q20.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Для чего используется инструкция throw в конструкции `try`, `catch`, `finally`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Позволяет генерировать исключения (например отлавливать пользовательские ошибки) и перейти в блок `catch`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Требуется для перехода из одного блока `try` в другой", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Позволяет пропустить следующий за `try` блок `catch`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "меняет выполнение блока `finally`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-004/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие аргументы может получать функция обратного вызова (`callback-функция`), переданная в `Array.prototype.map()`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Только текущий элемент массива", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": " Текущий элемент и его индекс", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Текущий элемент массива, его индекс и весь исходный массив целиком", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Текущий элемент и ссылку на метод ", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-009/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какова основная роль фронтенда в его взаимодействии с бэкендом?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Хранить все данные приложения на жёстком диске пользователя", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Отправлять запросы к бэкенду, получать данные и визуализировать их", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Разрабатывать мобильные приложения", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Создавать собственные сертификаты для HTTPS протокола", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой будет ширина параграфа?", 3 | "type": "radio", 4 | "code": { 5 | "text": "p {\n box-sizing: content-box;\n \n border: 1px solid green;\n width: 200px;\n height: 50px;\n padding: 10px;\n}", 6 | "lang": "css" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "200px", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "220px", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "221px", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "222px", 23 | "isCorrect": true 24 | } 25 | ], 26 | "descriptionMarkup": "По умолчанию CSS использует именно `box-sizing: content-box`" 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-arrays/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Назови способы создания массива", 3 | "answers": [ 4 | { 5 | "text": "Литерал массива `[]`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Конструктор `new Array()`", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "Метод `Array.of()`", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Метод `Array.from()`", 18 | "isCorrect": true 19 | } 20 | ], 21 | "descriptionMarkup": "`Array.of` и `Array.from` - статические методы массивов, введённые в ECMAScript 2015.\n\n`Array.of` создаёт массив из переданных аргументов, а `Array.from` создаёт массив из массивоподобных или итерируемых объектов." 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Назови способы создания массива", 3 | "answers": [ 4 | { 5 | "text": "Литерал массива `[]`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Конструктор `new Array()`", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "Метод `Array.of()`", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Метод `Array.from()`", 18 | "isCorrect": true 19 | } 20 | ], 21 | "descriptionMarkup": "`Array.of` и `Array.from` - статические методы массивов, введённые в ECMAScript 2015.\n\n`Array.of` создаёт массив из переданных аргументов, а `Array.from` создаёт массив из массивоподобных или итерируемых объектов." 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "При каких условиях происходит ререндер React-компонента?", 3 | "answers": [ 4 | { 5 | "text": "Ререндер родительского компонента", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Меняются пропсы компонента", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "Меняется локальное состояние компонента", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Меняется значение, которое хранится в рефе компонента", 18 | "isCorrect": false 19 | }, 20 | { 21 | "text": "Меняется состояние в Redux, которое компонент получает через `useSelector`", 22 | "isCorrect": true 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой атрибут используется для проверки введенного в `<input>` значения на соответствие регулярному выражению?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`regex`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`type`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`name`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`pattern`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Проверка введенного текста будет происходить перед отправкой формы. Если текст будет не соответствовать регулярному выражению, браузер покажет всплывающую подсказку." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q15.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой будет результат?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "if (true) {\n let city = 'Minsk'\n}\nconsole.log(city)" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "'Minsk'", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "ReferenceError: city is not defined", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`undefined`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`null`", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Блок `if` создал область видимости для переменной `city` и она доступна только внутри этой области." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-007/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что главное должен учитывать фронтенд-разработчик на React при работе со структурами данных?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Исключительно сложные алгоритмы обхода графов", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Дизайн и тип баз данных на бэкенде", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Взаимосвязь алгоритмов и структур данных в контексте поставленных бизнес-задач", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "CSS-стилизацию и верстку полученных данных", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q18.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое слово будет иметь `background-color: yellow`?", 3 | "type": "radio", 4 | "code": { 5 | "text": "/* фрагмент CSS-кода */\ndiv > p {\n background-color: yellow;\n}\n\n<!-- фрагмент HTML-кода -->\n<p>Один</p>\n\n<div>\n <p>Два</p>\n</div>\n\n<p>Три</p>\n<p>Четыре</p>", 6 | "lang": "css" 7 | }, 8 | "author": "KarolinaEsepenok", 9 | "answers": [ 10 | { 11 | "text": "Один", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Два", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "Три", 20 | "isCorrect": false 21 | }, 22 | { 23 | "text": "Четыре", 24 | "isCorrect": false 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/css-beginner/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как установить выравнивание текста в CSS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Выравнивание текста устанавливается с помощью свойства `text-align`, например: `text-align: center;`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Выравнивание текста устанавливается с помощью свойства `font-align`, например: `font-align: center;`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Выравнивание текста устанавливается с помощью свойства `h-align` - выравнивание по горизонтали или `v-align` - выравнивание по вертикали, например: `v-align: center;` или `h-align: center;`", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q19.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие имена переменных являются допустимыми с точки зрения синтаксиса JS?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`let User;`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`let _user;`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`let 1user;`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`let user!;`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`let $user;`", 23 | "isCorrect": true 24 | } 25 | ], 26 | "descriptionMarkup": "Имена переменных в JavaScript могут содержать буквы, цифры и символы $, _. Имя переменной не может начинаться с цифры." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Начинающие разработчики часто путают понятия параметры и аргументы. Настало время определиться :)", 3 | "answers": [ 4 | { 5 | "text": "Параметры - локальные переменные функции (определяются при создании функции)", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Параметры - переданные в функцию конкретные значения (при вызове)", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Аргументы - переданные в функцию конкретные значения (при вызове)", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Аргументы - локальные переменные функции (определяются при создании функции)", 18 | "isCorrect": false 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения о стрелочных функциях", 3 | "answers": [ 4 | { 5 | "text": "Не имеют коллекции `arguments`", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Используют `this` функций внутри которых они вызваны", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Используют `this` функций внутри которых они объявлены", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Контекст стрелочных функций нельзя изменить с помощью методов `call`, `apply`, `bind`", 18 | "isCorrect": true 19 | }, 20 | { 21 | "text": "Могут быть использованы как конструкторы", 22 | "isCorrect": false 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В чём заключается программный смысл работы с тэгами в js-файле: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "отрисовать тэги в браузере", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "создать зависимость html-файла от манипуляций в js-файле", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "манипуляции с объектами, представителями которых являются тэги в коде,\nи которые формируют объектную модель документа", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "создать условия для парсинга тэгов в браузере", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-009/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Для чего используется Swagger-документация (Swagger) в контексте взаимодействия с бэкендом?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Для компиляции и сборки TypeScript файлов в JavaScript", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Для создания клиентских приложений на React", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Для описания того, как взаимодействовать с бэкендом, и для выполнения тестовых запросов", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Для защиты бэкенда от DDoS-атак", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите пункты, относящиеся к встроенной валидации форм HTML5", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Атрибут `required`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Атрибут `pattern`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Ограничение символов, которые можно ввести в поле, с помощью атрибутов `minlength` и `maxlength`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Ограничение числового значения для поля с помощью атрибутов `min` и `max`", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "Библиотека Formik", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как вывести текст на веб-страницу в JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для вывода текста на веб-страницу используется метод `document.write()`, например: `document.write(\"Привет, мир!\");`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Вывод текста на веб-страницу в JavaScript осуществляется с помощью метода `window.write()`, например: `window.write(\"Привет, мир!\");`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Для отображения текста на веб-странице в JavaScript используется функция `console.log()`, например: `console.log(\"Привет, мир!\");`.", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/html-basic/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите верные утверждения о заголовках", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Для хорошего SEO желательно использовать не больше одного заголовка `<h1>` на странице", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Теги заголовков используются для выделения жирного текста или изменения размера шрифта", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "На основе заголовков различного уровня скринридеры составляют карту навигации по сайту", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Поисковые системы не обращают внимания на заголовки, кроме `<h1>`", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q12.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что выведется в `console.log` при выполнении следующего кода?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "let sum = 0;\nfor (let i = 1; i <= 100; i++) {\n sum += i;\n}\nconsole.log(sum);" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "Сумма чисел от 1 до 100", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Будет выведено значение переменной 'i'.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Выведется строка \"undefined\".", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "Консоль останется пустой, так как в цикле нет явного вывода.", 23 | "isCorrect": false 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как вывести текст в консоли браузера с помощью JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для вывода текста на консоль используется метод `console.log()`, например `console.log(\"Привет, мир!\");`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Вывод текста на веб-страницу в JavaScript осуществляется с помощью метода `window.write()`, например: `window.write(\"Привет, мир!\");`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Для отображения текста на веб-странице в JavaScript используется функция `document.write()`, например: `document.write(\"Привет, мир!\");`.", 15 | "isCorrect": false 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/js-classes/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "С помощью чего можно вызвать конструктор родителя?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`constructor()`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`extends`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`new Object(...)`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`super()`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "В конструкторе ключевое слово `super()` используется как функция, вызывающая родительский конструктор.\n\nПодробнее про `super` можно почитать на [MDN](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/super)." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое localhost: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "локальное доменное имя в командной строке браузера,\nкоторое обращается к компьютеру пользователя", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "создание места-матрицы в сети Internet для размещения своей программы", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "локальное обращение к рандомному провайдеру в Internet", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "создание устойчивого секьюрного соединения с сервером по специальному протоколу", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-002/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что необходимо делать, если урок остался непонятым с первого раза: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "всё бросить, пойти устраиваться в Яндекс-доставку, там хорошо платят", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "грустить", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "начать изучать другой язык программирования", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "вернуться к началу урока, просмотреть, повторить и проделать всё заново,\nобратиться за помощью к самураям и на платформу Help2Debug", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-003/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какова цель команды npm `install` во вновь созданном проекте Vite?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Запустить React-приложение в режиме разработки", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Скомпилировать файлы TypeScript в JavaScript", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Создать начальную структуру проекта и файлы", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Скачать и установить все зависимости (dependencies и devDependencies), перечисленные в package.json, в папку node_modules", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-middle/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что делает CSS-объявление `visibility: hidden;` с элементом?", 3 | "type": "radio", 4 | "author": "StarkovSergey", 5 | "answers": [ 6 | { 7 | "text": "Удаляет элемент из DOM", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "Делает элемент прозрачным, сохраняя возможность взаимодействия с ним", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Скрывает элемент, сохраняя его расположение. При этом с элементом нельзя взаимодействовать", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "Скрывает элемент, вырывая его из потока документа. При этом с элементом нельзя взаимодействовать", 20 | "isCorrect": false 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q27.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой будет результат при выполнении кода?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "console.log(9++)" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "Так как инкремент записан после числа будет выведено `9`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`10`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Будет вывдена ошибка", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "undefined", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Инкремент/декремент можно применить только к переменной. Попытка использовать его на значении, типа `5++`, приведёт к ошибке." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-009/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Почему API-ключ (API Key) необходимо хранить в строгом секрете?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Потому что он используется для генерации HTML-страниц", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Чтобы предотвратить использование вашего приложения для отправки запросов и исчерпания ваших лимитов", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Он необходим для доступа к браузеру через localhost", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Он используется для изменения данных на сервере (мутаций)", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q19.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое слово будет иметь `background-color: red`?", 3 | "type": "checkbox", 4 | "code": { 5 | "text": "/* фрагмент CSS-кода */\ndiv ~ p {\n background-color: red;\n}\n\n<!-- фрагмент HTML-кода -->\n<p>IT-incubator</p>\n\n<div>\n <p>уникальный</p>\n</div>\n\n<p>формат</p>\n\n<p>обучения</p>", 6 | "lang": "css" 7 | }, 8 | "author": "KarolinaEsepenok", 9 | "answers": [ 10 | { 11 | "text": "IT-incubator", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Уникальный", 16 | "isCorrect": false 17 | }, 18 | { 19 | "text": "Формат", 20 | "isCorrect": true 21 | }, 22 | { 23 | "text": "Обучения", 24 | "isCorrect": true 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q21.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой вариант из перечисленных не относится к типам данных в JS?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`null`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`number`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`BigInt`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`NaN`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "`NaN` (Not-A-Number) - значение возвращаемое если не удается корректно выполнить математическую операцию \n или другими словами результат математической операции, которая не имеет смысла (например: умножение строки на число `1 * a`). \n `type of NaN` - `number`" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q15.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что получится при выполнении математической операции, когда один из операндов имеет тип `bigInt`, а второй `number`?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "1 + 1n" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`1n`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`2`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`2n`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "При выполнении операции будет выведена ошибка", 23 | "isCorrect": true 24 | } 25 | ], 26 | "descriptionMarkup": "Мы должны явно конвертировать операнды в один тип, используя либо `BigInt()`, либо `Number()`" 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0010/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как следует использовать useEffect, чтобы выполнить запрос на сервер только один раз, после первого монтирования компонента?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Вызвать useEffect без второго аргумента", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Передать объект зависимостей со всеми пропсами компонента", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Передать пустой массив [] в качестве второго аргумента", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Завернуть useEffect в функцию setTimeout с нулевой задержкой", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q24.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Тень блока при использовании `box-shadow: 0 10px black` будет находиться:", 3 | "type": "radio", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "сверху, сразу над блоком", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "справа", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "внизу, сразу под блоком", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "слева", 20 | "isCorrect": false 21 | } 22 | ], 23 | "descriptionMarkup": "Первые два значения свойства `box-shadow` определяют смещение тени по осям `x` и `y`." 24 | } 25 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q30.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой будет результат при выполнении кода?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "null + undefined" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`NaN`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`null`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`undefined`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`0`", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "При выполнении сложения `null` преобразуется в число `0`, а при матматических операциях с одним из операндов `undefined` получится `NaN` (в случае со сложением `undefined` со строкой будет конкатенация)." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения о методе `apply()`", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Первым аргументом `apply()` принимает `this`, а во втором указывается массив аргументов для самой функции", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Первым аргументом `apply()` принимает `this`, а все последующие аргументы передаются в саму функцию", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Метод `apply()` используется только для передачи одного аргумента", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Метод `apply()` не может использоваться для передачи аргументов в функцию", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/patterns/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения о паттерне Proxy", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Как правило, представляет собой объект, который перехватывает вызовы к целевому объекту, позволяя модифицировать их", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Может использоваться для валидации и форматирования данных, при взаимодействии с целевым объектом", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "В JavaScript есть встроенные объекты для реализации этого паттерна (`Proxy`, `Reflect`)", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Относится к порождающим паттернам проектирования", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0012/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какова основная цель UI/UX паттерна `Список-Детали` (List-Detail)?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Создание навигационной структуры приложения", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Отображение краткой информации в списке и подробных данных для выбранного элемента", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Одновременное отображение всех возможных деталей для каждого элемента списка", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Скрытие всей информации до тех пор, пока пользователь не сделает выбор", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-008/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Каково основное назначение хука `useState` в React?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Для выполнения HTTP-запросов к серверу", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Для управления маршрутизацией в приложении", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Создать \"ячейку памяти\", за которой React будет следить, и при изменении состояния в ней React перерисует компонент для получения актуальной разметки", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Для оптимизации производительности рендеринга компонента", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие сущности имеют свойство `prototype`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Функции, объявленные с помощью ключевого слова `function`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Классы", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Стрелочные функции", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Функции-конструкторы", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "Объекты", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Про `prototype` и `__proto__` смотреть на канале [IT-KAMASUTRA](https://www.youtube.com/watch?v=b55hiUlhAzI&ab_channel=IT-KAMASUTRA)" 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/react-basic/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В какой роли выступает React в паттерне проектирования MVC?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Model", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "View", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Controller", 15 | "isCorrect": false 16 | } 17 | ], 18 | "descriptionMarkup": "MVC - паттерн проектирования, разделяющий приложение на три части: Model, View, Controller.\n\nПользователь видит View(интерфейс) и взаимодействует с ним. View сообщает о действиях пользователя Controller, который в свою очередь изменяет Model. Model содержит данные бизнес-логики - при их обновлении уведомляется View и происходит перерисовка интерфейса." 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0011/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как называется функция, которую методы filter и find принимают в качестве аргумента, и какова её основная задача?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Функциональный компонент; его задача — отрисовать JSX", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Предикат; его задача — вернуть true или false для каждого элемента", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Мутатор; его задача — изменять свойства объекта", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Трансформатор; его задача — создать новый объект на основе старого", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое JavaScript, и где его можно использовать?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "JavaScript - это язык программирования для создания интерактивных веб-страниц.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "JavaScript - это протокол для передачи данных между клиентом и сервером в сети Интернет.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "JavaScript - это язык программирования, который применяется исключительно для создания статических веб-страниц.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "JavaScript - это графический дизайнер для разработки макетов веб-сайтов.", 19 | "isCorrect": false 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q20.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какое слово будет иметь `background-color: blue`?", 3 | "type": "checkbox", 4 | "code": { 5 | "text": "/* фрагмент CSS-кода */\ndiv + p {\n background-color: blue;\n}\n\n<!-- фрагмент HTML-кода -->\n<div>\n <p>IT-incubator</p>\n</div>\n\n<p>уникальный</p>\n\n<p>формат</p>\n\n<div>\n <p>обучения</p>\n</div>", 6 | "lang": "css" 7 | }, 8 | "author": "KarolinaEsepenok", 9 | "answers": [ 10 | { 11 | "text": "IT-incubator", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "Уникальный", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "Формат", 20 | "isCorrect": false 21 | }, 22 | { 23 | "text": "Обучения", 24 | "isCorrect": false 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q17.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие выражения возвращают `true`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`null == undefined`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`null == 0`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`undefined == 0`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`0 == false`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "При нестрогом равенстве значения `null` и `undefined` равны друг другу и не равны никаким другим значениям. Это специальное правило языка.\nПри сравнении оператором `==` если один из операндов число, то второй тоже преобразуется к числу. В итоге `false` приравнивается к нулю." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0010/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какова основная функция хука useEffect в React?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Создавать и управлять локальным состоянием компонента", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Осуществлять синхронные вычисления до отрисовки JSX", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Регистрировать функцию (эффект), которая выполнится React после того, как пользователю будет показан JSX, для взаимодействия с внешними системами, например, сервером", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Генерировать HTML-разметку для компонента", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-003/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое Vite (Вид) и каково его основное назначение в React-проекте?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "JavaScript-библиотека для создания интерактивных пользовательских интерфейсов", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Менеджер пакетов для установки модулей Node.js", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Инструмент для создания базового шаблона проекта (скаффолдинга), сборки (бандлинга) и конфигурирования необходимых пакетов", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Фреймворк для тестирования React-приложений", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q12.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие из утверждений про функции-генераторы являются верными?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Могут возвращать только одно единственное значение или ничего", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Используют специальную синтаксическую конструкцию `function*`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "В генераторах нельзя использовать ключевое слово `return`, только `yield` ", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Генераторы имеют метод `next` и являются перебираемыми", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Подробнее про [генераторы](https://learn.javascript.ru/generators)" 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q14.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие варианты не округлят число в JS?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`!!1.5`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`Math.floor(1.5)`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`Math.ceil(1.5)`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`Math.round(1.5)`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`1.5 ^ 0`", 23 | "isCorrect": false 24 | }, 25 | { 26 | "text": "`~1.5`", 27 | "isCorrect": true 28 | } 29 | ], 30 | "descriptionMarkup": "Про побитовые операторы `^` , `~` и другие можно прочитать в [статье.](https://learn.javascript.ru/bitwise-operators)" 31 | } 32 | 33 | -------------------------------------------------------------------------------- /src/data/tasks/js-promises/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбeрите верные утверждение о Promise", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Promise - это объект, который используется для отложенных и асинхронных вычислений", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Promise - это функция по формированию Call Stack", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Promise решает проблему \"Callback hell\"", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Promise может находиться в трёх состояниях then, catch, fulfilled", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "Promise может находиться в трёх состояниях pending, fulfilled, rejected", 23 | "isCorrect": true 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0011/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Каково основное отличие метода filter от других методов массива с точки зрения его возвращаемого значения и воздействия на исходный массив? ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Он изменяет исходный массив и возвращает его же", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Он всегда возвращает один найденный объект или undefined", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Он создаёт и возвращает новый массив, не изменяя исходный массив", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Он возвращает массив, но изменяет объекты внутри исходного массива", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q31.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В чем разница между `++a` и `a++`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Запись вида `++a` является ошибкой", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Разницы нет", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Запись вида `a++` является ошибкой", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Будет отличаться возвращаемое значение", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Когда оператор идёт после переменной — это «постфиксная форма». «Префиксная форма» — это когда оператор идёт перед переменной. \n\n Префиксная форма возвращает новое значение, в то время как постфиксная форма возвращает старое (до увеличения числа)." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-007/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какая существует взаимосвязь между алгоритмом рендеринга и структурой данных?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Алгоритм рендеринга независим от структуры данных.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Структура данных всегда должна быть массивом объектов, независимо от алгоритма", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Данные вторичны, а алгоритм всегда первичен и определяет всё", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Алгоритм рендеринга зависит от структуры данных, и их комбинация должна быть выбрана для простоты, удобства и эффективности", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-function/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения о способе объявления функций Function Declaration", 3 | "answers": [ 4 | { 5 | "text": "\"Классический\" способ объявления функций с помощью ключевого слово `function` и имени функции", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Может использоваться для анонимных функций и IIFE(Immediately Invoked Function Expression)", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Созданные таким способом функции могут вызываться до их объявления", 14 | "isCorrect": true 15 | } 16 | ], 17 | "descriptionMarkup": "Hoisting - это механизм в JS в котором переменные `var` и функции, объявленные через Function Declaration, передвигаются вверх своей области видимости перед тем, как код будет выполнен." 18 | } 19 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой цвет фона будет у данных элементов?", 3 | "type": "radio", 4 | "code": { 5 | "text": "/* фрагмент CSS-кода */\n.tomato {\n background-color: tomato;\n}\n.violet {\n background-color: violet;\n}\n\n<!-- фрагмент HTML-кода -->\n<div class=\"tomato violet\">1</div>\n<div class=\"violet tomato\">2</div>", 6 | "lang": "css" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`tomato` у первого, и `violet` у второго", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`violet` у первого, и `tomato` у второго", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "у обоих `tomato` 🍅", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "у обоих `violet` 🌷", 23 | "isCorrect": true 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /src/data/tasks/js-arrays/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что вернёт выражение `hobbits.pop()`?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "const hobbits = [\n 'Frodo', \n 'Sam', \n 'Pippin' \n]" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`undefined`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Новый массив `['Frodo', 'Sam']`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Старый мутировавший массив `['Frodo', 'Sam']`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`'Pippin'`", 23 | "isCorrect": true 24 | } 25 | ], 26 | "descriptionMarkup": "Метод `pop` удаляет последний элемент из массива и возвращает удалённое значение.\n Если вы вызовете `pop()` на пустом массиве, он вернёт значение `undefined`." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как проверить условие в JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Условие можно проверить с помощью конструкции `if`, например: `if (условие) { ...код }`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Для проверки условия в JavaScript используется ключевое слово `check`, например: `check (условие) { ...код }`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Условие в JavaScript проверяется с помощью ключевого слова `verify`, например: `verify (условие) { ...код }`.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Для проверки условия в JavaScript служит ключевое слово `test`, например: `test (условие) { ...код }`.", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q8.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как проверить условие в JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Условие можно проверить с помощью конструкции `if`, например: `if (условие) { ...код }`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Для проверки условия в JavaScript используется ключевое слово `check`, например: `check (условие) { ...код }`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Условие в JavaScript проверяется с помощью ключевого слова `verify`, например: `verify (условие) { ...код }`.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Для проверки условия в JavaScript служит ключевое слово `test`, например: `test (условие) { ...код }`.", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-001/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В чём смысл создания приложения динамически на языке JavaScript: ", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "возможность безопасно рендерить `html`-тэги в связке со стилизацией из `css`-файла", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "возможность работы с актуальными данными без жёсткой привязки к статичной `html`-разметке", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "возможность использовать дополнительные тэги и эмоджи, которые недоступны в `html`-разметке", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "возможность обращаться к серверу, что невозможно в статичном `html`-файле", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-003/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое JSX/TSX в контексте разработки на React?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Стандартная HTML-разметка, которая напрямую парсится браузером", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Особый тип CSS, используемый для стилизации React-компонентов", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Расширение синтаксиса для JavaScript/TypeScript, которое позволяет писать HTML-подобные структуры непосредственно в коде, которые затем React преобразует в реальные элементы DOM", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Фреймворк для серверного рендеринга React-приложений", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q11.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие из CSS-свойств не будут работать для элемента со строчным типом отображения?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`width`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`height`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`margin-top`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`padding-right`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "Таким элементам нельзя задать `width`, `height` и вертикальные отступы. Горизонтальные отступы работать будут, но для элементов, расположенных на нескольких строках, мы получим странное поведение. Лучше вообще не применять свойства `margin` и `padding` к элементам со строчным типом отображения!" 23 | } 24 | 25 | -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери теги, которые могут быть помещены в `<head>`", 3 | "answers": [ 4 | { 5 | "text": "<meta>", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "<title>", 10 | "isCorrect": true 11 | }, 12 | { 13 | "text": "<header>", 14 | "isCorrect": false 15 | }, 16 | { 17 | "text": "<link>", 18 | "isCorrect": true 19 | }, 20 | { 21 | "text": "<base>", 22 | "isCorrect": true 23 | }, 24 | { 25 | "text": "<script>", 26 | "isCorrect": true 27 | } 28 | ], 29 | "descriptionMarkup": "`<base>` позволяет установиться URL, который будет использоваться в начале всех относительных путей. Используется не очень часто. [Статья на MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base)" 30 | } 31 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q22.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Для чего нужен оператор `??` ?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для составления тернарного выражения.", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Используется если нужно вернуть первый аргумент, когда второй `falsy`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Используется если нужно вернуть второй аргумент, когда первый `falsy`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Используется для проверки, что первый аргумент не является `null` или `undefined`, в противном случае возвращает второй аргумент", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "`??` [Оператор нулевого слияния](https://learn.javascript.ru/nullish-coalescing-operator)" 23 | } 24 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Check out https://hub.docker.com/_/node to select a new base image 2 | FROM node:20.11-alpine 3 | RUN npm install -g pnpm 4 | # Set to a non-root built-in user `node` 5 | USER node 6 | 7 | # Create app directory (with user `node`) 8 | RUN mkdir -p /home/node/dist/interview-questions-api 9 | 10 | WORKDIR /home/node/dist/interview-questions-api 11 | 12 | # Install app dependencies 13 | # A wildcard is used to ensure both package.json AND package-lock.json are copied 14 | # where available (npm@5+) 15 | 16 | COPY --chown=node package*.json ./ 17 | COPY --chown=node pnpm-lock.yaml ./ 18 | RUN pnpm install 19 | 20 | ENV PORT=9007 21 | # Bundle app source code 22 | COPY --chown=node . . 23 | 24 | RUN pnpm build 25 | 26 | # Bind to all network interfaces so that it can be mapped to the host OS 27 | 28 | EXPOSE ${PORT} 29 | 30 | CMD [ "pnpm", "start" ] 31 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q26.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой объект получит свойство `bam` при вызове `ironMan.fire()`?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "let hero = {\n fire() {\n this.bam = true\n }\n}\n\nlet ironMan = {\n __proto__: hero\n}\n\nironMan.fire()" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`hero`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`ironMan`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Оба объекта", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "Случится потеря контекста", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Неважно, где находится метод: в объекте или его прототипе. При вызове метода `this` — всегда используется объект перед точкой." 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой отступ будет между двумя параграфами?", 3 | "type": "radio", 4 | "code": { 5 | "text": "/* фрагмент CSS-кода */\n.paragraph-1 {\n margin: 20px 20px 10px 30px;\n}\n.paragraph-2 {\n margin: 10px 20px\n}\n\n<!-- фрагмент HTML-кода -->\n<p class=\"paragraph-1\">1</p>\n<p class=\"paragraph-2\">2</p>", 6 | "lang": "css" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`10px`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`20px`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`30px`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`40px`", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Схлопывание внешних отступов - особенность блочной модели CSS, о которой следует помнить." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-007/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой подход рекомендуется для выделения (подсветки) трека в списке, чтобы избежать проблем с синхронизацией данных?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Добавлять свойство isSelected: true непосредственно в объект каждого трека", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Хранить полную копию выбранного трека в отдельной переменной", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Использовать прямые CSS-стили без изменения данных", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Хранить только идентификатор выбранного трека (например, `selectedTrackId`) в отдельной переменной для нормализации данных", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/redux-basic/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите верные утверждения. Функция `reducer`:", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "Принимает `state` и `action`, которые могут быть типа только `object`", 8 | "isCorrect": false 9 | }, 10 | { 11 | "text": "Принимает `state` и `action`, которые могут быть любого типа", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "Возвращает новую версию `state`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "Ничего не возвращает", 20 | "isCorrect": false 21 | } 22 | ], 23 | "descriptionMarkup": "`Reducer` - чистая функция, которая принимает `в качестве аргументов `state` и `action` и возвращает новую версию `stste`. `State` и `action` могут быть любого типа." 24 | } 25 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0011/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что означает асимптотическая сложность алгоритма О большое от N (O(N)) для методов filter и find (в худшем случае)?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Алгоритм будет работать быстрее с увеличением количества элементов", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": " Время выполнения алгоритма будет расти линейно (пропорционально) количеству обрабатываемых элементов", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Время выполнения алгоритма не зависит от количества элементов", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Алгоритм будет работать с постоянной фиксированной скоростью независимо от данных", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В современном React принято использовать функциональные компоненты, но есть исключение:", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Необходимость выполнить запрос на сервер сразу после монтирования компонента", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Отлов ошибок с помощью компонента `ErrorBoundary`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Реализация lazy loading с компонентом `Suspense`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Удаление side effects при размонтировании компонента", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "Для отлова ошибок необходимо использовать метод жизненного цикла `componentDidCatch`, который есть только у классовых компонентов" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-004/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что возвращает функция обратного вызова (callback-функция), переданная в Array.prototype.map(), и какое её значение в новом массиве?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Исходный элемент массива, который остаётся без изменений в новом массиве", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Ничего (`undefined`), так как функция map сама определяет значения для нового массива", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Значение, которое становится очередным элементом в новом массиве на соответствующей позиции", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Весь исходный массив целиком, для каждой итерации", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/patterns/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выбери верные утверждения о паттерне Singleton", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Гарантирует, что у класса может быть создан только один экземпляр", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Экземпляр класса может использоваться в различных частях приложения", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Используется для работы с глобальным состоянием", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Лежит в основе Redux", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "Redux, как и Singleton, используется для работы с global state, но в отличие от мутабельного состояния, с которым работает Singleton, состояние в Redux можно менять только через чистые функции редьюсеры." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Где в компонентах могут размещаться побочные эффекты (навигация, взаимодействие с DOM)?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "В `useEffect`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "В обработчиках событий", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "На верхнем уровне вложенности компонента", 15 | "isCorrect": false 16 | } 17 | ], 18 | "descriptionMarkup": "В документации React код, который находится на верхнем уровне компонента, называется rendering код. Этот код запускается при каждом рендере - его задача произвести вычисления на основе state и пропсов, и вернуть JSX. Данный код должен быть чистым - побочные эффекты в нём не допускаются. Побочные эффекты можно использовать в обработчиках событий и эффектах" 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-003/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Почему рекомендуется использовать метод массива map при рендеринге списка элементов из данных в React?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Чтобы создать новый массив с другим количеством элементов, чем исходный", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Чтобы напрямую изменить исходный массив данных на месте", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Чтобы динамически генерировать новый массив React-элементов (JSX) на основе массива данных, способствуя декларативному и масштабируемому подходу", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Чтобы объединить несколько массивов React-элементов в одну строку", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-arrays/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите верные утверждения о методах `map` и `forEach`", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "И метод `map`, и метод `forEach` возвращают новый массив", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Метод `forEach` просто вызывает указанную функцию для каждого элемента массива", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Callback-функции `forEach` и `map` могут мутировать исходный массив", 15 | "isCorrect": true 16 | } 17 | ], 18 | "descriptionMarkup": "Метод `map`, действительно, может мутировать исходный массив. Например, если элементы массива являются объектами, а в callback мы мутабельно их изменяем - в исходном массиве они также изменятся. Стоит соблюдать осторожность и не делать так, если мы дорожим иммутабельностью" 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что будет в консоли? \uD83E\uDD14", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "'use strict'\n\nconst a = {\n name: 'a',\n logName() {\n console.log(this.name)\n }\n}\n\nsetTimeout(a.logName, 100)\n" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`'a'`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`undefined`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Error", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`''`", 23 | "isCorrect": true 24 | } 25 | ], 26 | "descriptionMarkup": "Функция вызывается как колбэк в `setTimeout` в отрыве от её контекста. В данном случае `this` будет `window` даже в строгом режиме (это контекст `setTimeout`). У `window` есть свойство `name`, равное `''`" 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q23.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что делает метод `Promise.allSettled(promises)`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Ожидает выполнения всех промисов и возвращает массив с результатами или ошибку если хотя бы один из промисов возвращает ошибку", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Ожидает первый выполненный промис, который становится его результатом, остальные игнорируются", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Ожидает выполнения всех промисов возвращает их результаты в виде массива с объектами, у каждого объекта два свойства: статус и результат или ошибка", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Ожидает первый успешно выполненный промис, остальные игнорируются", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите верные утверждения о методах `map` и `forEach`", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "И метод `map`, и метод `forEach` возвращают новый массив", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Метод `forEach` просто вызывает указанную функцию для каждого элемента массива", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Callback-функции `forEach` и `map` могут мутировать исходный массив", 15 | "isCorrect": true 16 | } 17 | ], 18 | "descriptionMarkup": "Метод `map`, действительно, может мутировать исходный массив. Например, если элементы массива являются объектами, а в callback мы мутабельно их изменяем - в исходном массиве они также изменятся. Стоит соблюдать осторожность и не делать так, если мы дорожим иммутабельностью" 19 | } 20 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Когда оправдано использование `useEffect`?", 3 | "answers": [ 4 | { 5 | "text": "Синхронизация компонентов с внешними системами (DOM, api, сторонние библиотеки)", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Изменение данных для рендера (например, фильтрация списка)", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "Обработка событий, вызванных действиями пользователя (например, отправка POST-запроса при нажатии на кнопку)", 14 | "isCorrect": false 15 | }, 16 | { 17 | "text": "Синхронизация локального состояния с пропсами", 18 | "isCorrect": false 19 | } 20 | ], 21 | "descriptionMarkup": "В документации React есть [отличная глава](https://beta.reactjs.org/learn/you-might-not-need-an-effect) на эту тему! Эта документация прекрасна ✨" 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как создать переменную в JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для создания переменной используется ключевое слово `var`, `let` или `const`, например: `var myVariable = 42;`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Для создания переменной в JavaScript используется оператор `variable`, например: `variable myVariable = 42;`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Чтобы создать переменную в JavaScript, нужно использовать ключевое слово `create`, например: `create myVariable = 42;`.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Для определения переменной в JavaScript используется ключевое слово `define`, например: `define myVariable = 42;`.", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0010/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Каковы последствия вызова setState (например, setTracks) внутри useEffect без массива зависимостей?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "useEffect будет работать как обычная синхронная функция", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "React проигнорирует вызов setState, так как он произошел в эффекте", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Приложение будет оптимизировано, и setState вызовется только один раз", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Возникнет бесконечный цикл перерисовок компонента, который может привести к исчерпанию лимитов на запросы к серверу и ошибке `Maximum update depth exceeded`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q22.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В каком случае можно будет вызвать функцию, как метод глобального объекта?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "window.barkDog()" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`function barkDog () {\n alert (\"Bow-wow!\")\n}`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "`const barkDog = function () {\n alert (\"Bow-wow!\")\n}`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`const barkDog = () => {\n alert (\"Bow-wow!\")\n}`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "Ни в одном из перечисленных вариантов", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Глобальные функции, объявленные, как function declaration, доступны, как методы глобального объекта." 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0011/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что метод find возвращает, если он находит элемент, соответствующий предикату, и что он возвращает, если такой элемент не найден?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Он всегда возвращает новый массив с одним найденным элементом или пустой массив", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Если найден — возвращает новый объект, если не найден — null", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Если найден — возвращает ссылку на первый найденный объект, если не найден — пустую строку", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Если найден — возвращает ссылку на первый найденный объект, если не найден — undefined", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-002/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Зачем нужен NodeJS фронтенд-разработчику?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "NodeJS позволяет фронтенд-приложению рендериться во всех разновидностях браузеров", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "NodeJS объединяет различные зависимости (typescript, css и др.), необходимые для разработки\nприложения на этапе разработки, и транспилирует (преобразовывает) их в простой\nJavaScript-код", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "NodeJS необходим для мобильной разработки", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "NodeJS позволяет запрашивать данные с серверов, который написаны\nна других языках программирования", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q16.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите валидные способы добавления CSS в HTML-документы.", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`<link href=\"https://it-incubator.io/css/style.css\" rel=\"stylesheet\" type=\"text/css\">`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`<div id=\"main\" className=\"main\">IT-incubator - уникальный формат онлайн-обучения.</div>`", 12 | "isCorrect": false 13 | }, 14 | { 15 | "text": "`<p style=\"color: red;\">IT-incubator - уникальный формат онлайн-обучения.</p>`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`<style type=\"text/css\">.main {width: 100%;}</style>`", 20 | "isCorrect": true 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q9.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В каких записях W3C Validator покажет ошибки?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`<a Href=google.com class=abc>123</a>`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`<p>Hello world!`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`<ul><a href='#'>Link</a></ul>`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`<table><th><tr>1</tr></th></table>`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "[Валидатор](https://validator.w3.org/) от W3C многое прощает (в т.ч. незакрытые теги - браузер сам закрывает их). Но он хорошо проверяет правильную вложенность тегов(например, в теге `<ul>` прямыми дочерними тегами могут быть только `<li`>, а тег `<th>` не может быть прямым дочерним тегом `<table>`)" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие теги не несут семантической нагрузки?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "<p>", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "<div>", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "<b>", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "<span>", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "<nav>", 23 | "isCorrect": false 24 | }, 25 | { 26 | "text": "<aside>", 27 | "isCorrect": false 28 | } 29 | ], 30 | "descriptionMarkup": "Практически все теги в современном HTML несут семантическую нагрузку.\n\nТак, например, тег `<b>`, согласно [спецификации](https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-b-element), используется для __ключевых слов__ в тексте." 31 | } 32 | -------------------------------------------------------------------------------- /src/data/tasks/js-advanced/q14.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как сделать копию объекта, при этом сохранив актуальные флаги дескрипторов оригинального объекта?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Используя метод `Object.assign`, передав в него `Object.assign(copyObj, sourceObj)`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Используя spread оператор `const copyObj = {...sourceObj}`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Используя методы defineProperties + getOwnPropertyDescriptors `const copyObj = Object.defineProperties({}, Object.getOwnPropertyDescriptors(sourceObj))`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Используя метод structuredClone() `const copyObj = structuredClone(sourceObj)`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "romchesko-pazzi" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q23.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой будет результат вычисления выражения в JS?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "`'5' - 1 + '1'`" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`'511'`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`'41'`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`'5'`", 19 | "isCorrect": false 20 | }, 21 | { 22 | "text": "`5`", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "При выполнении математических операций происходит преобразование типов и строка `'5'` преобразуется компилятором в число для выполнения вычитания. \n А когда мы используем оператор `+` и один из операндов является строкой, то второй также приводится к строке и происходит конкатенация (добавление первой строки в конец второй)." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/css-basic/q14.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Выберите общие семейства шрифтов.", 3 | "type": "checkbox", 4 | "author": "KarolinaEsepenok", 5 | "answers": [ 6 | { 7 | "text": "`serif`", 8 | "isCorrect": true 9 | }, 10 | { 11 | "text": "`sans-serif`", 12 | "isCorrect": true 13 | }, 14 | { 15 | "text": "`monospace`", 16 | "isCorrect": true 17 | }, 18 | { 19 | "text": "`fantasy`", 20 | "isCorrect": true 21 | }, 22 | { 23 | "text": "`oblique`", 24 | "isCorrect": false 25 | } 26 | ], 27 | "descriptionMarkup": "В `CSS` есть пять общих семейств шрифтов:`serif` - имеют небольшую обводку по краям каждой буквы;`sans-serif` - шрифты без засечек имеют четкие линии;`monospace` - все буквы имеют одинаковую фиксированную ширину;`fursive` - имитируют человеческий почерк;`fantasy` - это декоративные шрифты." 28 | } 29 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0010/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Почему, согласно правилам хуков, нельзя вызывать useState или useEffect внутри условных операторов (if/else) или циклов?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Это приведёт к немедленному падению приложения без возможности отладки", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "React не сможет оптимизировать количество перерисовок компонента.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "React запутается и не поймёт, в каких ячейках памяти у него что хранится, так как количество вызовов хуков и их порядок может измениться при разных рендерах", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Это допустимо, но только в продакшн-сборках приложения", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что из перечисленного относится к микрозадачам?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`setTimeout(func,...)`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "обработчик `.then`", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "событие `mousemove`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`await`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Выполнение таких обработчиков как `then`, `catch`, `finally` становится микрозадачей.\n\n Микрозадачи также используются «под капотом» `await`, т.к. это форма обработки промиса. Подробнее можно почитать на [medium](https://medium.com/@ravil.nell/%D0%BA%D0%B0%D0%BA-%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%D1%81%D1%8F-%D0%BA%D0%BE%D0%B4-javascript-baddf8f5dd23)" 23 | } 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-006/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как применяются инлайновые стили к элементам в `JSX`, в отличие от нативного `HTML`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "В JSX инлайновые стили применяются как одна строка, как и в HTML, но со специфическим синтаксисом React", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "JSX использует специальный пропс `styleClass` для определения инлайновых стилей в виде строки CSS-правил", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "В JSX пропс `style` принимает объект `JavaScript`, где свойства CSS записываются в `camelCase`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "JSX строго запрещает инлайновые стили, требуя, чтобы все стили были определены во внешних CSS-файлах", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-005/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Для чего используется импорт модуля без указания конкретных экспортов, например `import ./plugin.js` или `import ./index.css`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для импорта всех именованных экспортов модуля под одним именем", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Для импорта единственного экспорта по умолчанию из модуля", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Для выполнения кода модуля ради его побочных эффектов (`side-effects`), таких как инициализация плагина, применение стилей CSS или регистрация чего-либо в приложении", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Для создания новой глобальной переменной, доступной из любого места в приложении", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-008/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что возвращает хук `useState`, и как обычно используются эти возвращаемые значения?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Он возвращает объект со свойством `value` и методом `changeValue`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Он возвращает единственное число, представляющее текущее состояние", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Он возвращает массив, содержащий два элемента: текущее значение состояния и функцию (`сеттер`) для обновления этого значения. Этот массив часто деструктурируется в две переменные, например, `[id, setId]`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Он возвращает булево значение, указывающее, был ли компонент смонтирован", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-004/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какова основная цель использования метода `Array.prototype.map()` в `JavaScript`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Изменить существующие элементы непосредственно в исходном массиве", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Отфильтровать элементы массива по определенному условию, создавая массив меньшей или равной длины", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Создать новый массив, содержащий результаты вызова функции обратного вызова для каждого элемента исходного массива, при этом новый массив всегда имеет то же количество элементов, что и исходный", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": " Сложить все элементы массива в одно результирующее значение", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-006/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В чем заключается ключевое отличие в обработке самозакрывающихся тегов между современным `HTML` и `JSX`?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "`JSX` позволяет использовать необязательный слеш для самозакрывающихся тегов, как и современный `HTML`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`JSX` автоматически добавляет слеши к самозакрывающимся тегам, поэтому разработчику не нужно об этом думать", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`JSX` не поддерживает самозакрывающиеся теги; все теги должны иметь отдельный закрывающий тег", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`JSX` строго требует, чтобы самозакрывающиеся теги заканчивались слешем (например, `<input />`)", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q10.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой символ используется для создания однострочного комментария в JavaScript?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Для создания однострочного комментария в JavaScript используется двойной косой слеш `//`, например: `// Это комментарий.`.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Для создания однострочного комментария в JavaScript используется символ решётки `#`, например: `# Это комментарий.`.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Однострочный комментарий в JavaScript создаётся с помощью символа звездочки `*`, например: `* Это комментарий.`.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "В JavaScript однострочный комментарий обозначается символом восклицательного знака `!`, например: `! Это комментарий.`.", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-004/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как метод Array.prototype.map() влияет на исходный массив, и какова длина возвращаемого им нового массива?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Изменяет исходный массив, модифицируя его элементы, и может возвращать массив меньшей длины", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Не изменяет исходный массив и всегда возвращает новый массив с таким же количеством элементов, как и исходный", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Всегда изменяет исходный массив, добавляя новые элементы, и возвращает массив большей длины", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Не изменяет исходный массив, но может возвращать массив произвольной длины, не обязательно равной длине исходного", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-007/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "При работе со списком треков, как рендер-алгоритм должен обрабатывать различные состояния данных для отображения пользовательского интерфейса?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Достаточно проверять, пуст ли массив треков, чтобы показать `No tracks`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Состояние загрузки данных не является задачей рендер-алгоритма", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`null` для переменной с треками и пустой массив всегда должны приводить к отображению `No tracks`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Алгоритм должен различать `null` (для состояния загрузки), пустой массив (для `No tracks`) и непустой массив (для отображения списка треков)", 19 | "isCorrect": true 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-005/q1.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какая из следующих проблем НЕ является одной из проблем, возникавших при традиционном подключении JavaScript файлов до появления ES-модулей?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Необходимость контролировать правильную последовательность подключения скриптов для разрешения зависимостей", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Конфликты между разными фреймворками и библиотеками, несовместимыми по умолчанию", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Загрязнение глобальной области видимости, приводящее к перезаписи функций и переменных с одинаковыми именами", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Непонятные зависимости между файлами, когда сложно определить, какая функция откуда пришла", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-beginner/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что такое комментарии в JavaScript, и зачем они нужны?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Комментарии - это специальные заметки в коде, которые игнорируются компьютером. Они нужны для объяснения кода и делают его более читаемым.", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "Комментарии в JavaScript - это часть исполняемого кода, которая игнорируется интерпретатором, их основное предназначение - улучшение производительности кода.", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Комментарии в JavaScript используются для создания переменных и объявления функций, что делает код более читаемым и понятным.", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Это блоки кода, которые выполняются только при определенных условиях, повышая эффективность работы программы.", 19 | "isCorrect": false 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0012/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Почему в React-приложениях считается плохой практикой создавать побочные эффекты (например, изменять внешние переменные) внутри функции-колбэка, передаваемой в метод map при рендеринге списка?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Это приводит к автоматическому кэшированию результатов map, что мешает обновлениям", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`map` предназначен только для сортировки массива, а не для его преобразования", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": " Это нарушает принципы чистоты функций, делает код хрупким, непредсказуемым и затрудняет масштабирование", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Побочные эффекты допустимы только в классовых компонентах, но не в функциональных", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какой код правильно найдёт максимальное значение в непустом массиве `arr`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`Math.max(...arr)`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "`arr.findMax()`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`Math.max.apply(null, arr)`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "`arr.reduce(function(prev, item) { return Math.max(prev, item) })`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "У массива не существует метода `.findMax()`.\n\n О нахождении максимального элемента в массиве можно почитать на [MDN](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/max#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_math.max)" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-promises/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как могут обрабатываться ошибки при состоянии промиса `reject`?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "С помощью метода `.catch`", 7 | "isCorrect": true 8 | }, 9 | { 10 | "text": "С помощью метода `.finally`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Промис переходит в состояние `reject` в случае успешного выполнения, при котором не требуется обработка ошибок", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "С помощью второго аргумента следующего метода `.then`", 19 | "isCorrect": true 20 | } 21 | ], 22 | "descriptionMarkup": "Чаще всего для обработки ошибок используют метод `.catch`, но будет не лишним знать, что метод `.then` на самом деле принимает два аргумента.\n\nВторым аргументом является функция, которая выполняется, когда промис переходит в состояние «выполнен с ошибкой» (`reject`) и получает ошибку." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0012/q3.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Почему, при отображении списка и деталей одного из элементов для получения полной детальной информации (например, текста песни) часто требуется выполнять отдельный запрос к серверу, а не использовать данные, уже полученные со списком?", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Сервер не умеет отправлять большие объемы данных за один запрос", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Детальная информация (например, текст песни) часто очень объемна и неэффективна для передачи для всех элементов списка сразу", 11 | "isCorrect": true 12 | }, 13 | { 14 | "text": "Это требование фреймворков, таких как React, для обработки данных", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "Разработчики бэкенда всегда предпочитают разделять запросы на детали", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-005/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Как браузер обрабатывает JavaScript файлы, подключенные с атрибутом type='module'?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "Браузер сначала выполняет весь код главного файла `main.js`, а затем последовательно загружает и выполняет импортированные модули", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Все импортированные модули должны быть явно подключены в HTML-файле отдельными тегами `<script>`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Браузер сканирует главный файл на наличие импортов, автоматически загружает и разрешает все зависимости, а затем выполняет код главного модуля", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Браузер загружает все `JavaScript` файлы одновременно и выполняет их параллельно, независимо от зависимостей", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/js-middle/q27.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "У каких примитивов нет \"объектов оберток\"?", 3 | "type": "checkbox", 4 | "answers": [ 5 | { 6 | "text": "`number`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "`string`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`boolean`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`undefined`", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "`null`", 23 | "isCorrect": true 24 | } 25 | ], 26 | "descriptionMarkup": "Если мы попытаемся получить доступ к свойствам примитивов, то тогда будет создан временный \"объект-обёртка\" с использованием встроенных конструкторов `String`, `Number` и `Boolean`, который предоставит методы и после этого исчезнет.\n\nСпециальные значения `null` и `undefined` стоят особняком. У них нет \"объектов-обёрток\", так что методы и свойства им недоступны. Также у них нет соответствующих прототипов." 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/data/tasks/html-middle/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Какие теги могут быть помещены в `<button>` согласно спецификации HTML?", 3 | "answers": [ 4 | { 5 | "text": "<p>", 6 | "isCorrect": false 7 | }, 8 | { 9 | "text": "<a>", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "<img>", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "<strong>", 18 | "isCorrect": true 19 | }, 20 | { 21 | "text": "<span>", 22 | "isCorrect": true 23 | } 24 | ], 25 | "author": "StarkovSergey", 26 | "descriptionMarkup": "Согласно [спецификации](https://html.spec.whatwg.org/multipage/form-elements.html#the-button-element) в `button` может помещаться фразовый контент(Phrasing content - теги, отвечающие за разметку текста внутри параграфов), за исключением интерактивного контента(ссылки, инпуты и т.д.).\n\nСуществует сервис [Can I Include](https://caninclude.glitch.me), позволяющий быстро проверить возможность вкладывать теги." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/js-basic/q32.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Сколько будет составлять задержка перед выводом в консоль `3`?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "setTimeout(()=> console.log(1), 1000)\nsetTimeout(()=> console.log(2), 5000)\nsetTimeout(()=> console.log(3), 10000)" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "16 секунд", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "160 секунд", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "10 секунд", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "4 секунды", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Отсчёт `setTimeout` выполняется WebAPI и не блокирует выполнение последующего кода. Разница между началом отсчёта следующих `setTimeout` будет составлять доли секунды.\n\nЕсли нам нужно, чтобы отсчёт начинался только после завершения предыдущего `setTimeout` используются либо вложенные колбэки, либо промисы." 27 | } 28 | -------------------------------------------------------------------------------- /src/data/tasks/css-flexbox/q2.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Мы сверстали шапку сайта, используя flex. На небольших экранах логотип уменьшается в размерах. Как можно это исправить? (подсказка: можешь изучить в devtools шапку этого сайта😉)", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "Указать для логотипа фиксированное значение свойства `width`", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Добавить контейнеру CSS-объявление `justify-content: space-between;`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Добавить логотипу CSS-объявление `flex-shrink: 0;`", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Указать для логотипа фиксированное значение свойства `flex-basis`", 19 | "isCorrect": false 20 | } 21 | ], 22 | "descriptionMarkup": "Эта проблема часто возникает при адаптиве или переполнении контентом. Часто полезно сразу прописывать `flex-shrink: 0`, чтобы обезопасить флекс-элемент от сжатия, если оно нежелательно." 23 | } 24 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q5.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что следует использовать в массиве зависимостей `useEffect`?", 3 | "answers": [ 4 | { 5 | "text": "props", 6 | "isCorrect": true 7 | }, 8 | { 9 | "text": "Мутабельные значения, такие как `location.pathname` или `ref.current`", 10 | "isCorrect": false 11 | }, 12 | { 13 | "text": "state", 14 | "isCorrect": true 15 | }, 16 | { 17 | "text": "Переменные, которые вычисляются при рендере компонента на основе props или state", 18 | "isCorrect": true 19 | }, 20 | { 21 | "text": "Глобальные переменные (переменные, объявленные вне компонента)", 22 | "isCorrect": false 23 | }, 24 | { 25 | "text": "Объекты, которые создаются при рендере компонента", 26 | "isCorrect": false 27 | } 28 | ], 29 | "descriptionMarkup": "Объекты, создаваемые во время рендера, будут разными при каждом новом рендере. Если указать их в массиве зависимостей, Effect-функция будет вызываться каждый раз" 30 | } 31 | -------------------------------------------------------------------------------- /src/data/tasks/js-promises/q7.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что будет выводиться на экран при выполнении кода?", 3 | "type": "radio", 4 | "code": { 5 | "lang": "js", 6 | "text": "Promise.race([\n new Promise((resolve, reject) => \n\t\t\tsetTimeout(() => resolve(1), 1000)),\n new Promise((resolve, reject) => \n\t\t\tsetTimeout(() => resolve(2), 2000)),\n new Promise((resolve, reject) => \n\t\t\tsetTimeout(() => resolve(3), 3000))\n])\n\t.then(alert)" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`1`, `2`, `3`", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`3`, `2`, `1`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`1`", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "`2`", 23 | "isCorrect": false 24 | }, 25 | { 26 | "text": "`3`", 27 | "isCorrect": false 28 | } 29 | ], 30 | "descriptionMarkup": "`Promise.race(promises)` ждёт только первый выполненный промис, из которого берёт результат (или ошибку)." 31 | } 32 | 33 | -------------------------------------------------------------------------------- /src/data/tasks/react-middle/q6.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "Что произойдёт при нажатии на кнопку?", 3 | "type": "checkbox", 4 | "code": { 5 | "lang": "jsx", 6 | "text": "export const Counter = () => {\n const [number, setNumber] = useState(0)\n\n return (\n <>\n <h1>{number}</h1>\n <button\n onClick={() => {\n setNumber(number + 1)\n setNumber(number + 1)\n setNumber(number + 1)\n }}>+3</button>\n </>\n )\n}" 7 | }, 8 | "answers": [ 9 | { 10 | "text": "`number` будет равен 3", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "`number` будет равен 1", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "произойдёт 1 ререндер компонента", 19 | "isCorrect": true 20 | }, 21 | { 22 | "text": "произойдёт 3 ререндера компонента", 23 | "isCorrect": false 24 | } 25 | ], 26 | "descriptionMarkup": "Группировка нескольких вызовов обновлений состояния компонента в один ререндер называется batching" 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/data/tasks/react-samurai-way-0012/q4.json: -------------------------------------------------------------------------------- 1 | { 2 | "questionText": "В сценарии, где детали элемента загружаются асинхронно, почему предпочтительно использовать два состояния (selectedTrackId для ID выбранного элемента и selectedTrack для полных данных выбранного элемента) вместо одного selectedTrack??", 3 | "type": "radio", 4 | "answers": [ 5 | { 6 | "text": "React всегда требует два связанных состояния для обработки асинхронных данных", 7 | "isCorrect": false 8 | }, 9 | { 10 | "text": "Это позволяет избежать необходимости повторного запроса к серверу", 11 | "isCorrect": false 12 | }, 13 | { 14 | "text": "Это обеспечивает более высокую отзывчивость интерфейса, позволяя сразу подсветить выбранный элемент до завершения асинхронной загрузки его полных деталей", 15 | "isCorrect": true 16 | }, 17 | { 18 | "text": "Использование двух состояний сокращает общее количество перерисовок компонента", 19 | "isCorrect": false 20 | } 21 | ], 22 | "author": "DmitrijSergeev" 23 | } 24 | --------------------------------------------------------------------------------
`", 15 | "isCorrect": false 16 | }, 17 | { 18 | "text": "`