Ссылка на код: github.com/kirya522/medium-posts/tree/main/java/interview-questions Telegram канал с обсуждениями, вопросами, инсайдами: t.me/kirya522 Чат для зрителей канала, также туда выкладываю интересные ссылки, источники: t.me/kirya522_chat
"рассказывать не буду", "можно полазить самому", "погуглите", "это очевидно и понятно"... - список выражений, которые совсем не хотелось бы встречать в подобных материалах, но в данном видео их слишком много
@@ивановроман-я5ц можно конечно же и в других местах освежить свои знания к собесам. Поэтому в чем смысл такого видео?) От таких видео все же ожидаешь, что будет кратко собрана нужная инфа, не чтобы изучить с нуля, а именно освежить знания или понять на что именно делать акцент при ответе
По собесам не ходил, через практику попал на работу и уже 4+ опыта, мидл. Сейчас возникла необходимость наверстать упущенное и походить по собесам, а контент идеально помогает закрыть все пробелы по пунктам, очень структурированно и наглядно, спасибо!
При всем уважении, подача материала очень хромает. "Вот смотрите, мапа, вот замутировали ключ, вот смотрите, это не работает". Конец. Почему не работает, что происходит, не понятно. Да и слушать такие фразы очень тяжело.
Да, я хотел найти баланс между все рассказать и примеры или просто сказать вопрос, чтобы интересующиеся сами разобрались в теме, в следующем выпуске сделаю темы, к ним уточняющие вопросы и список источников как найти ответ.
Примитивные стримы мне очень помогали в тестировании. Например, если нужно сэмулировать набор данных для записи в БД с времеными рядами(типа influx) или замокать такие данные
Тоже за последний месяц прошёл собесы в 43 компании.) С видео в основном согласен.) Все собесы разные, могут как и джун вопросы спрашивать, так и стандартные, так и глубоко копать Сеньорские вопросы, могут за собес сказать - вот тебе 6 алгоритмических задач на 1.5ч, давай решай.
Вообще, в LinkedList есть дофига фишек, которые никто не используются, потому что не шарят в нем, ну например: его можно использовать как queue, как stack, можно использовать ListIterator, а это совсем другой функционал по сравнению с Iterator, где можно идти вперед, назад, на ходу удалять элементы или добавлять элементы во время итерации. Очень он полезен для алгоритмических задач, как раз из-за ListIterator, Stack, Queue, DeQueue где можно в любой момент начать по другому его использовать
Для queue есть отдельные классы реализации. Для stack можно использовать ArrayDeque. Конечно, для решения небольших алгоритмических задач можно обойтись реализацией, которая предоставляет нужные методы. Для использования в проде надо выбирать исходя из быстродействия и потребления памяти, в чем LinkedList проигрывает.
Имхо, лучше один раз попробовать, чем сто раз услышать. Автор видео проделал колоссальную работу, подготовив материал в гите для самостоятельного познания на практике всех тем ролика. Спасибо! P.S. Не ошибается тот, кто ничего не делает.
Мне понравился формат. Досмотрел видео целиком. И подача интересная, и хорошо, что есть код, в котором можно покопаться. Иногда как будто речь со сленгом становится "пацанской", но думаю со временем и опытом это пройдет.
С исключениями в Спринге положили очень качественные грабли, @Transactional по умолчанию для unchecked, как и ожидается, выполняет откат транзакции, а для checked, как совсем не ожидается, выполняет фиксацию транзакции.
07:22 Киря, насчет мутабельности ключей и сломанной мультимапы не согласен что значение потеряно навсегда ты не попробовал отмутировать оригинальный ключ. тогда значение можно снова достать и дупликат работает т.е. будет такой тест: // revert the original map key => working again originalMapKey.remove(2L); Long tryAgainMutated = multiMapMap.get(originalMapKey); Assertions.assertEquals(99L, tryAgainMutated); // try again with same object key => working Long tryAgain2 = multiMapMap.get(duplicatedMapKey); Assertions.assertEquals(99L, tryAgain2);
@@kirya522-dev не очень понял твой коммент. после реверта оригинального ключа все работает снова, но я пошел дальше и действительно "сломал" мапу и сделал значение недоступным. 99L - изначальное значение, а 88L добавлено с помощью duplicatedMapKey. 88L можно сделать недоступным. вот тесты: ```java // put another value with duplicated unmodified key multiMapMap.put(duplicatedMapKey, 88L); Long valueForDuplicatedKey = multiMapMap.get(duplicatedMapKey); Assertions.assertEquals(88L, valueForDuplicatedKey); // revert original object key => working again originalMapKey.remove(2L); Long tryAgainMutated = multiMapMap.get(originalMapKey); Assertions.assertEquals(99L, tryAgainMutated); // try again with duplicated object key => working again // but value 88L is inaccessible!!! Long tryAgainForDuplicatedKey = multiMapMap.get(duplicatedMapKey); Assertions.assertEquals(99L, tryAgainForDuplicatedKey); ``` В итоге в MultiMap лежат два схожих по equals/hashcode ключа, но достать можем только 1 значение по изначальному ключу.
@@kirya522-dev Дело не в том, что хэш должен перестроиться. На самом деле причина по которой мы не можем достать значение по duplicatedMapKey до банального проста. Там нет никакой черной магии. смотри. когда мы пытаемся выполнить multiMapMap.get(duplicatedMapKey); после того как отмутировали originalMapKey, мы попадаем в нужный bucket где лежит наш originalMapKey, НО поскольку originalMapKey.equals(duplicatedMapKey) == false то значение не возвращается. и как только мы отмутируем originalMapKey обратно, то будет equals == true и значение вернется
В primitivesByVale - перегрузки для Assertation.assertSame от int не существует - произойдёт auto boxing в объект и если заменить в первом примере значение на, пусть 128 - тест упадёт, по причине, указанной во втором тесте. =)
хм, очень поверхностные вопросы, как будто на джуна совсем, а не на сеньора, где 90% интервью это про системный дизайн, работу в команде и какие-то более специализированные инструменты и технологии, местами уже как для профессиональных DBA и DevOps уже, а тут все очень общее и простое, хотя может это у меня уже профессиональная деформация)) но в целом очень интересно записал)) UPD: блин начало пропустил, а ты же там сказал, что это начальный уровень)))) сорян)) надо слушать вступления)))
Не очень понял сравнение прохода итератором по ArrayList и LinkedList, откуда там большая разница? В ArrayList в массиве лежат только ссылки, за объектами по ссылкам все равно придется ходить.
@@kirya522-dev так у ArrayList тоже объекты в куче разбросаны и тоже за ними ходить нужно, я не встречал информации, что под все объекты из ArrayList выделяется непрерывный кусок памяти, где-то описано такое поведение?
@@kirya522-dev попытался найти информацию про выделение непрерывной области памяти под объекты ArrayList ииии это невозможно, мы банально не знаем размер объекта, поэтому непрерывная область памяти выделяется только под массив ссылок, а объекты размешаются в таком же произвольном порядке как и у LinkedList. Разница конечно будет, по ArrayList нам нужно сходить только по одной ссылке за объектом на каждый элемент, у LinkedList для получения каждого элемента нужно перейти по двум ссылкам, сначала на следующую ноду, потом получить элемент, однако не думаю, что разница будет столь критична, особенно если в элементе тоже есть много не примитивов в которые нам нужно навигироваться, плюс/минус один переход по ссылке не выглядит таким уж катастрофическим.
запиши видос плз, где правильная последовательность изучения спринга, чтоб стать гуру. А то у него дофига док и не упорядоченный сайт, который просто ведет к квикстарту спринг бута. Мол сначала изучили спринг бут (каким образом, что там под капотом и как точно все в совокупности поднимается/работает, либо пример со стектрейсом), потом допустим web/mvc, что там за паттерны и почему там отдельный диспатчер сервлет. И тд
Ну а какая разница на сеньора или Джуна? Думаю, от Джуна просто не ожидают подробностей по всем темам. А так все равно спросят сначала основы: 1. Контракт equals hashcode 2. Коллекции, ООП 3. Исключения, многопоточка Эти вопросы почти 100% спрашивают, гдето больше, где о меньше, возможно, если вы сеньор ожидают, что вы просто будете сразу отстреливать подобные темы, от Джуна наверное допустимо, что он чего-то не знает, не помнит.
Такими видосами ты оказываешь медвежью услугу как соискателям так нанимателям. Люди не вникая в детали теперь могут заспидранить собесы, тупо заучив ответы и не понимая реально что и как работает. И от этого в итоге проиграют все. Я против таких видосов.
@@vb7038 тут смысл не в теории, а в том что сливаются вопросы, а люди тупо зубрят и не понимают сути. И у людей появляется ложное ощущение что они все знают и кааак устроится сейчас в айтишку, но всё не так то и просто на деле оказывается.
@@Nickilangelo согласен, есть такое. Но если автор поставит себя на мое место, то поймёт, что он по сути обманул зрителя. На утубе полно видосов с подобным контентом, но делаются они для джунов/джунов+ и названия у них соответственные