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

Подготовка к собеседованию на Java Developer

Транскрипция видео:

  • друзья Всем привет Вы на канале Дид болты с вами старый добрый Макс Добрынин Да тот самый преподаватель тот самый разработчик программист и мы снова Сегодня с вами будем рассказывать об интересных темах которые происходят в айте Но прежде чем мы движемся дальше друзья подписываемся наш канал и ставим колокольчик не забываем отметить это видео комментарием ведь это так четко помогает нам продвигаться на просторах Ютуба Напоминаю что у нас есть крутой телеграм-канал куда тоже стоит подписаться мы постим там призы

    00:00:10 - 00:01:08

  • разнообразные вопросы постики крутые интересные а также индивидуальные посты от меня которых я рассказываю Как проходят мои будни или просто делюсь с вами полезной информацией которая позволяет разбираться в каких-то технических деталях любому разработчику Ну а что же сегодня за тема погнали до разбираться [музыка] Тема сегодня самая самая на нашем канале любимая обозреваемая Да друзья техническое интервью сегодня мы с вами поговорим о том как было проведено техни интервью на позицию Middle Java

    00:00:39 - 00:01:42

  • Developer какие были вопросы какие были ответы и какой в конце было в принципе заключение совсем этим мы сможем ознакомиться с вами уже за мгновение Ну что ты ждал этого тебе интересно Погнали в мир технических интервью Java Разумеется любой технический интервью сопровождается какими-то требованиями в данном случае на проект искал вся разработчик с лычечкой с ярлычком с баджиком шеврончиком который называется Middle Java delper Ну то есть какой-нибудь разработчику с опытом работы более двух лет Разумеется который

    00:01:12 - 00:02:13

  • понимает жабу умеет работать с базами данных и в целом Разумеется больше не надо не требуется никаких Сверхъестественных навыков в контейнерезации до киризации всяких клаудов и прочего всего чего сегодня любят набрасывать современные позиции и вот собственно такой кандидат к нам пришёл он заявил о том что ему уже три плюс лет опыта работы соответственно такой себе состоявшуюся window с моей точки зрения он знает Java узнать Java 8 Plus и Даже где-то работал с Java 17 на одном из самых последних своих проектов

    00:01:44 - 00:02:54

  • в том числе он заявил что он круто знает базы данных поэтому на этом интервью очень много было времени уделено именно вопросам с базами данных в частности про транзакции и какие проблемы с транзакциями принципе возникает во время работы с данными между приложениями и прослойкой собственно самой базы данных вот собственно и все это то что требовалось Разумеется ожидание Не супер ты высокий потому что позиция простая как я уже сказал просто Java просто базовые знания спринга базовые знания баз данных соответственно Sorry за этот

    00:02:18 - 00:03:26

  • тавтологию базы базы данные Господи Вот и все погнали друзья смотреть какие вопросы задавались И разумеется какие были ответы А как вообще принципе можно было бы на них ответить Посмотрим это в разборе поехали [музыка] и первая серия вопросов была про цикл разработки Ну или девалопмент Лайф сайкл по-другому его можно назвать всем это известная штука То есть как мы с вами проходим разработку понятное дело в каждых кампаниях каждых командах каждых разных книгах написано Все по-разному мы как всегда будем пользоваться нашей

    00:02:52 - 00:03:59

  • тетрадкой для того чтобы не потерять суть вопросов и идти последовательно друзья мои Итак принципе вопросы были здесь простые чем вы пользуетесь в качестве треккинга ваших задач и принципе как вы их отслеживаете и четко сказал что у него есть опыт работы жиры и это офигенный интересно потому что джерра реально мощный механизм современности есть очень много разнообразных плов которые говорят менеджеры говнецо типа пользоваться и не надо но это особо и не важно человек с Джерри работает а значит он что-то

    00:03:27 - 00:04:30

  • понимает Ну разумеется следующим вопросом был о том какие вы используете Flow при ставками в жире Ну кто не знал есть так называемые транзишен Flow задача заключается в том что мы переключаемся из одного статуса в другой соответственно тем самым отображаем в каком состоянии Сейчас текущая задача находится и в целом если так подытожить то у них было их не так уж и много это по сути разработка это баг Fix это codreview и это тестирование это вполне себе нормальный стек кто не знал жира позволяет конфигурировать эти статусы

    00:03:59 - 00:05:12

  • как только угодно Разумеется компании может внедрять свои собственные пользоваться стандартным набором и человек в принципе нормально написал То есть если подытожить как он видит разработку или жизнь цикл разработки то выглядит это следующим образом Сначала он открывает жиру И разумеется смотрит Какие таски заса они на него или назначены к нему после того как их нету он либо совещается с коллегами Разумеется берет какую-то тоскую работу по приоритету или по тем знаниям которые у него соответственно есть Затем когда

    00:04:35 - 00:05:36

  • таска выделено на него соответственно или правильно сказать Назначь на него он его запускает в работу после этого у него есть статус код ревью когда он все выполнил Разумеется и сейчас был создан пул request или Magic Quest соответственно и он ждать пока он будет запрублен после этого он переходит в статус тестирования разумеется если были какие-то выявлены по этой таске дефектов у тестировщиков есть возможность его переоткрыть и там есть статус специальный бакфикс Ну как бы я такого статуса Откровенно говоря backfix

    00:05:06 - 00:06:03

  • никогда не видел как правило это снова им Прогресс состояние Ну или Intel outment и где-то есть комментарии или какая-то отметка о том что он был возвращен на работу потому что был соответственно дефект обнаружен ну как бы это не проблема человек Вполне себе знаком с пониманием как нормальные команде Где работает более двух человек соответственно устроен жизненный цикл задачи над которым разработчик работает и как её Следовательно нужно передавать дальше на этом всё это не супер технический вопрос но тем не менее

    00:05:34 - 00:06:41

  • Middle jap2oper или просто любой Middle 2 должен понимать как правильно работать задачами не должно быть ерунды Что у вас есть куча задач они собственно ни на кого не назначены каждый делает все что угодно и кстати вот у меня на работе сейчас вот есть такая проблема у нас есть пачка задач и как сделать что-то хаотично задачи не включены в работу ты не понимаешь где он работает что он работает одновременно 10 задач однозначно 1 человек я не в прогрессии и результат вообще не понятно это отдельная история следующим вопросом

    00:06:08 - 00:07:11

  • нельзя было не затронуть тестирование Это был блог не сильно большой но Он рассказал полностью понимание человека о том как вести Юнити тестирования и точнее что на него знает и вопрос был по сути единственный и роковой Что такое Нет это не группа ДДТ друзьям и тест драйв девелопмент то есть проще говоря когда Наши тесты драят разработку или наша разработка ведется на основании тестов с ней написано Ну собственно кто не знал Да тест-драйв девелопмент определяет следующую парадигму действий или алгоритм действий Сначала мы

    00:06:40 - 00:07:50

  • определяем контракт то есть мы по сути создаем какие-то интерфейсы описываемых методы и определяем Какие реализации у них будут Но мы ничего при этом не реализуем затем Разумеется мы создаем тесты и начинаем писать тест сценарий для каждого метода то есть Разумеется что этот метод может впоследствии произвести этот вопрос не о том что он возвращает А как какое будет его поведение выбросить он исключение вернет такой результат не вернет такой результат но произведет какая-то реакция сторонняя Соответственно в этом и

    00:07:15 - 00:08:13

  • заключается идея что мы сначала определяем что наш интерфейс будет иметь то есть контракт что он умеет затем соответственно мы начинаем реализовывать в виде тестов наши ожидания и только после этого друзья мы начинаем с вами что-то реально реализовывать в классах которые будут доставлять бизнес логику в этом плюшка незамедлительно крутая Почему и чем это в принципе связано идея простая что когда вы написали код мы как тупенькие разработчики Мы привыкли мыслить о том что уже в коде написано мы постоянно

    00:07:44 - 00:08:47

  • тратимся в этот код который сами реализовали или реализовали ваши коллеги Ну и Разумеется далее мы пытаемся против этого кода и написать тесты проблема заключается только в одном что мы можем упустить какие-то угловые ситуации так называемые Корнер кейсы ну или в принципе пропустить что-то важное что в коде не было отражено тем не менее оно должно быть отражено функционале Разумеется тесты это не покроет Разумеется когда мы все реализовали задача следующая Мы выполняем Наши тесты тесты должны быть красные поскольку ещё

    00:08:16 - 00:09:20

  • ничего не реализовано в нашей бизнес-логике далее мы с вами реализовываем бизнес логику Опять прогоняем эти тесты И разумеется мы будем с вами отлаживать бизнес логику до тех пор пока все тесты не станут зелеными это вовсе не значит что бизнес логике постоянно будут какие-то недостатки Бывает такое что и тесты написано неправильно но задача следующая Сначала мы пишем тесты потом мы что-то реализуем соответственно потом эти тесто выполняем до тех пор пока они не станут зеленым Вот и все ответил ли кандидат на

    00:08:48 - 00:09:50

  • этот вопрос хоть как-либо но ответ был очень незамысловатый Да я знаю что тест-драйв Welcome А точнее я слышал А что это такое но объяснить он так этого не смог то есть таким образом тема была закрыта Ну было понятно что он никогда с этой парадигмой или с этим подходом не сталкивался Ну разумеется на этом всё [музыка] после разговоров о жизни цикле В разработке о тестировании программного обеспечения в рамках именно тестирования Мы перешли наконец в джаре здесь не было супер таких типовых вопросов Расскажи

    00:09:19 - 00:10:28

  • мне про типы данных что там из себя представляет класс обжиг нет первым вопросом был расскажи разницу между интерфейсом лист и интерфейсом собственно здесь человек Вполне себе отлично справился что интерфейс лист или список он же это структура данных которая хранит себе последовательность элементов и Разумеется работа с этими элементами осуществляется в порядке их добавления в эту коллекцию Ну то есть релиз тот же самый или линкидлист Разумеется Когда мы будем получать доступ к элементам вот как они были туда

    00:09:54 - 00:10:55

  • вставлены разумеется если коллекция не изменилась вот таким образом мы будем получать к ним доступ и доступ ко всему есть возможность работать с индексом Да мы знаем что индекс реальный авлинки для seoth fake и тем не менее сам интерфейс обладает методом Get который позволяет передать индекс и по этой позиции достать какой-либо элемент дополнительный человек четко описал что вот есть интерфейс соответственно и его задача хранить уникальные значения то есть по-хорошему в контракте интерфейсе так и написано что если два элемента по

    00:10:25 - 00:11:30

  • методу equals эквивалентной между собой соответственно такие элементы воспринимаются как уникальные только один из них может быть добавлен в коллекцию дважды элемент видеть не будем также человек добавил Разумеется Если два одинаковых элемента по сути своей через метод equals возвращают false то есть они не эквивалентны согласно методу Apple Store Разумеется мы увидим в коллекции типа Set дважды продублирующийся элемент И тут я задал такой себя вопрос Расскажи мне что такое три сет и тут человек поплыл про три сет

    00:10:57 - 00:12:05

  • ничего не рассказал и я был немножко огорчен Почему Потому что три сет не то чтобы супер популярная коллекция к использованию но в целом сама идея существования позволяет нам ее где-либо применить потому что как я уже неоднократно говорил само знание потенциально повышает шанс его применения если вы чего-то не знаете вы постоянно придумывать какие-то костыли какую-то хренатень которая может быть и заработает Но можно было бы решить это гораздо проще Вы же не будете число Пи заново разрабатывать как бы можно было бы

    00:11:32 - 00:12:37

  • ответить на вопрос три сет ну во-первых самое первое что приходит в голову друзья что эта коллекция которая базируется на другой структуре которая называется тримеб все мы знаем что в 3 м под капотом находится дерево и Разумеется скорость доступа к базовым операциям Как добавить удалить или проверить на содержание у нас скорость доступа логарифм N это базовые вещи которые должен в принципе знать каждый Но если не знаешь три сет хотя бы должен понимать что такое 3м потому что по сути это одно и тоже данном

    00:12:04 - 00:13:12

  • представлении следующим было бы круто добавить что поскольку это дерево оно должно быть упорядочное Разумеется поддерживается сортировка и каким образом это сортировка поддерживается благодаря интерфейсу comparable или интерфейсу компаратор то есть мы должны хранить только элементы которые реализуют интерфейс либо при инициализации коллекции соответственно передать ему компаратор который будет знать как эти элементы соответственно упорядочивать Ну собственно Вот и все этого это вполне достаточно можно было

    00:12:38 - 00:13:37

  • бы добавить Что данная коллекция Не синхронизирована ну и Разумеется что по умолчанию Было бы неплохо соблюдать контракт иквулс Почему Почему Почему на самом деле все просто если при сравнении двух элементов в процессе сортировки в этом дереве выясняется что два элемента эквивалентные Разумеется они должны по-хорошему быть между собой эквивалентны и через Метод equals при этом всем сам по себе три сет не особо беспокоиться по методу equals и поскольку он для сортировки использует comparable или компаратор этот контракт

    00:13:07 - 00:14:15

  • стандартного интерфейса сет просто игнорируется это вот Вполне себе такой самодостаточный вопрос и ответы и больше тут наверное сказать и нечего друзья [музыка] в следующем был вопрос вопрос тоже про коллекции но он был связан с хэшмоб Почему у меня заинтересовал хэшмак Нет не потому что это заезженный зажеванный 35 тысяч раз вопрос я просто был удивлен что человек не знает три сет Разумеется reset под капотом 3 мап и тут мне стало интересно а знает ли он вообще что-либо про мам Ну разумеется был первый вопрос

    00:13:41 - 00:14:49

  • Расскажи о скоростях доступа к элементам в хашмак при выполнении базовых Разумеется операций человек сказал Да собственно Кошмар он имеет константное время доступа Я сказал супер отлично но затем я намекнул говорю А что если у нас какая-то коллизия произошла или какие-то проблемы То есть Расскажи мне про скорость доступа к элементам при выполнении операции только про худшую лучшую и среднюю в том числе и тут человек к сожалению поплыл друзья мои он мне об этом не рассказывал что ну как бы да там константная коллизии Но типа как

    00:14:14 - 00:15:30

  • оно там внутри решается и к чему это приводит Я особо не знаю ну меня немножко огорчило потому что с моей точки зрения Middle и выше должен знать о том как работает хэшмак но а как принципе можно было бы ответить на этот вопрос во-первых я бы сразу отталкивался от жавы 8 хэшмак претерпела изменения А в частности ее внутренний список до который является результатом коллизии превращается в три нот так называемый Но об этом мы поговорим немножко попозже И тут если мы говорим про комплексе или скорость соответственно или сложность то

    00:14:53 - 00:16:05

  • да лучшая скорость в таблице действительно о1 или константное потому что она основана на массивах соответственно Ну зная индекс массива легко можно определить его позицию затем у нас возникает худшее время доступа Она же линейное Потому что когда возникает Коллегия то есть в один и тот же самый список добавляется новый еще раз и еще раз и еще раз и еще раз мы с вами убираемся в этерирование вот тот самый список это есть по сути бакиты до которые хранят последовательность элементов в самом нормальном варианте

    00:15:29 - 00:16:40

  • когда мы работаем схема то у нас стандартный есть 16 бакетов на самом деле Бакет это не что иное как ячейка массива который содержит последовательность элементов и вот как раз в этой последовательности всегда должен быть один элемент то есть мы с вами получаем доступ по индексу к этому батиту или к элементу массива и Разумеется сразу проваливается список где всегда один элемент Но вот оттуда берется константное время доступа разумеется если в элементе хранится точнее в бакете хранится список из

    00:16:04 - 00:17:02

  • нескольких элементов это и есть коллизия в этом случае у нас уже с вами есть Вполне себе проблемка которая называется Окей здесь мы можем получить с вами линейное время доступа от N и это худшее время доступа потому что список у нас обычный в этом варианте как бы ничего плохого в этом нет но тем не менее однако я сказал что есть еще среднее время доступа и не зря я отметил что у нас есть с вами Java восьмая И Джови 8 вот этот самый список он же называется нода ну или элемент этого списка нода называется или узел

    00:16:33 - 00:17:41

  • она преобразовывается в древовидный узел или три но и тут Разумеется поскольку это Дерево все преобразуется друзья мои соответственно в логарифм N Разумеется логарифм лучше чем N и это и было такое существенная доработка в восьмой который уже давным-давно Кстати вышла и кстати по сей день люди реально хреново отвечают на вопрос Расскажи мне про хэшмапы в частности Когда ты ждешь от них три ноты они не могут на это ответить тем не менее Да это было улучшение которое позволяет повысить производительность при наступлении

    00:17:08 - 00:18:12

  • коллекции вот и всё понятное дело когда я услышал что человек не хочет рассказывать ничего про тренод Ну просто было скорее всего жалко мне рассказать Ну может быть я понравился не знаю я решил спросить про внутренние устройства зачем там индекс и в целом как устроен фэшмар как она работает как добавляется новый элемент в коллекцию И тут он тоже особо ничего не сказал вот есть бакеты про баки то я уже рассказал что это по сути массив есть баки ты туда добавляются элементы Ну я тогда задал вопрос а сколько этих бакетов в принципе

    00:17:40 - 00:18:47

  • есть ничего не ответил на самом деле друзья мы здесь все просто по стандарту бакетов 16 то есть массив размером 16 также спросил А что происходит когда необходимо расширить количество элементов соответственно Ну то есть увеличить массив Ну сказал типа ну там есть какой-то порог и он называется собственно вот этот самый или порог Когда необходимо расширить наш массив он со значением 0,75 было бы круто тоже на это ответить тем не менее Я был удовлетворен тем что он сказал о том что да есть такой это уже клёво что он об

    00:18:14 - 00:19:33

  • этом знает Ну собственно пожалуй друзья это все напоследок конечно хотелось бы отметить про три нот и в частности что у них тоже есть свой так называемый триффи или трифай нот treashold он называется trifield идея заключается в том что когда наших элементов друзья становится 8 да да потому что числа на самом деле я сам голове не держу но как бы для вашего развития было бы Клево вам об этом рассказать Когда в нашем списке обычно связанном списке становится 8 элементов по коллизии в этот момент дерево трансформируется точнее список

    00:18:53 - 00:20:07

  • трансформируется в дерево и порог этот 8 собственно Вот и все никаких сложностей Однако здесь хороший вопрос Стоит ли все эти цифры держать голове честно я вам скажу вообще не стоит я не знаю проект где вам реально придется столкнуться с тем что вы должны четко Знать treeshold 1 списка или другого дерева другое дело Вы точно должны знать что такие поня там существует и на Вот таких принципах все дело строится одним из вопросов был вопрос с контракта между iqos и hascot в рамках коллекции базирующихся на хэшах и тут

    00:19:30 - 00:20:39

  • сожалению человек Вообще ничего не сказал мне Я был очень огорчен почему это так важно про коллекции Хотя вроде все исходит из контракта и хэш-код из самого класса обжиг проблема заключается в том что это лишь функция или таблицы которые базируется на хэш функцию Разумеется что бы вычислять позицию в бакете или вычислять позицию в этом массиве индекс тот самый Нам необходимо какая-то точка Откуда мы можем отталкиваться и Разумеется наслание ключа и вычисляется тот самый хеш-код там есть соответствующие функции которые

    00:20:05 - 00:21:15

  • за это отвечают на главное что объект или класс или тип данных который будет выступать в качестве ключа он должен определить хеш-код чтобы у нас не было такого что два по сути одинаковых элемента возвращают разное значение хешкот Напоминаю что хешкод возвращает интовая значение в его максимально соответственно диапазоне затем Разумеется на этом на этой основе вычисляется позиция в массиве который хранится в хешмапе Разумеется сюда вставляется элемент круто добавить что в случае коллизии если второй третий пятый

    00:20:39 - 00:21:53

  • десятый элемент добавляется в один и тот же Бакет то этот элемент вставляется друзья в самое начало то есть элемент который уже есть в этом бакете он уходит на последнее место это тоже сделано с точки зрения производительности чтобы быстрее что либо доставать и далее там Разумеется происходит сравнение хыша Разумеется и его собственного ключа по которому элементу вставляется вот можно было таким образом написать Каким образом устроена хашмак и этого было бы вполне достаточно такое описание было бы

    00:21:16 - 00:22:15

  • круто и для синего и для мидла из моего опыта не каждый может на него классно ответить тем о базовых понятиях как все внутри устроено без каких-то цифровых вычислений можно было бы описать К сожалению кандидат не сильно круто на это ответил да видно что поверхностно он где-то с этим сталкивался с другой стороны прослеживается что он просто использует хэшмар по без какого-либо понимания как она внутри используется а главное Какие могут быть последствия использования этой коллекции если мы используем ее неправильно Ну вот такого

    00:21:46 - 00:22:48

  • образа можно было бы дать ответ собственно вот [музыка] следующая пачка вопросов были вопросы про многопоточность здесь очень важность потому что во-первых мы работаем в мире реактивщины это сегодня популярная Тема и там тоже потоки Разумеется знание многопоточности как оно устроено даже на базовом уровне и не вдаваясь подробности того как там в Джаве что-то происходит А хотя бы проблемы и нюансы это все является очень жизненно важным и в принципе точки того понимаете ли вы реактичную или многие другие вещи которые

    00:22:17 - 00:23:31

  • происходят во время выполнения каких-либо систем и первым вопросом был вопрос про Deadlock Да я спросил про дэдлоки моему прям офигенному сожалению человек блин нифига не ответил продают Локи такой блин реально ты не знаешь куда даже джуны должны знать что такое дедло А как бы можно было бы ответить на этот несложно на самом деле вопрос по сути дедлок это состояние когда два потока ожидают друг друга и поскольку они друг друга циклично ожидают они не могут завершить свое действие они принципе попадают в бесконечные ожидания

    00:22:55 - 00:24:01

  • друг друга на самом деле на практике все гораздо сложнее если говорить и речь идет не столько про потоки А сколько о ресурсах которые используют потоки потому что поток это всего лишь единица процесса которая позволяет выполнять параллельно какую-то операцию другое дело когда эти операции или эти потоки между собой имеют общие ресурсы для использования здесь ситуация следующая Что можно написать таким что представим себе что у нас есть поток один и поток-2 и это минимально то что у нас должно быть следующим мы говорим о том что у

    00:23:27 - 00:24:31

  • нас есть два общих ресурса который и первый второй поток будет соответственно использовать следующим шагом здесь друзья выступает то что первый поток захватывает ресурс номер один а ресурс номер два захватывает соответственно следующий поток и все это делается параллельно и затем на 3 Шаг выходит Тема что поток номер два не высвобождая свой ресурс за требует ресурс номер один а поток номер один тоже него освобождая свой собственный ресурс за требует ресурс который удерживается при помощи соответственно второго потока и тут они

    00:23:58 - 00:25:15

  • блокируются потому что они требуют ресурсы которые еще не были Разумеется высвобождены другим потоком противоборствующим и они падают в спячку таким образом они цикличны друг друга ожидают И разумеется никогда и Не дождутся собственно что там происходит Однако можно было бы если мы говорим про профессионализм а описать еще более детально какие есть условия наступления дедлога ведь предыдущая описанная ситуация всего лишь говорит о том что блин это Как оно выглядит То есть первый поток просит ресурс у другого потока

    00:24:37 - 00:25:41

  • другой поток просит ресурсу первого потока они держат свои ресурсы и короче они могут поделиться ресурсами простая жизненная ситуация когда вы с кем-то сталкиваетесь в узком коридоре и вы лбами друг другу не можете разойтись То есть вы делаете шаг влево и человек был шаг вправо и таким образом вы постоянно лоб стоите можете разойтись вам рассказать ты стоишь а я иду Или наоборот я стою Ты давай Двигайся А вот это как раз и описывает дедлок и здесь есть четыре правила которые говорят о том что такое реальный блок Ну то есть

    00:25:09 - 00:26:11

  • Первое правило или проще говоря взаимные исключения и здесь подразумевается что каждый из потоков обладает своим собственным ресурсом и уникальными правами доступа на этот ресурс проще говоря когда первый поток захватывает ресурс И разумеется пока он с ним работает второй поток не может обратиться к этому ресурсу он должен его ждать следующим пунктом является Ожидание и удерживание друзья мои и в этом случае это как раз та ситуация когда один из потоков уже удерживает свой ресурс но просит при этом другой

    00:25:40 - 00:26:58

  • ресурс и как раз это история из предыдущего ответа что когда поток один просит новый ресурс второй еще с ним не поработал Ну вот и ситуация третий момент является что нет никакого реального механизма самостоятельно разрывать Это ожидание то есть проще говоря тот поток который удерживает один ресурс и за требует новый он никак не может самостоятельно это все приостановить То есть он будет бесконечно ждать пока что-то снаружи не произойдет от него не зависящее и последний здесь пункт друзья он самый

    00:26:19 - 00:27:27

  • легкий Это цикличное ожидание то есть что по сути поток один ждет поток 2 поток 2 ждет поток 3 поток 3 ждет поток н а поток N ждет поток 1 и мы как бы находимся жестком сцеплении Разумеется не можем его разорвать собственно вот такой вот длинный ответ на то что такое dedlock Но это в принципе ответ я бы сказал бы не то чтобы меня как профессионал или там все завышаю какие-то рамочки но в целом Middle должен так отвечать поскольку Ну многопоточка это сегодня очень-очень популярная штука да Многие говорят Ой блин всю жизнь работаю

    00:26:53 - 00:27:59

  • и никогда многопоточку не взял но так было раньше друзья сегодня Мы двигаемся в мире активно и потоки Там просто кругом вы чётко должны понимать что и как работает Какие ресурсы захватываются и на каких ножках собственно этот куриный Дом стоит [музыка] следующим вопросом к теме про многопоточность был вопрос про экзекитор-сервис и принципе про интерфейс callbal и здесь чувак отлично ответил Я спросил что такое экзекутор сервис Он говорит что ну принципе это сервис который позволяет запускать задачи в обработку и на выходе он

    00:27:27 - 00:28:30

  • возвращает нам результат в виде фьючер Ну я спросил Окей А что такое callbal и человек тоже круто ответил что Кола был интерфейс по сути это интерфейс рано был то есть по сути это реализация будущей задачи которые поток соответственно будет выполнять разница лишь в том что интерфейс скол был возвращает результат в отличие от интерфейса Run то есть такое себе реально полезное улучшение Ну как бы я был полностью этим ответом сразу было видно что человек его использовала тут и спросил оппочке ты сказал про фьючер что такое фьючер и тут

    00:27:59 - 00:29:07

  • человек немножечко поплыл Почему я начал спрашивать какие есть проблемы фьючерс он сказал Да нет круто Типа все нормально типа когда результат будет получен соответственно или вычислен то благодаря методу Get мы получим результат который собственно интерфейс сколов был или его реализация или лямдо-выражения на основанное на интерфейсе colobal вычислила другое дело что вот тут как раз я и ожидал более детальный ответ А задача заключается в том что да действительности метод Get интерфейсов фьючер возвращает результат

    00:28:33 - 00:29:41

  • другое дело что метод Get блокирующий метод Это важно Это важно Это важно особенно когда мы говорим про реактивную поскольку когда мы вызовем этот метод весь поток в котором это выполнено он становится и будет ждать пока Разумеется вычисление не произойдет И разумеется многопоточность очень четко выразилась в линейное выполнение Ну то есть по сути да много потоков но они блокируют друг друга разумеется это понижает нам соответственно производительность круто да человек ответил нет но можно было бы

    00:29:07 - 00:30:18

  • в это немножко разобраться Тем более что в официальной документации К соответственно классу фьючер и его методу gett это все четко описано Ну как-то так затем последним моим вопросом был Опа Ну ладно вижу чуть-чуть хромаешь нога по точке я и сам каюсь в некоторых вещах хромая Но это нормально Ну я решил задать вопрос другой самый базовый и тут должен знать даже Джон на самом деле за исключение интернета Exception Этот человек ничего не рассказал Я был огорчен Ну на самом деле все что можно было и нужно было бы рассказать что это

    00:29:43 - 00:30:52

  • исключение которое при его выбросе сигнализирует о том что поток был прерван в процессе ожиданий вот и всё Это всё что было достаточно можно было добавить что это проверяемое исключение что так или иначе нужно будет проверить если мы работаем с jaway Ну как бы вот такая вот история собственно вот такие вот ответы про многопоточку были вот такие вот вопросы Разумеется каждый может отвечать на это как ему захочется и как он может но тем не менее он сказал альтернативный вариант как можно было бы ответить был Я доволен ответами но я

    00:30:18 - 00:31:19

  • скажу как бы и да и нет было видно что у человека все-таки есть какой-то опыт работы с многопоточкой другое дело что он поверхностный Хотел бы я видеть лучший результат Да поскольку мы работаем с многопоточкой и при собеседовании я как бы ставил на это основной акцент другое дело Нет предела совершенства и всем нужно было бы подтянуть Главное чтобы этот человек в этом разбираться Ну что ж поехали к следующей пачке вопрос [музыка] следующая пачка вопросов была связана спрингом и здесь было все в перемешку

    00:30:48 - 00:31:56

  • Spring Boot и Spring в целом но больше конечно же про основу спринга и первый мой вопрос такой мы короны его больше люблю Расскажи мне про skoup и бинов спринги человек рассказал про синглтон и про татай и такой Вау это хорошо другое дело Что mible должен знать понимать что там не только синглтона прототайпы Конечно бы хотелось бы знать что там также есть request там же есть Application Там же есть вебсокеты там же есть сешон с копы Разумеется я не просил знать что в деталях они себя представляют но честно говоря Middle

    00:31:23 - 00:32:30

  • четко должен знать и самих их названий что реквесты на уровне http запроса можно так выразиться совершенно на уровне сессии действует вебсокет на уровне жизнедеятельности и Application Пока наши собственно приложение собственно тот самый контейнер пока что он работает вот так вот друзья можно было бы ответить на этот вопрос Ну как бы я был удовлетворён и э хоть и не полностью но двинулся дальше следующий мой вопрос был А как себя проведёт прототайп Бин в рамках синглтона и тут кстати К сожалению моему

    00:31:57 - 00:33:06

  • человек ничего не ответил Почему к сожалению Ну всё просто друзья мои то есть не сложно догадаться что э прототай Бин в сингл Тоне создастся всего лишь один раз потому что Ну синглтон создастся один раз в рамках одного контейнера соответственно это всё что требовалось это написано прямо явно в документацию спрингу И разумеется было бы круто это знать Тем более что даже жены могут ответить на этот вопрос Но человек к сожалению это не ответит следующим вопросом был вопрос о том какие ты знаешь аннотации для создания

    00:32:31 - 00:33:35

  • бинов и здесь человек в принципе назвал них много это репозитории это рест-контроллер это контроллер - это сервис это комфонинг это конфигур ration нотация мало кто знает или мало кто вникает что аннотация configuration под капотом себя хранит аннотацию компанию то есть любая конфигурация является по сути готовым вином Ну и также он назвал аннотацию Бин Э Разумеется для Java конфигурации наших бинов и здесь я был полностью удовлетворён видно что человек владеет всей широтой э этого вопроса видно что он много бинов создавал и

    00:33:03 - 00:34:12

  • разными способами этого было вполне достаточно следующая пачка вопросов была посвящена базе данных в рамках спринга И не только и почему ей так много удивиться внимание ещё знаете сходу потому что человек сказал О блин Я много работаю с базами данных вот меня мой текущий проект про базы данных Я так люблю базы данных в общем я слышал очень много про базы данных таких себе заявление потому что база данных баз данных база данных ну такой давай-ка проверим и мой первый вопрос был о том как работает аннотация транзакшенал в

    00:33:38 - 00:34:37

  • стринги и тут человек говорит ну она типа делает транзакцию Я такой хорошо а расскажи говорю как это транзакция будет работать на уровне класса ну Ну вот повевший на классы весь класс будет транзакционный я такой ну точнее все его методы я такой Здорово Всё круто на самом деле говорю А что будет если данный класс унаследован от другого класса и у класса родителя есть какие-то другие методы и как в этом случае будет работать аннотация транзакшна на уровне текущего класса где она установлена и тут человек

    00:34:08 - 00:35:17

  • ничего не сказал К сожалению на самом деле все просто аннотация транзакшна которая поставлена соответственно на текущем классе она будет применяться ко всем его методам другое дело она не будет распространяться на методы которые есть в классе родители чтобы заставить её работать нам придётся явно эти все методы переопределить в классе где собственно это аннотация и находится Вот как раз так и можно было бы ответить Но человек не ответит затем я спросил другой более хитрый вопрос Но человек же разбирается в базах данных Разумеется в

    00:34:42 - 00:35:52

  • транзакциях в том числе Я спросил как работает принципе аннотация транзакшенал соответственно в springe вот представим У нас есть метод я повесил на него эту самую транзакцию как оно будет работать и тут он сказал Ну вот она будет работать на этом методе и все что в этом методе выполняется соответственно это не совсем так но здесь вопрос заключался в том что происходит в этот момент Каким образом спринг регулирует роллбэки коммиты и прочее на самом деле Ответ должен был быть более простым и четким

    00:35:17 - 00:36:30

  • что когда мы вешаем аннотацию спринг вокруг этого метода вешает так называемую прокси и по сути Он всего лишь делает обертку видит рай-кетч выполняет оригинальный метод И разумеется если что-то произошло какое-то исключение то он в течение это реагирует в зависимости от того как мы законфигурировали транзакцию через собственно аннотацию Вот и все друзья это все что нужно знать как работает тран это спрингъект да если к тому что могут быть ограничения с наследниками Точнее с классами родителями Вот так

    00:35:53 - 00:36:59

  • и шибко сложно Однако Middle работающий много с базами данных должен четко это знать опять же возвращаясь к идее того что человек заявил о том что он реально много работает с базами данных понятное дело мне хотелось узнать насколько глубоко его знаний и здесь мы продолжили копать в рамках транзакции и я задал вопрос расскажи мне как друг мой милый про уровни изоляции и тут человек назвал четыре уровня изоляции как и полагается То есть это ритм ритангет это друзья мои и собственно серия Light Да было все

    00:36:26 - 00:37:38

  • клёво говорю Ну расскажи про них что ты о них собственно знаешь И тут человек мне рассказал вообще ничего типа они есть это клёво Это здорово и такой серьезно блин ну это не серьезно Ну хорошо я тогда спросил О'кей Но ведь не зря уровни изоляции существуют Наверняка есть какие-то причины почему они существуют и я хотел намекнуть На то что есть кое-какие побочные эффекты при работе в параллельной среде с базой данных ну то есть когда несколько параллельных запросов работает с базами данных Разумеется меняет данные и какие

    00:37:03 - 00:38:21

  • проблемы при этом всё возникают Ну четко на это всё намекнул Однако человек ничего не ответит он говорит Ну вот есть в общем эти четыре уровня рассказывали проводить там коммиты это что в этой ситуации это такой уровень изоляции а при котором можно читать изменения какой-то другой параллельный транзакции который ещё ничего не закомиссияло Ну как бы да это правда Однако Давайте реально разберёмся как миддл который много работает с базами данных должен был ответить и здесь друзья у меня блин целый список чего

    00:37:41 - 00:38:42

  • можно было бы рассказать и Первое это самый Побочный эффект потому что именно побочные эффекты породили саму смы изоляции и первый называется или грязное чтение как раз вот здесь вся и сон что чтение не за комичных изменений какой-то другой параллельный транзакции Когда у нас есть две транзакции они выполняются одновременно над одними теми же данными в частности речь идет про кортеж данных и они изменяются И разумеется Побочный эффект заключается в том что одна транзакция видит ни за комичное изменение другой транзакции Следующий

    00:38:12 - 00:39:22

  • пункт называется номер Питер был рейд вот этот самый Побочный эффект говорит о том что мы постоянно получаем с вами обновленное значение которое является результатом другой параллельной транзакции пока наша текущая транзакция все еще движется но как бы это целая проблема и самая последняя проблема это Фантом соответственно друзья здесь проблема заключается в том что когда мы несколько раз получаем какую-то информацию какую-то набор информации в этот момент другая Параллельная транзакция удаляет или добавляет целый

    00:38:47 - 00:39:48

  • кортежи Разумеется и мы в этот момент Разумеется имеем не консистенцию да под кортежем здесь подразумевается ряд на самом деле то есть когда у нас добавился какой-то новый пользователь или удалился новый пользователь А наши транзакция еще не закончена А мы как раз с удаленным пользователем или его данными только что работали соответственно все это ряд проблем Это эти проблемы возникают во время параллельных транзакций То есть когда мы с данными работаем через много транзакций в один и тот же промежуток

    00:39:17 - 00:40:20

  • времени именно поэтому друзья и появились уровни изоляции напоминаю их 4 ритм комитет камитель пита был Рид соответственно и серия Light [музыка] существует то что в той либо иной степени эти уровни изоляции решают проблему того самого джокере но он или Фантом Разумеется в зависимости после того какую вы транзакцию убираете уровень изоляции для него настолько вы будете защищены Ну приводя простой пример сериала isable закрывает все проблемы которые мы с вами уже озвучили но разумеется это уже стоит дороже вот

    00:39:49 - 00:41:18

  • так вот можно было бы ответить мидлу который говорит о том что у него много опыта работы с базами данных другим вопросом про аннотацию транзакцию у меня был вопрос пропагации или распространение транзакции Кто не знает уровень изоляции это не только единое Что может быть для транзакций также есть уровень распространения этой транзакции и тут уже не столько про уровень базы данных сколько про уровень приложений и как Spring будет с этим всем работать и реагирует соответственно так и называется пропогейшен идея заключается

    00:40:35 - 00:41:36

  • в том как Spring собственно будет обрабатывать входящие транзакции как он будет на них реагировать и что ему Для этого необходимо сделать и здесь ну как бы на самом деле очень большой список того что можно рассказать другое дело что их реально настолько много что в голове не удержишь тем не менее человек даже об этом не знал меняет немножко огорчило но яма Разумеется расскажу как можно было бы ответить на этот вопрос и для этого опять же у меня заготовлен список который просто перечисляет эти виды пропагации и расскажу каждую в

    00:41:06 - 00:42:04

  • отдельности что оно означает первое друзья из них это require requared он же по умолчанию дополнительно указывать не надо это значит что у вас должна быть транзакция если она уже есть будет использоваться текущая транзакция если нет создастся новая транзакция то есть эта ситуация когда это мягкий способ обеспечения транзакционности другим моментом является Саппорт собственно здесь используется текущая транзакция или не используется вообще то есть Идет проверка если текущая транзакция мы используем если данный транзакции Нет ну

    00:41:35 - 00:42:43

  • Бог с ним мы ее не используем Следующий пункт является мандатры или обязательный он очень похож на рекламе но это очень сильно отличается на самом деле здесь используется текущая транзакция то есть осуществляется проверка если она если нет выбрасывается исключения то есть Рекламу по сути говорит о том что Дана нужна но я создам и сам если ее нет мандатрий говорит такой жесткий типа да она нужна не создашь я тебе выброшу исключение следующим пунктом является и здесь если транзакция есть то будет просто тупо

    00:42:09 - 00:43:19

  • выброшенные исключения и все Ну то есть Вы не должны использовать транзакцию в этой части никогда То есть это такой жесткий способ регулирования применения транзакций и друзья у нас осталось два последних это requires New соответственно если текущая он ее приостанавливает и создает новую Ну вот и все и последний Это nested это не столько просто как может показаться на первый взгляд делает следующий шаг если есть текущая транзакция то он создает так называемый Save Point SA это по сути точка Куда нам необходимо вернуться или

    00:42:44 - 00:43:56

  • можно просто выразиться rollback И разумеется если в ходе выполнения транзакций текущей nestel происходит исключение то все откатывается на момент где произошел этот Save Point если текущий транзакции в принципе нет то в этот прекрасный момент происходит следующее он просто ведет себя как require то есть самый себе по умолчанию вариант вот так вот так можно было ответить на самом деле все знать это не обязательно все это можно установить в документации спринга к аннотации транзак но другое дело что об этом функционале

    00:43:21 - 00:44:27

  • знать нужно можно просто да вот есть разные уровни пропагации и они говорят о том как себя спринг будет вести если есть транзакция или она отсутствует соответственно это вполне достаточно четко отвечает на вопрос что человек с этим сталкивался он об этом знает он об этом помнит и он разумеется это знание будет применять когда в этом есть необходимость когда он в этом не знает не помнит Разумеется он это и применяется соответственно него это увидеть в коде вероят ещё и ошалеет [музыка] Короче как вы все поняли но я в общем

    00:43:53 - 00:44:56

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

    00:44:26 - 00:45:32

  • пессимистической отличается тем что одна действует на уровне базы данных другая действует на уровне приложения забегая вперед человек на этот вопрос абсолютно не ответил он даже не слышал что такое может быть тут мне очень поразило потому что он уже заявил что он работал с базами данных очень много он работает соответственно но Разумеется он должен знать этот базовая тема при работе с джипа Ну хорошо Ну дай Бог с ним и на это на самом деле интервью закончился тем не менее я вам расскажу как можно

    00:44:59 - 00:45:53

  • было бы на этот вопрос ответить то есть мы говорим с Вами про оптимистическую пессимистическую блокировку в процессе работы с джипа или ее реализациями стоит начать с того что это вообще такое Как оно происходит опять же мы говорим с Вами про параллельное выполнение нескольких транзакций когда мы работаем с вами с данными и здесь оптимистическая блокировка выполняется на уровне самого приложения Это значит что есть специальная аннотация или аннотация версия которая ведет свой собственный внутренний счетчик Это значит что пока

    00:45:26 - 00:46:35

  • мы с вами в Персидском контексте работаем с какими-то данными если в этот же момент этот счетчик изменяется то будет выброшенные исключения Разумеется и потом необходимо будет это все состояние восстанавливать То есть это тот момент когда вам запрещено пока кто-то работает с данными их изменять читать и так далее но этого было вполне бы достаточно описывает что это такое Вот и все другое дело что это не всегда вариант поскольку такой вариант четко подходит Когда у вас минимум записей и максимум чтения

    00:46:01 - 00:47:10

  • мало кто хочет сталкиваться с постоянными отказами Ну как вы прекрасно понимаете что если каждый раз я буду записывать когда кто-то читает Разумеется исключение будет просто целая простыня Ну собственно это отвечает на вопрос Где это применять другое дело Что такое пессимистическая блокировка пессимистическая блокировка это блокировка на уровне самой базы то есть сама база это все дело поддерживает Разумеется пока идет процесс работы с данными чтение запись обновления полностью запрещено соответственно и

    00:46:35 - 00:47:35

  • такой подход более эффективен когда мы Разумеется делаем очень много обновлений соответственно поскольку на уровне базы это легче регулировать и легче выполнять операции откатов или какие-то повторные операции при обращении или какой-либо работы с данными все это на на обеспечение консистентности в мире параллельных транзакций потому что пока одна транзакция работает как мы знаем никто не должен никуда внедряться врываться здесь можно было бы легко Разумеется поговорить о том что есть принцип эссе да И там есть изоляция в

    00:47:05 - 00:48:17

  • том числе то есть мы говорим о том что пока одна транзакция работает другая или 3 или 5 или 10 транзакции ни в коем случае не должны врываться в этот процесс и влиять каким-либо образом на данные тем не менее Это все можно исправить при помощи уровней изоляции транзакции и вот друзья как на этом можно было ответить И разумеется друзья я не требовал от него все виды пропаганцы Я их сам не помню вопрос только в одном знаешь ли ты что они есть какая у них задача разумеется это и позволит тебе их применить если у тебя в

    00:47:41 - 00:48:46

  • голове Это знание есть собственно вот из чего складывается собеседование на позицию мидла Как вы понимаете Не все супер Сложно тут просто узнать определенные моменты которые ты используешь при разработке программного обеспечения Это как Я говорю что нужно все-таки разбираться в деталях Так что устроено Как работает потому что это джун ему даже задачу говоришь как эту задачу решить он идет ее и решает Разумеется и только после Вау У меня получилось Middle это уже уровнем повыше он должен реально разбираться в

    00:48:14 - 00:49:13

  • проблемах которые мешают И разумеется о последствиях принятия своих решений и все это про нашу ежедневную работу [музыка] короче вот так друзья Вот мы подошли с вами консоль я напоминаю вы на канале jetbalp и с вами Макс Добрынин Конечно же это тот человек который преподает рассказывает вам но весь такой на все руки мастер Разумеется друзья я вас призываю ставьте комментарии оставляйте лайки подписывайтесь на канал то есть нажимайте колокольчик и не пропускайте все самые интересные видео ведь мы так

    00:48:44 - 00:49:49

  • реально Для вас стараемся Напоминаю что у нас есть друзья телеграм-канал где мы описываем разнообразные посты из айтишки оставляем для вас призы И я также оставляю Там индивидуальные посты в которых рассказываю о своих боевых буднях на сегодня это все друзья вы на канале jetball До новых встреч

    00:49:17 - 00:49:58