Собеседование QA Automation Java: стандартные задачи

1. Напишите код, который профильтрует дублирующиеся элементы в массиве и выведет их в виде списка.

package simple.test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class findDuplicates {

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();

        // Формируем список чисел от 0 до 9.
        for (int i = 0; i < 10; i++) {
            list.add(String.valueOf(i));
        }

        // Вставляем новый набор чисел от 0 до 5.
        for (int i = 0; i < 5; i++) {
            list.add(String.valueOf(i));
        }

        System.out.println("Изначальный список : " + list);
        System.out.println("\\nОтфильтрованный список без дубликатов : " + processList(list));
    }

    public static Set<String> processList(List<String> listContainingDuplicates) {

        final Set<String> resultSet = new HashSet<String>();
        final Set<String> tempSet = new HashSet<String>();

        for (String yourInt : listContainingDuplicates) {
            if (!tempSet.add(yourInt)) {
                resultSet.add(yourInt);
            }
        }
        return resultSet;
    }
}

2. Дайте пример кода, который сортирует список строк с использованием коллекции.

package simple.test;

import java.util.Arrays;

public class sortStrings {

    public static void main(String[] args) throws Exception {

        String[] inputList = { "Янв", "Феб", "Мар", "Апр", "Май", "Июн", "Июл",
                "Авг", "Сен", "Окт", "Ноя", "Дек" };

        // Показать имеющийся несортированный список.
        System.out.println("-------Входной список-------");
        showList(inputList);

        // Вызов сортировки этого списка.
        Arrays.sort(inputList);

        // Показать отсортированный список.
        System.out.println("\n-------Сортированный список-------");
        showList(inputList);

        // Вызов сортировки списка с учетом регистра.
        System.out.println("\n-------Сортированный список с учетом регистра-------");
        Arrays.sort(inputList, String.CASE_INSENSITIVE_ORDER);

        // Выводим отсортированный список.
        showList(inputList);
    }

    public static void showList(String[] array) {
        for (String str : array) {
            System.out.print(str + " ");
        }
        System.out.println();
    }

}

3. Напишите функцию, которая переворачивает число (порядок цифр в нем изменяет на противоположный, инвертирует).

package simple.test;

public class invertNumber {

    public long doInvert(long number) {

        long invert = 0;
        while (number != 0) {
            invert = (invert * 10) + (number % 10);
            number = number / 10;
        }
        return invert;
    }

    public static void main(String args[]) {
        long lnum = 654321;
        invertNumber input = new invertNumber();

        System.out.println("Введенное значение : " + lnum);
        System.out.println("Инвертированное значение : " + input.doInvert(lnum));
    }
}

4. Напишите метод проверки, является ли введенное число простым числом

package simple.test;

import java.util.Scanner;

