Квиз по задачам из собеседований Java-разработчиков

1 / 9

☕ Каков результат вызова метода work()?

 
private void work() {
	try {
		work();
	} finally {
		work();
	}
}
Не верно!

Мы получим StackOverflowError, но учитывая контракт finally, сначала выполним эту клаузу, то есть опять уйдем в рекурсию до появления исключения, а потом снова finally. В итоге получим бесконечный цикл.


Не верно!

Мы получим StackOverflowError, но учитывая контракт finally, сначала выполним эту клаузу, то есть опять уйдем в рекурсию до появления исключения, а потом снова finally. В итоге получим бесконечный цикл.


Верно!

Мы получим StackOverflowError, но учитывая контракт finally, сначала выполним эту клаузу, то есть опять уйдем в рекурсию до появления исключения, а потом снова finally. В итоге получим бесконечный цикл.


Не верно!

Мы получим StackOverflowError, но учитывая контракт finally, сначала выполним эту клаузу, то есть опять уйдем в рекурсию до появления исключения, а потом снова finally. В итоге получим бесконечный цикл.


☕ Теоретически, какое максимальное количество потоков может одновременно, не блокируя друг друга, совершить запись в ConcurrentHashMap?

Не верно!

Запись производится сегментом, он же делает Acquire на ReentrantLock.


Не верно!

Запись производится сегментом, он же делает Acquire на ReentrantLock.


Верно!

Запись производится сегментом, он же делает Acquire на ReentrantLock.


Не верно!

Запись производится сегментом, он же делает Acquire на ReentrantLock.


☕ Каков результат выполнения кода?

 
char ch = '0';
ch *= 1.1;
System.out.println(ch);
Не верно!

ASCII-код символа ‘0’ равен 48. Умножить на 1.1 равно 52,8. При приведении обратно к char будет произведено округление до 52. Это ASCII-код четвёрки.


Не верно!

ASCII-код символа ‘0’ равен 48. Умножить на 1.1 равно 52,8. При приведении обратно к char будет произведено округление до 52. Это ASCII-код четвёрки.


Не верно!

ASCII-код символа ‘0’ равен 48. Умножить на 1.1 равно 52,8. При приведении обратно к char будет произведено округление до 52. Это ASCII-код четвёрки.


Не верно!

ASCII-код символа ‘0’ равен 48. Умножить на 1.1 равно 52,8. При приведении обратно к char будет произведено округление до 52. Это ASCII-код четвёрки.


Верно!

ASCII-код символа ‘0’ равен 48. Умножить на 1.1 равно 52,8. При приведении обратно к char будет произведено округление до 52. Это ASCII-код четвёрки.


Не верно!

ASCII-код символа ‘0’ равен 48. Умножить на 1.1 равно 52,8. При приведении обратно к char будет произведено округление до 52. Это ASCII-код четвёрки.


☕ Что напечатает следующий код?

 
System.out.print(0.1 * 2 == 0.2);
System.out.print(0.1 * 3 == 0.3);
Верно!

В связи с особенностями внутреннего представления чисел с плавающей точкой в Java нет точного представления числа 0.3.


Не верно!

В связи с особенностями внутреннего представления чисел с плавающей точкой в Java нет точного представления числа 0.3.


Не верно!

В связи с особенностями внутреннего представления чисел с плавающей точкой в Java нет точного представления числа 0.3.


Не верно!

В связи с особенностями внутреннего представления чисел с плавающей точкой в Java нет точного представления числа 0.3.


☕ Корректно ли такое выражение?

List<Number> nums = new ArrayList<Integer>();

Не верно!

Информация о generic типах стирается во время выполнения. Generic тип должен быть одинаковый в правой и левой частях, наследование не учитывается.


Верно!

Информация о generic типах стирается во время выполнения. Generic тип должен быть одинаковый в правой и левой частях, наследование не учитывается.


Не верно!

Информация о generic типах стирается во время выполнения. Generic тип должен быть одинаковый в правой и левой частях, наследование не учитывается.


☕ Является ли данный класс потокобезопасным?

 
public class Concurrent {
    private final AtomicInteger value = new AtomicInteger(0);

    public void setValue(int newValue){
        if (newValue < value.get()) {
            throw new IllegalArgumentException();
        }
        value.set(newValue);
    }
}
Не верно!

Класс не сохраняет инвариант. В методе выполняется последовательность действий check-then-act, но не используется блокировка достаточная для того, чтобы сделать операцию атомарной.


Верно!

Класс не сохраняет инвариант. В методе выполняется последовательность действий check-then-act, но не используется блокировка достаточная для того, чтобы сделать операцию атомарной.


