что спрашивают на собеседовании программиста java

Собеседую программистов на Java. Единый набор вопросов для любого уровня

В своей карьере мне приходилось быть и разработчиком, и менеджером, и даже один раз «CTO» в небольшом стартапе. И, разумеется, приходилось проводить большое количество собеседований кадидатов. Поэтому для себя я выработал такие правила проведения технических собеседований:

Расскажите про HashMap

Да-да, тот самый стандартный вопрос, с которого начинается 50% собеседований. Почему я его задаю? Потому что на него можно ответить очень и очень по разному.

Если будет скучно, замените HashMap на TreeMap.

Напишите SQL.

Ага, и снова «стандартный» вопрос, который 10 лет назад был на каждом собеседовании. Сейчас уже реже, видимо из-за моды на nosql. Но умение работать с данными всегда нужно, и программисты, понимающие декартово произведение, всегда полезнее (и дороже) тех, кто ограничивается общим пересказом учебника.

А вопрос звучит так:

Пусть в базе данных существуют две таблицы: students и groups. У каждого студента указан идентификатор группы group_id, к которой он относится. Напишите SQL-запрос без использования вложенных, выводящий список групп (или количество групп) без единого студента

Правильный ответ будет, разумеется, содержать не просто JOIN, но LEFT JOIN со сравнением значения на NULL. Самое интересное будет поговорить с кандидатом о том, какие ошибки можно допустить при написании запроса, и почему именно запрос не будет работать, если их допустить. Почему нельзя сравнивать с NULL через равенство? Почему не будет работать простой JOIN?

Бонус за индексы, которые ускорят работу этого запроса и за рассмотрение вариантов SQL в разных диалектах (разных СУБД).

Найдите ошибки в коде

Предположим, что вам на code review приходит Pull Request (Merge Request) от другого разработчика. В этом request’е большое количество разных файлов, но один из них выглядит следующим образом (приведён код класса целиком):

Будут ли у вас замечания к этому коду, и если будут, то какие? Пропустите ли вы запрос с таким файлом далее (в master-ветку), или же потребуете переделать, и почему?

Разумеется, и здесь есть как минимум три уровня.

Бонусом можно поговорить о том, какие средства автоматического контроля кода следует использовать, чтобы найти хотя бы часть присутствующих ошибок.

Источник

План подготовки к собеседованию на позицию Java разработчика

Каждый раз, готовясь к собеседованиям на позицию «Java разработчик», я понимаю, что мне бы очень помог конкретный план подготовки. Поэтому все свои записи, накопившиеся в ходе прохождения собеседований, было решено структурировать и опубликовать. Надеюсь, кому-то этот план будет полезен.

И я намеренно не пишу, для кого предназначен этот план подготовки: для senior, middle или junior разработчика — все зависит от конкретной вакансии и от требований работодателя. Поэтому опирайтесь на этот план, но фильтруйте и в то же время не воспринимайте его как исчерпывающее руководство.

И дам несколько советов от себя.

Лично я всегда ставлю первые 2 собеседования как тренировочные. То есть обычно это компании, которые меня интересуют меньше всего. Эти собеседования нужны просто для того, чтобы войти в ритм и не бояться последующих.

Также будьте готовы рассказать про свой опыт из резюме. Что делали, зачем, какие проблемы решали.

Помните, что вы — не энциклопедия, и не должны сходу перечислить например все функциональные интерфейсы в Java. Будет вполне нормально, если расскажете только про то, с чем работали.

И помните, что собеседование — это прежде всего беседа. Вас не допрашивают и не хотят пристыдить, если вы что-либо не знаете. Работодатель выясняет, подходящая ли вы кандидатура, а вы выясняете, подходит ли вам эта работа.

А еще хорошая книга — Cracking the Coding Interview. Можно взглянуть, особенно если собираетесь проходить интервью в иностранные компании типа Google, Facebook.

Полезные ресурсы, которые могут понадобится при подготовке:

Источник

23 вопроса, часто задаваемых на собеседованиях

Что такое JDK,JRE,JVM и компилятор. This is must have. Если вам зададут на собеседовании этот вопрос и вы не ответите на него, скорее всего, дальше ничего спрашивать не будут. Маленькое видео с youtube

Объектно ориентированное программирование (ООП). Тут главное рассказать, что такое полиморфизм. Могут попросить перевести это слово, потом нужно рассказать его определение соответственно. Можно рассказывать все своими словами. Потом приводите свои примеры.

Множественное наследование в Java.В Java запрещено множественное наследование классов, но разрешено множественное наследование интерфейсов. О наследовании

Методы класса Object (желательно каждый метод посмотреть прямо в самом коде и обратить внимание на Equals и hashCode). Я называл так: getClass, finallize (прочитайте о нем, мало ли зададут вопрос, но запомните: как по мне — ЭТО КОСТЫЛЬ), wait (достаточно знать, что там 3 перегруженных метода) notify, notifyAll, equals и hashcode (обязательно. знать 4 правила equals и обязательно знать закон между equals и hashCode).

JVM изнутри. Stack и Heap память.

Что за ключевое слово new и как оно работает. Материал не нашел, но у меня спрашивали о нем, а точнее, когда мы пишем к примеру

что происходит перед равно и после равно?

Перед равно у нас создается ссылка, а после равно у нас создается с помощью ключевого слова new новый объект, который помещается в память Heap в виде набора байт.(если я не прав потом поправьте пожалуйста меня)

Работа Garbage Collection — не очень часто спрашивали, но когда спрашивали начинали копать, насколько я знаю данную тему. Отличная статья на тут

Порядок инициализации полей классов родителя и потомка

Коллекции: приходилось рассказывать абсолютно всю иерархию и работу каждой коллекции.

Вопрос, чем отличается List от Set. Самое главное — сказать, что из себя представляет интерфейс List. Если вы ответите, что Set — коллекция с уникальными объектами, этого будет недостаточно.

HashMap, HashSet — начальный размер; capacity, loadfactory, null допускается или нет? Как вычисляется ячейка для объекта при работе с Hash коллекцией? Отличие HashMap от TreeMap (недостаточно сказать, что TreeMap — отсортированная коллекция, по алгоритму красно-черное дерево). Знать алгоритмы вставки, удаления, поиска o каждой коллекции. Queue, Deque, Stack — редко задавали мне вопросы о них. Нужно знать, где интерфейс, а где классы в коллекциях.

Обратите внимание на то, что у Collections есть родитель Iterable

Java 8. Абсолютно по максимуму должны выжать из себя все что знаете о «нововведениях», выпущенных 4 года назад: вот вам источник Новое в Java 8

Generics. Все о дженериках. Спрашивают везде.

Потоки. Thread, Runnable, чем отличаются, как запустить поток. Все о синхронизации. Мьютексы, мониторы, класс Lock. Deadlock когда возникает, приведи те примеры.

Иерархия исключений checked/unchecked, написать свой класс исключения.

Final, finallize(опять), immutable, finally. Когда не отработает блок finally.

Как запретить наследования классов (приватные конструкторы, финал класс. ).

IO / NIO потоки.

ПАТТЕРНЫ. Выучите хотя бы 5 штук основных (mvc, factory, decorator, singleton, наблюдатель).

Что такое ORM? как работает? (изи ответ).

Hibernate: как связывается с базой данных, что должно быть обязательно при создании класса Entity. Session. 3 уровня кэширования — знать. Как связать таблицу и класс entity. Связи:

Многие ко многим, один ко многим и т.п.

Если у нас есть связь, например, User у которого много Book. Как будет выглядеть поле в классе User и поле в классе Book (это там где указывается аннотация многие ко одному и один ко многим над полями).

Что такое JPA, каким образом он связан с Hiber. JPAQL.

Следующий вопрос будет по SQL. Запросы, какие знаешь, что использовал. JOIN — внешний, внутренний, левый, правый.

Задача из компании: 2 таблицы дано, департамент и сотрудник. Вот пример.

Немного html, css, js.

Git. Работа в консоли. commit, push, в чем отличие fetch от pull.

