Тестовое собеседование Java разработчика #15 - Семён Баликов

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

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

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

    00:00:00 - 00:01:36

  • мне нужно повторить или изучить пригодится обратился к евгению сейчас хорошо что кроме коры ну да вокруг и значит миру базу данных приборке ну я изучил spring spring над с выемкой или в качестве гипер ней то естественно среди синхронных брокеров это наверно копкой и обе мамки потом что он основном авен естественно там стандартно 8 java что ты крупную упускаю spring nut стандарты стек то есть ты освоил отлично давай там этого дела с таких детей на вопросы но они помогут asshole что он делает ли чего

    00:00:47 - 00:02:34

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

    00:02:00 - 00:03:22

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

    00:02:40 - 00:04:46

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

    00:03:45 - 00:05:43

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

    00:04:50 - 00:07:02

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

    00:06:03 - 00:07:53

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

    00:07:01 - 00:08:47

  • убрать то она заранее заранее можно проставить аннотации на java объекте и таким образом делать различные обратные преобразования вот про кодовую базу я и говорю что проставив аннотации в java классе мы можем делать прямой и обратный marching при наличии крановой башни немного затрону каждого тура скажи да вот кошмар такой худший случай поиск элемента по плечу в могли флешмоб хэш мобильную если там постоянные комиссии и крыш мапо у нас до 8 и если происходит комиссии элементы начинает начинает прицепляться валенки tlist при наличии к

    00:07:52 - 00:09:45

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

    00:08:51 - 00:11:19

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

    00:10:05 - 00:12:10

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

    00:11:07 - 00:12:55

  • ожидаемым если оно не совпадает тогда следующая итерация цикла и опять берется текущие значения и так вот эта зацикленность она постоянно до тех пор пока ожидаемое значение с именно с тем что мы инструментики скажем небольшой прыжок водки верните тоже понять как оптимист и пессимист и блок чем отличается чем отличается есть опись и мистика ногти месте клок осуществляется на уровне jpeg контекста persistent насти hibernate добавляется поле version стика entity нашему и соответственно соответственно короче

    00:12:01 - 00:13:44

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

    00:12:51 - 00:14:47

  • этом случае вам не нужно где-то отдельное поле поддержку или нет отдельно поле под версию но мне кажется не нужно мне кажется в контексте persistent насти просто все хранится ты знаешь потока безопасной коллекции java [музыка] с как бы из коллекции именно nismo получается даже мало то есть другой набор данных среди map самые продвинутые the con carne флешмоб наверное ведь от этого были хэш тейлз и синхронность map статический метод прямо по возвращал но сейчас confession of самый крутой считается очень уж ты был он получается

    00:13:51 - 00:15:41

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

    00:14:46 - 00:16:27

  • соответственно и не возникает никаких конкорд материки шансов различные чем я словно sti lenchik и шмап особенностью в том что и в обычных ешь мапей элемент порядок добавления элементов то есть не гарантируется не гордится что элементы fresh нами будут решаться в том же порядке в котором добавлению маленьких лишь mapi этот порядок гарантируется как раз такие последовательности элементов при добавлении в линки лишь вопрос равна такого равна тому как они будут храниться в этой самой хэш moby вот получается

    00:15:40 - 00:17:12

  • так вот как хорошо нам необходимо решить следующую задачу по условиям на на форд приходит лист window пусть это будет 1 2 3 4 и 4s на выходе я хочу получить марку которая объяснит мне сколько раз повторяется каждый из чисел то есть в данном случае у меня например будет мо по примеру 11 название самого элемента значение количество включений 22 вот это 3342 и два условия теперь кругом решить может атаковать и злой я бы рекомендовал сначала поговорите слова решение который хочет сделать а потом уже представителем

    00:16:25 - 00:19:03

  • своего дома по и проходя по листу и slim элементы отсутствует добавить туда элемент с значением 1 если элемент присутствует мультиками читаем текущие значения если шмапы и интимный 1 и записываем обратно хорошо допустим будем использовать обрабатывать нам пантерка но пока решение качестве языке как lie to me [музыка] если элемент не содержится мы его просто помещаем с включением едим какая ошибка компиляции компиляции указать наш иметь или полностью проверку на null делаем таком случае и на именно напуском я хочу например

    00:17:40 - 00:20:58

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

    00:21:17 - 00:23:30

  • данного списка затем во первых нам нужно создать саму хэш папу чтобы присвоить ссылки сук взять файл и присвоить ей объекты шмапы вот делаем stream потом нам нужно что нам делаем тоже самое условие за допустим здесь у нас можно спросить метод пик поскольку map стима map используется для преобразования аргументов а пик и возвращают тот же самый нам по сути нужен проход а даже не пика for each можно использовать нам этого достаточно написать нам то же самое с группировку там есть очень хороший подходить к вопросу дробь таким

    00:22:45 - 00:24:34

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

    00:23:40 - 00:25:24

  • стрима перелил stream многие могут подумать что они в другом потоке будут выполнять блокирует метод основного потока до сих пор как они результат вся фишка в том что при ползти макс пользуется разные ядра процессора при обработке именно этих потоков for джен паул а вот поэтому нужно знать грань как до параллельности мы использовать во первых знать количество ядер процессора соответственно если огромное количество то есть набрали малое количество элементов мы будем обрабатывать пора ли стримах to set

    00:24:33 - 00:26:02

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

    00:25:19 - 00:27:02

  • оптом это получается объект который мы вызываю никиту сервиса со dmitry перед вами вокала бы мы можем получить обратно [музыка] комплексе а комп литва включая он позволяет во первых асинхронно комбинировать эти completo был фьючах очень не может completo был ключа как можно добавлять к себе кубики на динамические различные и таким образом асинхронную операцию динамические продлевать или уменьшать просто в этом плане мы можем просто колобок и за бы потом вызвать get и заблокировать основной поток с компьютеров и учи мая нам и

    00:26:15 - 00:27:58

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

    00:27:19 - 00:29:19

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

    00:28:18 - 00:30:22

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

    00:29:22 - 00:30:54

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

    00:30:25 - 00:32:10

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

    00:31:26 - 00:32:50

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

    00:32:08 - 00:33:55

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

    00:33:01 - 00:34:42

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

    00:33:54 - 00:36:34

  • знакомой чтобы у нас это получается . если бы я просто это по-другому использовал я это прописывал сама entity я как то я вот через день я использую ота кте признавать для решения с этим проблемы можем суп select использовать использовать смотрите есть чтобы не уходить в теоретику это же что у меня есть 22 клиент делает запросы 1113 неважно выглядит и выполняет запрос и 1231 weatherby выполняет запрос и 1231 вопрос сколько реальных обращений к базе данных будет и использование кеша первого уровня в этом

    00:35:09 - 00:37:42

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

    00:36:49 - 00:39:21

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

    00:38:14 - 00:40:30

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

    00:39:30 - 00:41:07

  • них там то есть это как бы даже модуль по моим стринги есть spring контекста отдельные spring framework который как раз таки представляет собой работу с контейнером зависимости spring деле совершенно модули spring spring core уши inversion of control поговорим как транзакций вот мы работаем с тобой например и у нас есть какой-то метод а отмечен or data транзакцию и внутри он называет нет б внутри класс внутрь именно весь мир а внутренне это у нас b который метре линда страдать вопрос в этом случае

    00:40:30 - 00:42:31

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

    00:42:00 - 00:43:52

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

    00:43:01 - 00:44:40

  • приложения весь мы и принимаем на выходе соответственно если у нас если мы хотим поднять само приложение в рамках теста то мы можем использовать библиотеку тест контейнер с которой содержит докер-образ и потом k-pop jam с контейнеры под кафку под все что угодно ну это как бы 1 котором уже помочь в целом момент использовать контейнер для того чтобы поднимать образы и сервис архитектура правильно мне об этом случае ли завал стали сделать запрос она разным другим они сердце ну я бы мог all ответы других

    00:44:06 - 00:45:49

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

    00:45:03 - 00:46:47

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

    00:45:55 - 00:48:17

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

    00:47:11 - 00:49:01