Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
[музыка] друзья приветствую вас на еще для сессии интервью и сегодня у нас в гостях алексей гун привет мы приветствуем как твои дела под поделись с нами своими строение у меня хорошо я немного нервничаю но в целом я в предвкушении предстоящего вот это круто ну я чуть не надо но тем не менее мы постараемся вместе с тобой сгладить этот стресс и так заняться энджой java хорошо расскажи откуда ты пришёл как-то связан с java может быть тучу какие-то другие языки программе вероятно у тебя есть опыт уже в программе работа может
00:00:00 - 00:01:34
быть какая то смысле откуда пришел но из технического вуза нет нет я вот я учился профтехучилищ ok и там мне явно было недостаточно того что давали там училище без высек по классике вот потом я несколько некоторое время работал без и я увидел что люди куда можно двигаться и я потыкался в админ ства ты класса программирования и решил что по миру и мне больше интересно что выбрал java именно это было самое доступное и понятное интернете я смотрел чему легче обучаться ничего легче ручаться что более понятно
00:00:45 - 00:02:44
объясняет и на тот момент это был гараж и так вроде тут понятно писал тоже учимся смотрел питон смотрел баш писал разные скрипты потому что это было нужно для hal диска делать автоматизацию некоторые поэтому мне было интересно и полезно и также в курсе в курсе получил избил как классно смогу тебя уже есть опыт в программировании тоже с этим знаком пусть даже java какой-то степени для тебя может быть новый но тем не менее ты уже знаешь как что-то устроена как создавать что-нибудь и внедрять это в
00:01:56 - 00:03:28
жизнь потому что работал без сна я могу себя только представить насколько это обширный спектр задач технических ну да классно это реально классно сколько вот совокупная если спросить в эти вот год два полтора полгода совокупно сколько ты можешь себя ценить войти но где-то лет 5 до очень-очень больно то есть если брать вместе с обучением то что я учился до 2 года я учился и работал блин не но это реально это вот это очень большой опыт даже обучение нельзя списывать почему потому что там ты учишься общаюсь
00:02:45 - 00:04:15
это тоже опыт мне классно классно это несомненный плюс потому что когда я столько здесь понимание как работает эта среда и особенно когда ты в ней уже внутри вертишься гораздо легче чем когда доберусь реально со стороны здорово спасибо тебе за такие интересные истории и твою личную историю как ты пришел и как ты попал в java ну а мы тем не менее будем начинать конечно же традиционно мы начнем с базовых вопросов пойдем от общего и частного и в конце у нас будет как обычно техническое задание ну что же ты готов да здорово ну тогда
00:03:30 - 00:04:40
начнем своей первый вопрос конечно классически для любого программиста расскажут разницу между процедурным программированием и объектно-ориентированном вот две такие парадигму чем концептуальное они отличаются друг процедур нам обязательное выполнение последовательные последовательное выполнение команд в объектно-ориентированном программировании это не обязательно то есть могут существовать допустим разные потоки могут создаваться дополнительные приложения ноги приложение дополнительный год программы которая
00:04:06 - 00:05:22
будет выполнять другие куски кода в процедурном программирование это должно быть прям строго последовательно я прям по полочкам отлично а если вот задуматься слова объектно-ориентированного что вот технически как выражается разница между процедурным программе и объект ориентиром если брать в этом ключе то в этой вытекает из названия процедурном все вещи эта процедура а в объектно-ориентированном и такси вещи это объект и код рассматривается с точки зрения объекта они линейных элементов новость все элементы
00:04:47 - 00:06:19
базовый кирпичи объект оке оке а вот объекты они чем-то обладают но в моем понимании процедура это вот что-то должно быть выполнено но вот если говорить про объект ощущение что не должно быть ничего выполнена что объекта делают все сами или как-то формироваться сами вот что в объекте есть такого особенного чего не было в процедурном программировать и почему в принципе объект появился он может быть с чем-то обладает или еще что-нибудь но у него есть некоторые как азбука я знаю что это но не знаю почему это было сделано какие
00:05:34 - 00:07:09
были предпосылки что объекты обладают к примеру они инкапсулированные они ну смотри audi наследование и полиморфизм но какие к этому были предпосылки что привело к этому наверное какое-то развитие бизнес-процессов сало в этом необходимо явилась необходимость да действительно а вот смотри еще раз объекты они чем-то могут внутри себя обладать могут них есть какая-то структура которого явно и помогает этим бизнес-процессам без бизнес-процесса на чем-то держатся они каким-то образом работают далее мы
00:06:21 - 00:07:57
создаем эти объекты в интересах бизнес-процесса вот что внутри объектов этих есть чтобы эти бизнес-процессы и проработали уникальные поля записью украсть их собственные свойства какие-то по я методы то есть разные элементы которые отображают их уникальность для чего они используются можно мы это можно и так сказать в действительности объект короче вид обладает состоянием потому что каким образом нам нужно переносить информацию каким-то образом ты правильно ответил что объекты могут быть сон вроде
00:07:10 - 00:08:27
уникальными допустим объект такой другой объект абсолютно другое как то мы должны это отличать вот те самые поля которые ты упомянул это одно из одна из возможностей каким образом мы это можем реализовывать в программировании применяя а.п. хорошо а что лежит в основе всего а.п. но с технической точки зрения как вот мне создать объект и игру про джаву на основании чего объекты создаются может быть есть какая-то осно основополагающая конструкция как бы фундаментальная ну ты же наверняка слышал от слова
00:07:50 - 00:09:04
шаблон тебе не тянем на что не толкает допустим слова избирательный это это не это не про дизайнер я думаю не против чтобы это так какой-то шаблон на основании чего то мы создаём что-то допустим вот как автомобиля вот мы привыкли видеть автомобиль четыре колеса и какой-то кузов по сути для нас это шаблон мы понимаем что разные автомобили будут выглядеть немножечко и нашего концептуально вот вот эта форма которой в нашей голове четыре колеса и кузов с 4-мя дверьми предложим с багажником ска потом для двигателей то есть вот это
00:08:38 - 00:09:47
какой-то шаблон и на основании его создается куча разных автомобилей вот как это выражается в апк одним словом полиморфизм не не менее это не проблем что до этого сюда зело ну предположим нам нужно создать машину одну вторую третью нам нужно как-то описать вот как мы откуда мы знаем что этот объект как машина будет состоять вот допустим только из этих полей он будет обладать таким то поведением но мы должны будем сами сказать об этом ну безусловно а вот как это называется я имею ввиду как мы должны как-то это в
00:09:18 - 00:10:48
языке программирования выразить создать что-нибудь описать что-нибудь не понимаю речь идет о классе на самом деле весь класс является по сути таким себе шаблоном на основании которого мы что-то мы определяем какие-то базовые характеристики естественны для этого типа данных и конечно же на основании него создаем куча разных объектов ведь объект это экземпляр класса вот мне настолько естественно было что едешь за группы ничего страшного участков хорошо вот из отметил такую классную штуку как полиморфизм к чему общем
00:10:03 - 00:11:40
полиморфизм относится и если какие-то у него другие игре уокер если еще какие-то другие принципы об полиморфизм это все лишь один принц какие есть еще наследование и капсюля ция пойман фирм как следует из название [музыка] использовании одного и того же элемента в разных структурах к примеру если брать классы то мы можем сделать так чтобы класс maxxtro чтобы он использовался не чтобы он сказать имплементировать реализовывала чтобы он реализовывал не только одну жесткую структуру вариации несколько
00:10:51 - 00:12:48
остальные тоже рассказать давай давай скинуться на полиморфизма тем довольно таки интересно и водных санта что ты хотел сказать наверняка мы нога форме то что полиморфизмом до рождает много форм а вот с точки зрения использования как бы вот ты себе представляешь вот есть у нас предположим класс автомобили на это какой-то базовый класс понятное дело что каких-то производных конкретных вот класса автомобилей может быть много как ты отметила чтобы мы имели разные формы а вот с точки зрения кода чтобы полиморфизм действительно
00:12:00 - 00:13:14
работал в этой точки зрения вот как бы к это выразил как бы ты описал то я бы сделал один но если 8 я хотел создать несколько автомобилей на базе погода я бы сделал один базовый интерфейс кузов и четыре колеса и от него вы уже делал остальные автомобили вот и а как бы ты управлял бы этими всеми автомобилями представим типичный типичные автобан дорога highway да как ли магистраль транспортная там куча автомобилей разные грузовые и пассажирские и грузопассажирские как бы ты будет и мы к 7 и при помощи
00:12:38 - 00:14:07
полиморфизма управляла но я бы на вход выпусти на въезд автобан указал бы что в если только автомобилем так что по сути неважно какой автомобиль главное что ему был кузов четыре колеса то есть получается что а вот как в коде бы вот вот это вырезал предположим у нас есть какое-то какая-то функция именно кодовыми словами интерфейс и у него и разные там ford к примеру вот и значит класс шоссе до и он на вход вход принимал атрибутами не именно садистом mitsubishi а именно интерфейс к да звучит круто а почему вот почему
00:13:22 - 00:15:27
именно интерфейс корр почему бы не создать с куча методов для каждого отдельного допустим вида автомобиль там mercedes ford не знаю тойота все что угодно почему бы не создать куча методов вместо одного зачем усложнять зачем делать сложнее если можно сделать проще но ведь это удлиняйся код и создается путаница сложнее отслеживается же потом контролировать его абсолютно верно да ты прямо назвал самый крутой принцип который можно было такое слышать kiss keep it simple ступит дату с нужно держать вещи достойны настолько простыми
00:14:25 - 00:15:39
чтобы любой мог с ними разобраться это верно это из вид наверно потому что во первых мы не можем угадать какое количество автомобилей будет о их типом понятно мы можем привязаться к брендам но если привязать чему-то еще то оно будет расти в прогрессе и вперед вперед 3 а так у нас есть базовый интерфейсе нам действительно все равно это ведь абстракции круто супер ответ мне очень понравилось спасибо хорошо двигаемся дальше вот такой волей случая ты затронул слово паттерн и до дизайн попала них немножко поговорим не пугайся
00:15:02 - 00:16:12
слова страшно я понимаю но что ты знаешь и дизайн паттернах и главное какие ты знаешь вот назови какие то значит я надеюсь что синглтон и factory ты просто выбросить в помойку они все квартирная но там существует если по классике то существует три типа порождающие поведенческие и структурные порождающие они что создают поведенческие они отображают ну да отображает взаимосвязи между классами элементами вообще же а структурные они поддерживают структуры знаю как классы саппорт если про конкретики примеру про
00:15:36 - 00:17:37
порождающие это вот factory это builder синглтон то же самое но это два порождающих внутри если про структурные это например адаптер например ну ничего страшного если про поведенческие я не знаю правильно нет вроде комиссии это стратегия фасад или фасад это структуру passat на поведение не тянет фасад это же блэк за структур на структур на вот окей круто а вот ты назвал builder может от мечты в чем идея билдера и целом может быть ты знаешь какие-то примеры того самого билдера который в джаве выражен уже builder
00:16:37 - 00:18:34
builder по сути он тоже обращаются в названии сунуть в названии он чё-то конструирует то есть мы ему даем параметры и взаимодействуя с ним что то получаем на выходе ok а какая основная идея самого builder а вот что он собой приносит мы как бы подразумеваем что польза какая-то должна быть ну вот какая именно пользу он создает объекту ok но зачем ведь объекты можно создавать и так и без билдера всяких нет тогда нужно был указатель строить полиморфизм методов а это не очень крутая идея проще создать какой-то класс который мы можем
00:17:40 - 00:19:22
изменять и потом по требованию получать что-то чем делать множество вызовов одного и того же но предположим мы опустим идею об и здесь вот есть разнообразные джаве примеры тех самых builder опак нем чуть позже вернемся но вот сама идея вот на русском строители звучит да вот он строит мы понимаем что мы его скармливаем какие-то другие свойства значения объекта неважно информацию для конечного конструирования финального объекта а вот все таки почему пришел пришел мир вот к этому паттерну этому шаблону проектируем чтобы что что
00:18:31 - 00:20:00
побуждает его использовать чтобы в принципе задуматься о том что ты уже отметил горит лучше выделить все в отдельный класс этим как-то управлять это безусловно одна из мыслей но что побудило к этому традиционно вот смотрим как строится дом дом это очень такая сложная структура ты знаешь как оно строится допустим когда абстрактно до обстоят тоже представляю себя от страховать для для меня это звучит следующим образом приехали привезли один блок привезли второй блок привезли трети поставили крышу ставили окна провели электричество
00:19:16 - 00:20:25
вода все готово сдано неужели все так просто в случае с домом наверное нет очевидно нет если ну это же какие-то этапы почему нет ну допустим допустим с вами вот дом это сложно да это сложно а если я предположим устрою стул элементарные или даже табуретку 2 4 ножки две перекладины и все и и сидушку это сложно или имеет ли в этом смысл делать сколько builder ну а если 15 таблеток но я так думаю что это чтобы пропустить смежные так и класс builder как отдельные рабочие перережь ему даешь ему вот эти все элементы
00:19:59 - 00:22:32
горишь сделай то есть избавить программистов от рутины отчасти да да а часть ты правильно отметил то что то это хорошо заметил что если нам нужно 15 табуреток на 15 табуреток это относится к другому паттерну который моего брики что это производит на это производство одного и того же но ты абсолютно верно заметил что дон это сложно табуретка это может быть несложно это про медведь что мы строитель что-то отдаем идея билдера заключается в том что мы хотим в первую очередь сокрыть сложность конструирование этих объектов вернет
00:21:14 - 00:22:35
потому что вероятно complexity или сама сложность настолько высока поэтому мы в первую очередь выделяем как и предложил в отдельный класс мы поддерживаем все это в одном месте а как плюс мы это скрываем от глаз до самого пользователя или клиента и разумеется он просто на уровне абстракции отдает необходимые материалы для постройки дома и он сам по себе строится понятное дело что ни сам по себе но он-то не знает ее мать не важно для него это абстрактно когда меня для тебя то есть вот в этом и де бил бы
00:21:56 - 00:23:03
расскажи знаешь ли джаве какие-то белгора которых реализованы вот и на джаве не руками поимели моими которых все знают которые все используют но я знаю только stringbuilder отлично ну чё ещё как он знаешь которые связаны со строками но они одинаковые билдеры string ушах до абсолютно верно это то что я хотела услышать поэтому не зря мы выкинули синглтон ai factory хорошо отлично тогда двигаемся дальше двигаемся здесь реально все круто поехали давай поговорим немножко про типы данных расскажи разин
00:22:30 - 00:23:52
между ссылочными примитивными будем углубляться более java кардинальные отличия ссылочных и примитивов это в том что ссылочные а это примитивы хранят в себе само значение ссылочная хранят в себе ссылку на это значение на ссылку на тот объект в которой хранится ну и как следствие так как примитивнее мелкие их можно хранить в стеке в разделе малые и быстрым по литью ссылочные не хранятся в тибет более долгосрочной памятью а скажи в джаве аргументы передается по ссылке или значение зависит от этого типа данных
00:23:11 - 00:25:05
если примитивным то они примете у меня отдаются если слышны и посылка отправляется ну а если быть более точным как бы тот и да и нет предположим появился бы какой-то третий тип можно было бы легко сказать что еще и третий вариант а все-таки утвердительное а по ссылке или по значению мы не говорим о предмете передаче мы говорим о том как она передается предположим я передал какой-то примитивный тип данных из одного метода внутри вызываю другой метод и в этот вложенный метод я передаю примитивный тип данных смогу ли я из
00:24:08 - 00:25:32
внешнего метода который делает вызов и получить доступ к измененному значение нет окей это на что это что нам говорит о том что он передается примитива потому что она передается по значению а вот если бы я передал массив в таком же формате умеешь метод внутреннего другой метод вложенный но имеется вызов я люблю в вложенном вызовем я передаю массив что-то его как-то изменяю смогу ли я получить доступ к измененному массиву снаружи ok а если я сделаю замену ссылки во время изменения метода ну тогда нет ну то есть
00:24:50 - 00:26:41
я передает это ссылка я значение массива хранится в типе и ссылка ссылается на именно тот объект не важно сколько раз она будет передаваться ссылка ссылка ссылается на один и тот же элемент и впоследствии изменяя этот элемент изменяется итоговое значение неважно какой глубины это это абсолютно верное замечание но предположим вот такую ситуацию у нас есть метод он на вход принимает массив неважно какого типа данного блюда ложим если я поработал с этим мид с этим массивом и в конце этому аргументу пиль присвоил
00:25:49 - 00:27:16
новый массив смогу ли я получить и при этом всем у меня в парами у меня возвращаемое значение вольт то есть я из метода ничего не возвращают я принимаю массив я с ним поработал а потом в конце я пишу рей равно new ray в этот момент после завершения этого метода смогу ли я получить доступ к новому массиву из метода которые вызывали тоже ну это внутреннее вызов из внешних они вызывают столько по ссылкам а в вложенным методе произошло произошел новый вызов нового массива и извне к нему нет информации а
00:26:31 - 00:28:18
почему не все таки эту информацию мы мы аргументом передаем ссылку ведь это массив а потом мы тому же аргументу делаем замену ссылки разве снаружи это никак влияние не оказывают здесь я не знаю точно но я могу предположить что когда вызывается метод в аргументе создается новое значение где передается ссылка а когда мы переназначает ссылку это переназначает на новое значение они на старые значения которые был присвоен аргументу абсолютно верно да и да это то что я тебя хотел услышать значение обжали передается
00:27:23 - 00:28:52
пардон аргументы передаются по значению ведь когда мы вызываем метод вызова по сути создается новый стек стыке делается к копия этих самых ссылок и это копия умрет вместе со стеком то есть как ты правильно отметил мы возьмём новую ссылку возьмем копию присвоим ее копию а копия умрет тем самым не оказав никакого эффекта на то что мы именно тот массив который мы передавали снаружи потому что была замена ссылки а вот как тоже правильно отметил если бы мы просто поработали с массивом отсортировали его
00:28:12 - 00:29:20
то в этот момент снаружи мы бы увидели измененный результат да а почему еще раз можешь закрепить а потому что мы передаем копию и работаем с этой копии то есть ссылка ссылаемся на тот же самый объект абсолютно вижу абсолютно верно круто супер хорошо двигаемся дальше скажи ты что-нибудь слышал про boxing и анбоксинг в джаве и на русском звучит упаковка распаковка другой связанный с boxing слышал ли ты что-то про классы обертку а до [смех] но то есть это по сути пустые интерфейсы и не пустые интерфейс и офисы класса
00:28:47 - 00:31:05
интерфейсы которые предназначены для обобщения объектов чтобы можно было подавать объект общего вида это как к примеру для доставки доставки фруктов нужны коробки и собственно мы в коробке забить его на апельсины и яблоки и фрукты но мы не можем их голиком кидайте мы пинаем их в коробку и от 8 короткий также и классы заворачиваются обертку и обертка идет дальше production куда дальше и нужно идти например как интерфейс или интерфейс класс но не совсем а скажи может какие-то примеры класс оберт классов обёрток
00:29:54 - 00:31:36
ну вот общинного мы отбросим это не совсем про это может быть ты слышал что-то связанное классы обертки с примитивными типа метан но я честно говоря я думаю что они сделаны но как интеджер добыча примитивы они зити я думаю не сделаны во первых я удобство взаимодействия то есть у них уже встроенные какие-то самые частые используя методы примеру как the string или там парс также для того чтобы их можно было использовать в обобщениях другая тема ok а вот скажи вот ты вот правильно отметила класса обертки сначала
00:30:49 - 00:32:34
чуть-чуть пошел не в ту степь но не страшно но итоге вышел и то есть примитивные типы данных или каким-то образом нужно представлять в виде объектов все-таки какова цель то есть как один вариант да они работают дженериками этот правильно то есть примитивы дженериками работать не бы модель мышку вперед но ты прав а вот еще какая цель была введение этих класс обёрток в чем заключается в нашем конкретном контексте java и как это проявляется что нам это дает ведь примитивы и так себе вполне примеси войном обычное значения ничего
00:31:49 - 00:33:02
такого зачем все-таки им нужны обертки тоже опять же я не знаю точно могу предположить что это для того чтобы работать с ними как с объектами они как стримить umi то есть и если это объекта значит на него ссылка и ну и дальше к каскаду можно с ним чтобы делать вне этого стека вне этого примитива ok да но почему это классный ответ то есть наши классы брокера или классы обернута чтобы работать с примитивами как с объектами в первую очередь как-то generique работаю с ними ли обобщение на русском языке
00:32:24 - 00:33:40
а вот тот ведь теменной гольф хитрый вопрос у меня есть метод он принимает на вход интеджер не int но интеджер могу ли я просто написать туда число ведь мы знаем что просто число написать это примитивный всегда make a mi я веду я не буду там стать new in the jerk и вставлять туда число вот можно ли так написать да а чем это связано знаешь ну потому что умные дядьки за нас все уже решили то есть в классе уже существует метод которые интерпретируют его который его заворачивают но ведь у нас но ведь у нас нету никакого метода
00:33:05 - 00:34:36
ну и между нас просто я имею в нашем классе у нас просто обычный даже статический метод я бы сказал бы канзи ум young он просто принимает интеджер как класс обертку и тут мы вызываем kanzen янг и передаем то просто единичку они как типично создаем объектом неё интеджер и так далее и он автоматом завернет у в нужный объект правильно я в детали не вдавался просто знаю что и я читал что читал твои говорю что он автоматом завернет все эти примитивы он автоматов загнется вас обертки если их писатель не как новый
00:33:51 - 00:35:14
вызов а как примитив а говорю что не слышал про of the boxing и boxing н.г. это она была абсолютно верно это было она ведь of the boxing это как раз приведение примитива к его соответствующему типу классу обертки pure skin к интерьеру дабл предположим черты характера и то есть of the boxing анбоксинг это обратный процесс отлично отлично но двигаем дальше лишь как мы добрались до истины хорошо передвигаемся к объекта объект это такой класс интересные о нем кучу вопросов и на джона фанами глав и на-ка вот где только не слышал вопросы и
00:34:33 - 00:36:03
даже на сеньора кого встречаешь хотя это редкость расскажи какие все-таки в объекте ммд класс объект какие есть методы как кратко просто о них и что так целым знаешь про тот класс зачем он нужен но базовый класс от которого и наследуется все остальное приведет естественно в нем реализованы и общие методы которые которые наследуются всем остальным такие как работа с потоками против ой как отображение что в этом объекте ту string и общие вещи которые если про говорить про методы и квас для сравнения это для сравнения одного
00:35:17 - 00:37:38
объекта с другими похожесть вполне достаточно вполне достаточно хорошо ада поговорим про самые крутые методы во всем мире который называется и krolls и хэш-код вот и уже сказал эклз ты правильно отметил что метод используется для реализации проверки на эквивалентность двух объектов что ты знаешь вот о том как нужно этот метод реализовывать вот допустим у меня есть свой класс класс человек у него есть какие-то поля не важно какие просто вот они есть далее ты говоришь что уже метод реализован можно
00:36:24 - 00:37:48
ли при помощи этого метода сравнить два объекта класса человек и сказать что действительно что они являются эквивалентными в принципе принципе можно конечно использовать и так нам по хорошему нужно переопределять методы и курс и хэш-код потому что и курс он задействует хэш-код хэш-код по сути считает цифру считают берет какие-то свойства объекта считает цифру и если цифра совпадает с цифрой два объекта значит похожие объекты что если вот у меня два вот я вижу глазами или дано два объекта класса
00:37:10 - 00:38:53
человек я вижу что он не эквивалент вот мне просто видны все свойства совпадают что будет если я не переопределим метод ipples и все-таки его за использую человек один пик wheels человек 2 что в этом случае будет true или false я не уверен но мне кажется будет фолз потому что он будет считать ссылки а чтобы для ссылки да да да гори гори ссылки они же будут ссылаться на разные объекты шкур был считать ссылки ссылки будут не равны и объекты разные он такой нет даже если там поля одинаковые это не
00:38:01 - 00:39:21
не похожий объект потому что ссылки не одинаковые он на самом деле как стандартная реализация метода ios просто проверяет объект по ссылке как ты правильно заметил а вот ответь мне на вопрос а вот идет такая запись человек 1 равно new человек на какие-то свойства затем я создаю ещё одну переменную человек 2 равно человек один в этом случае вам покажу не перри определенный метод эклз покажет true или все-таки фоллз будет трубу потому что ссылка же мы присвоили второму первую да отлично хорошо давай поговорим о том
00:38:49 - 00:40:09
как нужно переопределять метод и пост экономичного переопределил здорово еще стоит исходить вот технические там есть пять принципов наверняка ты о них слышал может быть видел дай пройдемся по некоторым из них назови который ты знаешь это объект не должен быть на их у самого себя должен быть true если эклз если объект похож на 2 и 2 похож на 3 значит 3 значит первый обязан быть похож на 3 если а равно b to b равно а уже круто еще два осталось дальше не помню допустим что будет что должно быть если
00:39:29 - 00:41:34
объект и quels знал что будет в этом случае фолз я первым сказал что он не должен быть а хорошо защитно но будь как сказать уверен в том что для всех четырёх принципов принцип но знал то есть не на подразумевается всегда вроде это принято и еще один что должно быть ясные я упорото 20 тысяч раз выполняю этот метод eagles против одних и тех же а да вспомнил он ну то есть повторение эклз и не не зависят друг от друга должен возвращать он true или все-таки forbes одно и то же значение какую игру то есть если те курс
00:40:31 - 00:42:05
один раз значит и курс и все остальные разы а если поменялись принцип постоянства праймари а вот если я поменяю значения консистенция должна оставаться или нет нет значение жизни абсолютно верное абсолютно этап пройден идеально единственно что хочется отметить да про хэш-код мы еще не поговорили расскажи вот в чем идея хэш-код и зачем она вообще нужна за этот метод зачем он нужен что он нам даёт интересно как я говорил ранее он считает приводит унифицирует пая то есть мы же не можем там все по отдельным
00:41:18 - 00:42:53
полям страной и куском если абстрактно брать он и сравнивая выравнивает все в и потом сравнивает одну цифру с другой цифры по сути это приведение к одной цифре всего что указано если всего что должно быть учитель на объекте ok ok а чем это ограничено ты гришка эта цифра там еще это чем-то ограниченный или нет предельным значением это абсаль абсолютно абсолютно верно а скорее чем ты пользуешься при переопределение метода и паулс и методах и шла как ты это делаешь ну ладно la речь шла о том что я хотел
00:42:14 - 00:43:59
спросить где используешь ли ты генератор винты лошади когда ты нет или пишешь руками на самом деле нет смысла писать руками потому что intel очаги может круто сгенерирует за тебя и плз да как находишься в объекте если в классе ардон если у тебя есть уже какие-то свойства одно даже у тебя этого достаточно для того чтобы попросить идею сгенерирует за тебя и курсы хэш-код она также как невесту string to do do do am она тебя предложит это вот конечно же это крутая штука однако я хотел бы заметить что при
00:43:26 - 00:44:46
переопределении курс но вероятно по ошибке ты сказал это что используется хэш-код хэш-код при при переопределении эклз не используется я имею внутри самого места чаще всего определяются вместе но это не происходит внутри самого метода а вот тут хотелось бы уточнить одну как вытекающую интересную вещь в чем выражается контракт между и глазки хэш-код ведь это написано даже в самой документации джоли может быть они как-то взаимосвязаны какая-то между ними есть такая нерушимое тонкая нить которая их объединяет вместе
00:44:05 - 00:45:21
и вызывает нет нет нет как я только что весил eagles хэш-код не вызвать нет конечно ты можешь это сделать но он-то не делать не знаю ну вот смотри задам вопрос или точнее разовьем немножко вопрос предположим у меня есть метод и грустно и у меня есть метод хэш-код лев или определил и тут у меня возникает мысль если у меня два эквивалентных объекта то есть когда объект а эклз объект 2 и это возвращает true должен ли быть в этом случае у них хэш-код одинаковы да окей а может быть вместе но там в зависимости от зависимости от
00:44:43 - 00:46:44
переопределения то хэш-код то есть если два объекта утекло они обязаны иметь один и тот же хэш-код если элемент к визе если два хэш-кода одинаковые это не может быть не обязательно что два объекта eagles а чем же это связано с пределом примеру если элементов больше двух миллиардов то ну к примеру 2002 2 миллиарда первый элемент будет иметь уже один тот же хэш-код объект будет другой а еще есть какие то варианты вот то есть ну допустим м тонн ну окей а вот ситуация когда у нас предположим два разных класса с
00:45:50 - 00:47:48
абсолютно идентичными свойствами такое может быть ну предположим у нас есть класс человек у него есть его поле aldi у нас есть класс автомобиль у него есть поле айди эти поля аббат строки и там даже значение у них будет одинаковая человек будет x и z едешь к его машине будет едешь к xv и z будет ли в этом случае хэш-код одинаковый и будет ли в этом случае эквивалентность не знаю не знаю честно но я понимаю что так не должно быть естественно чем мой потому что это же разные объекты а самом очевидно это разные классы они
00:46:53 - 00:48:21
должны быть вас безусловно я пила верность будет полз но это как раз подтверждение тому что ты сказала что эквивалентный хэш-код еще не дает гарантии о том что объект является эквивалент ведь для одних и тех для одного и того же набора свойств с одними и теми же значениями x мой зад x white на 1 выполняемые среде мы сто процентов получим один и тот же хэш-код однако эти объекты являются разными типами данных один автомобиль другой у нас человек разумеется внутри они одинаковые по значению однако по своей
00:47:40 - 00:48:49
сущности они разные разумеется исход один таки да однако будут они неэквивалентны окей здесь круто давай пройдемся ножка дальше под мы с тобой затронули строки расскажу что такое строка в джаве как она что она себя представьте какая внутренняя структура строка набор примитивов чар в массиве и как скрыть горячая это особый особый класс в джалла который имеет свой собственный уникальный пул пул так называется котором хранятся строки ok уникальные строки ok а скажи стринги как тип данных он и мутабельные или мутабельные то есть
00:48:14 - 00:50:10
изменяемый или не изменяем нет неизменяемый а чем это обеспечена почему это так каким образом это вот достигнута в самой джами технический и как-то вот может объяснить точно не знаю но вы предположить что так как string состоит из это массив элементов чар собственно массив неизменяемый и поэтому это этим обеспечена но здесь мы можем взять создать новый массив разве нет и добавить туда новую строку ну допустим кусочек у нас был там хеллоу ворлд и я еще добавил я создал новый массив на три элемента больше и поставил
00:49:16 - 00:50:46
там три ! я знаю как это работает я не могу объяснить чем обеспечена яркость не понимаю суть вопроса я знаю что он строки не изменяемы и они при создании новой строки вызову они создают новую строку и даже если что-то прибавляется к этой все равно создается новый но почему вполне нормально почему по нормальное объяснение почему бы не скажет ты слышал что-то про метод интерн вот-вот стринги есть такой интересный метод называется интерны интерны на русском не помню но допустим вот как работает string пол
00:50:05 - 00:51:53
к примеру когда создается новая строка стрельбу создается новая запись о том какой об этой строки новая запись об этой строке и при последующих вызовах подобные строки даже если мы string создаем другой но это такая же строка будет присваивается ссылка на именно прежнее значение а вот если какой-то гарантированный способ это за получить новую строку нет строку и стрим пула ну предположим ты точно не знаешь вот и правильно описал что string пол это такое особое место для хранения строки если таймс
00:51:04 - 00:52:46
кеннету не туда положит а если такая строка уже там есть он просто вернет ссылку на уже существующий адрес памяти а вот если стопроцентная гарантия того что это вот именно так оно и произойдёт вот если возможность такая джаве что вот гарантированно что-то получить из string ул а не знаю на самом деле это и есть тот самый метод интерн или интерн на английском языке он в первую очередь он делает проверку в поле да то есть когда ты создаешь создается объект тебе нужны гарантированно получить в поле и если
00:51:57 - 00:53:03
там что то есть он безусловно оттуда заберет ok расскажи в чем разница между строкой stringbuilder amg зачем вообще на множество мелких но мы уже определились что это такой себе шаблон проектирования строитель но все-таки зачем то есть чем разница в чем разница применение в чем преимущество в чем недостатки между строкой stringbuilder а может ты можешь провести какой-то краткий а нога с медными могу предположить что стрим биндер я знаю что работа со спин бедрам сильно облегчает работу с памятью то есть если
00:52:29 - 00:53:57
работать со строками напрямую конкатенировать их там чудо переопределять бы каждый раз вызываться новые значения потому что и не гуд обильные вот это будет нагружать память stringbuilder он не нагружает память как это происходит я не знаю а почему отметил конкатенация вот предположим у нас есть какой-то цикл он выполняется сто раз развита плохо просто в цикле сделать конкатенацию елочку использовать потому что ну это плохо потому что будет забиваться стрельбу но каждая конкатенация а новое значение i будет стрим по основным
00:53:19 - 00:54:52
значением я не знаю точно погоду истребил этого истребил до этого не делает почему строка у нас так или иначе ему табельное как ни крути если - создали новую строку мы ее все таки создали однако однако давайте подскажу stringbuilder в первую очередь он нас лишают возможности создания вот этих самых весил промежуточных строк да конечно достижения вот по сто раз про компе тренировалась разумеется каждый раз когда мы делаем конкатенацию нам нужно будет попросить garbage collector очиститься дам есть такой jeezy
00:54:06 - 00:55:22
сборщик мусора ему необходимо будет эту информацию убирать плюс мы создаем ему нагрузку это повышает производительность и более того даже если задуматься о том что у нас есть оптимизация я имею оптимизация через байт код листа посмотреть в том как байт код собирается с точки зрения конкатенации мы увидим что на каждую конкатенацию будет создан новый объект stringbuilder а потому что когда мы используем конкатенацию затем это все конвертируется в реально выполняемой среде байт-кода будет создаваться new стрим bele bir мы
00:54:45 - 00:56:02
просто этого явно не видим под капотом это будет так и плюс к этому всему можно только представить что стоит и рации это 100 stringbuilder of не считая того что еще и память надо вычистить вот так вот вот такая разница ними ночью звучит очень многообещающе десна здесь нужно обрасти более технически обоснованием для этого тогда продаю немножко дальше расскажи про коллекции что ты знаешь про коллекция их иерархию из чего там все начинается им такой инженеров без деталей коллекции action фреймворк они хорошие в
00:55:24 - 00:56:59
коллекциях собранные но это чей общий класс для для коллекции однотипных элементов состоит из в общем состоит из таких листов из листов и ну а мне страшно за был так мы вспомним по коже скажи слышал ли ты что-то про интерфейс эта рыба расскажу что это такое зачем он нужен это основной интерфейс для всех коллекций он нужен для перебора элементов по коллекции а каким образом достигать но вызываю создается новый то есть коллекции они же наследуется от него и когда мы хотим пройтись по коллекции проигнорировать его то
00:56:11 - 00:58:29
вызывается [аплодисменты] [музыка] экземпляр эти рации который в цикле нужно которые нужно реализовать цикле чтобы он проходил по каждому элементу окей это экземпляр это рассказывается итератор интернет хорошо а какие еще преимущества придаёт нам это работ вот итератор да он он позволяет и требуется сеть на по коллекции создавать нам итератор но какие еще возможности вот он открывает я имею ввиду это не метод но это такая себе возможность быстро пройтись по коллекции предположим через какой-то цикл не понял ты слышал
00:57:31 - 00:59:19
что-нибудь про цикл for each или цикл просто а он обеспечивает for each я не помню вроде бы не знаю точно на самом деле обеспечить те кто на след те кто реализует интерфейс это было не могут пользоваться улучшенным циклом for это когда на шум for открывая знали и воробушки пишем тип данных переменная и затем наша коллекция допустим по массиву так можно и 3 rus так мы делаем вывод что массе показывается реализует где-то там под капотом и pearl то есть есть возможность интегрирования через оператор а есть возможность
00:58:24 - 00:59:53
использования цикла for улучшенного он называется часть все for each или просто and on which цикл for a хорошо неплохо давай поговорим немножко про листовые коллекции и коллекции не листовые которые называются ссср те которые ты забыл это те сами чем разница между листам листовыми коллекциями и между коллекциями типа сет листовые они реализует массив a set и они как связанные списки ну то есть они реализуются через ноты иначе говоря лишь через элементы которые связываются посылки друг с другом не
00:59:09 - 01:00:50
совсем так не совсем так ты говоришь про arraylist и линки близ но линьки для из как иерей лист вместе относятся к листовым коллег сам тот же вопрос немножечко иерархии выше то есть у нас есть лист интерфейс и есть интерфейс с чтобы просто освежить память set типичная реализация это хэш вот в чем разница между концептуальная разница техническая между сетами и между листами поедут не важен ну чем не знаю не знаю ну хорошо давайте тогда прыгнем в другой вопрос и поговорим про map и или словари или просто мы
01:00:04 - 01:01:43
является ли реализатором интерфейса collection а почему все так то так устоялось я так предполагаю что я не знаю точно но мне кажется что коллекция они состоят из одного элемента мы бы они состоят из двух элементов они не не входят в коллекцию а вот как все-таки вот от выражена почему вот ты говоришь kollection это один элемент ну там последовательность элементов но весьма по это тоже последовательности элементов почему же тогда нам все-таки не коллекция ты горишь оно состоит из двух значений а что это за два значения
01:01:04 - 01:02:49
то ключ и значение по ключу мы берем элементы по ключу ключ вычисляется опять же skoda но для более оперативного доступа в коллекциях реализуются по крайней мере на виду только один элемент там есть хинтон тоже под капотом вроде бы с крыш кодом но на виду только один элемент и а в небе именно на виду два элемента оки то есть ключ нужен для того чтобы получить значение правильно понимаем хорошо ну как здорово расскажи вот про вот мне просто как работает самая просто но не простая рисковой простая и самая
01:01:56 - 01:03:38
распространенная реализация мэр который называется cashmere что нам нужно для того чтобы эта коллекция здесь она называется коллекции на то что реализуется не реализуется вот collection что нужно чтобы оно работало правильно и каким образом осуществляется вставка значений и каким образом осуществляется значение получение значений давай начнем с вставки значений каким образом осуществляется вставка значение в хэш more мы добавляем значению по ключ-значение значит если ключ ключ мы добавляем по мы добавляем
01:02:47 - 01:04:27
новый момент пар ключ-значение мама считает ключ пока skoda значит если такой элемент есть оно подавляет она смотрит на элемент если такой ключ есть оно обновляет перемен если нет добавляет ok то есть по сути ключ является ключевым фактором в этом хорошо допустим действительно звучит резонно а как значение получают по ключу опять же только по ключу пишется дай мне значение вот такого вот ключа иным способом добыть за чиниться хорош можно можно опять же выбрать все все элементы и но это плохой то есть я по мы используем
01:03:36 - 01:05:42
метод get по ключу для получения всех значений но вот скажи пожалуйста мне как внутри мапо кошмар устроена почему вот все-таки получается похож ключу каким-то образом выбирать эти значения невероятно где-то хранятся и как вот эта внутренняя структура внутри выглядит насколько я помню там должно быть так существуют массив с числами это хэш-коды если считается ключ вычисляется хэш-код и элемент в носится в массиве листы чтобы избежать комиссии считается хэш курт и смотрится пока skoda есть ли там что-нибудь и есть ли там что-нибудь
01:04:43 - 01:07:02
есть сравнивается дополнительно эти ключи если они одинаковые значит обновляется значение этого ключей если они не одинаковые значит идем дальше по листу и вносится опять же сомневаемся если нет таких вносится новое значение этому вести с данным ключом и значениям а вот смотри так лист понимаю вот игры смотреть какие-то листы очень близко копаюсь вот есть там какой-то массив а зачем этот массив нужен первую очередь чтобы избежать проблем с одинаковыми хошь кодами и разными ключами а чем это достигается вот этими листами то есть ли
01:05:52 - 01:07:41
такие листы они нужны того чтобы когда будет одинаковый хэш-код и разные ключи чтобы значение сохранялись они затерялись неправильными ключами а вот вот эти листы они где хранятся они как-то представлены в какой-то другой структуре или вот где они хранятся вот как-то добраться до этих листов не знаю ну ты говоришь какой то есть массив на то есть какой-то массив может быть они где-то в массиве хранятся я просто так и не пойму зачем нам нужен массив если у нас есть лист цель массив это нужно для хранения хэш-кодов то есть это для
01:06:47 - 01:08:18
быстрого доступа по ключу то есть этот массив это расходы ключей и [музыка] если до скорости то есть для экономии времени считается ключ и сразу же попадает к примеру примеру хэскот ключа это перед на число 15 и вместо того чтобы перебираться по всему массиву мы сразу идем на 15 риме а что будет в пятнадцатом элементе хранится вот этот лист который хранит в себе пещер значение здорова-здорова откажи каким образом вот давай уточним ся каким образом можно разобрались что массив по сути это хранилище для вот этих листов и
01:07:31 - 01:09:15
хэшкод на основании ключ актеры генерится это индекс на вы можете конечно это и на для получения быстрого значения за константное время но ты сказал что в листах бывают какие-то коллизии а чем это выражено это выражено потому что хэш-код куют не такой это выражено тем что массив как ты так работает или просто сама вот это сам вот этот лист он так устроен что может допустить эту самую коллизию то есть мы вот уже столкнулись с коллизии да вот у нас она не предположим она есть что может произойти каким образом этот лист даст нам знать о
01:08:28 - 01:09:48
том что там к лизе ну как мы узнаем в этом технически ведь ведь коллизии это факт того что в этом листе предположим несколько одинаковых интересов допустим два разных значения с разными ключе не имеет одинаковый индекс надо вот и чтобы эти разные ключи по сути с разными значениями не затерялись один другим а как у них одинаковый индекс создается эти листы но просто как мы узнали не знаю технически не как на майдане книгами реакция вправе да мы до них не доберемся а скажи эти листы они односвязанны 2
01:09:08 - 01:10:38
связано я между но если все-таки под одним ключом хранится несколько значений то каким образом там эти значения будет храниться ведь типично что массив хранить только одно значение если мы предполагаем что там list to list каким-то образом должен быть устроен из себя чтобы хранить несколько значений знаешь ли ты как она выглядит в самой хэштег честно говоря не знаю не могу предположить что это связанный список потому что так проще ok ok а он был связанные или 1 связно не знаем что это 2 связано список который смотрит
01:09:57 - 01:11:43
его элемент видит впереди ведущее значение и позади стоящие односвязанны только два типа стык и д ну да ну можно и так называть эту фигню скорее на связанные зачем нам с другой стороны смотри ну вообще да вообще на самом деле а вот linkit лист помнишь мы с тобой в самом начале упомянули линьки для односвязанны или 2 связаны в слезный тонкостью классический он был связанный список у него реализация дтп здорово жюри вот мы и добрались с тобой тот не стены ok хорошо давай тут еще один вопрос такой интересный почему
01:10:54 - 01:12:27
строки так часто используют в виде ключей в хэш more ну и в целом в mapi ну потому что это удобно то есть мы же люди и люди привыкли апеллировать строками они цифрами ну а что будет если я применю какой-то другой объект там свой кастомный человек качестве ключа ведь может быть такой человек качество питер ну в принципе да может быть мне кажется интернете удобства не совсем так итак чтоб строке есть такого чего вероятно нету по дефолту или по умолчанию в кастомном объекте какое-то я имел такое свойство его
01:11:41 - 01:13:17
мы его сегодня кстати затрагивает его знаешь of the boxing нет-нет-нет-нет-нет это только про строки и mouth обильность да но смысле ездят только из-за того что они не изменяются и что не будет никакой снасть из ничего ну клик для сохранения постоянства ну да мучаются а что если ну вот предположим мы возьмем не строку а возьмем ну табельный объект кастомный и будем использовать его виде ключа почему этому я понял это прежде потому что но мы случайно или специально сможем изменить и и она не будет соответствовать этому
01:12:35 - 01:14:02
господу который был по счетам сначала этому индексу абсолютно верное то есть мы внесем сами коллегию поэтому это золотое правило этот общему строка очень часто сколько за ключом в первую очередь в том что это удобно но безусловно нам этот раз проходит самый простой и мутабельные view да да нам еще для этого нам ничего это не стоит мы его просто создали отдали во-первых ты прав мы вычитаем легко во вторых все уже готово для того чтобы было безопасно здорово хорошо вот тут мы и закончили с этой штуки
01:13:21 - 01:14:19
давай передвинем семечко дальше поговорим о многопоточности а после многопоточности мы перейдем к спринга и там уже и техническое здание не за горами расскажи как есть проблемы при многопоточности почему это так вот как происходит от проблем откуда вроде все же быть круто а какие то есть проблемы многопоточности откуда это берется того что к примеру когда один поток будет работать с каким-то ресурсам то другу два потока будут работать с этим ресурсом один будет вмешиваться от него а второй будет
01:13:50 - 01:15:05
читать неправильное значение хорошо хорошо каким образом можно этого избежать там есть множество методов я знаю если речь идет про массивы а равен копии что ли короче существует метод в конкурент вроде бы который создает на копирование ну на изменения в потоке новый массив чтобы работать с новым а потом внести изменение по завершении pro пакет кантора до новый больной новый пакет конференции где есть копии бионары до оки это один из есть замки и есть синхронизации им про синхронизацию ведь то что ты назвал
01:14:27 - 01:16:27
лист конкурентный какую боль конкурентную среду вполне окей но это только в контексте когда мы работаем с коллекцией коллекция она потока безопасно но ты отметил что это замки есть еще какие-то другие способы синхронизации какие ты знаешь базовые способа синхронизации базовые ли способы или legacy их часто называют то есть стандартные классические это синхронизированный методы еще больше не может быть ты помнишь что-то из класса а джек уайт но технически от не то же самое но но они просто вместе работают и
01:15:35 - 01:17:26
они так тесно связаны что тяжело ехать и лет друг от друга окей ну ну хорошо допустим а вот что бы ты предпринял какой способ вы бы предпринял если тебе вдруг нужно у тебя есть два потока и есть поток номер три тебе нужно чтобы поток номер 3 в какой-то точке дождался остальных двух потоков аконитом работают они вероятно будут работать долго там минут устраивают полторы минуты и себе надо чтобы третий поток дождался поток номер один поток номер 2 и только потом начал выполнении своей работы ну вариантов несколько можно сделать вроде
01:16:29 - 01:18:00
бы семафор а можно и просто за женей joy не теркину join хорошо пойдет а а ты горишь семафор семафор каким образом он нам поможет здесь точно ли семафор не точно не помнит если не точно семафор то тогда что-нибудь другое вероятно не помню нужно смотреть коллекцию там есть нет который который запускается только при определенных условиях и можно выстроить условие чтобы стартовали они споем про завершение летел страхователь может быть это что-то слышал про так про такие классы как но вот игорь семафор да круто но может быть
01:17:20 - 01:19:17
услышал кому из каунт да он сайтов барьер или еще что-нибудь да да как я вот что-то из них но я не могу сказать я уже хорошо что ты знаешь что они есть значки знаешь к смотреть хорошо скажи в продолжении синхронизации знаешь ли ты что такое предлог один ресурс когда один из когда один ресурс и два потока [музыка] короче они останавливаются потому что один поток ждет завершение другого потока а другой поток ждет завершении первого хорошо а если возможность избежать писать вот есть это полностью ошибка программиста что он выпустил
01:18:20 - 01:20:20
такое обычно это происходит при частых рейтах прям я считал что если вы используете часто левый ты или слепые прям гарантированно получите где-нибудь в двух окей окей ну хорошо ну замечание вполне здраво пишите лучше хороший ход и не будет вам до блоков хорошо скажи может ли ты что-нибудь рассказать про такой интересный феномен который называется фред с кедр или планировщик потоков именно он называется фриц кедр скажу сразу это не класс для нас мы но слышал ли ты что-то о нем именно про это нет я слышал только про реализацию
01:19:20 - 01:21:14
планировщика потоков в самой java такой как сервис и там же скажу вот который позволяет запускать потоки запланирован хорошо то это тот это тоже полезное знание а вот возвращаюсь все-таки к вот этому следу веру проект федора поговорим о вопросе приоритизации каким образом можно заставить поток выполнится приоритет и если такая возможность виртуальные есть в реальности нет ну что в самой джаве есть возможности выставить приоритет но все говорят что это бессмысленно потому что чала это же мультиплатформенная и мы не знаем
01:20:17 - 01:22:06
заранее есть данного процессора возможность выставления приоритета и как это будет реализовано в самом деле и таким образом элемент может нивелироваться физической физической моделью да и так что по факту говорят что нет а вот баки вот по факту говорят что нет а вот все-таки как это сделать но если все-таки же можно даже если это не работает предположим но ведь как-то можно внутрь идей в самом потоке можно выставить приоритеты есть нет выставления прийти то я не помню точно называется сет приварить абсолютно
01:21:19 - 01:23:06
верное на самом деле это четко приводится и связанности как тот самый фрески доллара он будет это делать потому что фред федор мы к нему доступ непосредственно не имеем как разработчики однако он есть он работает с операционной системой нашей он работает с цепью и безусловно на основании того что железка нам дает он может он может этим регистрировать то есть от того что мы ставим высокий приоритет это бокс еще не значит что действительно этот поток будет выставляться приоритетным в работу в том числе есть
01:22:13 - 01:23:21
еще понятие как time слайсинг где идет выделение процессор на во время ведь процессор с неба тоже не падает до необходимо каким-то образом выполнять то либо иное а ту либо иную операцию в той или иной промежуток ramik монтирование и вот как раз та им слайсинг этим и занимается и все ок провод этот фриц кедр который работает совместно с уже а нашей железки хорошо давай давай самый простой вопрос каким образом запустить поток создать новый объект потока и стартовать его вы взяли но если базово взять то просто можно взять новый поток
01:22:47 - 01:24:23
и стартовать его если взять хоть какой-то смысл ему предать то нужно бы в качестве аргумента передать ему какой-нибудь чип ех интерфейса рано был а что этот объект интерфейса рано балкон делать принимая принимает да вроде бы что-то принимает и ничего не отдает то есть это как бы функциональный the fist который просто что-то делает а точно что-то принимает уверен нет не уверен интерфейс рано был просто состоит из обычного методы рано ничего не принимает ничего не отдачи он принимают я его спутал скоро бу в
01:23:33 - 01:25:23
коломбо ну давай тогда поговорим еще и прокола бу что такое колобок и фьючер фьючах значит колы было это тоже интерфейс такой же функциональным то принимает на себя что-то или может возвращать может не возвращать объект фьючер фьючер это класс который реализуется в потоках и возвращает элемент когда поток будет по счетам то есть его можно запросить и его можно допустим на объект фьючер можно создать какой-то поток который вернет в дальнейшем можно вызвать его заранее не знает посчитано инь или нет и во время вызова он
01:24:30 - 01:26:53
дождется когда он посчитал и покажет ok об чем концептуальные различия между кола блан и runnable вот вроде как бы зачем нам рана была если scalable и наоборот чем jamaica между был принимает аргумент дорана был нет но они оба не принимают аргументы у обоих методы ничего не принимаю может быть какой-то принципиально рано рано был точно ничего не возвращает а колобок возвращает или не возвращает но если правильно от это это то самое преимущество рано был он просто молчаливый от слова совсем ничего не дам ничего не приму
01:25:43 - 01:27:34
угол был он также ничего не принимает однако он может отдать результат этим результатом после выполнения колбу вполне может стать тот самый фьючер о котором ты говоришь то есть к лобову это такая выполняемая среда а это его результаты как ты круто отметил что мы не знаем точно когда поток завершится однако мы в какой-то точке можем потребовать от нее данный в этой точке начинаем их ожидать я думаю что ты классно соединю справиться безусловно требуется полировка этого всего новый ну так же страстно
01:26:40 - 01:27:45
хорошо передвигаемся к спринга расскажу что такое январь шел of control и в чем разница между injection of control вообще общая идея передачи управления фрейм но если частности про spring передача управление в про егорку injection частная реализация и даже на в control позволяет внедрять зависимости посредством того что фрэнк сам работает абсолютно верно круто расскажу что такое spring контекст зачем он нужен чем чистка уйдет контекст да он и иногда называется спринт в контейнер и конечно но правильнее стрим контекст технически
01:27:12 - 01:29:18
он называется spring контейнер помяну часто мы его называем просто контекст но это описание описания классов описание объекта с которыми мы будем работать вроде насколько понял из того что видел это описание объектов которые мы будем использовать в нашем проекте об чём его вот базовая идея вот он контейнер да вот он чаще называется контейнер официально но мы его называем тоже контекстно вот почему делают этого контейнера что что-то в нем такого чем там контейнер визирует так сидя раз таки вот эти классы то есть чтобы
01:28:26 - 01:30:07
spring знал куда смотреть вот мы собираем там все элементы описываемых и дает клинку знать что от чувак смотри сюда вот оно все здесь окей а мы как разработчики можем достучаться до этого контейнера но имеется да какой мне benefit но спринг jet фреймворк он там самостоятельно работают как можно как я могу получить от этого какую-то пользу от этого контейнера и вообще получаем ли мы ее при работе стрельба schooling но по сути фабрика он автоматизирует все это и снимаясь нас задачу инициировать все эти объекты
01:29:22 - 01:31:00
сам смотрит контейнер принимает значение которые требуется от него в данный момент и реализует увы там где и был запрос а вот знаешь как можно обратиться к контейнеру напрямую если какая-то возможность допустим создать контейнер самостоятельно сконфигурировать его ну может быть ты знаешь какие-то классы которые это делают допустим какой то есть вот такой классный интерфейс называется апликэйшен контекст может быть что-то услышал об этом на этом базовый класс но бы базовый базовый класс который позволяет стринги работает с контейнер
01:30:10 - 01:32:24
мне и не знаю немало шеей ну хорошо давай тогда здесь опустим но в целом идея spring контейнера заключается в том что ты правильно отметил мы ему говорим как создавать объекты мы предоставляем ему эту информацию или в принципе шаблоны этого объекта через класса и в конечном итоге он их собирают мы не говорим мы только говорим как собрать и что собрать он это собирает и почему контейнер потому что он их хранит внутри себя затем во время выполнения нашей программе мы безусловно можем из этого контейнера
01:31:19 - 01:32:28
эти уже готовые собранные объекты получать взаимодействуя с ними работать в этом-то и заключается benefit что мы уже получаем готовый работоспособный продукт я бы это так обозначил и просто его используем опуская все подробности как это создается мы только описательный характер стрёмно мы пишем ему эту информацию что нужно сделать где нужно сделать и все мы делаем это один раз далее во время конструирования нашего приложения целиком мы не заморачиваемся мы делаем предположение о том что все уже готово и сконструирована
01:31:54 - 01:33:06
и от этого начинаем создавать наше приложение и the spring с конструирует все самостоятельно и подставит на нужные места и в этом и заключается идея контейнера он будет сохранить все эти так называемые компоненты окей а может быть ты слышал что-то про бен и вот есть такая штука бенно русскому часто называется компонент что ты знаешь переменные контейнеры куда можно так назвать по сути как раз такие элементы которые spring будет захватывать и реализовывать он и будет создавать просьбе нету тут этот результат того что мы только что с
01:32:30 - 01:33:47
тобой обсуждали контекст будет хранить эти самые бен и иметь самые компоненты а вот исходя из этого подскажи что все-таки как же нам все-таки использовать эти бин и весь смысл м объекта не просто так мы создаем чтобы где-то использовать если какая-то возможность получить эти объекты из нашего контейнера или как вы дышите и spring контейнера пробега контейнер должен быть сконфигурирован и собственно spring ищет при указании я только знаю час на реализацию при указании компонент скан он еще конфигуратор и там где
01:33:17 - 01:34:44
сконфигурированы сказ конфигурируем контейнер и собственно туда и места ю бин и ok а что делает этот компонент скан вот и стал он чего то там станет а как на основании чего он сканирует как проходит классом объявил по классам проекта и смотрит на аннотации о которой я честно я не знаю как на лице со я знаю что он проходит по классам проекта и выбирает то что нужно а вот ты говоришь он смотрит на аннотации она какий аннотаций он смотрит на бины из тени или методы элементы должны были должны быть аннотированный там через
01:34:04 - 01:35:55
конфигурируется через xml листы или через аннотации через xml листы конфигурирует но нужно прямо указывает что вот вот этот xml лист в нем все значения а через аннотации components co ищет аннотацию конфигуратор вроде точно не помню в котором как раз таки и лежал пины внутри то есть например я слышал что-то про аннотации сервис аннотации компонента четко хочет сервис я слышал про сервис на я так и не понял почему он я понял только существуют разные еще называется либо седой который тоже учитывается при
01:35:02 - 01:36:58
конфигурации сервис ну видимо тоже учитывается но одно то есть видел как реализуется именно анатация сервис как это происходит я не знаю но в частности компонент скан в том числе сканирует эти самые аннотации да это его за дальше мы мы указываем где сканируйте он пытается найти предположим ту же самую компоненту сервис или компонента повели аннотацию ser es que los santos и сервис или класс с аннотацией компонент организацию и разумеется когда он их находит он их инициализирует то есть он их подхватывают и это по сути
01:36:01 - 01:37:31
является не той информацией для бина а вот скажи каким образом мне куда-то подключить бен ну вот предположим есть вот необходимость у меня какой-то комплексный класс он состоит из трех полей эти поля какие-то другие бины можно ли при помощи стрингах из трех бинов создать 4 то есть 4 это еще один класс еще один бин и мы к нему подключаем еще три бина внутрь в качестве свойств можно ли это сделать вроде бы через оптовая [музыка] пишем поле нужного класса я датированного 2 а помимо поля можно если еще какие-то
01:36:45 - 01:38:21
способы и инъекции так называемые но на поле то методы но на поле на методы аргументы на конструктор конструктор ну хорошо давай тогда здесь закончим с нашей технической частью и перейдём к долгожданному техническом уже не так мы добрались до технического задания в нашем техническом задании нам необходимо реализовать простую задачу отсортировать словарь или ту же саму маму по значениям не по ключам но по значениям и вернуть новое сортира не словарь конечном итоге финальный вывод должен быть вот такого дока то
01:37:31 - 01:38:50
есть мы видим что значение у нас отсортированные по натуральной величине 1 2 3 4 5 при этом всем стоит заметить такую родом и могу передаем на вход она заранее не отсортированных во вторых не то гарантии этой сортировки здесь нам не дает нам мы используем пока что map of метод для быстрого создания как его как она будет выводиться мы не знаем мы точно знаем что не знаем однако наша задача состоит в том чтобы удостовериться и действительно гарантированно возвращать мапу или словарик опять же которая будет осуществлять сортировку по
01:38:20 - 01:39:43
возрастанию для значений имя для этого мы выбрали в качестве значений цифр и чтобы было явно и очевидно ну что алексей ты готов да так что погнали удивляюсь 15 минут поехали [музыка] [музыка] [музыка] [музыка] [музыка] [музыка] [музыка] [музыка] [аплодисменты] [музыка] [аплодисменты] [музыка] [музыка] [аплодисменты] [музыка] так время вышло давайте друзья запустим нашу сортировку и послом еще раз как она работает выполнится и проверен у нас не получилось да мы попробовали несколько вариантов обсудили
01:39:01 - 01:45:45
их не пришли к выводу что можно было использовать компаратор однако дело до компараторы к сожалению так и не дошло ведь мы идем с вами по таймингу но в целом контекст и идея была схвачена ведь при помощи компаратора мы можем за использовать три мэр мы уже с вами знаем что триммер в качестве конструктора принимает аргумент компаратор мы можем реализовать компаратор безусловно и попытаться сравнить наши значения однако стоит учесть как эта штука работает ну давайте же попробуем ее реализовать в принципе
01:44:07 - 01:45:22
давайте вообщем стрима что это такое как это работает и зачем прямо уже по умолчанию поддерживает сортировку давайте посмотрим если будет вариант когда мы на основании наши входящие map и в качестве параметра просто передадим ей ее и на нём и и используем для от прямо и вернем уже 3 more здесь однако поменяем значение местами для исправления готов давайте попробуем выполнить этот код обратить внимание входящую мапу мы за использовали в качестве аргумента для при создании 3 и приманку днем запускаемся конечно же
01:44:45 - 01:46:13
это как заработать мы видим что не как она не заработал однако немножко ход изменился ситуация заключается в том что 3 map по умолчанию сортирует значение по возрастанию но главное что он сортирует ключи а наше значение задание пардон сортировать по значению то есть должно быть 12345 каким чудным образом это мой взор вот как алексей предложил за использовалась компаратор давай алексей вместе с тобой его и продолжим писать у тебя есть мой рэп компаратор вполне хорошая идея он же лиричный и мы говорим о том что у нас компаратор
01:45:29 - 01:46:44
для мэр работает случайных ключ у нас стрельбовых значит здесь должен быть стриг меняем здесь нас тренинг меняем тоже весьма string и тут тоже меняем нас три что же дальше нас с этим всем ждет на нам значение нужно сравнивать по ключа для этого конечно параметра мы за с этим могу другую нашу входящие им пейджер такого же формата такой же сигнатуры как и на входе далее мы ее будем использовать в конструкторе мы ее проинициализируем и безусловно здесь с ней будем работать в методе compair ведь мы уже знаем что
01:46:06 - 01:47:41
компаратор для 3 map работает с ключами и наши объекты u1 u2 и то есть и самые ключи а имеет доступ к изначальной и не show more ольгино мид и сами мы можем извлекать наши значения у ключа ведь в этом да идея собственно мама или словаря поэтому здесь мы берем где обжиг а 1 далее наш u2 и все и такая простая операция то есть при помощи вложенной map и в качестве поля для компаратора мы можем хранить изначальный формат изначальную структуру далее во время реальной сортировки против 3 map мы будем с вами получать доступ к значению
01:46:53 - 01:48:27
по ключа и уже существует сортировку на основании тех самых значений то есть мы получаем через мап get благодаря нашим печам получаем реальное значение которое является int и джером этот уже происходит то самое друзьям и сортировка который мы вероятно ждать это за пустимся май компаратор map и здесь передадим more готов на туз готов однако он у нас ругается он говорит что из них забыто потому что он статического контекста поэтому здесь необходимо добавить еще свойства и найти и мы видим что у нас ничего не происходит почему же
01:47:41 - 01:49:14
как же так есть какие-то мысли почему же так у нас ничего не происходит как же такое вообще может быть вроде все честно вроде все окей если мы вернем здесь more за пустимся еще раз и брали работает ли тут выводится да а когда мы возвращаем наш темп не выводится но если кто не заметил мы просто не за и туда не подложили никак ничего там нет там никого нет да да да да поэтому предварительно нам необходимо еще добавить значение m футбол и передаем куда нашим могу теперь еще раз за пустимся мы придумали компаратор мы
01:48:28 - 01:49:59
начинили нашу новую трима информация и вуаля 12345 вот как можно было решить эту задачу то есть нам необходимо было реализовать в простой интерфейс компаратор но при этом при ввергнуть небольшой хитрости хитрость заключалась в том что качестве значения для компаратора мы положили туда внутреннюю маку и при помощи во время сортировки при помощи ключей при помощи сортировки через включен получали доступ к нашим значением и уже на основании значений мы получали с вами интересующую нас сортировку однако есть еще другие
01:49:13 - 01:50:24
варианты каким образом это можно сделать ведь это так называемый старый варианта однако с java и 8 приехали к стримы каким образом можно с этим поработать предположим возьмем нашу маму non сортов ma non сорта cmos и возьмем интриг set далее мы можем взять при помощи stream ag добраться до метода сорта которые в свою очередь также друзья мои обладает возможностью сортировки сначала мы извлекаем из map и не отсортированы в самом начале извлекаем in трясет далее конвертируется в экстрим и тут уже обходим весь этот intent как нас
01:49:49 - 01:51:15
интересует при помощи статического entry мы можем здесь использовать уже реализованный компаратор есть есть компаратор по значению и дальше просто вывести при помощи цикла for each вывести в наше значение принтеры вот так вот что мы могли бы сделать если мы закомментируем вызов нашего метода сорт buy видео мы приблизительно должны получить точно такой же результат но нет нет не приблизительно мы ожидаем точно такой результат и мы видим 1 2 3 мы лишь алексеевич имеем две возможности первая возможность это отсортировать компаратор
01:50:33 - 01:52:11
создав вручную прибегнуть к разнообразной магии под названием инженерии и второй момент мы можем за использовать уже готовый стриме где все реализовано ведь если мы поковыряемся классе комплект comparing buy белье мы по сути видим что здесь также также компаратор который берет вылью и делает его сравнение собственно из интриг просто вытаскивает его вот как можно было решить эту задачу ну чтож вот мы и подошли к концу тем не менее алексей расскажи как и ощущение как вы ощущение после задачи до задачу
01:51:25 - 01:52:39
перине решил полностью она не была работоспособны я определенно уловил ход твоих мыслей и мысли было бы больше времени мысли бы твоей точно довели до 9 до победы это сто процентов какие-то ощущения после техническое собеседования теоретических вопросов практического задания что-то может рассказать то мне нужно больше знать про мне нужно больше знать это главная мне все понравилось и мне нужно больше знать о кей но это это несомненно классное заявление не переживай я видел что ты переживал волновался это
01:52:02 - 01:53:22
нормально это все таки со беседу не да ты не получал возможность гости сегодня пойти сразу на работу конечно судьбы от этого собеседования решалась не тем не менее ты испытал этот самый стресс теперь ты знаешь да каково находиться под прессингом во время совещаний когда у тебя особенно лимитированное время на подумать на принятие решений это тоже тоже со мной да и по моему мнению кроме справиться ты испытал себя и у тебя получилось следующий раз сто процентов ты будешь гораздо лучше может быть у тебя есть что
01:52:45 - 01:53:46
пожелать нашим зрителям я прошу тебя почему это так работает то есть чаще спрашивают себя почему это так работает круто это это классно как говорит мой коллега магии не бывают там что и особенно когда что-то не работала а потом вдруг заработала это произошло точно уж не потому что дождь на улице пошёл безусловно это льстит на хорошие наставление и себе зрителям я сам буду пользоваться наверняка потому что нужно всегда быть уверенным в том что происходит даже если ты не знаешь как то происходит она все равно как то
01:53:15 - 01:54:33
происходит и было бы круто особенно если это часть твоей работы ну что ж алексей я ещё раз тебя поздравляю ты отлично держался безусловно и сел какие-то выводы я тебе еще предоставлен отдельно фидбэк на этот счет но ты молодец это классное начало и я уже уверен ты знаешь где нужно делать исправления и где нужно делать улучшение уже сегодня а на сегодня это все всем большое спасибо спасибо алексей что потратил свое время остатка выходных и увидимся до новых встреч пока пока [музыка]
01:54:00 - 01:55:17