Баннер мобильный (3) Пройти тест

Тестовые задания по программированию: 15 типовых вопросов и задач

И 5 платформ, на которых можно тренироваться решать алгоритмические задачи

Подборка

14 октября 2024

Поделиться

Скопировано
Тестовые задания по программированию: 15 типовых вопросов и задач

Содержание

    Программирование — это прикладная область, в которой успех приходит через практику. Чем больше задач вы решаете, тем увереннее становитесь в профессии. Это особенно важно не только для профессионального роста, но и для успешного прохождения собеседований и выполнения тестовых заданий. Многие компании включают программные задачи в процесс отбора, чтобы оценить уровень навыков кандидата.

    В этой статье мы расскажем, с какими вопросами и заданиями вы можете столкнуться при приеме на работу.

    Примеры тестовых заданий для новичков 

    Перечислим примеры задач и вопросов для начинающих программистов, которые могут встретиться на собеседованиях и в тестовых заданиях. 

    Задание 1. Что выведет на экран этот код? 

    function b(x, y, a) {
    
    arguments[2] = 10;
    
    alert(a);
    
    }
    
    b(1, 2, 3);

    Ответ: Значение 10. Функция b содержит три аргумента, их индексы начинаются с [0]. Получается, аргумент с индексом [2] — это функция a. В первой строке функции третьему аргументу присваивается значение 10. 

    Задание 2. Объясните, в каком порядке выполняются эти скрипты. Почему именно так? 

    <script async src="script-1.js"></script> // Время загрузки скрипта 1.5s
    
    <script src="script-2.js"></script> // Время загрузки скрипта 1s
    
    <script defer src="script-3.js"></script> // Время загрузки скрипта 3s
    
    <script defer src="script-4.js"></script> // Время загрузки скрипта 1.5s
    
    <script src="script-5.js"></script> // Время загрузки скрипта 2s
    
    <script async src="script-6.js"></script> // Время загрузки скрипта 1s
    
    <script defer src="script-7.js"></script> // Время загрузки скрипта 0.1s

    Ответ: 2 — 6 — 1 — 5 — 3 — 4 — 7. Когда браузер загружает HTML и доходит до тега <script>…</script>, он не может больше выстраивать DOM. Сначала ему нужно выполнить скрипт. С внешними скриптами <script>…</script> то же самое: браузеру нужно подождать, пока скрипт загрузится, и только после этого обрабатывать остальную страницу. 

    Рассмотрим функции подробнее: 

    • async — порядок загрузки (что первым загрузится, то и сработает). Выполняется до полной загрузки страницы, если скрипты небольшие либо хранятся в кэше, а документ объемный. 
    • defer — порядок документа (расположение в документе). Выполняется после загрузки и обработки документа перед DOMContentLoaded. 

    Таким образом, сначала выполнится второй скрипт, потому что он первый в очереди и по скорости загрузки. Затем шестой: он загружается с такой же скоростью — за одну секунду. Асинхронная загрузка — без очереди, первый скрипт загружается полторы секунды и выполняется после загрузки. Далее — третий, четвертый, пятый и седьмой скрипты. Они загружаются в конце и в порядке очереди размещения в DOM. 

    Задание 3. Что выведет на экран этот код? 

    public class Main {
    
        public static void main(String[] args) {
    
            int x = 5;
    
            if (x == 5) 
    
                System.out.println("X is 5");
    
            else
    
                System.out.println("X is not 5");
    
        }
    
    }

    Ответ: Так как условие x == 5 верно, выведется X is 5.

    Задание 4. Что произойдет при компиляции этого кода на Java?

    public class Main {
    
        public static void main(String[] args) {
    
            int x = 5 / 0;
    
            System.out.println(x);
    
        }
    
    }

    Ответ: Будет выброшено исключение ArithmeticException при попытке деления на ноль.

    Задание 5. Каков будет результат выполнения кода на Java? 

    public class Main {
    
        public static void main(String[] args) {
    
            int num = 10;
    
            while (num > 0) {
    
                System.out.println(num);
    
                num--;
    
            }
    
        }
    
    }

    Ответ: На экране выведутся числа от 10 до 1. 

    Задание 6. Корректно ли работает данный код на Java?

    public class Main {
    
        public static void main(String[] args) {
    
            int[] arr = {1, 2, 3};
    
            System.out.println(arr[3]);
    
        }
    
    }

    Ответ: Нет, будет вызвано исключение ArrayIndexOutOfBoundsException, так как в массиве нет третьего элемента. 

    Задание 7. Что не так в этом коде на C++? 

    operator int() const {
    
        return *this;
    
    }

    Ответ: Данная функция вызовет рекурсию

    Задание 8. Напишите программу на Java. Она должна считывать массив целых чисел и выводить на экран их сумму и среднее арифметическое. 

    Ответ:

    Чтобы создать экземпляр для считывания массива данных, используйте BufferedReader или Scanner. Для вычисления суммы и среднего арифметического — цикл for. 

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
    
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("Enter the number of elements in the array: ");
    
            int n = scanner.nextInt();
    
            int[] numbers = new int[n];
    
            for (int i = 0; i < n; i++) {
    
                System.out.print("Enter element " + (i + 1) + ": ");
    
                numbers[i] = scanner.nextInt();
    
            }
    
            int sum = 0;
    
            for (int i : numbers) {
    
                sum += i;
    
            }
    
            double average = (double) sum / n;
    
            System.out.println("Sum: " + sum);
    
            System.out.println("Average: " + average);
    
        }
    
    }

    Задание 9. Измените порядок элементов, не используя классы. 

    Ответ:

    Есть несколько путей решения такой задачи, но лучше выбрать самый очевидный и простой. Так вы точно не запутаетесь и сможете выполнить задание быстро. 

    package Javatest.company;
    
    public class Reverse {
    
        public static String reverseByArray(String s) {
    
            char[] a = s.toCharArray();
    
            char[] b = new char[a.length];
    
            for (int i = 0; i < a.length; i++) {
    
                b[(a.length - 1) - i] = a[i];
    
            }
    
            return new String(b);
    
        }
    
        public static void main(String[] args) {
    
            String string = "Java test";
    
            System.out.println(reverseByArray(string));
    
        }
    
    }

    Задание 10. Напишите программу для вывода чисел Фибоначчи.

    Ответ: 

    Числа Фибоначчи — последовательность, в которой каждое следующее число после единицы — это сумма двух предшествующих ему чисел. Например: 1, 1, 2, 3, 5, 8 и так далее. 

    package javatest.company;
    
    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String args[]) {
    
            System.out.println("Enter number upto which Fibonacci series to print: ");
    
            int number = new Scanner(System.in).nextInt();
    
            System.out.println("Fibonacci series upto " + number +" numbers : ");
    
            for(int i=1; i<=number; i++){
    
                System.out.print(fibonacci2(i) +" ");
    
            }
    
        }
    
        public static int fibonacci(int number){
    
            if(number == 1 || number == 2){
    
                return 1;
    
            }
    
            return fibonacci(number-1) + fibonacci(number -2); 
    
        }
    
        public static int fibonacci2(int number){
    
            if(number == 1 || number == 2){
    
                return 1;
    
            }
    
            int fibo1=1, fibo2=1, fibonacci=1;
    
            for(int i= 3; i<= number; i++){
    
                fibonacci = fibo1 + fibo2; 
    
                fibo1 = fibo2;
    
                fibo2 = fibonacci;
    
            }
    
            return fibonacci;
    
        }
    
    }

    Задание 11. Объясните, что такое бинарное дерево поиска и где оно применяется. 

    Часто во время собеседований проверяют теоретические знания, поэтому просят объяснить термин или суть какого-то явления. 

    Ответ: 

    Бинарное дерево поиска — это массив данных, где каждый узел содержит ключ (значение), а также ссылки на два других узла: левый и правый. Ключи в левом всегда меньше ключа самого узла, а ключи в правом — всегда больше. Представьте телефонный справочник: чтобы найти номер, вы просматриваете страницы по алфавиту. Бинарное дерево работает по тому же принципу, только вместо страниц — узлы дерева, а вместо букв — ключи. 

    Бинарные деревья поиска используются в самых разных сферах: от баз данных и систем поиска до создания других структур данных, таких как очереди приоритетов или множества. 

    Задание 12. Расскажите, что такое рекурсия. 

    Ответ: 

    Рекурсия — это процесс, когда функция вызывает саму себя. Визуально это можно представить так: вы стоите перед зеркалом, а в зеркале тоже есть зеркало, в нем тоже есть зеркало и так далее. Рекурсия работает по такому же принципу: функция вызывает саму себя, пока не достигнет определенного условия. 

    Задание 13. Расскажите, чем различаются двусвязный и односвязный список. 

    Еще одно часто встречающееся задание — объяснить разницу между двумя терминами. 

    Ответ: 

    Разница между двусвязным и односвязным списком заключается в связи узлов между собой. Односвязный список — это линейная структура, в которой каждый узел содержит данные и ссылку на следующий узел в списке. Двусвязный список также является линейной структурой, но каждый узел в нем содержит ссылку на следующий и предыдущий узлы в списке. 

    Задание 14. Объясните, в чем разница между стеком (Stack) и очередью (Queue). 

    Ответ: 

    У стека и очереди нет свободного доступа ко всем элементам структуры данных — в этом их схожесть. А основное отличие в том, что стек — структура LIFO: в свободном доступе только последний добавленный элемент. Очередь же относится к FIFO: в свободном доступе только первый добавленный элемент. 

    Задание 15. Объясните младшекласснику, что такое база данных. 

    Хороший способ понять, насколько хорошо человек разбирается в теме, — попросить его объяснить сложное понятие ребенку. Работодатели знают об этом, поэтому не удивляйтесь, если вас попросят сделать что-то подобное. 

    Ответ:

    Представь себе большую библиотеку, но вместо книг там хранятся все твои любимые игрушки. Ты можешь легко найти машинку, куклу или конструктор, потому что каждый предмет имеет свое место и ты знаешь, где его искать.

    База данных — это как такая большая библиотека, но хранятся там не игрушки или книги, а информация. Вместо того чтобы искать машинку или куклу, ты можешь найти сведения о друзьях, любимых мультфильмах, животных. 

    Когда хочешь отыскать что-то, достаточно задать вопрос компьютеру, а он, как библиотекарь, найдет нужную информацию в этом большом массиве данных. 

    Задание 16. Напишите баг-репорт для микроволновой печи, которая не греет еду. 

    Такие задания попадаются часто: нужно написать отчет об ошибке в работе простого прибора. Хотя подобные задачи относятся к тестированию, программистам их тоже предлагают. 

    Ответ: 

    Название: Микроволновая печь не нагревает пищу

    Описание: Микроволновая печь не нагревает пищу. При включении устройства и выборе режима работы запускается таймер, но еда не становится горячей. 

    Шаги по воспроизведению:

    1. Подключить микроволновую печь к сети. 
    2. Поставить в микроволновую печь блюдо с едой. 
    3. Выбрать режим работы и установить таймер. 
    4. Нажать кнопку «Старт».

    Ожидаемый результат: Еда должна нагреться до заданной температуры за установленное время. 

    Фактический результат: Еда не нагревается, остается холодной.

    Платформы с задачами по программированию 

    Ниже — несколько сайтов, где можно найти много задач по программированию, которые помогут отточить навыки и подготовиться к тестовым заданиям. 

    Codeforces

    Популярная площадка с тренировками, задачами, соревнованиями и другими активностями для разработчиков. Codeforces — одна из крупнейших баз заданий, также здесь развитое комьюнити. При необходимости можно обратиться к опытному разработчику за помощью, и вам с большой вероятностью ответят.

    Задачи на Codeforces
    На Codeforces есть рейтинг участников, чтобы соревноваться с другими разработчиками. Источник

    All Cups 

    Платформа от команды VK для начинающих и опытных IT-специалистов. Здесь можно решать задачи, изучать полезные материалы и соревноваться с другими программистами. 

    На All Cups есть задания по спортивному программированию, ML-learning, нейросетям, системному администрированию. Это один из немногих русскоязычных сайтов, который может конкурировать с зарубежными ресурсами по объему материалов. 

    Kaggle

    Здесь много задач для тех, кто работает с большими данными и машинным обучением. Кроме заданий, на сайте есть полезные материалы — изучайте их, чтобы совершенствоваться в профессии. Также можно не просто решать задачи, но и участвовать в соревнованиях с другими разработчиками. 

    Задача по программированию в Kaggle
    В Kaggle много задач с разными сценариями. Источник

    Codewars

    На этом сайте собраны задачи и челленджи на разные темы — от языков программирования до алгоритмов. Сможете прокачать разные навыки разработки, а также подтянуть теорию благодаря блогу с полезными материалами. 

    LeetCode 

    Сборник задач, который особенно любят программисты, стремящиеся работать в крупных компаниях типа Amazon, Apple, Netflix и Google. Главная особенность сайта в том, что задания максимально приближены к тем, что встречаются на собеседованиях. 

    Интерфейс LeetCode
     LeetCode поддерживает 14 языков программирования. Источник

    Советы по прохождению собеседований для новичков 

    Если хотите успешно пройти собеседование, правильно выполнить тестовое задание и получить оффер, учитывайте такие рекомендации: 

    1. Если не знаете, как решить задачу, не паникуйте. Предложите разные варианты решения, чтобы показать ваш ход мыслей. Работодатель посмотрит, как вы пытаетесь выполнить задачу. К тому же так вы продемонстрируете, что не боитесь сложных вызовов. 
    2. Постарайтесь не волноваться. Работодатель или HR понимают, что вы не специалист уровня middle или senior, поэтому не будут давать слишком сложные задачи. 
    3. Задавайте вопросы. Это вообще один из главных навыков джуна, который хочет развиваться в профессии. Еще на собеседовании стоит задавать вопросы, чтобы лучше понять задачу, а значит, предложить верное решение. 

    После выполнения тестового задания просите обратную связь. Тем более если не удалось получить работу. Так вы поймете свои недочеты и сможете исправить их, чтобы не допустить в следующий раз. 

    Полезные статьи по теме 

    Подборка

    Поделиться

    Скопировано
    0 комментариев
    Комментарии