Подготовка к собеседованию на Java Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
всем привет как известно войти сфере квалификации разработчика определяется на техническом собеседование сегодня мы разберем базовые вопросы касающиеся бэк-энд разработке которые встречаются от 90 процентах случаев не будем обсуждать паттерны проектирования баз данных из клетки скалы это в основном вырожденные случаи вкладываются они в этот доклад самое первое рассмотрим низко вопросов по джаве наверное самого популярного вопросы это такие джоэнис коллекции в основном просят рассказать о иерархии
00:00:00 - 00:01:18
зачем как бы очень мало понятно за беседу чем узнать знает ли собеседник иерархию но тем не менее обычно это идет так расскажите про иерархию колец мы говорим вот весь интерфейс and peter был есть коллекции которые появились там джори давным-давно его наследовались от этого и этого было дальше появились некие под интерфейса вы этих коллекций которые мы часто используем уже это sllist пью наименее наименее используемый интерфейсов и среди всей разработки которые мне встречалось это честно никогда ее не
00:00:38 - 00:01:57
видел в коммерческой разработки ну из этого множества соответственно каждый из них у нас разделяется на несколько реализаций для листа эта вера и лист link list но мы как отвечаем какие например есть реализацию листа наиболее часто используемый это вера и лис и link list и можно почесать голову типа там есть ещё кое какой вектор есть кое-какой стек но они настолько редки что но я не думаю что стоит это же упоминать если это сразу следует вопрос зачем товарищ отличается i realise that link 300 но
00:01:19 - 00:02:31
здесь можно я думаю вспомнить общих базовый курс из универа где мы вспоминаем там связанные списки обычным осевого предметно разница в этом плюс часто любят спрашивать а чё пример для чего подходит больше такая коллекция для каком случае ты такое говоришь и роились например это чисто для итерации или быстрого доступа к уже собранным данным 13 две модификации всё это достаточно один товарищ мне рассказывал что у него был такой вопросик а чего быстрее работает arraylist или простой массив джобс кий
00:01:55 - 00:03:19
но здесь достаточно включить будет логику и подумать что массив в джаве это является такой более ранней структуры что ли а ирой лист это лишь обертка над ним соответственно быстрее будет работать массив а серый лист ввиду того что он оборачивает все операции над ним будет работать медленнее всего элементарно важно еще упомянуть что у нас есть очень часто используемая коллекция так скажем это словари map они не входят в эту иерархию потому что являются наследуем наследниками отдельного интерфейса но
00:02:37 - 00:04:07
тем не менее не связан и здесь так же можно упомянуть про сеты с и то есть множество которые не позволяют иметь дублицирование данных вот здесь мы видим здесь у нас headset ленка headset отличается тем что последний позволяет сохранить порядок гидрирование assorted он представляет собой черно красные деревья плюс один она сама балансирующий является но она тоже очень редко использует мне вообще только в единственном случае приходилось им пользоваться для dat для формирования различных всем привет я анатолий пешков
00:03:24 - 00:04:49
технический директор компании мэтт brains если вы смотрите это видео у меня для вас хорошее предложение я хочу пригласить в нашу команду java разработчиков уровням миду и выше мы разрабатываем сервисы лизинга мобильной электроники страховые сервисы и сложные интеграции для российских и международных компаний работаю у нас вы будете постоянно повышать свой профессиональный уровень руководителя бэк-энд разработке более 7 лет опыта в том числе в построении сильных команд наш основной офис находится в ульяновске
00:04:09 - 00:05:02
недавно мы переехали так что он стал еще больше комфортнее и приятнее но мы будем рады кандидатом из других городов вся подробная информация по ссылке в описании присоединяйтесь крутая команде мой бренд вопрос расскажите про контракт кишку данный курс здесь чего сложного в целом не только важно учитывать тот самый первый пункт который я здесь указал это то что если два метода мы имеем два объекта и вызываем метод и курс мы их сравниваем то у нас обязательно в любом случае хэш-коды должны быть равны этапах это то
00:04:35 - 00:06:00
о чем гласит контракт но не наоборот соответственно хэш-код если у нас равен то не всегда а равно б посредством метода и курс метод и колос я напомню это метод который проверяет все поля в отдельности а хэш-код это просто хэш функция которая преобразует наши поля которое мы указываем значение этих полей в gimp вот таким макаром int у нас является конечным числом но лимитированное количество вариантов икалось мы можем полевому как не будет указать как точно сравнивать как нам заблагорассудится вот и
00:05:18 - 00:06:33
очень желательно чтобы в обоих методах участвовали одни и те же поля хэш-функция хэш-код она должна быть сильный хэш-функций то есть не возвращать всегда но чтобы объекты не возвращали одну и ту же константу иначе будет очень неприятный случай которую который я упомяну чуть позднее кошмар кошмар это та самая популярная коллекция которая является не является чуррос наследник ему иерархии collection но является часто используемый в виду удобства и быстроте доступа доступ у нас за константное время осуществляется и
00:05:55 - 00:07:33
модификация тоже в кошмар тесно связан с контрактом хэш-кода николс здесь право я привел пример как например для какого-нибудь простого класса реализуем функцию функциях и школы nikles значит чем лучше чем разнообразнее так скажем функция хэш-код выдает нам значение для различных объектов тем тем быстрее будет работать наша фишман попытки обычный позднее то кошмар нас умеет хранить ключи и значение в качестве ключа может использоваться любой объект и также в качестве значения тоже может быть любой объект может быть и даже лист
00:06:44 - 00:08:19
и все что угодно главное чтобы мы определяли вот эти методы соблюдали контракт значит можно ли использовать нам в качестве ключа на самом деле да потому что но это даже не потому что это является выраженным случаем и шмап это дело отдельно просчитывает и он позволяет только одно значение хранить под на у ключом почему сейчас объясню как работает флешмоб изнутри вот вот здесь это важно понимать потому что очень любят спрашивать на [музыка] собеседованиях про устройствах ишма здесь важно упомянуть что кошмар у нас
00:07:37 - 00:09:11
состоит из корзин изначальное количество которых является 16 как мы заносим значение вот у нас есть 16 корзин мы хотим засунуть туда по ключу кинг значения 100 флешмоб вычисляет хэш с помощью функции хэш-код которые у нас мы определили и делая побитовое умножение на количество корзин -1 таким макаром это остаток от деления мы вычитаем будет индекс далее мы засовываем по индексу этот объект значит против всего просто что случается если у нас например хэш-коды разные но индексы совпадают то есть здесь мы
00:08:24 - 00:10:00
засунули кларка он у нас под xm2 здесь вычисляем два объекта у них хэш разные но индексы одинаковые ok получается у нас совпадение по индексу кошмар таким макаром видит что объекте который у нас уже лежит так ног первоочередными туда засунули смотрит 2 hаши разные у этих значит эти объекты точно отличаются дальше он формирует связанный список и добавляет просто следующем элемент который у нас получилось партии индекс значит как у нас происходит чтение из кошмар мы также вычисляет хэш определяем
00:09:11 - 00:10:48
индекс залетаем в яндекс смотрим нас первый элемент является кинг у нас ключ word с проверяем хэши они разные начинать . этот элемент летим дальше a black не совпадает точно-точно разные путей идем находим третий элемент hаши совпадают оки это может быть два варианта либо этот один тот же объект либо это коллизия для этого как раз вызывается метод и coles и проверяется точно ли наши объекты идентична в данном случае по ключу и если века возвращает true то мы вытаскиваем наш объект наде из этого выходит
00:10:00 - 00:11:25
каждый вопрос как и говорил что будет если хранить например если если наши хэш функция будет возвращать эту константу допустим 1 она будет прямо в методе будем возвращать вот здесь вот хэш-коды черный день то у нас индекс всегда будет один и тот же соответственно когда мы попадаем под один и тот же индекс у нас формируется связанный список и таким макаром кошмар нас превратиться в один большой связанный список сложность которого уже будет абсолютно идентичная связанному списку по поводу мало нал является как искал
00:10:43 - 00:11:53
живы жизненным случаем и он не вычисляет для этого хэш и просто его засовывает по моему по 0 вот дальше часто любят спрашивать о чем тогда отличается хэш matpat хэш сета на самом деле ответ простой headset он является коррекцией но внутри использует хоффман где использует все преимущества хочу хэширования как у холма по тот имеет те же самые сложности ну а в качестве значения у него просто заглушка так скажем вот этот метод топчик и все при этом сет у нас является мы не можем как сказать вытащить элемент по ключу вот прям
00:11:21 - 00:13:04
сейчас который мы хотим то есть если ваш маг мы можем дед word сразу получить значение то в штате мы можем по константе за константа время только определить содержит силе этот ключ нам или нет просто потому что нам приходится интегрируется дальше достаточно популярный вопрос про функциональный интерфейс и функциональный интерфейс и появились джори относительно недавно с восьмой версии и они представляют собой набор очень очень полезных функциональных интерфейсах так скажем я в 1 вообще с этой штукой с похожей штуки
00:12:13 - 00:13:31
столкнулся java скрипте то мне очень понравилось вещь как фарш на reference и что позволяло а передавать функцию в качестве аргумента и таким макаром исполнять ее к клей и здесь нам функции на интерфейс в этом помогает при чем функционален трофей сито обыкновенно интерфейс у которого только один абстрактный метод и аннотация functional интерфейс она лишь помогает компиляторов проверить на на совпадение контрактов функциональным интерфейсом когда мы реализуем функциональный интерфейс мы можем его как обычно можем
00:12:56 - 00:14:16
обычно от наследоваться имплементацию наследуются от интерфейса собираетесь функцию а можем банально использовать для мeду например внизу мы реализуем анонимную функцию функциональный со польшу таким макаром чтобы у нас интеджер превращался the string и просил к кате нации здесь отличие от например того же до дарта в том что чтобы функции вспомнить нужно и playa вызывать прямо самой функции они статическими вот значит самый популярный функциональным профессии-то паншин которая в себя принимает аргумент и
00:13:36 - 00:14:58
что-то дает есть a player который что-то что-то отдает но ничего в себя не принимает есть катю мир который только потребляет какой-то аргумент но ничего не отдает соответственно функционально интерфейсы можно реализовывать самостоятельно то есть брать любой вообще интерфейс написать у него один абстрактный метод который будет что угодно чего хотите и пожалуйста вы можете использовать я буду вместо ожидания и передавать эту ленту в качестве аргумента где ожидаете на этот интерфейс параметр фейса они
00:14:16 - 00:15:31
очень часто очень часто а является обязательным для понимания при использовании библиотеки стрим api или объект общину например чтобы чинить операции значит стрип api стрим api у нас это с помощью стрелок мы можем очень удобно обрабатывать коллекции стрип состоит из 3 частей и the source интернете этапе ration operations и черного pervyj source это наш источник в данном случае на примере мы смотрим это у нас коллекция точнее коллекция наш массив и play альдис интернете это першинг это те которые
00:14:54 - 00:16:36
как-то преобразует наш поток в данном случае это мэтт который внутри себя принимает функциональный интерфейс фарша то есть принимает один элемент из потока в данном случае это будет интеджер и что-то возвращает назад таким макаром формируя стрип дальше мы этот поток можем каким-то макаром отфильтровать причем фильтр себя принимает как видите тоже ль абду это тоже функционале интерфейс называется предикат джаве и без понимания функциональных трофей saw используя стима печень может и терминальная операция это та которая вот
00:15:47 - 00:17:21
все операции выполнены в промежутке превращается во что-то одно ну то есть делает отображение в единственном числе на выходе мы мы берем сначала мы берем просто и кишки потом преобразуем их в им плагин потому что мы из им плей repository например вот вытаскиваем наши объекты plague дальше фильтруем что они не нет ни нам еще чтобы у него и зарплата была больше 200 к и таким макаром собираем все в единую коллекцию вот часто спрашивает именно про интернете это первейший черного пораньше и отважно здесь пояснить что одно
00:16:34 - 00:17:57
модифицирует стрим а другое его завершает выдавая таким макаром объект в конце значит дальше дальше довольно неприятный шум темы горбач collectors на самом деле здесь сразу можно выделить несколько подзаголовков под вопросы на которые самому стоит ответить и независимо от того спрашивает вас или нет обычного собеседник оставлен беседующих остается доволен если вы сами эти вопросы задают но пока миллион метод расспрашивать какие узнать егорович коллектора и что это вообще такое имеет смысл рассказать сначала как
00:17:18 - 00:18:46
устроена память и джай дальше мы рассказываем что java jar у нас escape джай у нас есть стек каким макаром работает у нас хип каким макаром нас работает стек соответственно вот по этой картинке мы можем в принципе рассказать как работает горбач коллектор в в общем виде карпач коллектор у нас чистит память нашу от тех объектов которые уже не используются и и тоже удобно и отличие выделяет жару [музыка] вот значит соответственно рассказали мои что вот у нас есть хип куча как в который там у нас создаются новые объекты которые
00:18:04 - 00:19:45
сначала там помещаются новую область называемую и потом приходит горбач коллекторы начинают потихоньку очищать перемещать объекты там по нашим поколением значит что тут важно рассказать все все новые объекты попадают выдан дальше когда определенный процент заполняется приходит garbage collector вполне так называемой мир collection и перемещает дальше по срываю space наши объект и те объекты которые пережили хотя бы одну сборку мусора они становятся уже для горбач коллектора повышают свой уровень живучесть и так
00:18:58 - 00:20:42
скажем и время от времени вот эти долгоживущие объект они помещаются на свой generation of the new art space и томат скапливается крупные вас к уровню объект такие как сингл планы в том же с премьер например кабины всякие менеджер ресурсов и вот прочие вещи которые используются везде когда заполняется эту область горбач корректор выполняет менеджер collection которая обрабатывает большинство объектов созданный джим и после этого полнеет fool fool kollection кто вообще все браво соответственно съесть на картинке еще
00:19:55 - 00:21:15
пропаном generation но здесь хранится не комета информация использовать живые в целом возвращаемся горбач коллектором их есть несколько штук причем с с развитием джавы с появлением новых версий там 11 до 15 появляются еще какие то там экспериментальные коробочка электричество говоря не вижу смысла их все знать наизусть но хотя бы можно привести и достаточно 4 штуки которые наиболее на слуху школе про которые более менее все слышали serial garbage collector пожаловал горбач коллектор cms и g1 дальше с развитием java появились
00:20:34 - 00:22:00
как я уже сказал экспериментальные корректоры но я честно говоря не вижу смысла вообще все подряд упоминать достаточно этих четырех причем они описаны достаточно простым языком можно рассказать например просили его карточка диктор это по сути он работает с единственным потоком и вообще замораживает наше приложение когда запускается по сути в современных приложениях это не является хорошим вариантом вообще никаким когда нас много потоков использую особенность в приложении к декольте request for зеленую потоки было
00:21:22 - 00:22:54
бы задница значит дальше можно рассказать про впаривал garbage collector который использовать несколько потоков для манипуляции типом но при этом он тоже замораживает другие потоки до исполняет ну вот выполняет сборка мусора [музыка] всем eos m s он тоже использует многопоточность для коллекции но в чем его отличие от параллельного честно не скажу и вспомню но в общем эти этот garbage collector он уже с 9 джавы его заде брекете ли и соответственно про него можно просто упомянуть и достаточно того что не
00:22:09 - 00:24:08
актуален g1 это коробочка вектор который запускается на мультипроцессорных машинах с огромным пространством и он работает вообще только с полночь на 7 jar и он как раз заменяет предыдущий 7 из коллектор используем остальные можно почитать в интернете там с развитием джавы но не вижу смысла веток даже сомневаюсь что со беседующих сами они их в курсе специфических задач коллектор все так идем дальше значит еще часто из раздела многопоточные спрашивают как вообще создается потоки вообще многопоточную затрагивают
00:23:13 - 00:25:04
достаточно поверхностно и проблема современных молодых программистов включая меня так думаю что очень мало используется много по . в чистом виде мало используется программирование многопоточный основном spring это по части зашита и достаточно специфичная задача должна получиться чтобы управлять потоками отдельно возвращались обратно к вопросу создания потока можно обеспечить самыми популярными двумя способами и этого достаточно для ответа будет это за extended джавс кого фред и переопределит метатрон
00:24:10 - 00:25:38
есть также вариант с передачей рано был интерфейса в конструкторе качестве параметра конструктор фред таким макаром то мне придется свою реализацию использовать можно сделать реализации интерфейса runnable это тоже является функциональным интерфейсом который вот этот же метод имеет и здесь вот мы его с помощью лямды реализуем вот значит есть еще третий способ создания потоков и вопрос достаточно часто появляется в качестве отдельного что кое-где кьютер сервис это очень удобный интерфейс который позволяет нам выполнять задачи и
00:24:54 - 00:26:19
получать необходимое количество потоков причем из этих задач мы можем получать результаты это можно здесь например класс экзоцитоз с помощью статических методов можно получать определенное количество потоков с помощью указанием желаемого количество либо например используя другой метод которая возвратить на все имеющиеся свободные потоки или потоки количество потоков которые равно кедром процесса при этом нужно особым образом за совместить task сначала то есть вот например делаем в данном случае 5
00:25:43 - 00:27:05
5 задач здесь мы реализовали интерфейс рано был можно было это сделать через через ленту как я сделал здесь но в качестве примера можно таким макаром и после того как мы за согните ли тоски они просто сформировано еще не исполняются мы вызываем метод шарда и зигзаг литру сервис нам также необходимо выдать а точнее задать параметры как мы будем сколько времени мы будем ожидать чтобы наши задачи исполнились здесь мы указали один день соответствие 5 задача мне исполнится почему нет и после того как мы вызываем имя наших дам
00:26:24 - 00:28:02
у нас эти задачи начинают исполняться вот в принципе по многопоточные остальное являются уже специфическими случаями это могут и задачки различные давать но у меня такого не было но исходя из того что рассказывали другие коллеги могли например спрашивать про различные блоки и семафоры и вот общего вот эта теория про которую нам рассказывал самих игр и очень хорошо рассказывал поэтому этот доклад можно отдельно посмотреть независимо от того что это было по еэсу там очень хороший теория значит идем дальше
00:27:14 - 00:28:33
дальше так дальше мы перейдем к спринга и здесь та же вопросы довольно одинаковые везде и причем как на устройство на базу на устройстве на работу так и на проект и вообще любят спросить а на фига нам нужен spring framework и главное здесь не ляпнуть что spring framework нам нужен что в этом работа с базой данных но на самом деле самое первое и самое важное его назначение это управление зависимостями через доплыть ejection и обеспечение слабой связанности таким макаром это нам позволит во-первых кот очень легко
00:27:57 - 00:29:31
оттестировать во вторых очень легко поддерживать модифицировали различные бины в одном месте опять таки за счет слабый свет а уже дальше у спринга есть много различных компонентов которые облегчают нам enterprise разработку и есть бойлер plate вот которые приходилось швы делать он исчезает уже все тучи значит либо спрашивать про компонент любят спрашивать про компоненты здесь можно ответить по поводу упомянуть те компоненты которые вы чаще всего используете например это с printed а где мы используем соединение с базами данных
00:28:45 - 00:30:25
также в частности используем spring спринга тот же план манипулируем транзакциями выполнять различные запросы после по о [музыка] по популярности так скажем идет spring веб где мы с помощью которого мы реализуем наши контроллеры можем манипулировать запросами плюс 3 редко но часто встречаться начинает последнее время раньше редко сейчас чаще уже в отдельных проектах это наблюдается используется oubey я видел например что в банках начинают лакировать с помощью аспектов методы определенные мы же на одном
00:29:41 - 00:31:36
проекте делали нотификации с помощью api и это сквозная годика она помогает упрощает упрощает добавление какого-то от сквозного функционал нам это помогло мы реализовали один аспект который привязывается к аннотации аннотацию вешаем на метод и все он уже исполняется настоятельный нам не нужно для каждого класса выполнять один и тот же код копировать оборачивать его во что-то это все делалось прям самостоятельно вот дальше любят спрашивать про цикл жизни бинов предварительно еще могут спросить о какие есть у бинов скобы пo думаю этот
00:30:40 - 00:32:16
вопрос в принципе должен от 0 программист хотя бы хотя бы 2 на знать это по умолчанию у нас synths сингл планы все являются бинами потом можно множественные бен и создавать при каждом запросе это прототипы а дальше уже они привязываются к request у к сессии и общих ко всему ко всему приложению это все та же достаточно легко гуглиться я понимаю что в ходе разработки используется в основном только a single там бен и реже прототипы остальные ну совсем можно не встретить но просто перед собеседованием достаточно
00:31:31 - 00:33:10
нагуглить и хотя бы быстренько это все вспомнить на самом деле со беседую чему вот важно услышать хотя бы первые два остальные опять-таки уверен что большинство и сами используют дальше часто встречается вопрос про цикл жизни бинов этот вопрос достаточно емкий потому что описывать каждую каждую фазу многословно получается и можно как-то ориентироваться вот на такую-то схемку и быстренько описать что сначала создается бен потом у нас spring сканирует эти бины и различные интерфейсы исполняет у них там есть определенные
00:32:21 - 00:34:12
методы исполняя дальше у нас вступает вход бен пост-процессор который делает при инициализацию настраиваемую также у нас есть определенные джерри сэр нотации пост контракт который тоже срабатывает на этапе при инициализации потом у нас есть еще определенный интерфейса автор properties и здесь тоже он исполняет выполняет его можно таким макаром комбинировать на различных фазах подстановка или обогащения какими-то данными бен а потом идет кастомная инициализация которая тоже сдается с помощью аннотаций потом идет после
00:33:18 - 00:34:38
инициализации я тоже с помощью того же пин пост-процессор у которого толстый метод также вызывается и дальше у нас bing готов к работе и когда нам бен необходимо уничтожить у нас тут есть несколько фаз при дестрой это аннотированные методы выполняются она тебя прямо так называется при дестрой аннотация точнее называется приди строить после этого так же как и с автор property set если бен унаследует определён интерфейс он называется там использовал бен он его исполняет и дальше кастомная костанай логика которая может быть
00:33:58 - 00:35:29
выполнена в дестрой методах тоже в конфигурациях аннотации это можно указать какие говорил это достаточно многословный процесс и если вот говорить так галопом по европам этого недостаточно в принципе но иначе можно растянуть собеседование несколько минут тем более я думаю что это себе следующая сидит просто поддерживая подбородок рукой потому что он либо сам это знаете легавым просто пропускает слушать шум вот значит дальше самый популярный вопрос а пользовалась ли вы исполин датой и что в себя включает как и пользоваться
00:34:44 - 00:36:17
здесь все крутится вокруг spring репозиториев это определенный интерфейсы которые могут исполнять как в которых можно создавать свои методы и эти методы будут исполнять запрос в базу данных для того чтобы репозиторий создать нам нужно entity которая тоже определенным образом анонсируется по g по спецификации это у нас обязательно должна быть аннотация entity и обязательно мотаться иди должны лишь мы уже указываем колонки но это необязательно так как здесь попросту точнее название на самом деле нашего
00:35:30 - 00:36:52
рынка может это все сама самостоятельно назначить им имена и вот эти репозитории они используются для как я сказал уже для создания запросов базу данных это выглядит примерно вот так вот у нас есть некое джипа a repository которой является компонентом с принтера ты и в не определено уже несколько методов которые там позволяет вытащить только пойди и сущность либо все сущности либо сохранить одно сущность либо сохранить коллекцию сущностей а мы нам же нужно не только crud операций выполнять правильно
00:36:11 - 00:37:26
нам частенько нужны самостоятельных запросы и spring репозиторий и нам позволяет это сделать различными способами как вы здесь видите у нас есть вариант давайте снизу придем где мы только по ключевым словам создаем наш запрос при этом fine time здесь указываем название наших полей именно так как они задавались в видеть чтобы spring понимал какому полю мы относимся очень обращаюсь и для и по порядку мы будем указывать аргументы которые передаем и spring исполнит самостоятельно запрос в базу данных только вот по этим
00:36:49 - 00:38:23
ключевым словам также есть вариант использования на танцполе где мы можем либо на джипе quelle написать это все из кирилл запрос либо на нативном и сквере но в зависимости от того стоит у нас флаг на этих полей это или нет при этом если мы исполним аннотации кори как у нас называется метод разницы вообще никакой добавляет еще есть один способ как можем делать запросы тоже вопрос частенько включаю тут есть на ход вы рассказали например про лебезит а это 2-ми то есть третий способ как можно задать например таки
00:37:37 - 00:38:48
есть способ он является закон заключается в создании spring спецификации который является тоже функциональным интерфейсом по сути у которого есть один абстрактными тату просеки и мы должны его реализовать это реализация спецификациях даст нам результат и сквере в разделе way то есть мы реализую спецификацию делаем создаем предикаты которые будут исполняться в разделе здесь как вы видите мы возвращаем с помощью лямбда функции значение предиката что у нас вот определенное поле меньше чем дата которую мы захотели сравнить вот и также
00:38:17 - 00:40:06
spring репозитории позволяет нам эту спецификацию исполнить на уже существующем me to define да то есть он принимайся спецификацию мы ее реализуем всё отлично он выполняет наш запрос то есть таким макаром нас получается три возможных запроса с помощью spring да то кто еще хочет то наверное воспринимайте все часто любят спрашивать про отличия различных компонентных аннотаций сразу скажу что разница в них как таковой нет и все аннотации как репозитории сервис и контроллера не является наследий примет
00:39:12 - 00:40:36
компонента и каждый компонент вообще любой спрингз который мы определяем акулы аннотации из этой иерархии можно заменить на другую разница лишь в том что например репозитории он позволяет транслировать определенные эксепшен и обрабатываемые в определенные кассир шины которые нам которые возникают в ходе исполнения запросов или будущем баз данных обрабатываемость углом exception соответственно контроллер он работает с faker скелет много чуть попозже а сервис это вообще просто аннотация для себя что
00:40:01 - 00:41:18
текущий компонент текущей класс будет являться сервисным классом где мы исполняем бизнес-логику она вообще ничего не умеет оно по сути является тем же самым компонентом только она как сказать семантически что ли нам задает вот при этом еще могут спросить а чем отличается конфигурация от компонента и сам аннотация configuration а тоже является компонентом пусть она сама по себе но она используется чаще всего доверие в основном для создания других генов и при этом каждый метод у нее является прокси rowan им с помощью сиджей лиг и
00:40:39 - 00:42:08
например если мы здесь объявим ещё один бин из аннотаций бен и в нем вызовем вот этот он сжег mapper он возвратит нам именно тот бит который сконфигурирован у нас вот в этой аннотации в данном случае это будет синглтон поэтому взрастит тот же самый который уже осознанно об этом чуть попозже дальше популярный вопрос по поводу аннотации транзакций ну значит эта аннотация позволяет достичь на атомарном и выполнение операции при взаимодействии с базами данных или спрашивать у нее свойства но здесь пока не попробуешь
00:41:26 - 00:42:51
вряд ли запомнишь не вижу смысла их заучивать просто по ходу работ они запоминаются в основном мы используем про погибшим реже используем изоляцию иногда выставляем ролл back for или на урал урал back for для того чтобы определить для каких exception of до каких исключений у нас будет транзакция откатываться соответственно уролога кфор она должна откатываться только по таким the exception of nordic форма вот таким не должны отказываться от ряда для флакон позволяет если мы выставим втроем позволяет несколько
00:42:13 - 00:43:33
оптимизировать выполнение операции но они обязательно означает что при этом нас доступ райт на запись будет запрещен значит изоляции транзакций это относится базам данных да я думаю в принципе все слышали про нее здесь рассказывать не буду про потеешь и это как раз то что наверно чаще всего в транзакцию используется здесь у нас есть несколько штук это самая часто используемая и по умолчанию выставлено это рекорд эта настройка позволяет нам она требует чтобы все выполнялось в транзакции и если ее нет она должна быть
00:42:53 - 00:44:27
обязательно . она будет создана дальше у нас идет саппорт здесь spring проверяет если аннотация существует и если аннотация существует то она будет исполнена если транзакция существует она будет использована а если ее нет то есть до этого транзакции не было открыто то мы использовать метод выполнять будем не транзакционный дальше у нас идет мониторе здесь можно рассказать что обязательно наличие активной транзакции наш будет выброшено исключения небо у нас на веру на сообщите должны они как противовес man туре не в день должно
00:43:45 - 00:45:24
быть сильно транзакций если оно вообще открыто сняли qrs new 2 по используемости аннотации настройки для транзакций она останавливают текущую транзакцию если она есть и исполняет следующий следующей инструкции в отдельной транзакции not supported в чем разница она останавливать кучу транзакцию если она есть если оно уже открыто и дальше исполняет не транзакционный и в принципе можно запутаться но это нужно попробовать руками и увидеть как это работает чаще всего говорю используя record new остальные я честно даже не
00:44:37 - 00:46:08
самостоятельной разработки не используем и у нас осталось не стоит она использует различные сэв поинты которая при при выбросе exception of там за акцию нас откатывается по сути если у нас какое-то исключение выбросилась то есть не ожидаемой ситуации место у нас возвращается с их пользу таким макаром часть данных может быть исполнены ну а при этом на собеседованиях не всегда просит прям подробно рассказать что что это как используется достаточно назвать вот эти вот семь штук вот из из вопроса про аннотации транзакций но
00:45:29 - 00:46:56
вытекает такой интересный вопросик что будет если мы анонсировали метод здесь вот видите там у нас а матируем метод с про по гейшей 3 quoris него это значит что он у нас при останове текущую транзакцию если на есть и вот и эти инструкции выполнит в отдельный здесь на свой ноутбук пор какие-то транзакционных у нас в стороны для этих методов любят спрашивать что будет если вот ты заходишь в один метод и вызываешь внутри этого метода вот мы на допустим здесь вызываешь метод который помечен аннотации transaction то есть это
00:46:14 - 00:47:37
эквивалентно будет тому что вот вот это эквивалентно записей вот этой то есть через dice здесь нужно сразу рассказать право прокси и здесь важно понимание того как бины прокси руются даже не то что как они прокси руются а что они именно прокси руется значит когда мы помечаем компонентные аннотации наш класс он с помощью нескольких методов одним из нескольких методов делать прокси из этого класса для чего для того чтобы выполнить сквозную логик transaction а у нас является oubey по сути которая какую-то
00:47:00 - 00:48:32
логику выполнять до и после исполнения наших инструкций поэтому этот прокси работает только если мы получаем экземпляр этого прокси а когда мы находимся внутри метода мы вызова рай его мы называем его через dice методов у нас то не прокси раваной мы вызываем просто его как бы в обычном java узком контексте соответственно чтобы наш метод при вызове из другого даже если мы в текущем находимся в текущем класть находимся и вызываем в этом же классе другой традиционный метод который помечен аннотации для этого нужно получить этот
00:47:46 - 00:49:06
экземпляр прокси как это сделать из несколько способов можно либо за inject.bin самого себя и вызывать через него либо можно там с помощью map и контекста как вот здесь показал получить текущей прокси при этом он не работать на а sing методах есть у нас вот здесь passing он бы не сработал и таким макаром через этот прокси мы уже вызываем наш метод который будет выполнен с помощью которые робертом с помощью вот этой аннотации и выполнит всю сквозную логику это важно понимать важно помнить также при разработке потому что если точно
00:48:26 - 00:49:53
нужно чтобы метода вызывались а ты находишь в текущем классе нужно получить текущей прокси иначе транзакции не получится управлять так как оба писали в аннотации и этот вопрос наверное возникает 50 процентах собеседований поэтому думаю нужно его понимать она транзакциями можно управлять про грамматически для этого используется транзакций transaction template крюковский он тоже создается обычный объект но при этом принимаю в себе там зачем менеджер который является службе но и здесь мы можем вручную задать нашу изоляцию можем
00:49:10 - 00:50:31
задать распространение те же самое те же сами рик wars new record саппорт нас тут все можем задать и с помощью методов их забьют выполнить определенную логику уже внутри транзакции и это будет аналогичный тому что если бы вы анонсировали это транзакцию вызова его через прокси дальше любят спрашивать про spring-a би си который обеспечивает нам паттерном молодой контроллер и мы наверное все esprit разработчики с ним сталкиваемся когда пишем риск контроллер ну или просто контроллеры здесь не всегда спрашивают как работает
00:49:52 - 00:51:40
контроллер в спарринге но если спросит достаточно рассказать о по этой диаграмме что у нас все крутится вокруг dispatcher сервлета у нас проходит несколько фаз hander мэппинг контроллер юрий здоровью и после этого у нас уже объект отображается в браузере ну или там где на той стороне либо спрашивать в чем разница между контроллеры раз контроллер контроллер является по сути центральной фигурой но если мы хотим возвратить не имя нашего неделя нашего в.ю. а именно сам объект то есть например джейсон со реализовать или xml мы должны
00:50:45 - 00:52:17
анонсировать метод еще с помощью response to die presse контроллер он включает в себя вот как раз responds пони и нам не нужно уже анонсировать то есть это является тем же контроллером плюс response бани все больше ничего поменять на стоит да значит ну наверное самый последний вопрос которые любят спрашивать контексте спринга и популярная это разница между спаррингу там поскольку сразу скажу что сразу тоже не стоит сказать что во-первых в спаррингу те у нас есть том как устроен и это очень удобно для того же спринга нам нужно
00:51:32 - 00:52:55
нужен сыр контейнера теле настраивать и но после пытается уже как-то лей становится что ли плюс прям вот вам автоматизирует некоторые бойлер plate код который тоже уже поем начинает появляться при разработке с помощью spring framework это например настройка datasource transaction менеджера еще каких-то бинов будут позволяет все это дело очень сильно упростить если мы будем прописывать на достаточно будет прописать всего лишь несколько свойств в определенный файл и плюс прям вот он в себя включает уже
00:52:20 - 00:53:36
несколько аннотаций сама аннотация spring-a это критично которые мы помечаем класс из которого запускается наше приложение у него включается автоскан всех компонентов и есть некоторые фильтры на этот же скандинавии тоже сканирование которые тоже можно кстати кастомизировать и как я уже говорил нам достаточно большинство компонентов спринга настраивать с помощью нескольких свойств допустим для datasource а нам нужно всего лишь в один файл applications properties прописать некоторые значения и все datasource
00:52:58 - 00:54:14
самостоятельным будет отрегулирован и вы можете ловушек и получить это более старый вариант соответственно нам первый вариант обеспечивает очень хорошего гибкость при том что мы можем в аргументы приложения передавать вот эти самые параметры они будут исполнены не модифицировать сам файл из например нам мы постоянно заливаем это что-нибудь и не хотим портить properties файл на сервере у заказчика просто отрегулировать документы которые передаются program by все здесь наверное все остается напоследок можно сказать
00:53:37 - 00:55:02
только что ustream бута еще есть определенные стартер зависимости которые нам очень тоже сильно упрощают разработку spring security как для того же дата джипа чтобы не нужно было настраивать множество видов только вот каким то минимальными настройками обойтись и напоследок вот такой типа совет что ли когда-то беседующих задает вопрос и вы не знаете на него ответ а людей можно принципе разделить на два типа молодой программист начнет что-то выдумывать и привирать более опытные товарищи просто ответить
00:54:21 - 00:55:40
не знаю чтобы не тратить время обоих потому что алиса беседующих либо начнет задавайте наводящие вопросы а это пустая трата времени если вы на вопрос конечно совсем не знаете ответа и ну тут уважение нужно включать но у меня всё осиба но я бы наверно последнему добавил что можно еще не знаю но предполагаю что ок там например сразу сказать если человеку интересно и действительно понимание то это будет может быть как вот такой ответ со звездочкой скажем так до даты ты прав здесь это абсолютно верное но бывают такие собеседования где
00:55:06 - 00:56:30
все идет галопом по европам прям я бывала начинал рассказывать о не вернет дальше все нет нет хорош и чаще всего именно так таким макаром и ответы лучше лучше воспринимаются но вы вы вы можете подискутировать конечно с а беседующим если у вас там времени вагон ну это уже тоже отдельный случай но ты ты ты верно говоришь конечно можно тоже от ситуации окей наруто вопрос у кого нить есть какие-то
00:55:50 - 00:56:51