Вот приходишь ты такой на собеседование. Думаешь что уже давно учишься, ООП используешь вполне успешно... И тут тебе дают несколько задачек. И начинается какой-то АДЪ! Вроде, с виду простая хрень, но работает совсем не так!
Попробуйте сначала ответить, а потом запускать в ИДЕ.
Я, по-моему, ни разу не попал :)
Задача 1
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test1() {
Integer i = Integer.valueOf(1);
inc(i);
System.out.println(i);
}
private static void inc(Integer i) {
i++;
}
Задача 2
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test1() {
String i = “1”;
inc(i);
System.out.println(i);
}
private static void inc(String s) {
s = s + “2”;
}
Задача 3
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test2() {
Integer i1 = Integer.valueOf(717);
Integer i2 = Integer.valueOf(717);
System.out.println(i1 == i2);
}
Задача 4
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test3() {
System.out.println(show(10));
System.out.println(show(11));
}
private static int show(Integer i) {
return (i % 2 == 0 ? null : i + 1);
}
Задача 5
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test4() {
A a = new B();
printInfo(a);
printInfo(null);
}
private static void printInfo(A a) {
a.foo();
}
private static class A {
public static void foo() {
System.out.println("class A");
}
}
private static class B extends A {
public static void foo() {
System.out.println("class B extends A");
}
}
Alexander 17:55
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test5() {
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < 5; i++) {
threads.add(new Thread(new ThreadImpl()));
}
threads.forEach(Thread::start);
threads.forEach(t -> {
try {
t.join();
} catch (InterruptedException ignored) {
}
});
}
private static class ThreadImpl implements Runnable {
private static int counter = 0;
@Override
public synchronized void run() {
int localValue = ++counter;
try {
Thread.sleep((long) (Math.random() * 20));
} catch (InterruptedException ignored) {
}
System.out.println(localValue);
}
}