Devclub 01/2017 - (Не)адекватное Java-интервью
-
Upload
anton-arhipov -
Category
Presentations & Public Speaking
-
view
367 -
download
1
Transcript of Devclub 01/2017 - (Не)адекватное 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)
Какие вопросы бывают?
Вопросы о дизайне (как бы ты сделал…)
Общие вопросы по программированию
Вопросы о предыдущем опыте
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".
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 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; } }
Как получить результат вызова хранимой процедуры (БД)?
String proc = "{call proc(?,?)}"; stmt = con.prepareCall(proc); stmt.setInt(1, 10); stmt.registerOutParameter(2, Types.VARCHAR);
stmt.executeUpdate();
String result = stmt.getString(2);
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
Примеры неадекватаАлгоритмы - если работа заключается чтоб взять данные из формочки и положить в БД
Вопросы про глубинные познания JVM, если мы интервьюируем прикладного программиста
Вопросы о многопоточном программировании, если мы знаем, что на работе это никогда не понадобится
“Пазлеры" - если мы всегда ожидаем правильный ответ
Вполне адекватно спрашивать
Алгоритмы, если мы ищем кодера алгоритмов
Вопросы про глубинные познания JVM, если мы собеседуем JVM-разработчика
Вопросы о многопоточном программировании, если работа подразумевает разработки многопоточных приложений