Devclub 01/2017 - (Не)адекватное Java-интервью

88
(Не)адекватное (Java)-интервью

Transcript of Devclub 01/2017 - (Не)адекватное Java-интервью

(Не)адекватное

(Java)-интервью

https://twitter.com/mxcl/status/608682016205344768

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

Max Howell @mxcl

https://www.facebook.com/aleksandr.jastremski/posts/1859123867664822?pnref=story

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

https://www.facebook.com/aleksandr.jastremski/posts/1859123867664822?pnref=story

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

Вам вообще нужно что-бы этот человек пришел и начал делать "Работу"? Или у вас конкурс на самого пафосного чувака?

Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM".

https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story

https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story

Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM".

На самом деле, у нас в проектах ramp-up даже крутейших инженеров занимает от 3 месяцев. [….]

Никто в своём уме не будет думать, что чувак сможет правильно что-то починить, если он не знает кодобазы, прошлого опыта, и проч.

https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story

Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM".

На самом деле, у нас в проектах ramp-up даже крутейших инженеров занимает от 3 месяцев. [….]

Никто в своём уме не будет думать, что чувак сможет правильно что-то починить, если он не знает кодобазы, прошлого опыта, и проч.

Кого собеседуем? И зачем?

5 минутСвоё мнение о кандидате вы составляете за первые 5 минут общения. Остальное время вы используете лишь для того, чтобы убедиться, или разубедиться, в своём мнении.

Какие вопросы бывают?

Алгоритмические задачки

Вопросы на знание ЯП (Java)

Вопросы на знание стандартной библиотеки (JDK)

Вопросы на знание фреймворков (Spring)

Какие вопросы бывают?

Вопросы о дизайне (как бы ты сделал…)

Общие вопросы по программированию

Вопросы о предыдущем опыте

Инверсия бинарного дерева

4

72

9631

4

72

9631

4

27

1369

Инверсия бинарного дерева

leetcode.com

public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }

public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }public class Solution { public TreeNode invertTree(TreeNode root) { if(root == null){ return root; } TreeNode node = new TreeNode(root.val); node.left = invertTree(root.right); node.right = invertTree(root.left); return node; } }

public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }public class Solution { public TreeNode invertTree(TreeNode root) { if(root == null){ return root; } TreeNode node = new TreeNode(root.val); node.left = invertTree(root.right); node.right = invertTree(root.left); return node; } }

public class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; }

final Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root);

while(!queue.isEmpty()) { final TreeNode node = queue.poll(); final TreeNode left = node.left; node.left = node.right; node.right = left;

if(node.left != null) { queue.offer(node.left); } if(node.right != null) { queue.offer(node.right); } } return root; } }

Найдите все пермутации букв в строке.

Напишите функцию для реверса строки.

Реализуйте BFS и DFS для обхода дерева, дайте оценку времени исполнения и потребления памяти.

Create a function that takes a string as a parameter. This function will return and integer calculated with the number of occurrence of characters in String used as parameter:

Magic number:

Create a function that takes a string as a parameter. This function will return and integer calculated with the number of occurrence of characters in String used as parameter:

Magic number:

result = number of 'a' * number of 'p' or 'r' or 't' or 'f' + number of 'e' * number of 'n' or 'm' - number of ' ' * number of 'a' + number of 'n' or 'm'

Create a function that takes a string as a parameter. This function will return and integer calculated with the number of occurrence of characters in String used as parameter:

Magic number:

magicNumber("i love java"); // returns -4

result = number of 'a' * number of 'p' or 'r' or 't' or 'f' + number of 'e' * number of 'n' or 'm' - number of ' ' * number of 'a' + number of 'n' or 'm'

Что такое “number of”?

result = number of 'a' * number of 'p' or 'r' or 't' or 'f' + number of 'e' * number of 'n' or 'm' - number of ' ' * number of 'a' + number of 'n' or 'm'

Как это считать?

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

2 4 17 44 71 119 554 661 669 771 818

6 8 19 21 25 41 52 59 111 255 414

7 9 33 37 39 55 57 99 101 241 340

“Найдите самую релевантную

комбинацию для поиска из трёх слов.”

Вопрос: когда поиск остановится?

¯\_( )_/¯

FizzBuzzWrite a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz"

instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".

Вопросы на знание ЯП (Java edition)

Классика жанра

System.out.println(10/3);

equals() и hashCode()

