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”.
Что это было? 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
Что надо заметить по условию задачи? • А какая разница, до 100 или до 1000? Ведь число 100 это всего лишь символ! Что изменится, если будем выводить от 0 до 16; от -50 до 50? • Деление и на 3 и на 5 это отдельный случай или он вообще не нужен?
Собеседование на позицию Java Developer Александра Дмитренко
Цель Пройти собеседование, понять свои ошибки и как правильно себя вести
Задачи на час посмотреть основное, что спрашивают Java разработчиков на собеседованиях как себя позиционировать в этот ответственный момент какие вопросы задать собеседующему? а также, что отвечать американскому таможеннику ;)
Какие мысли вас побуждают прийти на собеседование? Устроиться на работу (ходил бы я на «экзамены» иначе?) Проверить свои знания, и понять «на что я гожусь» Посмотреть, что нынче на рынке в цене и куда мне надо двигаться.
Первое Подготовим себя к собеседованию
Тренды • Java, C# как обычно :) • JavaScript, Python, Scala, NodeJS, ReactJS • БД реляционные и нет нужны всем и всегда. • Cloud, Security, DevOps
Что не в моде • PHP, Perl, Assembler, Flex, Flash • manual QA
Как надо учить? После прочтения любой информации вы должны знать ответы на следующие вопросы: О чем я узнал Зачем это используется Принцип работы (желательно попробовать) Плюсы-минусы
Достаточно ли так учить? Нет, поскольку такие знания дают лишь общее понимание и возможность подумать над специфичным вопросом. (Подумать над вопросом и предположить что-то это разное. Чтоб думать, надо иметь материал для размышления.) 
 Еще надо иметь свой конек.
Инструкция действий перед собеседованием 1. Сядьте/встаньте широко, чтоб занять собой побольше места, ощутите силу в себе. Fake it ill you make it -> Тестостерон (могущество, власть) повысится, кортизол (боязнь) понизится. 2. Почувствуйте желание и интерес пройти собеседование, ведь вас хотят увидеть, услышать, узнать! И вы захотите!
Второе Собеседование
Играем в открытую: можно подсказывать, выкрикивать, если очень надо, и шутить 😉 
Зачем нужна JVM? Зачем: дает возможность выполнять одинаковый код на любом устройстве, где установлена. "Write once, run debug everywhere" Принцип работы: перевести писанину дева в байт код (свой язык) и читать его где угодно. Плюсы/минусы: 
 + универсальность 
 - надо устанавливать дополнительно
 - могла бы быть быстрее
Разница между Java и C# • C# официально работает только для Windows, а Java для всех ОС • С# как язык более развитый, а Java требуются библиотеки для достижения аналогичного синтаксиса языка • Для Java есть много больше фреймворков и развитая community.
ArrayList vs LinkedList В 90% случаев используйте ArrayList. LinkedList удобен только для вставки/удаления из середины массива.

HashMap • Сложность поиска может быть О(1), О(n), O(log(n))
Exceptions • Проверяемые - которые можно предсказать и обработать их появление блоком try-catch или явно пробрасывать более общим методам (FileNotFoundException) • Непроверяемые - могут «случайно» случится во время выполнения программы (NullPointerException)
Иерархия Throwable
Модель памяти Java
Деревья Зачем: дает возможность разделить данные, чтоб их легче было найти Плюсы/минусы: 
 + ускоряет поиск 
 - любой дополнительный алгоритм добавляет сложность
https://www.linkedin.com/pulse/software-engineer-detained-several-hours-us-customs-given-fairchild Что нынче спрашивают при въезде в Штаты
Сложность алгоритмов О() • 1 (const) - обращение к элементу массива, вставка в HashTable • n - проход по массиву или обращение к элементу LinkedList() • log(n) - древовидная структура (бинарный поиск) • n^2 - вложенный цикл (пузырьковая сортировка) • n^e - поиск оптимального пути на графе
Пример задачи Написать и определить сложность алгоритма записи слова задом наперед используя цикл.
Его величество Spring Зачем: DI - Dependency Injection: объекты обритают значения, заданные из-вне. Позволяет в зависимости от настроек подставлять разные значения в те же классы. Принцип работы: Используя конструкторы, геттеры и сеттеры внедряются значения в классы. Плюсы/минусы: 
 + дает возможность конфигурировать проект по сути не влазя в его код, что удобно хотябы для разработки и тестирования с разными настройками 
 +/- дает возможность на лету менять реализацию даже стандрартных методов. В итоге не всегда очевидна логика.
 - работает через рефлекшин, что замедляет работу
REST Зачем: Передача запрос-ответ информации и статуса выполнения Принцип работы: использует т.н. глаголы GET, POST, PUT и DELETE для передачи действия над сопровождающей информацией. Плюсы/минусы: 
 + легкий, быстрый, не нуждается в некой структуре передаваемого сообщения 
 - для общения только между двумя точками