public class findPrime {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Введите целое число : ");
        int input = scan.nextInt();
        if (checkPrime(input)) {
            System.out.println("Введенное число " + input + " является простым.");
        } else {
            System.out.println("Введенное число " + input + " не является простым.");
        }
    }

    public static boolean checkPrime(int n) {
        if (n <= 1) {
            return false;
        }
        for (int i = 2; i < Math.sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}

5. Напишите метод поиска двух самых больших значений в массиве.

package simple.test;

public class findTwoMaxValue {
    public void GetTwoMaxValues(int[] nums) {

        int maxOne = 0;
        int maxTwo = 0;
        for (int n : nums) {
            if (maxOne < n) {
                maxTwo = maxOne;
                maxOne = n;
            } else if (maxTwo < n) {
                maxTwo = n;
            }

        }

        System.out.println("Max1 - " + maxOne);
        System.out.println("Max2 - " + maxTwo);
    }

    public static void main(String[] args) {

        int list[] = { 15, 24, 48, 21, 43, 11, 79, 93 };

        findTwoMaxValue max = new findTwoMaxValue();
        max.GetTwoMaxValues(list);
    }
}

6. Напишите код поиска самой длинной подстроки из введенной строки, в которой нет дублирующихся символов.

package simple.test;

import java.util.HashSet;
import java.util.Set;

public class findSubstr {

    private Set<String> stringSet = new HashSet<String>();
    private int lstringSet = 0;

    public Set<String> findStr(String input) {

        // Сброс данных в экземпляре.
        stringSet.clear();
        lstringSet = 0;

        // Присвоить boolean-флаг ASCII-значению каждого символа.
        boolean[] flag = new boolean[256];
        int j = 0;
        char[] inputCharArr = input.toCharArray();
        for (int i = 0; i < inputCharArr.length; i++) {
            char c = inputCharArr[i];
            if (flag[c]) {
                extractSubString(inputCharArr, j, i);
                for (int k = j; k < i; k++) {
                    if (inputCharArr[k] == c) {
                        j = k + 1;
                        break;
                    }
                    flag[inputCharArr[k]] = false;
                }
            } else {
                flag[c] = true;
            }
        }
        extractSubString(inputCharArr, j, inputCharArr.length);
        return stringSet;
    }

    private String extractSubString(char[] inputArr, int start, int end) {

        StringBuilder sb = new StringBuilder();
        for (int i = start; i < end; i++) {
            sb.append(inputArr[i]);
        }
        String subStr = sb.toString();
        if (subStr.length() > lstringSet) {
            lstringSet = subStr.length();
            stringSet.clear();
            stringSet.add(subStr);
        } else if (subStr.length() == lstringSet) {
            stringSet.add(subStr);
        }

        return sb.toString();
    }

    public static void main(String a[]) {

        findSubstr substr = new findSubstr();

        System.out
                .println("Введенные строки ------------ | ---- Самые длинные неповторяющиеся");
        System.out.println("Software_Programmer"
                + "         |         " + substr.findStr("Software_Programmer"));
        System.out.println("Software_Developer_In_Test"
                +  "  |         " + substr.findStr("Software_Developer_In_Test"));
        System.out.println("developers_write_unit_tests"
                +  " |         " + substr.findStr("developers_write_unit_tests"));
        System.out.println("javajavbasp.net"
                +  "             |         " + substr.findStr("javajavbasp.net"));
    }
}

7. Напишите код, который удаляет из строки лишние пробелы.

package simple.test;

import java.util.StringTokenizer;

public class removeExtraSpaces {
    
    public static void main(String args[]){
    	
        String input = "Удали    из   меня       лишние   пробелы.";
        StringTokenizer substr = new StringTokenizer(input, " ");
        StringBuffer sb = new StringBuffer();
        
        while(substr.hasMoreElements()){
            sb.append(substr.nextElement()).append(" ");
        }
        
        System.out.println("Введенная строка: " + input);
        System.out.println("Исправленная строка: " + sb.toString().trim());
    }
}

8. Напишите код, проверяющий, является ли введенное число палиндромом (то есть, читается ли с конца на начало — так же как с начала на конец, как слово «Анна» или фраза «Лёша на полке клопа нашёл»).

package simple.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class identifyPalindrome {

    public static void main(String[] args) {

        try {
            BufferedReader object = new BufferedReader(new InputStreamReader(
                    System.in));
            System.out.println("Введите число");
            int inputValue = Integer.parseInt(object.readLine());
            int n = inputValue;
            int rev = 0;
            System.out.println("Введенное число - это : ");
            System.out.println(" " + inputValue);
            for (int i = 0; i <= inputValue; i++) {
                int r = inputValue % 10;
                inputValue = inputValue / 10;
                rev = rev * 10 + r;
                i = 0;
            }
            System.out.println("После перевертывания : " + " ");
            System.out.println(" " + rev);
            if (n == rev) {
                System.out.print("Введенное число является палиндромом.");
            } else {
                System.out.println("Введенное число не является палиндромом.");
            }
        } catch (Exception e) {
            System.out.println("Недопустимое число.");
        }
    }
}

9. Напишите код, который меняет местами два числа, при этом нельзя создавать «временную» переменную.

package simple.test;

public class smartSwapping {

    public static void main(String args[]) {
        
        int numX = 10;
        int numY = 20;
        System.out.println("Состояние до перемены местами:");
        System.out.println("Значение numX: " + numX);
        System.out.println("Значение numY: " + numY);
        
        System.out.println("");
        
        numX = numX + numY;
        numY = numX - numY;
        numX = numX - numY;
        System.out.println("Состояние после перемены местами:");
        System.out.println("Значение numX: " + numX);
        System.out.println("Значение numY: " + numY);
    }
}

10. Напишите код, который переворачивает строку, в двух вариантах: с применением класса BufferString, и без.

package simple.test;

public class invertString {

    public String invertWithStringBuffer(String str) {

        StringBuffer buffer = new StringBuffer(str);
        buffer.reverse();
        return buffer.toString();
    }

    public String invertWithoutStringBuffer(String str) {

        int length = str.length();
        String original = str;
        String invert = "";
        for (int i = length - 1; i >= 0; i--) {
            invert = invert + original.charAt(i);
        }
        return invert;
    }

    public static void main(String[] args) {

        invertString invertStr = new invertString();

        System.out.println("Инвертированная строка с BufferString: "
                + invertStr.invertWithStringBuffer("987654321"));

        System.out.println("");

        System.out.println("Инвертированная строка без BufferString: "
                + invertStr.invertWithoutStringBuffer("kjihgfedcba"));
    }
}

***

Собесы

Твой автомэйшэн в Телеграме

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

6 КОММЕНТАРИИ

Подписаться
Уведомить о
guest

6 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Алмаз Саляхов
7 месяцев назад

Спасибо. Лишние пробелы еще так можно удалить

public class RemoveExtraSpaces {
    public static void main(String[] args) {
        String input = "Удали    из   меня       лишние   пробелы.";
        Pattern pattern = Pattern.compile("\\s+");
        Matcher matcher = pattern.matcher(input);
        String newString = matcher.replaceAll(" ");
        System.out.println(input);
        System.out.println(newString);
    }

}
Staci
Staci
6 месяцев назад
Ответить на  Алмаз Саляхов

Тогда уж легче вот так:

String fin = input.replaceAll(» +», » «);

Алексей
Алексей
4 месяцев назад
Ответить на  Staci

Ну или так input.replaceAll(«\\s+«, » «).trim;

Камилла
Камилла
3 месяцев назад

В решении 4 задачи ошибка, в частности здесь — Math.sqrt(n)

Aked
Aked
3 месяцев назад
Ответить на  Камилла

Добрый день Вы часом не Камилла Мирошниченко? В Java я ничего не понимаю (C++), но не знал, что в ней разбираетесь Вы.

Роман
Роман
1 день назад

если на собесе просят такую шляпу решать) бегите

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас