[Ответы] Java Junior реальное собеседование | Collection API | Часть 3

Поделиться
HTML-код
  • Опубликовано: 6 июл 2020
  • В этом видео я дам ответы на вопросы из 3 части видео с реального собеседования на Junior Java Developer. Сollection API - наверное самый горячий топик на Java cобеседовании, поэтому относиться к нему стоит также с особой внимательностью
    Видео с собеседованием: • Java Junior реальное с...
    Надеюсь каждому из вас будет полезно послушать информативную часть, а также взять себе на заметку, как примерно нужно отвечать на собеседовании.
    Тайм-коды:
    0:55 List vs ArrayList vs Linked List
    5:31 LinkedList альтернативное применение
    9:54 HashMap подробно
    14:21 Про хэш код
    15:46 Когда 2 разных объекта могут дать одинаковых хэшкод
    17:58 Контракт equals & hashCode
    18:41 LinkedHashMap что это
    Друзья! Напишите в комментариях какой вопрос для вас был самым сложным и почему?

Комментарии • 91

  • @itwithvitaly
    @itwithvitaly  3 года назад +16

    Тайм-коды:
    0:55 List vs ArrayList vs Linked List
    5:31 LinkedList альтернативное применение
    9:54 HashMap подробно
    14:21 Про хэш код
    15:46 Когда 2 разных объекта могут дать одинаковых хэшкод
    17:58 Контракт equals & hashCode
    18:41 LinkedHashMap что это

  • @user-pn5vw7rs5m
    @user-pn5vw7rs5m 3 года назад +4

    Очень радует, как быстро выходит качественный контент. Я счастлив

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Сергей Чамкин Спасибо)

  • @sno-oze
    @sno-oze 3 года назад +28

    Природа настолько очистилась, что Виталий вернулся на youtube.

  • @KX-nn7tq
    @KX-nn7tq 3 года назад +3

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

  • @JGolt
    @JGolt 2 года назад

    Очень хорошее видео. Спасибо большое за ответы!

  • @Krasnolesye
    @Krasnolesye 2 года назад +1

    быстро ввел в курс дела.
    Спасибо! и за Тайм-коды отдельное

  • @svetlanamazhaykina6918
    @svetlanamazhaykina6918 4 месяца назад

    Спасибо за Ваш труд! Коммент в поддержку канала.

  • @zabidabi7076
    @zabidabi7076 3 года назад +2

    Очень хорошое видео!

  • @meison7969
    @meison7969 3 года назад +2

    За контент лайк не глядя!!

  • @kapralovdenis7800
    @kapralovdenis7800 3 года назад +13

    Спасибо большое, очень полезно. Хотелось бы больше вопросов и больше разбора этих вопросов. Продолжай в том же духе! И хотелось спросить, по Spring задают вопросы на собеседовании?

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Спасибо! Да, спрашивают про Spring. На Trainee (практиканта) могут бегло спросить/вообще не спросить, а если это уровень Junior и выше то Spring это обычно must have.

  • @dmii3iy
    @dmii3iy Год назад

    Спасибо, очень интересно

  • @evilenot
    @evilenot 2 года назад +1

    Формат очень интересный, помогает хоть немного представить как проходят собеседования
    Только вот не удается найти видео с разбором 2-й части собеседования. После первой сразу идет третья

  • @georgewhite3708
    @georgewhite3708 3 года назад +1

    Крутое видео, спасибо! Единственное что хотел добавить, это насчет LinkedList vs ArrayList. Когда тестил, то во абсолютно во ВСЕХ случаях ArrayList лучше, кроме модификаций в начале Листа))

    • @Deadly_Darkness
      @Deadly_Darkness 2 года назад

      Это в новых версиях оптимизировали ArrayList, поэтому его можно использовать практически всегда.

    • @user-lh3po3et2q
      @user-lh3po3et2q 2 года назад

      @@Deadly_Darkness здраствуйте, а можете уточнить с каких именно версий он оптимизирован?

  • @vadymzdanovych1337
    @vadymzdanovych1337 3 года назад +6

    Привет.
    Было бы не плохо разобрать HashMap с большим потоком данных с явной коллизией.
    Спасибо!!!

  • @nastennn
    @nastennn 2 года назад +1

    Спасибо!

    • @itwithvitaly
      @itwithvitaly  2 года назад

      Так и нужно, я в документе который оставил под видео дал подсказку на счет этого :)

  • @user-qx3jt8fw1v
    @user-qx3jt8fw1v 2 года назад

    Спасибо

  • @anatoliitaran5357
    @anatoliitaran5357 3 года назад +3

    Крутое видео, сам сейчас веду активную подготовку к собесу. Побольше бы вопросов и ответов на них из розряда "Как устроена JVM? Classloader'ы, участки памяти, GC и их типы, Concurrency API (тема достаточно обширная, как и в коллекции есть много интересных фич), IO/NIO, JDBC/Hibernate/JPA ну и наш любимый Spring. Тебе - мотивации в создании контента.

  • @user-uz1vk3oo6h
    @user-uz1vk3oo6h 3 года назад

    Видео информативно. Спасибо. И как по мне то формат оптимальный особенно с практической стороны. Вопросик по LinkedList - альтернативе. Какие то конкретные примеры из проектов, задачек. А то я например 1.5 года изучаю java, и к сожалению, ни одного толкового применения LinkedList не встречал.

    • @yanslow9083
      @yanslow9083 Год назад

      Значит не было кейсов, поговори с коллегами, если такой интерес, в принципе, можешь глянуть, что по этой теме сказал, создатель линк листа Joshua Bloch

  • @Olga150596
    @Olga150596 3 года назад +2

    большое спасибо! видео позволило быстро повторить многое!!

  • @yerassylkelsingazin2408
    @yerassylkelsingazin2408 3 года назад +5

    Класное видео! Четкий звук и хороший материал! Java core это хорошо, но вопрос, будешь ли проводить интервью с дальнейшими [Ответами] по фреймворкам Spring, Spring MVC, Spring Boot, Hibernate и т.д. ? Было бы замечательно.

    • @itwithvitaly
      @itwithvitaly  3 года назад +3

      Спасибо! В интервью которое я разбираю небыло вопросов по технологиям, но с я радостью с кем-нибудь из подписчиков его запишу и потом выложу сюда на канал с разборами. Думаю скоро возьму несколько людей из подписчиков (кто захочет) на тестовое собеседование, не только по Java Технологиям, но и по общим вопросам (Паттерны, Парадигмы, HTTP, WEB и тд), а также по JS, React.js, Front End

    • @itwithvitaly
      @itwithvitaly  3 года назад +2

      Yerassyl Kelsingazin В общем да, в дальнейшем точно будут

    • @user-vt4cs6yw7o
      @user-vt4cs6yw7o 3 года назад +3

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

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      В августе не планировал записывать интервью, а вот в сентябре можем.
      Но только учти в этот раз будут технологии: Spring Сore, Spring Data, Spring MVC, Spring AOP, Hibernate, Maven, Patterns, Git etc. Пиши мне в сентрябре, обсудим, а пока готовься :)

    • @user-vt4cs6yw7o
      @user-vt4cs6yw7o 3 года назад +1

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

  • @yuliyakanonchyk3931
    @yuliyakanonchyk3931 3 года назад +3

    Спасибо за ваши уроки. Нравятся ваши объяснения. Было бы классно, если бы вы продолжили эту тему и показали нам 100% :) вопросов, которые задают на собеседовании.
    Все это конечно можно найти и в написанном виде, но я аудиал и читать я долго не могу, а вот слушать - всегда пожалуйста.
    Успехов вам!

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Здравствуйте, спасибо! Скоро будут и другие ответы и интервью :)

  • @Katar1x
    @Katar1x 3 года назад +3

    А как все это можно знать, просто изучая java. Я к тому, что так может ответить ТОТ джун, который уже работал. А если это первое собеседование?

  • @Daniel-mo1iy
    @Daniel-mo1iy Год назад

    Как бы это все не забыть)) вроде знаешь, но боишься забыть. А спрашивают про реализацию set внутри ? . Там нужно сказать, что в одном из дженериков подставляется Object? И хранится только по ключу

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil Год назад

      Прогоняешь примеры обязательно. Так запоминается лучше

  • @user-vt4cs6yw7o
    @user-vt4cs6yw7o 3 года назад +5

    Все гуд, только в хештаблице не линкедлисты лежат, а ноды у которых есть поле/ссылка на следующую ноду. По крайней мере в восьмой джаве.

    • @itwithvitaly
      @itwithvitaly  3 года назад +5

      Олег Павлюков Все верно, я имел ввиду не класс LinkedList, а структура данных связный список, который на англ называется linked list :) Нода которая ссылается на следующую ноду это и есть связный список

    • @user-vt4cs6yw7o
      @user-vt4cs6yw7o 3 года назад +4

      @@itwithvitaly согласен, но думаю это стоит уточнить, а то думаю некоторые уже представили у себя в голове какой то массив LinkedList, что полный фэйл на собесе)

    • @alexsav7427
      @alexsav7427 3 года назад +1

      @@itwithvitaly а при достижении определенного порога с java 8 связный список меняется на дерево, верно?

  • @vitamin2845
    @vitamin2845 3 года назад

    Можете объяснить, как правильно реализовывать функцию hashCode для своего класса? Как генерить это число? На основе чего?

  • @alexanderlojhkin8997
    @alexanderlojhkin8997 3 года назад +2

    Ну а что собственно мешает сделать стек из ArrayList? Например таким образом: push - list.add(item); pop - item=list.remove(list.size()-1);

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Мы можем многое, а есть ли в этом смысл? :)

    • @skycruiser8121
      @skycruiser8121 2 года назад

      memory reallocations + копирование остального содержания внутреннего массива из старого в новый

  • @parallax9930
    @parallax9930 3 года назад +1

    14:48, хэш объекта вычисляется на основе его адреса в памяти, а не на основе его полей, equal в свою очередь сравнивает объекты также по их адресам в памяти, поправьте если ошибаюсь

    • @itwithvitaly
      @itwithvitaly  3 года назад +2

      David David Хешкод по дефолту возвращает адрес объекта в памяти все верно, про equals тоже верно. Но, для корректной работы хешмапы всегда нужно переопределять equals & hashCode , типичная реализация последнего - сделать калькуляцию на основе полей

    • @parallax9930
      @parallax9930 3 года назад +1

      ​@@itwithvitaly, для String логичен переопределённый equals. а для чего переопределять эти методы для hashmap'а ? там и так всё нормально работает. имхо это фанатизм получается =)

  • @vetalnosarev1710
    @vetalnosarev1710 3 года назад +2

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

    • @itwithvitaly
      @itwithvitaly  3 года назад +2

      При идеальном раскладе 1 баскет - 1 элемент (без коллизий) в таком случае там будет просто один элемент и структура данных там особо не нужна. Изначально там создается линкед лист (структура данных, а не класс LinkedList) при возникновении коллизии, а в случае если их слишком много то лист переформируется в дерево, там прямо в исходниках есть условие после какого кол-ва коллизий (элементов в баскете) линкед лист переформируется в дерево. С их стороны довольно логично было переформировывать линкед лист в дерево, ведь поиск элемента по дереву происходит быстрее, чем в линкед лист.

    • @itwithvitaly
      @itwithvitaly  3 года назад

      А вообще если вам интересны нюансы, то можете открыть исходники HashMap и посмотреть там метод put() там достаточно читаемо написано и в целом можно разобраться, если что непонятно - спрашивайте

    • @vetalnosarev1710
      @vetalnosarev1710 3 года назад +1

      @@itwithvitaly просто если так то не понятно на каком этапе появляется дерево и не понятно чем структура отличается от массива если линкедлист нужен только при коллизиях. Обязательно посмотрю исходники. Спасибо за обратную связь

    • @vetalnosarev1710
      @vetalnosarev1710 3 года назад

      Не от массива а от листа. Мог бы быть хешлист с необычным расчетом индекса

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Vetal Nosarev Дерево появляется когда кол-во коллизий в баскете превышает заданный в Джаве порог (константу), насколько я помню так что-то около 8 элементов. В момент когда коллизий нет вы правы, это по сути массив с 1 нодой, т.е. можно сказать просто массив с элементом. Если коллизии возникают, то элементы добавляются в конец и получается линкед лист, если таких элементов добавляется слишком много - реформируем лист в дерево.

  • @ioksi4371
    @ioksi4371 2 года назад

    Привет
    На сколько я знаю - в хэшмапе односвязный список, а не линкед лист )

  • @Wooldik
    @Wooldik 3 года назад +2

    А можешь собеседования на JS разработчика?

    • @itwithvitaly
      @itwithvitaly  3 года назад +2

      Планирую сделать скоро

  • @pashkent83
    @pashkent83 2 года назад

    Почему везде говорят, что LinkedList быстрее в середину вставить? Как я понял, быстрее вставить будет в начало и в конец списка, так как основное время у LinkedList занимает именно поиск места куда надо вставлять О(n) и это время будет очень мало, если мы будем это делать в начало и в конец(так как двунаправленный список). А операция вставки занимает O(1). У ArrayList наоборот получается, если мы вставляем в начало списка, то нам придется двигать весь массив данных на одну позицию. Это займет достаточно много времени.

    • @itwithvitaly
      @itwithvitaly  2 года назад

      Потому что операция копирования дорогая по памяти и по времени для ArrayList, быстрее дойти до нужной точки (индекса) чем сделать все манипуляции с ArrayList.

  • @SplashDmg2011
    @SplashDmg2011 3 года назад +1

    "то что"

  • @BookwormYevgen
    @BookwormYevgen 3 года назад

    Зачем переопределять equals и hashCode? Пробовал оба не переопределять - работает корректно и эффективно решает вопрос коллизий, пробовал только equals переопределить - то же самое - работает корректно и эффективно.

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil Год назад

      Equals нужно переопределять если требуется чтобы какие то разные объекты давали тrue при сравнении.

  • @vladlis240
    @vladlis240 3 года назад +4

    А где вторая часть?

    • @itwithvitaly
      @itwithvitaly  3 года назад

      Ошибка в описании, это и есть вторая, поправлю

    • @MelOmaHcss
      @MelOmaHcss 3 года назад

      ​@@itwithvitaly это же третья (API итд), а во второй продолжение Java Core и нет разбора от тебя.

  • @user-ed6po3um7k
    @user-ed6po3um7k 3 года назад +1

    Где ответы второго видео?

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Ошибочка вышла , это 2 видео

  • @user-yq3co2cv9k
    @user-yq3co2cv9k 2 года назад +1

    Вот вроде послушал все вопросы - всё здорово, всё понятно, но такие фразы в конце типа это всего лишь "10-20% от всех возможных вопросов" немного убивают мотивацию) А что ещё то? Ну ладно, Stack, Queue, ... Так-то ведь почти всё почти и разобрал - нет там ничего мудрёного в коллекциях.

  • @onegin5129
    @onegin5129 3 года назад +2

    Про альтернативные применения это точно не для джуна вопрос

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Почему? Это не самый сложный вопрос честно сказать :)

    • @onegin5129
      @onegin5129 3 года назад +2

      @@itwithvitaly мне сложно представить сложно откуда начинающий программист может это знать ) сомневаюсь что в списке популярных вопросов по Java есть что то похожее

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Onegin Ну, честно сказать на джуна спрашивают и технологии типа Spring, Hibernate, там могут быть вопросы гораздо тяжелее, и их тоже на джуна спрашивают. Если человек совсем начинающий, то это скорее trainee (стажер) которого берут на практику и доучивают. У джунов обычно достаточно неплохие знания, просто нет опыта:)

  • @user-qz7vz8lq4x
    @user-qz7vz8lq4x 2 года назад +1

    ты только для контента это делаешь, зачем? Если хочешь помочь сделай видео про вся коллекцию

    • @itwithvitaly
      @itwithvitaly  2 года назад

      Это очень затратно по времени, но я думаю все же доделать

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil Год назад

      Он не помог тебе?

  • @Xokyopo
    @Xokyopo 3 года назад +1

    Я думаю что критично для программиста, это описать алгоритм любой сложности просто. А от простых знаний стандартных библиотек пользы не много, особенно если учесть что код там тоже не безупречен.

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Xokyopo Ну, плюс это или минус, но работа на коммерческом проекте это по бОльшей части знание API, а не умение писать алгоритмы.

    • @itwithvitaly
      @itwithvitaly  3 года назад +1

      Алгоритмы знать надо обязательно, а также структуры данных и базовые понятия, но это видео нацелено на разбор собеседования, а не изучения концептов :)

    • @Xokyopo
      @Xokyopo 3 года назад +1

      @@itwithvitaly в этом то и дело. Вопросы для сабесов явно не бухгалтер выдает, и тут я думаю стоит задуматься о том насколько эти вопросы хорошо помогут раскрыть кандидата.
      Вспомнить тут можно анекдот про, человека который устраивался дворником в Apple. (Ваши вопросы так же точны как в этом анекдоте.)
      Так же, можно провести аналогию с другими рабочими профессиями, вот например монтажник гипсокартона зачем ему знать как устроен шуроповер или из чего сделан гипсокартон? Это ему не поможет в работе абсолютно ничем.

    • @Xokyopo
      @Xokyopo 3 года назад +1

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

    • @JIockjoy
      @JIockjoy 2 года назад

      @@Xokyopo Прямо мысли мои прочитал, много видел на собеседование вопросов - "расскажите как устроено Map внутри, что под капотом", даже не понимая что тут же сразу этим вопросом убивают принцип черного ящика. Сам автор видео просит раскрыть секрет работы объекта с данными внутри и тут же делает пометку- "ну там какие то операции побитовых сдвигов, но это уже такое", вопрос, зачем тогда вообще смотрел если не разбирался более детально. Я бы к примеру спросил чем отличается операция на процессоре 2+2 от 2*2 ))

  • @Xokyopo
    @Xokyopo 3 года назад +4

    Сколько бы не знал учитель по "анатомии", хирург из него некудышный.

  • @Xokyopo
    @Xokyopo 3 года назад +1

    Голос - норм. Звук - норм.
    Тема только не очень.