Источник

Вопросы к собеседованию Java-backend, Java core (60 вопросов)

Добрый день! Представляю вашему вниманию список вопросов к собеседованию Java Backend, которые я оформлял на протяжении около 2х лет.

Вопросы разбиты по темам: core, collections, concurrency, io, exceptions, которые задают основные направления хода технического собеседования. Звездочками отмечен субъективный (с точки зрения автора) уровень сложности вопроса, в сноске спойлера — краткий ответ на вопрос. Ответ представляет для интервьювера правильное направления развития мысли кандидата.

Опросник не претендует на роль исчерпывающего средства оценки технических навыков кандидата, это скорее еще одна компиляция вопросов и тем по Java и сопуствующим технологиям, принципам и концепциям разработки, коих в сети десятки. Она преследует цель собрать большое число технических вопросов, возникающих на собеседованиях, в удобном для читателей Хабра формате. Некоторые ответы следует воспринимать как мнемоники, «размечивающие» пространство поиска, так что глубже копать нужно уже в документации.

Также не стоит обращать внимание на слишком большое кол-во списков, так как это все-таки не вольное переложение авторских знаний с примесью литературной экспреcсии (что на хабре котируется и собирает аудиторию, особенно в пятницу). Этот список я составил для самого себя как способ структурировать основные тематики и типичные вопросы с собеседований, так что все дополнения и правки только приветствуются.

Это также не руководство к действию — не надо закидывать бедных кандидатов всеми вопросами из списка.

Секция Core:

string-pool — структура в памяти, хранящая массив всех строк-литералов программы.
String.intern(), соответственно, вернет строку из пула, при наличии таковой. Полезно при сравнениях вида:

Т.к без интернирования пришлось бы сравнивать строки через equals, что может быть медленнее при наличии длинных строк. В данном случае возвращается ссылка на один и тот же объект строки из пула, и проверка проходит с true.

Если объект является достижимым из стека или статической области, то он не поддается сборке мусора

Stream — интерфейс, предоставляющий функциональные возможности обработки коллекций (filter, map, reduce, peek)
Операции на стримах делятся на терминальные и нетерминальные. Нетерминальные операции модифицируют pipeline операций над коллекцией, при этом не изменяя саму коллекцию, терминальные (например, collect) — проводят действия pipeline’а, возвращают результат и закрывают Stream.

FunctionalInterface — аннотация, предоставляющая возможность использовать лямбды на месте интерфейсов (например, при передаче лямбды в качестве аргумента в метод)

Optional — интерфейс, предохраняющий пользовательский код от nullable ссылок. Оборачивает исходный nullable объект, и предоставляет возможность понять, хранит ли non-nullable объект или нет.

но это совершенно необязательно, покажет лишь вашу въедливость при чтении JDK’шных Release Notes :)

* Попросить описать принцип действия стековой машины, как бонус. Допустим, на примере вызова метода.

Секция Concurrency:

ReentrantLock обязательно нужно освобождать (такое кол-во раз, сколько раз он был захвачен), в противном случае будет thread starvation у других тредов, ожидающих у границы критической секции.
ReentrantLock может быть «честным» (fairness = true), тогда приоритет отдается тредам, ждущих на нем наибольшее кол-во времени, но это вроде как уменьшает производительность

CountdownLatch («защелка») — примитив синхронизации, с помощью которого, например, основной thread может ожидать выполнения работы остальных N тредов. Треды, выполняющие работу, выполняют countDown() на защелке, основной тред ожидает на операции await(). Когда счетчик достигает нуля, основной тред продолжает работу.

Для синхронизации N тредов (все ждут всех) и переиспользования используется CyclicBarrier, ему также можно указывать действие (через Runnable), выполняемое после синхронизации всех-со-всеми

ThreadPoolExecutor — средство контроля исполнения параллельных задач, задействует один из свободных тредов в общем пуле, или ставит задание в очередь, если таковых нет, или достигнуты определенные условия (ниже)

