Собеседование Java Middle | Реальное собеседование | Jetbulb

Выпуск серии "Техническое собеседование" на позицию Java Middle Developer.
Вопросы и ответы по темам: разработка и тестирование приложений, многопоточность, Java Framework Collection, Spring Framework, Базы Данных и транзакции в БД.
Программа:
00:00 - Введение
01:28 - Требования к кандидату
03:09 - Цикл разработки
06:39 - Тестирование приложений
09:41 - Коллекции или Java Collection Framework
22:25 - Многопоточность
31:18 - Spring Framework и Базы Данных
48:02 - Выводы
Наш сайт:
jetbulb.com/
interview.jetbulb.com/
Мы в социальных сетях:
t.me/jetbulb
t.me/seemsinprod

Пікірлер: 293

  • @vladimirblagin3105
    @vladimirblagin3105 Жыл бұрын

    45:28 Послушал про оптимистичную и пессимистичную блокировку. Улыбнуло. Объясню вам на пальцах, чтобы вы других не вводили в заблуждение. Смотрите. Прежде всего блокировка нам нужна только когда мы что-то меняем. И блокировка нужна, чтобы измененные данные сохранили свою целостность. Не были утрачены в какой-то части в результате наложившихся параллельных изменений. Никакая блокировка не должна запрещать другим читать данные (если не мегаспециальные сценарии). Это касается только функционала изменения данных. Например, открыли на редактирование какой-то документ. Поредактировали и сохранили. Что такое оптимистическая блокировка и почему она так называется. Оптимистическая блокировка берет данные в работу на изменение и никому не запрещает взять эти же данные на изменения параллельно. Это такие оптимисты, которые надеются успеть изменить документ и сохранить его пока никто не успел взять этот документ на изменение. Далее, кто первый встал того и тапки, кто первый записался в базу данных, тот молодец, а второй "неудачный оптимист" получит отлуп по блокировке, если механизм блокировки вообще есть. Один из вариантов реализации оптимистичной блокировки является версионирование данных. Каждый entity имеет в БД поле с номером версии, он меняется в БД когда кто-то изменил этот блок данных entity. Соответственно при попытке записаться сравнивается версия исходная с которыми данные получены и версия на момент записи. И если они отличаются, то отказ. За это отвечает та самая аннотация @Version. Это работает как видите и на уровне приложения, и на уровне БД. Теперь, пессимистичная блокировка. Тут работают пессимисты, они не действую по принципу "авось никто не успеет поменять документ, пока я тут его же меняю", они берут данные в работу на изменение и запрещают другим брать эти же данные на изменение, читать - пожалуйста. Но брать на изменение второму не дадут, жди пока первый разблокирует данные. Это гарантирует первому спокойное сохранение какого-то очень важного документа, важного начальника, который не будет повторять дважды и бегать за уведенными тапками. Для такого типа блокировки где-то, в БД или в приложении выставляется признак, что данные взяты на изменение, кем, когда. И все остальные (жаждущие изменить, читать - пожалуйста ) ждут, механизм может поддерживать автоматическую разблокировку через таймаут. Если кто-то взял документ на изменение и ушел в декретный отпуск, а другим его нужно изменять. Оптимистичная блокировка хороша, когда данные не критичны, можно повторить изменения. Получил отлуп, перечитал данные и внес в новую версию уже свое, если вообще потребуется, а то может коллега уже все прописал. И обычно используется когда нет высокой конкуренции. Главное, она не блокирует работу с документом на изменение, она блокирует прием результата изменений, если кто-то успел документ изменить. Плюс: бери документ на изменение кто хочет, кто первый успел, тот молодец. Минусы: при блокировке приходится перечитывать новую измененную версию и повторять всю работу по изменению снова. Пессимистичная блокировка нужна когда данные оперативно меняются в условиях высокой конкуренции или когда важный документ, который переделывать повторно трудозатратно. Плюс: все что вы изменили гарантированно примется. Минусы: остальные документ изменить не могут пока вы его "держите" на изменение. Возможны гибридные варианты стратегии блокировки. Например, какие-то типы документов работают в оптимистической стратегии, какие-то особо важные в пессимистической. Или даже так: первые N часов/минут документ работает в режиме пессимистической блокировки, потом переключается в режим оптимистической. Тогда достигается комбинация положительных сторон двух стратегий и определенный компромисс недостатков (но это уже не про Spring)

  • @user-bt9hx3ik6e

    @user-bt9hx3ik6e

    Жыл бұрын

    очень круто все расписали. спасибо!

  • @user-my5nw2kg6l
    @user-my5nw2kg6l Жыл бұрын

    Спасибо огромное за столь большой объем качественной информации!

  • @user-lg5wo6gg9j
    @user-lg5wo6gg9j Жыл бұрын

    Спасибо за качественные и полезные выпуски 😊

  • @Mdfnik
    @Mdfnik Жыл бұрын

    спасибо за старания, все супер, смотрится на одном дыхании, все понятно и интересно объясняется. Полезное и приятное время препровождение )

  • @artemlisitsyn9846
    @artemlisitsyn9846 Жыл бұрын

    Очень познавательно, Макс, спасибо! Много нового для себя подчерпнул особенно про аннотацию transactional, но просмотрев, понял, что много вещей будучи джуном уже знаю, чем был приятно удивлен, еще раз спасибо, продолжай в том же духе, хотелось бы еще хотя бы 1 пример интервью (или такого же формата как это видео) вопросов мидлу.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Скоро будет видео на синьорскому собеседованию ))) Материал собирается. Спасибо за твой фидбек ☺️🙏🏻

  • @artemlisitsyn9846

    @artemlisitsyn9846

    Жыл бұрын

    @@Jetbulb круто) буду ждать

  • @alekseizhitenev6020
    @alekseizhitenev6020 Жыл бұрын

    спасибо за такого рода видео, очень много новых нюансов узнаю)

  • @go-with-go
    @go-with-go Жыл бұрын

    Очень круто! Спасибо за разбор интервью - это действительно полезно

  • @physicsofthewonderful7612
    @physicsofthewonderful7612Ай бұрын

    Спасибо огромное за Ваш труд и время потраченные на создание канала. Полезная информация для подготовки к собеседовании, приятная подача. Особенно радует текст в начале видео!

  • @TsimurKatkouski
    @TsimurKatkouski Жыл бұрын

    Спасибо за видео! Каждый раз узнаешь что-то новое или повторяешь то что забыл

  • @eld4j
    @eld4j Жыл бұрын

    Здравствствуйте Максим! Расскажите, пожалуйста, про профайлинг, бенчмарки (JMH) на Java. Спасибо за видео!

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Привет! Хорошая тема. Недавно с коллегой обсуждали один пост про JMH. Спасибо за наводку и фидбек 👍

  • @user-bn9wc8db6s
    @user-bn9wc8db6s Жыл бұрын

    Макс🖐 Спасибо за годный контент👍👍👍

  • @katefedorova624
    @katefedorova624 Жыл бұрын

    Спасибо, про уровни изоляции транзакций было полезно

  • @rkoinfr9964
    @rkoinfr9964 Жыл бұрын

    По больше бы таких видео)) Именно про миддлов особенно лайв кодинг))

  • @user-fw6iw5uf8f
    @user-fw6iw5uf8f10 ай бұрын

    Громадное спасибо за подобный контент! Во-первых, это невероятно интересная информация, во-вторых - необычайно полезная для всех! Автору канала успехов!

  • @eskelgarsio2998
    @eskelgarsio2998 Жыл бұрын

    Сейчас такое у джунов спрашивают) спасибо за видео, хорошо объяснил ответы на вопросы

  • @user-sn8jy8lg2j
    @user-sn8jy8lg2j Жыл бұрын

    @Jetbulb Сделайте, пожалуйста, видео с highlight'ми из предыдущих видео, например "как правильно отвечать на вопрос, что такое "объектно ориентированное программирование" или просто нарезку хороших ответов.

  • @A_Rakh
    @A_Rakh4 ай бұрын

    Спасибо за данный ролик. Много что узнал нового для себя. Как раз готовлюсь к собесам :)

  • @nafis9908
    @nafis9908 Жыл бұрын

    Качество выпусков заметно улучшилось👍

  • @alevadnaya
    @alevadnaya Жыл бұрын

    Про базы и транзакции - класс, интересно

  • @jackcreater2875
    @jackcreater2875 Жыл бұрын

    Через 1,5 часа собеседование, смотрел интервью с ребятами, на трудоустройство не рассчитываю, проверю свои знания и будет какой-то опыт. С каналом более углублённо проработал разные вопросы, спасибо

  • @derzkii_samogonshik

    @derzkii_samogonshik

    Жыл бұрын

    Как собеседование прошло?

  • @lerikshow8491

    @lerikshow8491

    9 ай бұрын

    И как? Получилось?

  • @maksimivanov8728
    @maksimivanov8728 Жыл бұрын

    Ерундой не страдайте, работал уже 10 лет в этой профессии и никогда не пригодилось знание сколько элементов в HashMap. Эти вопросы вообще не нужны. Лучше задавать на конкретных задачах, что умеешь делать, как построить архитектуру и тд.

  • @alias77799

    @alias77799

    9 ай бұрын

    То есть ты предполагаешь, что человек будет корректно решать поставленные перед ним задачи, не понимая до конца как устроены объекты под капотом, с помощью которых он и будет их решать, тем более мидл?

  • @Wansery

    @Wansery

    8 ай бұрын

    А как ты будешь отвечать на конкретных задачах, если не знаешь теорию и не знаешь что происходит под капотом? Ты не сможешь оптимизировать код, не поймёшь где случились ошибки... Сеньор на то и сеньор, что умеет во всё вышеперечисленное, а не что умеет решать задачки)

  • @user-pk8tz2oy6x

    @user-pk8tz2oy6x

    7 ай бұрын

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

  • @user-pq9zz8gs4s

    @user-pq9zz8gs4s

    6 ай бұрын

    @@alias77799 ты читал вообще? Не пригодились знания "сколько количество элементов в хэшмапе" != "не понимает как устроены объекты под капотом"

  • @alias77799

    @alias77799

    6 ай бұрын

    @@user-pq9zz8gs4s это ты читал вообще мой коммент или просто что-то отписать?

  • @user-sj2np1rc4u
    @user-sj2np1rc4u Жыл бұрын

    Классный видос, спасибо :) P.S. А выпуск по реактивщине не планируется?)

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Планируется)) Все по очереди. Сейчас прошло голосование в ТГ и явно коммуна хочет видеть что-то про реактив. Что ж, этому быть и значит будем готовить материал.

  • @user-vz4qs5bf6o
    @user-vz4qs5bf6o Жыл бұрын

    Очень круто. Было очень интересно)

  • @vitamin2845
    @vitamin2845 Жыл бұрын

    Привет, Макс. Мне кажется, пока ты работаешь разрабом в тебе умирает очень крутой ведущий. Скандалы, интриги, расследования. Невыдуманные истории о которых невозможно молчать...

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Я походу не ту профессию выбрал)))

  • @doh2535

    @doh2535

    Жыл бұрын

    @@Jetbulb Как можно сравнивать ИТ с ведущим. Почитай как строили первые ЭВМ. Как запускали людей в космос. Все достижения современности были бы невозможны без автоматизации вычислений, роста вычислительной мощности и развития алгоритмов. Ты, может быть, утонул в будничной рутине или выбрал не то направление, но профессия у тебя точно самая интересная из доступных в наше время. Ведущий - это говорящая голова, при всем уважении к хорошим ведущим.

  • @ruslankrivoshein2893

    @ruslankrivoshein2893

    Жыл бұрын

    @@doh2535 часто ведущие не просто говорят, а ещё и материал программы сами готовят, разбираются в предмете.

  • @Das.Kleine.Krokodil

    @Das.Kleine.Krokodil

    Жыл бұрын

    @@doh2535 чтобы понять,что ведущий это не просто голова, рекомендую найти и посмотреть передачи региональных тв или студенческих

  • @user-wy2eq1xu2w
    @user-wy2eq1xu2w Жыл бұрын

    Просмотрел, сделал конспект ))) Спасибо!

  • @user-gv3zn1us6s
    @user-gv3zn1us6s5 ай бұрын

    Спасибо. Полезно. Ещё раз пересмотрю

  • @user-kk9rx4jd6zs
    @user-kk9rx4jd6zs9 ай бұрын

    Контент топчик! Максон спасибо :) Очень много интересного!

  • @mayanilga8665
    @mayanilga8665 Жыл бұрын

    Максим, добрый день! Может вопрос не сюда))) Но подскажите плиз, когда Вы планируете вести курс Java Pro в Hillel?

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Мая, приветствую)) Точно буду занят текущей группой до НГ. А дальше еще не знаю. Лучше это уточнять в учебном отделе. Они ведают планированием) Спасибо за интерес. Балуете меня ☺️

  • @TimurMalikAst
    @TimurMalikAst Жыл бұрын

    Побольше бы таких интервьюверов как Макс

  • @anti1am3r
    @anti1am3r Жыл бұрын

    Не двигаемся мы в мир реактивщины, учитывая что уже в следующем LTS релизе может быть project loom зарелизен. Достоточно посмотреть количество вакансий с реактивным стеком

  • @serhiiudod3604
    @serhiiudod3604 Жыл бұрын

    Привет! У тебя есть видео про SDET? Сейчас прохожу bootcamp и голова плавится, представляю что с девелопарами происходит. Это видео реально интересно посмотреть.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Привет! Такого видео пока нет. Признаюсь и не думали о таком ) Спасибо за фидбек

  • @dimavarushyla6772
    @dimavarushyla6772 Жыл бұрын

    Макс, спасибо за видео! Про TDD не согласен. Важно понимать концепцию и пробовать)) но на практике она применяется достаточно редко. Одно дело, удобно имплементировать по TDD доменную логику в доменных объектах - объектах где нет зависимостей. И другое дело предвидеть в тестах какие зависимости (сервисы, репозитории) будет использовать юзкеис-класс. В видео ставится = между многопоточностью и реактивщиной, но это разные понятия.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Привет! >> В видео ставится = между многопоточностью и реактивщиной, но это разные понятия. Не знаю где это усматривается из видео. Поскольку аналогии или эквивалентности нет и речи об этом идти не может. Спасибо за фидбек и твой технический коммент))

  • @user-sf6um2oo4s
    @user-sf6um2oo4s11 ай бұрын

    Привет, подскажи, что у тебя за монитор?

  • @for_find_me006
    @for_find_me006 Жыл бұрын

    Здравствуйте, подскажите: я не знал, что тремпель - это вешалка, но пользовался им; Вопрос: если я не знал термина полимлрфизм, но в работе использовал механизм так называемый … то это говорит, что спрашивать термин нет смысла? Спасибо

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Привет ))) Вопрос очень неоднозначный и холиварный, но попробую ответь: «Если человек успешно применят какой-либо прием и даже не подозревает об этом. То это круто! Для меня это сигнал, что человек думает и может сотворять. Однако, есть и другая сторона медали. Сложно назвать человека инженером, если он применяет что-то фундаментальное из своей отрасли, но сам того не подозревая» Это тонкая грань. Одно и второе имеет место быть и вовсе не может характеризовать человека как плохо сотрудника. Это вопрос конкретной позиции и требований выдвигаемых этой позицией.

  • @for_find_me006

    @for_find_me006

    Жыл бұрын

    @@Jetbulb Что можно порекомендовать отвечать, когда уже долго работаешь и теория выветрилась? Так не хочется повторно учить слова, а читать знакомое претит

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    @@for_find_me006 Как говорится: "Рыбак рыбака видит из далека". Так и тут. Опыт видно из далека. Человек с опытом уже говорит и обосновывает вещи иначе. Я к тому, что притворство очень легко изобличить. Если не знаешь, то это будет видно практически сразу. Дело же не только теории и терминологии

  • @kensaitakeso
    @kensaitakeso Жыл бұрын

    Спасибо, Макс. Звук лучше стал )

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Ага. Микро подъехал)) Спасибо за фидбек Респект 👍

  • @maks7494
    @maks74947 ай бұрын

    Даже для джуна это интересно. Круто. Спасибо за информацию)

  • @artemvoloshyn1257
    @artemvoloshyn1257 Жыл бұрын

    Дякую, за цікавий та корисний контент 🙂

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Респект 👍 🇺🇦

  • @askhat1654
    @askhat16543 ай бұрын

    Поведение Safe Point в Nested транзакции, не ясно когда и в каком месте он должен создастся чтобы к нему откатится? Я так понимаю транзакционность методов на выполнение всех операций внутри него атомарна, либо выполнятся все либо не выполнятся, а в Nested мы дополнительно через Safe Point указываем до какого места откатится?

  • @yan-ww4rm
    @yan-ww4rm Жыл бұрын

    Спасибо за видео, очень нравится этот формат!) Про пример deadlock, в коридоре с двумя людьми, если они будут отходить постоянно, это же уже Livelock?)

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Да, там косяк вышел)) Речь шла про Livelock Спасибо за отзыв))

  • @NikiforovJava
    @NikiforovJava Жыл бұрын

    Макс, спасибо! Полезный выпуск. 31:45 - Расскажите, кто имел опыт использования или видел в бизнес коде скоупы request, websocket, application, session? Я за первый год работы ни разу не встречал. Прототайпы встретил только недавно - по всей видимости используются крайне редко.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Привет! Встречаются. Хотя все зависит от сложности внутренного устройства приложения. Я видел несколько раз: Request и Session Спасибо за фидбек )

  • @pulato000
    @pulato000 Жыл бұрын

    Было интересно, спасибо

  • @user-pc6oe5cr3b
    @user-pc6oe5cr3b Жыл бұрын

    Макс, крутой видос, спасибо. 25:14 это кстати пример не deadlock, а livelock. Deadlock был бы, если бы они шли по коридору, встретились, просто встали на одном месте и начали ждать пока проход освободится.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Отличное замечание)) Спасибо 👍 И за фидбек в том числе

  • @alex0destroyer
    @alex0destroyer Жыл бұрын

    Максим, а как можно к тебе попасть на собеседование (junior position)?

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Привет ) Можешь написать сюда t.me/iPrody_Online

  • @vlera4198
    @vlera41985 ай бұрын

    "@Transactional создает обертку с try catch " - возможно блок трай кетч там и присутствует, но суть не в этом. суть именно в создании транзакции на уровне бд.

  • @milordplus
    @milordplus6 ай бұрын

    Спасибо за видео! Немного дополню про мапу, порог называется loadFactor, и он напрямую зависит от initialCapacity. Как было сказано - капасити по умолчанию 16, а лоадфактор 0,75. Это означает, что с 12го элемента мапа будет увеличена вдвое и так в прогрессии.

  • @non_holy6286
    @non_holy6286 Жыл бұрын

    не уверен, но при простой коллизии нода вроде не перестраивается в дерево. Там есть лимит на количество элементов в бакете (вроде 8) и общее число бакетов (вроде 32). 2 этих условия с логическим и. Порог же вроде loadFactor? Еще по тримапе интересный вопрос можно задать: как в тримапу положить объект, который не реализует comparable и мы не передаем компаратор? На как тогда будут сортироваться ключи?

  • @DartPeredoz
    @DartPeredoz Жыл бұрын

    Спасибо! Но прошу, выравнивай звук на отбивках. Очень жестко по ушам бьет.

  • @user-bl1dr7wp3g
    @user-bl1dr7wp3g Жыл бұрын

    Блин, ты очень классный рассказчик. Я бы с удовольствием послушал про Spring от тебя , прям love)

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Спасибо за фидбек))) Это лучшая награда. Кстати, у нас есть плейлисты про спринг. Правда там не много видео, но это временно.

  • @racot7145
    @racot7145 Жыл бұрын

    Постепенно разница между джуном и мидлом размывается. Ждем синьеров с двумя годами опыта.

  • @yuriytheone

    @yuriytheone

    Жыл бұрын

    Господи! Причём тут год или два! Ты - идиот!

  • @petrivanov1565

    @petrivanov1565

    11 ай бұрын

    Разница между джуном и мидлом - в опыте работы. Джун знает в теории и немного пет- практики, а мидло сталкивается на практике с этими знаниями + ускоренном темпе ознакамливается с действующим приложением. (кафка, рэббит, проекции, предикаты, критерия, кэши первого - второго уровня, лэйзи лоадинг + эксепшен, интегрейшен флоу, разные джобы, мапперы и проблемы с маппингом, перформанс проблемы, пути их решения, поиск ботлнеков и их решения, саппорт реквесты - работа с бизнес флоу, работа с внешними системами, если повезёт, то дадут ещё и облака потрогать)

  • @Habik87_29
    @Habik87_29 Жыл бұрын

    Спасибо тебе за канал

  • @user-zo6qk3cy3w
    @user-zo6qk3cy3wАй бұрын

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

  • @askar4ou
    @askar4ou10 ай бұрын

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

  • @voalik
    @voalik Жыл бұрын

    Щось не зрозумів про додавання елемента при колізії в HashMap. Хіба він не додається в кінець списку в бакеті?

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Елементи в бакет додаются в початок списку. Що саме незрозуміло?)

  • @voalik

    @voalik

    Жыл бұрын

    @@Jetbulb Якщо, є три value наприклад: object1, object2, object3. То при колізії їх ключів, порядок в бакеті буде object1 -> object2 -> object3. Так? Бо якщо додавати на початок списку, то виглядає так, наче порядок має бути такий object3 -> object2 -> object1

  • @videtskikh
    @videtskikh Жыл бұрын

    чёткое видео! спасибо!

  • @user-hq6nm2tf6j
    @user-hq6nm2tf6j2 ай бұрын

    Спасибо за видео. Но я не сказал бы, что это мидл уровень. Сейчас на джунов это все спрашивают. Это еще не было индексов, функционального программирования, докеров, кафки, кубернетисов, sql-запросов. На практике не встречал скоупы реквесты, сессии, да даже протатайп на практике не попадался. Интересно что это за случаи таки когда их используют. А так ответил на все вопросы без подготовки, конечно, не так красиво как автор, но считаю, что даже если и 20 лет в программировании, то всеравно к собеседованиям надо готовится, так как это отдельный скилл по их прохождению. И все вопросы были стандартные, которые задают на собеседованиях.

  • @user-pq9zz8gs4s
    @user-pq9zz8gs4s6 ай бұрын

    Кто-то использовал трисет в проекте?

  • @user-cf2jo7vo8p
    @user-cf2jo7vo8p Жыл бұрын

    Спасибо, Макс

  • @ivananna6616
    @ivananna661610 ай бұрын

    хороший опыт, всем ребят советую сдать для начала OCP17 экзамен по java, а потом получать "коммерческий" опыт. Я на собственном примере понял , что Oracle экзамен это лучшая подготовка к собеседованию и даёт не поверхностное пониманиe того как работает java. Всем мира )

  • @kirill141
    @kirill1418 ай бұрын

    Меня на джуна сильнее спрашивали, это было 2 года назад :)

  • @milordplus
    @milordplus6 ай бұрын

    Классно рассказываешь! Было бы круто с какими то визуальными примерами, не подробное копания для изучения, а чисто увидеть код в той же идее. Не презентация никакая , просто чтоб нормально вспомнить как выглядит))

  • @SplashDmg2011
    @SplashDmg2011 Жыл бұрын

    Разумеется, я посмотрел видео, и, соответственно, поставил лайк.

  • @pashadjoystick
    @pashadjoystick10 күн бұрын

    в оракле 20 лет назад наверное токо пессимистичные транзакции знал ибо там на пол часа всего чтива было и никаких изоляций не требовалось

  • @user-dw7sc7iz2z
    @user-dw7sc7iz2z Жыл бұрын

    Насколько мне известно, «одеревенение» списка в бакете происходит не только при переваливании количества нод за 7, но и при условии что число бакетов больше 64

  • @maxnone2066

    @maxnone2066

    Жыл бұрын

    Именно так

  • @alex-petrov

    @alex-petrov

    Жыл бұрын

    не так, за 8

  • @alexplishkin5811
    @alexplishkin5811 Жыл бұрын

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

  • @antonparfenov7126
    @antonparfenov7126 Жыл бұрын

    Редко пишу комменты, но тут не могу пройти мимо :) сам ответил примерно на половину вопросов, еще о четверти в курсе) рубрика годная, вопросы актуальные, было интересно послушать. Большое спасибо 👍

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Большое спасибо за отзыв)) Лучшая награда! Респект!

  • @dmytro4312
    @dmytro4312 Жыл бұрын

    Як завжди цікаво і пізнавально)

  • @nikky4199
    @nikky4199 Жыл бұрын

    Прошел несколько собесов на джуна...вопросы абсолютно те же. Незнаю хорошо это или плохо

  • @ASMRdwarf

    @ASMRdwarf

    Жыл бұрын

    Мне и на синьора такие же вопросы как в джуновских разборах собесов вопросы задают часто.

  • @iharbakhanovich
    @iharbakhanovich Жыл бұрын

    Отличная картинка, Макс. Пора еще одну добавить :)))

  • @iharbakhanovich

    @iharbakhanovich

    Жыл бұрын

    Ну зачем ты мне про линт рассказал? Вечер потерян как и самооценка :)))))

  • @user-qx3jt8fw1v
    @user-qx3jt8fw1v Жыл бұрын

    Топчик. спасибо.

  • @illiaslobozhanin6285
    @illiaslobozhanin6285 Жыл бұрын

    Еще небольшая штука с Хэшмап и преобразованием листа в красно-чёрное дерево. 1. При удалении элементов мапа может обратно дерево превратить в лист (по умолчанию 6). 2. Есть минимальный лимит при котором мапа вообще будет превращать лист в дерево (по умолчанию 64). + Был бы хороший вопрос о ребалансе, e.g. что это O(n) операция, которая должна пройтись по всем парам ключ-значение в мапе, пересчитать хэши от ключей и "перетасовать" значения.

  • @oopsoops9040
    @oopsoops9040 Жыл бұрын

    Я бы хотел попробовать себя на собеседовании и получить рекомендации, что нужно подтянуть и что вообще делать. Стоит ли мне пытаться искать работу или еще поучиться.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Тогда надо на собеседование записываться) Мы как раз проводим мок-интервью. Если интересно, детали можно посмотреть interview.jetbulb.com/

  • @oopsoops9040

    @oopsoops9040

    Жыл бұрын

    @@Jetbulb чет у вас страница с интервью упала((

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    @@oopsoops9040 спасибо) Сейчас проверим

  • @oopsoops9040

    @oopsoops9040

    Жыл бұрын

    @@Jetbulb не получается получить доступ к сайту всё равно)

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    @@oopsoops9040 Все работает, несколько раз проверяли. Ссылка действующая)

  • @konstantinkazartsev1633
    @konstantinkazartsev1633 Жыл бұрын

    Если мы говорим об общем случае (в Java возможно сценарий не воспроизводится) для цикла в графе ожиданий (deadlock) достаточно одного потока: Например: mutex_lock(m); mutex_lock(m);

  • @liberatdoleg5965
    @liberatdoleg59652 ай бұрын

    а как же Not_Supported, 7 уровень в пропогации транзакции?

  • @pealmanable
    @pealmanable Жыл бұрын

    Вакансия еще открыта? Поделитесь ссылкой?)

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Уже закрыли)) Нашли подходящего кандидата, а точнее кандидатку

  • @ioanntrapeznikov

    @ioanntrapeznikov

    Жыл бұрын

    @@Jetbulb неплохой феминитив

  • @SplashDmg2011
    @SplashDmg2011 Жыл бұрын

    Что за вопрос про аннотацию Transactional при наследовании? Зачем такие вопросы задавать? Вы реально наследуете один сервис от другого? Имхо, вопрос из серии повыпендриваться и завалить кандидата.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Лично я не часто делаю использую наследование в связке транзакциями. Однако, такое встречается очень часто на разнообразных проектах. Как себя будет вести транзакция в таких условиях - крайне важно.

  • @user-up2lc4kb5o

    @user-up2lc4kb5o

    Жыл бұрын

    Очень часто жизненный цикл разработки сервиса начинается с разработки публичного API (интерфейсы, абстракции и т.д.), потом уже пишутся конкретные имплементации. Так вот в публичном API и хочется по максимуму описать контракт разрабатываемого сервиса. Это я про Вашу фразу "Вы реально наследуете один сервис от другого?" - не один от другого, а разные имплементации одного сервиса в зависимости от требований и условий применения, например, "когда луна в Козероге" нам нужна файловая реализация хранилища фотографий, а "если пользователя зовут Елена" уже БД.

  • @SplashDmg2011

    @SplashDmg2011

    Жыл бұрын

    @@user-up2lc4kb5o кажется, ваши примеры про другой слой - слой доступа к данным. Транзакции же обычно применяются на уровне сервисов. И вроде бы достаточно знать, как поставить аннотацию над методом в реализации сервиса, что такое propagation, когда использовать readonly, и что Transactional не работает при вызове метода внутри сервиса.

  • @petrivanov1565
    @petrivanov15655 ай бұрын

    А есть в голове счётчик расстройств при собеседовании?) Если Макс за собес расстроился более N раз, то кандидат не подходит.

  • @Jetbulb

    @Jetbulb

    5 ай бұрын

    Ахах, просто убил)))

  • @EpoxyArt
    @EpoxyArt3 ай бұрын

    Макс, ты не рассказал для чего вообще TreeSet нужен! Что у него есть методы first(), last(), lower(E e), higher(E e). Которых нет в других сетах.

  • @user-xv4ke3tp6y
    @user-xv4ke3tp6y Жыл бұрын

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

  • @goggitoggi3510

    @goggitoggi3510

    4 ай бұрын

    Чтобы время было О1.Тк он как только вычислит бакет,сразу заберет элемент.Если будет много элементов выйдет О N.Один элемент это не обязательно,это чисто обеспечение условий скорости О1

  • @OlegNoskov-lv4ku
    @OlegNoskov-lv4ku Жыл бұрын

    Я ищу работу Java Junior и то без проблем бы рассказал бы о HashMap

  • @leetvin
    @leetvin Жыл бұрын

    Про оптимистичные-пессимистичные блокировки не совсем корректно у тебя. Ты говоришь, что пессимистичная блокировка - это блокировка на уровне базы, а оптимистичная - на уровне приложения. Но это не так очень часто, так делить некорректно. Например, в PostgreSQL уровень serializable работает на оптимистичных блокировках через MVCC. Опять же оптимистичную блокировку часто делают именно на уровне БД - прямо в записи делают отдельное поле "version" и работают с ним, а не хранят его в стейте приложения. Т. е. уже почти "на уровне базы". Те же пессимистичные блокировки можно сделать похожим образом - например, тот, кто хочет захватить ресурс, делает в специальной таблице запись. Остальные перед тем как этот ресурс захватить, проверяют наличие записи в таблице, и если там она есть, то доступ к ресурсу для них заблокирован. Главное отличие пессимистичных и оптимистичных блокировок в том, что пессимистичные блокируют ресурс, а оптимистичные нет. Т. е. в случае пессимистичной блокировки мы обязаны перед тем как получить доступ к ресурсу дождаться снятия блокировки, а в случае оптимистичной наоборот - мы узнаём, что ресурс заблокирован только по результату нашей попытки изменения. Пессимистичная выгодней там, где часто происходит конкурентный доступ к одному ресурсу, оптимистичная - где конкурентность ниже, и где важнее скорость вставки и важно не блокировать ресурс.

  • @user-nq2ng4er7t
    @user-nq2ng4er7t3 ай бұрын

    Переменная которая отвечает за увеличения размера Map называется DEFAULT_LOAD_FACTOR, а не THRESHOLD

  • @reptrept
    @reptrept Жыл бұрын

    Про интерфейс Мар. Там идет 8 - 1 . То есть 7. Тогда и идет перераспределение

  • @ymranaissur
    @ymranaissur Жыл бұрын

    TDD - классная штука. Я с ней сталкивался и кое что делал по ней. Есть только один ОЧЕНЬ ВАЖНЫЙ момент: это было не на работе. Поэтому если на собеседовании меня спрашивают про TDD, то с вероятностью 80% это чисто для выноса моего мозга, а не потому, что в проекте реально это используется.

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    А как ты можешь реально проверить, что на проекте TDD не используется?)

  • @ymranaissur

    @ymranaissur

    Жыл бұрын

    @@Jetbulb например, начать в нём работать.

  • @vladimirblagin3105
    @vladimirblagin3105 Жыл бұрын

    18:12 Бакетов 16??? Бакет - корзинка с Node-ми, элементами коллекции. И на этой корзинке инвентарный номер в виде вычисленного хеша. Сколько возможных вариаций хеша, столько и бакетов ("в принципе есть"). Хеш у HashMap это int это 4 байта, то бишь 2 в 32 степени. Столько теоретически максимально бакетов у коллекции HashMap. Но используются только беззнаковые int, поэтому реально половина. А значение 16, о котором вы говорите как о количестве бакетов (а сколько этих бакетов в принципе есть), это просто начальное их значение выделенное в памяти после инициализации коллекции. Ну это 16 никак не связано с понятием бакета, как можно подумать у вас. PS. threshold ??? Вы точно собеседовали на уровень мидла. :-)) Путаете threshold и loadFactor, это оно 0.75 threshold измеряется как capacity * loadFactor (к слову, это параметры конструктора HashMap) 19:07 "числа я сам в голове не держу" :-) зачем эти детали реализации мидлу? Он должен знать как пользоваться коллекциями и в общих чертах когда какую применять. А не числами забивать голову: static final int TREEIFY_THRESHOLD = 8; static final int MIN_TREEIFY_CAPACITY = 64; 19:56 Нет никакого контракта между equals и hashCode. По hashCode вычисляется хеш и извлекается соответствующий бакет. А дальше идет работа с самим бакетом и там сравнивают ключ уже методом equals. Потому что equals дает точное сравнение, а хеш - это псевдоуникальное распределенное по емкости хеша значение. 22:08 "неправильно" Вы имеете в виду, что он использует HashMap не избегая коллизий? Потому что основной упор в ваших вопросах был на коллизии :-) А какие бы вы дали рекомендации, чтобы избегать коллизий? 28:35 "Какие есть проблемы Future?" Опачки, метод get() - ожидающий ответа от вызванного потока блокируя текущий - это проблема??? А я думал, что это основной функционал этого интерфейса. Он ждет завершения запущенного потока, это проблема? Это его функция! 29:25 почему это вся многопоточность вдруг выродилась в линейное исполнение? Какие это много потоков блокируют друг друга??? Работать может куча потоков, даже этот остановившийся поток может создать пул потоков фабрикой ExecutorService и все они будут работать. Ждать будет только тот поток, который был сознательно и специально остановлен программистом, которому в этой точке данного потока нужен результат работы запущенного потока/потоков и он его ждет методом get интерфейса Future. По вашему, многопоточность - это когда все крутится без остановки??? Управление потоком и взаимодействие потоков - это то, чем занимается Future. 30:18 Все что нужно было бы рассказать об InterruptedException - это не что поток был прерван в процессе ожидания (почему собственно ожидания? ожидания чего? вы про блокировку? поток могут остановить просто потому что кино кончилось у JVM или кто-то решил, что ресурсы нужны, тот же Future, контролирующий поток, сказал ему cancel). Все, что нужно было сказать об InterruptedException - это то, что поток вежливо просят обработать это исключение, последнее в его жизни и корректно завершиться. Вот главное, что нужно знать про InterruptedException. А его почему-то любят ловить (потому что надо по контракту - ибо checked exception) и ничего не делать. А нужно как минимум выставлять флаг завершения потока Thread.currentThread().interrupt(); чтобы контролирующие поток объекты могли понять, что он терминирован. 32:23 "Как себя поведет бин prototype в рамках бина singleton?" Что значит в рамках? Является свойством? Используется в методах? В методах будет вести себя как prototype, при каждом запросе бина будет создаваться новый экземпляр. Свойством? Инжектированным через @Autowared - ну тоже будет вести себя как prototype, когда потребуется в это свойство Spring инжектирует опять же новый инстанс бина этого класса. Да, один раз, но не факт, что вы по каким-то причинам не захотите это поведение поменять. Например ваш prototype бин так устроен, что запускает асинхронный процесс. И в основном singleton-е вы обнаружили, что этот вторичный процесс в блокировке висит. Вы терминируете тот процесс и свойство с бином prototype уже в самом singleton объекте инициируете новым бином prototype. 36:50 Уровни изоляции - это конечно главное, и первое что нужно спросить про работу с БД. Вы назвали некий уровень изоляции "нонрепитэбл рид", которого не существует, есть феномен неповторяющегося чтения, с которым борется уровень изоляции "repeatable read". Ну не суть, оговорка. Главное, вы так говорите о проблемах, как будто они существуют сами по себе и уровни изоляции с ними борются. Это в корне не верная постановка вопроса. Есть определенные уровни изоляции транзакций, определенные стандартном SQL, которые работают на балансе: наличие феноменов/скорость. То есть уже сами стандартом изоляции эти все феномены перечислены. Они часть стандарта. И дело разработчика выбрать на каком уровне изоляции задача должна работать, и получать соответствующую скорость и наличие соответствующих феноменов. Не изоляции придумали, чтобы бороться с феноменами. А определили стандарт из уровней изоляции транзакций с компромиссом документированных феноменов и скорости.

  • @dmitryrakov2795

    @dmitryrakov2795

    Жыл бұрын

    Если честно, этот комментарий выглядит как набор придирок. Автор про Фому, а вы про Ерему. Суть видео - показать, какие вопросы бывают на собеседовании и что ждёт интервьюер, а не устроить конкурс, кто лучше знает детали

  • @vi.v.tsvetkoff

    @vi.v.tsvetkoff

    4 ай бұрын

    ​@@dmitryrakov2795 Здесь человек задаёт весьма специфичные вопросы и с умным видом на них отвечает. Только в ответах полно неточностей, которые просто вводят в заблуждение Я согласен с автором поста. Меня тоже повеселили "проблемы с Future". Плохо рассказано про изоляции. Не сказано, что есть уровни изоляции по стандарту, но, например, в PostgreSQL они немного отличаются из-за MVCC. В конце был сделан вывод, что SERIALISABLE какая-то панацеяот всех проблем, хотя, например, в постгре этот уровень приводит к новым ошибкам. Про блокировки - тоже сказаны только какие-то общие фразы, ни слова про ACCESS_EXCLUSIVE и тп

  • @sergiocoder
    @sergiocoder11 ай бұрын

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

  • @vlera4198

    @vlera4198

    5 ай бұрын

    я для себя понял что устраиваться на работу и работать это 2 разные вещи. когда готовишся к интервью можно заыть чем ты там занимался и просто гуглить что спрашивают на интервью и учить. после трудоустройства можно выдыхать и все это успешно забывать, а потом по новой учить)) я часто ради прикола спрашиваю знакомых синьоров и тимлидов и про хэшмапу и про SOLID - большинство не знают)) а я знаю, и при этом они более крутые девелоперы чем я

  • @chicago21
    @chicago2111 ай бұрын

    Спасибо!

  • @user-bt4ew5cc6u
    @user-bt4ew5cc6u10 ай бұрын

    В моментах очень высокомерно , при всем том , что на некоторые вопросы товарищ сам отвечает посредственно)

  • @Vadim_Ilin
    @Vadim_Ilin Жыл бұрын

    про @Transactional: а как же TransactionInterceptor, TransactionManager, EntityManager причем тут прокси и тд? Разве не этого ждешь при вопросе, как работает?

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Это всего лишь один из вопросов. Не стоит из него делать "центрирование". Конечно же есть и другие вопросы и они тоже задаются.

  • @Vadim_Ilin

    @Vadim_Ilin

    Жыл бұрын

    @@Jetbulb я просто думал) нужно об этом рассказывать, когда задается такой вопрос)

  • @viktorplatonov3941
    @viktorplatonov3941 Жыл бұрын

    Хотелось бы попробовать такое тестовое собеседование. Считаю себя мидлом, но, кажется, это не совсем так)

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Детали интервью: что выбрать, как попасть и прочее ... по ссылке iprody.com/interview :)

  • @mikhailshtefan6725
    @mikhailshtefan6725 Жыл бұрын

    Блин ну вопросы про листы, хешсеты, дедлоки, это точно миддла а не джуна собеседуют?

  • @aks964
    @aks964 Жыл бұрын

    TDD - вот везде спрашивают, в реальности не видел ни разу. Ни в одной компании. Это вообще хоть где то используется? А так, ответил на все, кроме одного вопроса по многопоточке. Многопоточку ни разу не видел в жизни. Так же разбираюсь в докере, k8s. Берите меня на работу. Цена вопроса 200к) xD

  • @MrCosmicAlex
    @MrCosmicAlex Жыл бұрын

    Ещё можно про lost update расскать.

  • @steplerman
    @steplerman Жыл бұрын

    работаю долго на первой работе скоро будет почти 15 лет... получается больше как поддержка базы данных и данной системы (отчеты всякие большую часть занимают) не скажу что совсем ничего не интересовался интересовался, читал книги по c++, java, ковырялся в разных проектах (unreal engine, прочие) делал приложения на android где backend на php простенький писал теперь думаю работу другую найти уже как java-разработчик придется идти как начинающий, но даже тут зарплаты могут быть выше чем у меня сейчас по сравнению с c++, в java порядок считай до всяких обновлений в c++ там был ужас, что с stl, что с прочими стандартными библиотеками понятно что с++ нужный язык, на нем саму jvm написали и прочее но он обычно востребован в серьезных конторах, а их немного уже тошнит ходить на работу и этим заниматься... а найти новую еще придется пытаться искать сейчас ковыряю в VueJs, Spring Boot

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Жыл бұрын

    Спасибо

  • @MrRomanvideo
    @MrRomanvideo Жыл бұрын

    13:20 так и не назвал причину, почему для ТриСет нужно переопределить иквалз

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Если кратко, TreeSet под капотом хранит TreeMap. Соответственно, equals+hashcode должны быть согласованы для работы с ключами (сортировка, поиск). Как это завещает TreeMap. Самый верный вариант для изучения этой темы: - "просто открыть класс и пройтись строка за строкой." Тогда на долго отложится это знание и появится понимание. По крайней мере именно это мне помогло.

  • @user-eh4ep7yc9w
    @user-eh4ep7yc9w Жыл бұрын

    Не осветили интересный нюанс, что Хэшмап может превращать Бакеты из ЛинкедЛиста в Дерево. И еще не совсем понял про 16 Бакетов, если Хэшмэп - это и есть массив бакетов, то Бакетов ровно столько, сколько составляет Капасити данного Хэшмапа, разве нет?

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    Ну как же не осветили про конвертацию списка в дерево, когда об этом 5 минут шла речь, включая моменты когда это происходит и почему. Бакеты и есть массив. Один бакет - одна ячейка массива. Соответственно, размер массива эквивалентен количеству бакетов. По сути одно и тоже.

  • @user-eh4ep7yc9w

    @user-eh4ep7yc9w

    Жыл бұрын

    @@Jetbulb соре, был невнимателен. Спасибо за ответ. Ваши ролики придают уверенности в себе, в своих уже имеющихся знаниях. Огромная благодарность за это :)

  • @Jetbulb

    @Jetbulb

    Жыл бұрын

    @@user-eh4ep7yc9w Все буде добре))

  • @MrRomanvideo
    @MrRomanvideo Жыл бұрын

    Про хэшмап перепутал, назвал случай неправильно реализованноых иквалз хешкод коллизией, когда О(н), когда хешкод возвращает константу.

  • @anatolii720
    @anatolii720 Жыл бұрын

    Как всегда супер контент!!! кстати заметил что вопрос о коллекциях там сет лист мапа, иквлс хешкод и т.д. почти всегда идут со сторон работ с памятью и гарбдж калекшн)) что бакет что хеш их размешение напрямую относится к памяти и доступ к обджектам или линкам, сравнение по иквлс хешкод тоже зависит на прямую от памяти и ГК почему тогда сразу не спросить как хронятся value и reference в памяти и как они чистятся их цикл, именно неверное сравнение обектов в памяти приводит к ошибке а не то какой интерфейс ти взял за основу скорость обработки практически одинаков у всех O(log n), O(n), O(1) по дефолту а вот шаг, итерация или там паралели в стримах сильно меняют картину.

  • @wlasov
    @wlasov Жыл бұрын

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

  • @QuickCube

    @QuickCube

    Жыл бұрын

    У разных компаний разные собеседования. Есть кто даёт сразу задачи на алгоритмы и нужно писать код сразу и быстро. Кто-то спрашивает по брокеры сообщений (какие есть, основные отличия), про NoSQL, docker, helm, Kubernetes. Другие дают задачи на проектирования и т.д.

  • @vadympylypchenko5801
    @vadympylypchenko5801 Жыл бұрын

    Спасибо за видео, очень полезно обновить свои знания покрытые толстым слоем пыли)) PS. Отличный плакат за спиной

Келесі