Тестовое собеседование Java разработчика #24 - Никита Ким

Sdílet
Vložit
  • čas přidán 4. 07. 2024
  • Кандидат - будущий Java разработчик - Никита Ким.
    Никита изучает Java стек и планирует в ближайшее время стать backend инженером.
    Материалы для разработчиков:
    proselyte.net/
    Телеграмм канал для общения:
    t.me/pse_club
    00:00:00 Знакомство
    00:01:33 Что мы знаем о методе main?
    00:04:18 Что такое массивы в Java?
    00:06:14 Какой класс реализует динамический массив в Java, и что мы можем про него рассказать?
    00:12:22 За счет чего NIO обеспечивает неблокируемый доступ к ресурсам?
    00:14:00 Как работает CopyOnWriteArrayList
    00:15:00 Что такое Stream в контексте Stream API?
    00:16:18 Какие отличия между методами map и flatMap?
    00:19:15 Что такое функциональный интерфейс?
    00:20:03 Что такое лямбда?
    00:24:00 Что такое ExecutorService, для чего он нужен и какие реализации у нас есть?
    00:25:45 Что “скрывается под” буквой O в SOLID?
    00:27:19 Какие отличия между шаблонами ООП Стратегия и Состояние?
    00:28:13 Решение алгоритмической задачи
    00:41:33 Что такое группировка в БД? Примеры.
    00:49:00 Что такое ORM и какие есть реализации?
    00:50:14 Какие уровни кэширования есть в Hibernate?
    00:53:05 Как происходит запуск Spring Boot приложение?
    00:55:10 В чем разница между юнит и интеграционными тестами?
    00:57:07 Что такое Docker?
    00:58:02 В чем отличия между Docker и виртуальной машиной?
    00:58:49 Ответы на вопросы кандидата.
    00:59:23 Финал.