Основными св-вами ThreadPoolExecutor являются corePoolSize и maxPoolSize. Если текущее количество тредов в пуле = maxPoolSize — новые треды не создаются, а задачи ставятся в очередь.

Секция Collections:

Секция IO:

Классы, чьи объекты подвергаются сериализации/десериализации должны реализовывать marker интерфейс Serializable (и иметь статическое поле serialVersionUID для указании при сериализации, с какой версией класса данный объект был сериализован. Если serialVersionUID из сериализованного представления не совпадает c serialVersionUID класса «на том конце провода» — то кидается exception)

На практике, уже довольно редко используется, т.к тем же Jackson/GSON не обязательно наличие данного интерфейса для сериализации

try-with-resources — краткая замена стандартному try..catch..finally. Закрывает ресурс после выхода из секции try-with-resources. Ресурс должен имплементить интерфейс AutoCloseable.

«Ресурс» в данном контексте — это класс, представляющий cобой соединение/cокет/файл/поток

Источник

Подборка психологических и нетипичных технических вопросов с собеседований Java-разработчика

Как и у всех разработчиков, у меня настал период затишья. Проект подходил к концу, задач практически не было, хотелось выше зарплату, ну и пошла получать свой заветный job offer.

Так вышло, что некоторые собеседования занимали 2-3 этапа, и я накопила парад вопросов, которыми спешу с Вами поделиться.

Психологические вопросы

Представители отдела кадров и не IT-руководители качественно выполняют свою работу и тоже хотят тебя о чем-нибудь спросить, но некоторые из них удивляют меня все больше и больше. Руководитель одной из контор устроил мне даже блиц-опрос с таймером. Если раньше обходились двумя вопросами: “Кем Вы видите себя через 5 лет?” и “Что Вас не устраивает на старом месте работы? Сейчас же, все вокруг только и говорят, что о психологии, вот и появляются подобные вопросы.

Мои любимые, простенькие короткие вопросики:
— “Вы конфликтный человек?”
— “Допустим у Вас конфликт, как вы будете его решать?”
— “Если в pull-request вы не согласны с коллегой, какие Ваши действия?”
— “Как часто вы пьете чай на рабочем месте?”
— “Как вы решаете споры в команде?”
— “Опишите работу вашей мечты”
— “Опишите рабочее место Вашей мечты”
— “Если бы вы выиграли в лотерею кругосветное путешествие длиной в год. Какова вероятность, что после приезда вы пойдете на прежнее место работы?”

Однажды мне прислали психологический тест, состоящий из 2 частей в общей сложности на 300 вопросов, потому что: «Данная вакансия предполагает конкурсный отбор в 3 этапа — 2 тестирования по электронной почте (психологическое и профессиональное) и собеседование (очное или скайп, как вам удобно)»

Естественно все 300 вопросов я описывать здесь не буду, предоставлю просто ссылочку на репозиторий с этими тестами (тесты). Но прикреплю тут Вам некоторые вопросы.

На одном из интервью мне устроили вечеринку вопросов.
Чтобы легче было воспринимать диалог введем обозначения: Разработчик (Р) и Кадровик (К)

Вопрос № 1
К: Ночь, трасса, остановка. На остановке стоит мужчина твоей мечты, друг, старушка. Ты едешь на двухместной машине и можешь взять всего лишь одного человека. Твои действия?
Р: Заберу друга
К: Хорошо, а теперь представь, что мы “Out of Box”. Твои действия?
Р: Что Вы понимаете под “Out of Box”?
K: Давай представим, что ты программист, как бы ты действовала?

(Тут у меня был пинг секунд так на 30)

Р: Посмотрю свойства объектов и решу, что с ними делать

Правильный ответ этой задачи: “Отдать машину другу, он увезет бабушку, а сама останешься с мужчиной своей мечты. Потому что от мечты отказываться нельзя”

Вопрос № 2
K: У тебя есть друзья?
Р: Ну да
К: Сколько у тебя друзей?
Р: Близких или не очень?
К: Близких
Р: Допустим 3
К: Назови их Имя и Фамилию

(Кадровик берет листок и готовится писать под диктовку)

