Подготовка к собеседованию на 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 то есть по библиотекам фреймворкам протоколом и так далее То есть Посмотрим как ты вообще насколько в курсе сейчас создам только но предлагаю для начала как всегда на самом деле классический вопрос Расскажи пожалуйста себе и над тем Какие Какую самую сложную задачу приходилось решать обо мне интересует приложение [музыка] [музыка] мы задания приложение по
00:00:00 - 00:01:41
составлению плана еды на день и подсчет калорий в день соответственно выборка твоя через файл Какое количество калорий Ты употребляешь ходить она вот это мы составляли на протяжении всего обучения и под конец мы готовили свой проект голосование голосование соответственно у меня лежит на как раз это чисто Ну ты занимался бэком фронтом я так занимаюсь я занимаюсь восстанавливаю сайты сейчас буду рисовать лендинг То есть у меня и фронт и за основу вот поэтому по Джаве Да сейчас извини пожалуйста меня просто очень много
00:01:18 - 00:02:55
уведомлений вылетает они все мешает да ничего страшного Вот соответственно этим я занимаюсь сейчас я ищу работу хочу уйти разрабатывать именно мне очень нравится работать потому что великолепно Framework потому что Java стал не хватать очень сильно помог мне кажется сейчас сильная хватит но сейчас не очень понравилось приложение все вот эти вот фундаментальные части они уже заведены на автоматику и собираешь просто делал настройки база данных классы их привязка управление бизнеса Вот это мне очень интересно
00:02:17 - 00:03:53
и бизнес логика и развертки понял тебя хорошо В целом Давай начнем по технической части и для начала начнем с гитару Мы знаем что есть два подхода это транк бейст и фичи brange знаешь почему они отличаются правильно да то есть ну я сейчас примерно могу сталкиваться сильно занят получается когда мы начинаем корректировать код мы делаем отдельную ветку и уже начинаем носить изменения вас происходит когда разрабатывается он ну как бы расширяется по веткам и потом уже в конце Я вот не знаю сталкивался потом по итогу Когда
00:03:13 - 00:04:40
программисты работают надо разработкой каждый час собирается хорошо Ну Truck Base вообще из названия понятно что это обратный подход что по факту никто не ответвляется то есть люди не делают дуплетки для того чтобы пилить какую-то логику не пилит прям в основную ветку и она является Светкой разработки и по факту так было давным-давно еще когда был свн до Гита там в принципе основная ветка называется не мейный Мастер и так далее Потому что ствол по сути переводится Вот Но по факту сейчас мы имеем
00:04:07 - 00:05:21
пранкфлоу в гите и оно такое довольно Сейчас супер популярное когда по сути да Мастер Это Def Но люди все равно ответвляются для того чтобы перейти потом мерзнуть в Main но по факту типа Мастер и т.д не как там раньше то что уходит а потом для того чтобы уйти там в тестовое окружение на прод еще куда-нибудь делается релизные ветки от мастера я не мастер уже не возвращаются Вот Но это вот так чтобы ты понимал Ну вообще стоит понимать какие есть там Flow на чем они построены вот опять же что там на фич брендж что там на Trang Base есть
00:04:48 - 00:06:05
там гид Flow вот этот пранкбейс каких только нет но какое-то представление Что такое Flow Ну то есть то как организованы ветки поскольку Ну не бывает так бывает конечно Но как правило у задачи есть поток типа то есть задача есть определенный путь который она должна пройти для того чтобы попасть на продакшн Вот и есть там вот как раз таки разные есть там вид Flow где здесь редко есть Мастер и ты сначала делаешь фичу она уходит в деф потом типа стартует релизный ветка там тестировщики на ней тестирует ты там
00:05:27 - 00:06:48
правишь баги которые тестирование Потом эта ветка она сливается и в Мастер и в деф назад потому что она могла уйти вперед там баги Фиксики Вот и мастер уходит на провод А есть вот транст когда у нас по сути вот фича какая-то попадает в Мастер и все фичи накидываются мастер постоянно стабилен готов к релизу тестировщики также тестили на Мастере и потом у нас релиз который уже уходит там в либо на интеграционный тестирование с другими системами либо в Production Вот и вот таких путей я про то что путей как
00:06:08 - 00:07:28
задачу она ходит идет до прода их давно несколько видов разных есть И если попадешь на работу примерно как бы столкнешься с тем что какой-то Fall там где используется Вот но хорошо немножко все лирика как бы небольшой экскурс так сказать Вот давай еще немножко по гитару Знаешь ли ты в чем разница между rebase и merge по-моему пример дело новую сохраняется предыдущих мы просто она не сохраняет не ошибаюсь Ну в целом Да все верно на самом деле мы небольшое еще Отличие в том что при бейзе они не только как бы он там поверх
00:06:48 - 00:08:16
накладываются твои изменения что он там еще также переписывает историю типа то есть идентификатор коммитов изменяются Каждый раз когда ты делаешь rebase Вот но зато мы имеем линейную историю без лишних коммитов о том что что-то куда-то был смёрзно там еще что-то ну то есть любители они как бы они делают как бы чисто аккуратно другие конечно проблемы Он предлагает тебе с ними как-нибудь может разобраться чем плохо либо например вот в целом все хорошо окей погнали дальше Давай поговорим про сборщить систему сборки расскажи
00:07:58 - 00:09:23
пожалуйста про пакетный менеджер maven Если конкретнее то про структуру Ну сборщик помогает нам собирать библиотеки мы там указываем по моему версию сборки мы указываем название проекта Можно даже Указать тип сборки типа товарных и там уже соответственно в этом помните мы подключаем и зависимости и плагины по сути это часть еще одна библиотека для подключения библиотека инструментов плагинов какой секции прописываются по сути там сердце Билд Билд оказывается плагины хорошо что такое плагины Ну добавочные программы
00:08:45 - 00:10:35
Можно конкретно пример рассказать выдаешь когда подключаю а нет косяк но в целом тут никаких хитростей нет по сути это вспомогательные утилиты которые в процессе сборки добавляет какую-то логику к сборке именно твоего кода это может быть Джека коп логин например который будет после проведения тестов соберет тебе сводку о том что у тебя протестировано что покрыты тестами что нет какой-то код каверы потом эту инфу может использовать например сонар или систему сборки для того чтобы выводить графики допустим
00:10:23 - 00:11:37
есть там компайлер плагин который указывает в какую конкретную версию кода тебе собирает там твое приложение супер много но по факту Да это вспомогательные утилиты не про граммульки может все специалисты Вот Но по факту так Знаешь ли ты для чего нужна секция depinet включение зависимости Только я не помню [музыка] Мы в одном разделе подключаем только Независимости а в другом разделе мы получаем где они зависимы друг от друга есть родители и там уже подробно расписываем Какой нам какой ребенком немножко не понял конечно в целом Да это
00:11:09 - 00:12:44
для многомодульных проектов для того чтобы мы задекларировали явно какие у нас могут быть зависимости в детях а потом в детях эти зависимости от этого менеджмент конкретно к себе подтягивать но уже без указания версии так далее Потому что они уже заранее были задекларированы так но в целом по моим хорошо погнали дальше Знаешь ли ты чем докер откубер Найс отличается вообще понял что нужно контейнер образ но Окей Хорошо давай Ну тогда что такое докер Для чего нужен и что нам нужно докер файле для того чтобы
00:12:04 - 00:13:22
Ну вот например наше приложение туда упаковать в образ значит докер начнем с самого простого сейчас от монолитности переходит много архитектурной системе чтобы дробить каждую программу на определенный ресурс чтобы друг друга необходим инструмент для вот этого такого ресурс выделяется не пересекаются позволяет делать и он формирует как что мы прям в форме проекта мы делаем только файл мы сейчас не помню но мы в нем указываем где проект после этого запускался докер он сформировал свою сборку подгружались эти там как бы
00:13:07 - 00:14:48
запускался компилятор пробегались все вот эти вот строки которые мы даже запускаем в проекте где Ешки и он собирал что-то как в образ И после этого его можно было размещать на докер который как я понимаю можно было просто оттуда копировать и запускать но собственно он вряд ли у тебя наверное запускал какую-то сборку поскольку как правило ты в докер файле указываешь там Java например который тебе нужно и он также докер быть типа его вытягивает спуливает и в докер хаб ты по факту Да это когда выкладываешь потом просто
00:14:08 - 00:15:20
кто-то другой может Твой образ оттуда спорить себе там и запустить Ну и по факту также там еще нужно указать просто там коса аргументы где какие-то до файлы лежат типа которые надо к себе скопировать там например в файловую систему контейнеры и n3point типа как стартануть приложение по факту Там просто передается Вот и путь до твоего джарника но целом Окей чем докер отличается от виртуальной машины 10 мы говорим про изолированность ресурсов там вот могу точно не знаю могу ошибаться значит когда мы запускаем виртуальную машину
00:14:44 - 00:16:08
там используется ресурсы А когда мы запускаем через docker Hub опять же он выделяет определенные ресурсы не занимает не запускаешь через докер хаб и у тебя ресурсов докер кого мне никак не связано докер хабка такая мэвин Central типа как github Откуда ты зависимость и берешь Здесь тоже самое ты можешь просто образ Откуда ты себе скачать ты на нем ничего не запускаешь Ты когда что-то запушиваешь ты потом просто сделать или как бы подключить она тебя подтянется вот по факту Отличие в том что у виртуальной машины есть ядро
00:15:34 - 00:16:53
операционной системы у Докера Нет это как бы виртуальный контейнер но он работает на уровне твоей операционной системы на которую ты работаешь твоего ядра вот в целом ты можешь тоже да изолировать ресурсы Отличие в том что дать они поэтому легко ясные Потому что свои операционки Нет виртуалки есть а хорошо cubernet по сути это самый популярный оркестратор то есть когда у нас допустим Один там образ и собственно один потом контейнер в докере мы можем там себе позволить его настраивать какое-то поведение ему
00:16:16 - 00:17:39
задавать там инфрой какой-то весь типа лот балансер к нему там добавить еще что-нибудь а когда у нас таких контейнеров уже 1000 нам уже сложно типа мануальными управлять и кудряется он имеет не только куча инструментов для того чтобы тебе управлять твоими контейнерами для того чтобы настраивать сетевое взаимодействие между ними там опять же там балансировщик нагрузки Перед каждым там под но там контейнер это подать типа Не суть важно балансировщик поставить Перед каждым годом Ingress еще что-нибудь штука
00:16:57 - 00:18:11
которая позволяет нам управлять через заданные настройки всеми контейнерами которые у нас есть как то так количество не вывозит поэтому Ну не то чтобы он не вывозят у него просто нет такого инструментария как который тебе позволяет универсально там настраивать все контейнеры есть там докерством но и можно пользоваться Но просто по прогрессивнее как бы у него инструменты получше там всякие чарты есть для того чтобы версия хранить там для тимплейта для твоих будущих шаблонов там их конфигурация еще что-нибудь там много
00:17:34 - 00:19:05
всего он очень большой Ну просто Да так удобнее управлять кучей контейнеров чем непосредственно с каждым Окей погнали дальше знаешь Ты что такое но тут как бы не надо прям супер хорошо это понимать но представление нужно иметь то есть идеи это ну я искренне надеюсь что сейчас там большинстве местного используется расшифровывается как консист integration Continuous Delivery это по сути методология которая позволяет нам построить процесс и так чтобы наши фичи непрерывно интегрировалась новая логика в нашу
00:18:21 - 00:19:35
систему и непрерывно потом также доставлялась до потребителя Ну или диплоился куда-то там на стенд вот по факту есть там всякие системы типа ну я бы рекомендовал в гитхабе как раз таки Ну в новый проект когда будешь делать домашку там есть вот там взять файл github вся Ямал и прописать там типа что-нибудь для того чтобы потом увидеть как у тебя githubby припуши твоих изменений проходит там тестирование допустим там анализ кода там еще что-нибудь какие-то такие тапчики вот по факту Да это методология
00:19:08 - 00:20:21
которая предполагает процесс что твой код проходит через разные этапы например тестирование там оборачивание в контейнер диплоидная не знаю на DF например окружение для разработчиков это как бы видишь как они там все проходят все зелененькие значит успех что-то где-то красненькое значит сломалась теста не прошли например на затестирование Проверить перепровести еще что-нибудь есть очень крутая книга называется проект Феникс Она небольшая Она небольшая про то как мины собрались сделали придумали диопс из него уже себя
00:19:47 - 00:20:55
как бы да она не сухая Такая прям художка поражение Чего как бы вот он через свои наблюдения как он пришел к этому так погнали дальше еще раз А когда ты рассказывал что проходит сборка у нас происходит теплой просто такие же процессы они есть жизненные цикл когда мы собираем уже проект варник это к этому относитесь Ай сидит у тебя на разных этапах могут вызываться определенные джабы Ну вот эти голос из мэйвен то есть условное Да например когда проходим тестирование у тебя вызовется там Клин verify допустим maving Clean verify да
00:20:26 - 00:21:55
Когда тебе надо собрать тестирование прошло потом тебе надо типа собрать джарник у тебя там до вызовет типа тест ну типа то есть тестирование мы уже провели тест джарник собрать Ну например для того чтобы упаковать там в докер образ там уже ничего с моим связанного нету по сути то есть на некоторых этапах Да действительно работает Собственно как мы еще но если у нас нет каких-то аналогов типа грейд но да Мы через мои Тестируем собираем но как бы дальше там уже все варьируется от требований и кольца Гейтс Ну типа
00:21:21 - 00:22:39
критериев Качества которые коду применяются то есть дальше там всякое другое другие системы могут работать есть такая штука также как снар кьюб типа которая анализирует код там на наличии каких-то уязвимостей там плохого кода еще что-нибудь и также ее можно в корячить в Твой вот этот paypaline ну по сути когда это типа трубу провод с этапами вот в один из этапов поставить сонар для того чтобы проверил твой кодовую базу Там тоже моими нет Типа мы там используется но они напрямую не связаны и весь этот процесс
00:22:01 - 00:23:13
вся сидит больше методология типа это именно подход как это все организовать вот конкретная пигментации они уже от каждого проекта вот проект к проекту могут разниться Ну как правило там тестирование и сборка в джарника на там везде допустим есть но например упаковка в докер там не везде это по факту больше нужно для того чтобы есть такая штука Market и ты просто делаешь вот эти вот процессы такими чтобы твой кот как можно скорее наиболее качественным попал к клиенту на рынок типа ну там чтобы ты быстрее мог того что ты
00:22:36 - 00:24:00
сделал новую фичу быстрее с этого мог больше прибыли получать вот если диету как бы методология про это как тебе построить процесс так чтобы быстро и безопасно отдавать новые фичи клиентам хорошо погнали дальше значит что такое зная только в теории значит что Он позволяет делать когда пользователь не помню кто там консьермер кто-то там второй называется Сейчас продюсер продюсером отправляет продюсер отправляет сообщение и она попадает в брокер если сервер либо железо концу мира не работают И как только он появляется сети он берет
00:23:21 - 00:24:47
копию письма отправляет ему получается ответ от этого он стирается прекрасная видно что ты в курсе что такие существуют то есть по факту это слишком абстрактный вопрос чем это лучше чем rest чем http просто какой-то взаимодействие напрямую я могу объяснить мы когда делаем запросу может быть доступны потом через брокер мы отправляем еще система сама живет хорошо просто да не знаю знаешь или нет но такой типа взаимодействия называется синхрондом то есть почти там Напрямую это синхронный доступ то есть отправили ждем сразу же
00:24:26 - 00:25:51
ответ какой-то асинхронный когда ты мой отправили и там ну уже ничего особо не ждем получит не получит поэтому я вот мог спросить какой это тип взаимодействие но ты наверное не понял вопрос потому что я почему-то называется идут но смотри Тебе не обязательно как бы иметь реактивный код для того чтобы была синхронным просто опять же в Джаве еще до Project Reactor был были completebull Huter которые из себя представляют как раз таки асинхронное взаимодействие тоже ты отдаешь управление а потом тебе
00:25:19 - 00:26:32
приходит какой-то колбек результат когда-нибудь потом работать твоего кода Вот но в целом Ну в общем да то есть когда нам прямо сейчас результат не нужен это синхрон когда нужен по факту В двух словах это так А знаешь ли ты что такое Кафка типа читал может быть целом хорошо что ты понимаешь вот просто Кафка это как бы сейчас такой самый популярный пример и она несколько отличается от всех остальных Вот она как можно писать рыбы тоже популярны Но вот rabbiting и Кафка вот Rabbit это условно то как раньше брокера строили а кавка по
00:26:14 - 00:27:43
другому организована это другой вид как вы брокеров вот вас по сути это пуш-модель ребятки где продюсер типа как ты говорил там знает куда отправить опрашивает там что-то хранит где-то и так далее Все настраивает А как это пол модель это больше ивент драйвен так называемая Когда у нас кончюмер он костюмерный а продюсер тупой он пульнул и все забыл вообще не знает больше когда ему еще забирать а костюмер он как раз таки понимает когда ему брать типа сколько ему брать там какими-то и молотами то есть супер умная фигня и по
00:27:07 - 00:28:21
факту там также и Кафка хранит все на диске там есть целая файловое хранилище типа зубкипер полноценный поэтому она более отказоустойчивая сама по себе Ну и как бы Когда на этом расположена в Кафки они тоже немножко Иначе она прямо разительно отличается я ну сомневаюсь что кто-то будет спрашивать про там особенности работы Кафки Ну просто как бы иметь представление о том что она есть как примерно с брокеров там немножко другого вида Ну стоит а что это в целом Просто когда смотрел видео [музыка]
00:27:44 - 00:29:00
так и есть это отдельный сервис отдельный сервис для взаимодействия там твои других сервисов хорошо погнали дальше Знаешь ли ты чем слов отличается от rest обращение поинтом то есть когда мы в запросах указываем правильное допустим если возьмем крут приложения то раз сама ссылку мы записываем она должна у нас быть о правила написан то есть они то чтобы получить все письма а там прям подробно будет расписан Допустим если мы берем чисто по юзерам там пишется берем его и дишка пишется соответственно этим запрос у нас
00:28:24 - 00:29:57
формируется и передается хорошо вот как бы ты организовал методы Ну чтобы он тебе допустим принимает Хорошо ты вот один Ну типа Окей Ты там взял айдишник там один передал удалил а если ты передашь его еще раз когда тебе что должно вернуться Вот все Ну и в restful вообще есть много там спорных моментов и вот как правило есть положение о том что метод Delete должен быть один патентный Ну то есть сколько бы ты раз там не вызывал delete определенный определенный все должно защитить одинаковый результат В твоем
00:29:16 - 00:30:36
случае типа Delete импотентные уже что мы получается сначала удалили айтишник получили когда еще раз вызвали мы получили Exception типа 404 Допустим или 400 бы 3 Квеста суть важно нет в целом как бы ничего страшного В любом случае передавать если авторизованный пользователь удаляем допустим пост есть ничего не понял Честно говоря когда мы допустим я захожу обычно администратор у меня если трагичник он не интересен не интересует айтишник вот этого поста Я когда делаю удалить мобильный слой подождать
00:30:26 - 00:31:50
айдишник этого поста получается Ну да ну здесь больше не про то что типа тебе надо указывать айтишник а про то что тебе надо при определенным айтишнике возвращать одинаковый результат вот так вот сколько бы раз ты не вызвал Ну типа да патентность это про это типа что у тебя они даже повторяемые возвращать одинаковый результат но я в целом как бы Согласен сам с тобой чаще происходило Так что действительно кидается Вот Но это немножко не прост само по себе тогда получается а соп это протокол полноценный это не
00:31:40 - 00:32:57
архитектурный стиль как раз Simple обжига Application протокол он нифига не Simple но в чем его минусы в том что он работает чисто по Да работает там по поверхности не считая этого он работает только xml то есть здесь на формат данных который можно переслать это xml чем он был Хорош тем что давным-давно [музыка] есть такие понять как вы сдэль xsd схемы где ты можешь описывать форматы данных и методы которые у твоего сервера есть который можно вызвать из этого там было сделано через джекс би и так далее коды генерация то
00:32:22 - 00:33:49
есть было удобно что по сути xml файл который все описывает из него мы всю кодовую базу получаем Но для взаимодействия Вот сейчас как бы это уже скорее всего дело легасе то есть проектах секундом будет встречаться соб Но вопрос типа Чем отличается популярная по факту это полноценный протокол они архитектурный стиль плюс он работает вот по росту Да ты там пофиг вообще типа там башни теперь взаимодействовал что угодно там перед передавать хоть про табаф хоть там джисон хоть тот же самый xml окей Тогда погнали дальше Знаешь ли ты
00:33:05 - 00:34:33
для чего нужен ДВТ Джей W ification хорошо но для начала можно расшифровать [музыка] и передается пользователь не нужно каждый раз он просто клиентской стороны проверяет на наличие хорошо но только тут не обязательно про куки типа куки могут быть выключены а при этом в заголовке все равно можем гонять Берн токен допустим же точно какой-нибудь хорошо это раз тогда два Вот и сказал для аутентификации а для авторизации не подходит И чем вообще аутентификация от авторизации отличается наоборот Наоборот
00:33:48 - 00:35:34
авторизация это правда Окей немножко ускориться вопрос Еще довольно много так погнали дальше ты для чего нужен слайдер я для того чтобы вывести рабочий инструмент для очень очень интересная тема почему так решил Потому что там можно запрос попробовать отправить Ну да то есть заходишь Я на проверяешь каждый пункт Ну зачем так сложно тогда есть постман не можно хранить послан коллекции типа где у нас будут прописаны все наши поинты там которые есть еще точно также можно тронуть если допустим тестировщиками
00:35:30 - 00:36:56
[музыка] я думаю не совсем удобно свагер ты его запускаешь появляется и все Ты видишь каждый работает здесь скорее всего внутренний процесс работы ускорения работы но я про то что саггер не для этого типа на самом нет тестировщиком свагер тоже Ну не особо нужен во-первых как бы как получается что когда ты разрабатываешь Ты окей ты добавляешь слагер свой код но часто тестировщики они уже заранее на основании требований накидывают тест кейсы типа это с кейсы они могут разными путями накидывать как бы в разных
00:36:39 - 00:37:54
системах хранить плюс есть это автою и тогда они как бы себе заранее заводят весь инструментарий для того чтобы там что-то у тебя проверять И как бы на момент когда ты передаешь код для тестирования у них уже готова все твои поинты куда чего послать нам надо и так далее Вот Но с лагерь это не столько для тестирования сколько для документирования того что какие у тебя поинты есть Каким методом работают из твоих росточек это нужно Да окей для тестирование Это тоже может быть полезно то есть они могут там зайти тыкнуть посмотреть
00:37:16 - 00:38:27
особенно круто если типа ты прям хорошо ведешь документацию что-то там примеры валидные они просто там какие-то дефолтные значения проставлены это раз но по факту по большей части это нужно для того чтобы как документация для того чтобы любое не только тестировщик мог зайти и увидеть типа что у тебя есть чем предстоит работать А может быть это твой клиент который будет стучаться в твой сервис и он хочет сам понять взаимодействие мы можем фигачить таблицы как бы как не знаю 20 лет назад и по таблицам интеграции делать А можем
00:37:51 - 00:38:57
через лагерь Когда у нас есть файл как бы с полным описанием отдать его клиенту Клиент по таким Ну тем самым построив контракт то есть взаимодействие между нами клиент сделать свой свою работу будет к тебе ходить есть Но на самом деле он выкатывается но наружу никогда не доступен все равно То есть это все больше для внутренней кухни дальше Давай поговорим про солят пожалуйста коротко и знаю не знаю что это принцип программирования соблюдение контакт вот как они расшифровываются Я знаю что пять букв и
00:38:25 - 00:39:49
каждый я сразу говорю я не знаю Пока еще нет уделил время почти ты будешь по практике типа ты больше по практике скорее сюда практики [музыка] резюме на поиск на вакансии с работы дела поэтому соль это короче самая популярная он настолько популярный что у меня его спрашивали что я когда жена Там шесть лет назад пришел что вот я недавно тоже работу менял как бы и даже и опять меня спросили Вот тут Конечно все там глубина как бы ответа меняется зависимости от грейда Но это вопрос супер важен очень важно
00:39:18 - 00:40:48
понимать и желательно как бы не просто прочитать что расшифровывается а именно выстроить все понимание того на конкретных примерах типа как эти принципы работают хорошо давай тогда пойдем дальше Расскажи пожалуйста Для чего используется кэширование чтобы базу данных загружать постоянно но я буду всегда говорить со своей конечно тогда же лучше используется для того чтобы мы не обращались постоянно в базу потому что каждый обращении базу дорогостоящий процесс он занимает время ресурсы поэтому очень удобно Если есть очень
00:40:10 - 00:41:32
частый запросы чтобы Ну не постоянно подгружаться если мы вывели картинку мы потом можем обратиться поэтому другое дело не только с базами работает я могу ошибаться то есть когда мы выдаем Джейсон формат страницу может быть полностью Короче все объекты которые можем выделить ленту и все могут решиться Ну то есть из любой системы там принципе не только там с базы данных есть тебе надо куда-то по сети то результат ты можешь закошировать для того чтобы в следующий раз опять не идти за ним по сети хорошо Может ли ты называть самый
00:41:01 - 00:42:26
простой способ реализации Но как ты сам бы сделал быстренько конечно допустим тебе надо хранить пользователей и их питомцев Я бы на объекте [музыка] куда во что хочешь сказать в кэш дать типа что представляет Ну самый простой кэш это что может быть ссылка может какая-нибудь ссылка на что Мне кажется Ты усложняешь Может быть потому что я сейчас понять что у меня есть объект Я помечаю он конечно был все и блин Нет я говорю ты забудь про кашу был типа вот у тебя есть просто не знаю спригга Нет у нас есть там
00:41:59 - 00:43:46
просто Java допустим у нас есть какой-то слой там библиотека который куда-то по сети и нам надо результат куда мы можем сложить в попугаешь Ну тогда она будет на файловую систему ходить каждый раз для того чтобы что-то прочитать Ну на клиентской стране тогда мы один раз погрузили сохранили Нет мы можем просто положить это в память в память мы можем положить это в какой структуру данных типа в хэшмэп допустим еще куда-нибудь вот вопрос был про это самый простой способ того как можно сделать быстрый кэш сам быстро
00:43:42 - 00:44:57
кэшем потому быстро потому что он в памяти лежит типа не куда-то то что ты делаешь У тебя тоже есть там кэш-менеджер который тебе организуют коллекцию по факту он конечно поумнее потому что мы тут ели всякие есть Ну то есть время жизни сообщение в кашель там еще что-нибудь вот в том числе и там куда тоже по сети ходим слышно вот короче Сам простой способ коллекцию тут конечно то что надо будет как-то очищать раз какое-то время сколько она может разрастись просто и заполнить тебе весь хип но в целом
00:44:24 - 00:45:40
как-то так Хорошо давай тогда поговорим чуть-чуть вот по Джаве потом немножко про базы и спринг и принципе Мы закончили потому что про структура данных ну просто я очень часто вижу хорошо данных то есть Расскажи про иерархию интерфейсов Collection Framework лист получается от него это множество А что еще есть у Эдик и еще есть очередь хорошо чем стек отличается очень очереди стек работу по принципу Live очередь порядка берем объект первый зашел последний вышел последний зашел первый вышел а очереди первый
00:45:12 - 00:46:59
зашел первый вышел хорошо Как мы можем обойти элементы коллекции интерфейс Но вот они позволяют прогонять объекты по вся коллекция удается позволяет по каждой каждом ментов Алекс пройтись А есть момент обхода литератором мы изменим коллекцию что произойдет Ну вызовем Remove на ней зависит Collection Framework Я думаю что ничего не произойдет потому что взял next и сделал ремув типа этот Next этого же объект Ну ну итераторы с помощью тиратора ты получил элемент и ты решила элемент удалить из этой
00:47:07 - 00:48:34
коллекции но тех из них элементы можешь Получить можешь удалить случится ли что-то момент прохода Не знаю Я думаю что-то произойдет хорошо Красная выписка тут пора ждет Необычная штука это называется контакт модификешник сепшн Почему can Одному Богу известны поскольку это многопоточном приложении тоже может выпасть но по факту просто вот литераторы которые используются в Java Collection 3 workinny Fail Fast типа то есть если вдруг коллекция была изменена и кидает исключение вот Карен пакете там коллекции Fail сейф литераторами там
00:48:47 - 00:50:26
если они изменяются другими потоками например эти коллекции то ничего не происходит то есть она продолжает работать просто данные может получить не совсем актуальные Но типа не страшно многопоточная среда ты готов платить за актуальность [музыка] нормальным доступом хорошо погнали тогда дальше по коллекциям расскажи чем отличается такое спросить хэшет и линкод хэштет летний хер сет следует из названия linkit мы слева справа выбран объект понимаем какие у нас есть как у нас идет объект следующий
00:49:44 - 00:51:05
предыдущий сайт мы просто храним кучу которой и они ну не дублируются а то что мы знаем слева справа в Ленте объекты там что-то дает вам в плане характеристики коллекции это дает нам то есть мы очень долго ищем скорость ставки Но ведь мы все-таки говорим про отличия еще пока с хэштетом со скоростью ставки тоже нет проблем хорошо мы сейчас говорим про такое свойство коллекции как упорядочность типа у нас есть порядок в порядке вставки у тебя возвращает элементы Окей давай тогда вот такой вопрос часто спрашивают чем реалист от
00:50:36 - 00:52:21
linkedista отличается но давай мы немножко этот вопрос изменим [музыка] вот допустим что у тебя есть какая-то коллекция Да с большим количеством элементов и на серваке на котором крутится твой сервис там осталось место Примерно вот под эту коллекцию чтобы ты использовал релиз или и мы его из этой коллекции получается будем в эту коллекцию загружаем объект и потом коллекции работает все что тебя требуется это положить куда-то вот я спрашиваю Куда в рейлист или в лингвист в linked Почему не понял
00:51:49 - 00:53:28
синхронизирует получается данные запросов не будет раздавать еще что с чем синхронизировано мы на сервере нет тогда не знаю я могу общаться как бы и не синхронизированный не знаешь чего ты это взял Вот но здесь как раз таки Ну во-первых стоило уточнить опять же да какие операции мы планируем делать чаще всего но по факту если надо просто сложить там хранить и обходить то стоит учесть что у нас рейлист он на основе чего построен плохо Это плохо массив памяти как Что из себя представляет последовательно
00:53:25 - 00:55:01
это последовательный участок А если у нас на серваке место примерно под коллекцию нас нет гарантии что этот участок будет последовательно возможно память будет типа фрагментировано тогда мы не сможем положить а ну это вот такой небольшой трики вопрос он получается позволяет раскидывать Там просто объекты типа получается который хранят ссылки друг на друга То есть ты можешь эти объекты где будет место у тебя туда оно и сложится так хорошо Давай пойдем немножко дальше Знаешь ли ты чем компаратор от
00:54:46 - 00:55:59
comparable отличается плохо знаю что там я просто думаю сразу второй тоже интерфейс они оба интерфейсы собственно но только одного метода Принимает два объекты сравнивать между собой 2 принимает один объект сравнивать Ну и собственно часто спрашивают тоже про компаратор кампера был плюс проток Какие параметры принимаются какой-то лучше использовать что Когда возвращается из них Но тут стоит знать конечно погнали дальше тогда расскажи В чем разница между статическим и динамическим связыванием динамическая Скорее всего в процессе
00:55:32 - 00:56:51
работы программы связываются зависимостью Это отсылка скорее всего к бину спрингу когда мы просто Gio Какой еще раз вопрос Повтори пожалуйста не знаю откуда взял зависимость Типа какой В чем разница между статическим и динамическим связыванием Java не знаю Ну ты верно что динамическая связывание ран тайме Но вот простой пример но статическое компиляции простой пример нет как будто просто Знакомые слова выдаешь вот есть у нас переопределение метода А есть перегрузка что что статическое что динамическое связывание
00:56:37 - 00:58:17
О я помню ты рассказывал динамическая перегрузка у нас будет статическое переопределение но я не помню я помню что это компиляцию определяется Но что именно только наоборот Да переопределение у нас динамическое перегрузка статическая прикол в том что какую например функцию тебе вызвать Тебе может быть известно на этапе компиляции А может только в ран тайме и вот на этапе компиляции статическое связаны и это именно перегрузка Потому что ты вызываешь уже функцию энным набором параметров и у тебя как бы GM условно
00:57:39 - 00:58:58
компилятор знает что тебе с таким набором параметров только вот этот метод один У него все однозначно а когда мы делаем переопределение у нас сигнатура одинаковая поэтому о том на каком объекте вызовется этот метод потому что может быть иерархия какая-то интерфейс условно там 10 каких-то имплементаций Которые теперь определяет и вот какой из этих конкретных объектов будет в нужный момент у нас будет Понятно только во время исполнения вот в этом суть погнали дальше тогда я можно сказать на вопросы
00:58:26 - 00:59:45
один из методов переопределения но Вероятно это единственный способ переопределения просто как Для меня это как маркер есть overload А есть о вероятно с перегрузка Когда у нас разное количество параметров одинаковое имя хорошо погнали немножко многопоточке знаешь ли ты что такое Томик типа и зачем они нужны для синхронизации хорошо какие методы есть короче переменный [музыка] чем плохо что в алаталии мы латайл помещается допустим поле которое должно быть синхронизировано то есть мы не сможем из
00:59:05 - 01:00:28
разных потоков запрашивать по почте сливается по точности пока у нас занят переменная где-то в чем-то у нас случится вот про Томик не могу сказать ты говоришь не правду типа то есть это не синхронизация есть такая штука Как Джоу номер модел Во первых и у тебя получается исходя из неё у каждого каждый стек каждый поток кэширует к себе типа переменные вот эти вот состояния каждый свой кэш и за счет этого типа Если ты не делаешь переменную Lada тогда каждый поток работать со своей своим экземпляром переменной А
01:00:23 - 01:01:55
если делаешь тогда у тебя оно пишется напрямую без кэширования и все потоки видят изменения и прикол в том что ты говоришь синхронизацию но Java Memory Model дает гарантию типа про то что у нас запись переменную произойдет до чтения из другого потока То есть если мы изменили в одном то тогда другой поток увидит это изменение гарантированно Вот Но чем а Томик о том а томики отличаются от этого тем что в итоге как ты сказал типа операции атомарные То есть у нас допустим для счетчика нам в latal чисто
01:01:11 - 01:02:32
не подойдет потому что у нас есть гарантия записи перед чтением типа что запись be for чтение там последующие другого потока но у нас нет гарантии что в тот момент когда у нас нужно увеличить и потом записать у нас нет гарантии что у нас вот эту увеличение как бы она будет успеет быть записано до того как типа другой поток увидит вот а томики они типа у них есть методы клиент клиент и так далее Все такого рода они как бы гарантированно увеличение и запись запись производит в одно действие так сказать но тут еще могут спросить как
01:01:54 - 01:03:20
они работают под капотом и тут уже такая штука там идет как оптимистичная блокировка в целом как бы видишь Сказал что атомарные чуть-чуть капнуть как бы видно что ты не совсем понимаешь Что вообще но в целом-то хорошо погнали дальше Ну у меня есть вопрос про оптимистично пессимистичный блокировка но я думаю что мы его по скипнем Давай немножко про базы поговорим Расскажи пожалуйста что такое денормализация баз данных не знаю а нормализация тоже не знаешь хорошо база данных такие штуки как нормальные формы по классике их три и по
01:02:37 - 01:03:56
сути они приводят к тому что у нас есть сущности какие-то там допустим опять же владелец и питомец надо растаскивать по разным таблицам отдельно нормализации это процесс обратный когда мы несколько таблиц сливаем в одну но немножко избыточную Но для того чтобы быстрее выполнять запросы поскольку у нас есть две таблицы делать дорогие типа сами по себе по времени исполнения и возможно иногда мы можем позволить себе как бы чуть больше данных хранить но при этом сильно быстрее получать Вот для этого нужно
01:03:23 - 01:04:38
нормализации Знаешь ли ты давай поговорим про транзакционность и что такое есть Acid встречал Ну сейчас не вспомню Окей но по факту как могу хорошо Что такое транзакция транзакция это операция которая либо свойство операции которые бы точно выполнить либо точно не выпустилась не будет состояния но по факту Вот это принципы того как должна быть построена хорошая транзакция это атомарность ассистентность изолированности и надежность Вот но про это часто спрашивают только про баз данных начинается там также потом
01:04:00 - 01:05:36
уровень изолированности Там есть разные уровни изоляции транзакции их там тоже несколько штук Ну просто рекомендовала бы почитать для развития хорошо погнали немножко Spring Расскажи пожалуйста какой жизненный цикл объектов который создает Spring создается контекст которые [музыка] И все Дальше он начинает работать с этим контекстом с этим а можешь поподробнее немножко слишком абстрактно Нет не могу я понимаю что на этапе контекст получается все эти бины все эти компоненты и потом сначала не сами бины
01:04:53 - 01:06:24
сначала собирается бенди финиш на основе аннотации То есть это по сути скелет будущего бина то есть зависимость Какие свойства там так далее То есть это все передается после этого там отрабатывают кучу всяких возможных этапов типа есть эвр интерфейсы там контекст старты еще что-нибудь которых есть метод у нас начинает отрабатывает методы интерфейса уэйр автосет потом подключается он проходит представление свойств зависимости потом вызывается Бин пост процессоры пост процесс аннотация Вот это точно
01:05:54 - 01:07:28
Я рекомендую почитать там этих этапов штук 10 не надо их все знать наизусть но надо понимать что типа жизненный цикл он состоит из определенных этапов что сначала собираются бенди финишены потом поэтому скелету они начинают уже заполняться и плюс мы можем вмешаться в этот жизненный цикл чтобы как-то либо донастроить либо например отсканировать какую-то библиотеку которая у нас нет доступа и она не имеет но сделать типа экземпляров библиотеке там Бином например нашем контексте что потом отрабатывают всякие типа ты
01:06:52 - 01:08:00
во-первых когда Бин объявляешь ты можешь объявить метод как параметр в ротации Бин это будет метод для который отработает при для инициализации твоего вина и также метод пост контракт аннотация постконстракт Она позволяет тебе донастроить типа созданный Бин То есть как правило нужно для того чтобы какие-то свойства там тоже сходить куда-то Может в базу Там или в кэш что-то записать и также с тные методы типа также ты вину можешь назначить строй метод и аннотация приднестрой Вот который нужно тоже для
01:07:26 - 01:08:37
того чтобы например освободить соединение перед тем как приложение завершится хорошо Знаешь ли ты чем скоуп синглтон отличается от Prototype не хорошо нет так нет А знаешь что вообще скопы у бинов да А знаешь какие они есть Это плохо то есть надо знать что скопы синглтон по умолчанию то есть другого не указал у тебя значит этот блин будет единственный завершенность приложения он один типа то есть у тебя кто бы не хотел себе этот Бин это будет один и тот же Бин всегда прототип Наоборот ты типа можешь на
01:08:02 - 01:09:35
каждый Вызов бинфекторе будет возвращаться новый экземпляр будет каждый раз новый Нужно когда там стоит разных соединений хранить еще что-нибудь Ну вот их несколько штук там словно сиглтон прототип http сешон сокет по моему еще какой-то но по факту чаще всего используется Вот именно синглтона прототип хорошо в springe есть аннотация компании репозитория из сервис в чем функциональная разница между ними еще раз Какой первый назвал компонент компонент я ну из практики скажем так [музыка] классы я поначалу на 20 сервис про
01:09:10 - 01:10:58
репозитории это тот класс который мне уже работали посредством с базы данных То есть у меня есть база данных У меня 7 подключение Где формируется уже непосредственно запросы базу данных вас я получил репозитории и компонент Я кстати все еще путаю между компонентами Чем отличается вот еще есть ротация контроллер Ну там просто нокила на вопросы контроллера не было но по факту В чем отличается компонент бина это просто компонент это аннотация то уровне класса Оби на уровне метода типа То есть ты не можешь класс образовать
01:10:38 - 01:12:05
Бином они оба создают по сути себе Бин но компонент как бы да это просто ты вешаешь над классом через метод инициализируешь вот и это как бы тоже немножко зарождает сомнения в том что ты точно понимаешь о чем ты говоришь а по поводу того что сервис ты типа говоришь утилитный класс но это ты правильно сказал про бизнес логику Потому что это не утилит типа вот утилитный класс это особый классы которые содержат только там статические методы и приватный конструктор вот носи аннотация ломборке утилите класс это не
01:11:32 - 01:12:51
одно и то же типа по сути бизнес логика это не утилить в-третьих [музыка] функционально между ними Нет разницы между этими мутациями если ты зайдешь посмотреть в сервис аннотацию почитать Там будет написано что это алиас для компонент типа это то же самое что и компонент просто нужно для того чтобы разработчику глазами была индикация просто маркер а функционально Ничем не отличается Но вот репозитория типа это по сути тоже для компонента но там также добавляются что я говорю заходить в исходники
01:12:12 - 01:13:31
смотреть и в аннотации репозитория написано что это тоже лес но при этом там есть дополнительная обработчики для исключения То есть когда исключение транслируется в Стрелковое исключение это не никнейм это Блин я по-русски слово забыл напиши мне Потом перейду разберусь типа не погоняло сейчас Аля прозвище прозвище сейчас мне псевдоним псевдоним вот псевдоним точно хорошо есть такие понятия как фильтрс листнер с интерсепторс ничего не отличаются работал построен на фильтрах кстати говоря спринговых собственно
01:12:54 - 01:14:22
штуки которые перехватывают запросы и ответы как бы могут либо доплагирования настраивает либо отбривать эти запросы не подходят Алис нас это есть сервер То есть каждый раз происходит событие вызывается этот метод поменьше так хорошо но давай поспленгу еще попробуем шанс реабилитироваться Расскажи что такое депозиция внедрение зависит Что значит когда мы цепляем и короче частных случаев когда мы получаем аннотации определенный класс у нас происходит [музыка] внедрение зависимость из бина наш класс
01:14:07 - 01:15:53
и дальше у нас происходит Ну хорошо если мы изолируемся немножко спринга и его средств вот концептуально что такое когда мы Передаем управление программе [музыка] в этот момент хорошо здесь уже подвязывается передача внедрение зависимости здесь сама программа она автоматически внедряет те параметры которые только не программа фреймворк по сути То есть когда мы выдаем Передаем фреймворку управление но чаще всего фреймворкете на том построен что это он вызывает наш код и данном случае с депарница injection Да
01:15:13 - 01:16:37
ты верно сказал что если мы вспомним предыдущего вопросы Что управление жизненным циклом объектов перекладывается на плечи фреймворка типа то есть он занимается инициализацией и внедрением зависимости они мы сами руками в целом хорошо ответ засчитано по хайбер на эту парочку вопросов чисто прогоним знаешь ты какие Читай по есть хайбер найти и какой из них по умолчанию чем они отличаются сейчас я тут может отвечает не помню даже не знаю Мне только единственное остаться идет это с чем-то с пулом подключением
01:16:15 - 01:17:46
нет фич Type это их два игр и Lazy по сути это то как ты связанная с сущности вытаскиваешь Когда у нас есть Join тогда зависимые таблицы либо не погружается короче очень запрос как только мы типа вызываем на них Гетти у нас запросы данные Окей А знаешь ли ты что такое проблема N + 1 до когда когда мы вызываем объект зависимости и в этих же полях также ссылка [музыка] Нет нет не про это Ну и она так не будет работать по факту может такое случиться только если ты там ту стринг крио там переназвал не захотел это
01:17:20 - 01:19:15
где-то заблокировать там зациклируется и все Будьте но да но это не про это когда мы вызываем зависимый объект здесь помню что где-то здесь это не только с игр слайде это тоже актуально поскольку у тебя сразу не сгенерится энт запросов типа но как только ты постучишься к ним Да они повалят суть в чем что допустим у нас опять же пользователь и у него есть не знаю вот с питомцы давай опять на питомца у меня да нет нет я сам домашние животные вот ну и короче да У пользователя есть 5 кошечек Если захочешь вытащить
01:18:42 - 01:20:29
пользователя со всеми его Кошечка ты сделаешь один запрос для пользователя и 5 запросов для кошечек типа для каждой вот отдельной сущности которая относится к Этому пользователю отдельный запрос этот стойку То есть это самая популярная ошибка там людей без опыта что как только у тебя есть связь какая-то вон тумане допустим ты вытащил этого чувака и У тебя с ним пошло генерится энт запросов для каждой книги которую он за Джонни вот знаешь слышал ты про это знаешь как это лечится о скажем так есть источник который могу
01:19:46 - 01:21:19
просто обратиться посмотреть как бы я прям до стол не запоминал я понимал где там расписано общий принцип и все Сейчас не скажу но может быть даже протестировать Ты мне дашь минут 5-10 отвечу у меня У меня есть Да в целом нет необходимости конечно но по сути оно лечится двумя способами либо ты пишешь Ну типа сам пишет на тему запрос Джой нам и фетишко быть данные либо ты используешь интеграф интеграф это Хабиб аннотация которая позволяет себе указать какую связанную сущность надо вытаскивать вместе с твоей типа при запросе вот прям
01:20:33 - 01:21:58
атрибуты передаются в принципе все Ну чисто бонусный тебе вопрос по хайбер Нет это знаешь ли ты что такое грязная проверка нет Окей по сути представим ситуацию что [музыка] Вот у тебя есть pencity gpl какая-то ты допустим открываешь транзакцию опять же юзер Да и ты делаешь ему там все седнейм в транзакции Set name допустим Алексей И после этого у тебя транзакция комитится и после коммита транзакции у тебя в базе данных строчка с Алексеем тоже обновится поскольку ты не вызывал Сам типа не сейв менеджерсист спрашивает еще отличается
01:21:16 - 01:23:14
но не суть важно ты никак Ничего не сохранял Ты просто в сущности в GPS который у тебя в приложении обновил свойства и после коммита она у тебя строчку базе тоже обновилась произошла синхронизации это есть механизм грязной проверки вот тут еще тоже есть интересные вопросы Чем отличается и так далее ну короче То есть можно глубоко довольно копать но в принципе Мы закончили по интервью то есть по я вот вижу что значит касается начальной части у нас там свагер брокеры Там rest и так далее хорошо будет у хорошо презентация у тебя в
01:22:29 - 01:24:06
целом хороший то есть задача интересно которые ты занимался Ну потом вот по технической части как-то постригу честно говоря нехорошо по хайбер на это тоже не хорошо то есть все по нулям Ну пройдя объяснения лайк было понятно что ты понимаешь зачем это нужно хотя бы по многопоточке тоже пробелы целом что чтобы я бы тебе предложил У нас есть во-первых будет запись сейчас надо будет ее сконверкнуть там наверное после после обеда появится Даша пришлет 0 Я наверное даже лично могу скинуть по записи пройтись еще раз
01:23:31 - 01:25:18
вот читать как раз таки про многопоточку там синхронизации чтобы просто ты как-то словом синхронизации очень много кидаешься типа где надо где не надо где оно вообще неуместно и так далее То есть чувствуется что ты просто не знаешь как бы зачем там она вообще работает как работает там тогда зачем это надо как вообще память возможно встроена по спрингу тоже но попутно не считая интервью у тебя также есть если тебе не скидывали А подожди если тебе не скидывали да то Попроси пожалуйста у Даши таблицу знаний У нас
01:24:24 - 01:25:38
есть таблица знаний где указаны все в принципе там есть и вопросы сегодняшнего интервью и они разбиты по грейдам типа то есть когда что ты должен там знать там цветом прям выделено Вот и можно понять себя проверять И плюс там есть список литературы то есть покажет там с тем там есть что где почитать вот в целом как бы ну я понимаю что ты скорее всего действительно такой товарищ Который больше по практике то есть что-то там попробовать сделать как бы заведется не заведется но опять же вот мы когда приходили на интервью вот у
01:25:02 - 01:26:10
меня допустим есть час для того чтобы понять знаешь или не знаешь И вот сегодня как бы мы провели этот час но мне кажется что не знаешь я бы не взял например Но это хорошо то есть мы это выявили теперь будет размышления над этим работать в целом по поводу домашек там каких-то задачек себе я тоже понял Даша она тебе скинет можно действительно каждую неделю там но больше выполнять я могу проверять или можно там консультация какое-то обсуждение пускать большую длительный и Средней по сложности Где будут точно ключевые
01:25:36 - 01:26:57
моменты использоваться в современном стеке и раз в неделю созваниваться То есть ты будешь меня наводить будешь говорить ошибки будешь говорить но мне ревью и потом следующий это не исключено что одна неделя одно задание может быть да конечно субботу после 10 после 11 но в целом как бы хорошо то есть не забудь пожалуйста узнать про таблицу знаний очень важно и запись Я тоже попозже предоставлю К сожалению от их надо будет но она будет приятно пообщаться устроили сегодня хорошую прожарку в целом Ну я не знаю Я доволен что мы
01:26:18 - 01:27:41
столько всего нашли есть чем-то работать поэтому желаю тебе успехов выходные и пока пока пока
01:27:22 - 01:27:41