Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

n/a

  • Inicia sesión para ver los comentarios

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

  1. 1. (Не)адекватное (Java)-интервью
  2. 2. 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
  3. 3. https://www.facebook.com/aleksandr.jastremski/ posts/1859123867664822?pnref=story Проверяется твое умение оперировать названиями абстрактных алгоритмов, знание всех видов сортировки и отличия их от кошки Шрёдингера.
  4. 4. https://www.facebook.com/aleksandr.jastremski/ posts/1859123867664822?pnref=story Проверяется твое умение оперировать названиями абстрактных алгоритмов, знание всех видов сортировки и отличия их от кошки Шрёдингера. Вам вообще нужно что-бы этот человек пришел и начал делать "Работу"? Или у вас конкурс на самого пафосного чувака?
  5. 5. Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM". https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story
  6. 6. https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM". На самом деле, у нас в проектах ramp-up даже крутейших инженеров занимает от 3 месяцев. [….] Никто в своём уме не будет думать, что чувак сможет правильно что-то починить, если он не знает кодобазы, прошлого опыта, и проч.
  7. 7. https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM". На самом деле, у нас в проектах ramp-up даже крутейших инженеров занимает от 3 месяцев. [….] Никто в своём уме не будет думать, что чувак сможет правильно что-то починить, если он не знает кодобазы, прошлого опыта, и проч.
  8. 8. Кого собеседуем? И зачем?
  9. 9. 5 минутСвоё мнение о кандидате вы составляете за первые 5 минут общения. Остальное время вы используете лишь для того, чтобы убедиться, или разубедиться, в своём мнении.
  10. 10. Какие вопросы бывают? Алгоритмические задачки Вопросы на знание ЯП (Java) Вопросы на знание стандартной библиотеки (JDK) Вопросы на знание фреймворков (Spring)
  11. 11. Какие вопросы бывают? Вопросы о дизайне (как бы ты сделал…) Общие вопросы по программированию Вопросы о предыдущем опыте
  12. 12. Инверсия бинарного дерева 4 72 9631
  13. 13. 4 72 9631 4 27 1369 Инверсия бинарного дерева
  14. 14. leetcode.com
  15. 15. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
  16. 16. 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; } }
  17. 17. 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; } }
  18. 18. 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; } }
  19. 19. Найдите все пермутации букв в строке. Напишите функцию для реверса строки. Реализуйте BFS и DFS для обхода дерева, дайте оценку времени исполнения и потребления памяти. …
  20. 20. 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:
  21. 21. 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'
  22. 22. 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'
  23. 23. Что такое “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' Как это считать?
  24. 24. “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  25. 25. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  26. 26. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  27. 27. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  28. 28. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  29. 29. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  30. 30. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  31. 31. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  32. 32. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  33. 33. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  34. 34. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  35. 35. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  36. 36. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.” Вопрос: когда поиск остановится?
  37. 37. ¯_( )_/¯
  38. 38. 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".
  39. 39. Вопросы на знание ЯП (Java edition) Классика жанра
  40. 40. System.out.println(10/3);
  41. 41. equals() и hashCode()
  42. 42. В чём разница между абстрактным классом и интерфейсом?
  43. 43. Параметры методов в Java передаются по значению или по ссылке?
  44. 44. class Foo { void boo() { class Bar {} Bar b = new Bar(); System.out.println(b); } } Компилируется ли это код? Зачем писать такой код? Во что компилируется такой код?
  45. 45. http://arhipov.blogspot.com.ee/2015/11/finalfinallyfinalize.html final finally finalize
  46. 46. public static int foo() { try { return 0; } finally { return 42; } } finally
  47. 47. public static int foo() { try { throw new RuntimeException(); } finally { return 42; } } finally
  48. 48. public static void main(String[] args) { try { throw new NullPointerException("NPE 1"); } catch (NullPointerException e) { throw new NullPointerException("NPE 2"); } finally { return; } } finally
  49. 49. http://arhipov.blogspot.com.ee/2015/12/another-great-java-interview-question.html
  50. 50. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  51. 51. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  52. 52. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  53. 53. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  54. 54. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return INSTANCE; } }
  55. 55. 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; } }
  56. 56. 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; } }
  57. 57. 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; } }
  58. 58. public class Singleton { private static class Holder { private static Singleton INSTANCE = null; } private Singleton() {} public static Singleton getInstance() { return Holder.INSTANCE; } }
  59. 59. Горец…
  60. 60. Горец… …и…
  61. 61. Горец… …и… …ещё один горец
  62. 62. Горец… …и… …ещё один горец Помните о разных загрузчиках, когда используете синглтоны!
  63. 63. Как сериализовать синглтон?
  64. 64. public enum Singleton { INSTANCE } PROBLEM?
  65. 65. Что такое volatile и как это работает?
  66. 66. What would you add to Java? How would you implement it?
  67. 67. Вопросы о JDK
  68. 68. notify() vs notifyAll()
  69. 69. Что такое WeakReference?
  70. 70. Как получить результат вызова хранимой процедуры (БД)? String proc = "{call proc(?,?)}"; stmt = con.prepareCall(proc); stmt.setInt(1, 10); stmt.registerOutParameter(2, Types.VARCHAR); stmt.executeUpdate(); String result = stmt.getString(2);
  71. 71. Как получить UTF-8 представление строки? "Девклуб".getBytes("UTF-8")
  72. 72. Puzzlers
  73. 73. 1) Мапы поменяются местами 2) Обе мапы будут иметь содержание как в м2 3) Обе мапы будут иметь содержание как в м1 4) Этот код не компилируется! 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
  74. 74. 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) Обе мапы будут иметь содержание как в м2 3) Обе мапы будут иметь содержание как в м1 4) Этот код не компилируется! Java 8 Puzzlers: The Strange, the Bizarre, and the Wonderful
  75. 75. Вопросы на знание фреймворков
  76. 76. Вопросы о дизайне (System design questions)
  77. 77. Как реализовать сокращатель ссылок?
  78. 78. А теперь всё вместе!
  79. 79. Примеры неадеквата Алгоритмы - если работа заключается чтоб взять данные из формочки и положить в БД Вопросы про глубинные познания JVM, если мы интервьюируем прикладного программиста Вопросы о многопоточном программировании, если мы знаем, что на работе это никогда не понадобится “Пазлеры" - если мы всегда ожидаем правильный ответ
  80. 80. Вполне адекватно спрашивать Алгоритмы, если мы ищем кодера алгоритмов Вопросы про глубинные познания JVM, если мы собеседуем JVM-разработчика Вопросы о многопоточном программировании, если работа подразумевает разработки многопоточных приложений
  81. 81. Базовые вопросы на знание языка в зависимости от готовности кандидата Вопросы о дизайне решений Вопросы о том какие проекты и как человек делал Вполне адекватно спрашивать

×