SOAP Зачем: Передача запрос-ответ информации и статуса выполнения Принцип работы: использует XML - строго типизированный шаблон для передачи иформации. Плюсы/минусы: 
 + стандартизирован, предусматривает разные варианты 
 + позволяет общатся более чем двум точкам
 + в случае ошибки сам информирует, как ее исправить
 - не все любят работать с XML, может вылиться в тяжелую логику только понимания ответа и написания запроса.
SQL Зачем: хранит данные Принцип работы: имеет структуру таблиц, с заданными ограничениями (триггерами) и позволяет хранить процедуры обработки данных. Плюсы/минусы: 
 + удобна для хранения консистентной информации, особенно если пользоваться нормальными формами.
 - тратится много места бессмысленно, если информация «блуждающаяя» (не всегда есть)
NoSQL Зачем: хранит данные Принцип работы: в файлах хранится только значимая информация. Плюсы/минусы: 
 + удобна для хранения большого количества информации, при том, что записываются только непустые значения, для BigData
 - менее легко начать пользоваться, еще не достаточно развит.
ORM (Hibernate) Зачем: Репрезентирует структуру БД в коде программы, дает возможность писать запросы не через SQL а через общий интерфейс для разных баз, создавать базу по структуре.
Maven Зачем и Принцип работы: с помощью файла pom.xml по прописанным библиотекам и структуре проекта, мавеном может загружать бибилиотеки, собирать проект учитывая заданные настройки, генерировать документацию, запускать тесты… Плюсы/минусы:
 + мавен операции дают возможность не прописывать конкретики запустить билд, как необходимо в Ant
 - не учитывает разницу между прошлой и текущей сборкой, не имеет механизма подгрузки из кэша сделанных задач, возможно, с других компьютеров, как Gradle.
Должна быть гордость, нет скромности 1. Гордость за свои достижения, ну и достижения тоже (GitHub) 2. За скромность потом бывает мучительно обидно, 
 жалко и стыдно перед 
 собой же. А ведь мог же похвастаться!
Будет ли проблемой найти общий язык с собеседующим?
Что собеседующего интересует (по пирамиде Маслоу)? 1. Зарплата - не очень, не всегда (физический уровень) 2. Проблемы на вашей текущей работе (плохой начальник, неприятный коллектив) - неа. 3. Кто вы такой, к какой соц группе принадлежите? - пожалуй, да. Ведь он ищет человека в команду, все должно сростись! 4. В идеале ему интересно, чтоб вы подошли работе, чтоб вам ее было в меру интересно делать и чтоб он не переживал, что может вас потерять в любой момент. 5. Тот ли вы человек, который поможет заказчику Get Things Done и проект состоялся?
Предлагайте себя как возможность развития / роста проекта
Не как индус-паттерн Пытайтесь понять, к чему ведет собеседующий, задавая свой вопрос. Если вы догадались и сами расскажете ответы на его будущее вопросы - вы выиграли битву!
Зачем знать, о чем проект, если вы заранее согласны на любой или что спросить собеседующего? 1. Как будет выглядеть моя каждодневная работа? 2. Как производится слежка за качеством кода, пишутся ли тесты, есть ли CI, какие метрики? 3. Как ищутся/находятся баги? Сколько их? Какой процесс фикса? 4. Какими фреймворками пользуетесь? Сколько времени занимает настройка среды разработки? 5. Какие у вас сроки? Is your hair always on fire? 6. Ходите ли вы на team-buildings?
Что собеседующему нравится о его работе? Хороший ответ • Приятно делать мою работу • Нам на работе весело • Мои коллеги умные, интересные и дружелюбные • Менеджмент уважает инженеров Слабый ответ Надо платить по счетам. Работа не пыльная. Сильно никто не ругает. Особо нет напряга. Молчание.
Общие советы • Читайте новости, будет прекрасно, если вы расскажете собеседующему что-то «из последнего». • Покажите, что вы разнопланово развиты, ведь чем больше у вас способностей, тем полезнее вы можете быть. Но уделять достойное место профессии все равно надо.
Кому достался хрустальный микрофон? Тому, кто не переживал и не стремился к нему, кто просто был искренним и достаточно хорошим.
Что вы ожидали, когда шли на доклад? Что я вас научу ответам на вопросы, которые задают на собеседовании? Что я хотя бы дам знания, какую информацию нужно готовить? Что я научу себя правильно вести?
Что вы получили от доклада? (10 сек надо подумать) Руководство к действиям: • Создать аккаунт на GitHub и что-то новое выучить, усовершенствовать имеющиеся. • Найти перед кем и показать себя и свои знания, быть оценённым, когда наступит момент готовности. • Желание быть достойным самого лучшего.
Полезные ссылки • Соберись, «тряпка»: 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/ • Ну и читайте документацию ;)
Как меня найти • Twitter: @LadyInIT • LinkedIn, Facebook: Olexandra Dmytrenko