☕ Как можно в коде вычислить квадратный корень из числа без использования функции извлечения корня? Для упрощения задачи будем считать, что корень – это всегда целое число. Какое самое оптимальное решение?

Не верно!

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

  1. Делим 9 пополам: 9/2 = 4,5.
  2. Берем ближайшее целое и возводим его в квадрат: 5*5 = 25.
  3. Сравниваем результат с тем, из чего нужно извлечь корень: 25 > 9. Значит цифра 5 слишком большая.
  4. Дальше делим цифру 5 пополам: 5/2 = 2,5.
  5. Берём ближайшее целое и возводим в квадрат: 3*3 = 9.
  6. Сравниваем: 9 = 9. Значит ответ найден: 3.

Верно!

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

  1. Делим 9 пополам: 9/2 = 4,5.
  2. Берем ближайшее целое и возводим его в квадрат: 5*5 = 25.
  3. Сравниваем результат с тем, из чего нужно извлечь корень: 25 > 9. Значит цифра 5 слишком большая.
  4. Дальше делим цифру 5 пополам: 5/2 = 2,5.
  5. Берём ближайшее целое и возводим в квадрат: 3*3 = 9.
  6. Сравниваем: 9 = 9. Значит ответ найден: 3.

Не верно!

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

  1. Делим 9 пополам: 9/2 = 4,5.
  2. Берем ближайшее целое и возводим его в квадрат: 5*5 = 25.
  3. Сравниваем результат с тем, из чего нужно извлечь корень: 25 > 9. Значит цифра 5 слишком большая.
  4. Дальше делим цифру 5 пополам: 5/2 = 2,5.
  5. Берём ближайшее целое и возводим в квадрат: 3*3 = 9.
  6. Сравниваем: 9 = 9. Значит ответ найден: 3.

☕ Есть ли смысл использовать лямбды в Java в целях оптимизации, или это только для улучшения читабельности кода?

Не верно!

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


Не верно!

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


Верно!

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


☕ Если в Java в ArrayList и в LinkedList начать в бесконечном цикле добавлять по одному элементу, то в какой из коллекций окажется больше элементов на момент возникновения OutOfMemoryError?

Не верно!

В большинстве случаев в LinkedList окажется больше элементов, т.к. память выделяется постепенно под каждый новый элемент. А в ArrayList память выделяется пачками: в случае достижения лимита текущего массива создаётся новый массив большего размера и память под него выделяется сразу. Но может возникнуть такая ситуация, когда в ArrayList поместится больше элементов, если новый массив окажется как раз «впритык» по объёму доступной оперативной памяти. В этом случае LinkedList закончится быстрее, т.к. на каждый отдельный элемент расходуется больше памяти, чем в ArrayList.


Не верно!

В большинстве случаев в LinkedList окажется больше элементов, т.к. память выделяется постепенно под каждый новый элемент. А в ArrayList память выделяется пачками: в случае достижения лимита текущего массива создаётся новый массив большего размера и память под него выделяется сразу. Но может возникнуть такая ситуация, когда в ArrayList поместится больше элементов, если новый массив окажется как раз «впритык» по объёму доступной оперативной памяти. В этом случае LinkedList закончится быстрее, т.к. на каждый отдельный элемент расходуется больше памяти, чем в ArrayList.


Верно!

В большинстве случаев в LinkedList окажется больше элементов, т.к. память выделяется постепенно под каждый новый элемент. А в ArrayList память выделяется пачками: в случае достижения лимита текущего массива создаётся новый массив большего размера и память под него выделяется сразу. Но может возникнуть такая ситуация, когда в ArrayList поместится больше элементов, если новый массив окажется как раз «впритык» по объёму доступной оперативной памяти. В этом случае LinkedList закончится быстрее, т.к. на каждый отдельный элемент расходуется больше памяти, чем в ArrayList.


Не верно!

В большинстве случаев в LinkedList окажется больше элементов, т.к. память выделяется постепенно под каждый новый элемент. А в ArrayList память выделяется пачками: в случае достижения лимита текущего массива создаётся новый массив большего размера и память под него выделяется сразу. Но может возникнуть такая ситуация, когда в ArrayList поместится больше элементов, если новый массив окажется как раз «впритык» по объёму доступной оперативной памяти. В этом случае LinkedList закончится быстрее, т.к. на каждый отдельный элемент расходуется больше памяти, чем в ArrayList.


Далее
0 из 9

Поздравляем с прохождением теста! А теперь предлагаем почитать статьи по программированию на Python на нашем сайте PythonTurbo!

Интересно, хочу посмотреть