SlideShare uma empresa Scribd logo
1 de 109
Baixar para ler offline
(Не)адекватное
техническое интервью
@antonarhipov
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
Приходит к нам, значит, Ерлангист.
А мы ему кусок кода на С++, "где-то
тут критический баг, поправь. Два
часа тебе на изучение 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 )
Какие вопросы бывают?
Алгоритмические задачки
Вопросы на знание ЯП ( Java )
Вопросы на знание стандартной библиотеки ( JDK )
Какие вопросы бывают?
Алгоритмические задачки
Вопросы на знание ЯП ( Java )
Вопросы на знание стандартной библиотеки ( JDK )
Вопросы на знание фреймворков ( Spring )
Какие вопросы бывают?
Алгоритмические задачки
Вопросы на знание ЯП ( Java )
Вопросы на знание стандартной библиотеки ( JDK )
Вопросы на знание фреймворков ( Spring )
Какие вопросы бывают?
Какие вопросы бывают?
Вопросы о дизайне ( как бы ты сделал… )
Какие вопросы бывают?
Вопросы о дизайне ( как бы ты сделал… )
Общие вопросы по программированию
Какие вопросы бывают?
Вопросы о дизайне ( как бы ты сделал… )
Общие вопросы по программированию
Вопросы о предыдущем опыте
This slide is intentionally left blank
Инверсия бинарного дерева
Инверсия бинарного дерева
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 для обхода дерева,
дайте оценку времени исполнения и
потребления памяти
…
Найдите общего предка для двух вершин
в бинарном дереве
Напишите функцию для реверса строки
Реализуйте BFS и DFS для обхода дерева,
дайте оценку времени исполнения и
потребления памяти
…
Что мы пытаемся понять
задавая такие вопросы?
Create a function that takes a string as a parameter.
This function will return an 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 an 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 an 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'
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”?
Как это считать??
А так и
задумано!
Сначала подумай
Сначала подумай
Подумай ещё!
Сначала подумай
Подумай ещё!
Спроси!
Сначала подумай
Подумай ещё!
Спроси!
Переспроси! Может
быть уже не надо
делать
“Найдите самую релевантную
комбинацию для поиска из трёх слов.”
“Найдите самую релевантную
комбинацию для поиска из трёх слов.”
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
Вопрос: когда поиск остановится?
“Найдите самую релевантную
комбинацию для поиска из трёх слов.”
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
“Найдите самую релевантную
комбинацию для поиска из трёх слов.”
Вопрос: когда поиск остановится?
Кто должен спросить
этот вопрос?
¯_(ツ)_/¯
https://youtu.be/XKu_SEDAykw
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);
}
}
class Foo {
void boo() {
class Bar {}
Bar b = new Bar();
System.out.println(b);
}
}
Компилируется ли это код?
class Foo {
void boo() {
class Bar {}
Bar b = new Bar();
System.out.println(b);
}
}
Компилируется ли это код?
Зачем писать такой код?
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
Singleton
- instance
- Singleton
+ getInstance(): Singleton
0..1
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 volatile
Singleton INSTANCE = null;
private Singleton() {}
public static Singleton getInstance() {
if(INSTANCE == null) {
synchronized(Singleton.class){
INSTANCE = new Singleton();
}
}
return INSTANCE;
}
}
Горец…
Горец… …и…
Горец… …и… …ещё один горец
Горец… …и… …ещё один горец
Помните о разных
загрузчиках, когда
используете синглтоны!
Как сериализовать синглтон?
Зачем?!
public enum Singleton {
INSTANCE
}
This slide is intentionally left blank
“What would you add to Java? “
“What would you add to Java? “
“How would you implement it?”
Вопросы о JDK
Что такое 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);
Как получить результат вызова
хранимой процедуры (БД)?
String proc = "{call proc(?,?)}";
stmt = con.prepareCall(proc);
stmt.setInt(1, 10);
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.executeUpdate();
String result = stmt.getString(2);
Puzzlers
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
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
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}
Java 8 Puzzlers: The Strange, the Bizarre, and the Wonderful
1) Мапы поменяются местами
2) Обе мапы будут иметь содержание как в м2
3) Обе мапы будут иметь содержание как в м1
4) Этот код не компилируется!
Вопросы о дизайне
(System design questions)
Как реализовать
сокращатель ссылок?
А теперь всё вместе!
Никакие результаты интервью,
тестовых заданий, энциклопедические знания
не показывают,
Никакие результаты интервью,
тестовых заданий, энциклопедические знания
не показывают,
КАК ЭТОТ ЧЕЛОВЕК БУДЕТ РАБОТАТЬ
TechTrain 2019 - (Не)адекватное техническое интервью

Mais conteúdo relacionado

Semelhante a TechTrain 2019 - (Не)адекватное техническое интервью

Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
Elena Kotina
 
sphinx Hlpp2008
sphinx Hlpp2008sphinx Hlpp2008
sphinx Hlpp2008
Ontico
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
DneprCiklumEvents
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
DneprCiklumEvents
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest
 

Semelhante a TechTrain 2019 - (Не)адекватное техническое интервью (20)

Яндекс Малый ШАД - лингвистика в поиске
Яндекс  Малый ШАД - лингвистика в поискеЯндекс  Малый ШАД - лингвистика в поиске
Яндекс Малый ШАД - лингвистика в поиске
 
Статический анализ и регулярные выражения
Статический анализ и регулярные выраженияСтатический анализ и регулярные выражения
Статический анализ и регулярные выражения
 
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor ShepelevA tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
 
Why02
Why02Why02
Why02
 
Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"
 
sphinx Hlpp2008
sphinx Hlpp2008sphinx Hlpp2008
sphinx Hlpp2008
 
Программирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмовПрограммирование разветвляющихся алгоритмов
Программирование разветвляющихся алгоритмов
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
веселов
веселоввеселов
веселов
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидахCodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
 
Андрей Субботин "Автоматизация локализации iOS-приложений"
Андрей Субботин "Автоматизация локализации iOS-приложений"Андрей Субботин "Автоматизация локализации iOS-приложений"
Андрей Субботин "Автоматизация локализации iOS-приложений"
 
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—ШпильманаЗадача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
Задача о ближайшем кодовом слове. Коды Галлагера—Сипсера—Шпильмана
 
Basis.js - Production Ready Framework
Basis.js - Production Ready FrameworkBasis.js - Production Ready Framework
Basis.js - Production Ready Framework
 

Mais de Anton Arhipov

JavaZone 2022 - Building Kotlin DSL.pdf
JavaZone 2022 - Building Kotlin DSL.pdfJavaZone 2022 - Building Kotlin DSL.pdf
JavaZone 2022 - Building Kotlin DSL.pdf
Anton Arhipov
 
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloadingRiga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Anton Arhipov
 

Mais de Anton Arhipov (20)

JavaZone 2022 - Building Kotlin DSL.pdf
JavaZone 2022 - Building Kotlin DSL.pdfJavaZone 2022 - Building Kotlin DSL.pdf
JavaZone 2022 - Building Kotlin DSL.pdf
 
Idiomatic kotlin
Idiomatic kotlinIdiomatic kotlin
Idiomatic kotlin
 
Build pipelines with TeamCity
Build pipelines with TeamCityBuild pipelines with TeamCity
Build pipelines with TeamCity
 
Build pipelines with TeamCity
Build pipelines with TeamCityBuild pipelines with TeamCity
Build pipelines with TeamCity
 
Devoxx Ukraine 2018 - Kotlin DSL in under an hour
Devoxx Ukraine 2018 - Kotlin DSL in under an hourDevoxx Ukraine 2018 - Kotlin DSL in under an hour
Devoxx Ukraine 2018 - Kotlin DSL in under an hour
 
GeeCON Prague 2018 - Kotlin DSL in under an hour
GeeCON Prague 2018 - Kotlin DSL in under an hourGeeCON Prague 2018 - Kotlin DSL in under an hour
GeeCON Prague 2018 - Kotlin DSL in under an hour
 
Build pipelines with TeamCity and Kotlin DSL
Build pipelines with TeamCity and Kotlin DSLBuild pipelines with TeamCity and Kotlin DSL
Build pipelines with TeamCity and Kotlin DSL
 
Build pipelines with TeamCity
Build pipelines with TeamCityBuild pipelines with TeamCity
Build pipelines with TeamCity
 
JavaDay Kiev 2017 - Integration testing with TestContainers
JavaDay Kiev 2017 - Integration testing with TestContainersJavaDay Kiev 2017 - Integration testing with TestContainers
JavaDay Kiev 2017 - Integration testing with TestContainers
 
GeeCON Prague 2017 - TestContainers
GeeCON Prague 2017 - TestContainersGeeCON Prague 2017 - TestContainers
GeeCON Prague 2017 - TestContainers
 
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloadingJavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
 