Собеседование на позицию Java Developer

  • 1.
    Write a programthat 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 это отдельный случай или он вообще не нужен?
  • 4.
    Собеседование на позицию JavaDeveloper Александра Дмитренко
  • 5.
    Цель Пройти собеседование, понять своиошибки и как правильно себя вести
  • 6.
    Задачи на час посмотретьосновное, что спрашивают Java разработчиков на собеседованиях как себя позиционировать в этот ответственный момент какие вопросы задать собеседующему? а также, что отвечать американскому таможеннику ;)
  • 7.
    Какие мысли васпобуждают прийти на собеседование? Устроиться на работу (ходил бы я на «экзамены» иначе?) Проверить свои знания, и понять «на что я гожусь» Посмотреть, что нынче на рынке в цене и куда мне надо двигаться.
  • 8.
  • 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. Почувствуйте желание и интерес пройти собеседование, ведь вас хотят увидеть, услышать, узнать! И вы захотите!
  • 14.
  • 15.
    Играем в открытую: можно подсказывать,выкрикивать, если очень надо, и шутить 😉 
  • 16.
    Зачем нужна JVM? Зачем:дает возможность выполнять одинаковый код на любом устройстве, где установлена. "Write once, run debug everywhere" Принцип работы: перевести писанину дева в байт код (свой язык) и читать его где угодно. Плюсы/минусы: 
 + универсальность 
 - надо устанавливать дополнительно
 - могла бы быть быстрее
  • 17.
    Разница между Javaи C# • C# официально работает только для Windows, а Java для всех ОС • С# как язык более развитый, а Java требуются библиотеки для достижения аналогичного синтаксиса языка • Для Java есть много больше фреймворков и развитая community.
  • 18.
    ArrayList vs LinkedList В90% случаев используйте ArrayList. LinkedList удобен только для вставки/удаления из середины массива.

  • 19.
    HashMap • Сложность поискаможет быть О(1), О(n), O(log(n))
  • 20.
    Exceptions • Проверяемые -которые можно предсказать и обработать их появление блоком try-catch или явно пробрасывать более общим методам (FileNotFoundException) • Непроверяемые - могут «случайно» случится во время выполнения программы (NullPointerException)
  • 21.
  • 22.
  • 23.
    Деревья Зачем: дает возможностьразделить данные, чтоб их легче было найти Плюсы/минусы: 
 + ускоряет поиск 
 - любой дополнительный алгоритм добавляет сложность
  • 24.
  • 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. За скромность потом бывает мучительно обидно, 
 жалко и стыдно перед 
 собой же. А ведь мог же похвастаться!
  • 35.
    Будет ли проблемойнайти общий язык с собеседующим?
  • 36.
    Что собеседующего интересует (попирамиде Маслоу)? 1. Зарплата - не очень, не всегда (физический уровень) 2. Проблемы на вашей текущей работе (плохой начальник, неприятный коллектив) - неа. 3. Кто вы такой, к какой соц группе принадлежите? - пожалуй, да. Ведь он ищет человека в команду, все должно сростись! 4. В идеале ему интересно, чтоб вы подошли работе, чтоб вам ее было в меру интересно делать и чтоб он не переживал, что может вас потерять в любой момент. 5. Тот ли вы человек, который поможет заказчику Get Things Done и проект состоялся?
  • 37.
    Предлагайте себя каквозможность развития / роста проекта
  • 38.
    Не как индус-паттерн Пытайтесьпонять, к чему ведет собеседующий, задавая свой вопрос. Если вы догадались и сами расскажете ответы на его будущее вопросы - вы выиграли битву!
  • 39.
    Зачем знать, очем проект, если вы заранее согласны на любой или что спросить собеседующего? 1. Как будет выглядеть моя каждодневная работа? 2. Как производится слежка за качеством кода, пишутся ли тесты, есть ли CI, какие метрики? 3. Как ищутся/находятся баги? Сколько их? Какой процесс фикса? 4. Какими фреймворками пользуетесь? Сколько времени занимает настройка среды разработки? 5. Какие у вас сроки? Is your hair always on fire? 6. Ходите ли вы на team-buildings?
  • 40.
    Что собеседующему нравитсяо его работе? Хороший ответ • Приятно делать мою работу • Нам на работе весело • Мои коллеги умные, интересные и дружелюбные • Менеджмент уважает инженеров Слабый ответ Надо платить по счетам. Работа не пыльная. Сильно никто не ругает. Особо нет напряга. Молчание.
  • 41.
    Общие советы • Читайтеновости, будет прекрасно, если вы расскажете собеседующему что-то «из последнего». • Покажите, что вы разнопланово развиты, ведь чем больше у вас способностей, тем полезнее вы можете быть. Но уделять достойное место профессии все равно надо.
  • 42.
    Кому достался хрустальный микрофон? Тому,кто не переживал и не стремился к нему, кто просто был искренним и достаточно хорошим.
  • 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