Тайм-коды: 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 что это
Виталий, продолжай в том же духе, у тебя хорошо получается делать качественный контент по Яве чего не часто встретишь в просторах ютуба, информативно, без воды и доходчиво, вообщем спасибо, ждём ещё видосы по топ вопросам!!!!
Крутое видео, спасибо! Единственное что хотел добавить, это насчет LinkedList vs ArrayList. Когда тестил, то во абсолютно во ВСЕХ случаях ArrayList лучше, кроме модификаций в начале Листа))
Спасибо за ваши уроки. Нравятся ваши объяснения. Было бы классно, если бы вы продолжили эту тему и показали нам 100% :) вопросов, которые задают на собеседовании. Все это конечно можно найти и в написанном виде, но я аудиал и читать я долго не могу, а вот слушать - всегда пожалуйста. Успехов вам!
Крутое видео, сам сейчас веду активную подготовку к собесу. Побольше бы вопросов и ответов на них из розряда "Как устроена JVM? Classloader'ы, участки памяти, GC и их типы, Concurrency API (тема достаточно обширная, как и в коллекции есть много интересных фич), IO/NIO, JDBC/Hibernate/JPA ну и наш любимый Spring. Тебе - мотивации в создании контента.
Спасибо большое, очень полезно. Хотелось бы больше вопросов и больше разбора этих вопросов. Продолжай в том же духе! И хотелось спросить, по Spring задают вопросы на собеседовании?
Спасибо! Да, спрашивают про Spring. На Trainee (практиканта) могут бегло спросить/вообще не спросить, а если это уровень Junior и выше то Spring это обычно must have.
Олег Павлюков Все верно, я имел ввиду не класс LinkedList, а структура данных связный список, который на англ называется linked list :) Нода которая ссылается на следующую ноду это и есть связный список
@@itwithvitaly согласен, но думаю это стоит уточнить, а то думаю некоторые уже представили у себя в голове какой то массив LinkedList, что полный фэйл на собесе)
Формат очень интересный, помогает хоть немного представить как проходят собеседования Только вот не удается найти видео с разбором 2-й части собеседования. После первой сразу идет третья
Как бы это все не забыть)) вроде знаешь, но боишься забыть. А спрашивают про реализацию set внутри ? . Там нужно сказать, что в одном из дженериков подставляется Object? И хранится только по ключу
14:48, хэш объекта вычисляется на основе его адреса в памяти, а не на основе его полей, equal в свою очередь сравнивает объекты также по их адресам в памяти, поправьте если ошибаюсь
David David Хешкод по дефолту возвращает адрес объекта в памяти все верно, про equals тоже верно. Но, для корректной работы хешмапы всегда нужно переопределять equals & hashCode , типичная реализация последнего - сделать калькуляцию на основе полей
@@itwithvitaly, для String логичен переопределённый equals. а для чего переопределять эти методы для hashmap'а ? там и так всё нормально работает. имхо это фанатизм получается =)
Видео информативно. Спасибо. И как по мне то формат оптимальный особенно с практической стороны. Вопросик по LinkedList - альтернативе. Какие то конкретные примеры из проектов, задачек. А то я например 1.5 года изучаю java, и к сожалению, ни одного толкового применения LinkedList не встречал.
Значит не было кейсов, поговори с коллегами, если такой интерес, в принципе, можешь глянуть, что по этой теме сказал, создатель линк листа Joshua Bloch
Почему везде говорят, что LinkedList быстрее в середину вставить? Как я понял, быстрее вставить будет в начало и в конец списка, так как основное время у LinkedList занимает именно поиск места куда надо вставлять О(n) и это время будет очень мало, если мы будем это делать в начало и в конец(так как двунаправленный список). А операция вставки занимает O(1). У ArrayList наоборот получается, если мы вставляем в начало списка, то нам придется двигать весь массив данных на одну позицию. Это займет достаточно много времени.
Потому что операция копирования дорогая по памяти и по времени для ArrayList, быстрее дойти до нужной точки (индекса) чем сделать все манипуляции с ArrayList.
Хотел уточнить. Ранее находил информацию что в хеш мап используется массив. при выборе баскета берется "условно" остаток от деления и элементы хранятся в виде дерева, а уже в случае коллизии создается линкед лист для каждого элемента с одинаковым хешом. Подскажите, пожалуйста, ошибочно ли мое понимание или немного по иному рассказано об этой структуре в самом видео?
При идеальном раскладе 1 баскет - 1 элемент (без коллизий) в таком случае там будет просто один элемент и структура данных там особо не нужна. Изначально там создается линкед лист (структура данных, а не класс LinkedList) при возникновении коллизии, а в случае если их слишком много то лист переформируется в дерево, там прямо в исходниках есть условие после какого кол-ва коллизий (элементов в баскете) линкед лист переформируется в дерево. С их стороны довольно логично было переформировывать линкед лист в дерево, ведь поиск элемента по дереву происходит быстрее, чем в линкед лист.
А вообще если вам интересны нюансы, то можете открыть исходники HashMap и посмотреть там метод put() там достаточно читаемо написано и в целом можно разобраться, если что непонятно - спрашивайте
@@itwithvitaly просто если так то не понятно на каком этапе появляется дерево и не понятно чем структура отличается от массива если линкедлист нужен только при коллизиях. Обязательно посмотрю исходники. Спасибо за обратную связь
Vetal Nosarev Дерево появляется когда кол-во коллизий в баскете превышает заданный в Джаве порог (константу), насколько я помню так что-то около 8 элементов. В момент когда коллизий нет вы правы, это по сути массив с 1 нодой, т.е. можно сказать просто массив с элементом. Если коллизии возникают, то элементы добавляются в конец и получается линкед лист, если таких элементов добавляется слишком много - реформируем лист в дерево.
Класное видео! Четкий звук и хороший материал! Java core это хорошо, но вопрос, будешь ли проводить интервью с дальнейшими [Ответами] по фреймворкам Spring, Spring MVC, Spring Boot, Hibernate и т.д. ? Было бы замечательно.
Спасибо! В интервью которое я разбираю небыло вопросов по технологиям, но с я радостью с кем-нибудь из подписчиков его запишу и потом выложу сюда на канал с разборами. Думаю скоро возьму несколько людей из подписчиков (кто захочет) на тестовое собеседование, не только по Java Технологиям, но и по общим вопросам (Паттерны, Парадигмы, HTTP, WEB и тд), а также по JS, React.js, Front End
@@itwithvitaly ну в моем собесе такие вопросы были, только я на большинство ответов не знал) Предлагаю перезаписать интервью, если ты старое не начал обрабатывать) Теперь должно быть интереснее, я чуть больше уже знаю)
В августе не планировал записывать интервью, а вот в сентябре можем. Но только учти в этот раз будут технологии: Spring Сore, Spring Data, Spring MVC, Spring AOP, Hibernate, Maven, Patterns, Git etc. Пиши мне в сентрябре, обсудим, а пока готовься :)
@@itwithvitaly ну в сентябре видно будет) Я подтянул темы с которыми у меня были проблемы на прошлом нашем собесе касательно бута, хибера и мавена и собираюсь на реальные собесы пробоваться в августе) Из списка по сути уже все есть, кроме внутренней кухни даты и аоп, так что до сентября подготовлюсь точно)
Зачем переопределять equals и hashCode? Пробовал оба не переопределять - работает корректно и эффективно решает вопрос коллизий, пробовал только equals переопределить - то же самое - работает корректно и эффективно.
Вот вроде послушал все вопросы - всё здорово, всё понятно, но такие фразы в конце типа это всего лишь "10-20% от всех возможных вопросов" немного убивают мотивацию) А что ещё то? Ну ладно, Stack, Queue, ... Так-то ведь почти всё почти и разобрал - нет там ничего мудрёного в коллекциях.
@@itwithvitaly мне сложно представить сложно откуда начинающий программист может это знать ) сомневаюсь что в списке популярных вопросов по Java есть что то похожее
Onegin Ну, честно сказать на джуна спрашивают и технологии типа Spring, Hibernate, там могут быть вопросы гораздо тяжелее, и их тоже на джуна спрашивают. Если человек совсем начинающий, то это скорее trainee (стажер) которого берут на практику и доучивают. У джунов обычно достаточно неплохие знания, просто нет опыта:)
Я думаю что критично для программиста, это описать алгоритм любой сложности просто. А от простых знаний стандартных библиотек пользы не много, особенно если учесть что код там тоже не безупречен.
Алгоритмы знать надо обязательно, а также структуры данных и базовые понятия, но это видео нацелено на разбор собеседования, а не изучения концептов :)
@@itwithvitaly в этом то и дело. Вопросы для сабесов явно не бухгалтер выдает, и тут я думаю стоит задуматься о том насколько эти вопросы хорошо помогут раскрыть кандидата. Вспомнить тут можно анекдот про, человека который устраивался дворником в Apple. (Ваши вопросы так же точны как в этом анекдоте.) Так же, можно провести аналогию с другими рабочими профессиями, вот например монтажник гипсокартона зачем ему знать как устроен шуроповер или из чего сделан гипсокартон? Это ему не поможет в работе абсолютно ничем.
Так же, все мы знаем из детства из чего делают дома (на стройки многие бывали я уверен) практически с закрытыми глазами можем весь процесс представить, но многие ли смогут его повторить? Многие ли понимают почему он строится именно так а не иначе? Я думаю вряд-ли, так же, как и знания о реализациях во многих библиотеках, да посмотрел хорошо, но смысл пересказывать код, если не понял как он работает? Как минимум было бы гораздо эффективней попросить написать, какой то базовый класс, описав общее его поведение.
@@Xokyopo Прямо мысли мои прочитал, много видел на собеседование вопросов - "расскажите как устроено Map внутри, что под капотом", даже не понимая что тут же сразу этим вопросом убивают принцип черного ящика. Сам автор видео просит раскрыть секрет работы объекта с данными внутри и тут же делает пометку- "ну там какие то операции побитовых сдвигов, но это уже такое", вопрос, зачем тогда вообще смотрел если не разбирался более детально. Я бы к примеру спросил чем отличается операция на процессоре 2+2 от 2*2 ))
Тайм-коды:
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 что это
Природа настолько очистилась, что Виталий вернулся на youtube.
Farid :)
Очень радует, как быстро выходит качественный контент. Я счастлив
Сергей Чамкин Спасибо)
Спасибо за Ваш труд! Коммент в поддержку канала.
Виталий, продолжай в том же духе, у тебя хорошо получается делать качественный контент по Яве чего не часто встретишь в просторах ютуба, информативно, без воды и доходчиво, вообщем спасибо, ждём ещё видосы по топ вопросам!!!!
Спасибо!
быстро ввел в курс дела.
Спасибо! и за Тайм-коды отдельное
Спасибо!
За контент лайк не глядя!!
Спасибо!
Очень хорошее видео. Спасибо большое за ответы!
А как все это можно знать, просто изучая java. Я к тому, что так может ответить ТОТ джун, который уже работал. А если это первое собеседование?
Спасибо, очень интересно
Спасибо
Крутое видео, спасибо! Единственное что хотел добавить, это насчет LinkedList vs ArrayList. Когда тестил, то во абсолютно во ВСЕХ случаях ArrayList лучше, кроме модификаций в начале Листа))
Это в новых версиях оптимизировали ArrayList, поэтому его можно использовать практически всегда.
@@Deadly_Darkness здраствуйте, а можете уточнить с каких именно версий он оптимизирован?
Спасибо за ваши уроки. Нравятся ваши объяснения. Было бы классно, если бы вы продолжили эту тему и показали нам 100% :) вопросов, которые задают на собеседовании.
Все это конечно можно найти и в написанном виде, но я аудиал и читать я долго не могу, а вот слушать - всегда пожалуйста.
Успехов вам!
Здравствуйте, спасибо! Скоро будут и другие ответы и интервью :)
Спасибо!
Так и нужно, я в документе который оставил под видео дал подсказку на счет этого :)
Очень хорошое видео!
Привет.
Было бы не плохо разобрать HashMap с большим потоком данных с явной коллизией.
Спасибо!!!
Крутое видео, сам сейчас веду активную подготовку к собесу. Побольше бы вопросов и ответов на них из розряда "Как устроена JVM? Classloader'ы, участки памяти, GC и их типы, Concurrency API (тема достаточно обширная, как и в коллекции есть много интересных фич), IO/NIO, JDBC/Hibernate/JPA ну и наш любимый Spring. Тебе - мотивации в создании контента.
Спасибо)
Ну а что собственно мешает сделать стек из ArrayList? Например таким образом: push - list.add(item); pop - item=list.remove(list.size()-1);
Мы можем многое, а есть ли в этом смысл? :)
memory reallocations + копирование остального содержания внутреннего массива из старого в новый
Спасибо большое, очень полезно. Хотелось бы больше вопросов и больше разбора этих вопросов. Продолжай в том же духе! И хотелось спросить, по Spring задают вопросы на собеседовании?
Спасибо! Да, спрашивают про Spring. На Trainee (практиканта) могут бегло спросить/вообще не спросить, а если это уровень Junior и выше то Spring это обычно must have.
большое спасибо! видео позволило быстро повторить многое!!
Спасибо!
Все гуд, только в хештаблице не линкедлисты лежат, а ноды у которых есть поле/ссылка на следующую ноду. По крайней мере в восьмой джаве.
Олег Павлюков Все верно, я имел ввиду не класс LinkedList, а структура данных связный список, который на англ называется linked list :) Нода которая ссылается на следующую ноду это и есть связный список
@@itwithvitaly согласен, но думаю это стоит уточнить, а то думаю некоторые уже представили у себя в голове какой то массив LinkedList, что полный фэйл на собесе)
@@itwithvitaly а при достижении определенного порога с java 8 связный список меняется на дерево, верно?
Формат очень интересный, помогает хоть немного представить как проходят собеседования
Только вот не удается найти видео с разбором 2-й части собеседования. После первой сразу идет третья
Как бы это все не забыть)) вроде знаешь, но боишься забыть. А спрашивают про реализацию set внутри ? . Там нужно сказать, что в одном из дженериков подставляется Object? И хранится только по ключу
Прогоняешь примеры обязательно. Так запоминается лучше
14:48, хэш объекта вычисляется на основе его адреса в памяти, а не на основе его полей, equal в свою очередь сравнивает объекты также по их адресам в памяти, поправьте если ошибаюсь
David David Хешкод по дефолту возвращает адрес объекта в памяти все верно, про equals тоже верно. Но, для корректной работы хешмапы всегда нужно переопределять equals & hashCode , типичная реализация последнего - сделать калькуляцию на основе полей
@@itwithvitaly, для String логичен переопределённый equals. а для чего переопределять эти методы для hashmap'а ? там и так всё нормально работает. имхо это фанатизм получается =)
Видео информативно. Спасибо. И как по мне то формат оптимальный особенно с практической стороны. Вопросик по LinkedList - альтернативе. Какие то конкретные примеры из проектов, задачек. А то я например 1.5 года изучаю java, и к сожалению, ни одного толкового применения LinkedList не встречал.
Значит не было кейсов, поговори с коллегами, если такой интерес, в принципе, можешь глянуть, что по этой теме сказал, создатель линк листа Joshua Bloch
Почему везде говорят, что LinkedList быстрее в середину вставить? Как я понял, быстрее вставить будет в начало и в конец списка, так как основное время у LinkedList занимает именно поиск места куда надо вставлять О(n) и это время будет очень мало, если мы будем это делать в начало и в конец(так как двунаправленный список). А операция вставки занимает O(1). У ArrayList наоборот получается, если мы вставляем в начало списка, то нам придется двигать весь массив данных на одну позицию. Это займет достаточно много времени.
Потому что операция копирования дорогая по памяти и по времени для ArrayList, быстрее дойти до нужной точки (индекса) чем сделать все манипуляции с ArrayList.
Хотел уточнить. Ранее находил информацию что в хеш мап используется массив. при выборе баскета берется "условно" остаток от деления и элементы хранятся в виде дерева, а уже в случае коллизии создается линкед лист для каждого элемента с одинаковым хешом. Подскажите, пожалуйста, ошибочно ли мое понимание или немного по иному рассказано об этой структуре в самом видео?
При идеальном раскладе 1 баскет - 1 элемент (без коллизий) в таком случае там будет просто один элемент и структура данных там особо не нужна. Изначально там создается линкед лист (структура данных, а не класс LinkedList) при возникновении коллизии, а в случае если их слишком много то лист переформируется в дерево, там прямо в исходниках есть условие после какого кол-ва коллизий (элементов в баскете) линкед лист переформируется в дерево. С их стороны довольно логично было переформировывать линкед лист в дерево, ведь поиск элемента по дереву происходит быстрее, чем в линкед лист.
А вообще если вам интересны нюансы, то можете открыть исходники HashMap и посмотреть там метод put() там достаточно читаемо написано и в целом можно разобраться, если что непонятно - спрашивайте
@@itwithvitaly просто если так то не понятно на каком этапе появляется дерево и не понятно чем структура отличается от массива если линкедлист нужен только при коллизиях. Обязательно посмотрю исходники. Спасибо за обратную связь
Не от массива а от листа. Мог бы быть хешлист с необычным расчетом индекса
Vetal Nosarev Дерево появляется когда кол-во коллизий в баскете превышает заданный в Джаве порог (константу), насколько я помню так что-то около 8 элементов. В момент когда коллизий нет вы правы, это по сути массив с 1 нодой, т.е. можно сказать просто массив с элементом. Если коллизии возникают, то элементы добавляются в конец и получается линкед лист, если таких элементов добавляется слишком много - реформируем лист в дерево.
Можете объяснить, как правильно реализовывать функцию hashCode для своего класса? Как генерить это число? На основе чего?
Идея умеет
Класное видео! Четкий звук и хороший материал! Java core это хорошо, но вопрос, будешь ли проводить интервью с дальнейшими [Ответами] по фреймворкам Spring, Spring MVC, Spring Boot, Hibernate и т.д. ? Было бы замечательно.
Спасибо! В интервью которое я разбираю небыло вопросов по технологиям, но с я радостью с кем-нибудь из подписчиков его запишу и потом выложу сюда на канал с разборами. Думаю скоро возьму несколько людей из подписчиков (кто захочет) на тестовое собеседование, не только по Java Технологиям, но и по общим вопросам (Паттерны, Парадигмы, HTTP, WEB и тд), а также по JS, React.js, Front End
Yerassyl Kelsingazin В общем да, в дальнейшем точно будут
@@itwithvitaly ну в моем собесе такие вопросы были, только я на большинство ответов не знал) Предлагаю перезаписать интервью, если ты старое не начал обрабатывать) Теперь должно быть интереснее, я чуть больше уже знаю)
В августе не планировал записывать интервью, а вот в сентябре можем.
Но только учти в этот раз будут технологии: Spring Сore, Spring Data, Spring MVC, Spring AOP, Hibernate, Maven, Patterns, Git etc. Пиши мне в сентрябре, обсудим, а пока готовься :)
@@itwithvitaly ну в сентябре видно будет) Я подтянул темы с которыми у меня были проблемы на прошлом нашем собесе касательно бута, хибера и мавена и собираюсь на реальные собесы пробоваться в августе) Из списка по сути уже все есть, кроме внутренней кухни даты и аоп, так что до сентября подготовлюсь точно)
А можешь собеседования на JS разработчика?
Планирую сделать скоро
А где вторая часть?
Ошибка в описании, это и есть вторая, поправлю
@@itwithvitaly это же третья (API итд), а во второй продолжение Java Core и нет разбора от тебя.
Зачем переопределять equals и hashCode? Пробовал оба не переопределять - работает корректно и эффективно решает вопрос коллизий, пробовал только equals переопределить - то же самое - работает корректно и эффективно.
Equals нужно переопределять если требуется чтобы какие то разные объекты давали тrue при сравнении.
Привет
На сколько я знаю - в хэшмапе односвязный список, а не линкед лист )
Где ответы второго видео?
Ошибочка вышла , это 2 видео
Вот вроде послушал все вопросы - всё здорово, всё понятно, но такие фразы в конце типа это всего лишь "10-20% от всех возможных вопросов" немного убивают мотивацию) А что ещё то? Ну ладно, Stack, Queue, ... Так-то ведь почти всё почти и разобрал - нет там ничего мудрёного в коллекциях.
Тоже такие мысли были
ты только для контента это делаешь, зачем? Если хочешь помочь сделай видео про вся коллекцию
Это очень затратно по времени, но я думаю все же доделать
Он не помог тебе?
"то что"
Про альтернативные применения это точно не для джуна вопрос
Почему? Это не самый сложный вопрос честно сказать :)
@@itwithvitaly мне сложно представить сложно откуда начинающий программист может это знать ) сомневаюсь что в списке популярных вопросов по Java есть что то похожее
Onegin Ну, честно сказать на джуна спрашивают и технологии типа Spring, Hibernate, там могут быть вопросы гораздо тяжелее, и их тоже на джуна спрашивают. Если человек совсем начинающий, то это скорее trainee (стажер) которого берут на практику и доучивают. У джунов обычно достаточно неплохие знания, просто нет опыта:)
Я думаю что критично для программиста, это описать алгоритм любой сложности просто. А от простых знаний стандартных библиотек пользы не много, особенно если учесть что код там тоже не безупречен.
Xokyopo Ну, плюс это или минус, но работа на коммерческом проекте это по бОльшей части знание API, а не умение писать алгоритмы.
Алгоритмы знать надо обязательно, а также структуры данных и базовые понятия, но это видео нацелено на разбор собеседования, а не изучения концептов :)
@@itwithvitaly в этом то и дело. Вопросы для сабесов явно не бухгалтер выдает, и тут я думаю стоит задуматься о том насколько эти вопросы хорошо помогут раскрыть кандидата.
Вспомнить тут можно анекдот про, человека который устраивался дворником в Apple. (Ваши вопросы так же точны как в этом анекдоте.)
Так же, можно провести аналогию с другими рабочими профессиями, вот например монтажник гипсокартона зачем ему знать как устроен шуроповер или из чего сделан гипсокартон? Это ему не поможет в работе абсолютно ничем.
Так же, все мы знаем из детства из чего делают дома (на стройки многие бывали я уверен) практически с закрытыми глазами можем весь процесс представить, но многие ли смогут его повторить? Многие ли понимают почему он строится именно так а не иначе? Я думаю вряд-ли, так же, как и знания о реализациях во многих библиотеках, да посмотрел хорошо, но смысл пересказывать код, если не понял как он работает? Как минимум было бы гораздо эффективней попросить написать, какой то базовый класс, описав общее его поведение.
@@Xokyopo Прямо мысли мои прочитал, много видел на собеседование вопросов - "расскажите как устроено Map внутри, что под капотом", даже не понимая что тут же сразу этим вопросом убивают принцип черного ящика. Сам автор видео просит раскрыть секрет работы объекта с данными внутри и тут же делает пометку- "ну там какие то операции побитовых сдвигов, но это уже такое", вопрос, зачем тогда вообще смотрел если не разбирался более детально. Я бы к примеру спросил чем отличается операция на процессоре 2+2 от 2*2 ))
Сколько бы не знал учитель по "анатомии", хирург из него некудышный.
Голос - норм. Звук - норм.
Тема только не очень.
А жизнь как в целом?)