Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
[музыка] итак друзьям в еще на одной сессии интервью для junior java сегодня у нас в гостях та-да-да-да сергей гонтаренко срежу привет как вы и дела привет все нормально расскажи пожалуйста как ты к нам попал как ты вообще пришел потому что нужно пройти интервью и что тебя к этому побудило ну занимался самообучением и наткнулся случайно на youtube канал посмотрел пару интервью мне понравилось увидел ссылку на сайт и что там есть набор ну думаю почему не попробовать для меня это первый опыт собеседований то
00:00:00 - 00:01:16
есть пока что только в режиме обучения еще на реальных собеседованиях не был и подумал что это хороший способ получить первый опыт да ты реально пришел по адресам расскажи про свой опыт и говоришь ты занимаешься само обучение может быть есть какая-то университетская школа который уже прошел или может быть какие-то курсы как вообще пришёл программирование в байте индустрии целиком программирование впервые столкнулся на первом курсе института это был python он мне не сказать что сильно понравился
00:00:38 - 00:01:48
просто скорее первое ознакомление была уже на втором курсе у нас были но плюсы и алгоритмы и вот в тот момент мне реально это начало очень сильно нравится но я решил посмотреть какие есть еще языке и у меня был выбор ну больше всего мне пригнулись языки с эстетической типизации и сборкой мусора то есть это либо сишарп либо java ну и почему-то мне как-то java показалась более стабильной более распространенный ну и как бы был выбор сделан в пользу java уроки ага круто совокупный опыт программирования not paid on тоже
00:01:13 - 00:02:34
наверняка сишарп тыкал и java ascot совокупности настолько какого-то царевич у питон можно вообще не считать плюсы только можно сказать месяц сишарп месяца два я им занимался новости но не трогал веб там то есть я там просто познакомился с языком и немножко пописал под windows приложения а потом когда уже перешел к java это было уже самостоятельно и мои полностью обучение вне зависимости от вуза я уделил уже около пяти месяцев изучению java и уже в принципе у меня есть первые проекты связанные со
00:01:53 - 00:03:17
спаррингом слабом огне а почему java вот все-таки что тебе побудило не остановиться на сишарпе вид сишарп тоже широко применяемый язык в моей компании я работаю очень много разработчиков на сишарпе они до сих пор поддерживают и пишут новое приложение ну я считаю то что моя самая большая ошибка была это из за того что я когда его начал изучать была проблема в моем обучении то есть я обучался по книге и параллельно немного youtube и это не давало тех результатов которые возможно я хотел и так сказать перегорел очень
00:02:35 - 00:03:52
сильно то есть мне нравилось делать это но я не видел результата долго из-за этого у меня не сложилось а когда я спустя время понял то что я хочу все равно этим заниматься хотелось чего-то нового я переключился на java и у jetbrains есть такой шикарный курс на английском языке от happier скилл там очень хорошо материал преподносится плюс там есть мини проекты которые дают реализовать какие-то задачи и вот видимо именно этого мне не хватало в первоначальном обучение что я не мог выполнить какие-то маленькие проекты
00:03:14 - 00:04:22
видеть свой какой-то результат вот ну и дальше затянуло и мне она в принципе всем устраивает как язык оукей окей принципов хорошего начала чем через через боль через страдания все мы так приходит какой-то язык это на самом деле очень интересная история а как ты себя оцениваешь вот многие сегодня выделяют разные уровни разработчиков по уровню экспертизы знания вот допустим есть интерны они же чаще всего строение называются есть джуны и есть strong джуны medley сеньоры вот кого бы ты себе бы приписал какой бы шеврон бы ты себя
00:03:48 - 00:04:58
быть на сегодняшний момент прибрал но думаю не больше чем junior но на самом деле из-за того что мне это опыта коммерческой разработки я думаю это трейни но я думаю то что сильно зависит от того еще от компании то есть образных же компаниях разный уровень программистов возможно где то бы я зашел только за трейни где то можете за джуна то есть абсолютно верно не дам сайты абсолютно правильно ответил на этот вопрос на самом деле неважно какой у тебя шеврон скорее что у тебя в голове и какое у тебя настроение и на сколько ты
00:04:23 - 00:05:30
готов развиваться все остальное действительно приходящие так что из моего опыта одни разработчики в компаниях называются тех видами в других их вряд ли назовешь даже мидла и поэтому это очень ситуативно ну ладно тогда мы постепенно будем пробираться в java и будем изучать твой стек знаний вот первая ступень нашего java интервью и разумеется мы начнем с самых простых вопросов давайте рубля будет смотреть расскажи почему java платформа является независимо или пора искать причем java является программ с чем которая любовь работает
00:04:57 - 00:06:07
на любой платформе потому что java запускается независимо от платформы она запускается нажала машине то есть мы пишем код на любой операционной системе этот код у нас превращается в байт-код которая будет запущена на java машине а вот сами реализации заживо машины есть почти podsnap от все операционной системы и вообще широко распространены вот на самом деле г а знаешь какой принцип лежит или пскова бы слоган в основе дрова однажды работает всегда помогу или везде да да верно абсолютно это принципе и
00:05:31 - 00:06:53
есть слоган завода и топчем играла действительно платформе на независимое ноги давай тогда продвигаться немножечко дальше мне очень часто говорят что java не полностью объектно-ориентированное отчасти о чем это связано сложно сказать почему она не объектно-ориентированную ну есть целик джаве что мы не можем стать объектами аннотация но технически ну технически аннотации это не совсем та ну допустим чаще всего мы говорим о том что мы оперируем на уровне типов данных на сиськи для типы данных вот на какие две составляющие мы
00:06:15 - 00:07:40
можем или две категории мы можем поделиться рада примитивные ссылочными да абсолютно верное и вот здесь опять же возвращаясь к нашему ответу все таки почему giovanni стопроцентно объектно-ориентированная какая есть преграда с учетом того что у нас есть примитивная и ссылочные типы до наверное с тем что примитивные типы данных у нас не являются объектами охраняться нас на стейки и ну им без них вообще не нет смысла их убирать на самом деле это же для оптимизации полезно ну и вообще в целом ольга наверно из-за этого ее можно
00:07:00 - 00:08:17
считать не до конца объект на интерны хотя даже у этих же типов есть обертки которые уже являются объектами ну это обертки это скорее адаптация да и правильно действительно так она есть примитивы не могут быть объектами чтобы создать на их основе объект так называемый класс обертка либо wrapper на английском здорово слушая классно расскажи мне про вот эти wrapper и какие ты знаешь рапиры с учетом типов данных примитивных джайв но по-моему у каждого примитива есть класс обертка то есть если допустим у
00:07:38 - 00:08:51
нас int то это интеджер большой грубой если у нас байт то это боец большой буквы до бланк ну в общем у всех по моему примитив есть класс обертка насколько я знаю вообще они нужны были стали потому что в коллекциях нельзя использовать примитивные типы данных но с чем конкретно с какой собенностью из-за чего пришлось их добавить я не помню но где то я про это читал вот то есть что эти обёртки нужны первую очередь для того чтобы коллекция в коллекции и с ними можно было работать вот конечно т-34 ты прав на самом деле способов
00:08:14 - 00:09:30
применения много но основная идея в том что когда мы работаем в объектно-ориентированном стиле и я встал бы даже в этом мире нам необходимо каким-то образом примитивы приводить к этим типом данных а слышал ли ты что-нибудь про boxing анбоксинг на слышал это автоматическое приведение примитива к обертки или наоборот айстик мы можем в интеджер как обертку присвоить переменную обычного in the и оно происходит автоматически нам не нужны ненужное и приводить к классу обертки происходит так называемый of the boxing а в случае
00:08:53 - 00:10:08
когда нам нужно достать происходит анбоксинг автоматически ok но ты вполне себе учить круто хорошо давайте выдвигаться немножечко дальше вот мы затронули тему ссылочных типов данных да расскажи как джаве они устроены вот что лежит в основе ссылочного типа данных первую очередь в первую очередь то что при создании ссылочного типа данных ссылка хранится у нас на стыке сам объект хранится в хеппи для того чтобы создать ссылочный тип данных нам нужно использовать оператор new вот ну и получается за ссылочными типами данных у
00:09:31 - 00:11:00
нас будет управлять горбач коллектор который автоматически очистить память от этих объектов если на них не останется ссылок по моему там есть разные алгоритмы работы коробочка электрона в целом в общем то что нам не нужно следить за тем чтобы высвобождать эти на эти объекты память которую выделяется пони окей ты сказал очень интересную фразу мы используем время при создании ссылочного типа данных мы используем оператор его а есть ли такие ситуации когда мы не используем оператор его но все же мы создаем
00:10:15 - 00:11:31
ссылочный тебя сложно сказать ну фактически у нас могут быть какой-то фабричный метод или еще что то тогда мы не увидим new прям в коде не меняют внутри этого мета или бабам вообще мы нету никакого метода фабричного то есть вот у нас просто объявление переменной допустим какой-то тип затем имя переменной затем знак равно и затем сразу присвоения значения но без оператора мью ну класса обертки может они без без new но при этом они ссылочную также я больше не услышу строку а понял да да да да абсолютно все три ты все знаешь
00:10:53 - 00:12:20
здорово давай тогда немножко передвинемся в java и объектно-ориентированное программирование в целом все мы знаем что а.п. это три столпа на наследование и полиморфизм компиляция там 2000 абстракция входит расскажи мне в чем идея целом инкапсуляции в джори и каким образом можно достичь ну смыслом популяции в том что мы объединяем данные и методы для работы с ними в единый объект и при этом мы можем закрыть часть реализации от того кто будет пользоваться этим объектам то есть оставить реализацию внутри этого объекта
00:11:43 - 00:13:05
внутри себя но и достичь мы это можем взять у с помощью классов окей-окей классно зачем нам нужно инкапсуляция но по идее вы же мы можем из этого обойтись или нет но я думаю то что скорее нет чем да потому что все таки это позволяет улучшить нашу программу чтобы ее допустим если программа пишет несколько человек чтобы никто не мог произвольно творить нам что попало то есть условно говоря есть поля которые мы не хотим чтобы кто-то видел то есть не было допустим ветераны это поле тогда а если бы мы не использовали популяцию и
00:12:24 - 00:13:55
сделали бы public переменную тут небо имел доступ кто угодно то есть его числятся помогает в первую очередь программиста мне кажется ok но звучит резонно одарит приведем пример у более детальны и точнее проведем даже сравнения есть две ситуации есть у меня объект кастомные внутри несколько полей неважных каких произвольные типы данных количество тоже произвольно каждому из этих полей и есть центр и все до этого достаточно эти поля находятся используется с модификатором доступа про его то есть вот это 1 классе и есть
00:13:09 - 00:14:24
точно такой же класс условно говорят чуть-чуть имя отличаются но внутри у него сеттеров нет и при этом модификаторов доступа нет либо они даже паблике бы сказал в чем разница между этими двумя классами и где есть инкапсуляция где инкапсуляции нет а главное в чем проблема заключаются отсутствие инкапсуляция ну в первом случае где только сеттеры инкапсуляция грубо говоря есть втором случае у нас поля доступа полностью открыт и то есть как таковой то есть класс все тайн капсулер уют значение но при этом дает
00:13:46 - 00:15:23
доступ всем то есть считаю то что это не которая может быть проблема в этом но ведь через через сеттер ведь тоже нам тоже можно изменить значения но если мы говорим о том что в первом классе у нас есть setra и приватные полей мы хотели защитить классу изменения напрямую да сама во втором классе у нас setra нет но взамен этого мы сделали поля публично в чём же разница и в том случае я могу установить значения и в этом я могу установить значение но разница в том то что в setra мы можем добавить дополнительную логику
00:14:34 - 00:15:50
то есть если мы допустим хотим чтобы класс использовали чтобы у него был сет и при этом то есть могли менять значение но при этом нам нужно нужно чтобы это как-то ограничить чтобы туда можно было положить мне любой случае значению сатурном может в этом помочь мы можем добавить дополнительный логику при которой при вызове метода с каким-то значением она не будет изменено внутри класса сеттер не присвоит это значение по какой-то причине на весь когда мы говорим про джаву типизация нас и так допускал бы вполне
00:15:13 - 00:16:23
статично в этом случае то есть на момент компиляции кода да и мы уже знаем какая сигнатура допустим в методе мы не говорим про помимо призна мы знаем что там судьба ложим строка разумеется кроме строки мы туда ничего подложить не можем потому что мы ограничили типом данных и допустим я не хочу там никакую реально логику дописывать все что мне нужно это просто сеттер его аргументом string а и внутри за is a равно вот тогда зачем здесь все-таки инкапсуляция в этом случае и честно сказать не могу привести
00:15:47 - 00:17:05
какого-то здравого аргумента . но ярче я подскажу на самом деле ситуация инкапсуляции в первую очередь решает сокрытие внутренней реализации иначе говоря мы навязываем свою игру тому кто будет пользоваться нашим кодом потому что разница между классом и классом б в плане установки и значения или замены значений нет абсолютно никакой а то есть в одном мы делаем через сеттер другой мы делаем напрямую в свойства которое нас интересует здесь не о безопасности данных вообще но ситуация заключается в том что если мы открываем все внутренние
00:16:27 - 00:17:38
поля все кто пользуются этим классом хаотичном у них начинает привязываться и когда мы изменим одно поле предположим удалим его или предположим изменением его имя по какой-то причине везде пойдет так так называемые каскадные реакция да и нам нужно будет менять код который завязался на внутреннюю структуру когда мы объявляем куча полей они приваты но при этом мы объявляем один способ публичные в клубы и главное единый способ взаимодействия с этим полем допустим как сеттер тогда что угодно можно делать с этим полем
00:17:02 - 00:18:11
переименовывать предположим даже вероятно подменить какой-то тип данных или расширить о супер все равно останется таким образом мы избегаем больших изменений в коде которые результатом которых являются изменение внутренней структуры то есть мы запрещаем привязываться на внутреннюю структуру чтобы потом не было больших последствий если мы вдруг и меня вот основная идея инкапсуляции но в целом то что ты предлагал тоже довольно таки резонно на хорошо давай тогда продвинемся немножечко дальше вот мы
00:17:37 - 00:18:43
дошли до упора там есть разнообразную как структура как класс она лежит в основе да мы все знаем в чем разница между методом и конструктором можно назвать несколько признаков конструктор должен именоваться также как и наш класс конструктором вызывается после оператора new method же если статический то просто через имя классы если это не статический метод то только уинстон с объекта экземпляр объекта мы можем его вызывать вот но это основные я думаю различию между конструкторам и методом окей окей
00:18:09 - 00:19:34
правильно а скажи можно ли метод переопределить да можно а конструктор тоже можно нас трав может ну конструкторов может быть много у нас в объекту а разве это переопределение а эта перегрузка да скорее всего это как перегрузка да но перед тогда задам еще раз мы увидели что меня туда можно переопределить так все-таки конструкторы можно переопределить или нет переопределить думания перед грузить то есть у нас может быть разные входные параметры в конструкторе и в зависимости от от нее будет вызван тот или иной
00:18:51 - 00:20:14
конструктор а чем это связано что мы не можем переопределять конструктора новых перри язык перегружать можем а вот переопределять конструкторы неманом как ты думаешь чем это связано но с тем что мы создаем именно конкретно этот объект а переопределение это когда у нас у наследника мы изменяем как-то метод чтобы он вел себя как то по другому в отличие от его родителя а в этом нету как никакого смысла как это будет выглядеть и а скажи родительский конструктора всегда вызывается или нет вот ли тоже есть класс a-class b-class б
00:19:34 - 00:20:59
наследуется от класса а вызовется ли при создании и инициализации объекта с типом б вызовется ли конструктор класса должен вызваться внутри нашего констан будет вызван явно по-моему он будет вызов для правильно это одна из причин как раз почему нельзя переопределять конструктора потому что у каждого класса он собственный а родительский по-любому должен быть вызван в той форме в которой он создан у родителя то есть мы не замечаем здесь хорошо хорошо звучит резонно окей давай тогда еще такой хитрый вопрос по поводу работы с
00:20:16 - 00:21:38
классами наверняка ты слышал про такое ключевое слово здесь [музыка] скажи можно ли этому ключевому слову ведь это реально какое-то значение на самом то деле можно ли ему присвоить значение предположим написать что-то вроде здесь внутри конструктора даже ли там внутри методов зыс равно нам я не пробовал на думаю что нет а как думаешь почему нет но потому что получается объект должен в самом себе на себя ссылку потереть хорошо тогда двигаемся еще немножечко дальше расскажу разницу между интерфейсами абстрактными классно
00:20:57 - 00:22:26
ну основная разница в том то что абстрактный класс может в себе нести какое-то состояние то есть иметь изначально поля конструкторы для инициализации этих полей могут быть реализованы методы ну или нет если abstract помечен метод вот им-то что мы можем наследоваться чаю только от одного класса при этом реализовывать мы можем много интерфейсов вот интерфейса в свою очередь представляет собой контракт список методов которые будет обязан реализовать класс который будет реализовывать этот метод 8 еще есть дефолтные методы которые
00:21:42 - 00:23:08
имеют реализацию вот но все равно это далеко от абстрактного класса ok а вот скажи представим себе ситуацию я хочу создать класс или даже не класть обобщенно тип данных я знаю что этот тип данных будет уметь что-то калькулировать у нее есть метод да у коллег на google play шин был парик я точно знаю что этих калькуляторов своеобразных будет очень много у них только реализация будет равен обычно там инженерский инженерный для программиста обычный калькулятор для бухгалтера и так далее и вот чтобы ты здесь выбрал абстрактный
00:22:25 - 00:23:48
класс в качестве типа данных или все-таки интерфейс ну если у нас рука делает одинаковые вещи ну то есть в зависимости от того на сколько у нас будет различаться эти калькуляторы если они должны делать совершенно разные вещи то будет выбран я думаю интерфейс а если же в каких-то ситуациях он там должен должен им складывать то без разницы инженерной это или не инженерный можно реализовать логе у сложения и в абстрактном окей хорошо какое-то уточнение нужно хорошо хорошо звучит звучите за ну давай сделаем шаг
00:23:07 - 00:24:32
вперед за уточнение еще раз сделаю такой mpcs то что я собираюсь сто процентов создавать энное количество реализаций без разницы реализация будет чуть-чуть похожи или совсем она будет разнообразная и я точно знаю что у меня должен работать каким-то образом полиморфизм я хочу чтобы у меня была 10000 калькуляторов и я взял спокойно и без угрызений совести создал список 10 и положил них 10000 калькуляторов и выполнил этот метод у кольки чтобы он реально выполнился без всяких проблем вот все-таки абстрактный класс или
00:23:52 - 00:25:22
интерфейс таком случае думаю интерфейс а почему дверь интерфейс по сути ничего не изменилось с предыдущего раза но мне кажется то что все таки выбор должен быть в сторону интерфейса потому что у нас один метр множество реализаций использовать в коллекцию ну предположим здесь у меня я могу написать давай давай тебе на ходу и ты увидишь что что я имею ввиду одну секундочку часы для пошаговых но вот intel cd вот мы здесь что у нас есть у нас с тобой есть какой-то тип данных я не буду создавать для него
00:24:37 - 00:25:59
ничего у меня есть предположим лист он хранит коллекторской пирс и нэнси и вот здесь какая-то инициализация затем что я делаю я беру свой круг лейкерс и начинаю гонять их в for each а кирпич и здесь мы с ними работаем а здесь я вызываю coldplay пирс полинг вейдер его методу гайка без разницы с какими параметров вообще не имеет значения здесь у нас будет галку вейперы вот вот такая вот задача понятно дело что здесь может быть миллионы миллионов калькуляторов в листе откуда они приходят я не имею понятия вообще то
00:25:21 - 00:26:53
есть мне присылает какая ко мне приходит какой-то http запрос на основании этого создается миллионы объектов типом калькулятор и моя задача для каждого калькулятора бы выполнить эту операцию вот интерфейс здесь был бы калькулятор в первую очередь тип данных или абстрактный класс ну я думаю все интерфейс а почему вот я не помню абстрактный класс мы можем заключить как generique чтобы туда при этом все кто него наследуется а можно можем можем это такой же тип данных интерфейс я строю такие же типы данных давай задам
00:26:10 - 00:27:34
уточняющий вопрос и ли бо ён к каплям немножечко дальше а какая разница между абстрактными методами в интерфейсе и в об строкам пласть в интерфейсе и в абстрактном классе [музыка] тем что интерфейс и если они оба абстрактные то разницы особой нету если реализовывать будет наследник все равно а может быть такая ситуация что у меня этот абстрактный метод предположим с модификатором печь правитель из многих котором protect и а в случае в случае абстрактного класса то есть может у нас быть другая модификатор доступа дан реально
00:26:53 - 00:28:27
верно в случае интерфейса public всегда по были явно public abstract вот есть у нас может быть все я понял а какие а какие последствия из этого могут быть с учетом того что я хочу пользоваться реализации калькулятора где угодно предположим это вообще сторонняя программа мы знаем что модификатор доступа они все-таки накладывать какую-то какие-то ограничения каким если у нас будет потечь про его то мы можем на след ну реализовывать этот метод только внутри этого пакета если он нам приходит извне то получается при
00:27:47 - 00:29:05
наследовании у нас даже его не будет но если он будет protect это будет с интерфейсом у нас в любом случае мы можем в любом месте программы в любом пакете у нас ну реализовать интерфейс и реализовать этот метод а влияет ли это на использование но предположим я реализовал все вот у меня есть абстрактный класс у него модификатор доступа protected или печь проявит я создал специальный пакет создал там миллион реальных конкретных калькуляторов и потом я хочу использовать эти калькуляторы мы другом абсолютно пакете будет ли это
00:28:26 - 00:29:47
возможно при абстрактном методе и особенно когда там с их модификатор доступа папич проявит или поттер при создании экземпляра того калькулятора пойди этого метода там просто не будет если бы правильно правильно ведь это не время нет это не только на реализацию это ведь и на из произвольного если конечно и все-таки давай по за резюмируем почему ты выбираешь интерфейс они абстрактный класс мы технически разбирались увидели разницу между ними это здорово безусловно это очень круто но все-таки почему бы ты выбрал с учетом всего
00:29:06 - 00:30:26
сказанного выше ну получается потому что технически с интерфейсом мы можем его реализовать не угодно и использовать где угодно и и у нас получается все выглядит здраво на самом деле ты правильно сказал просто ходишь вокруг да около дело в том что когда мы говорим об обеспечении контракта интерфейс именно это и дает вид контракт подразумевает публичное использование мы говорим о том что у нас есть какой-то интерфейс его тип данных и его реализации всегда будут обязаны реализовать этот метод абстрактный и
00:29:48 - 00:30:57
более того он всегда будет публичный без каких-либо отклонений случае с абстрактным классом этого гарантировать нельзя и следовательно и если мы собираемся использовать наши реализации за пределами пакета или не рамках расследования то мои разумеется теряем такой возможности хорошо двигаемся тогда немножечко дальше в направлении нашей джо вы хорошо расскажи слышал ли ты что-нибудь про гитара гендерные типы они называются еще иногда гетеро джон раз на английском и как играть как будет это мог бы
00:30:25 - 00:31:41
охарактеризовать имеется ввиду generic generic generic гитара они нанесли называется это рок-н-ролл или гитара гендерная ok ну давай тогда я задам вопрос близок к этому делу от скотчем немножечко на коллекции если у нас такие две коллекции но не совсем это технически коллекции но ладно это fixed ладно урока коллекция кассет и 3 set можешь ли назвать разницу между этими двумя реализациями офиса ну под капотом у хочется это у нас хэш map под капотом у 3 сета там используется красно-черные деревья ног то есть у них
00:31:05 - 00:32:43
внутренняя реализацию другая и разная временная сложность на методы а какая а какая сложность вот предположим булавка получения удалений какая сложно суффикс это какая вытряс учишься это константа а утрясает алгоритмическое время а если какие-то ограничения при работе с значениями когда мы говорим с когда мы говорим принца нож что там ну вот хесед у нас точно не может быть вообще у сет нет не должно быть повторяющихся значений то есть но это условно это очень условно это можно и сломать можно и сделать но я
00:31:54 - 00:33:21
не туда попал можем ли мы hashed добавить наверное нет хотя хотя может и можем честно не знаю нет стоп мы можем наверно добавить нал потому что флешмоб мы можем добавить один раз стал как значение тока ключ и сколько угодно раз как значение значит один раз нам мы можем прийти и тогда добавить обновить если нет никаких ограничений в самом к сети на это чудо ну хотя эти нет таких ограничений ты правильно ответил это действительно так она есть под капотом у фи сет хэш map кошма позволяет иметь один ключ канал
00:32:41 - 00:34:00
это не проблема ok а как сравниваются объекты врс между собой на основе cursed на основании ключа ну а если бы как технически какие методы принимают участие при сравнении двух объектов внутри р.р. внутри именно не 3 ну наверное пвх шмапы хэш-код и полз у нас участвует том чтобы правильно их расположить чтобы потом их было ну чтобы мы могли их за константное время извлекать да да да правильно брать мы не будем части в детали как это работает и потому что вопрос не об этом а переключимся на 3 вот может ли присед хранить на у
00:33:22 - 00:35:00
наверное нет потому что трясет у нас внутри себя упорядочивает объекты при их поступлении при добавлении и для сравнения объекта наверное он не может ну там нлп interception когда бы вылетал скорее всего он не может просто не с чем сравнить нал из-за этого мы наверное не можно туда добавить нал я думаю reasonable бля да правильно и какие методы используются при сортировке и при сравнении объект для при метод метод compair наверну мы можем передать туда компаратор у компаратора единственный метод compair если мы не
00:34:19 - 00:35:44
передаем то там будет так называемый нашел ordering передаем свой кастомный компаратор то будет использован он его метод compair а еще какой метод ведь если говорить откровенно есть ограничения для объектов которые могут быть точнее которые могут стать частью трясет я не могу любой объект положить в 30 вот какое ограничение есть или скорее какая-то установка техническое или можно может при прилетит так называемый может он может это имеется ввиду какие-то реализации какого-то интерфейса как маркерные блюдо
00:35:06 - 00:36:24
да но только не маркерами анри мартэн дотан наверное comparable если есть такой правильно нем идет речь ну да и следовательно какие какие два метода участвуют про и сравнение один ты уже назвал еще campo ну ладно окей ты ты ты ты так или иначе назвал интерфейс уже круто то есть два метода compair и compair туда мы сравним это этот к базовая разница теперь вернемся к нашим гитара джон ролз объектом вот позволяют легко счет принимать разнообразного типа данных объекты внутри себя предположим у меня
00:35:47 - 00:37:10
есть hashed он состоит из строк и он состоит из симптомов он состоит из не знаю все что угодно и stringbuilder of одновременно это возможно в счёте ну да если они объявим угловых скобках тип который мы хотим там хранить то будет по умолчанию вроде как объект а значит мы можем туда положить любой тип лукин а.а. для трясет это возможно я не проверял но думаю что будет какая-то ошибка при сравнении наверное возможно компот компилятор будет ругаться не уверен ну допустим не проявлял но троих догадки
00:36:33 - 00:38:00
с учетом того твоих знаний про трясет как почему это произойдет причем производительно будет ошибка но почему ну ну скорее всего потому что он не сможет сравнить разные типы то есть допустим мы передадим объект и строку допустим он их не как сравнить не может как их в каком порядке сложить у себя внутри наверное за эту о контроле ну правильно ведь трясет работает всегда с одними и теми же объект даже элементарно comparable это же интерфейс который позволяет сравнивать один объект один такого же
00:37:17 - 00:38:33
типа с другим объектом иначе горе я сравню с себе подобным человек с человеком разумеется если мы будем сравнивать человека с собакой мы очевидно что то будет это собственно это ты правильно ответил и это и есть так называемые на английском гитару джон ролз объект или иначе можно на русском называть неоднородные объекты иначе говоря cursed может принимать разного рода объекта неоднородность допускается в три сети и все должно быть однородным и вот это есть описание то всем но в целом смотрите не
00:37:55 - 00:39:09
знал это волшебное слово это джен орс но тем не менее и отлично его обосновал и почему оно существует для рекламных какой форме она может мы здесь все здорово окей тогда двигаемся немножечко дальше значит qajer я java runtime warming отсюда джиджи д.к. ну ж такое-то джирайя и компилятор java еще там набор каких-то инструментов для разработки а если мы хотим уже готовы программу запустите нам хватит джирайя потому что в нее входит в ее состав входит живем и набор стандартных классов java то есть
00:38:31 - 00:39:54
нам не обязательно использовать же так а если мы хотим уже готовую программу запустить если предположим ситуацию я такой себе не знаю джалла вообще я возможно даже не хочу разрабатывать на ней ничего что мне нужно скачать jedec и джерри у меня у меня есть жарко наверняка да значит удар когда товар и юта был там string but all это засыпаем закон что мне для этого нужно вот у меня чистая linux новая машина что мне для этого нужно чтобы запустить мой удар по мне нужен гдк скачать jimm скачать или джерри и джерри
00:39:15 - 00:40:36
почему не ниже д.к. убираемся разрабатывать правильно то есть если она если она уже готова да то есть скомпилированный код жар никто его чтобы запустить нам достаточно вчера я абсолютно верно окей давай попрактикуемся еще с одной такой интересные темы предположим не ситуация я делаю какой-нибудь логин ну то есть не нужно залогиниться в систему чаще всего логин представлен в виде строки или какого-то пока какой-то последовательности символов с учетом того как это все работает джаве как бы ты получаем пароль через http
00:39:55 - 00:41:15
запрос не важно в какой форме это get past или даже федором ты вытащил как бы джавит ты бы его хранил какие так как в какую переменную в какой тип данных ты была положил это лишь это сердце информация думаю что массив чаров потому что он не потому что он хранился на стыке к нему был бы доступ только из того потока где бы эта информация обрабатывалась и потом она бы сразу стерлось из памяти как только завершился бы там метод или несколько методов а если бы мы использовали бы строку the java у нас
00:40:37 - 00:42:00
кэширует строки в так называемый string bool и там бы она могла лежать ещё очень и очень долго вот и таким образом возможно безопасность бы была нарушена и сказал что строка на а не строка массив чаров на массив чарах это ссылочный тип данных он ведь хранится в happy да он в стеке будет ссылка not happy он тоже будет находиться и я тоже не знаю когда живем до него доберется как бы ты вышел бы и ситуации с учетом того что ну мне бы захотелось бы чтобы горбач коллектор побыстрее побеспокоился о том чтобы удалить этот пароль который
00:41:18 - 00:42:49
я храню виде массива чара я с тобой согласен давай его использовать массив чара но все-таки как мне можно избежать ситуации что после того как я поработал с этим массив чарам не забываем да он все еще находится в хеппи но при этом всем как ни как разработчику сделать все чтобы там больше ничего не было если идея на сей счет ну если мы просто перезапишем в эту ссылку которая хранит массив чаров при своем и и так сказать нал то по моему не знаю удалить ну если он все-таки находится у нас в happy at the мы никак не можем на это повлиять
00:42:05 - 00:43:29
потому что мы не можем никак принудительно запустить кирпич коллектор вот поэтому думаю что получается никак но но мы можем послать ему сигнал на самом деле почему можем выполнить команду у джесси это отдельное стадо его вы вроде как не запускает все равно ну то есть она его может спровоцировать а может и нет он же там все равно как-то сам решает да абсолютно искал мы не можем рассчитывать на garbage collector и это именно та причина почему на string мы тоже не можем рассчитывать все находится в себе
00:42:47 - 00:43:49
пусть даже это spring ползала 8 string пол начали чистить и при этом все мы не знаем когда он почиститься в этот момент предположим завалится какой-нибудь хакер и взгляд наш джавад дам да и все мы потеряли пароль какой вариант выйти из этой ситуации если какая-то идея если честно сейчас пока ничего в голову не идет у славика предложил в принципе очень рядом стоящую с моими мыслями идея ты хотел взять переменную присвоить in almaty ведь всего лишь говорит о просто повторно но вы об этом в этом огне плевались значения есть какие
00:43:18 - 00:44:37
альтернативы из как можно потерять этот пароль вот у тебя были выбери записать значение да абсолютно верно то есть мы можем просто для чего закону можем взять и тот же массив из сирии там все значения предположим заменить их произвольными значениями все на нолики вы оставите надоевшей поставить только сейчас понял да со строкой мы так сделать не можем она же сразу она же и мутабельным никогда да да абсолютно верно понял мне на дне мне нравится 25 хорошо двигаемся тогда немножечко дальше расскажи мне разницу
00:43:58 - 00:45:08
между хэш мама и предложим хэштег был просто двух словах html по-моему не может хранить в себе налы в отличие от кошмар и хэш-таблицу нас все методы синхронизованы из этого она работает намного медленнее и она насколько мне известно не рекомендована к используем то есть сейчас использует лучших и шмап а если нам нужна она для параллельных есть специальный конкорд кошмал ну то есть есть какие-то замены хэштегу то есть это устаревшее абсолютным окей давай поговорим с тобой про им от обильность ты не раз замечал что
00:44:32 - 00:45:52
есть и мутабельные объекты и мутабельные мог бы ли ты сейчас создать класс и мы побежим объект вот листовок сходом хорошо отдавай тогда попробуем ну что ж вот еще одна задача вместе реализуем с тобой ему табельный класс предположим есть какое-то одно свойство одно свойство будет у нас 7 им повар и так же у нас с тобой будет листовая коллекция она будет хранить предположим строки тренинга спрингс вот как бы ты сделал бы данный класс ему по видно но первых надо нам поставить так давай ну а нам обязательно делать
00:45:13 - 00:47:04
приватном или сейчас без разницы не знаю не знаю это вопрос кому так долго все все все да сейчас так понял не not implement it хорошо так ну я думаю вот это я в первую очередь взял покоилась но мы можем инициализироваться только через конструктор поля финально изменить мы их не можем но пока что мы можем добавлять или удалять и свист а если мы дадим гетр для strings то мы можем удалять и добавлять элементы в strings а это будет проблема ну давай сделаем ветра предположим у нас с тобой есть вот такой вектор давай
00:46:12 - 00:47:41
посмотрим asus public из 3 бег спрингс как бы переварили зала я думаю то что нам нужно возвращать копию нашего внутри листа не просто ссылку на него потому что иначе мы сможем добавлять и удалять из вне и элементы в строке ой в этих в этом в этой коллекции если два потока будут одновременно это делать туда может потеряться значение и уже это и совсем ему табельный класс тогда то есть надо дать копию этого объекты как я думаю то что ну допустим реализация неважно за выбирать и [музыка] подключить до дает почему мы догоняем
00:47:35 - 00:49:30
это нормально подключенный хорошо да а вот скажи мне ну вроде за и мне ничего говорить не будем он нас не особо интересует давай обратим внимание на класс если это ему табельный класс что еще ему не хватает его ему тоби вместе в отеле лизал метод get spring я предположим пришел такой и переопределил этот метод и он возвращают реализацию да про чтобы мы не могли унаследовать еще ok а теперь давай подумаем ещё немножко глубже и посмотрим внимательно на конструктор ты уверен что такой подход с конструктором
00:48:41 - 00:50:06
это ему табель а еще до нам нужно тут получается сохранить тоже как бы копию этого с этих стенах потому что изначально когда к нам приходит эта коллекция она у кого-то есть еще в руках в обычном виде то есть тут скорее всего нужно тоже вот ой вот таким образом поступить абсолютно такая коллекция был только тут ok ok мира звуки так звучит и выглядит очень неплохо хорошо тогда двигаемся дальше пока остановим нашу каден пищи передвинемся на шаг вперёд и будем заворачиваться с вопросами по java постепенно мы разобрали много интересных
00:49:27 - 00:51:09
вещей безусловно где-то это были на поверхности где-то мы копали глубоко но у меня вот есть вопрос джами есть такая единицы не только джай она называется и ну мы решим или перечисление или иначе говоря и нам можешь ли назвать почему это так круто или почему это так плохо и либо их стоило бы применять ну я думаю то что это хорошо это мы можем в одном месте хранить объекты одного типа и при этом они создадутся получается один раз на нам известно да они один раз на все наше приложение создадутся грубо говоря такие
00:50:18 - 00:51:37
константы и количество их объявлений сразу внутри получается самого и нам а вот ну и когда их стоит использовать наверное когда нам нужно с каких-то местах программы иметь вот как бы можно сказать константы и при этом они объединены одним смыслом чтобы можно было заключить именно в ином вот ну вот к примеру у нас вот насколько помню стринги допустим есть какие-то допустим generated целью и там есть и денте терял то это вроде какие на из как раз из перечисления там через точку можно что-то путаны общем наверное
00:50:58 - 00:52:28
какое-то такое применить окей давай-давай еще решим одну задачку я тебе приведу пример кода и мы попробуем этот небольшую ситуацию разрешить на прежде чем мы пойдем слышал ли ты когда-нибудь что-то выражение in т.е. нам паттерн или стринги и нам паттерн раз слышу это на самом деле мало кто не слышит но это всегда есть ли цель и почему-то используют и даже об этом догадываться что мы с тобой сделаем мы просто-напросто попытаемся решить задачу следующего рода и так задача следующего характера у нас
00:51:43 - 00:53:09
предположим есть какие-то вещи которые определенное имеют устоявшуюся форме в нашем сознании в нашем мире предположим планеты и честным планетам несколько чтобы напишем public static война и здесь поехали она будет строка напишем имя лент или даже не план mercury mercury здесь напишем mercury достаточно теперь у нас есть также помимо меркурия планеты у нас есть бог вот как бы ты здесь бы мы говорим про древней мифологии добыл там кубок мира курить и помочь он торговал лишь избивать есть задача следующая мне нужно
00:52:26 - 00:54:06
в этот же класс добавить тоже статическое какое-то значение финальная неизменно где тоже будет он связан с меркурием и более того он даже значение будет хранить mercury как бы то вышел бы из этой ситуации вот сейчас так еще раз нам нужно создать еще одну переменную которое тоже будет хранить меркурий нами другое название или что да это близко к этому но задача не то чтобы создать переменную у меня будет значение mercury в том числе но логически она относится к богам не к планете сейчас у меня mercury
00:53:18 - 00:54:37
это планет я вот создавал изначально я думаю что мне хватит одной константы для планеты потом я внезапно очутился в реальном мире вспомнил что оказываются в античном мире были боги у них имена совпадают со своей планеты этого мне нужно теперь в коде представить переменную или какое-либо значение которое поможет поднять также создать еще одну строку с именем mercury то есть строка будет точно такая же но при этом из этого будет явно видно что 1 имеет отношение к богам 2 имеют отношения к планета вот как это в коде сейчас можно
00:53:57 - 00:55:15
реализовать хочешь создать переменно можешь создать то есть feel free как говорится выбор 2 1 имеет отношение только к нам другая планета и при этом то есть это задача скорее всего решается через динамо если мы о них начали говорить не знаю не знаю там там можно задать методы но при этом как это связать по смысл чтобы это одновременно было их богам и к и к планетам и более того как как обозвать правильно следующим шагом я не только реализуешь я добавлю волшебное слово марс марс был бог марс был планета марс есть шоколадка
00:54:37 - 00:56:07
и у нас появится еще одна группа то есть мы выделяем уже несколько групп нам для начала нас есть боги и есть планета именно их совпадают могут не совпадать мы сердце не совпадают очень-очень сильно стопроцентное нам нужно выделить одну группу и второе вот как бы и перевязал в рамках 1 класс а.б. мы можем в рамках одного динамо положить еще и нам я вот не помню ну наверное нет видимо это перечислили нам это перечислить перечислению перешла местных совсем сказать точно это какой-нибудь сэр на сет это тоже перечисления это
00:55:25 - 00:56:57
перечисление если не знаю учил ли в универе дискретка математику там тоже очень много работают с теории множеств во множество то какие-то объекты совокупность объектов которые не какими-то признаками и вот здесь у нас признаками как раз являются боги являются планеты потом ещё шоколад то есть воду пока ничего не приходит в голову как это в коде организовать то есть возможно но можно ли подскажу или давай порассуждаем можно ли вот это взять пример и его взять за основу и создать точно такую же ситуацию но смысл и точно
00:56:12 - 00:57:36
такой же кусочек кода как строчечки 5 но адаптировать его к нам не обязательно может быть даже с ним счета но во время если с помощью такой же перемены то мы в принципе можем просто обозвать его грубо говоря mercury нижнее подчеркивание gold тогда это будет бок но у нас получается одно и то же в том плане что ну да мы можем сделать грубо говоря как то вот так и у нас теперь две переменные но хорошо решил перед и решит ты решил задача на самом деле и решил идем шаг 1 шаг 1 царя шаг 2 у нас с тобой есть
00:56:56 - 00:58:22
mercury mercury причем я не знаю к чему он относится реально я вижу здесь mercury вот так же у нас добавился еще один я буду повторять паттерн здесь вставляется марс здесь тоже появляется марс и весьма smart а здесь появляется еще один марс и и я озвучу кого шоколадка шаг а вот скажи мне и можно ли как этот код улучшить и какая здесь проблема с твоей точки зрения обрисовывается проблемы с тем что у нас стараются значению 1 такие бывают но ведь они разные мы видим что там там год там choco меня допустим
00:57:39 - 00:59:20
смещает очень сильно 5 количество кошек на количество вот меня смешает пока 5 6 можно ли ее как-то улучшить потому что сейчас у меня возникает вопрос я вижу бога шоколадку но я не понимаю что такое могу ли марс как бы ты мы можем объединить это в ином логично названия планет и иметь доступ туда через точку то есть так получается статью и нам называть его фланец объявить тут все тоже самое [музыка] ну допустим пока что у нас так и нам нужен тут получается так сейчас у это значение то есть name как-то его задать только не помню тут
00:58:32 - 01:00:16
тоже конструктор или в конструктор аяте я тебе помогу они там создал я тебе создам конструктор до на самом деле конструктор окей мы создали такой и нам теперь мы вроде можем избавиться от этого да окей здорово теперь мы еще одну интересную штуку обрисуем у нас появляется следующий метод он у нас статичный статеек static void draw газ гром год мы просто должны отрисовать бога и сюда мы передаем стрингер этом мем азис пишем системой [музыка] и добавляем сюда нашего бога затем в этот такой простой метод мы его вызываем
00:59:47 - 01:01:31
вот здесь грохот и вроде как бы всякий но ситуация заключается в следующем я могу сюда передать марс щеку предположим как бы ты решил проблему с тем что я не должен передавать не пойми что в метод дроу год а этот метод точно должны работать с богами сто процентов потому что технически я могу даже сделать использовать твой так называемый н а почему нет я могу сюда передать mans ну вот копать могу почему нет и на понимаю то есть мы можем нам нужно создать и нам который будет относиться только к богам мы только его сможем
01:00:43 - 01:02:24
принимать дроу год таким образом мы ограничим ненужные переменные туда но у нас все равно получится дублирование ну то есть 21 и нам планет будет и такой же и нам только с богами но это не проблема это не дублирование это просто но только такой вариант решения на данный момент окей хорошо ну предположим perego решил я могу сказать как он будет выглядеть эта глубина здесь будет год разумеется - но winsett марс а здесь напишем mercury mercury этого будет вполне достаточно в качестве параметра как ты предложил мы сюда мама передавать
01:01:35 - 01:02:56
и тот же тип данных и на и мы видим что теперь у нас уже код ругается а теперь я хотел бы услышать заключение всего этого скажи какая какое преимущество в динамо что ты из этой задачи увидел какое преимущество и нам их в сравнении с созданием куча разнообразных конца с тем то что создание констант у нас никак не ограничивает по типу а тут мы еще имеем дополнительные ограничения по типу сам геном в некоторых случаях может очень помочь абсолютно верное именно так она и есть ты абсолютно верно про хорошо тогда мы
01:02:16 - 01:03:48
передвинемся немножечко дальше и пойдем патриком spring ты сказал что ты работаешь с прям бром уже имел опыт хороший и это действительно может не радовать расскажи какие области видимости с премьер ты знаешь я говорю про scope раскол бинов есть скоб синглтон есть scope prototype http request по-моему учтите pe cer шин и какая-то глобальная глобальный ищем global fashion так вот ok расскажу чем разница между сингл тоном и прототайп синглтон у нас создается с самого начала ну то есть spring его создает когда
01:03:05 - 01:04:52
запускается приложение и он полностью a managed то есть вплоть до того пока мы не завершим приложение бага наш контейнер так сказать мне завершить свою работу он будет жить ума и носится с пингом prototype он лишь только на мтс конструирует такой бен но после этого он за него никак не отвечает и уже как только мы перестанем в наших там каких-то методах с ним работать его удалит гарбич коллектор и есть такие методы как там при дестрой он вызван не будет у нас потому что spring за него не отвечает of single тони такой
01:04:01 - 01:05:15
метод будет вызван потому что при завершении приложения у нас spring вызовет этот метод окей вполне вполне резонно а давай попробуем решить я тебе покажу пока ты не скажешь как этот код будет выполняться давай посмотрим что у нас есть и как как задача наша будет состоять у нас есть несколько методов они безусловно что-то делают и к ним подключаются бины и понятно мы не будем сейчас и конфигурировать spring не в этом задача поэтому смотрим прямо под и так у нас есть несколько вещей есть у нас какой-то
01:04:38 - 01:05:51
класс у нас класс и предположим что он будет бином далее у нас есть какой-то класс конфигурацию а там комплект и тут мы будем собирать бины и здесь у него есть аннотация configuration есть теперь мы делаем следующую историю мы пишем бен мы же знаем что property бина создает аннотация создает инвалидов контейнер и тут мы и пишем на паблик он возвращает а и здесь мы делаем это new а затем мы создаем еще один бин сторон не какой-нибудь и говорим про паблик он за счет class b здесь мы делаем return
01:05:14 - 01:07:02
и пишем 1 a1 а еще один только а2 и при создании классиком б мы туда передам а1 и а2 ну соответственно класс b будет выглядеть следующим образом при будут два свойства 1 и точно такой же a2 вот тут у меня возникает связи с этим вопрос сколько бинов создастся в spring конвейере две штуки 1а и 1б а почему гре ну насколько мне известно у нас синглтон это по дефолту и spring если нам нужно чтобы он нам предоставил 2 бина а то он когда создаст один бин а он у себя его хранит и везде где нужен а он подставляет именно его он
01:06:10 - 01:07:51
не обращается наверное скорее всего я думаю что он не будет обращаться второй раз к этому вызову метода а и не вернет нам еще один бин а то есть всего у нас один бин а им бен б в котором будет два одинаковых такой ссылки ok а если я сделаю вот так здесь напишу а про то тает сколько будет создаваться бином в любое место где потребуется been a будет вызываться этот метод я думаю потому что это ну сколько другой несколько раз он вызовет но неправильно сколько сколько было мы создаем понял но я думаю что два но
01:07:01 - 01:08:33
но думаю что 2 t2 большая просто ну честно сказать сталкивался вот с таким использованием scope of ну поэтому я не камням именно вот по ощущениям думаю что 2 но как она на деле будет я не знаю но на самом деле ты прав мы когда ставим прототайп это значит при каждой при при каждой попытке найти кандидата spring контейнер будет создавать абсолютно новый бин и разумеется kb мы точно получим 2 новом пинание зависимости от того сколько раз был ранее выполнен метод а с возвращением на абсолютно здоров теперь
01:07:53 - 01:09:19
мне еще интересный вопрос хитро если маленький скоб затрагиваем ты сказал что синглтон существует в контейнере всего лишь 1 раз а можно ли создать два бина символ тона имеется ввиду один и тот же pin 2 создать ну предположим у нас с тобой есть classic да он не пропадай вот он на сам набрать да он синглтон просто вот так он выглядит неважно в рамках какой конфигурации мы можем вот это даже удалить больше интересует и вот это мы можем затереть б да то есть вот у нас то есть можем ли мы создать два синглтона
01:08:39 - 01:09:58
я думаю что в рамках одного приложения нет потому что мы руками будет и создать через не у явно тут довольно а именно а именно как бен который будет менеджер наш spring я думаю что нет но ведь у нас же dependency и джексона у нас же стринг арт контейнер с принцем вершил of control контейнер с принципом версии управление заключается в том что мы не управляем мы явно не пусть убирается new и даже если это будет явно то это будет в обход защита не будет бином да да да окей тогда вопрос на вопрос остается открытым
01:09:21 - 01:10:46
можно ли все-таки создать класс 2 персик болта и я тебе уточню приложение 1 но я думаю в рамках одного приложения и в рамках одного контекста тот скорее всего нет а если у нас но если мы решим поднять 2 контекста он естественно тоже пройдет по всем аннотациям и в себе поднимет еще один такой синглтон но это уже второй контекст то есть наверно только так но правильно но правильно абсолютно верное предложение может содержать любое количество контекстов контекст это по сути контейнер контейнер конфигурирует
01:10:05 - 01:11:24
себе сахар а можно вопрос а на практике создаются приложения которые одновременно имеют несколько контекстов но на самом деле чаще все приложение выглядят очень разрозненно то есть мы можем создать несколько разных контекстов потомок просто подключать на по большому счету это реально подключение то есть мы имеем одно здорово приложение из них мы собираем поэтому в рамках каждого отдельного контекста создаются только свои бен и чаще всего и дубли кации нет нет такого что не бывает и такое не видел такое что
01:10:44 - 01:12:00
создают несколько случайно контекстов потому что неправильно конфигурирует приложение и потом получается конфликт бинов я такое вижу на одной работе это было связано с тем что у нас было днк все собирали как обычно из и палок палок не было только осталось г и это привело к большим проблемам на долгие века потом это выпиливать поэтому просто нужно к этому относиться массивная и знать крик лагерь хорошо одинаково хорошо вопрос как подключить одну одну конфигурацию на основном на java.com кеги предположим
01:11:22 - 01:12:38
к другому конфигурационный файл предположим у меня есть здесь configuration и есть у меня еще аннотация тоже здесь configuration и здесь конфиг конфет б как я могу подключиться предположим я хочу чтобы контент б был частью конфига а а так но когда мы создаем контекст через конфиг по-моему мы указываем класс конфигурация . класс получается если мы хотим чтобы нам одновременно было оба может быть нам надо у наследоваться то есть надо как-то передать их оба а там уже не давать могу могу могу уточнить у меня есть лидер конфликт б в
01:12:01 - 01:13:38
нем есть бен бен не парни планетарный повода been public а и все то есть неважно что внутри вот такой класс я хочу чтобы мой been a стал частью конфига или promise как контекста который находится в конфиге а предположим ситуация следующая у меня здесь находится бен опять property находится бензис public здесь какая-то перемену не перемена тип данных б.б. и здесь у меня а вот так а потом ю.б. внутри а это два разных конфигурационных файла разумеется у них своя области так далее что нужно сделать
01:12:53 - 01:14:40
чтобы все-таки classic а стал доступен в конфиге а и соответственно здесь произошел оптовая или яндекс ну у нас нужно если у нас имеется у джова аннотации то у нас есть компонент стан который сканируют пакеты и нужно просто чтобы они оба были доступны при сканировании я думаю и тогда spring пойди учтет обе конфигурации и нам завтра варит туда окей на смотри я немножко тут под чтобы она была consistent на вот так зомби хорошо это один из вариантов а теперь смотрим ситуацию более типичную для любого проекта у нас с
01:13:53 - 01:15:36
тобой находится здесь память печь печь какой-нибудь кгб и так далее но там не знаю компе configuration configuration а и так далее здесь пакет у нас точно такой ты предлагаешь но буковка b конце ты предлагаешь добавить компонент scan что в принципе не так уж плохо и здесь мы с тобой указываем какой по всем нам на пакет на пакет выше ну и мыска ну окей хорошо даже на пати слышим тогда тогда что это значит ну для по идее это должно работать так что все вложенные пакеты будут просканирован и и и везде где у нас есть конфигурация она
01:14:43 - 01:16:21
должна спаррингом быть подхвачена и все создано должно быть то есть а если мы говорим о том что у нас конфигурация а и конфигурация б это два отдельных модулях ну допустим мэйвен модуль конфигурация а в одном и были она находится в другом модуле и да мы не можем как мы же не можем сканировать весь проект это же это же тоже это неэффективно представь себе модули а почему то сканирует весь проект модуль а это всего лишь единицы которая используется то есть реально наш проект бы выглядел бы следующим образом нас
01:15:41 - 01:17:00
есть applications вот модуль это модуль и наши applications далее он состоит из нескольких у него идет тот самый конфликт а затем comcept б какой-нибудь помимо помимо этого есть module applications есть модуль сервисы с и так далее вот из чего состоит наш проект эта вся магия в этом случае вот у меня вопрос прежней если наш рутовый пакет и рутовые модули это а.п. это рутина давай отметим имеет ли смысл и вообще логично ли это то что в кант configuration а который выступает маленьким винтиком в рамках
01:16:20 - 01:17:47
всего пакет в рамках все приложения он сканирует огромнейшее приложение целиком имеет ли в этом смысл ли он должен отвечать за сломали единичку и быть уверенным только мне но логично что нет что он должен только за себя отвечать но тогда у меня нету никаких идей насчет того как нам подключить именно конкретную конфигурацию одну существующие то есть с таким не сталкивался просто но хорошо давай подумаем ты предложил сканировать компоненты но удовольствием предположим я кудри вьёт тебя делаю и я вот хорошо говорю о кей components co
01:17:03 - 01:18:20
ногтей но чтобы если бы здесь в компонент mb извини ибо потому что все сканируется это зло ну то есть добавить тогда только чтобы просканировать дополнительно только конфигурацию б пакет вот этот второй там я просто не помню там же наверняка можно причисления делать в компании scania тогда мы хотим просканировать только себя и дополнительно только вот этот пакет если так может так как решение но нам почему мы можем а теперь это не проблема он он все что он видит в классе он будет искать хорошо а теперь у меня
01:17:42 - 01:18:58
вопрос нет ли здесь какой-то связанность связываем устим так называемый каплин ну да естественно есть мы полностью завязаны на b если в штаты в конфигурации бы что-то поменяется то у нас конфигурация будет проблемы абсолютно верное мы путем явного внедрения сюда информации о том как устроен и пакеты в рамках конфигурации б мы рискуем тем что мапперов очень сильно связываемся во-вторых мы завяжемся моего внутреннюю структуру да ты абсолютно верное понимаешь что компик б это у нас дпн дпн дпн дпн бэнкси оф о моде ok
01:18:21 - 01:19:52
абсолютно здраво замечание вопросов не но тогда у меня возникает другой вопрос как бы ты бы попробовал бы изменить это сложно сказать как бы это можно было изменить именно саму строку в компонент к ней или как-то вообще реализацию это все новости честно захотел были бы ты избавиться от components co на весь компонент скан идея заключается он ищет компоненты ну да причем он ищет компоненты которые у нас как они анонсированы до центра представь себе что конфигурации при вообще никаких аннотации да
01:19:06 - 01:20:31
пока что ну мы можем в теории просто создать внутри а нет или как нельзя внутри час если честно пока что нет никаких идей как это можно реализовать слышал ли ты что-то про аннотацию со словом импорт первый раз слышу ok это есть собственно решишь ведь компонент скан это поиск компонент почему и вопрос по-прежнему заключается почему конфиг а занимается поиском компоненты в конфиге б когда задача поиска и так называемые лука компонент касается это касается только компе г.б. он сам должен знать какие компоненты
01:19:53 - 01:21:25
проект и какие компоненты добавлять вы свой собственный конфиг разумеется здесь с решением правильным с точки это тоже на самом деле будет работать а это не правильно если это каплин к это принципе идет против идеи мы можем заменить это дело на волшебный волшебным аспирации импорт и здесь разумеется мы указываем конфиг в класс и все понял этим он таким образом в одну конфигурацию мы подключаем другую конфигурацию но мы только и и подключаем это как inject это как модульность в один модуль вставляем в как словно
01:20:41 - 01:21:51
старую кассету в видео прием господин забыла как называется уже вставляешь кассету чтобы посмотреть фильм видеокассет вот так же сам ты же не занимаешься связыванием видео приемника с видеокассет и напрямую его все равно с какой работать то есть он легко может заниматься постановкой это и есть один из мысов безусловно в том числе dependency injection мы можем легко подменять реализации принять конфиге который мы хотим окей ну не знал не страшно зато теперь точно знаете потому что домики раз постоянная ротация и мы
01:21:16 - 01:22:28
плавно подходим к концу давай немножко с тобой по занимаемся базами данных расскажи мне о чем идея join of я знаю есть ли джон есть рай join есть inner join есть cross join остановимся на в рай и и мир в чем между ними разница и как бы ты бы мог это обрисовать но смысл джона в том чтобы сделать выборку не по одной таблице а по нескольким и чтобы мы как-то mobile эти таблицы по какому-то полю вот если inner join у нас стопроцентный матч то только в результат только вот то что смотрелось лев join возьмет всю левую таблицу
01:21:52 - 01:23:26
которая будет в джони и где она нашла матче там будут значения где они будет она подставит нал и соответственно джоном наоборот все здесь правой таблице мы возьмем все значения а сделай только те что замочиться с правой о кей хорошо а слышал ли ты что-то про таки интересно вещи как диаграммы венна нет не слышу на этом на заметку как раз диаграммами вена очень легко описывать как работают right left join и и я в принципе джо имя или кружки это кружки такие это такие как когда я понял да да да я просто не знал
01:22:40 - 01:24:08
что называется высказываться это называется диаграмма венна собственно ниже изобрели изображены на логотипе аудиту самые пересекающие кружке идея заключается в том что ты можешь увидеть пересечении да и в данном случае как ты правильно отметил inner join и райдером хорошо давай тогда сделаем следующее у тебя есть возможность конечно же поработать с базой данных не посредством я пошел экран после этого мы с тобой попробуем выполнить несколько запросов и так задач просто им с левой стороны есть уже готовая к эти таблицы bozita таблица
01:23:26 - 01:25:07
интервью the interviewer с interviews и их типы то есть можно видеть что у каждой таблицы интервью интервью у них есть всего лишь пешка и имя разумеется таблица смежная с пересечением интервью тайп си interviews она хранит и кишку интервьюера и едешь по конкретного типа иначе говоря каждый интерьер может иметь разные типы интервью сейчас задача простая с правой и с левой стороны grayscale написать запрос для возвращения всех записей из таблицы интерфейс я его просто скопируем и если все из интервью что так хорошо
01:24:16 - 01:25:57
давай попробуем выполнить и просмотр готов есть мы получается теперь меня интересует вывести только тех интерьеров у которых есть интервью с именем java есть в меню есть интервью с именем java то есть интервью это отдельная таблица напоминаю это i'm toy у него есть два поля или иным и там есть значение головы до получается нам нужно при joy нить ну сразу нам нужно по таблице интервью с интервью types найти одичал о еде конкретно интервьюера какие принадлежат ему типы и чтоб там было вымени при этом
01:25:09 - 01:27:04
java начнем да то есть гендер вернуть просто вернуть только те записи у которых есть связь с интервью тип java то есть в нашем следующем забросе должны отобразиться только те интерьеры которые могут работать с java потому что безусловно это могут быть не все ну тут надо написать join только связь у нас получается интервью айди на так и при этом у при этом интервью он уже за мы за им взаимодействовать с 3 сейчас получается еще таблицы до чтобы узнать у кого есть безусловно ведь только 3 таблично она знает информацию
01:26:28 - 01:28:07
по таблице с интервью так я вот не помню только ключевое слово он он так он интервью types . join интервью вот это мы добавляем вот эту таблицу он type среди равно айди по моему как то так должно выглядеть it сейчас мы связали интервью с монету мы не таблицы грубо говоря по айдишник у нам нужно 13 интервью хорошо хорошо смотрим внутрь дыбе двигаемся дальше но при этом мне нужно вывести только тех у кого java да да да то есть и теперь нам надо сделать еще один join но теперь с интервью types только как это правильно сделать но
01:27:36 - 01:29:43
может просто сделать чего диджеем но если ты хочешь можно попробовать просто не уверен что это так страшно работать мы не говорим им уверенность давай сделаем у хотя бы работающим хотя бы разочек там не копируются вот так только тут теперь нас интервью айди топ как что-то у нас интервью интервью types тут должен быть interviewer а тут просто иди магомед тут у нас интервью само с интервью types просто айди так если все правильно написано то сейчас мы должны получить inner join и вывести все где у нас
01:28:49 - 01:30:35
совпадают айди интервью и 1 одновременно из его мы не тумане таблицы из таблицы интервью types теперь нам нужно ограничению в интервью types точек небольшой сейчас узнаем ну готов готов я думаю пока что так запустить но мы видим до что есть ошибка так а у нас там не name нет name она ошибку наверно так мы видим надо делать from вот эту монету мини таблицу вот отсюда брать захватывать сразу всем но нет захватывать я просто не знаю с какой таблица начать за фатально [музыка] посмотри как он да он сейчас равняется о
01:29:57 - 01:32:10
том что у тебя неправильный join our team обрати внимание грека совершил ошибку в целом код по правильными но я верю начало не плохое но где в строке твоей я подчеркну это строка 33 где там есть ошибка ты можешь начать frome interviewer см и интерьера воды ранил я нет я не ту таблицу за джони я таблицу за джони ла-5 нет он так для начала make не забудь поменять что-то в строке 29 изменилась и поменял прежней таблиц вот так попробовать хорошо давай пробовать я беру вариант и вытащу запускаемся он ругает вот там по
01:31:22 - 01:33:18
моему одинарные скобки данным окей хорошо мало еще раз и запускаемся могу и мы получили конечно же результат довольно таки обширный результат у нас получился но у нас это получилось хорошо задача заключается в том что мне нужно получить всех преподавателей доступных по конкретному интервью интервью есть разные java java script пустых фронт м-мне нужно получить таблицу который с левой колонке будет писаться имя интервью с правой колонке будет писаться количество интервьюеров способные его производить
01:32:25 - 01:34:12
пока это закомментируем можно удалить роста брать можно удара ну всё хорошо мы берем все из интервью в левой колонке нам нужно [музыка] и имя да только обратил внимание там interviewer они интервью внимательно а а нам нужна что подарить еще раз нам нужно интервью то есть ты просто неправильно выбрал таблиц а какую вот это первое не у нас и у нас есть две таблицы интервью да и интервью нам нужно интервью задача в левой колонке вывести имя интервью тип в правой колонке вывести количество преподавателей способны
01:33:19 - 01:34:56
проводить 1 кг во второй нам нужно вывести общая колебаться грубо говоря аккаунт не знаю толь нам нужно перед этим pop но нам нужен нам нужен опять ты interviews это тот кто их проводит тут до интервью с это токто их права как раз нужно получить их количество которые они могут проводить по конкретному типу то есть иначе говоря по джаве есть три человека по java script у есть один человек окланд ну нам в любом случае все равно придется joy нити все эти таблицы же а потом нам нужно просто сгруппировать
01:34:11 - 01:35:40
по теплу интервью и вывести kahoon их количество но наверное наверное я думаю что но в целом концептуально да мы получаем весь перечень интервью доступных и получаем общее количество преподавателей условно говоря или работников которые могут проводить по этому конкретному типу интервью я просто примерно понимаю как это сделать в голове но пока что не приходит мысль и как это сделать с помощью щас skoda то есть мы должны [музыка] опять-таки соединяться по интервью айди это правильно почему не хорошая хорошим
01:35:09 - 01:36:54
чем том потом у нас interviews соединяются с вот это и вот этой . интервью и де-факто мы сейчас получим пока что дождь из предыдущей просто без war теперь нам нужно сделать грубой оба и интервью type name как и но а до нужно нам при этом нужно вывести каунт всего их гранж и сама это супер офиса это самое важное вот есть вторым вторым полем select и должен быть com да вот ну я понимаю что нужно быть вот тут только он должен быть как вот так с можно бизнес даже пока что то есть у нас имя и и в количество только
01:36:15 - 01:38:13
правильно ли она сработает как я думаю или нет мы можем сейчас вот это запустить проверить конечно просто немножко но и мы видим здесь есть ашик так интервью type-s наверно вот эта ошибка после from sn добавить в интервью types да хорошо aleah справили многие запускаемся ну и он не работает и приделан он не распознает колонн интервью type а ну и вот и тут с пожарным steel хорошо пальмов чуть-чуть это расширен и что мы видим так ну мы видим то что у нас после группировки только не знаю правильно ли
01:37:30 - 01:39:17
она сработала какой-то ответ мы видим но правильно ли он сработал и не знаю что изначально у нас таблицах какие записи это саде это соответствует реальности или нет смысла но в том плане что может быть она как-то неправильно сработало и у нас цифры неправильно может там джалла вот видите это вышло обрела два могу показать что находится внутри таблица вот интервью types мы видим сколько их всего до их их всего 5 5 и вот interviewer их всего 3 и вот у нас интервью сам и пересечении мы можем взять
01:38:36 - 01:39:56
интервью тип номер один грамм и посмотреть сколько у него на чтобы двигаться 2 мы видим два да и посмотреть нашу консоль как говорится не сравнить прославился и мы видим два на печке у нас при можно найти эта двойка и мы видим что печки у нас двойка с 3 и сама совпадаете но у меня возникает вопрос этот код можно как-то улучшить если скрипт его можно улучшить чтобы предложим избежать двух джайна его так сложно сказать наверное можно только у нас просто связь такая немного странно вот это мини тумане таблица
01:39:17 - 01:41:07
мы еще можно на странности теперь типичная таблица которая позволяет хранить отношения многом многим а как многим да ничего ничего такого чтобы не случалось в sql мире но я задам другой образ топи нам важен join последний нужен ли нам вообще interviewer и здесь а ну всё да я понял interviewer вообще неважно нужно лишь количество изменит умы несколько раз повторялось это значение до против это все абсолютно верное этот было что что мне нужно сделать мы можем закрыть si quieres скрыл что мне здесь нужно
01:40:22 - 01:41:49
сделать в этом коде чтобы облегчить его производительности его судьбу но получается просто убрать последний join новому по росту biram проверь ну и мы видим да все у нас за полтора я понял чему ты научился за эти больше как минимум проходить интервью чуть-чуть потому что это для меня было 1 вот ну я первый раз слышал об этом понятии неоднородности вот немножко невнимательность подвела на sql вот это что надо больше думать про оптимизацию вот хоть сейчас просто наверно из-за какого-то волнения у меня не вышло не
01:41:08 - 01:42:33
сразу подумать вот в целом я всем доволен окей это здорово будешь ли ты предпринять какие-то шаги в будущем для того чтобы получить java работу и после этого интервью ты чувствуешь где тебе нужно улучшаться ну примерно чувствуется что надо просто чуть чуть более что ли ну джаву просто какую-то теорию можешь поднатаскать поиск не знаю просто подписать какие-то запросы есть вроде тренажер на всяких стеках вот по спаррингу не знаю то есть вот про import я просто в первый раз слышал то есть такой не знаю наверное не
01:41:54 - 01:43:13
встретишь на каком-то учебном проекте этот импорт это нам только на работе можно встретить вот а тогда буду предпринимать уже скоро попытки по поиску работы вот если получится то возможно скоро уже буду работать и мы все тебе желаем в этого большого успеха у тебя все получиться и мы не определенные лично нравится твое настроение как ты относишься ты абсолютно верно подметил что есть такие вопросы которые можно никогда не услышать есть вопросы которых мы просто не задумываемся но это всего лишь намек
01:42:34 - 01:43:36
о том что всегда нужно учиться совершенствоваться и в этой нашей индустрии по другому не получается ну что друзья с вами был сергей гонтаренко сори я желаю тебе еще раз удачи от всех нас опционы хавайте комьюнити чтобы ты нашел работу если у тебя будут какие то вопросы пиши ты знаешь где нас найти мы всегда тебя проконсультируем а на сегодня это все всем пока тебе слово последние спасибо всем пока хорошо пока пока удачи [музыка]
01:43:05 - 01:44:15