Тестовое собеседование Java разработчика #10 - Максим Матло
Vložit
- čas přidán 6. 07. 2024
- Видеозапись mock интервью с начинающим java разработчиком Максимом.
00:00 - знакомство
01:47 - ключевое слово final
04:15 - класс String
05:57 - передача значение по ссылке/по значению
09:32 - LinkedHashSet
10:50 - HashSet
13:20 - класс Phaser
13:30 - понятие монитора
15:47 - решение алгоритмической задачи
35:15 - что такое реляционная база данных
35:46 - команда GROUP BY в SQL
38:07 - для чего используется Spring Boot
38:50 - области видимости бинов в Spring
39:50 - что такое socket
43:25 - шаблон проектирование "Стратегия"
43:50 - заключение
Материалы, рекомендуемые к изучению:
Java Core:
- www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997
Алгоритмы и структуры данных:
- www.coursera.org/learn/algorithms-part1
- www.coursera.org/learn/algorithms-part2
- www.coursera.org/learn/algorithms-part2
Concurrency:
- www.amazon.com/gp/product/B004V9OA84
Базы данных:
- www.amazon.com/Database-Design-Mere-Mortals-Hands-ebook/dp/B00BHEY5C2
- www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287
Spring:
- www.amazon.com/Pro-Spring-Depth-Guide-Framework-ebook/dp/B076FQ5KFK
Евгений огромное человеческое спасибо за интервью. Очень нервничал но этим же и тренировал свою стрессоустойчивость.
Ничего не создаётся с пустого места для всего нужен труд и упорство.
Красавчик, бомби дальше, верь в себя. Не моё дело, но от себя посоветовал бы больше кода писать, пусть лишенного смысла, но мелочи типа фора, ходовых методов коллекций и прочих семафоров должны рефлекторно выстреливать, а этого можно достичь исключительно программируя, имхо. Желаю успехов и скорее устроиться на работу)
@@vasiliyditiatkin6848 да спасибо. Постоянно стараюсь много практиковатся в свободное время!
Молодчина, еще немного знаний, немного больше уверенности и все будет супер.
Вы большой молодец! Успехов вам!
Java Rush и Stepik хорошо подходят для практики. Степик бесплатный, у джавы раш подписка
Евгений само спокойствие. Профессионализм!!
Интервьюер просто супер. Просто бомба.
Очень располагает размышлять и обсуждать с интересом и удовольствием.
Идея мок собесов - это нечто, приоткрытый занавес)
Спасибо Евгению и смелым господам, которые не робеют записываться.
Евгений большое спасибо за видео по Spring Security и за интервью на этой неделе. Очень интересная и качественная у вас подача материала. Успехов в делах!
Спасибо за отзыв!
Евгений, огромное спасибо за ваши видео! Они очень помогли мне подготовиться и успешно пройти собеседование на работу.
Спасибо за отзыв, Артём!
Рад, что материал помог вам.
Большая благодарность за такой контент! Очень интересно и полезно. Успехов Максиму.
Сам уже занимаюсь джавой, больше полу года. Очень нравится смотреть данную серию видео. Спасибо за то что снимаешь и выкладываешь!!
Максим молодец, видно, что сильно волнуется, возможно это у него вообще первое интервью. Когда я в первый раз проходил, тоже сильно волновался и некоторые вещи, которые я знал, просто не мог правильно сформулировать и подобрать слова. Прохождение интервью это тоже навык, который отрабатывается через некоторое время. Максим уже проделал большой путь, и я думаю, что у него все получится. Удачи ему!
Евгений, спасибо за такой классный проект, когда смотрю, в голове прокручиваю варианты, как бы я ответил на тот или иной вопрос, это позволяет быть в тонусе))
Спасибо за отзыв:)
да это было мое первое интервью. Очень сильно волновался, понимал как решить задание но увы из-за волнения код просто плыл перед глазами. Но опять таки - хорошая тренировка стресоустойчивости.
Согласен) Максим волновался)) Сам знаю, как при волнении впадаешь в ступор на элементарных вопросах )))))) Ну и Евгений молодец, по-братски так интервью проводит. Ваще красавчик ))
@@maksymmatlo4327 Как сейчас дела? Устроились?
@@ThisRussia да все получилось!
Большое спасибо за такой формат видео, очень помогает собраться перед собеседованием)
Благодарю Евгений за такие интервью! Парень молодцом!
Спасибо Евгений, всегда жду ваших видео.
Какие же вы умные ребята))
Респект
С нетерпением жду новых видео, особенно многопоточность, секьюрити кстати очень полезное, одно из лучших по этой теме👍
Отличный формат, подписался. Посмотрел все 10 собеседований, старайтесь по возможности подбирать сильных ребят, гораздо интересней👍
В рекомендациях новичкам часто говорят - пиши больше кода. Но где новичок может писать код на java?
Писать дома CRM систему? Выдумывать сложную интеграцию с различными службами и гонять информационные потоки высокой интенсивности?
Придумывать сложную систему с транзакциями, работающую под большой нагрузкой? Сам в свое время был в этой беде - почти невозможно дома придумать себе задачу. Ничего сложнее Pet проекта выдумать не получится. А без этого серьезной практики не будет.
Ответ на этот вопрос я нашел спустя 4 года. Новичок - услышь одно слово: gamedev. На java? Да, я нисколько не шучу. Этой области с лихвой хватит для практики ООП и основных паттернов.
Причем можно делать очень большие проекты, в которых можно писать очень много кода и получить много практики. Я просто приведу несколько ссылок, а Вы их самостоятельно изучите. В Вашем распоряжении google и youtube, там Вы не мало найдете информации о ниже приведенных решениях.
Итак:
Библиотека LWJGL www.lwjgl.org/
Игровой движок JmonkeyEngine jmonkeyengine.org/
Редактор для движка JmonkeyEngine github.com/JavaSaBr/jmonkeybuilder
Игровой движок OrionEngine github.com/fynnfluegge/oreon-engine
Я занырнул в эту тему один раз и уже год с нее не слезаю, до сих пор пилю свой игровой проект. Возможно кому-то мой совет поможет.
спасибо, классная серия видео
Жень, ты прям по заказу видос сделал. Пару дней назад обсуждали)
Спасибо
Спасибо за отзыв :)
Максим молодец хоть и волновался, а Женя, как всегда пилит годный контент.. может быть когда-нибудь дойдём до видео - Тестирование Spring приложений: Mockito, Junit. :)
Спасибо за отзыв :)
По новым видео - в процессе. Сейчас в работе курс по алгоритмам. А недавно опубликовал по основам Spring Security
Все, в сентябре начинаю ходить на собесы! Женя вселил в меня уверенность в моих силах))
Что мне нравится в Жене так что он всегда пытается помочь .
Верно заметил Николай.Человек с большой буквой,а то иногда попадаются такие,что беря интервью не твои знания и умения хотят узнать ,а себя показать.А Женя просто хороший добрый человек,дай Бог ему самых вершин ,такие люди как он заслуживают самого лучшего
@@user-zv4kq8ly2n на 100% согласен))) Если он собеседует людей уровня senior то о чем можно говорить)) Я думаю Евгений наверное как архитектор работает на проектах)
@@Mr.J248 синьоров может и мидл собесить)
Прум прум - никогда не забуду эти слова!
:D
@@EugeneSuleimanov это твоя фишка ) но после этого сообщения ты всегда будешь теперь улыбаться, когда будешь делать Пурум-пурум)))
Спасибо огромное за крутейший контент! Готовлюсь к собеседованию на Junior Java сейчас) был бы крутой контент, если ты снимешь ответы на все вопросы которые сам задавал, так как подача интересная у тебя и ты хорошо объясняешь))
Спасибо за отзыв!. По ответам, я подумаю, ккк это можно сделать)
Eugene Suleimanov спасибо) уверен многим было бы интересно!
@@johannesbrown8853 Как успехи? Устроились?
@@user-jg1yd7kx4d да)) вообще без проблем. Прошёл 6 собесов получил 4 оффера. На рынке реально ощущение что берут всех кто в теории хотябы понимает)) и адекватный в общении
Спасибо за видео Евгений, очень интересно. Будет ли продолжение?
Спасибо за отзыв! Скорее всего - да :)
Спасибо Евгений за ваше терпение))я бы не выдержал.Можем ли мы сделать с вами интервью без видео?
Спасибо за отзыв :)
На данный момент провожу только для записи, но, в любом случае, напишите на почту - обсудим:
proselytear@yahoo.com
[00:31:32] Как же заботливо Евгений ставит пробелы в коде))
Уж тяжело, парню было идти внутреннему шаговому j = i + 1 кондишену... Для ответа на по временной сложности - аналогия с ротой-командиром-адресом ОЧЕНЬ предметная!!! NlogN должен был бы прийти на помощь))) P.S. ++ Группировки очень важны ВЕЗДЕ в Computer Science. (с) Алгоритмы на Java (Седжвик) - ну прям рекомендую!
Теперь парень должен знать в какую сторону копать и пахать;)
Интервъюверу нужно насыпать ВАГОН лаков!
Здравствуйте, Евгений. Хотел бы попытать счастье и пройти у вас учебное собеседование. Если вы не заняты, можно ссылку на мейл где можно всё обсудить?
Евгений, а не могли бы вы сделать видео о многопоточности в Java и инструментах для многопоточности, которые используются в продакшене?
У меня в планах записать несколько курсов, первым из них был, spring security. Далее алгоритмы и потом многопоточность.
@@EugeneSuleimanov а курсы платные\бесплатные и где можно будет посмотреть? спасибо
@@dimasamsonau3646 все что есть - на канале или на сайте и бесплатно, конечно же :)
@@EugeneSuleimanov Спасибо)
Очень сильно понравился ваш контент, Евгений.
Хочу вас поблагодарить за ваш труд.
Пожалуйста продолжайте в том же духе!
И очень интересно, как можно к вам попасть на интервью, чтобы проверить себя?!
Евгений, добрый день, по поводу задачки, насколько целесообразно вот такое решение(делаем сет из массива и потом сравниваем длину сета и массива приходящего, если длины не равны, то обнаружились одинаковые элементы)
Set set = Arrays.stream(nums).boxed().collect(Collectors.toSet());
return nums.length != set.size();
Эту задачу можно решить на этапе добавления элементов в Set :)
Сделай плиз туториал как прикрутить Amazon Cognito. Вместо Spring Boot испльзуется Thorntail.
Если задача была сугубо "поймать" первый же дубликат, ответив всего на один вопрос «Уникальны ли значения в массиве?», то мне на ум приходит следующее решение:
HashSet noDublicate = new HashSet(array.length);
for (int number : array) {
if (!noDublicate.add(number)) {
return true;
}
}
return false;
Возможно есть иное, более верное решение.
P.S. Сам собесы ещё не проходил, возможно сам на нервах начну "троить", но пока я учусь.
Вижу новое видео, захожу - ставлю лайк=) иду дальше работать))
Евгений, как вы относитесь к стримам в алгоритмических задачках?
Бытует мнение, что их использование - это некое читерство, и что их стоит избегать на собеседовании (Например в FAANG)
p.s мое решение задачки, потратил 15 секунд
private static boolean containsDup(int[] nums) {
return nums.length == Arrays.stream(nums).distinct().count();
}
А только положительно, если это помогает получить преимущество. Также, по моему личному мнению, корректное использование стримов показывает профессионализм специалиста.
Но, здесь, можно сделать несколько проще :)
Это как если тебя просят написать алгоритм сортировки - написать просто Arrays.sort() =D
@@EugeneSuleimanov не томите уже)
@@arthurfonzerelli6484 что возвращает метод add у TreeSet и почему?)
@@EugeneSuleimanov ну да, можно и так. Правда, мне почему-то казалось, что при решении таких задач от меня ждут, чтобы я использовал только самые стандартные инструменты вроде циклов, if-ов и всего такого. А так можно дойти и до того, что мы будем просто подключать сторонние либы, которые и будут решать алгоритмические задачки)
Очень интересная тема, смотреть собесы других людей и прокручивать в голове как бы сам ответил на тот или иной вопрос.Евгений в других видео Вы обычно говорите прошёл бы интервьюированный кандидат на должность джуна или нет.Просто для себя интересно чтоб понимать хватит тех знаний, которые есть у кандидата чтоб войти в ИТ)
Евгений, можно с вами пройти тоже такое собеседование?
Евгений, слышали про разработку на платформе Salesforce ? Под капотом которой используется Java подобный язык программирования.
английский это огромное приемущество :)
У мене запитання по практичному завданню: Чим можна його вирішити за допомогою колекції, тобто спочатку перетворити масив в АrrayList, а потім створити ще одну колекцію Set і записати в неї ті самі елементи, щоб позбутись дублікатів, а потім порівняти ці дві колекції. І якщо вони відрізняються повертати true, а якщо ні то false. На скільки це вирішення є правильним?)
Я бы в задачке массив перегнал в сет и потом тупо размеры массива исходного сравнил и сета. Если не равны размеры, значит есть повторные элементы, хотя думаю можно еще оптимальнее найти решение
Да, это подходящее решение.
Если только лишь присутствие самого дубликата нужно, то конкретно здесь вообще можно взять и сложить значения в этих двух массивах и вычесть один из другого)
@@robmoor7992 можно ещё проще :)
Мне кажется можно создать Set вне цикла for, а в цикле добавлять элементы в множество, вроде метод add возвращает false, если дубликат обнаружен.
то же решение в голову пришло.
Тоже хочу интервью! Но не готов...
А вот если б кандидат предложил такое решение это ок или нет ?
public static boolean containsDuplicate(int[] arr) {
Set integerSet = new HashSet();
for (Integer x : arr) {
integerSet.add(x);
}
if (integerSet.size() < arr.length) {
System.out.println("Duplicate");
return true;
}
System.out.println("No Duplicate");
return false;
}
А что не так с Application / Websocket bean scope? Spring 5 же, хотя я тоже чаще всего не упоминаю их
С ними все так - это в интервьюеры сейчас понабирали по объявлению в газете ))
Уже поднимали вопрос - такие скоупы есть по документации с 5й версии
39:53 этот взгяд))
Set set = new HashSet(Arrays.asList(int []));
if (int[].length != set.size()) return false;
Сложность О(N). Так?
Евгений Доколен а вы уверенны что ваш код работает?
@@user-hq3zr7ew3t ну я чисто по памяти накидал сразу сюда. Не проверял, но почти уверен, что на основе массива можно сделать коллекцию, а её передать в сет.
@@Finger85 Set set = new HashSet(Arrays.asList(int [])); из этой строчки получится Set
@@Finger85 Можно через stream
Set collect = Arrays.stream(nums)
.boxed()
.collect(Collectors.toSet());
return collect.size() < nums.length;
А я думал отсортировать и сравнить первые два значения.
Алгоритмическая сложность будет O(n^2)?
Советская школа -Мир Мы возьмём количеством)
Вот и отличный пример, что значит, много читать и мало писать код.
Если слабый джун готов месяц два работать за нулевой оклад -каковы шансы?
Евгений, а Вы прикрепите в комменты фидбек 🧐???
Да, конечно, Михаил.
Eugene Suleimanov благодарю:-) .
С февраля в джаве го мок интервью)))
Пишите на почту proselytear@yahoo.com - обсудим :)
А насколько адекватное решение с дубликатами будет, если отсортировать массив и потом сравнивать элементы?
Высокая временная сложность - я бы не использовал этот подход. Эта задача решается за линейные время.
@@EugeneSuleimanov А если просто на основе массива создать коллекцию HashSet и потом сравнить количество элементов в ней и в массиве?
@Tiger BitMobix а какая сложность quicksort в худшем случае?)
все могло закончиться очень просто:
добавляем значения масива в сет интеджеров и в return сравниваем размер сета с размером масива
но это я сейчас такой умный, обычно на собесах все валяться на таких задачках в кодшейре из-за дополнительгого давления ситуации
Тяжеловат Set для такой задачи, если спросят на собесе вас подобное, предложите 2 решения, и объясните разницу, и дайте оценку сложно двум алгоритмам. Так найс будет.
а где краткое резюме по интервью? взял бы его к себе?
Есть над чем поработать. Если закрыть пробелы, то да.
@@EugeneSuleimanov там одни пробелы))
Это ещё одно подтверждение, что Java нужно изучать по книгам, а не по Ютубу.
Но у тебя канал классный, профессиональный подход.
@@EugeneSuleimanov кстати, у тебя же было решение этой задачи на дубликаты в массиве, странно что он её не смотрел.
тяжкое какое то интервью вышло) ненавижу когда такой тупняк начинается в реальной жизни)
Там хороших месяца полтора изучения)
Мало парень читал habr
Просто прошелся по курсу на ютубе
По задаче: можно сделать мапу, где ключ - long, а значение boolean. Таким образом мы проходим 1 раз по массиву и записываем в массив значение true, если оно было false, иначе выдаём результат, что дубликаты есть
паренька то в итоге взяли ?
Я бы напрягалась, когда Евгений наклоняет голову вниз и смотрит очень строго 😅 да, я понимаю, что ты просто сосредоточен)
На самом деле, очень терпеливый и хороший интервьюер
Евгений, вы - злой))) парень немного плавает в основах, а вы ему: расскажи про паттерн Стратегия!
И добавлю... Несмотря ни на что, и этот, и все предыдущие кандидаты смелые парни, идут на собеседование, понимают, что могут и замешкаться, и выглядеть не очень, а интервью тем не менее будет выложено в сеть. С таким подходом они точно устроятся на работу, потому что пробуют, пытаются. А иные лишь комменты пишут , вроде меня)))
Успехов Максим, почитай еще, попиши код, куча есть сайтов с задачками - тренируйся!
кстати, во внутреннем цикле "int k = i++" - изменит значение i, которое выше, "int k = i + 1" - не изменит
пум-пурум-пурум
Мдээээ... Впечатление тяжжжкое. С одной стороны, рассуждают о вещах, о которых я даже понятия не имею, а с другой - задача, которую я сделал пока коллеги разбирали как будет называться внешний цикл :)
Правда, у меня под рукой был чай и не было стресса :))
ВотЪ:
public static boolean containsDiplicates(int[] array) {
Set set = new HashSet();
for(int item:array){
set.add(item);
}
return (set.size() != array.length);
}
Решение плохое по производительности, зато печатать не много :)
Жестко что после 2 лет изучения Java кандидат не может написать простой for.
Тут всё-таки надо понять, что у всех два года "разные". Один относительно молодой человек ходит в ВУЗ и на постоянной основе, как на работе на фултайме, что-то вкладывает себе в голову по теме. Да ещё и закрепляет лабами/экзаменами и прочими дедлайнами.
Другой (возможно по-старше) уже где-то работает далеко от ИТ, имеет семью, детей, бытовые заботы. И вот, если часов 8-10 за неделю выкроит, чтобы что-то изучуть/покодить - то уже хорошо. А иногда и их нету.
Так что сильно ровнять не стОит.
Смотря что изучать и как далеко уходить от непосредственно кода) Я перед своим самым первым собесом, там жестко обмазался спрингом , хибернейтом и другими попсовыми штуками, что на доске не смог даже с первого раза рекурсию написать по заданному условию) просто потому что не писал ничего на рекурсии и не читал ничего про нее, последний раз ее делал много лет назад в колледже
В задаче массив сортировать надо и сравнивать значение с предыдущим. В худшем случае O(n). Easy peasy))
а сортировка тебе бесплатно дается? уж тогда делаешь set идешь по массиву и складываешь туда все числаб предварительно дергаешь contains. и если true то выход
@@user-b0b1 Если будешь заниматься boxing/unboxing как в данном случае, то беда будет, где свыше миллиона значений, плюс дублирующая коллекция, проще и дешевле отсортировать массив в данном случае)
Можно я просто напишу тебе, что ты новичек 😂, и на этом закончим.
@@user-b0b1 себе это напиши, "умник" хренов
@@MsDemoy еще раз посмотри мой первый комментарий! на первое предложение! если для тебя сортировка - это бесплатная операция, то мне не о чем с тобой разговаривать, но если ты упорный то ради интереса создай коллекцию на миллион значений и замерь время сортировки, если не хватает ума загуглить сложность алгоритма сортировки! про анбоксинг промолчу вообще, но опять же если тебя прям эжто так трогает сильно то погугли ключевое слово Trove - как пример, что можно сделать любую коллекцию примитовов и реализуя такую в этом примере. хотя по опты скажу она не даст тебе особо здесь перфоманса! и третье есть решение еще быстрее, но для нее нужно очень много памяти) прям очень. и оно чисто теоретическое))) берешь создаешь массив байтов максимальной длины и в него по индексу (индекс - это число в исходной таблице) пишешь 1 предварительно проверяя что там 0. если не 0 - то выход = тру! но это так ради интереса подумать как можно ускорить - а так два решения 1 - Set.of(array) и сравнить длину с исходной и 2 как я пописал вначале. какое и где луче уж подумай сам
phaser спрашивать у джуна??? Далеко не всякий сеньер ответит, и еще меньше кто его использовал
Труд, упражнение своих сил есть необходимое условие жизни.
Человек может заставить других делать то, что ему нужно, но не может освободить себя от телесной потребности работы.
Если он не будет работать нужное и разумное, он будет работать ненужное и глупое.
Константиная сложность это 5
Барабанная дробь 😅😅😅
У собеседуюшего звуки речи сливаются с фоновим гулом.
Прошел бы такое собеседование, но не на камеру. Ну его нафиг позориться на весь ютуб)
Для двух лет, Макс отвечал слабенько, многие очевидные вещи, которые он должен был усвоить, и которые чисто логически просятся на язык, он не понимает. Видимо сильно халтурил, когда изучал коре.
Пробелы, конечно, есть, но стоит учитывать, что собеседование - это всегда стресс и отвечать сложнее)
@@EugeneSuleimanov я сам только вот устроился java junior, понимаю, но парень даже цикл написать нормально не смог, не видит что пишет условия для бесконечного количества итераций, я к тому, что я не верю, что он занимался 2 года. Получается, что он самостоятельно скорее всего не пытался что то писать, решать задачки, на leecode.com например. Просто я за 7 месяцев обучения, по книгам и видео курсам на ютубе, выучил уже почти все паттерны, а уж такие элементарнейшие задачки как в данном видео, даже не решаю, они уже ничего не дают, ни опыта, ни скила.
@@EugeneSuleimanov кстати паттерны учил по твоим видео, как и hibernate по твоему сайту ) За это тебе огромное спасибо! )
@@user-zi2sl7jh3t спасибо за отзыв! Рад, что материал оказался полезен :)
@@user-zi2sl7jh3t блин, чувак, никто не против, что ты мистер умник и мистер красавчик. Но тебе не кажется, что это не честно по отношению к Максу? Он решился и прособеседовался, никак не ожидая, что это будет поводом для мелочного хвастовства другого. Как по-твоему, такие комменты (критикующие) как ты написал, много народа привлекут прособеседоваться у Евгения?
Чет слабо для 2 лет...очень слабо
Рукалицо
привет, Евгений,
респект за видосы, крутой формат.
обратил внимание, что в документации Spring сейчас есть скопы о которых говорил Максим (application и websocket)
docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes