Подготовка к собеседованию на 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 junior developer и у нас в гостях артём при этом расскажем на газели как ты к нам попал твой уровень как но ты знаком давай и так далее попал к вам назначено учился модик brains и и собственно мой препод и был кого-то робот видите на экране максим его первоначально учился я начиная с сентября прошлого года его до этого момента учил данный момент наказание оценивают сутки на джума поэтому решил податься сюда чтобы
00:00:00 - 00:01:15
проверить насколько все таки хороший а почему именно java молодости . самый такой интересный сервис описаюсь посадочном модуле stupa который везде используется конечно убили приложением не менее интересным сервисом не факты нацепили и остальные языки глянула шар учить п поэтому сравнил уже бушар при такой-то кудрей показалось вперед круто то есть тебе нравится java как аналогии какие задачи она решает и рынок которая открывает для возможного все только с какими-то другими технологиями сталкивался и ментов
00:00:37 - 00:01:44
программирование до того как насчет завариваться дала в универе еще было делалось в там всех мучили плюсами наверное pascal собственно и было дело просто раз но то есть инструмента пошло же пару лет думаю ручью дальше но то есть программе или высоком уровне не вечер правильно ну надеюсь что нет если коммерческого опыта нет то наверное считается новичок он коммерческого подо всё лишь закрепления того что у нас есть у него самое важное чтобы чувствуешь словом процесс пошел правильно правильно это первый боевой
00:01:11 - 00:02:20
опыт я бы сказал бы но если и сок университете с другими технологиями языкам программе треть тоже круто потому что в этот момент у тебя открывается более широкая картина и джавы уже взаимодействует гораздо проще ну что же хорошо это уже многообещающая и тогда мы не будем тратить время сразу перейдем вопрос вопрос будет очень простые и не очень простые поэтому не парся отвечай так как тебе удобно а если знаю окей не знаешь тоже окей потому что я помогу на это ответить в какой-то степени это даже возможно
00:01:45 - 00:02:55
открыть самого себя мы начнём с самого простого сегодня у нас конечно и мере популярная парадигмы программирования опыт что-то они знали расскажи какие стал ты меня есть ну на чем она стоит хорошо up and собственно без названия понятно что она сориентирована объектах и все работает на с объектами классами но для экземпляр класса просто когда мы создаем получаемый клик работает ой столпов ну три или четыре их по разным оценкам абстракция полиморфизм инкапсуляция и последования руки звучит круто смысл в том что в наших
00:02:20 - 00:03:47
классах мы хотим чтобы пользователи работали как то культурным и не нарушали то что мы заверни заложили поэтому мы капсулированных свойства чтобы не забыть менять напрямую или предоставим кита методы для того чтобы может быть убралась в дальнейшем мы эту собственно принцип на этом заточен окей и говорит что вот есть какая-то культура по большому счету инкапсуляция к ней как-то принуждает а вот зачем это нужно но мы живем в мире когда когда выбирается ухе busan да и вероятно кто-то бы не хотел поэтому
00:03:04 - 00:04:07
следует все-таки зачем это нужно и чего мы достигнем при помощи не капсюля ции вот вот этой культурой заранее заботимся о том чтобы потом никому не пришлось переписывать огромные кучи поводу если вдруг кто-то последующих версиях поменяется а если уже есть в контакте через который мы работаем у которых сразу показывают как надо работать с нашим классом да это не изменится никаким образом не изменится ну хотя бы люди будут к этому готовы и только знали змееныш произойдут с другим кто их другим словами ты хочешь сказать что мы
00:03:35 - 00:04:31
закрываем свою внутреннюю реализацию и показываем только что-то наружу да ему так хорошо это звучит здорово окей чуть дальше слышал ли ты что-нибудь про принципы дизайна объектно-ориентированным такие как соли до слышал и штук возможно по названием конечно ихнему зовут слышал так что может назвать вот что запомнилось совсем-совсем большинство будет уже всех таком случае но основное the symbolic прицепились насколько помню что мы создаем объект уровне классов какой-то конкретной целью ты скоро цель сделали класс им
00:04:04 - 00:05:23
пользуемся ими для этого цели у класса или 3 до нежелательно развить не кажется на самом деле именно по специализации эти классы там в остальном у интерфейсы помню там один точно есть принцип который говорит что интерфейс должен быть таким-то точно и решать определенные задачи это хорошо еще если мы так используем а мы строим 1/3 с кучами вдоль а почему это так важно куда чтоб разграничивать подписан из классов и 80 интерфейса брать наследоваться учат вас 1 интерфейса таки реализовывать эту придется рано или
00:04:42 - 00:06:05
поздно если это не дефолт а так у нас действует я спал здесь интерфейса и цию структурирована хорошим поведением или хорошим дизайном когда у нас есть какой-то интерфейс предположим в нем несколько методов неважно какие мы реализуем этот интерфейс но для нас какой-то метод лишний и мы этот метод просто оставляем реализованным но по сути пустым в теле метода это считается хорошим признаком дизайнер или нет ну лично я конечно так делал не сомневаюсь что хороший принцип а посему сайте чтобы не оставлять этих пустых окон в
00:05:24 - 00:06:38
разработке поэтому как-то такую душком я бы сказал ну зачем нужен мелко если он не используется на самом деле это говорит о том что у нас какая-то белка в дизайне то есть если мы в нашем собой метод который очевидно нам не нужен стоит задуматься о том нужны ли нам этот интерфейс а если другого интерфейс у нас не стоит задуматься правильно ли сконфигурирован этот интерфейс да и вероятно стоит применить и землю которой ты пытался описать лучше один маленький интерфейс и в итоге много маленьких интерфейсов
00:06:04 - 00:07:03
чем один огромный и когда он тянет за собой простыней вероятно то что нам вовсе не нужно поэтому он так круто слушай зёрен не блок шариками кольца тогда двигаемся множко дальше расскажи будем углубляться уже в java расскажи пожалуйста что ты знаешь про типы данных какие есть категории или виды типа данных джаве и может это перечислить них праздник да в принципе что делится на ссылочные сколько спа и примитивные и на примете его собственные цели если slim необходимо работать как ссылочных данных
00:06:34 - 00:07:40
удобством коллекциях примитивные это всякие дент и ланге и чары чтобы через службу лима все окей нос черный сказал вчера тоже к ним относится и то это не страшно скажи все таки разница между примеси вам и ссылочный учет они существуют на данный пункт tiffany's лишь по разным из примитивными чертовом работаем быстрее ускоренный разошлют где именно в памяти хранятся удалось сохранить принцип если бы вспомнить по моему по моему примитивы рыжов стеки с вещами в теперь мы над ним получаем слуг чтобы мы работа
00:07:08 - 00:08:46
с ними потому что они с объектами разу не ссылочку если мы уже затронули стек и хит чем разница между ними казалось бы мы работаем с памятью живьем есть какая-то омичка выделено зачем тогда и стеки happy корневищем до объектов даже попробуй вспомнить чтобы мы поможем и сколько знают типах они сели объектов такое утром они лежат просто и хранятся мы пока не нужны если их garbage collector не собрал еще олег в там лежат все наши потоки и и без которой они называют эти методы ссылаются на объекты вызывают их и
00:07:57 - 00:09:14
получались какие-то данные так взаимодействуют так собстна так и проходит по ставке можем мы сказать что с прохожих назвали можем ли мы скачках так это долгосрочное хранилище да думаю что нет после выполнения должна закрываться ужин то что выполнение выполнился метод и почесть 8 минут пошел круто круто а что если пойдем ножка дальше и листаем у нас с собой есть стиль мы понимаем как он выглядит это такой абстрактной структура данных если мы скажем что у нас предположим вызывается несколько метров
00:08:36 - 00:09:59
вызывается один метод за ним второй внутри этого метода и внутри 2 еще один третий метод какой из этих методов закроется позже так живет пока он работает как раз самый верх не закроется позже просто чтобы для работает вызываются жили в нем поэтому он должен скрыться последним иначе правда структура структуры и огурцы есть самый первый стык будет жить ровно столько сколько живут state сколько живет последней степени утреннего хорошо сняли круто это круто расскажи вот еще как можно сравнивать между собой типы данных
00:09:23 - 00:10:43
знаешь ли типа данных ну всех объектов есть встроенные методы цикл сокаш код который мы вместе смотрим кастомные объекта переопределяем ну через них идет сравнение мы там еще можно через ссылки сравнивают ну это создаст меня не особо корректно а как примитивные типы данных сравнить между собой примитивные если они по типу могут закатиться друг другу нормально то можем их сравнить просто через равно равно равно это сынка или значение для объектов насколько знаю с по ссылке или примитивов ну чтож на
00:10:01 - 00:11:10
улицу я думаю будет работать и по значению ну то есть по сути ссылка есть наверное у каждого я так следую он же салате какой туда я думаю что да а слышал ли ты что-нибудь про встроенный статические методы у примитивных типов данных я говорю про обертки есть классы обертки как отметил он добыл и я буду говорить про лонга или им слышал ли ты что у них есть какие-то методы для сравнения двух тип 2 2 перемен предположим переменная а винтовая переменная b энтого и вот как мне их сравнить если используется берут который через николс
00:10:37 - 00:12:06
суете а есть понимание venger вы полностью а если не использовать метод эклз как бы ты ты сдал бигглз попросту города thumb up через массив данных мы не сыграли мы пока здесь мы просто имеем примитивный тип данных и хотим сравнить один со вторым мудрых переменная а энто а переменная b янтарем и кастинг нечего им это примитив и все ну тогда через 2 равно но если в коде это все их реализовывать он работает а если еще какие-то способы предположим если мы хотим сравнить лон он гораздо длиннее мы знаем да есть ли какие-то
00:11:22 - 00:12:49
способы кроме радагаста не знаю минут вы мне или правильные и это как варианта но есть щеткой отличный статический метод как compair предположим king the jerk мпр илонка мпр ты можешь легко сравнить и в частности они круто выглядят и используются для всяких там компараторов и так далее поэтому но поверь он тоже отлично подходит под под капотом применяются при ты меня не пришлось ходу если мы откроем intel compair мы увидим все то же самое что ты сказал сравнить равно ничего больше обычный тернарный оператор и все
00:12:07 - 00:13:33
хорошо хорошо но речь о том что там есть небольшое исключение там сравнение большими данными сравним непосредственно на эквивалентность мы сравниваем больше либо меньше такой вариант тоже подходит окей давай тогда поговорим немножко об объекте если у нас такой волшебный класс обжиг что-то не знаешь какие методы в нем есть в нем методов помощи изначально класса 2 все не наследуется все наш объект один билет с ледниками океане и стужи тут ustream для текстовых представления в строке 8 вывезти потом держи класса
00:12:51 - 00:14:10
кашпо для сравнения которая уже упоминал утром есть по моему классу можем восставать из него год класс понять какому классу относится наш объект кроме там ведь на тихой ну да многопоточности в этот финт файл и ну если еще книга 3 наверное забыл экономическую не скажу и не не страшно и так достаточно что-то и все практически все перечислил а скажи вот есть метод и курс ты уже отметил что благодаря металлу и класс мы определяем эквивалент допрос по сути тождественность когда это нужно применять когда его
00:13:31 - 00:14:51
нужно переопределять и как его нужно переопределять знаешь ли ты что-нибудь проекта ну если мы используем 5 до своей класса не собственник основе строим объекты его то мы с ним мы используем и клипом же campari компараторе прочим нам дышит откро корректно сравнить аль изначально у джалла не знаю как сделать там по нему возвращается дефолт на изучение и анализ уровне не сравнится ни как а в чем и ну и мы берем какие-то поля которые ключевые долг нужно допустим хотим сравнивать машину по цвету и без у допустим взяли их
00:14:11 - 00:15:14
переопределили чтобы они строили подход и на его основе он также работал эклз ну чтобы те же поля продвигался работали через умирают там на самом деле в то же идея самой предлагает из его сама это уже можем их сравнивать корейском ведь по умолчанию о нём же ксури метод и коулсон уже он же определен зачем все-таки нам это делать но в чем прям такая ключевая необходимость переопределение и круз не вдаваясь в детали как это нужно делать вот просто вот представим у нас уже есть класс обжиг там уже есть меры приполз он реально уже
00:14:42 - 00:15:50
рабочий назовем так технической точки зрения он рабочий вопрос как он работает нас не интересует и вот здесь возникает вытекающей вопрос почему все-таки для наших кастомных объектов которые мы создаём сами нам и pools нужно переопределять порой нужно порой не нужно но а если нужно то почему почему это так ваш допустим мы не хотим сторон по всем полям наш объект и используем только какие-то конкретные для сравнения ну собственно вот их и буквы класса помещаем гра начальный не использовать что насчет ампул все
00:15:16 - 00:16:20
используют предположим что мы делаем с тобой следующую ситуацию мы создали кастомный объект назвали его юзер в нем находится только одно поле int-овое айди ну больше там ничего нет и мы создаем два экземпляра у нас есть конструктор конструктор мы передаем туда наш интеджер до который будет сыпется в это поле иди далее мы создаем два экземпляра класса абсолютно отдельно но выглядеть это боюсь или же образом new user скобочках 1 и далее new юзер тоже в скобочках один после этого мы выполняем операцию
00:15:48 - 00:17:14
юзер 1 . и курс юзер 2 это операция вернет true или false false а почему без при определении ну почему почему почему так не честно даже не знаю что force вернет а почему касаемо действительно вернет falls но может быть проблема лежит в том как метод ипс изначально определен по умолчанию назовём это так автор вспомнить по умолчанию конкурсы сукало вращается дают правильно а соперниц яндере очки зрение два наших объекта они эквивалентны сейчас друг другу или нет новых мы смотрим никого ренту веса посылки то не к варианту
00:16:30 - 00:18:02
заметим что ж говорю о разных объект они занимают горные августа фипи важно как и валентный объект англии ссылка ровно и еще что то но не значение значение вышли только на самом деле коз играет роль 2 при этом но значение немаловажно естественно у нас при переопределении и класс у нас есть одинаковая ссылка это уже хорошо потому что мы говорим о том что эти два объекта их двалин но если ссылка разные все-таки как у нас с тобой но при этом значение одинаковые единицы одинаково с единицы подожди ствол
00:17:22 - 00:18:30
следовательно объекты не по ссылке но по своей структуре они одинаково но нам возвращается все равно полз floss на возвращается потому что как ты правильно ответил и курс по умолчанию проверять только ссылку но этого недостаточно другим словами мы должны определить не только ссылочная соответствия если она имеется но и попробовать определить соответствие по его внутренней структуре по полям как вот мы и собрали картину вместе мы очень даже здорово получается а сказали вот продолжим цикл сам немножко слышал ли ты что-то про
00:17:57 - 00:19:05
принципы переопределение метода и класс могу напомнить мне находятся в описании к самому месту ну можно поговорит сильная транзитивность consistent не слышал когда-нибудь 7 и при дневном это уже первый сигнал потому что на этих четырех принципов даже об столба 5 рефлексивность симметрия транзитивность консистентной и но он знал так называемый это пять столпов на которых должно опираться переопределение метода веков поэтому уже муж записывать уже можешь считать это можно найти в java так как самому методу и кусты через
00:18:31 - 00:20:06
intel ходе или через сайт на уровне там все довольно таки просто я думаю ты быстро разберешься во гидрой на посмотрим человек такой хитрый вопрос в чем разница между поймали файл и война лайс это такие три ключевых слова и слова в поймали есть слово есть слово поймалась ничего ли у тебя не вызывает никаких ассоциаций потому что это плотно связанная с тем чего мы начинали сметана подскажу тебе это файла когда мы определили уже какое-то или свойства элементов и больше не даем у переопределяют уж точно
00:19:20 - 00:20:43
сложности говорили всем двигался того жизнью класс мы запрещаем для переопределения нас лето фаина лайс так чтоб потом уже предки нему черни поток его не мучили так fine life вот какой-то метод что случается с классом после с объектом постройку сборщики мусора собирают от финале лечебниц иерусалим с тобой потрогаем но на самом деле правильно что мы говорили с тобой про методы это и забыл упомянуть метод фаина likes потому что война лисятами который да по сути отвечает за то как горбач коллектор будет все
00:20:02 - 00:21:30
сворачивать но умеет следую когда объект уже не нужны абсолютно верно ну мыж не так все плохо не так все плохо ну что давай тогда двигается немножечко дальше следующие вопросы будут про коллекции расскажи про иерархию коллекции как это collection фреймворка если правильно говоря устроим в джаве какие сам интерфейс и какие основные интерфейсы и потом передвинемся книг на реализацию все дело идет древовидно разумеется 1 по моему интерфейс это и зорро был которые показывали что просто можем проходить
00:20:46 - 00:21:55
этим по лекциям кроют ниже пиратов хоккей потом collections of an action вертеп не важен следует с отдельно по моему лист clio через и set my mama по губам один лежит на север архи остальные жители реализации отдельно вот ты говоришь он лежит отдельно от aero gte а твоем а почему по-моему там он же польза кепке ну they were you all остальных коллекциях у нас какое-то одно значение режим то есть по сути разница в структуре map она выглядит не как бы иначе очень добрыми просто другому бугрим ну а ok ok
00:21:21 - 00:22:42
тогда давай расскажи мне какие есть основные реализации листовых коллекции но ты говоришь что вот есть есть эта компания мы говорим что нас интерфейс collection далее у нас там сетку из и лишь вот расскажи какие основные реализации листовых коллекций блюз тонну по моему основные две которые лист и лист окно и собственно они уже подразделяются что что мы хотим использовать а слышал ты что-нибудь про вектор по моему устаревшая реализация которая потока безопасно все что слышал в принципе да не использовала а вектор на
00:22:01 - 00:23:14
что похож на линке для из elina ellis судя по названию мне кажется что больше на ринг чисто из вектора просто какая-то . единицы точки но мы все в чем-то похожи так абстрактно если мы говорим если мы вспомним наш к математикам вектор это отрезок да это мы говорим а вот linked листы он не похож на отрезок он похож на хаотичное расположение я сказал бы если когда-нибудь занимался астрономией ты бы видел вот эти перенаправление меня это больше похоже на какой то не знаю правда но не со конечно это не играх
00:22:36 - 00:23:45
технической точки зрения но отправил и вектор да то есть то есть больше похож все-таки на лист или найрисс скорее фонарик пусть валит на риск это ситный а то я весь потому что мы говорим о том что под капотом реалистом находится таки массив если мы говорим про массив массив всегда как у нас памяти устроен подскажешь мне у вас памяти которая последует мне занимая что-то правильно . 5 какой-то отрезок памяти и он сигналы ощущение пальчиком да абсолютно верное и он в отличии от ленки для 100 непрерывную то есть вот если посмотреть
00:23:13 - 00:24:35
долинке 3 ст одна нога здесь другая находится здесь у массива всегда все сложено одно за другим постоянных как вагоны поезда у нас нет такого что поезд едет 10 вагон едет где-нибудь подругой колье отдельно от ними связываться какими-то проводами нет такого конечно же мне по этому вектору это действительно эта старая реализация рей листа и как как правильно отметил она синхронизировано а скажем каких местах и мы синхронизируем но вот самые такие проблемные места где она была синхронизирована и почему это так проблемно домика раз
00:23:55 - 00:25:04
там просто под потолком и сомнению изменения будут от изумления как-то все-таки с собой согласовывалась не возникало проблем да это правильно этих местах вот именно на часа не зная всех нас то конкретно но кто обижать можно от скажу это запись удаления то есть по сути оперативы на пламя да по сути операции обновления добавлен крат opera mobile крутому как легче докри ну-ка рейд манерным геям внизу из баз данных принципов а вот почему такая проблема почему все-таки отказались от вектор в пользу край листа но как бы
00:24:29 - 00:25:38
синхронизацию ничего плохого нет домика скорее всего замедляют работу поэтому и пользуется рынок стал абсолютно потребуют из-за этого это дорогостоящая операция окей хорошо давай разберемся еще с одной интересной темы как бы ты сортировал бы листовую коллекцию чувствую коллекцию а этот к вокзалу фактически то есть вот так как мы говорили про compair long compair вот у тебя стоит задача у тебя есть релиз у него там 10 элементов тебе нужно отсортировать их по возрастанию так называемый на ней choral ордере или
00:25:03 - 00:26:23
оценим если я правильно произнес адское слова сортировать могут помощи палмер абсурд просто есть collection сорт и в которой можно передать тоже компаратор который мы уже упоминали до этого и потом пара трону их просто срок сравнит ира сортируют окей обязательно передавать туда компаратор ну если мы хотим в своем порядке сделать точно будет мешать мысли узла привели условиях будем устраивать и все-таки если ответить на вопрос по умолчанию какое поведение вот и говоришь collection сорт по умолчанию какое
00:25:45 - 00:26:55
поведение поведение по возрастанию или по убыванию если мы сортируем потом был полон не должны помочь им нет по умолчанию мы можем помолчать мы можем просто передать в талэ пшеницы сорта наша коллекция она будет от снова по возрастанию если как ты правильно писал нам нужно с тобой будет если мы хотим развернуть предположим эту сортировку или сделать что-то кастомно тогда нам нужен компаратор хорошо хорошо а скажи что тут услышал про лист . сорт не услышал что такое минут точно есть пользовался им не
00:26:23 - 00:27:46
рисковал хорошо если сказать он в этот а скажи тогда еще такой хитрый вопрос по ограничениям я так сказал бы когда мы хотим использовать collection сорт или предположим тот же лист сорт что нам нужно выполнить если какие-то обязательные условия для того чтобы эта операция заработала предположим мы просто узам collections тот сорт и дальше просто перейдем массив а не массив коллекцию и мы компаратор не используем в коллекции лежит у нас наших white объект вернее или какой-то уже лежал изначально предположим наш если наш
00:27:04 - 00:28:34
опять же переопределить эти дни класса хэш-код которым ранее говорили что эти объекты могли сравниться с вами по себе под капотом корректно они выстроятся цепочку а еще что ну предположим данных у нас переопределены отложим эклз и вот предположим у нас объект переопределим и куска шкот уже отлично там вопросов нет и все таки я отдаю массив наших объектов тех же самых юзер которые мы обсуждали ранее и выполнится ли collection . сорт с этой с этим arraylist он внутри с юзерами нашими или все-таки с молиться я бы стал
00:27:49 - 00:29:13
что выполнится вы мне кажется что смысл в том что свалится ты про только почему честно не знаю потому что я выглядеть все довольно таки просто если мы откроем документацию к этим методом общественности лист сорт или collections сорт мы видим одну простую вещь что в нашем конкретном случае нам необходимо для нашего объекта также переопределить интерфейс comparable точнее реализовать интерфейс comparable компаратор это в принципе классная штука но мы говорим о том что интерфейс campari было нужно реализовать на
00:28:32 - 00:29:41
конкретном объекте то есть по сути мы определяем способ сравнения двух объектов одного и того же типа текущий объект и объект который подается на сравнении и как раз all actions сорт или сорт неважно они под капотом будут этой использовать разумеется если мы не используем компаратор и при этом передаем наши туда объекты в нашем реалисты он славится потому что будет классно exception ну ничего страшного теперь это это знаю и шииты точно это проверишь другой важны в момент из этого всего что collection
00:29:07 - 00:30:19
сорта по сути под капотом используют лист сорт есть раньше лист сорт не было теперь им есть и можно напрямую писать не collections сорт а вызывать листочках сорт ну это опять же это как бы рекомендации потому что если мы откроем collections до 40 сам метод мы увидим что под капотом используется лист . сорт использовать это такие вещи но ты довольно хорошо справился порассуждал да где-то ошибся не страшно это как искать недостатки того что придется еще посмотреть как методы работы на заметку тебя на зарубку окей да двигаться дальше
00:29:42 - 00:31:05
у нас есть такая штука как исключение вот расскажи тоже про иерархию с исключениями то они себя представляют какие там есть важные вещи в иерархии и почему в принципе оно так устроена там смысл того что исключение какие-то события происходящие когда событие происходит мы выкидываем исключение чтоб система ног или пользователь уже знал о том что вот что случилось такое со своего рода оповещения они могут быть помочь check the insect не в иерархию краски там граждане что если человек идут exception потом
00:30:24 - 00:31:37
р и вместе с ним чек исключения и из чек выходит еще он читер и чем готовить исключение которые нужно изначально обработать чтобы все было в порядке в этом и проект компилироваться check the runtime ошибки которые могут случиться независимо от нас поэтому стране не обрабатывается норки устроены окей а вот искал есть какие-то чек и анчик в чем между ними разница можно ли их ловить фронтальными или а не какая-то только для компиляции или другая только для runtime а чем вот разница и на между чек исключениями и
00:31:00 - 00:32:18
они не учат обычно xf их устанавливать значит просто проект собирается будет ругаться на то чтобы пройти чем цене бернулли мы против нужно если оценщик дав runtime и который мы собственно можно заранее обработать если мы знаем что они выглядят но если the runtime to push не знаем как том и данные могут прийти остальное и не можем заранее близко чтобы что сделает лучше разумеется не дай мне не так важно а как понять вот технический разница чек или анчик вот передо мной исключение одно 1 к 100 на исключение
00:31:39 - 00:32:47
или кто-то его создал мой коллега как понять сыночек-то и линча с зависимым и вернем исследованию получаем его последнем уровне наследуем будет on time of section а ты просто так ставишь если так сообщим в другу чек если от runtime томчик окей круто круто скажи чем разница между flows и фрау вот эти два ключевых слова они пишутся практически одинаково за исключением of rose с на конце у фрау ни об чем между ними разница зачем мне нужны нус роуз это указывается всему периметру до после того как мы входные
00:32:15 - 00:33:30
данные показывает какими приходится и собственно показывает что в этом методе могут может вылететь какая-то ошибка такое включение и мою прибрать своим выше что выше она уже была обработана где-то где от мест будет вызываться окружи стоящим базы а sraw этот если мы хотим вручную в ходе протянуть входит исключение стоит много снятом право лидировали получили какую-то несовпадение по данным солим сравню и свою она выглядит а вот скажи ты горишь frost мы говорим о том что мы таким образом выражаем что в методе
00:32:53 - 00:33:55
может вылететь такое исключение и его необходимо обязательно отловить и тут у меня вопрос надо ли его обязательно отлавливать если в сигнатуре написан of roses а тут как раз уже к тому что это exception обычно или the runtime без и runtime то этот вид абсолютно жесткость если в общем то придется все таки обернуть и начнем собирать compile просто ругнется то есть ты говоришь про если чек это именно навык вот а если анчик не на новое рода хорошо с моей дубны главных собой добрались к интересные вещи фамилии что такое
00:33:24 - 00:34:35
фармига откуда это он слова вот трактора течь фай 0 of 0 понял вас есть будет ракет и файлы тра это тот код которыми мы скоро можем получить исключением его оборачиваем те чьи то что с ним случится собственным если мы поймали в течение a fine или за то что так что неправильно он выполнится 100 процентам сто процентов выполнится после того когда исключением и поймаем тоже это не поймаем выполнится до тоже ну именно qr код выполнится сто процентов допустим панелей можно поэтому что закрыть эти закрытию стриму в проще
00:33:58 - 00:35:19
атаки и сто процентов вот если мы в полном не сто процентов там есть какие-то случаев их пытаюсь вспомнить вот честно не могу мы можем просто упасть на кой то мы заранее можем упасть на всем этом она наполнится это условие чтобы что то что попасть не будут не помню а предположим ситуацию вот работать наша geely да наше приложение было мы попадаем в тройке все как бы окей и внезапно у нас сваливается что-то с ошибкой и живем просто падает от работает ли в этой ситуации family в такой ситуации почему нет работают
00:34:39 - 00:35:51
просто живем еще нет к какому улица можно работать до верху хуже разбор наверное да да действительно это так и есть а можно вести примеры технически когда такая ситуация может произойти мысли поймаем может stack overflow отвалится все еще что-нибудь memory ну вас не значит его ему рук валится ну почему вполне нормальной ситуации когда заканчивается памяти просто у java или нет почему вполне может все кряква леса свет выключили они будут машина больше не работает свет выключен но это тоже радикального говорим про же компьютер
00:35:16 - 00:36:41
выключают то есть по сути любой случай который при переводе неработоспособности наши двери да просто программные песню nina чайник равно не важно как нам относиться лестно она не работает разумеется и поймали не работает ну окей скажи а ты слышал что-то про отравилась resources тоже блока то он понял чуть чуть выше к ним подумал скажем так в нем можно просто открыть изначально какие то какие то объекты скажем бы юг от который реализует интерфейс английскому клаусом и они просто труд он закроется после
00:35:59 - 00:37:11
того как у нас это вот работает мир в котором они были открыты общем преимущественно мне нужно быть руками его закрывать а в чем прям и 1 чем преимущества между протечь вот просит троим из ресурсов работает же так самое у него есть тоже троллей блок у него есть блок как я еще у него также может быть familie в чем что вот ключевое преимущество между пройти чем обычным и thrive из ресурсов вот так чтобы резюмировать все вот все что ты сказал нём его школу можно без ключа использовать спокойно если мы даже
00:36:36 - 00:37:45
ничего не ловим после хотим закрыть потоки ok но и возможно выполнить сто процентов отец живем пойдут опять женщина не верим что вы на самом деле и ты ходишь вокруг да около и про то что нужно до его преимущество заключается в том что он закрывает потоки с которым он работает ранее мы в проекте ч должны были описывать это все дело в файле и писать допустим input stream класс что-нибудь прям сканер класс теперь это делается автоматически то есть мы избавляем себя от использования фамилий тем не менее
00:37:11 - 00:38:42
файл или допустим но нам не нужно это делать вручную поскольку это все уже реализован благодаря трое из ресурсов по сути тоже самое но с точки зрения кодового нам очень помогают и экономит на многих вещах окей здорово ну то есть здесь кто проблем нет ты определённо знаешь о чем идет речь давай поговорим немножко о многопоточности буквально тронем несколько раз я думаю она на нас не обидится и перевел порадуешь , организация в чем ее идеи идея чтоб когда нашего несколько потоков каким-то допустим одним объектом мир собой
00:37:56 - 00:39:05
переменные что по ней не напортачили данный некорректно изменяют вывели в объекте и перемен предположим предположим на ситуацию нас есть два потока и два объекта каждый поток работает со своим объектом нужно ли поэтому синхронизации или нет да не только очень рада ну они же просто отработают подходящие значению ты все будет в порядке почему так хочешь там кашин вы сами что-то прервутся не декорируем и данные не обновляются запиши равале обработали потом евро что-то вернули как они все завернут и
00:38:31 - 00:39:44
прислали объект один это неизвестно камурочо года припяти политую мы должны и разумеется будут некорректные получен но все-таки если вот вот наша ситуация два потока и у каждого свой объект почему вот все-таки это синхронизация она не нужна почему мы здесь оттока безопасно как говорится мышь когда синхронизируем блокирует побегов монитор монитор блокируется этим потоком и и другой его может на территории пока он не отдаст дань из нас два объекта то вы не должны блокировать потому что это просто излишнюю мешок с ними работаем и
00:39:08 - 00:40:13
больше никто к этому объекту не обращаются абсолютно верно да то есть мы находимся в потока безопасной среде которая обеспечена самой самим понимание то что у каждого объекта у каждого потока свой объект и никто не внедряется в этом все но не мешает здорово расскажет и знать что-то про принцип up and be for какая ключевая идея просто на пальцах не без доказательной базы математически просто на пальцах чем идея на пальцах ну условно из 5 же два потока и есть потоки может какие-то изменения если какие
00:39:41 - 00:40:42
изменения были внесены другим потоком то этот подход поток который пошел дальше нужно учитывать внесены изменения чтоб корректную все обработать а в нашей ситуации до который мы обсуждали heap and backward нужен или не нужен да нет но уже поздно объекты искал взаимодействие между потоками нет выход for пудрами чтобы объект вернее по . друг с другом уже взаимодействуют на уровне этого объекта окей то есть идея получается в том что если у нас есть два потока и между ними один ресурс с которым они
00:40:11 - 00:41:10
работают вот только тогда нужна синхронизация а если они а если они только читают предположим у нас есть два потока один общий ресурс и они только его читают нужно ли в этом случае синхронизация если он не меняется то мне кажется что принципе можно обойтись и sony просто и вычитает с другой стороны и задерживать своего логина чтения микарта чтоб сюда и лишнюю на самом деле не надо по 1 капс в обращении даже если она запиши руется там ничего не меняется поскольку они просто считают его они записи не вносят синхронизация нужно
00:40:41 - 00:41:54
когда объект изменяет свое состояние поскольку состоянии не меняются и никакие другие потоки его не имеют в этом варианте мы по сути опять же находимся в потока безопасных среде и здесь вывод простой если есть хоть одна операция записи то тогда нужно синхронизироваться между двумя потоками и одним общим ресурсам в противном случае не имеет никакого смысла ok а ты так боялся многопоточность а сам не дальше пойти сложным уже начинает отдала сейчас мы узнаем сейчас пойдем дальше расскажет ее слышал что-то про пакет конкурент
00:41:17 - 00:42:26
что в нем такого есть интересно почему его вв лицу там все шутили тоби работа с magma точностью труды все эти разные варианты варианты синхронизации но раньше этого пакета не было появился он уже он так относительно недавно если не говорит что двадцать или тридцать лет назад ну раньше его не было как-то справлялись и без него что же он все-таки такого интересного может быть ты слышал может где-то читала может быть на вернул его не брани карта просто люблю обувь стала самом деле чтобы если какие-то где мы же отдельные
00:41:51 - 00:43:04
механизмы потом уже было потоков которые можно изначально выпуск ругался потоков идет или какие-то те же семафоры которые после пока количество потоков не пройдет не позволит сюда еще ну просто для удобства работы с нога по точности и микро заводом смысл а вот ты говорил есть какие-то локи рей блоки райт локи они пришли самого начала java были или они были в этом пакете конкера да они напишем были в конкурент окей хорошо расчет тоже очень здорово тогда двигаемся еще немножечко дальше будем постепенно
00:42:28 - 00:43:38
справляться и переходить по ближе к нашему техническому заданию давай поговорим немножечко с тобой про дженерики расскажи какая есть идея generic ах зачем они вообще нужны что это что она решает да и на самом деле можно и без них обходиться но они решают что мы можем как изначально определить какие у нас типы данных могут попасть в этом мыле да кому так и человека мы стоим rezept чтобы вас какие-то совсем случайно не приходили а вот скажи есть вот может назвать какие-то такие яркие примеры где джин
00:43:02 - 00:44:22
обобщение на русском языке применяются в коллекциях ну-ка разрыв листья мышь изначально лист описываем мы показываем что-то приходит я почти верю что он просто культовой пор стоит 1 элизы реализации в тот . имея первоначальная реализация которая была тот же нарика пока потом можно что такое быть а потом уже на всех страницах у наших типов которые вас могут присягну который когда мир дачные типа спринте ok и тогда вот ответьте что же все-таки за основная идея вот у нас если стала коллекция да она джинны речная
00:43:42 - 00:45:03
у неё там несколько дженерик под капотом неважно где он у нее есть все таки как раз на идея вот хотя бы для листа можешь описать мы показываем как я типа могут взаимодействуют конкретно какие типы а если не показываем мысли от вас ничего не рубился лишний раз generic именно исключить добавляют этот вариант равнялся если мы падаем стриж ней потом компилятор сразу скажу что не соберется при таком нужен алек ограничил хорошо то есть ты хочешь сказать что когда мы используем дженерики мы по сути ограничиваем какой-то конкретный тип
00:44:23 - 00:45:39
данных мы говорим с каким типом данных мы работаем это правильно а скажет дженерики могут работать с примитивными типами данных мне кажется что нет скорее всего с оборками на примитивными напрямую в реале что они будут использовать примитивы но на самом деле ты прах generic я работаю только с ссылочными типами данных и скажи здесь последний вопрос о generico где их можно применять вот предположим ты реализуешь джинны речной класс любого формата вот анализ свой или просто кладут где в классе можно
00:45:02 - 00:46:24
применять generique методов допустим мы показываем что место хочешь прийти и пусть их можно вполне пробрасывать они тогда будет указан вещей сигнатуре этого же класса обязательно ли указывать их в методе если я указал сигнатуре класс пришли имею ввиду это можно безусловно я имею ввиду определять на уровне метода или определять на уровне класс то есть все-таки большая flecktarn и 1 да не смотри на виду на мысль когда ты используешь его в на уровне класса ты потом хочешь это джим личный тип распространить по всему классу и
00:45:43 - 00:47:01
безусловно ты можешь его использовать в методах и даже где-то в сигнатуре методы его оставлять но определение происходит на уровне класса представим себе ситуацию когда на уровне классом мы ничего не определяем определяем исключительно на уровне метода допустимо ли такая ситуация то есть только на уровне бы не сомневаюсь муж наш мир сам по себе не знают о существовании твой generico а изначально как бы скрыть предоставляют доступ к этому же нареку изначально всему что лежит в нем на самом деле нет
00:46:29 - 00:47:37
не совсем так мы можем отдельно делаться при делении на уровне класса и сделать отдельное определение на уровне метода они не связаны друг друга чаще всего это выглядит когда на уровне метода когда мы ставим знак больше знак меньше указываем наш динамичный тип в начале сигнатуры язык закрываем его знаком большие далее потом этот же наличный тип распространяем по всему миру таким образом мы ограничиваем область применения дженериков только в этом методе класс позволяет это распространять вообще по всему классу
00:47:03 - 00:48:06
силикон конечно же внедряя его в методы в том числе но они не взаимосвязаны между друг другом они вполне могут работать независимо и существует предположим если мы откроем тот же самый класс collections сорт не класс а метод или целиком класс kollection ставились что никакой сигнатуре у него жена реализации нету однако в методе сорт он принимает джин и речные а лекции то есть и мы определили исключительно на методе это его область видимости так называемая поэтому это возможно независимо друг от друга и они
00:47:35 - 00:48:47
не взаимосвязаны ну что просто больше применять тогда бы знал а то как-то речных сбера ну это уже еще одна зарубка где ты можешь проявить улучшить хорошо правой говорим о таких интересных вещах как java 8 + что ты знаешь про функциональный интерфейс интерфейс который не содержит только какой-то один определенный метод которых служит курицы любишь ну и собственно не чаще всего применяются тех же стримов там среди них из там допустим функции массовый расстрел мирной функция другому платы применяется да и остальные
00:48:11 - 00:49:39
а может ли функциональный интерфейс применять быть из двух методов да не то что не функциональным живут там и смысл именно все чтобы он ладен вот применяется в красными для этой цели а давай подумаем какой должен быть если там бы должен быть один метод какой он должен быть оба и функциональным интерфейсом сигнатуре нужно быть ну предположим есть какие-то правила которые мы применяем при создании этого метода допустим что-то должно быть или чего то не должно быть но тон 1 до допустим ты уже отмена ну вот как-то
00:48:56 - 00:50:15
необычно какой такой вот как сказать специфическая вещь у него есть которая говорит что да я являюсь одним методом функционального интерфейса могу навести на мысль какие медузы вот какие методы содержат интерфейса абстрактные все разумеется да да мы публичную до возникнуть и на основное условие интерфейс содержит один абстрактный метод вот у меня возникает вопрос может ли функциональный интерфейс содержать два метода и при этом остаться функциональным интерфейсом микро самому важному сестра в условиях
00:49:35 - 00:50:54
что один месяц и и вот один метод своем абстрактной публичные все-таки на самом деле этой прав не может а и ни про что вместе с функциональным этими пришли дефолтные методы методы по умолчанию и мы их можем определять и главное реализовывается в наших интерфейса и функциональный интерфейс тому не исключение поскольку этот метод дефолтный он не попадает под признак абстрактного мы же говорим функциональный интерфейс должен содержать только один абстрактный метод тем не менее нам никто не запрещает
00:50:22 - 00:51:28
рядом с функциональным рядом в функциональном интерфейсе с его абстрактным методом положить еще один дефолтный и от этого он функциональным быть не перестанет потому что к абстрактному медовым никакого отношения вот какая история ну ничего ничего страшного хорошо слышал ли ты какие-то новые фичи в javi 15 14 16 16 давно вышла слышал какие-то фичи оттуда там по моему даришь что-то наподобие той же нотации слабака которая дата где можно изначально сразу сигнатуре класс определиться какие полезные будут мыслить по них все цифры
00:50:55 - 00:52:21
которые конструкторы сгенерируется то есть указывается на называется называется recording дорога от 10 и классно окей мне мне нравится то есть явно явно в тренде и продолжай в том же духе хорошо а мы двигаемся еще вот дальше и наша последняя рубрика на сегодня это спринга мы знаем что это фреймворк мы знаем что это очень огромный фреймворк фреймворков это целое семейство фреймворков во фреймворке и так далее и у меня к тебе вопрос работал ли ты со стрельбой но разумеется 2 так вот это да на это
00:51:38 - 00:53:01
надеялся потому что я люблю работу тоже со стрельбой и давай поговорим о некоторых базовых вещах которые встречаются все джун и не только джины и конечно же хотелось бы понять как вот ты к этому относишься вот есть спринт у него есть такой основной модуль с которого все началось spring core внутри него есть бины вот что такое bim зачем эта штука не по сути максимально просто и абстрактно это какой то просто объект который лежит в контексте но контекста после хранилище который хранит все эти бины и и spring связывая их
00:52:20 - 00:53:41
работают вместе с ними окей а что было раньше в контекст или бен контекст а почему муж не можем положить бен в контексте инициировав контекст хочу быть ладен был они будут хорошо хитрая пучкова нарушилась контекстов может быть много или только один ним и женщин safecast отдельных hibernate тот же контексте security контекст поэтому я думаю может быть много но изначально но стринги плетёшь не поднимать только один контекст себя но хорошо даже минимум один контекст есть а вот как знаешь ли способы как нам вручную
00:53:00 - 00:54:14
создать новый контекст но мы не кровь из носу надо новый контекст а страны задание но чуть чуть чуть можно в менее мне кажется просто можно отдельно прописывать создание вручную хорошо нам не принципиально как мы это был иисус и где мы это будем делать задачи очень абстрактный вопрос как бы нам как создателю вот что нам нужно сделать для того чтобы его создать может быть создать какой-то экземпляр может быть ты знаешь какие-то классы которые с этим связаны я-то их знаю вот именно так и называются у
00:53:38 - 00:55:01
честно не скажу просто потому что там названием такой трикотажное но хорошо подскажу к плюсам в кремле и xml контекст максимально настройка конфига вот собственно на мы вручную вот этот экземпляр класса один из них активно там имена очень длинная и так сами не все помню создать а скажи вот я горел что вот этот есть контексте его наверняка как-то нужно конфигурировать как его лучше конфигурировать в своей точки зрения и как можно ну такая же о том что какие у нас есть варианты как у вручную создается можно через стяжек семейки
00:54:19 - 00:55:38
когда буду бегать в xml можно через конфиг учились жало посмотри будет конфигом и получать на поводу конфигурацию и из не искали в среду конфигурировать ребенок не прописан а ну самый стандартный вариант через аннотации которые везли прописываю цельсию это такой самый распространенный вижу да аннотации все действительно преобладают самой базовой не позволяй распространенной степени применяемости в отличие от xml xml конфигурации уже уходит нибудь и ее можно использовать себе словно но все прибегают именно к
00:54:58 - 00:56:07
java.com фигу в комбинации с аннотациями и по сути она configuration и java конфликт хорошо ну вот мы говорим о кино да у нас есть контекст на определись как это можно сделать как можно создать бен и ты сказал что есть xml конфигурация мы трогать не будем она перины хороши как мы вот как создать бен какими способами мы тут опять же остается вариант создания не через аннотацию берем какой-то класс пишем классно писали там сама подкрался ставить сверху аннотацию такой соответствующую смотря какую цель реализуют или
00:55:34 - 00:56:51
компонент или сервис или репозиторий или или клира контролю хорошо перечислим это аннотация а вот как было делали в java конфигурацию в конфиге создаем отдельным классно опять же поставим должен и страны configuration и потом мы прописываем пишем в нем какой-то обед которые вращаются на бен и бен будут получать взносов с названием тот кто этого между машинку и над одним ставим дату бен дайсон как допустим 1 темплейт можно заезжать услышишь хорошо мне нравится давай посмотрим еще пару вопросов какие есть у бинов скопы
00:56:12 - 00:57:38
допрос core какие скопы и какой в этом чем преимущество или недостаток до лепим что перелет из удобных и как создавать узко опыт жизненный цикл вина собственно как он создается и как бы лучше работать там по умолчанию все сниму тонны то есть один раз а сдались и потом все время с ними работают в сырой наверно просто отстранилась и будет прототайп когда рассада к ним обращается он будет 100 лет создавать новый экземпляр этого бина и с ним уже работать потом есть высоте апликэйшен скупые совершенства в
00:56:54 - 00:57:57
сочинском 3 губы распространенности и который создавался каждый раз когда мы обращаемся к тому бену сессии все секреты российских по моему пути на запросы еще распространять распаляется и называется он сможет хорошо а скажи вот все-таки но ты затронул вот много scope of какие из этих школ пав присутствуют или могут присутствует в любом приложении спринга вам потому что некоторые из них специфические некоторые из них могут быть везде вот какие из них 2 подскажу относятся к любому приложение могут он вышки кастинга 7.7 бутон потому
00:57:25 - 00:58:50
как без него что реализует окей силу этого но без request of и сессии точно можно выпить поэтому в реале а мы про то и повезли applications зачем плащом против создается и вот не помню чувств там есть apple кто журнал websocket их всего 4 во плоти догоню . request station websocket и атлетически и вот ты сказал что синглтон точно и вот осталось 5 прототайп websocket request station и апликэйшен вот какой из них ты бы выбрал мне кажется бесплатной похоже могло бы все bodies поэтому applications вот зачем прийтись мужем делать честно
00:58:12 - 00:59:39
ни разу не использовал ни на самом деле прототайп твой выбор должен был бы быть ситуация все четыре остальные то есть рак в ссср websocket и applications это так называемый выбр они ориентированы на веб-приложения собственно там они живут там они умирают prototype и синглтон относится к любому то есть их задача самая простая ты сказал что синглтон по умолчанию прототайп ты сказал что он создается каждый раз когда его запрашивать и тут у меня вопрос откуда его запрашивают контекстно актером он лежит здорова-здорова и давай
00:58:56 - 01:00:22
мы ответим на еще один интересный вопрос если ты уже затронул то нужно копы is bad приложения давай поговорим немножко о стрингер би си что нам сделать чтобы предположим поднять springer би си чего все начинается что находится приблизительно под капотом вопрос очень широкий я не буду задавать пока никакие конкретный вопрос вот предположим тебе нужно поднять веб-приложения тебе скале использую springen висит что ты будешь делать мы для начала зависимости подтяну подходящие к моему по моему просто выбор
00:59:39 - 01:00:53
зависимость тыкать марш-марш не гадать какие зависимости предположим ты назвал их проектом обычных ручных вот сам и хорошо контролем сделать разумеется кадры будут принимать запросы как должен обычный контроллер сделать класс поставить на такое и аннотация ну есть через контроллер но если на сами считаю все таки но это все равно месси под капотом это уже постройку над aggressive изразцовые делать контроллеру а в чем вот разница между riston контроллером и обычным контроллер но обычный работает с модель
01:00:16 - 01:01:25
и все-таки простого и просто зашел на поле доброту если думай структура льна или я про него структурирована обращения ведь джейсон и толик тоже модель она представлена просто просто в виде ключ-значение разве нет ним потом он так просто мышь magic team джейсона отдельно себе каждый раз контроля когда вы хотите данный записать в массив с насколько помню модель модель модов и сделать ручку и добавление отдельно в нее а вот чем разница между вот прям включила и вот ты вот правильно вот мысль что есть кое-то джейсон и вот
01:00:54 - 01:02:14
в инвизе нам его не нужно вот что мы можем сделать вывесить чего в принципе не можем или не должны делать обрести вот предложим нас есть вот проект контроллер и есть обычный контроллеров вот ты отметил что с контроллером для джейсона предположим только для джейсон вот а вот в обычном контроллере что мы можем еще сделать что не стоит делать для роста wago когда возвращаем какое-то предположим значит вот может страница что и вальке вашу мудрость мы говорим о на действительно резко он направлен только
01:01:33 - 01:02:43
на джейсон структуру он принимает bison и отдает чаще всего джейсон конечно же это не так может возвращаться другая структура но мы говорим подруга у нас уже есть конкретные структуры которые мы возвращаем в то же время им би си он может возвращать целые страницы предложим тоже самый gillespie да никто нам не запрещает подготовить страницу на стороне сервера и и заполнить данными и вернуть статическую html к нашему клиенту как раньше делал из приложения да абсолютно верно а вот наши с технической точки зрения можно ли
01:02:08 - 01:03:15
из обычного контроллера сделать треск контроллер до простую аннотацию добавить еще в нем уже по моему у реки sbd прописывается и тогда нас работает он с джейсоном бутылки то есть если вы не ok то есть по большому счету рейс это просто объединение того что уже есть в одну пачку чтобы либо или использовать bluetooth они отлично хорошо хорошо ну чтож смотри перепрошел очень либо большой вектор как мы сегодня обсуждали вопросов и наверное пришло время конечно же немножечко пока здесь ну что ж друзья теперь настало время для
01:02:40 - 01:04:02
технического задания будем вы решать вместе задачу на рынке простая но конечно же не без ложки дегтя в этой бочке с медом перед вами кот да мы будем его с вами дополнять поскольку он еще не самодостаточный нам необходимо решить простую задачу конвертация листовой коллекции любой листовой коллекции которая наполнена любыми типами данных в данном случае у нас это строка в соответствующей массив с этими же значениями при использовании метод конверт мы должны передать тип данных наш интересующий и передать коллекцию с
01:03:21 - 01:04:37
такими же значениями внутри соответствующего типа что мы можем наблюдать вот здесь на то есть по сути generic конверт стрим идет класс и потом внутри листовая коллекция наша задача на выходе получить массив с такими же значениями последовательность неважно но значение тоже есть и массив должен соответствовать этому типу данных ну что ты готов можем лишь я думаю окей хорошо тогда вы снялись 15 минут на решение этой задачи если ты хочешь спросить мне что то смело спрашивает я наведу тебя нам если конечно же не буду
01:04:00 - 01:05:08
подсказывать явно но я наведу себя на мысли поэтому не стесняйся твои вопросы ты можешь пользоваться гуглом любыми источниками книгами что только тебе нравится и хочется в конечном итоге мы должны выполнить нашу программу через наш метод main и увидеть в консоли наш массив значениями владимирова vol 3 ты готов 123 что поехали время пошло [музыка] [аплодисменты] [музыка] а [аплодисменты] [музыка] [аплодисменты] [музыка] [аплодисменты] [музыка] [музыка] [музыка] [аплодисменты] ну что друзья вот и пришло время
01:04:35 - 01:08:03
проверить наше задание на графе ровно сделал и посмотрим добьется ли он результатов получилось ли у него это сделать и в то же время разобраться если были ли какие-то ошибки что мы здесь сделали не так и что мы можем сделать так давайте посмотрим посмотрим на наш код и попытаемся его запустить assassin 3 point просто запускаемся и проверим если какие-то ошибки выполняется ли он корректно выглядит вроде неплохо да выглядит вроде неплохо но есть кое-какие замечания уже первое мы получили класс сказ exception
01:06:50 - 01:07:58
что-то у нас пошло не так обратить внимание в первую очередь мы не смотрим но вот этот параметр он серенький просто проигнорировал сюда кстати вот артем вопрос почему ты его не используешь не да я разумеется понимал что нужно будет использовать закосить к этому типу не нашел этого момента где нужно это дает а тут разумеется что он должен был будет применится теперь смотрим что же у нас получилось если проанализировать ошибку то в принципе все предельно ясно 1 очередной полки рэкласт каст exception хотим
01:07:24 - 01:08:35
ответить почему около 100 секс общин возникает если какие-то проблемы или почему они возникли до его всегда причина написано до испарения джорджик канадка склад но здесь у меня обжиг весь string но находится ходим вместе такой себе псевдокод до создадим дополнительный метод чтобы разобраться вместе вот у нас static просто static методом очень возвращает дима сandy box смотрим вот он ругается на то что он не может за кастить массив с объектами к массиву со стрингами странно ведь действительно как-то непонятно давай
01:08:00 - 01:09:34
попробуем сделать это вручную создадим предположим массив объектов он же массив там какие то здесь будет какие-то значения строковой точно такие же l2 и l3 ну то есть вроде все ok затем мы создадим строковый массив 0 но стрельцы ты здесь делаем обжиг и просто заказ текке ну вроде все честно а теперь давай попробуем вызвать этот метод сэндбокс а здесь все ауте выведем просто информацию в консоль возьмем наш метод java util рейс ustream и выведем наши уроки в консоль простой такой нет обращали мы создали
01:08:51 - 01:10:35
просто массив мы потом высоко стилях массива строк в и больше ничего здесь не происходит затем просто вводим в консоль теперь попробуем это дело выполнить эту строчку пока за комментируем а здесь подставим и это закомментируем а здесь сделаем сэндбокс и вызови посмотрим получится у нас поскольку что мы видим да у нас по-прежнему возникает проблема да то есть мы строчки 26 нормальных за что до невозможно привести мы не можем привести массив объектов к массиву строк или попробовать сделать это наоборот давай
01:09:43 - 01:11:19
посмотрим поменяемся местами создадим массив строк здесь создадим массив объектов здесь разумеется за костюм ну как мы видим кастит нам не приходится все здесь возникают какие мы оставим чтобы она была хотя это с точки зрения этот шаги и почему-то мне нужно и выполним эту агрессию теперь произошло все нормально и мы видим что мы строки нормально заказ телика его суперкласс в данном случае суперкласс у нас вот такой себе что он обжиг ситуация здесь довольно-таки типично для массивов и здесь мы уходим в
01:10:31 - 01:11:54
принцип к вариативности говорю этим из говорит нам о том что сад типы или отдых типы могут быть приведены к супер классу или к супер типов и в данном случае мы это доказываем на практике что строки приводится к своему супер типу и это к вариативность да то есть массивы к вариативно это позволяется то же время наоборот у нас это не получается сделать как мы их battles это уже не работает но в обратном направлении она есть то есть вот и разобрались да почему мы получали класс tcas как section и откуда она
01:11:12 - 01:12:24
приходит то есть мы не можем повысить тип данных нашего массива от супер до какого-то сад типа то же время наоборот нам это доступна благодаря принципу к вариативности двигаемся дальше смотрим что же у нас еще здесь возникает есть вернем наш код да я по поводу нашего generico и конвертации здесь в принципе возникает такая же проблема казалось бы казалось бы такая же проблема у нас возникает но давайте посмотрим но вот этот код мы видим что у нас был массив со строками и сравним что здесь у нас у
01:11:48 - 01:13:12
нас здесь лист со строками мы создаем строке номер 17 вроде бы создаем новый массив и потом его кости к строке то есть если мы говорим о том что дженерик он так называемый inbound или не привязанный он всегда конвертируется в объект в runtime это всегда будет объект то есть здесь у нас происходит приблизительно следующая ситуация мы берем создаем массив объектов обжиг рей и потом the string объект ax3 гарри вот в этой строке и что у нас здесь получается мы попадаем точно же в такую же ситуацию как мы попали в сент боксе
01:12:29 - 01:14:19
когда у нас был мы из строк а мы попытались его сконвертировать в массив а вернее у нас был у нас был массив объектов мы попытались его сконвертировать в массив строк абсолютно такая же ситуация и здесь мы делаем строке 17 и 18 здесь мы делаем абсолютно тоже самое то есть то где мы получаем пласт каско exception второй маме здесь необходимо еще каким-то образом определить конкретный тип а мы его не можем определить если бы мы могли его определить при помощи нашего параметра класс вероятно бы у нас были проблемы не
01:13:25 - 01:14:39
возникло потому что изначально мы бы не создавали массив объектов мы бы создавали массив того типа данных который от нас требует строк каким образом это можно сделать сожалеем при помощи дженериков это не самый лучший вариант проблема заключается в том что в настоящее время generique они определяют свою информацию в runtime и пардон массивы определяют информацию в runtime это значит что когда идет выделение памяти выделяется память под конкретный тип данных в нашем себе это происходит гарантами заранее мы этого не
01:14:02 - 01:15:17
знаю следуйте на дженерики работают никогда иначе из-за этого мы нормально не можем создать массив потому что дженерик он не может точно обеспечить эту информацию да то есть ее просто нет и конечно же проблема с созданием такого джина личного мотива из-за этого мы упираемся в такие танцы с бубном как new объект рейда потом мы его пытаемся за кастить строке и попадаем в ошибку close the stacks of chen который мы обсудили ранее каким же образом выйти из этой ситуации у нас есть две проблемы первая дама sea
01:14:40 - 01:15:46
foam к вариативным но не обратно и второй момент как раз generique они in вариативные и здесь уже возникает проблема generique en вариативны это полная инверсия по вариативности в к вариативности мы можем присвоить под тип его супер типу в in вариативности мы этого сделать не можем и дженерики января тебя это значит что если я попытаюсь присвоить интеджер и к его намбер супер типу нам бы до то тогда у нас произойдет ошибка как это можно решить и все же остаться джимми речными с точки зрения нашего
01:15:13 - 01:16:32
массива чаще всего на прибегаем к использованию массе листовых коллекций потому что когда идет речь создайте generation эй массив легче всего взять коллекцию и и создать жены речной а потом коллекцию привести массиву но если бы так не делать какие есть альтернативы самая простая альтернатива применить у нас рефлексию и как мы можем здесь сделать я удалю этот код программе несколько строчек и напишем у нас есть волшебный метод рэй reflect и в нем называется new instance этот classic он находится в пакете java line reflect
01:15:53 - 01:17:16
затем в качестве параметров мы принимаем тип данных тип данных у нас есть затем мы принимаем размер массива он у нас тоже есть нагрев + says то есть мы берем по сути наш уже готовый лист заполнены с значениями вот он из трех состояний при помощи метода сайт возвращаем эти значения далее принципе этого достаточно мы создаем переменную опустим и она у нас конечно же получается объект изначально поскольку ну так эта штука работает но в этот момент мы можем ее непосредственно за кастить то есть здесь мы можем создать мошки
01:16:34 - 01:17:56
и конечно же есть берем обретаю ссоре здесь пишем т и наши уильямс вот собственно так казалось бы все окей или рейдж назвать казалось бы все окей на чтобы ошибки затем вы просто копируем эти значения которые и уже пили использовал вот тут самый рейда наш переменная и конечно дальше его возвращаю давай попробуем теперь выполнить данный участок кода и посмотрим получится ли у нас это сделать и мы видим получил то есть ситуация 2 у нас информации нету в ран тайме о том какой тип данных для массива
01:17:14 - 01:18:41
использовать поскольку когда массив создается в runtime он хранит полную информацию какой тип данных и на этом основании он может выделить соответствующий объем памяти потому что объем памяти выделяется только в исполняемой среде в рандами ним с вами второй момент мы сталкиваемся с двумя новыми понятиями к вариативности им вариативность напоминаешь какой вариативность это когда под тип может быть присвоен своему супер типу in вариативность это запрещает и конечно же в этом моменте мы тоже здесь упираемся массивы по
01:17:59 - 01:19:03
вариативные generique en вариативные вот и здесь вывод что к сожалению джин речные массивы и джалла не сильно дружат друг с другом и в этом варианте у нас есть несколько подходов либо применить то что мы сделали вот сейчас создали метод конвертации привлечь прибегли к рефлексии указали какой именно массив создать мы указали тип данных его и указали разумеются его размеры и на этом основании создали соответствующий массив соответствующего типа но когда мы его привели уже конкретному типу конечно же там
01:18:32 - 01:19:49
находится все тот же нами ожидаемый тип данных то есть строки они уже там есть затем просто отличный метод часть кода по заполнению значения вообще не здесь никаких претензий нет здесь ok другим вариантом как можно было решить но это более сложно создать целый класс который по сути будет имитировать джин речные массив ну на вы создали предположено generic рей создали внутри бы какой-то джин яичный тип с его типом данных и на основании этого типа мы бы создавали все так же наши джимми речные массиву но такой подход гораздо сложнее
01:19:09 - 01:20:21
и то есть через рефлексии это решает свободную строчечку как и вот отметил гораздо быстрее эффективней и не надо ничего вокруг 5 более создавать формального метода которые это выполнить ну что вот мы и подошли к концу как ты себя чувствуешь дает порядке конечно расстроен потому что не знал тот момент давай flexia а так все отлично ничего страшного теперь ты это знаешь ведь цель питание любого интервью в том чтобы закалиться или стать еще круче чем был вчера или даже минуту назад смотри мы обработали столько много
01:19:46 - 01:20:53
вопросов сегодня с тобой и явно ты в теории отвечал и в практике очень классно действительно есть моменты на которые стоит обратить внимание или флекси частности дженерики и джинны личный мотив это одно из них потому что крайне важно понимать как работают дженерики какой момент получается обладать информацией о типе данных соответствующим и как в этом плане работают массивы поскольку очень часто приходится нам работать с джин и речными в массивами несмотря на то что коллекции все еще существует никуда они от нас не уходят и
01:20:19 - 01:21:26
казалось бы коллекция должны выдавить массив номер она есть она используется и этому будет очень долго и долго времени для жизни анны этим явлением подошли к концу ещё раз напоминаю сегодня в гостях у нас был артём рутковский большое спасибо за твое участие я надеюсь это испытание действительно дала тебе широкую картину о том где ты силён и где еще нужно поработать всегда есть где поработать да то есть это то что делают технари постоянно улучшаются и развиваются большой тебя совсем и надеюсь мы встретимся где-нибудь еще
01:20:53 - 01:22:09
может быть ты хочешь что-нибудь добавить прощальное слово для наших зрелом или чаще нибудь зрителя могу пожелать только чтобы не тоже учились совершенствовались и вот он тоже разумеется приходили на эти интервью со съемок всем спасибо что помог мне познать так сказать новую информацию это было реально познавательно особенно последняя задача ты вообще серьезно был такой выраженный поэтому теперь все уже был знать куда девается действительно желает себя удачи если у тебя появится желание еще раз пройти интервью не стесняйся подавай
01:21:31 - 01:22:31
заявку я думаю в следующий раз ты будешь намного мощнее но я надеюсь что этого тебе будет достаточно чтобы ты уже сделал следующий шаг для получения работы я желаю тебе следующее интервью в реальном проекте и пусть она будет успешно и пусть ты добьешься того чего ты хочешь ребята на этом все всем большое спасибо спасибо за ваше внимание и за ваше участие и увидимся совсем скоро пока ребята [музыка]
01:22:01 - 01:22:53