В чём разница между

абстрактным классом и интерфейсом?

Параметры методов в Java передаются

по значению или по ссылке?

class Foo { void boo() { class Bar {} Bar b = new Bar(); System.out.println(b); } }

Компилируется ли это код?Зачем писать такой код?

Во что компилируется такой код?

http://arhipov.blogspot.com.ee/2015/11/finalfinallyfinalize.html

final

finally

finalize

public static int foo() { try { return 0; } finally { return 42; } }

finally

public static int foo() { try { throw new RuntimeException(); } finally { return 42; } }

finally

public static void main(String[] args) { try { throw new NullPointerException("NPE 1"); } catch (NullPointerException e) { throw new NullPointerException("NPE 2"); } finally { return; } }

finally

http://arhipov.blogspot.com.ee/2015/12/another-great-java-interview-question.html

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return INSTANCE; } }

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { synchronized(Singleton.class){ INSTANCE = new Singleton(); } } return INSTANCE; } }

public class Singleton { private static volatile Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { synchronized(Singleton.class){ INSTANCE = new Singleton(); } } return INSTANCE; } }

public class Singleton { private static volatile Singleton INSTANCE = null; private Singleton() {}

public static Singleton getInstance() { if(INSTANCE == null) { synchronized(Singleton.class){ INSTANCE = new Singleton(); } } return INSTANCE; } }

public class Singleton { private static class Holder { private static Singleton INSTANCE = null; }

private Singleton() {}

public static Singleton getInstance() { return Holder.INSTANCE; } }

Горец…

Горец… …и…

Горец… …и… …ещё один горец

Горец… …и… …ещё один горец

Помните о разных загрузчиках, когда

используете синглтоны!

Как сериализовать синглтон?

public enum Singleton { INSTANCE }

PROBLEM?

Что такое volatile и как это работает?

What would you add to Java?

How would you implement it?

Вопросы о JDK

notify() vs notifyAll()

Что такое WeakReference?

Как получить результат вызова хранимой процедуры (БД)?

String proc = "{call proc(?,?)}"; stmt = con.prepareCall(proc); stmt.setInt(1, 10); stmt.registerOutParameter(2, Types.VARCHAR);

stmt.executeUpdate();

String result = stmt.getString(2);

Как получить UTF-8 представление строки?

"Девклуб".getBytes("UTF-8")

Puzzlers

1) Мапы поменяются местами2) Обе мапы будут иметь содержание как в м23) Обе мапы будут иметь содержание как в м14) Этот код не компилируется!

Map<String, String> m1 = stringsMap(); // {a=aaaaa, b=bbbbb}

Map<String, String> m2 = numbersMap(); // {a=11111, b=22222}

m2.replaceAll(m1::put);

System.out.println(m1); System.out.println(m2);

Java 8 Puzzlers: The Strange, the Bizarre, and the Wonderful

Map<String, String> m1 = stringsMap(); // {a=aaaaa, b=bbbbb}

Map<String, String> m2 = numbersMap(); // {a=11111, b=22222}

m2.replaceAll(m1::put);

System.out.println(m1); // {a=11111, b=22222} System.out.println(m2); // {a=aaaaa, b=bbbbb}

1) Мапы поменяются местами2) Обе мапы будут иметь содержание как в м23) Обе мапы будут иметь содержание как в м14) Этот код не компилируется!

Java 8 Puzzlers: The Strange, the Bizarre, and the Wonderful

Вопросы на знание

фреймворков

Вопросы о дизайне

(System design questions)

Как реализовать сокращатель ссылок?

А теперь всё вместе!

Примеры неадекватаАлгоритмы - если работа заключается чтоб взять данные из формочки и положить в БД

Вопросы про глубинные познания JVM, если мы интервьюируем прикладного программиста

Вопросы о многопоточном программировании, если мы знаем, что на работе это никогда не понадобится

“Пазлеры" - если мы всегда ожидаем правильный ответ

Вполне адекватно спрашивать

Алгоритмы, если мы ищем кодера алгоритмов

Вопросы про глубинные познания JVM, если мы собеседуем JVM-разработчика

Вопросы о многопоточном программировании, если работа подразумевает разработки многопоточных приложений

Базовые вопросы на знание языка в зависимости от готовности кандидата

Вопросы о дизайне решений

Вопросы о том какие проекты и как человек делал

Вполне адекватно спрашивать