В целом, первое техническое задание Евгением было реализовано верно за исключением одного НО. В классе Exam присутствует поле, которое является объектом. Как нам знакомо, объекты могут иметь null. В последнем if() идет обращение к методу поля (current.date.equals), которое может быть не определено (иметь null). Отсюда и вылетает NPE. Однако это может быть не так критично, если быть уверенным, что поле date будет всегда инициализировано.
Посетил Ваш сайт со статьями о Java-мире. Выглядит довольно симпатично и приятно. Главное, раскрывайте суть в каждой статье и выдерживайте полноту темы, чтобы информация была полезной.)
Я с полного нуля начал учебу в школе 21 и за 8 месяцев с коллекциями мне было все ясно, потому что мы написали свои на с++. Знания более чем нужные не только для собеседований и подходят для всех языков
А у меня другой вопрос, как это всё держать в голове? Я работаю уже не первый год, но вот все эти теоретические моменты а ля иерархии наследования коллекций, исключений и прочие помнятся только пока готовишься к собеседованиям. Проходит месяц, полтора - всё вылетает из головы. Да и для чего надо это помнить?
Спасибо за вопрос. Тут все проще чем кажется... Когда практикуешь одно и тоже 100 млн. раз, то приводишь себя к автоматике и на уровне middle/senior такие вещи уже просто очевидны т.к. вшиты в мозг. Для специалиста уровня trainee/junior такие вещи ещё не так ясны и более того они должны тонко понимать всю структуру с которой они уже работают или только прийдется. Так что, тут ответ прост: «Надо, поскольку это определяет уровень профессиональной компетенции молодого специалиста». Ещё Лео Да Винчи говорил: «Без теории нет практики». А он что-то шарил всё-таки😎
@@Jetbulb при этом 100 млн раз одно и то же не встречается. Те же уровни изоляции транзакций с фантомами я постоянно забываю, т.к. в эту тему приходится лезть дай бог раз в год, когда что-то не работает. Или алгоритмы, тоже встречаются, но достаточно редко. Про тонкости работы языка и оптимизации то же самое. Практика показывает, что всё равно большая часть ньюансов забывается. Даже детали проектов, которые ты реализовал в одно лицо, тоже забываются. Факт в том, что если я сейчас пойду на собес без подготовки, меня ждет если не позор, то очень много забытых вещей и напоминаний. Даже про столпы ООП я вряд ли расскажу четко, хотя принципы используются каждый день на автомате, и становится очень злостно, когда я вижу их несоблюдение. А так, не спорю, теория в связке с практикой наше всё. Спасибо за ответ.
@@Jetbulb 100 млн. раз,ты что ,вечный... пока такие уебаны в нашей it области - Чубайсы могут спать спокойно...сори,дочитал пост,так ты еще и безграмотный))))
Тут говорилось, что ЛинкедЛист быстрее удаляет и вставляет элементы в средину списка. Решил провести эксперимент. Сделал 2 списка Аррай и Линкед, каждый на 100_000 элементов, и прогнал по циклу на 100_000 повторений операции вставить элемент на 50_000 позицию, потом его удалить. Аррай_Лист показал результат в 742 миллисикунды, а Линкед, который вроде как быстрее должен быть, справился за 14_521 миллисекунды. В 20 раз дольше, хд))
Справедливости ради - провел такой же тест для первого и для последнего элемента списка, и для вставки в средину сразу 10 элементов. Для первого Линкед выдал 10 мс, а Аррай 1_658. Для последнего - оба одинаково, около 10 мс. Когда вставлял в средину десять элементов, линкед тоже показал себя медленно - 7минут, но аррай вообще не справился, пришлось останавливать программу. Так что Линкед все же хорошая штука, но только если нужно вставлять элементы в начало коллекции, или в средину сразу много(п.с. если вставляются сразу списком, а не через цикл. Через цикл будет результат как для одного элемента).
Отличное исследование :) Спасибо! В том то и дело, что точного ответа не будет, как минимум потому что сложность складывается не только из скорости, но и памяти. Все это требует локальных ресурсов и очень зависит от условий работы конкретного компьютера. Однако, если говорить про вставку в середину среди 100к элементов нужно учитывать следующие факты: - массив попадает в середину сразу, а связный список туда идет линейно - массив удаляет элемент и должен сделать смещение справа на лево (n / 2 итераций для смещения), в то время как связный список просто перебрасывает ссылку (одна итерация) Потому не все так однозначно и действительно надо смотреть с точки зрения задачи и условий при которых она выполняется.
@@Jetbulb просто читал мнение, что линкедлистом в принципе почти не пользуются, и лучше везде использовать ArrayList. А оказалось, что ситуации разные бывают.
@@arahnid_9844 Ситуации действительно разные. Также правда, что Массив-список более применяемый, чем Связный-список. Мне приходилось связные списки применять около 5 раз в продавшене за 8 лет. Все упирается в задачи решаемые.
а разве когда создается объект String через new в памяти не создается 2 объекта ? один в кучу, второй в пулл строк ? (или вроде при создании создается в куче, а после создания создается и в пуле)
Думаю, чтобы при интервьюере не удивиться, что у линкедлиста есть метод get по индексу, стоит начинать знакомство с коллекциями с интерфейсов с их методами, а уже потом их реализациями)
У Евгения просто огромный потенциал, человек реально разобрался во многих моментах. Да и с логикой дела в порядке)
Твой канал правда крут и ты на позитиве , очень приятный канал, спасибо за контент, продолжай в том же духе)))
В целом, первое техническое задание Евгением было реализовано верно за исключением одного НО. В классе Exam присутствует поле, которое является объектом. Как нам знакомо, объекты могут иметь null. В последнем if() идет обращение к методу поля (current.date.equals), которое может быть не определено (иметь null). Отсюда и вылетает NPE. Однако это может быть не так критично, если быть уверенным, что поле date будет всегда инициализировано.
Очень мощно🎉
Посетил Ваш сайт со статьями о Java-мире. Выглядит довольно симпатично и приятно. Главное, раскрывайте суть в каждой статье и выдерживайте полноту темы, чтобы информация была полезной.)
Очень полезное интервью!
Спасибо большое за ваш труд! 🤝
Я с полного нуля начал учебу в школе 21 и за 8 месяцев с коллекциями мне было все ясно, потому что мы написали свои на с++. Знания более чем нужные не только для собеседований и подходят для всех языков
Кстати, тоже собираюсь в школу 21. Как тебе впечатления?
Собеседования мидлов будут?) И отличаются ли они принципиально чем-то от собесов на джуна?
Спасибо за видео
А у меня другой вопрос, как это всё держать в голове? Я работаю уже не первый год, но вот все эти теоретические моменты а ля иерархии наследования коллекций, исключений и прочие помнятся только пока готовишься к собеседованиям. Проходит месяц, полтора - всё вылетает из головы. Да и для чего надо это помнить?
Спасибо за вопрос.
Тут все проще чем кажется... Когда практикуешь одно и тоже 100 млн. раз, то приводишь себя к автоматике и на уровне middle/senior такие вещи уже просто очевидны т.к. вшиты в мозг.
Для специалиста уровня trainee/junior такие вещи ещё не так ясны и более того они должны тонко понимать всю структуру с которой они уже работают или только прийдется.
Так что, тут ответ прост: «Надо, поскольку это определяет уровень профессиональной компетенции молодого специалиста».
Ещё Лео Да Винчи говорил: «Без теории нет практики». А он что-то шарил всё-таки😎
@@Jetbulb при этом 100 млн раз одно и то же не встречается. Те же уровни изоляции транзакций с фантомами я постоянно забываю, т.к. в эту тему приходится лезть дай бог раз в год, когда что-то не работает. Или алгоритмы, тоже встречаются, но достаточно редко. Про тонкости работы языка и оптимизации то же самое. Практика показывает, что всё равно большая часть ньюансов забывается. Даже детали проектов, которые ты реализовал в одно лицо, тоже забываются. Факт в том, что если я сейчас пойду на собес без подготовки, меня ждет если не позор, то очень много забытых вещей и напоминаний. Даже про столпы ООП я вряд ли расскажу четко, хотя принципы используются каждый день на автомате, и становится очень злостно, когда я вижу их несоблюдение. А так, не спорю, теория в связке с практикой наше всё. Спасибо за ответ.
@@inzagher Один раз напиши свои контейнеры))
@@Jetbulb 100 млн. раз,ты что ,вечный... пока такие уебаны в нашей it области - Чубайсы могут спать спокойно...сори,дочитал пост,так ты еще и безграмотный))))
Класс! Евгений действительно хорошо разобрался с Collection и Springom! Может даже и пересмотрю какнибуть для повторения!
Мне кажется по собеседованию парня можно спокойно в Стронг джуны закидывать. А то и в мидлы по низу рынка)
Очень полезные видосы на канале, классно объясняешь и выводишь на правильный ответ
#RESPECT
Спасибо👍👍👍👍👍👍👍👍👍🏻👍🏻👍🏻
Крутяк, спасибо за контент
так мало...
а про цепочку фильтров через которые проходит запрос?
а вьюРезолвер как работает?
прям очень очень поверхностно прям...
Тут говорилось, что ЛинкедЛист быстрее удаляет и вставляет элементы в средину списка. Решил провести эксперимент. Сделал 2 списка Аррай и Линкед, каждый на 100_000 элементов, и прогнал по циклу на 100_000 повторений операции вставить элемент на 50_000 позицию, потом его удалить. Аррай_Лист показал результат в 742 миллисикунды, а Линкед, который вроде как быстрее должен быть, справился за 14_521 миллисекунды. В 20 раз дольше, хд))
Справедливости ради - провел такой же тест для первого и для последнего элемента списка, и для вставки в средину сразу 10 элементов. Для первого Линкед выдал 10 мс, а Аррай 1_658. Для последнего - оба одинаково, около 10 мс. Когда вставлял в средину десять элементов, линкед тоже показал себя медленно - 7минут, но аррай вообще не справился, пришлось останавливать программу. Так что Линкед все же хорошая штука, но только если нужно вставлять элементы в начало коллекции, или в средину сразу много(п.с. если вставляются сразу списком, а не через цикл. Через цикл будет результат как для одного элемента).
Отличное исследование :)
Спасибо!
В том то и дело, что точного ответа не будет, как минимум потому что сложность складывается не только из скорости, но и памяти.
Все это требует локальных ресурсов и очень зависит от условий работы конкретного компьютера.
Однако, если говорить про вставку в середину среди 100к элементов нужно учитывать следующие факты:
- массив попадает в середину сразу, а связный список туда идет линейно
- массив удаляет элемент и должен сделать смещение справа на лево (n / 2 итераций для смещения), в то время как связный список просто перебрасывает ссылку (одна итерация)
Потому не все так однозначно и действительно надо смотреть с точки зрения задачи и условий при которых она выполняется.
@@Jetbulb просто читал мнение, что линкедлистом в принципе почти не пользуются, и лучше везде использовать ArrayList. А оказалось, что ситуации разные бывают.
@@arahnid_9844 Ситуации действительно разные.
Также правда, что Массив-список более применяемый, чем Связный-список.
Мне приходилось связные списки применять около 5 раз в продавшене за 8 лет.
Все упирается в задачи решаемые.
а разве когда создается объект String через new в памяти не создается 2 объекта ? один в кучу, второй в пулл строк ? (или вроде при создании создается в куче, а после создания создается и в пуле)
Оператор new отправляет всех в Heap.
В случае со строкой, в обход String Pool
Дуже дякую за відео))
Думаю, чтобы при интервьюере не удивиться, что у линкедлиста есть метод get по индексу, стоит начинать знакомство с коллекциями с интерфейсов с их методами, а уже потом их реализациями)
Да, к сожалению совершенно забыл, что в линкед листе можно искать по индексу, просто итерируясь и ведя отдельно счётчик элементов)
Ничего страшного, просто растерялся)))
15:26 уничтожил)
6:50 инкапсуляция