Р: Листкова Марина, Костенко Артем, Мартынова Дарья
К: Я встретила на улице Листкову Марину, что она мне скажет о тебе?
Р: ЭЭЭ, что?
К: Назови три своих качества, которые Марина может о тебе сказать?
Р: Ответственность, усидчивость, коммуникабельность
К: Я встретила на улице Костенко Артема, что он мне скажет о тебе?
Р: Мммм, Ответственность, усидчивость, коммуникабельность
К: Я встретила на улице Мартынову Дарью, что она мне скажет о тебе?
Р: Пускай будет тоже самое

(Hr все записал на листочке и сразу следом полетел Всеми любимый нами вопрос)

K: Кем вы видите себя через 5 лет?
Р: Лидом
К: Как вы можете быть лидом, если Ваши друзья не назвали ни одного качества лидера?
(Дальше додумывайте сами, что бы вы ответили. Но подход был очень интересный)

Вопрос № 3
К: Сколько ты хочешь по зарплате?
Р: N-сумма
K: А если я тебе буду платить не каждый месяц, а в конце проекта N+R сумму?
Р: N+R будет меньше, чем если я каждый месяц буду получать по N.
K: Хорошо, а если я тебе еще добавлю?
Р: Если сумма в конце, будет выше чем месячная за этот же период, то соглашусь.
К: То есть вы работаете за деньги?

Технические вопросы

Технические вопросы по джаве, которые задают на собеседованиях, пора уже выпускать в виде книги. Предоставлю удобные ссылки на подобные сборники тут, очень хорошая подборка ну и стандарт

70% вопросов и задачек, которые представлены в ссылках выше, как раз задают на собеседованиях ( Я говорю про core ). Но пока я общалась с разными лидам, смогла выделить парочку, которые показались мне где-то интересными, а где-то странными.
Однажды мне попался человек, который спросил: “Чем heap отличается от кучи?” и на полном серьезе смотрел на меня и ждал ответа.

Перечень вопросов:
1. Спрашивать про отличие LinkedList и ArrayList уже не модно, поэтому наткнулась на новый подход.
Зачем нужен LinkedList в Java, если можно заранее зарезервировать место у ArrayList вначале? (где, 0 – N – места для резерва). (Очень странный вопрос, но лид был из людей, которые «за поговорить»)

2. Зачем в Java нужен HashMap, если я могу написать функцию, которая реализовывает HashMap? (На мой взгляд такие вопросы на собеседовании задавать странно. Зачем структуру данных и алгоритмы мешать в одну кучу)

3. Как сделать так, чтоб из HashMap никогда не получить значение? (Очень хороший вопрос, сразу видно кандидата, который не просто так выучил: “Если переопределили equals, то переопредели и hashCode”)

4. Любимый Exception. Естественно, все хотят, что-нибудь про него спросить. Обычно дают задачки, либо просят рассказать зачем, куда и сколько. Но вот один человек удивил: «Зачем в джаве придумали эти иерархии, если можно просто сделать один?» (Рассказы про логи и распределение его не устроили, так я и не знаю какого ответа человек ожидал)

5. Задачка: Пользователь указывает сколько чисел после запятой он хочет видеть на экране. Функция, которая возвращает нам число, находится во внешнем API и не позволено ее модифицировать. Допустим процесс вычисления при запросе вывода больше 3 символов сильно замедляется. Как реализовать наше приложение?

Забавная задачка, чтоб посмотреть, как рассуждает кандидат. Мне она понравилась)

6. Задачка: В API находятся данные, которые необходимо получить в JAR2. JAR2 не имеет прямого доступа к API, зависимость указана стрелочками, зависимости менять нельзя. Каким способ передать данные от API к JAR2.

Тоже очень хорошая задачка, на рассуждение.

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • Что спрашивают на собеседовании программист 1с
  • Что спрашивают на собеседовании при приеме на работу программистом
  • Что сохранить перед переустановкой windows
  • Что составляет основу работы пользователя с операционной системой windows
  • Что составляет основу работы пользователя с операционной системой windows кратко

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии