Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
друзья Всем привет Вы снова на канале джебаб и с вами снова тот самый Макс Добрынин который рассказывает вам о всяких всячинах войтя что ж поехали до разбираться что у нас произошло и что за видео нас ждет но как всегда я вам друзья напоминаю подписываемся Наш канал оставляем колокольчик чтобы не пропустить все самое интересное что у нас здесь происходит напоминаю нас из Telegram канал Подписывайтесь и туда там крутые quize там крутые дискусы и много разнообразных постов в том числе индивидуальные посты от меня А что ж
00:00:10 - 00:01:12
погнали друзья в мир интервью Да разберемся что на сегодня ждет поехали [музыка] Привет Сегодня у нас в гостях особенный гость и его зовут Артём он закончил технический университет успел немного поработать по своей основной специальности но вдруг потом передумал и решил зайти в It Как это часто бывает Но почему бы нет Это довольно таки интересно профессия где собирается молодежь люди постарше и делают крутые вещи собственно Артём закончил несколько курсов по программированию и ему приглянулась Java затем на одних курсах
00:00:41 - 00:01:51
где была презентация его пэт-проект где он со своей командой собственно его презентовал присутствовали представители it-компаний и они назначили ему соответствующее интервью и было таких интервью всего три и знаете именно в трех интервью из трех случаев он и получил оффер в целом офферы выглядели следующим образом что два из них это было реально приглашение на работу и одно из предложений было на платную практику с возможностью последующего трудоустройства здесь Артем долго не думал решил попрактиковаться еще
00:01:17 - 00:02:15
набраться опыта и потом уже смело войти как полноценный Junior разработчик конечно же именно потому он выбрал стажировку он ее успешно прошел и настоящее время неплохо чувствует себя в компании которая выбрала его Однако почему же путь привел Артема именно к нам Да все просто Он всего лишь хочет понять где он был когда он начинал каков уровень знаний у него сейчас И разумеется получить обратную связь о том что еще можно выучить чтобы стать все более более крутым разработчиком программного обеспечения И разумеется
00:01:46 - 00:02:50
пахать эти просторы что ж друзья погнали вместе в собеседование на позицию и посмотрим как Артём всем справиться поехали [музыка] Артём будем тебя опрашивать на позицию и попытаемся понять Какие можно получить встретить вопросы какие ответы можно на них Разумеется тоже вернуть поговорим о базовых вещах Что такое объектно-ориентированное программирование Расскажи пожалуйста объекта ориентированно программирование это подход для написания коды кода который основан на взаимодействии между собой объектов
00:02:18 - 00:03:46
вызывания друг друга методов и так далее которые основаны четырех принципов принципах можно сказать 3-4 это зависимости от того как человек считает 4 недавно начали упоминать капсуляция наследование полиморфизм и абстракция В чем смысл абстракции если он недавно стал упоминаться абстракция довольно интересный момент в англоисточников Когда обычно читаешь обостракции это как бы используется что мы Хотя нет это везде в принципе сама суть то что мы выделяем главные свойства объекты откидываем свойства которые не нужно то есть
00:03:06 - 00:04:42
допустим у нас есть человек и нам важно его имя там Фамилия возраст конец цвет волос и Какой длины у него волосы Мы это можем не указывать типа то же самое как часто пример это с машиной то есть машина двигатель цвет допустим остальное там сильно неважно насколько мы выделяем главное остальное мы можем откидывать и еще как бы в основном чтобы для абстракции мы используем больше интерфейсы чтобы показывать больше как поведение и взаимодействие с этим поведением тогда тут такой вопрос то что ты описал А что такое полиморфизм
00:04:00 - 00:05:28
полиморфизм Это я бы сказал тут есть как бы два описания А первый это то что возможность интерфейса или объекта применять несколько сущности имеет несколько инстансов типа сущностей то есть если мы допустим объявили задекларировали лист и потом присвоили переменной linked лист а потом мы можем присвоить переменную реалист А также есть еще статический динамический полиморфизм статический пулемет физм это когда у нас выбирается на этапе компиляции какой метод будет использоваться а получается динамический подъем это во
00:04:48 - 00:06:21
время уже соответственно определяется будет использоваться Какого инструмента тогда все-таки разница между полиморфизмом и абстракции здесь если мы по сути используем конкретный тип переменную объявляем абстрактную используем интерфейсные методы то в чем разница все-таки между полиморфизмом и абстракции полиморфизм и абстракция но я бы сказал я бы сказал что абстракция это такой какой-то более теоретический момент который говорит о том что вот мы описываем объекты что мы можем объекте выделить что-то общее самое важное для
00:05:35 - 00:07:12
нас кинуть не нужно но я бы сказал так а полиморфизм это уже полиморфизм больше относится все-таки интерфейсов интерфейсом по моему хотя бы если мы возьмем такая идеология была и как бы понимает возможность использовать переменную прислать и несколько Ну типа значение Окей здесь можно отметить что в первую очередь полиморфизм это результат точнее абстракция это результат использования полиморфизмы и всех остальных принципов таких как следование То есть если обобщить экстрагирование позволяет нам избавиться
00:06:27 - 00:07:52
от деталей и таким образом наш код становится расширяемым мы с легкостью можем делать подстановку о которой ты рассказываешь и как раз полиморфизм это многоформенность то есть мы можем создавать разные формы одного и того же абстрактного типа и затем делать эту подстановку и тут же и выходит опять же абстракция мы не завязываемся ни на какие детали детали инкапсулируются в конкретных классах конкретных реализациях и тут появляется уже инкапсуляция сегодня друзья наши интеграционная и нет я вам не буду рассказывать про крутые
00:07:12 - 00:08:22
курсы пайтон который так всем нужен Однако не так уже просто найти работу в этом Поэтому вместо этого я вам расскажу про крутую новость которая очень сильно хочу вам поделиться и сто процентов она будет вам интересно при поддержке моих коллег и партнеров мне удалось основать тренировочную платформу ты можешь просто называть её тренинг-центр но Давайте лучше я тебе расскажу чем мы там на ней занимаемся и какие проблемы решает айтишко является очень лакомным кусочком и все стремятся в нее попасть и в этом
00:07:52 - 00:08:49
ничего плохого нет в этом удивительного тоже ничего нет Однако времена Пионеров прошли ведь современный клиент он же работодатель четко знает чего он хочет Какие технологии применять И как это все должно быть реализовано соответственно это существенно понижает цену вновь испеченных новичков которые закончили ВУЗы прошли курсы Нет не подумайте я не буду здесь рассказывать том что ВУЗы плохие или курсы плохие это всё круто и курсы нужны и ВУЗы нужны одна корячивается о том чтобы получить работу для современного новичка необходимо
00:08:24 - 00:09:27
обзавестись опытом работы и выходит здесь у нас Замкнутый цикл чтобы получить работу Мне нужно получить работу чтобы получить работу опять не нужно получить работу а где взять работу если для этого нужна работа кажется что какая-то безвыходная ситуация ведь получить первую работу не так уж и просто Либо ты должен быть каким-то реально выдающимся вундеркином что тебя и без опыта работы возьмут на работу но решение есть для обхода щепетильной ситуации и давай-ка я тебе расскажу как мы решаем эту проблему при помощи
00:08:55 - 00:09:51
тренировочной платформы i-prose решение базируется на многолетнем опыте преподавания работы в различных it-компаниях и реализации современного программного обеспечения Все это позволяет осознавать проблематику современного новичка it ведь Как показывает опыт время лишь активная практика в кругу специалистов позволяет достичь крутых результатов в Короткие сроки тренировочная платформа iprody позволяет погрузиться в разработку реальных клиентских проектов для получения столь желаемого и необходимого
00:09:23 - 00:10:14
коммерческого опыта Весь процесс построен таким образом что вы становитесь членом команды из 5-6 разработчиков под наблюдением высококвалифицированного Тим Лида Все это позволяет принять участие в разработке реальных клиентских проектов вы решаете задачи среднего и высокого уровня сложности принимаете участие в обсуждении этих самых задач то есть в их анализе и дизайне понимаете участие в разнообразных командных митингах И разумеется в код ревью Где вы можете получить реально свежую обратную связь о
00:09:49 - 00:10:44
том как вы что-то реализовали И разумеется ис имеет свое положение до того как его кто-то заметит другой и конечно же принимаете активное участие в коды View что позволяет вам получить быструю обратную связь что ведет свою очередь к улучшению ваших навыков и повышению вашего уровня квалификации все это в конечном итоге ведет к повышению уровня вашей экспертизы при реализации клиентских проектов что соответственно влияет на уровень вашей привлекательности ведь таким образом вы автоматически становитесь лакомным
00:10:16 - 00:11:13
кусочком в глазах работодателя и конечно же HR рекрутеры теперь не хотят обходить вас стороной поскольку Они видят что вы потенциально новый сотрудник в компанию который уже с первых дней работы в этой компании сможет приступить к реализации задач которых так ждет работодатель или его клиенты А все это потому что теперь ты не просто джун с большой буквы ты джун плюс что я вижу тебя Это заинтересовало хочешь присоединиться к команде современных разработчиков решать крутые задачи и получать таски посложнее
00:10:44 - 00:11:43
так еще и побольше никакой проблемы в этом нет это очень просто переходи по ссылке в описании озна комьтесь с детальными программами повышения квалификации заполни контактную форму нажми кнопку отправить и в кратчайшие сроки мы с тобой свяжемся помни что путь мечте начинается с первых шагов Так давай же реализовывать вместе на тренировочной платформе Ай против Давай тогда поговорим про принципы соли ты говоришь про подстановку как бы это один из принципов Solid какие есть еще и принципов он описывает первые символ
00:11:14 - 00:12:24
себе это Барбара Лесков разделение интерфейса 5 можешь рассказать про интерфейс игры интерфейс eligation Ну да я сказал что если у нас есть один интерфейс который находится условно 20 методов и они эти 20 метров связаны с разной имени какими-то предметными областями или с разным назначением то Согласно этому принципу нам лучше сделать разных 20 интерфейсов и наследуется интерфейсов одним классом много много Ну это да понятно что много но это как бы так просто есть у нас объект допустим наследует этот интерфейс 20 методами а
00:11:58 - 00:13:47
потом в каком-то другом методе надо метод достать из этого интерфейса один допустим использовать соответственно нам придется 19 методов возвращать на А это вообще есть хорошо принципу ты будешь делать это разделение Ну то есть я понял абстрактно может быть много интерфейсов много методов Но вот По какому принципу ты будешь принимать решение Что необходимо взять большой интерфейс разделить на несколько Ну интерфейс должен быть связан с какой-то определенный предметной области то есть один интерфейс Ну конечно к
00:13:07 - 00:14:18
одной предметной области я бы сказал так Окей А что ты поднимаешь под предметной области здесь что я понимаю то что допустим это должно быть непосредственно связано с его как-то название интерфейса во-первых названием и то что означает то и должно делать Ну предназначение интерфейса то что означает и должно делать то есть если у нас условно интерфейс с названием поилка то там должен быть поить метод и еще может какой-нибудь другой на никак не кормить потому что представим себе У нас есть две сущности Одна называется клиент а
00:13:47 - 00:15:21
другая называется сотрудник если мы посмотрим в эти две сущности то мы видим что они практически один к одному То есть у них есть айдишко у них есть имя фамилия дата рождения электронный адрес почта какие-то прочие Поля это все-таки один класс или классов должно быть несколько клиент и сотрудник да я понял Есть разные немножко подход как бы но можно сделать это как условно клиенты сотрудник Я бы сделал абстрактный класс условно Персен Где бы отписывались его основные характеристики такие даты дела
00:14:35 - 00:16:16
и тут уже если мы заговорили про интерфейс Вот это очень сложный момент когда используется но я думаю что клиенты сотрудник это было бы два различных интерфейса и вот почему а почему Потому что почему Потому что клиенты и сотрудники мы еще можем их отнести к различным условно предприятием сотрудник какого-то предприятия сотрудник другого предприятия и у них есть какой-нибудь метод выполнять работу да соответственно лучше как бы определять логику вот этого метода выполнять работу когда ты именно
00:15:31 - 00:16:53
знаешь относится но представим себе что но мы не знаем какие предприятия условно говоря и клиент может выполнять какую-то работу и сотрудник тоже может выполнять какую-то работу по сути вот мы смотрим эти классы один мы можем даже избавиться от функционала какого-то внутри мы говорим что это просто данные типичный есть поля есть гетеросеторы и смотрим сотрудник и клиент один к одному одинаково прям один к одному будем создавать один класс или несколько класс Ну тут уже зависит бизнес логики наверное самого приложения если есть
00:16:16 - 00:17:54
можно даже этот класс разделить условно и нам создать которые будет занятость Динамо называется занятость у него там клиента есть сотрудник но а можно если уже сильно различие между ними и клиенты и сотрудники должны условно различных таблицах находиться тогда желательно создавать это уже а если у нас нет то есть мы вообще забавно интересный вопрос разбираешься [музыка] Я бы тут разделил точку последний вопрос А в чем мотивация разделение на два разделение на 2 это нам дает как бы гибкость к дальнейшей усовершенствованию
00:17:09 - 00:18:53
я бы сказал так то есть если мы это обозначаем Динамо и все мы знаем это один класс а потом это клиенты и сотрудник это все-таки мы добавляем абстракции и это нам позволяет в дальнейшем еще приблизить какой-то функционал или в зависимости от этого функционала сделать на самом деле изначально стоит исходить из идей где этот класс будет использовать Потому что ты заговорил про предметную область Она же называется доменная область или доменная модель не важно и нужно четко определять где она будет обслуживаться потому что даже не
00:18:16 - 00:19:32
знаю что эти два класса одинаковы это вовсе не значит что они будут использоваться развиваться изменяться в одной и той же среде именно это должно быть Мотива Почему они могут быть отдельным это не значит что они Обязательно будут отдельными Но это первое что должно приходить в голову кто их будет использовать кто так называемый стейк холдер здесь есть тоже приходит идея сингл responsibility потому что именно в этом и заключается принцип синглт это не идет речь о том что класс должен делать одну штуку в большей
00:18:57 - 00:20:01
степени идет речь о том что класс должен быть ориентирован на одну предметную область и ни в коем случае не делить если он начинает ее делить это уже плохо поскольку изменения в классе могут решить проблему одной предметной области и создать препятствия или проблемы для другой предмет области которая тоже используют Хорошо давай поговорим с тобой немножечко про джаву такие базовые вопросы Почему нельзя сравнивать объекты через двойное равно оператор хотя знаю то что двойное равно этот оператор он как бы сравнивать если
00:19:29 - 00:21:00
примите в этом назначение примите его А если с объектами то он сравнивает нахождение объектов хиппи где он у меня находится эта ссылка двоичное значение какое-то определенное где он находится которая описывает нахождение соответственно сравнить Вот это у нас могут быть два одинаковых объекта абсолютно по значению условно там у него имя возрасте что вернет только потому что они находятся в разных местах мы должны сравнить через где желательно определить желательно указать тоже что надо сравнить равно
00:20:14 - 00:21:41
Да все равно желательно А можешь назвать принципы переопределения метода я могу не обязательно словами заумными как они называются но описать Первое это то что если мы на на объект пытаемся сделать канал то это всегда равно себя Сколь угодное количество раз это всегда должна тру Окей допустим Y и Z если два объекта мы первый раз сделали [музыка] Никаких изменений результат на самом деле все это можно найти в описании к методу eclus Я имею эти мощные названия как транзитивность рефлексивность и так
00:21:06 - 00:22:46
далее так далее хорошо А что ты знаешь про контракт и а контракты класса код то есть у нас есть такой момент когда называется коллизия если мы знаем что такое коллеги можно предположить что как между собой должны действовать у нас пешеходы зависимости от того что точнее независимость А из-за того что int у нас ограничен не могут быть различные код У нас тоже обязательно должен быть А можешь привести пример когда объекты разные но у них хешкот одинаковы объекты разные правила так гласит что если объекты
00:22:28 - 00:24:02
эквивалентные то их код должен быть эквивалентный эквивалентных не гарантирует простой пример Представьте У нас два разных объекта Мы точно знаем что они разные но почему-то у них одинаковые как такое может быть как минимум тогда хорошо есть хорошо частый момент когда мы пытаемся функцию Skoda уточнить наш функцию она должна быть в диапазоне Но мы уже только Мафик плавно переходим у нас словно функция должна быть диапазоне элементов индексов этого массива и часто бывает что часто бывает функция между собой родной
00:23:33 - 00:25:09
и тогда уже появился там идет дальше сравнивается уже объекты Хорошо давай поговорим если ты уже говорил за коллекцию вспомнил за нахуй Давай поговорим чем разница между такая простая всего лишь несколько пунктов несколько пунктов до 1 то что у нас не синхронизирована быстрее работает и есть еще один а еще один это основа значение То есть у нас решает хранить одно назначение окей Окей в целом Можно ли до сих пор использовать хэштейбл все постоянно задаются вопросом почему не перестают задавать вопрос В чем разница между
00:24:31 - 00:26:15
хэштей был и хэшма но у меня здесь вероятно ответ в виде вопроса к тебе можно ли до сих пор допустим Взять Java 18 и Попробуйте использовать Почему нет такая-то существует и мы можем создать из этого на объект [музыка] зависит от того разные люди могут быть у них разные приложения и они разные у них Допустим хочу использовать а хорошо Или или нет Ну тут Наверное у нас уже есть условно Кошмар который полностью заменяет иди быстрее работает то наверное лучше использовать А если у нас вперед другое тоже А если у нас предположим
00:25:54 - 00:27:48
приложение не использует многопоточную среду Ну то есть нам не нужен контакт Кошмар У нас выбор хэштей был или Кошмар Стоит ли использовать у нас вообще не использует приложение многопоточность но мы не используем У нас тут есть выбор либо хэштей был многопоточность мы не используем вообще на это все равно Стоит ли использовать но она работает а почему потому что все равно задействуется определенные какие-то ресурсы наверное на захват семью такса условно потому что Да она же синхронизирована синхронизация
00:27:01 - 00:28:26
бесплатно не дается Окей давай поговорим тогда кольца говорили про многопоточность поговорим про синхронизацию что вообще такое синхронизация И зачем она нужна что она помогает нам Чего напугает нам избежать что нужно синхронизация обычно используется многопоточно приложении известно своими и для того чтобы избежать это состояние гонки или точно уснул как бы обусловить точное выполнение каких-то операций такие как инструменты и дальше мы захватываем условный монитор miutex который не позволяет другим потоком
00:27:51 - 00:29:38
захватить То есть он пока не выполнит в этом блоке код будет работать и другим потоком у нас не даст работать Окей хорошо ты сказал про такую штуку Race Condition но я еще слышал про дотарой В чем разница между российском Ой я кстати недавно думал то есть это довольно связано [музыка] Нет это правда Это все я почему-то и да такая и дата рейс Ну с учетом того что я уже сказал подсказал так сказать что это про многопоточность Если ты не знаешь Попробуй сам себе намекнуть в чем может быть различие порассуждать Вот как
00:28:51 - 00:30:28
ты думаешь чем разница между Data Racer и Condition то очень базовый вопрос на ответ на который на самом деле не всегда получается получить [музыка] но сложного в нем ничего нету там ответ лежит прямо самом названии наше значение [музыка] поток наш Просто я не знаю изменил значение и но оставил ее себя допустим в другом потоке работа зависит окей а что же тогда такое Race Condition Ведь именно так все описывают рейс Condition это немножко другое Наверное это неправильная запись наше значение то есть
00:29:48 - 00:31:25
Ну смотри неправильная запись Это же было неправильная запись только что рассказал [музыка] вопрос с подвохом на самом деле дата рейс или это всего лишь частном случае рейс Condition потому что в первую очередь Race Condition подразумевает получение времени выполнения то есть процессорного времени в свою очередь бейта рейс это исключительно про работу с данными То есть когда у нас есть так называемый ресурс и несколько потоков соревнуются изменяя его в свою очередь это речь о том когда несколько потоков
00:31:10 - 00:32:37
соревнуются за процессорное время над чем-то Разумеется не всегда подразумевает изменения данных и такой драматичный исход Ну ладно по крайней мере знаешь что о существовании всего что они связаны с базами данных хорошо Какие способы синхронизации Ты знаешь синхронизация по методу и по объекту синхронизации по блоку кода где мы показываем объект непосредственно А в чем разница между синхронизацией по блоку и по методу синхронизацию по блоку мы можем указать другой объект то есть который мы в инструкции в
00:32:00 - 00:33:32
конструкторе вставляем А если мы пишем это не статический класс А мне если это не статический метод то это текущему инстанцию этого объекта этого класса будет у нас синхронизация а что будет если предположим У нас есть класс у него один метод синхронизирован а другой не синхронизирован и с этим классом работает Одновременно несколько потоков изменяя значение этого класса представим себе что у нас есть гетеро не синхронизирован а центр синхронизирован и вот потоков работают с этим одним экземпляром класса
00:32:48 - 00:34:23
Какая здесь может быть проблема синхронизировался тренер синхронизирован Какая здесь может быть проблема хорошо Так у нас доступ именно к этому методу именно к этому методу за синхронизирован соответственно те же самые инстанции не могут не могут получить даже все могут получить доступ почему нет но с этого у нас центр это синкр Найс метод То есть он связан с экземпляром соответственно это не статический это не статический методы это чистые объекты в своем проявлении А гетр это тоже его метод но он не
00:33:37 - 00:35:11
синхронизирован и вот одновременно пять потоков использует центр и используют Гетто в чем может быть здесь проблема в том что потоки которые будут использоваться которые у нас не синхронизированы то есть они могут столкнуться с этим райском тишину А как можешь пояснить то есть именно на допуск этого инстанса к этому [музыка] сфокусируемся от нас есть гетр и сеттер 5 потоков используют и гетеросетор одновременно Я имею ввиду кто-то использует одновременно что 5 потоков одновременно получает доступ к одному экземпляру
00:34:28 - 00:36:12
класса у которого синхронизирован а Гектор не синхронизирован вот Какая здесь может быть проблема то что гетеро они будут получать поток только после того как следующие методы освободят следующие потоки освободят этот метод но при этом с этого они могут работать по идее это у нас если синхронность именно этот объект методу но нас это они могут вставлять значение Независимо того что какой-то метод захватил объект именно на метод соответственно и могут они вставлять значение и значение же будет у нас общее
00:35:33 - 00:37:01
в объекте для все значения все равно работа потому что условно там какой-нибудь там же не только обязательно что может вернуться значение там может еще другая Ну у нас там просто это не обеспечивает гарантии того что именно валидное значение установка значения будет безопаснее многопоточность установка значения 5 потоков к одному и тому же да Но по идее установка значений Ну нет не похоже получается установка назначений будет синхронизированная и помогу на самом деле все гораздо проще чем кажется
00:36:22 - 00:38:03
сеттер синхронизирован и у нас есть один объект потому что у нас есть один объект экземпляр этого класса и 5 потоков которые его эксплуатируют Разумеется центр из-за того что он синхронизирован идет синхронизация на всем объекте инстанс он же Разумеется все потоки будут безопасно вносить изменения в состоянии этого объекта Однако они будут получать актуальное значение потому что как ты до этого отметил у них же есть тоже пиши они будут получать дед выполнять не синхронизирован в этот момент может
00:37:32 - 00:38:43
производиться запись значения И разумеется большая доля вероятности или как-то правильно опять же нет гарантии того что они считают правильное значение Хотя записываться значением будет правильно хорошо давай тогда еще поговорим про многопоточность Синхронизация это все здорово все мы знаем Но это устаревшие способы потому что они Ведут к линии как все знают если мы используем Это значит что все методы будут выстраиваться в цепочку и ждать пока один выполнить следующий и соответственно Если бы у нас
00:38:09 - 00:39:22
был бы гетеро синхронизировано в том числе Это значит что пока бы запись не произошла никто считывать бы не мог И это не особо эффективно какие есть другие способы синхронизации но есть Локи условные Окей Что за Локи Расскажи наверняка Это не тот Локи который из Марвела надо наверное нет Локи это замочки которые нам дают более гибкую гибкое Управление потоками то есть там мы можем уже есть методы которые строил вот это все также есть Condition тоже есть также еще есть условно ритон который позволяет
00:38:46 - 00:40:21
Он позволяет если мы считываем то в принципе считывается все хорошо и все супер но когда какой-то поток или человек условно захотел что-то изменить все чтении и записи они будут захвачены а тут меня вопрос Представь себе что вот мы используем этот не будем вдаваться в какую реализацию в целом берём лодка и вот у меня есть гетер Я на нем поставил и на сцене я поставил рай разве это не убивает многопоточность разве это не делает то же самое что синхронизация То есть вы рождение в линии Как это работает в чем же тогда
00:39:33 - 00:41:05
здесь Выгода производительности по сравнению с блоком или с методом syncronest в эквивалентной ситуации когда у нас есть один общий объект у него есть гетр у него есть сеттер и 5 потоков рандомно постоянно эксплуатирует мы и говорили что если мы засинхронизируем наши потоки на сатрена гитар методом синхронность все гетеровские условно вот эти операции они будут выполняться вот эти методы Гетто не если у нас не производится никакие записи что довольно таки у нас больше чтение то это нам никак Ничего не
00:40:25 - 00:41:45
синхронизирует дает возможность приложение подняться как предполагается А ты говоришь это не дает нам синхронизацию все-таки она есть или нет вдруг кто-то записывает значит если кто-то ищут А другие будут читать неактуальное значение А вот именно что когда у нас кто-то записывает когда записывали тогда у нас процесс усиления блокируется О'кей окей да Абсолютно верно то есть в этом смысл redride Lock и в целом блокировки что в тот момент когда все читают и нет сигнала записью все могут читать одновременно безопасно как только
00:41:10 - 00:42:23
поступает сигнала записи все чтения приостанавливается которая новая уже ну старые заканчивается новые Разумеется приостанавливаются и ждут пока не будет сигнала о том что запись завершена И разумеется Дальше они могут его считывать здорово Мне очень даже нравится Давай тогда поговорим с тобой про спринг начнем с Spring Core можешь рассказать В чем различие база вопросов суть такая что у нас в спенге все объекты они создаются на автоматически и они хранятся в контексте спринг контекст я бы писал это как такая кошмака
00:41:50 - 00:43:21
который мы в которой находится наш объект а также эти объекты могут быть и Мы также соответственно эти топчик они автоматически внедряется в наш объект Это тоже нашему спинку соответственно мы Передаем такие обязанности как создание вина и создание объектов также внедрение зависимости от точки зрения Java Что такое Бин с точки зрения резон скажи ты вот такой вопрос с подвохом ты сказал случайно оговорочка была в чем разница между dependency injection и dependency inversion [музыка] это внедрение зависимости автоматически
00:42:53 - 00:44:43
это и Солид принципов соответственно как бы общими словами что абстракция не должна зависеть детали детали должны зависеть абстракции Окей то есть соответственно если простыми словами как я это понимаю якобы это такое себе писание контракт описание контакты где мы начали создаем нашу страницу интерфейсе который делает работу и мы предоставляем этот интерфейс и его функционал нашему пользователю А вот то что уже под капотом как это мы реализовали это должно зависеть от того как называется этот интерфейс название
00:43:59 - 00:45:35
как бы сигнатура метода и соответственно вот как бы так Ну да исключительно внедрение зависимости в рамках стринга как мы говорим это архитектурный принцип который позволяет нам определить контракт и в комбинации Джексон Это очень хорошо работает поскольку мы можем создать компоненту которая зависит от абстракции и не указывать конкретный тип данных затем где-то его реализовать а Spring этот конкретный тип данных нам внедрить Разумеется потом с легкостью можем тут же применять Лесков подстановку
00:44:46 - 00:46:09
поскольку мы уже привязаны к абстракции и внешний мир под нас адаптируется когда он поменяет реализацию что Он зато он реализует это только интерфейс а Spring за нас внедрить зависимость поэтому класс который ожидает эту абстракцию он никогда не меняется но никогда это очень громко но в целом Это позволяет нам добиться того что определенные классы или определенные модули они не зависят от внешних факторов то есть они максимально какие неизменяемые то есть весь мир под них адаптируется а не они подмеры это позволяет нам строить ядро
00:45:28 - 00:46:44
компонент Хорошо давай поговорим с тобой про Spring School Какие ты знаешь Зачем они вообще нужны Spring скопы для бинов Да не Стрим сколько Бин Бин скоб сори А хорошо у нас по дефолту синглтон есть Второй по популярности тоску про Тотал синглтон это как связан больше с паттерном То есть у нас в одном контексте всегда один объект в разных местах используется это у нас соответственно при обращении контексту к этому нас создается именно Новый Новый объект А вот или не надо писать пример про то так
00:46:06 - 00:48:04
мне сложно представляется как вот про то будет внедряться Ну как правило Мы создали Бин он внедрился и как правило происходит один раз как-то зачем тогда про то смысле что нам решит то он нам решит но в различных частях у нас допустим нужна к примеру Да хорошо Примерно нам Мы не используем базу данных без разницы нам не нужно мы Нет я это так мы не используем нужно в разных сервисах допустим и соответственно зависимости от сервиса там будут типы те же границы на различные значения я понял ну и соответственно будут
00:47:07 - 00:48:41
храниться значения необходимые для сервиса одно в одном соответственно и она находится в одном сервисе другой объект значение который необходимо непосредственно к другому да да то есть в этом Идея про тотать что он Стрим будет инициализировать каждый раз новый Бин при попытке внедрения то есть несколько сервисов используют один и тот же Бин Точнее я прям сказал один и тот же бендефи ниша которая определяет как этот Бин будет выглядеть Разумеется Каждый раз когда его затребуют он будет создавать новый взгляд Абсолютно верно
00:48:10 - 00:49:29
то есть нету смысла прототайпе если мы всегда используем только как минимум одно внедрение А если мы используем множество внедрений и при этом всем нам не нужны разные объекты опять же Это именно потому синглтон нам достаточно вода еще есть еще но они все относятся приложениям как бы это отдельная отдельная штука Хорошо хорошо очень очень хорошо давай поговорим с тобой про немножко спринг mvc Ясное дело сегодня очень многие любят обсуждать спринг веб-флакс как его отдельное проявление но в целом вещей
00:48:49 - 00:50:18
это то что лежит в основе многих вещей Расскажи пожалуйста что такое Диспетчер С рулет в рамках которые суть которого постепенно больше Как как починить я бы сказал какой-нибудь таком паттерну из доставляется наш запрос необходимые зоны то есть в зону допустим условного преобразования из объектов Объект который будет Application и мы обратно его отдаем дальше условно к нашему диспетчеру даже находит необходимо контроллер и метод который необходимо отправить он отправляет объект этот заброс уже это соответственно наш контроллер
00:49:53 - 00:51:39
если делать необходимо логика может быть в модель доставляются какие-то объекты соответственно дальше это все переходит у нас моделькой в диспетчер си лет диспетчер Да обратно и это уже идет в условно уже здесь почему или диспетчер он направляет скажи пожалуйста вот как в рамках стринга mvc я пойму Точнее я диспетчера лет поймет куда заброс направить предложим есть какой-то входящий запрос какие-то параметры и прочее прочее вот как диспетчер серво лет поймет куда это направить оно у нас есть аннотация
00:51:06 - 00:52:50
основная аннотация requestin от которой уже идут непосредственно аннотации дальше усовершенствованный гейт маппинг посмотрим и как по идее я знаю но я могу сейчас ошибаться То есть почему хорошо изначально она класс контроллер который помечены контроля по сути она ничего там толком не дает это тебе имеет аннотации компонент Но желательно request mapin аннотацию и там какую-то общую часть кода расположить непосредственно в этой нотации под классом Это позволяет быстрее диспетчер лето определить непосредственно метод
00:52:06 - 00:53:34
Хорошо хорошо а представьте себе У меня есть запрос и в нем есть какой-то параметр Ну то связь с этого запроса как правило мы говорим что это не квери параметр То есть это какой-нибудь метод Get написано там юзер слэш1 и вот этот часть этого пути там где один 121 миллион один Нам необходимо получать доступ к этому значению Во время принятия запроса при помощи чего springe можно получить доступ к этому значению и обозначить что в принципе это значение является частью пути и это значение мне Необходимо
00:52:52 - 00:54:18
извлечь Волшебная это динамический параметр А если мне нужен не по своей параметр или То есть как он так называется параметр запроса то в этом случае какой аннотацию можно применить Здорово при том что там можно поставить как бы обязательно Или не обязательно значение True fals и зависит тоже опасный реабл может быть обязательный Или не обязательно Это у нас идет как часть запроса на самом деле может быть Не обязательно но это я не знаю зря я сказал ничего страшного Теперь знаешь как правильно Да на самом
00:53:35 - 00:55:13
деле квест и по сваривал они могут быть опциональными тому Есть множество причин это как минимум те хреновый дизайн когда мы видим у нас Flash потом ничего нет И опять Слышь я тоже думаю как это может быть есть много есть много примеров плохого дизайна или попытка исправить плохой дизайн на период миграции то есть условно говоря когда по осверий был не использовался использовался request param но мы по-прежнему хотим использовать request prom какое-то время и в то же время уже внедрить вас verybel
00:54:37 - 00:55:51
Разумеется мы можем сделать и тот параметр это как false добавить какую-то проверку ну как вариант и выбирать что-то одно из них но затем Когда мы уже полностью скажем что мы от этого избавились то удаление ставим нормальный вариант поэтому это Вполне может быть это естественно штука Скажи пожалуйста а вот ты говорил мы говорили свой и направление к методам А может быть такое что у метода который обладает аннотацией request mapping там где URL указываем может быть такое что там несколько углов то есть различные урлы Ведут к одному и
00:55:15 - 00:56:35
тому же методу но исходя из того Да может если мы затронули то что был может быть вообще Окей могут быть вот эти два это два разных А теперь другая ситуация у нас первый URL A5 В1 слэш юзер слэш какой-нибудь айди и второй URL API слэш V1 слэш юзер слэш ID слэш значения или даже не слышите А слэш Get и свое значение может быть такое что один метод обслуживает принципиально два различных URL то есть в одном у нас такой классический когда мы пишем версию потом пишем ресурсы затем мы пишем параметр
00:55:55 - 00:57:44
а во втором у нас такая классическая проблема из прошлого Когда не было никакого рестла и было что-то вроде такого опять В1 юзер слэш Get и потом слэш какая-то может быть такое То есть когда один метод обслуживает абсолютно два разных принципиально два разных наверное наверное это такое может быть но я бы хотел верить спинки и сказать что нет На самом деле это возможно это опять же очень сильно помогает обратной совместимости когда мы что-то фиксим или когда у нас есть несколько вариаций Почему нет вариативность поэтому на
00:57:24 - 00:58:56
самом деле это очень даже возможно в этой ситуации хорошо Таким образом мы можем просто указываем в request mapping параметр видимо сила потому что параметр который отвечает за установку пути к этому методу ну или к этому классу потому что мы указываем там массив изначально это если это одно значение мы Передаем его просто как одно значение и массив создавать Не обязательно но если нам нужно мы можем создавать массив хоть хоть 10 Орлов туда подставлять вопрос как это все менеджер как этим всем управлять Но это возможно
00:58:09 - 00:59:39
и это реально есть много тому примеры Хорошо хорошо Ну тут Наверное мы с тобой закончим на этой нотке с вопросами по спрингу и давай дропнем Connection Сейчас где-то пару минут перерыв и переключимся задачу таймер по времени переключимся в задачу Хорошо давай Тогда через пять минут возвращаемся это опыт это экспертиза Ну посмотрим там все просто давай тогда начнем сейчас я я сделаю шире тогда начнем по поводу задачи собственно В чем заключается Наша задача необходимо реализовать простую функцию Face бас тест она
00:58:57 - 01:00:42
возвращает числовой байтовый массив Я даже сказал бы просто байтовый массив потому что числа массив формируется по следующим правилам функция принимает аргумент виде целого числа то есть далее число если оно кратно 3 то мы возвращаем значение если оно кратно 5 то просто бас если одно одновременно и кратно и трем и 5 тогда если не то ни другое не третье выбрасываем или аргументы Exception с любым сообщением или без сообщения это не принципиально главное выбросить исключение а после этого у нас есть классика
00:59:57 - 01:01:22
который будет содержать тест размер необходимо реализовать несколько тестов не обязательно все но хотя бы пройтись по так называемым саните тестом то есть явно необходимо проверить сценарий первый сценарий второй сценарий третий и сценарий 4 Вот это реализовать Вы помните уже подключен Юпитер поэтому здесь уже все есть можно использовать никакие супер сложные нам другие зависимости не нужны используем только это для тестов этого достаточно для написания класса его функционала это тоже достаточно за 18 нам всего хватает
01:00:42 - 01:02:24
вот поэтому Можешь начинать я вижу ты уже находишься У тебя решение этой задачи 20 минут я понял можешь звать любые вопросы в ходе того как мы Ну как и решаешь может звать любые вопросы это не значит что ну смысле я здесь Если будут вопросы нужно что-то уточнить задавай но принципе время пошло на моих часах сейчас 29 минут округлим в 50 минут я тебя остановлю хорошо как уже готов можешь переходить к тестам я на то что сейчас как раз таки и проверил готовность или правильность что если не тесты нам могут сказать что
01:01:36 - 01:03:13
правильно что окей Давай наверно сразу реализуем обозначим несколько тестов сценарий первый это если кратко трем второй если кратно 5 если кратно 3 если кратно и трем и 5 и последнее это выброс исключение Таким образом у нас будет 4 тестовых метода мы не будем покрывать все возможные сценарии это не является задача Наша задача быстренько все собрать поскольку время тикает у тебя осталось а если число меньше 0 можно же смотри предусмотреть не я понял нам на самом деле все мы же говорим о том что число кратное или не кратное
01:05:52 - 01:07:29
если кратно но хоть бесконечность в вакууме на самом деле если она кратно Значит на кратно здесь нет если четко Я пока не могу запустить его до проверить работает ли теста Почему очень долго я вижу что не выполнился да сделаю пока что у нас осталось четыре минуты хорошо не переживай Не обязательно Должно все закончится зеленым Давай закончи хотя бы код перепутал местами перепутал [музыка] так и тут перепутал местами но у меня Интернет больше ничего страшного [музыка] там нормально Да только я не проверил
01:06:56 - 01:08:40
сейчас ну давай заканчивай и мы выполним уже после 1 минутка осталось я понял [музыка] [музыка] а уже нельзя Да ладно еще можно Окей но я понял везде везде Окей хорошо Хорошо давай тогда будем заканчивать Это дело Хорошо тогда сессию мы сейчас еще одну направление [музыка] Хорошо давай тогда посмотрим что у нас целом есть и запустим твои тесты за 20 минут Вполне себе хорошо справился Мне кажется много чего реализовано Наши тесты соответственно Давай попробуем это дело балкам выполнить потому что
01:11:04 - 01:13:21
Скорее всего будет исключение если это автор All да сейчас он сбил биться у меня сбил лица и мы посмотрим там будет исключение потому что Да да мы видим что у нас исключение Как думаешь почему он выбросил исключение и ругается на автор твои догадки а там по идее читался Там должно быть применяется ко всем тестам не стоит забывать чтобы каждый тест живет отдельной жизни цикл по умолчанию и тут вопрос Нужен ли нам автор или все-таки Ну тут Наверное не нужны Давай тогда его дропнем и он реально нам не нужен Ну то
01:13:09 - 01:14:54
есть нам вообще даже состоянии никакой не нужно то есть Это лишнее Почему Потому что мы изолируем мы делаем Юнит тестом и Тестируем конкретный сценарии этот сценарий Разумеется не должен шарить свое состояние между другими изолированными атомарными тестами поэтому мы смело можем удалить и After All И разумеется автор и звал здесь она нам не нужно с этапом объекта Вполне себе норм не вижу никакой проблемы это можно делать на самом деле в тесте для простоты чтобы избавиться от этого метода с другой
01:14:17 - 01:15:37
стороны это можно ставить не вижу ничего сразу можно сказать что здесь необходимо сделать статическую статический переменную и их было бы неплохо финализировать потому что это Разумеется какие-то константы И зачем нам они для конкретного объекта за хотел бы в классе именно физбасс не тестового туда доберемся и туда мы доберемся и тут бы их вероятно тоже хорошо Разумеется кратно 3 У нас есть объект мы можем передать мы можем эту переменную оставить можно не оставлять Разумеется все что нам необходимо в этом
01:15:04 - 01:16:49
сценарии первое мы вызываем соответствующий метод первый аргумент у нас соответственно если у нас по условиям у нас должен вернуться мы можем сразу улучшить твой код сделать его как ты предлагаешь Да я почти начал это это Марафет ничего страшного Разумеется здесь у нас физ должен быть можно сделать его статическим импортом и на самом деле можно троечку даже сюда поставить и тогда у нас будет очень простой коротенький без каких-либо переменных он чет на ментал чуде подсказывает Да Нам необходимо еще
01:15:58 - 01:17:33
получить бантики здесь Разумеется Мы берем Get Boys из нашего и все следующий сценарий таким образом наш в одну строку свели следующий сценарий Мы также меняем здесь ставим Пятерочку А здесь соответственно база добавляем и последний сценарий когда это и другое Разумеется его тоже здесь уже у нас из вас только здесь у нас допустим 15 какое-то значение последний сценарий он принципе неплохой то есть мы берем тестировать сообщения в принципе резонно как по мне и что мы здесь делаем мы можем просто 16 сюда переставить
01:17:08 - 01:18:54
немножечко код сократить в целом как бы вот такие вот простые тесты можно сделать понятно дело если ты сделал чуть другие это вообще не значит что они правильные речь идет только о том выполнится они или нет что я просто их упростил насколько это возможно далее запустим тесты посмотрим насколько они выполняем обязательно что-то нормально такое случается и мы видим да не кратно выполнился Отлично На самом деле не кратно выполнился отлично то есть исключение было выброшено успешно Давай посмотрим
01:18:03 - 01:19:18
самый простой трем он возвращает собственно одинаковое значение как мы видим 70 522 разница только заключается в том что это два разных массива и здесь нужно сравнивать именно массивы поэтому не иссерей потому что в противном случае он будет сравнивать как объекты немножко другая ситуация ну как бы это не проблема сейчас Обнови была ошибка я тебя поздравляю выполнил посмотрим что он здесь здесь 30 секунд хорошо Ну во-первых string result это убрать вообще это не надо но предположим Я убрал то есть изначально мы должны проверять
01:18:52 - 01:20:36
Но можно наверное убрать это и файлы больше трех потому что по идее по идее правда Какое больше это мы убираем это нам не надо тут сокращение количество я бы наверное использовал что симпатичный в принципе можем убрать что можем брать кое-где мы можем убрать фигурные скобки так как у нас это одна строка на фигурной скобки ничего не решает тоже мы говорим мы говорим про количество реального кода который дает функционал а не просто Окей я подскажу на самом деле быстро на пальцах можно применить стринг Билдер
01:20:24 - 01:21:58
простой Билдер и сделать несколько стоит ментов первый если наш велью оно кратно то мы Разумеется Билдер и добавляем туда если у нас оно равно не равно 5 то мы Разумеется добавляем здесь еще одно значение и на этом в принципе все далее Нам необходимо только сделать проверку если больше нуля соответственно СБ берем to string и берем getbytes и все Да я согласен Вот такая вот простая задача Ну вот мы разобрались с тобой задачу и как считаешь сложная задача легко было сложно конечно но так вроде бы нормально
01:21:42 - 01:23:54
ты рассуждаешь ничего страшного нет то что чуть-чуть не получилось так как задумал тем не менее тесты принципе после небольших коррекции именно самих тестах прошли то есть функционал состоялся Это уже хорошо то что был немножко там где-то некрасивые неточный То есть это все экспертиза вопрос опыта кто-то видит легко и быстро кому-то нужно просто больше времени сообразить подумать это реально не самое важное здесь главное что получилось применить технологии создать сценарий видно что ориентируешься как вообще после интервью
01:23:12 - 01:24:29
себя чувствуешь какие у тебя ощущения Ну что надо немножко еще подучить спорят детально и какие-то моменты то есть что-то знаю где-то нормально Надо еще больше больше развиваться в этом А что будешь первым делом учить вот горишь уже что-то знаешь Хорошо чувствуешь что-то не очень Вот что-то наверное из того что мы прошли Ведь мы затронули далеко не все темы которые могут быть это вопрос проекта компании интерьера из того что мы прошли где-то чувствуешь себя Уверенно и где бы ты наверное бы позанимался бы еще какое-то время ой
01:23:51 - 01:25:07
извечный момент это конечно потому что все-таки там много практики и наверное все-таки что еще в любом случае само написание проектов задача даже где-то в тестах иногда попользовались многопоточность поэтому больше писать код и моменты которые именно столкнулся особенно если с проблемами это те даст в будущем больше просто профита в плане того что если все пошло в гладко В первый раз значит и особо ничего не получилось знаний и просто знакомился что есть какая-то технология А если ты нам хавался с
01:24:28 - 01:25:49
проблемой с проблемой там дня 32 и все-таки нашел в чем дело или сам догадался ты уже будешь знать это просто программирование тут надо понимать как это работает Они то что как это звучит хорошие слова Хорошие слова а ты говоришь проектами занимаешься заниматься Ты их пишешь сам или где-то там занимаешься проекты они крутые особенно когда кто-то может давать по ним обратную связь как у тебя Ой сейчас Ну как бы да когда я писал какие-то проекты был Однажды ментор и вот там прям очень много чего было всего
01:25:20 - 01:26:59
куча всего новой информации вплоть до передачи сообщений разными клиентами различные тесты Различные подходы архитектуры вот это все А когда ты сам пишешь что ты наверное больше закрепляешь информацию когда тебе именно необходимо новая технология которую больше наверное по требованию все равно нужен какой-то либо ментор либо помощник товарищ коллега неважно который проанализирует покажет ошибки может быть другое видение какое-то как мы с тобой разобрали То есть можно много можно сделать Там две строки при помощи
01:26:11 - 01:27:39
стринг билдера который избавляет нас от такого же да то есть это вопрос реально экспертизы обмена мнениями это круто что программисты могут это делать для этого большое пространство просто два человека даже на одном и том же уровне владеющим технологии Они видят мир немного по-другому и как работать тоже по-другому это это Абсолютно верно Поэтому всегда должна быть здравая дискуссия они бескомпромиссный обмен мнениями инженеров разработки программного обеспечения Хорошо тогда будем прощаться большое
01:27:03 - 01:28:26
спасибо что пришел сегодня к нам в гости с тобой была реально очень круто Все мы желаем тебе удачи развивайся и дальше было видно что ты волнуешься Лично мне кажется что это просто время просто будет немножечко уверенным себе у тебя хороший потенциал Ты можешь решать задачи видно ты хочешь знать что не боишься рассуждать просто не волнуйся Со временем это уйдет И разумеется не теряй Веру себя практикуйся и развивайся [музыка] вот так вот друзья так и прошло оно все собеседование Как вы видите Артем
01:27:52 - 01:29:13
неплохо справился с задачей он неплохо отвечал на вопросы безусловно можно получить и другие вопросы и другие задачи Но ведь это собеседование ведь это круто когда на одном собеседовании тебя спрашивают одно на другом другое таким образом проходя эти собеседование Ты все знаешь и больше и больше ты крепчаешь как специалист в то же время друзья Обратите внимание что вне зависимости от того насколько вы крутой специалист Работайте долго недолго вы так или иначе все равно подвергаетесь стрессу именно этому и пытаемся показать
01:28:35 - 01:29:31
на наших видео что друзья не стоит стрессовать интервью Это всего лишь еще одна ступенька в вашей карьере поэтому пробуйте Не бойтесь интервью щупайте узнавайте какие вопросы задают узнавайте какие ответы стоит давать на эти вопросы и все у вас жизни получится а я вам напоминаю вы на канале Джуд балл С вами был Макс Добрынин тот самый разработчик который разбирает вместе с вами технический интервью и нравится от вашего отзыва поэтому друзья прошу вас Подписывайтесь на наш канал ставьте колокольчик не пропускайте все самое
01:29:02 - 01:30:02
интересное что здесь происходит напоминаю у нас есть и Telegram канал мы там тоже постим офигенные посты разнообразные индивидуальные плюшки Лично от меня она сегодня это все друзья пока Пока До новых встреч
01:29:33 - 01:30:00