Презентация делалась для JuJa конференции - Java конференции для (пре) Juniors: https://juja.com.ua/materials/jujacon-2017/
В ней
- описываются основные темы-вопросы, которые часто спрашивают на собеседовании на позицию Junior Java Developer;
- советы, что спросить собеседующего;
- как себя позиционировать, как относиться к собеседованию, как не бояться и как понять, что вам "туда".
1. Write 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”.
2. Что это было?
The "Fizz-Buzz test" is an interview question designed
to help filter out the 99.5% of programming job
candidates who can't seem to program their way out
of a wet paper bag.
http://wiki.c2.com/?FizzBuzzTest
Нынче даже есть тюториалы на эту задачу, как на
HelloWorld!
Video: How to write FizzBuzz in Ruby, with Test-
Driven Development - http://youtu.be/CHTep2zQVAc
3. Что надо заметить по
условию задачи?
• А какая разница, до 100 или до 1000? Ведь число
100 это всего лишь символ! Что изменится, если
будем выводить от 0 до 16; от -50 до 50?
• Деление и на 3 и на 5 это отдельный случай или
он вообще не нужен?
6. Задачи на час
посмотреть основное, что спрашивают Java
разработчиков на собеседованиях
как себя позиционировать в этот ответственный
момент
какие вопросы задать собеседующему?
а также, что отвечать американскому
таможеннику ;)
7. Какие мысли вас побуждают
прийти на собеседование?
Устроиться на работу (ходил бы я на «экзамены»
иначе?)
Проверить свои знания, и понять «на что я
гожусь»
Посмотреть, что нынче на рынке в цене и куда мне
надо двигаться.
9. Тренды
• Java, C# как обычно :)
• JavaScript, Python, Scala, NodeJS, ReactJS
• БД реляционные и нет нужны всем и всегда.
• Cloud, Security, DevOps
10. Что не в моде
• PHP, Perl, Assembler, Flex, Flash
• manual QA
11. Как надо учить?
После прочтения любой информации вы должны
знать ответы на следующие вопросы:
О чем я узнал
Зачем это используется
Принцип работы (желательно попробовать)
Плюсы-минусы
12. Достаточно ли так учить?
Нет, поскольку такие знания дают лишь общее
понимание и возможность подумать над
специфичным вопросом. (Подумать над вопросом и
предположить что-то это разное. Чтоб думать, надо
иметь материал для размышления.)
Еще надо иметь свой конек.
13. Инструкция действий перед
собеседованием
1. Сядьте/встаньте широко, чтоб занять
собой побольше места, ощутите силу в
себе. Fake it ill you make it ->
Тестостерон (могущество, власть)
повысится, кортизол (боязнь) понизится.
2. Почувствуйте желание и интерес пройти
собеседование, ведь вас хотят увидеть, услышать,
узнать! И вы захотите!
16. Зачем нужна JVM?
Зачем: дает возможность выполнять
одинаковый код на любом устройстве, где
установлена. "Write once, run debug everywhere"
Принцип работы: перевести писанину дева в
байт код (свой язык) и читать его где угодно.
Плюсы/минусы:
+ универсальность
- надо устанавливать дополнительно
- могла бы быть быстрее
17. Разница между Java и C#
• C# официально работает только для Windows, а
Java для всех ОС
• С# как язык более развитый, а Java требуются
библиотеки для достижения аналогичного
синтаксиса языка
• Для Java есть много больше фреймворков и
развитая community.
18. ArrayList vs LinkedList
В 90% случаев используйте ArrayList.
LinkedList удобен только для вставки/удаления из
середины массива.
20. Exceptions
• Проверяемые - которые можно предсказать и
обработать их появление блоком try-catch или
явно пробрасывать более общим методам
(FileNotFoundException)
• Непроверяемые - могут «случайно» случится во
время выполнения программы
(NullPointerException)
23. Деревья
Зачем: дает возможность разделить данные,
чтоб их легче было найти
Плюсы/минусы:
+ ускоряет поиск
- любой дополнительный алгоритм добавляет
сложность
25. Сложность алгоритмов О()
• 1 (const) - обращение к элементу массива,
вставка в HashTable
• n - проход по массиву или обращение к элементу
LinkedList()
• log(n) - древовидная структура (бинарный поиск)
• n^2 - вложенный цикл (пузырьковая сортировка)
• n^e - поиск оптимального пути на графе
26. Пример задачи
Написать и определить сложность алгоритма
записи слова задом наперед используя цикл.
27. Его величество Spring
Зачем: DI - Dependency Injection: объекты обритают
значения, заданные из-вне. Позволяет в зависимости от
настроек подставлять разные значения в те же классы.
Принцип работы: Используя конструкторы, геттеры и
сеттеры внедряются значения в классы.
Плюсы/минусы:
+ дает возможность конфигурировать проект по сути не
влазя в его код, что удобно хотябы для разработки и
тестирования с разными настройками
+/- дает возможность на лету менять реализацию даже
стандрартных методов. В итоге не всегда очевидна логика.
- работает через рефлекшин, что замедляет работу
28. REST
Зачем: Передача запрос-ответ информации и
статуса выполнения
Принцип работы: использует т.н. глаголы
GET, POST, PUT и DELETE для передачи
действия над сопровождающей информацией.
Плюсы/минусы:
+ легкий, быстрый, не нуждается в некой
структуре передаваемого сообщения
- для общения только между двумя точками
29. SOAP
Зачем: Передача запрос-ответ информации и статуса
выполнения
Принцип работы: использует XML - строго
типизированный шаблон для передачи иформации.
Плюсы/минусы:
+ стандартизирован, предусматривает разные варианты
+ позволяет общатся более чем двум точкам
+ в случае ошибки сам информирует, как ее исправить
- не все любят работать с XML, может вылиться в
тяжелую логику только понимания ответа и написания
запроса.
30. SQL
Зачем: хранит данные
Принцип работы: имеет структуру таблиц, с
заданными ограничениями (триггерами) и позволяет
хранить процедуры обработки данных.
Плюсы/минусы:
+ удобна для хранения консистентной информации,
особенно если пользоваться нормальными
формами.
- тратится много места бессмысленно, если
информация «блуждающаяя» (не всегда есть)
31. NoSQL
Зачем: хранит данные
Принцип работы: в файлах хранится только
значимая информация.
Плюсы/минусы:
+ удобна для хранения большого количества
информации, при том, что записываются
только непустые значения, для BigData
- менее легко начать пользоваться, еще не
достаточно развит.
32. ORM (Hibernate)
Зачем: Репрезентирует структуру БД в коде
программы, дает возможность писать запросы
не через SQL а через общий интерфейс для
разных баз, создавать базу по структуре.
33. Maven
Зачем и Принцип работы: с помощью файла
pom.xml по прописанным библиотекам и структуре
проекта, мавеном может загружать бибилиотеки,
собирать проект учитывая заданные настройки,
генерировать документацию, запускать тесты…
Плюсы/минусы:
+ мавен операции дают возможность не прописывать
конкретики запустить билд, как необходимо в Ant
- не учитывает разницу между прошлой и текущей
сборкой, не имеет механизма подгрузки из кэша
сделанных задач, возможно, с других компьютеров,
как Gradle.
34. Должна быть гордость,
нет скромности
1. Гордость за свои достижения,
ну и достижения тоже (GitHub)
2. За скромность потом бывает
мучительно обидно,
жалко и стыдно перед
собой же. А ведь мог же
похвастаться!
36. Что собеседующего интересует
(по пирамиде Маслоу)?
1. Зарплата - не очень, не всегда (физический уровень)
2. Проблемы на вашей текущей работе (плохой начальник,
неприятный коллектив) - неа.
3. Кто вы такой, к какой соц группе принадлежите? - пожалуй,
да. Ведь он ищет человека в команду, все должно сростись!
4. В идеале ему интересно, чтоб вы подошли работе, чтоб вам
ее было в меру интересно делать и чтоб он не переживал,
что может вас потерять в любой момент.
5. Тот ли вы человек, который поможет заказчику Get Things
Done и проект состоялся?
38. Не как индус-паттерн
Пытайтесь понять, к чему ведет собеседующий,
задавая свой вопрос. Если вы догадались и сами
расскажете ответы на его будущее вопросы -
вы выиграли битву!
39. Зачем знать, о чем проект, если вы
заранее согласны на любой или что
спросить собеседующего?
1. Как будет выглядеть моя каждодневная работа?
2. Как производится слежка за качеством кода, пишутся ли
тесты, есть ли CI, какие метрики?
3. Как ищутся/находятся баги? Сколько их? Какой процесс
фикса?
4. Какими фреймворками пользуетесь? Сколько времени
занимает настройка среды разработки?
5. Какие у вас сроки? Is your hair always on fire?
6. Ходите ли вы на team-buildings?
40. Что собеседующему нравится о его
работе?
Хороший ответ
• Приятно делать мою работу
• Нам на работе весело
• Мои коллеги умные, интересные и дружелюбные
• Менеджмент уважает инженеров
Слабый ответ
Надо платить по счетам. Работа не пыльная. Сильно никто не
ругает. Особо нет напряга. Молчание.
41. Общие советы
• Читайте новости, будет прекрасно, если вы
расскажете собеседующему что-то «из
последнего».
• Покажите, что вы разнопланово развиты, ведь
чем больше у вас способностей, тем полезнее вы
можете быть. Но уделять достойное место
профессии все равно надо.
43. Что вы ожидали, когда шли
на доклад?
Что я вас научу ответам на вопросы, которые
задают на собеседовании?
Что я хотя бы дам знания, какую информацию
нужно готовить?
Что я научу себя правильно вести?
44. Что вы получили от доклада?
(10 сек надо подумать)
Руководство к действиям:
• Создать аккаунт на GitHub и что-то новое
выучить, усовершенствовать имеющиеся.
• Найти перед кем и показать себя и свои знания,
быть оценённым, когда наступит момент
готовности.
• Желание быть достойным самого лучшего.
45. Полезные ссылки
• Соберись, «тряпка»: https://www.ted.com/playlists/352/
talks_to_watch_before_a_job_in
• Вопросы собеседующему: https://
medium.freecodecamp.com/how-to-interview-as-a-
developer-candidate-b666734f12dd
• Выбор между REST и SOAP https://blog.smartbear.com/
apis/understanding-soap-and-rest-basics/
• Коллекции: https://habrahabr.ru/post/162017/
• Ну и читайте документацию ;)
46. Как меня найти
• Twitter: @LadyInIT
• LinkedIn, Facebook: Olexandra Dmytrenko