JavaOne 2017 - TestContainers: integration testing without the hassle
JavaOne 2017 - TestContainers: integration testing without the hassleJavaOne 2017 - TestContainers: integration testing without the hassle
JavaOne 2017 - TestContainers: integration testing without the hassle
 
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloadingJavaOne 2017 - The hitchhiker’s guide to Java class reloading
JavaOne 2017 - The hitchhiker’s guide to Java class reloading
 
JavaZone 2017 - The Hitchhiker’s guide to Java class reloading
JavaZone 2017 - The Hitchhiker’s guide to Java class reloadingJavaZone 2017 - The Hitchhiker’s guide to Java class reloading
JavaZone 2017 - The Hitchhiker’s guide to Java class reloading
 
JUG.ua 20170225 - Java bytecode instrumentation
JUG.ua 20170225 - Java bytecode instrumentationJUG.ua 20170225 - Java bytecode instrumentation
JUG.ua 20170225 - Java bytecode instrumentation
 
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloadingRiga DevDays 2017 - The hitchhiker’s guide to Java class reloading
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloading
 
GeeCON 2017 - TestContainers. Integration testing without the hassle
GeeCON 2017 - TestContainers. Integration testing without the hassleGeeCON 2017 - TestContainers. Integration testing without the hassle
GeeCON 2017 - TestContainers. Integration testing without the hassle
 
JEEConf 2017 - The hitchhiker’s guide to Java class reloading
JEEConf 2017 - The hitchhiker’s guide to Java class reloadingJEEConf 2017 - The hitchhiker’s guide to Java class reloading
JEEConf 2017 - The hitchhiker’s guide to Java class reloading
 
JEEConf 2017 - Having fun with Javassist
JEEConf 2017 - Having fun with JavassistJEEConf 2017 - Having fun with Javassist
JEEConf 2017 - Having fun with Javassist
 
Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101
 

TechTrain 2019 - (Не)адекватное техническое интервью

  • 2.
  • 3. 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
  • 4. Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM". https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story
  • 5. https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM". На самом деле, у нас в проектах ramp-up даже крутейших инженеров занимает от 3 месяцев. [….] Никто в своём уме не будет думать, что чувак сможет правильно что-то починить, если он не знает кодобазы, прошлого опыта, и проч.
  • 6. https://www.facebook.com/aleksey.shipilev/posts/10154469128968049?pnref=story Приходит к нам, значит, Ерлангист. А мы ему кусок кода на С++, "где-то тут критический баг, поправь. Два часа тебе на изучение JVM". На самом деле, у нас в проектах ramp-up даже крутейших инженеров занимает от 3 месяцев. [….] Никто в своём уме не будет думать, что чувак сможет правильно что-то починить, если он не знает кодобазы, прошлого опыта, и проч.
  • 8. 5 минутСвоё мнение о кандидате вы составляете за первые 5 минут общения. Остальное время вы используете лишь для того, чтобы убедиться, или разубедиться, в своём мнении.
  • 11. Какие вопросы бывают? Алгоритмические задачки Вопросы на знание ЯП ( Java )
  • 12. Какие вопросы бывают? Алгоритмические задачки Вопросы на знание ЯП ( Java ) Вопросы на знание стандартной библиотеки ( JDK )
  • 13. Какие вопросы бывают? Алгоритмические задачки Вопросы на знание ЯП ( Java ) Вопросы на знание стандартной библиотеки ( JDK ) Вопросы на знание фреймворков ( Spring )
  • 14. Какие вопросы бывают? Алгоритмические задачки Вопросы на знание ЯП ( Java ) Вопросы на знание стандартной библиотеки ( JDK ) Вопросы на знание фреймворков ( Spring )
  • 16. Какие вопросы бывают? Вопросы о дизайне ( как бы ты сделал… )
  • 17. Какие вопросы бывают? Вопросы о дизайне ( как бы ты сделал… ) Общие вопросы по программированию
  • 18. Какие вопросы бывают? Вопросы о дизайне ( как бы ты сделал… ) Общие вопросы по программированию Вопросы о предыдущем опыте
  • 19. This slide is intentionally left blank
  • 24. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
  • 25. 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; } }
  • 26. 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; } }
  • 27. 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; } }
  • 28. Напишите функцию для реверса строки
  • 29. Найдите общего предка для двух вершин в бинарном дереве Напишите функцию для реверса строки
  • 30. Найдите общего предка для двух вершин в бинарном дереве Напишите функцию для реверса строки Реализуйте BFS и DFS для обхода дерева, дайте оценку времени исполнения и потребления памяти …
  • 31. Найдите общего предка для двух вершин в бинарном дереве Напишите функцию для реверса строки Реализуйте BFS и DFS для обхода дерева, дайте оценку времени исполнения и потребления памяти … Что мы пытаемся понять задавая такие вопросы?
  • 32. Create a function that takes a string as a parameter. This function will return an integer calculated with the number of occurrence of characters in String used as parameter: Magic number:
  • 33. Create a function that takes a string as a parameter. This function will return an 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'
  • 34. Create a function that takes a string as a parameter. This function will return an 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'
  • 35. 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”? Как это считать??
  • 37.
  • 42.
  • 43. “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 44. “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 45. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 46. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 47. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 48. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 49. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 50. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 51. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 52. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 53. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 54. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 55. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 56. 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 Вопрос: когда поиск остановится? “Найдите самую релевантную комбинацию для поиска из трёх слов.”
  • 57. 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 “Найдите самую релевантную комбинацию для поиска из трёх слов.” Вопрос: когда поиск остановится? Кто должен спросить этот вопрос?
  • 60. 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".
  • 61. Вопросы на знание ЯП (Java edition) Классика жанра
  • 64. В чём разница между абстрактным классом и интерфейсом?
  • 65. Параметры методов в Java передаются по значению или по ссылке?
  • 66. class Foo { void boo() { class Bar {} Bar b = new Bar(); System.out.println(b); } }
  • 67. class Foo { void boo() { class Bar {} Bar b = new Bar(); System.out.println(b); } } Компилируется ли это код?
  • 68. class Foo { void boo() { class Bar {} Bar b = new Bar(); System.out.println(b); } } Компилируется ли это код? Зачем писать такой код?
  • 69. class Foo { void boo() { class Bar {} Bar b = new Bar(); System.out.println(b); } } Компилируется ли это код? Зачем писать такой код? Во что компилируется такой код?
  • 71. public static int foo() { try { return 0; } finally { return 42; } } finally
  • 72. public static int foo() { try { throw new RuntimeException(); } finally { return 42; } } finally
  • 73. public static void main(String[] args) { try { throw new NullPointerException("NPE 1"); } catch (NullPointerException e) { throw new NullPointerException("NPE 2"); } finally { return; } } finally
  • 74. Singleton - instance - Singleton + getInstance(): Singleton 0..1
  • 75. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  • 76. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  • 77. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  • 78. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return instance; } }
  • 79. public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} public static Singleton getInstance() { if(INSTANCE == null) { INSTANCE = new Singleton(); } return INSTANCE; } }
  • 80. 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; } }
  • 81. 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; } }
  • 82. 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; } }
  • 83. 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; } }
  • 86. Горец… …и… …ещё один горец
  • 87. Горец… …и… …ещё один горец Помните о разных загрузчиках, когда используете синглтоны!
  • 90. public enum Singleton { INSTANCE }
  • 91. This slide is intentionally left blank
  • 92. “What would you add to Java? “
  • 93. “What would you add to Java? “ “How would you implement it?”
  • 96. Как получить результат вызова хранимой процедуры (БД)?
  • 97. Как получить результат вызова хранимой процедуры (БД)? String proc = "{call proc(?,?)}"; stmt = con.prepareCall(proc); stmt.setInt(1, 10); stmt.registerOutParameter(2, Types.VARCHAR); stmt.executeUpdate(); String result = stmt.getString(2);
  • 98. Как получить результат вызова хранимой процедуры (БД)? String proc = "{call proc(?,?)}"; stmt = con.prepareCall(proc); stmt.setInt(1, 10); stmt.registerOutParameter(2, Types.VARCHAR); stmt.executeUpdate(); String result = stmt.getString(2);
  • 100. 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
  • 101. 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
  • 102. 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} Java 8 Puzzlers: The Strange, the Bizarre, and the Wonderful 1) Мапы поменяются местами 2) Обе мапы будут иметь содержание как в м2 3) Обе мапы будут иметь содержание как в м1 4) Этот код не компилируется!
  • 105. А теперь всё вместе!
  • 106.
  • 107. Никакие результаты интервью, тестовых заданий, энциклопедические знания не показывают,
  • 108. Никакие результаты интервью, тестовых заданий, энциклопедические знания не показывают, КАК ЭТОТ ЧЕЛОВЕК БУДЕТ РАБОТАТЬ