Komentáře • 84

  • @ibraim3197
    @ibraim3197 Před rokem +15

    не бывает сортировки за log(n), лучший алгоритм как раз n*log(n)

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +7

      Да, вы правы - здесь ошибка.
      Сложность по времени - N log N
      Сложность по памяти log N
      Спасибо за уточнение.

    • @LacqueredNoCap
      @LacqueredNoCap Před rokem +2

      Уточнение. За O(n*log(n)) отрабатывают сортировки сравнением. Есть такие алгоритмы сортировки подсчетом, как Counting Sort и Radix Sort, которые могу отработать за O(n) при определенных ограничениях на входные данные (диапазон значений, символьная длина значений). Буду рад уточнению на свой комментарий

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem

      @@LacqueredNoCap
      Спасибо за комментарий :)
      Если мы говорим про числа, и конечно radix sort будет лучше. В то время, как тот же quickSort - универсальный алгоритм.

    • @user-bn9wc8db6s
      @user-bn9wc8db6s Před rokem

      Евгений, спасибо за Ваш труд👍👍👍
      Хотел бы пожелать всем удачи и терпения💪👍👍

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +1

      @@user-bn9wc8db6s спасибо за отзыв!

  • @user-lx4dc1ls3e
    @user-lx4dc1ls3e Před rokem +13

    Не успел посмотреть ролик!!!
    Но нет сомнений в качестве!!!
    Просто Евгению с ходу ЛАЙКОС👍👍👍

  • @voker8465
    @voker8465 Před rokem +2

    Спасибо большое, Евгений, что снова начали делаеть видео и писать статьи на сайте . Очень понравилось про jvm и volatile 😊

  • @user-yt6vv9vf3x
    @user-yt6vv9vf3x Před rokem +3

    Евгений, в очередной раз спасибо.
    Классные вопросы подбираешь.
    Есть что мне нужно повторить и более детально разобрать.

  • @user-mt2if1ht8n
    @user-mt2if1ht8n Před rokem +5

    Главная страница на ютюбе в роликах Евгения - это прекрасно, значит ролики идут стабильно.
    В целом у меня это проф деформация какая то.
    когда на главной только видео по жаве и расту чувствую себя комфортно ))
    Евгений, вы знаете,что делаете большое дело. Спасибо!
    Не пропадайте пожалуйста

  • @Batyrbala
    @Batyrbala Před rokem +2

    Каждое видео - на вес золота для начинающих! Спасибо за труды, сенсэй!)

  • @JavaDevOld
    @JavaDevOld Před rokem +11

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

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +1

      Спасибо за отзыв!

    • @askhat1654
      @askhat1654 Před 6 měsíci

      И операционные системы и модель OSI тоже не помешает

  • @SvetlanaCapri
    @SvetlanaCapri Před rokem +1

    Спасибо большое за отличные ролики.

  • @user-wd3zb7bb6x
    @user-wd3zb7bb6x Před rokem +1

    Спасибо за видео :)

  • @alexanderkomanov4151
    @alexanderkomanov4151 Před rokem +1

    Спасибо вам большое!

  • @alenache1
    @alenache1 Před rokem +8

    огонь 🔥🔥🔥

  • @alevadnaya
    @alevadnaya Před rokem

    Спасибо за видео!

  • @user-mx8cs7ox9m
    @user-mx8cs7ox9m Před rokem +3

    Интервью очень понравилось) Никита крут
    Также было видно эмоции/реакции Евгения, в этот момент понимаешь, правильно ли отвечает Никита. Особенно с вопросом про docker, что это виртуальная машина. Ведь у Евгения есть отдельное видео посвящённое Docker'у, где он специально подчеркивал, что Docker - не виртуальная машина =)
    Спасибо за видео, жду новое)

  • @nikitakhmileuski3639
    @nikitakhmileuski3639 Před rokem

    Спасибо за видео!Видно было что Никита переживал) особенно на sql.Сразу вспомнил себя на первых собеседованиях.

  • @divergenny
    @divergenny Před rokem +1

    Спасибо большое

  • @user-og2ti2wd5o
    @user-og2ti2wd5o Před rokem

    гарне інтерв'ю. Дякую за роботу

  • @axelrod4840
    @axelrod4840 Před rokem +6

    дякую за відео, освіжають память та можна дізнатись прогалини в своїх заннях)

  • @flatmapper
    @flatmapper Před rokem +1

    Спасибо

  • @ioanntrapeznikov
    @ioanntrapeznikov Před rokem +1

    Реакция на ответ на 42:26 топ )))

  • @floydzxc
    @floydzxc Před rokem +1

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

  • @engend3405
    @engend3405 Před rokem +3

    Топ )
    20:24:00 поправь плз )

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +1

      Сделано, спасибо за исправление :)

  • @user-qr4uy2dt5z
    @user-qr4uy2dt5z Před rokem

    Вопрос: каков ваш фидбек? На момент интервью вы бы взяли такого инженера на позицию Junior, если нет то что нужно подтянуть, мне почему то кажется что до февраля 2022 с таким уровнем и на junior+ можно было устроиться, сейчас требования растут постоянно.

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem

      На позицию trainee-junior позицию вполне можно брать кандидата. Немного подтянуть некоторые моменты - и можно было бы ставить на проект.

  • @user-hedonist2020
    @user-hedonist2020 Před rokem

    Евгений, частные уроки даёте?

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +2

      "Ответил в ЛС" © :)
      Если серьезно - напишите. пожалуйста, на почту proselytear@yahoo.com или telegram: @proselyte
      Сможем обсудить более детально.

  • @MrSashaZykov
    @MrSashaZykov Před rokem +4

    На 27:16. Можете пояснить почему мы нарушаем принцип Лисков, ведь класс другой и метод новый (не наследуемый). В этом классе же все методы родителя остаются и можно подставлять объект класса вместо родителя, не пойму в чем потенциальная опасность. Да и в чем тогда смысл наследования если не могу метод добавить)

    • @LacqueredNoCap
      @LacqueredNoCap Před rokem

      Если в данном примере мы обращаемся к объекту класса В по интерфейсу класса А, то LSP не нарушается. Потенциально может быть нарушен SRP, если новый метод будет предназначен для взаимодействия с другим актором

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem

      Мы не нарушаем - мы потенциально можем его нарушить, но для этого нужно очень постараться.
      Пример, есть 3 класса
      A
      B extends A
      C extends A
      В класс C мы добавляем публичный метод test100500 и в классе-клиенте "завязываемся" на него. После этого - заменить C классом B без рефакторинга мы уже не сможем.

    • @MrSashaZykov
      @MrSashaZykov Před rokem +1

      @@EugeneSuleimanov Спасибо за пояснение. Я вроде так и представлял, что в задании имелось в виду. Представлял принцип Лисков, как вместо родителя пихаем наследника, а вместо наследника пихать родителя это ваще что-то другое и так не надо никогда)

    • @LacqueredNoCap
      @LacqueredNoCap Před rokem

      @@EugeneSuleimanov Пример хороший, но он не относится к LSP, т.к. B и C не связаны между собой иерархией наследования, а LSP как раз про это

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +1

      @@LacqueredNoCap но они связаны с классом А, если я не ошибаюсь - это относится к LSP

  • @user-qy2ik8ju3s
    @user-qy2ik8ju3s Před rokem

    Есть пара вопросов к реализации проверки на палиндром. Или я чего-то не понимаю, или нет перехода к единому регистру, ведь по условию 'f' и 'F' -- одинаковые буквы, но в вашей реализации они будут считаться различными. Также, по первому примеру видно, что пробельные символы вообще учитываться не должны, но в вашей реализации это не учитывается, т.е., я предполагаю, что на первый пример будет выведено false даже если бы в нём все буквы были одного регистра

    • @user-qy2ik8ju3s
      @user-qy2ik8ju3s Před rokem

      Также, условие в цикле while можно сделать строгим

  • @overdrive5772
    @overdrive5772 Před rokem +2

    Спасибо за видео, кину мою реализацию алгоритма)
    public static boolean isPalindrome(String s) {
    for (int i = 0; i < s.length() / 2; i++)
    if (s.charAt(i) != s.charAt(s.length() - i - 1))
    return false;
    return true;
    }

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +1

      Спасибо за отзыв :)

    • @LacqueredNoCap
      @LacqueredNoCap Před rokem +3

      Еще нужно не забыть добавить исключение всех небуквенных значений из строки и приведение ее к одному регистру. Я бы сделал стандартно через Java API: String generalizedString = s.toLowerCase().replaceAll("[^a-z]", "");

    • @ifFamous
      @ifFamous Před rokem

      @@LacqueredNoCap Вообще написано, что эти чары содержат как буквы, так и числа.
      Objects.requireNonNull(s);
      String result = s.toLowerCase()
      .replaceAll("[^a-z0-9]", "");
      if (result.isEmpty() || result.length() == 1) {
      return true;
      }
      return new StringBuilder(result)
      .reverse()
      .toString()
      .equals(result);
      Ну или можно сделать с циклом, первое решение с ним и сделал.
      Я когда решение парня увидел, подумал, что может я чего-то не понял и нагородил xD Ан нет)

  • @MrRomanvideo
    @MrRomanvideo Před rokem +2

    А почему тогда в хешмапе при 0.75 увеличиваем по той же логике, что остальные будут простаивать!? Типа запас на неточность хэшкода!?

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +2

      Потому что при большом количестве заполненных бакетов мы начинаем терять время на поиск бакета для нового хешкода. Поэтому имеет смысл расширять при заполнении 75%.
      В динамическом массиве такой необходимости просто нет :)

    • @MrRomanvideo
      @MrRomanvideo Před rokem

      @@EugeneSuleimanov а разве индекс банкета не однозначно определяется хэшкодом?

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem

      @@MrRomanvideo да, вы правы. Нужно было написать - новый хеш-код :)

    • @shluhogon_42
      @shluhogon_42 Před rokem +1

      Так тут же вопрос производительности. Если делать лод фактор, равный 1, то к моменту заполнения всех корзин мы все чаще будем поучать коллизии. И наоборот, если сделать это значение, например 0,5, то будем терять время на неоправданно частом перестроении структуры. 0,75 - оптимальный коэффициент

  • @JavaDevOld
    @JavaDevOld Před rokem

    Евгений, простите за беспокойство. У меня есть вопрос по многопоточности... Никто не смог на него определенно ответить. Если не будете против, хотел бы задать его Вам..... СПС))))))

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem

      Конечно - пишите сюда иди в ТГ - попробую помочь :)

    • @JavaDevOld
      @JavaDevOld Před rokem

      @@EugeneSuleimanov СПС. Вопрос будет длинный

  • @maxmus91
    @maxmus91 Před rokem

    это собеседование джуна :?

  • @AlejandroFedorov
    @AlejandroFedorov Před 11 měsíci

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

  • @fara0n333
    @fara0n333 Před rokem +1

    Hi! Good job 👍 It’s interesting 😎

  • @ktotam8913
    @ktotam8913 Před rokem +1

    мое убогое решение😪
    class Palindrome {
    public static boolean isPalindrome(String str) {
    Pattern pattern = Pattern.compile("\\w");
    Matcher matcher = pattern.matcher(str);
    StringBuilder stringBuilder = new StringBuilder();
    while (matcher.find()) {
    String newStr = matcher.group().toLowerCase();
    stringBuilder.append(newStr);
    }
    String s = stringBuilder.toString();
    for (int i = 0, k = s.length()-1; i < s.length() / 2; i++, k--) {
    if (s.charAt(i) != s.charAt(k))
    return false;
    }
    return true;
    }
    public static void main(String[] args) {
    System.out.println(isPalindrome("A car, A plan: A Panama")); //false
    System.out.println(isPalindrome("A c, A")); //true
    System.out.println(isPalindrome(" ")); //true
    }
    }
    ps. нет времени учить теорию наизусть, ментор задачами заваливает. когда смотрю, как ребята отвечают на вопросы, типа буква О в SOLID грусть, тоска, депрессия подкрадывается, времени не хватает на это учить пока что, но чтобы поднять настроение, вспоминаю, что опытные программисты создавали RUTUBE ))))))

    • @EugeneSuleimanov
      @EugeneSuleimanov  Před rokem +1

      Спасибо за комментарий!
      Если мы выделяем StringBuilder - проще просто вызвать у него reverse и сравнить строки после удаления «лишних» символов :)

    • @ktotam8913
      @ktotam8913 Před rokem

      @@EugeneSuleimanov сорян, стараюсь руку набить на Pattern/Matcher)

  • @a.e.9880
    @a.e.9880 Před rokem +2

    Странное ощущение когда со всем этим работаешь а территорию знаешь хуже😂.