Перейти к основному содержимому

1.03. Тест на готовность к программированию

Всем

Тест на готовность к программированию

1: База

Вопросы

  1. Что такое операционная система?
  2. Какая роль у ядра (kernel) в операционной системе?
  3. Что происходит при запуске исполняемого файла на компьютере?
  4. Зачем нужен терминал (командная строка)?
  5. Какие основные функции выполняет центральный процессор (CPU)?
  6. Что такое оперативная память (RAM) и чем она отличается от постоянного хранилища?
  7. Как компьютер получает доступ к интернету?
  8. Что такое IP-адрес и зачем он нужен?
  9. Как работает DNS-система?
  10. Что означает «загрузка процессора» и как её можно наблюдать?

Практические задачи

Задача 1.
Откройте терминал (или командную строку) и выполните команду, которая покажет текущую директорию. Напишите, какая команда использовалась и что она вернула.

Задача 2.
Найдите IP-адрес вашего устройства в локальной сети. Опишите шаги, которые вы выполнили, и приведите результат.

Задача 3.
Создайте текстовый файл hello.txt с содержимым «Hello, world!» с помощью терминала. Убедитесь, что файл создан, и опишите использованные команды.


Ответы

Ответы на вопросы

  1. Операционная система — это программное обеспечение, управляющее аппаратными ресурсами компьютера и предоставляющее среду для выполнения приложений.
  2. Ядро (kernel) управляет доступом программ к оборудованию: распределяет память, обрабатывает запросы ввода-вывода, планирует выполнение процессов.
  3. При запуске исполняемого файла операционная система загружает его в память, выделяет ресурсы и передаёт управление первой инструкции программы.
  4. Терминал позволяет пользователю взаимодействовать с операционной системой через текстовые команды, управлять файлами, запускать программы и настраивать систему.
  5. Центральный процессор (CPU) выполняет инструкции программ, производит вычисления, управляет потоком данных между компонентами системы.
  6. Оперативная память (RAM) — это быстрое временное хранилище для данных, используемых запущенными программами. В отличие от диска, она очищается при выключении питания.
  7. Компьютер подключается к интернету через сетевой интерфейс (проводной или беспроводной), получает IP-адрес от маршрутизатора и использует протоколы (например, TCP/IP) для обмена данными.
  8. IP-адрес — уникальный числовой идентификатор устройства в сети, необходимый для маршрутизации данных между устройствами.
  9. DNS (Domain Name System) преобразует человекочитаемые доменные имена (например, example.com) в IP-адреса, по которым компьютеры находят серверы.
  10. Загрузка процессора — это процент времени, в течение которого CPU занят выполнением задач. Её можно наблюдать через диспетчер задач (Windows), Activity Monitor (macOS) или команды типа top / htop (Linux).

Ответы на задачи

Задача 1.

  • В Windows: команда cd без аргументов показывает текущий диск и путь.
  • В macOS/Linux: команда pwd (print working directory).
    Пример вывода: /home/user/documents.

Задача 2.

  • Windows: ipconfig → найти строку IPv4 Address.
  • macOS: ipconfig getifaddr en0 (или через «Системные настройки → Сеть»).
  • Linux: ip addr show или hostname -I.
    Пример результата: 192.168.1.35.

Задача 3.

  • Windows (PowerShell):
    echo "Hello, world!" > hello.txt
  • macOS/Linux:
    echo "Hello, world!" > hello.txt

Проверка:

cat hello.txt

Вывод: Hello, world!


2: Основы кода

Вопросы

  1. Что такое переменная в программировании?
  2. Каково назначение условного оператора (if)?
  3. Чем отличается цикл for от цикла while?
  4. Что делает оператор присваивания (=)?
  5. Что такое функция и зачем она нужна?
  6. Как передаются данные в функцию и как функция возвращает результат?
  7. Что означает термин «тип данных»? Приведите три примера.
  8. Что такое комментарий в коде и какова его роль?
  9. Какой язык программирования считается «низкоуровневым», а какой — «высокоуровневым»? В чём разница?
  10. Что происходит при выполнении программы построчно сверху вниз?

Практические задачи

Задача 1.
Напишите фрагмент кода на любом языке, который:

  • объявляет переменную age со значением 25,
  • проверяет, больше ли age 18,
  • выводит соответствующее сообщение.

Задача 2.
Напишите цикл, который выводит числа от 1 до 10. Используйте любой удобный тип цикла.

Задача 3.
Создайте функцию с именем greet, которая принимает имя пользователя и возвращает строку вида "Привет, {имя}!". Вызовите её с аргументом "Анна" и выведите результат.


Ответы

Ответы на вопросы

  1. Переменная — это именованное хранилище для данных, значение которого может изменяться во время выполнения программы.
  2. Условный оператор if позволяет выполнять блок кода только при истинности заданного условия.
  3. Цикл for обычно используется, когда известно количество итераций (например, перебор диапазона). Цикл while продолжается, пока выполняется условие, и применяется, когда число шагов заранее неизвестно.
  4. Оператор присваивания (=) связывает значение с именем переменной, сохраняя данные в памяти под этим именем.
  5. Функция — это именованный блок кода, предназначенный для выполнения определённой задачи. Она повышает читаемость, устраняет дублирование и упрощает тестирование.
  6. Данные передаются в функцию через параметры (в скобках при вызове). Результат возвращается с помощью ключевого слова return (или аналога), после чего становится доступен вызывающему коду.
  7. Тип данных определяет возможные значения и операции над переменной. Примеры: целое число (int), строка (string), логическое значение (boolean).
  8. Комментарий — текст в коде, игнорируемый интерпретатором или компилятором. Он поясняет логику, упрощает поддержку и помогает другим разработчикам понять намерения автора.
  9. Низкоуровневый язык (например, Assembly) близок к машинному коду, даёт прямой контроль над железом, но сложен в использовании. Высокоуровневый язык (например, Python) абстрагирован от деталей оборудования, проще в освоении и быстрее в разработке.
  10. При построчном выполнении интерпретатор читает каждую инструкцию по порядку, выполняет её и переходит к следующей. Это характерно для скриптовых языков, таких как Python или JavaScript.

Ответы на задачи

Задача 1. (на Python)

age = 25
if age > 18:
print("Совершеннолетний")
else:
print("Несовершеннолетний")

Задача 2. (на JavaScript)

for (let i = 1; i <= 10; i++) {
console.log(i);
}

Задача 3. (на C#)

string greet(string name) {
return $"Привет, {name}!";
}

Console.WriteLine(greet("Анна"));
// Вывод: Привет, Анна!

3: Разработка

Вопросы

  1. Что такое интегрированная среда разработки (IDE) и зачем она нужна?
  2. Какую роль играет отладчик в процессе написания кода?
  3. Что такое точка останова (breakpoint) и как она используется?
  4. Зачем разработчики используют системы контроля версий?
  5. Что такое репозиторий в Git?
  6. Какие основные команды Git вы знаете и для чего они служат?
  7. Что такое коммит и что он должен содержать?
  8. Что такое фреймворк и чем он отличается от библиотеки?
  9. Зачем применяют контейнеризацию с помощью Docker?
  10. Что такое образ (image) и контейнер в Docker?

Практические задачи

Задача 1.
Создайте локальный Git-репозиторий, добавьте в него файл readme.md с текстом # Мой проект, сделайте коммит с сообщением "Начало проекта". Опишите последовательность команд.

Задача 2.
Установите любой современный редактор кода или IDE (например, VS Code). Создайте в нём новый файл debug_example.py с простым скриптом на Python. Установите точку останова на строке вывода и запустите отладку. Опишите, что вы наблюдали.

Задача 3.
Напишите простой Dockerfile, который создаёт образ на основе официального образа Python, копирует в него файл app.py и запускает его при старте контейнера.


Ответы

Ответы на вопросы

  1. Интегрированная среда разработки (IDE) объединяет редактор кода, отладчик, средства сборки и управления проектами в одном приложении, ускоряя разработку и снижая количество ошибок.
  2. Отладчик позволяет пошагово выполнять программу, просматривать значения переменных и выявлять причины некорректного поведения.
  3. Точка останова (breakpoint) — это маркер в коде, при достижении которого выполнение программы приостанавливается, чтобы разработчик мог проанализировать состояние программы.
  4. Системы контроля версий позволяют отслеживать изменения в коде, возвращаться к предыдущим версиям, работать в команде без конфликтов и документировать историю разработки.
  5. Репозиторий в Git — это каталог, содержащий все файлы проекта и скрытую папку .git, где хранится вся история изменений.
  6. Основные команды Git:
    • git init — создаёт новый репозиторий,
    • git add — добавляет изменения в индекс,
    • git commit — фиксирует изменения с сообщением,
    • git status — показывает текущее состояние,
    • git log — отображает историю коммитов.
  7. Коммит — это зафиксированное состояние файлов в определённый момент времени. Он должен содержать краткое и ясное сообщение, описывающее суть изменений.
  8. Фреймворк задаёт архитектуру приложения и управляет потоком выполнения; разработчик дополняет его своей логикой. Библиотека — это набор функций, которые вызываются по желанию разработчика.
  9. Контейнеризация через Docker обеспечивает изоляцию приложения со всеми зависимостями, гарантируя одинаковое поведение в разных средах — от разработки до продакшена.
  10. Образ (image) — это неизменяемый шаблон с файловой системой, кодом и настройками. Контейнер — это запущенный экземпляр образа, в котором выполняется приложение.

Ответы на задачи

Задача 1.

mkdir my_project
cd my_project
git init
echo "# Мой проект" > readme.md
git add readme.md
git commit -m "Начало проекта"

Задача 2.
Пример содержимого debug_example.py:

name = "Мария"
greeting = f"Привет, {name}!"
print(greeting)

В VS Code:

  • Открыли файл,
  • Кликнули слева от строки print(greeting) — появилась красная точка (breakpoint),
  • Нажали F5 → выбрали «Python File»,
  • Выполнение остановилось на точке, в панели Variables отобразились значения name и greeting.

Задача 3.
Dockerfile:

FROM python:3.11-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]

Предполагается, что рядом лежит файл app.py с исполняемым Python-кодом.


4: Продвинутая работа с кодом

(ООП, сборка мусора, стек и очереди, алгоритмы)

Вопросы

  1. Что такое инкапсуляция в объектно-ориентированном программировании?
  2. Каково назначение наследования?
  3. Что означает полиморфизм и как он проявляется в коде?
  4. Что такое класс и чем он отличается от объекта?
  5. Что такое сборка мусора и зачем она нужна?
  6. Какие языки используют автоматическую сборку мусора, а какие требуют ручного управления памятью?
  7. Что такое стек (stack) и как он работает?
  8. Что такое очередь (queue) и в чём её отличие от стека?
  9. Что означает «алгоритмическая сложность» и зачем её оценивать?
  10. Какой алгоритм поиска элемента в неотсортированном массиве является стандартным, и какова его сложность?

Практические задачи

Задача 1.
Создайте класс Car с полями brand и speed, методом accelerate(delta), увеличивающим скорость, и методом get_info(), возвращающим строку вида "Машина: Toyota, скорость: 60". Продемонстрируйте создание объекта и вызов методов.

Задача 2.
Реализуйте стек с помощью списка (или массива). Поддерживайте операции push(item), pop() и is_empty(). Протестируйте его, добавив три элемента и удалив два.

Задача 3.
Напишите функцию linear_search(arr, target), которая ищет значение target в списке arr и возвращает индекс первого совпадения или -1, если элемент не найден. Протестируйте её на примере.


Ответы

Ответы на вопросы

  1. Инкапсуляция — это объединение данных и методов, работающих с этими данными, внутри одного объекта, а также ограничение прямого доступа к внутреннему состоянию извне.
  2. Наследование позволяет одному классу (потомку) получать свойства и методы другого класса (родителя), обеспечивая повторное использование кода и иерархическую организацию.
  3. Полиморфизм — способность объектов разных типов обрабатываться через единый интерфейс. Например, метод draw() может вести себя по-разному для объектов Circle и Rectangle, но вызываться одинаково.
  4. Класс — это шаблон или описание структуры и поведения. Объект — это конкретный экземпляр этого шаблона, существующий в памяти во время выполнения программы.
  5. Сборка мусора — автоматический процесс освобождения памяти, занятой объектами, на которые больше нет ссылок. Это предотвращает утечки памяти и упрощает разработку.
  6. Языки с автоматической сборкой мусора: Java, C#, Python, JavaScript, Go. Языки с ручным управлением: C, C++, Rust (частично — через владение).
  7. Стек (stack) — структура данных, работающая по принципу LIFO (Last In, First Out): последний добавленный элемент извлекается первым. Используется, например, при вызове функций.
  8. Очередь (queue) — структура данных по принципу FIFO (First In, First Out): первый добавленный элемент извлекается первым. Применяется в планировщиках задач, буферах и обработке событий.
  9. Алгоритмическая сложность оценивает, как растёт время выполнения или объём памяти в зависимости от размера входных данных. Это помогает выбирать эффективные решения при масштабировании.
  10. Линейный поиск — стандартный алгоритм для неотсортированного массива. Он последовательно проверяет каждый элемент. Его временная сложность — O(n).

Ответы на задачи

Задача 1. (на Python)

class Car:
def __init__(self, brand, speed=0):
self.brand = brand
self.speed = speed

def accelerate(self, delta):
self.speed += delta

def get_info(self):
return f"Машина: {self.brand}, скорость: {self.speed}"

# Использование
my_car = Car("Toyota")
my_car.accelerate(60)
print(my_car.get_info()) # Машина: Toyota, скорость: 60

Задача 2. (на JavaScript)

class Stack {
constructor() {
this.items = [];
}
push(item) {
this.items.push(item);
}
pop() {
return this.items.pop();
}
is_empty() {
return this.items.length === 0;
}
}

const s = new Stack();
s.push(1); s.push(2); s.push(3);
console.log(s.pop()); // 3
console.log(s.pop()); // 2
console.log(s.is_empty()); // false

Задача 3. (на C#)

int LinearSearch(int[] arr, int target) {
for (int i = 0; i < arr.Length; i++) {
if (arr[i] == target) return i;
}
return -1;
}

// Тест
int[] numbers = {10, 20, 30, 40};
Console.WriteLine(LinearSearch(numbers, 30)); // 2
Console.WriteLine(LinearSearch(numbers, 99)); // -1

5: Языки

(JS, Python, Java, C#, C++, PHP, Kotlin, Go, Rust, Swift)

Вопросы

  1. Какой язык чаще всего используется для разработки веб-интерфейсов в браузере?
  2. Почему Python популярен в научных вычислениях и автоматизации?
  3. Какая платформа лежит в основе исполнения Java-приложений?
  4. В какой экосистеме доминирует C# и какие типы приложений на нём чаще всего пишут?
  5. Чем C++ отличается от большинства современных языков в плане управления памятью?
  6. Для каких задач до сих пор активно применяется PHP?
  7. Почему Kotlin стал предпочтительным языком для разработки под Android?
  8. Какие свойства Go делают его удобным для написания серверных сервисов?
  9. Какие гарантии безопасности предоставляет Rust за счёт своей системы владения (ownership)?
  10. В какой среде разработки Swift является основным языком и почему?

Практические задачи

Задача 1.
Напишите простую HTTP-функцию на одном из языков (например, Python с Flask или Node.js с Express), которая при GET-запросе на /hello возвращает JSON {"message": "Привет из облака!"}.

Задача 2.
Создайте консольную программу на любом компилируемом языке (C#, Java, Go, Rust), которая выводит текущую дату и время в формате ГГГГ-ММ-ДД ЧЧ:ММ.

Задача 3.
Напишите функцию на двух разных языках (например, Python и JavaScript), которая принимает массив чисел и возвращает сумму всех чётных элементов.


Ответы

Ответы на вопросы

  1. JavaScript — основной язык клиентской веб-разработки, выполняемый непосредственно в браузере.
  2. Python обладает простым синтаксисом, богатой стандартной библиотекой и множеством специализированных пакетов (NumPy, Pandas, Scikit-learn), что ускоряет прототипирование и анализ данных.
  3. Java Virtual Machine (JVM) — виртуальная машина, которая выполняет байт-код Java, обеспечивая кроссплатформенность через принцип «написал один раз — запускай где угодно».
  4. C# тесно интегрирован с экосистемой Microsoft и .NET. На нём пишут десктопные приложения (WPF, WinForms), веб-сервисы (ASP.NET), игры (Unity) и корпоративные решения.
  5. C++ предоставляет прямой контроль над памятью: разработчик вручную выделяет (new) и освобождает (delete) ресурсы, что даёт высокую производительность, но требует осторожности.
  6. PHP остаётся востребованным для поддержки и разработки веб-сайтов, особенно на базе CMS вроде WordPress, Drupal и Laravel-приложений.
  7. Kotlin полностью совместим с Java, более лаконичен, безопасен (null-safety) и официально поддерживается Google как предпочтительный язык для Android.
  8. Go предлагает простой синтаксис, встроенную поддержку горутин (лёгких потоков), быструю компиляцию и минимальные зависимости, что идеально для микросервисов и высоконагруженных серверов.
  9. Rust исключает гонки данных и использование освобождённой памяти на этапе компиляции благодаря системе владения и заимствования, не требуя сборщика мусора.
  10. Swift — основной язык разработки под iOS, macOS и другие платформы Apple. Он интегрирован в Xcode, обеспечивает высокую производительность и безопасность, а также активно развивается компанией Apple.

Ответы на задачи

Задача 1. (Node.js + Express)

const express = require('express');
const app = express();

app.get('/hello', (req, res) => {
res.json({ message: "Привет из облака!" });
});

app.listen(3000, () => console.log('Сервер запущен на порту 3000'));

Задача 2. (C#)

using System;

class Program {
static void Main() {
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
}
}

Задача 3.

Python:

def sum_even(numbers):
return sum(x for x in numbers if x % 2 == 0)

print(sum_even([1, 2, 3, 4, 5, 6])) # 12

JavaScript:

function sumEven(numbers) {
return numbers.filter(x => x % 2 === 0).reduce((a, b) => a + b, 0);
}

console.log(sumEven([1, 2, 3, 4, 5, 6])); // 12