Подготовка к собеседованию на Node.js Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
Всем привет Вы на канале скилл блог и в этом выпуске я проведу тестовый собеседование с подписчиком Дело в том что недавно решил проводить тестовые технические собеседования с подписчиками своего канала то есть формат такой что мне скидывают свой стек скидывают желаемый уровень то есть Junior Middle или intern и я для этого подлеталиваю тестовое собеседование техническое где есть теоретическая часть есть также практическая и в конце даю фидбэк то есть оценки ответов и также примерно рекомендации что можно улучшить и
00:00:08 - 00:01:17
подучить я решил сделать подобный формат для того чтобы максимально имитировать реальные собеседования и таким образом разбирать вопросы и задачи которые там могут давать и подготовиться к реальному собеседованию если вам также нравится подобный формат то можете перейти по ссылке в описании в Telegram чат Там вы найдете закрепленное сообщение с подробной информацией о данном формате и времени встречи также не забудьте поставить лайк этому видео подписаться на канал оставить какой-нибудь комментарий и приятного просмотра Как
00:00:42 - 00:01:50
дела как настроение хорошо хорошо так хотел спросить Ты не против если нас хорошо получится Я может выложу это запишу выложу или на Youtube канал или в чат кину другие ребята попросить не деньги не деньги второй совет какой-нибудь там после по истечении какого-то времени сейчас выяснится что что-то не знаю Ну имеется ввиду Вот например я сейчас тебе отвечаю у нас выходит хорошо но я делаю какие-то ошибки и соответственно я это все там условно учу Да и ты меня устраиваешь второй Собес типа чтобы я в
00:01:16 - 00:02:47
том числе и для себя понял что я все тонкие моменты в своих знаниях закрыл отлично то есть ты имеешь в виду выложить эту часть типа продолжением Да продолжением в принципе хороший в любом случае хочу вот резюмировать что как пройдёт наш с тобой тестовый Собес Да мы пройдемся Сначала по теории скажем так потом немножко делаем практику Вот и я подытожу какие у тебя были слабые места поставлю по пятибалльной шкале оценки там лучше было подтянуть вот разбирать конечно же мы с тобой не будем все это время много уйдет на это просто
00:02:10 - 00:03:53
выявим слабые места и потом будешь подтягивать Да можешь это не бояться что я там могу обидеться Не наоборот надо правду узнать про себя а да это очень хорошо это очень хорошее настроение скажем так да молодец хочу тебе кинуть ссылку на онлайн Интервью кодинг обычный тестовый собеседование он длится ну часик полтора где-то обычно Ну вот тех Собес технически вот поэтому тоже с тобой таком формате попробуем максимум полтора часа как-то смотришь нормально я никуда не спешу я выделил сегодня вечер с тобой
00:03:00 - 00:04:21
[музыка] там нужно просто свое имя спрашивал чтобы у нас много времени ушло совсем такие мелочи не буду конечно спрашивать просто там основное такое выделил но все это входит в тот стек вот поспрашивать Я про node.js Price ql также про nexjs про react в целом про JavaScript proteccript Давай начнем Давай начнем с not GS как самый такой основной штукой жало скрипте скажем так как вообще Вот так ты думаешь как работает на Джес но Джес это она объединяет в себе несколько вещей которые позволяют ей
00:03:43 - 00:05:24
предоставить возможность разрабатывать на Java скрипте потому что изначально JavaScript был браузерным языком и на нем можно было писать только в браузерах потому что интерпретатор был браузере и поэтому засунули движок браузерный Вот и поскольку изначально Уже воскресенье подразумевалось возможность управлять операционной системы грубо говоря опять же появилась необходимость закрыть этот вопрос с помощью это библиотека наверное не точно я говорю что это библиотека которая написана сильно оси плюс плюс и она как раз
00:04:41 - 00:06:20
работает сама с операционной системой скриптом можно с ним взаимодействовать через методы то есть пешку вот это все вместе называется на GS и благодаря вот этим всем компонентам мы можем не только в браузере программировать на этом языке Отлично Да а вот цикл событий но Джес он однопоточный Ну кстати я не помню кто ивент-луп реализует любви вроде бы вот и он там вроде бы делит какие-то операции эти почтения файла он отдает на операционную систему и она там условно других потоках делает вот какие-то операции
00:05:30 - 00:07:11
может засовывать другие потоки по умолчанию 4 а так ну да поточные и можно как раз заблокировать то есть там нужно не то чтобы это все автоматически позволяет тебе писать как попало ты должен контролировать этот вопрос потому что наверное да все-таки значение однопоточности ноды Но ты должен его контролировать понятно хорошо Если я вдруг случайно отвечаю на тот вопрос который ты поставил ты меня останавливай потому что я могу там куда-то Ну хорошо я понял то есть если ты будешь прям совсем другое русло ходить то я так
00:06:26 - 00:07:55
сделал хорошо Как думаешь вот можешь перечислить принципы раз да но сейчас мне надо вспомнить как это на техническом языке Ну да вот что такое принципы Зачем он нужен и принципы то есть правило вот которые позволяют реализовывать понятные методы взаимодействия с сервером и там Да действительно есть какие-то основополагающие штуки например имеется ввиду что ты должен роуты настраивать определенным образом что каждый Роуд при обращении каждому роуту ты можешь получать только одни и те же данные которые
00:07:15 - 00:09:03
не зависит от предыдущих обращений к этому роуту и не сохраняют информацию между обращениями к одному и тому же роботу Ну да то есть сервер не должен запоминать состояние пользователей между запросами Но именно поэтому мы там авторизацию каждому запросу прикрепляем на клиенте и данные соответственно возвращаемые определенным вызовом а фишки не должны зависеть от тех которые сделаны ранее Ну наверное еще можно кэшировать данные ответ от сервера и также наверное там как это сказать Ну коды ответа они тоже
00:08:13 - 00:09:49
одинаковые то есть Если ты создаешь значит там 201 если ты там просто запрашиваешь 200 то есть правила при котором по которым должны разрабатывать все программисты чтобы другим программистам это все было понятно и наверное еще что мы можем иметь любое количество поинтов и то что происходит когда клиент обратился клиенту вообще все равно что происходит на сервере Вот как-то так А чем отличается rest от http это мне кажется нельзя сравнивать это не взаимозаменяемые вещи Это почему мы не можем использовать Просто
00:09:05 - 00:10:47
htcp прибегаем крест Ну чтобы унифицировать ответ чтобы унифицировать чтобы никак попала данные гонять А по определенным стандартам по правилам то есть это обычный запрос Ну вида там клиент сервер и он использует http Ну Ну да наверное можно просто так использовать http но с рэстом Это чисто Понятно сделав архитектуру rest на сервере и мы манипулируем только данными которые можно манипулировать только данными и поэтому rest сервер построена принципах он может одинаково работать и с мобильными устройствами из
00:10:00 - 00:11:33
десктопными устройствами и там с какими-то другими устройствами [музыка] думаешь вместе то что используется инверсия зависимости это вот это или другое что-то есть такое принцип называется идентальность слышал такой слышал слышал ну наверное это как я говорил это при повторном применении этого опишки сервер на тебе дают одни и те же данные Да отлично немножечко по-другому сформулировал но в целом Да страсть Мы в принципе разобрались Чем отличается htp от https Как думаешь безопасности наверное что теперь является
00:10:55 - 00:12:43
теперь является более безопасным потому что ему нужны потому что он использует сертификат некий вот я не знаю что конкретно там за сертификат какой-то важный наверное хорошо понятно как думаешь что такое как думаешь вебсокет это способ обмена данными [аплодисменты] линия по которой происходит обмен данными и она не прерывающаяся как например http то есть мы можем Ну там несколько есть вариантов либо однопоточный на чтение на поточные на запись или дуплексный режим То есть можно один раз настроить это соединение и уже не
00:12:21 - 00:14:13
париться что надо его сделать еще раз и в реальном времени обмениваться данными [музыка] понятно То есть идея в том чтобы договориться клиенту сервером не закрывать соединение постоянно было открытым Да отлично Да давай так не особо углубляясь поговорим о Event loopy но Джес какая Вот структура цикла Как думаешь точно помню что в первую очередь там таймер идут дальше идут [музыка] события дальше самые последние это закрывающее событие например там дочитали файл и соответственно при окончании чтения Вот вызывает самом
00:13:23 - 00:15:19
конце и еще там есть Set immediate который вызывается в этом цикле или в следующем Но точно либо в этом либо в следующем и между каждым из этих событий можно вызываются промисы то есть никак наверное в браузере Да что железно промес он всегда перед таймером наверное в ноде могут быть такие ситуации когда сначала сработают таймерские колбек и между иойвентами и таймером сработает кроме соски call back и Ну и значит что еще И еще хардкорная такая вещь Ну не хардкорная это тоже он они у них самый высокий приоритет То есть у
00:14:21 - 00:16:03
промеса Ну как я уже сказал кроме могут случаться между вот этими стадиями между таймером и его ивентами между его ивентами и с этой Медиа между с этим идет то есть цикл с какой фазы стартует [музыка] на любые которые хочешь можно и кроме таймер засунуть на любые наверное Или там какие-то или ты имеешь ввиду Для чего чаще всего используется например вот тайм-аут куда помещается не понял вопрос Повтори пожалуйста Говорю например так она таймер и помещается и вот он как раз вызывает него сама функция которая
00:15:14 - 00:16:44
принимает аргументом время Да она сама эта функция какой цикл в Какую очередь цикла идет немного Я не понял вопрос регистрация события она происходит регистрация происходит сразу же но выполнение Ну в целом то есть Ну наверное да я наверное да Ну вот как я сказал регистрация сет тайм-аут происходит сразу же то есть да а сам колбек срабатывает потом если это называется спазм таймер Что значит да я не супер зеленый вот в реальных вот этих вот формулировках если честно придем к следующему вопросу Давай
00:16:17 - 00:17:57
поспрашивать из чего вообще как думаешь состоит из что что это что под капотом то есть поверхноса да то есть не углубляется скажем так и говорят что это построен на экспрессии только дополнительными фичами [музыка] наверное наверное вот если ноду расширяет экспресс ведь на ноги что же можно без сделать и нормально наверное будет работать понятно И много работы ты можешь себе себе облегчить потому что Nest выполняет там регистрацию каких-то сущностей или изменения функционала например с помощью декораторов Да их же можно там везде
00:17:28 - 00:18:59
писать это не просто не ограничивается только там дед декоратор или там баги там же можно каждому методу декоратору положить Вот если бы ты в экспрессии условно это делал бы там больше букв тебя заняло вместе на тебя занимает меньше [музыка] хорошо [музыка] давай вот пройдемся поверхностно по модулям сервисами контроллером зачем они нужны то есть какую архитектуру вообще не реализуют вообще почему именно таким образом Что делает модуль Что делает сервисы контроллер а сервис Он отвечает за непосредственную
00:18:36 - 00:20:06
логику бизнес логику Как как говорят сеньоры вот контроллер непосредственно отвечает за роуты то есть мы там пишем там слэш юзер вот мы когда переходим по этому поинту там запускается метод сервиса соответственно а модуль это все объединяет такую капсулу что ли с которой мы можем в которую мы можем импортировать какие-либо вещи и экспортировать наверное Он построен на модульной архитектуре и мы из модулей там собираем приложение если быть точным микросервисной архитектуре Да ну вот на самом деле Вот
00:19:26 - 00:21:05
точно не могу сказать Вот мои в моем представлении вот то что условно Да делает большинство это клиент серверной архитектура вот где сервер это Монолит Ну вообще монолитным считается когда у тебя на сервере и HTML грубо говоря отдается Но вот сейчас ну на Ютюбе в основном серверная архитектура То есть клиент отдельно сервер у него Ну который тебе дает там статику или и есть сервер сервер Вот который серверными общается А для меня микросервисные архитектура это когда мы можем много модулей отдельно поднять То есть у нас
00:20:23 - 00:21:53
много серверов и каждый Каждый каждый сервис состоит условно из одного модуля Вот и у него и происходит это как раз микросервисная архитектура где там ты запрашиваешь у одного микросервиса информацию пользователя Да этот маленький микросервис обращается по какому-то другому уже отдельному серверу Да с какой-то там своей задачей тот там берёт комменты этого юзера И вот так этот вот для меня это микросервисная архитектура когда куча серверов малюсеньких отдельно подняты [музыка] Какая еще архитектура Как думаешь
00:21:08 - 00:22:23
реализовано знать же кроме микросервисной архитектуры например вот когда например Когда у нас GS проект запускаем например в консоли сервер Да у нас вводится различные логи Вот и также мы можем эти логики отслеживать и изучать их то есть При желании документации мы можем через знать смотреть на логирование всех процессов приложения какая-то архитектура реализовывается Вот это вопрос Если необходимо связать факт логирования с какой-то архитектуры то я затрудняюсь ответить хорошо в принципе с ним все ты в принципе думаю А давай
00:21:46 - 00:23:12
поискивали еще несколько вопросов задам Какие типа полей вот если говорить то Какие типы полей бывают таблиц то есть немного перефразирую во-первых с какими базами данных работает язык программирования а мы остановились на том чтобы ты сказал поверхностно вот Какие типы болей бывают у реляционной базы данных а все ну во-первых я сначала сказал что для одних чисел Их дофига вот несколько полей добыл флот Децл там ворчар ну для строк [музыка] точно там не помню формулировку там для маленького числа там для большого для среднего не
00:22:36 - 00:24:22
знаю Кстати честно говоря зачем столько вариантов для чисел я понимаю для того чтобы место экономить но мне кажется их там как-то очень много [музыка] такие наверное еще было бы там есть точно блок есть и все Ну я например пространственные данные Да да Есть есть геометрические какие-то штуки но они мне точно не помню как называется Но для хранения координат xml [музыка] не знаю можно ли в одной ячейке хранить Я вроде когда документацию читал там что-то было про xml [музыка] а джессон например тип данного же сон
00:23:51 - 00:25:33
Может там быть вообще если мы очень захотим то мы врача Джо сон можем запихать Но для этого существуют документа ориентированные базы данных если правильно сказал Ну например как Манга там как раз данные хранятся то есть тип поля Джи Сон не может быть тип поля Джон не может быть потому что Джо сон это правила записи то есть мы не можем понять данные формата gson получается таблица можем если мы запихнем их врача понятно хорошо так отлично теперь следующий вопрос Как думаешь Какие самые частые функции
00:24:51 - 00:26:25
которые сами можем писать Вот именно функция функции понял аккаунт эвередж мин Макс это считаются функциями там что такое агрегат это если они путаю это функция которая может развернуть [музыка] Как мы можем в таблице сделать ссылку на другую таблицу и вроде как вот агрегация может разворачивать различные связи не то Нет не очень не особо так Ну в принципе да да агрегатные функции Мы же используем когда группа и пишем соответственно агрегатная функция как раз самые вот эти вот вещи [музыка] Давай теперь перейдем
00:25:48 - 00:27:55
к вопросам фронтендо но чтобы был такой переход плавный начнем с сервиса рендеринга да то есть снег же с него начнем как вообще работает СССР технология вот начнем с этого Какие преимущества Ну изначально насколько мне известно проблема [музыка] рендеринга на стороне клиента была в том что браузер браузерные поисковые роботы получали один да и не могли понять что там конкретно какие там Какая информация и сервер сайт рендеринг Он позволяет отправлять пользователю результат уже без нагрузки на его компьютер и уже
00:27:16 - 00:29:09
готовы То есть мы вот тот самый JavaScript код выполняем на сервере и отправляем уже готовую [музыка] страницу со всеми вещами [музыка] уже клиенту Понятно А вот есть СССР да а что например CSR делают [музыка] Хороший вопрос не знаю сервер Клиент рендеринг не так русская с то есть аббревиатура состоит из р СР А что делает ssg ssj Чего делает [музыка] пошли на самом деле [музыка] так как это можно генерируется и отправляются в браузер Ну они очень похожи СССР есть СССР эти два метода похоже просто вот такое у
00:28:14 - 00:30:28
них весь отличие вот не знаешь да вот Какое отличие не знаю хорошо а is R Слушай как их много Обалдеть Всего их вот Раз два три четыре жил в мире где есть только сервер рендеринг клиента там еще свои нюансы хорошо то есть nex.gs тоже под капотом реализует но Джес да получается [музыка] Потому что так Давай начнем с реактора в плане что такое виртуальный дом [музыка] Ну ладно без вступления в общем у нас есть обычный дом до который в браузере отрисовывается и чтобы браузер показал картинку должен
00:29:49 - 00:31:48
пройти достаточно большой путь там парсинг HTML или парсинг CSS Да там сборка этого всего там предварительное расположение элементов и раскраска и при каждом изменении какого-то элемента вся все это идет заново строится дом строится Дом объединяется все в одно дерево расчитываются стили расставлять элементы и все раскрашивается то есть очень много ресурсов тратится при любых изменениях и виртуальный дом это такая концепция и которая позволяет на каждом условно цикле объединять Все изменения за один грубо говоря цикл делать
00:31:17 - 00:33:06
получать одно дерево и уже вот виртуальное и уже виртуально по виртуальному дереву один раз собрать дом таким образом трудозатраты при этом 5 изменениях виртуального дома будут равны одному ревер рендерингу реального дома то есть при изменении состояния компонента реак дом рендерит весь дом все дом дерева на самом деле [музыка] какие-то вещи реакции в общем определенных условиях если что-то изменилось родители Он полностью переверндовые и детей в том числе Вот Но тем не менее там очень много происходит оптимизированных вещей
00:32:11 - 00:33:51
оптимизирующих которые как раз позволяют собрать в один из меня изменятельный стек все изменения провести их в доме потом только дома отстроить один раз Давай тогда приступим к методам жизненного цикла какие методы жизненного цикла можно реализовать функциональным компоненте нельзя реализовать Точнее можно реализовать в классовом компоненте но нельзя реализовать функционально напрямую конструктор нельзя реализовать именно вот методы жизненного цикла например на примере там компонент маунт и так далее
00:33:03 - 00:34:29
хорошо Хорошо я понял да просто например в документации реакта там очень много всяких вот этих вот пунктиков там есть же три стадии там монтирования обновления и размонтирование ну и обработка ошибок и он прямо все пихает то есть И конструктор там прямо написано Ну хорошо компоненты потом там взять перед обновлением и компонент Вот это те методы которые как есть они существуют в классовых компонентах функциональных можно реализовывать это по-другому то есть гет снапшот be forupdate можно реализовать функциональном компоненте
00:33:54 - 00:35:42
нет нет хорошо Некоторые из Некоторые из жизненных циклов классовых компонентов можно реализовать [музыка] например подожди а можно можно функциональным компоненте сделать между прочим опрокидываем функцию которая Мема прокидываем функцию которая сравнивает прокси и там своими руками пишем Костыль который нам снапшот куда надо отдыхать Ну это получается Костыль да Ну да это Касты например мы вопросы учатся в том что какие методы жизненного цикла мы не можем имитировать в функциональном компоненте
00:34:53 - 00:36:23
мы не можем обрабатывать ошибки [музыка] компонент Deep Catch вроде называется [музыка] штука вот component Villa Mount в принципе мы можем довернув из эффекта [музыка] функцию так компанией update но в принципе вот наверное его не можем вот мы можем делать рендер У нас в принципе это returne с функционального компонента так Какие еще должны быть должен ли компонент обновляться мы можем запихнуть так компонент что там и компонент маунт остался Да но компонент дед маунт это компонент Will Mount есть такой кстати
00:35:43 - 00:37:55
а жизненный цикл в классовых компонентах просто есть из эффекта есть юзлы а вот эффект и юзлы А вот эффект он срабатывает раньше чем И если в классах есть компонент Will Mount то получается мы можем провести аналогию с юслей Out Effect Ну вот как-то так получается понятно хорошо как мы с помощью эффекта можем реализовать Вот как раз таки три этих жизненного методов жизненного цикла три метода жизненного цикла с помощью эффекта компонент компонент и компоненты апдейт компонент компонент мы можем
00:36:53 - 00:38:27
[музыка] вызываться при каждом обновлении компонента и компонент можем вернуть функцию которая выполняется перед слушателей Отлично Так давайте теперь перейдем тот редактор кода на который ссылку вот и здесь есть вот такой вот компонент классовый как ты как бы ты оптимизировал бы то есть выводится тут таймер то есть данное время вот оно сейчас остановилась потому что неправильно написан код вот как бы ты его оптимизировал чтобы таймер запустился как мне кажется здесь неправильно Ну это первое внимание что больше в этом не
00:37:39 - 00:39:18
переживать это то что интервал неправильно удаляется Вот то есть мы можем например сохранять интервал [аплодисменты] и уже в эту переменную мы записываем и соответственно если есть так Окей так тик The State New Date и он у нас не работает конструктор пробчатый а вот я понял почему почему я допустил какую-то ошибку в том чтобы компоненте это просто редактор Сам такой редактор то есть можешь писать можно напрямую состояния менять из функций когда вот что делаем там напрямую меняем состоянии мы так можем делать
00:38:49 - 00:40:32
Ну мы не можем менять состояние А кстати вот функциональных компонентах Я бы рассказал Да там юсты и все понятно А в классах но мы точно не можем в рендере все менять Да так аптеки вот сейчас я думаю смотри вот мы наследуемся от класса react component наверное здесь должен быть какой-то наверное здесь должен быть какой-то свой сайт можно так и называется и мы так и сделаем например Ну и у него мы можем передать И что там дэйт двоеточие так я тогда думаю что может он красным подсвечивает потому что я
00:40:41 - 00:42:24
не знаю член Ну все равно подчеркивает Ладно но я думаю о заработала А почему ты разворачиваешь здесь стоит Ну наверное по привычке [музыка] функциональных компонентах Я люблю писать все функции которые мы можем передать в и там я делаю логику И периодически там так делаю вот слушай ну ты намекаешь на то что он умный сам может сопоставить какие-то поля типа можно удалить разворот и он так но тоже работает смотри А еще такой момент почему ты решил интервал ID вынести в состояние что мешало создать просто переменную
00:42:14 - 00:44:05
Ну каждый раз бы если бы у нас было бы еще куча всяких штук которые заставляли бы компонент перерендериваться то мы бы потеряли бы но если бы мы тут написали бы вот так например Мы же здесь его объявляем в компанию bitman не мы так не можем как переменные можно Объявлять в классовых компонентах Как можно Объявлять переменные в классовых компонентах Ну надо конструктором Смотри вот методы жизненного цикла ты находишься да ты можешь делать например не создавая лишнее состояние сделать например вот
00:43:19 - 00:44:40
так могу То есть когда Он отрабатывает рендер У нас у нас сохраняется эта переменная с интервалом ID она у нас весь жизненный цикл есть и в конце жизненного цикла компонент мы просто можем брать условия и просто передать ее сюда исследователь нам не нужно состояние лишнее вот у нас сами работает то есть Таким образом мы вкладываем компоненте создаем переменную вот привязываем глаз какое-то значение и все так отлично то есть с реактором принципе разобрались сохранить свое состояние А вот он точно до между рендерами
00:44:14 - 00:46:01
рендерами не стирает вот эти вот вещи которые выделяю видно что я выделяю ну просто функционально компонентах там он все значения заново пересчитать Можешь теперь вот ниже этого компонента переписать этот классовый компонент функциональный [музыка] удалить эффект никогда ничего не передали да Ну вот он будет срабатывать Значит один раз при и не returnalyttern и терне так где заканчивается скобки нет На сколько поставить так не понял вот она скобки вроде на месте так конструктор соответственно здесь не
00:45:13 - 00:47:06
нужен и нам нужно хранить Да туда конструктор удаляем и у нас счет один эффект до что со скобками напутал так Окей он по стоимости и здесь мы делаем функцию и в этой функции мы должны раз и вернуть из неё осталось только вызвать и что и копки какие-то здесь у меня поменяны и ставим туда New Date а по жизни интервал соответственно в нем меняется вся эта тема запускаем интервал интервале меняется newate и выводится здесь у меня подчеркивается тайм-стрит и реакция сюда передал потому что наверное ного компонент
00:47:17 - 00:49:10
Ну мы тик и Ну естественно мы там тик можем оторвал положить и все такое отлично В принципе с реактором разобрались вот редактор кода здесь в принципе можно нажала скрипте тоже писать то есть такого условия задачи ты сможешь написать функцию такую Давай попробуем [музыка] она должна возвращать True либо Фолз да напишите функцию принимать строку и звук нижнего регистра А на выход возвращает болен который отвечает является или не является Ну допустим бульон будет возвращать так сверху принимает строку
00:49:20 - 00:50:47
и палиндром это типа да [музыка] так соответственно Как он может проверять может быть из двух концов одновременно не упираться в C А если у нас [музыка] Ну хорошо получается Может что делать он может и без двух концов одновременно нет на самом деле палиндром она не будет упираться в C то есть одна буква с будет началом и одного конца другой конец из другого конца другой конец то есть там ценник будет упираться [музыка] -1 мы можем чисто циклом пройтись и меньше и он должен нам придернуть Фолз потому
00:50:15 - 00:52:17
что внизу возвращает True да и соответственно If тогда Falls что R от лифта не равен [музыка] уму время и есть мой пункт a b c B C тоже нечетное Пусть будет так никакой мы неправильную строку Так а как тут а вот консоль синтаксический у меня какой-то а мы отсюда не возвращаем компонент react Сейчас секунду так в принципе вот так вот Вот так вот Что за монетки сверху S и B это мы с тобой я могу Без паники перезагружать ничего не сотрется Да нет расцениваем это как не сотрется и в конце отлично смотри у тебя вывелось два раза
00:52:10 - 00:54:28
тру на первые два концерлога и получается на 3 Так что это с ней сейчас перезагружу у тебя Нормально все там У меня у меня вот сейчас я три раза Перезагрузил и перекрестился и у меня все заработало 2 один false в принципе кажется что функция работает вот теперь как думаешь какая сложность у этой функции так Ну вообще не учитывается константные множители поэтому сложность этой функции [музыка] отлично Почему это в худшем случае длины строки у нас увеличиваются операции да получается как бы вот ты написал
00:54:28 - 00:56:19
эту функцию использовал цикл использовал условия и явные черные и так далее там даже завел переменная [музыка] ты написал в таком более императивном варианте с помощью вот методов встроенных JavaScript Как думаешь смог бы ты более декларативно написать Так ну можно с помощью встроенных методов JavaScript разделить строку на пополам и зафиксировать первую половину за кэшировать вторую половину и сравнить результаты и если они равны то соответственно True если я просто проверяю на то как ты вообще
00:55:39 - 00:57:23
понимаешь Чем отличается императивный подход декоративного слова опыт наверное Что такое вообще императивное программирование что декоративно и чем они отличаются императивный это у меня аналогия с опытом типа вот как как чувствуют так и пишу грубо говоря декларативный наверное как надо там четко по инструкции [музыка] хорошо Я хочу показать тебе функцию которую я написал решает задачу Ну если ты встроенные методы говоришь что имеется ввиду типа реверс и все дела Ну да например вот смотри Вот моя функция
00:56:36 - 00:58:20
она написана вот я просто хочу показать разницу между декоративным подходом и императивным то есть ты использовал вайлы использовал If и условия также использовал переменную То есть ты подробно описываешь то что ты делаешь вот декларативное программирование то что написал Я например мы не описываем как подробно то что мы делаем мы просто используем готовые модули с высоким уровнем абстракции То есть то что там под капотом нам не важно мы не знаем нам Это интересно мы просто используем готовые функции уже то есть отличие
00:57:34 - 00:58:54
императивного и декоративного программирования еще функция также моя названа более понятно То есть написал Просто мой естественно я пишу как надо такой да если мы посмотрим результат моей функции Ну вот да Отлично Теперь так практика про декоративный по гравий поговорили про императивно поговорили Давай теперь пройдемся в принципе пожалуйста по вопросам связанного скриптом вот Какие типы данных есть JavaScript объект символ вроде типа данные все [музыка] и что делать символ он задает абсолютно универсальное
00:58:16 - 01:00:13
значение которое никогда не повторяется то есть символ от одного Мы записываем в символ из одного записываем в и а не равно B [музыка] Ну еще всякие с помощью символов итерации короче можно делать то есть там есть через символ можно задать кастомному типу данных способностей например для чего это делается вообще Зачем вообще его вели Зачем это делать вообще почему вообще чтобы например невозможно было обратиться к своему это если мы Да чтобы невозможно было обратиться например к какому-то свойству объекта
00:59:49 - 01:01:23
просто так конкретно нужно Вот именно вот условно эту переменную которую ты засунул значение символа того тебе через нее обратиться только можно для защиты отлично [музыка] а чем вот ты перечислил типы данных а какие из этих типов данных сложных и простые объект Это сложный ссылочный этот как его звать Рей он тоже ссылочный вот string нам барбулин это простые функция еще тип данных чем не тип данных [музыка] а почему они сложные простые Почему ссылочные сложные а не ссылочные они несложные Почему Потому что
01:00:47 - 01:02:25
потому что из-за свойств которые не имеют их влияние на программирование Вот например ты можешь передавать ссылку на объект не тянув с собой весь массив данных как бы объекте чисто ссылку передал поменял то что тебе надо и оно [музыка] в памяти поменялось и в том числе Кстати у намбера есть прототип Ну вот у объекта У Рэя функции прототипа есть они имеют свойство тех от кого порождены наследуемые протипное наследование соответственно мы можем добавлять им новые свойства Читать новое свойство пользоваться этими свойствами и у
01:01:43 - 01:03:29
каждого экземпляра этого типа будут эти свойства Хотя набор что же там есть наверное отличие это ссылочности Ну это понятно да то есть ссылка или не ссылка А вот например строчка Да и например объект Например какой-нибудь почему вот строчка получается считается простым типом данных объект сложным объект может хранить себе другие типы данных другие экземпляры разных типов данных объекте может быть другой объект или массив или функция или число или строка в числе не может быть другого числа хорошо
01:02:40 - 01:04:23
следующему вопросу что делают функции чем они отличаются банда Play и Call они привязывают контекст функция чем они отличаются я не так сказал колбанды оплай Bind apply они могут определить область видимости в которой будет работать функция Если мы Передаем используем байт передавая туда контекст возвращает функцию привязанную к определенному контексту и не вызывает ее Да вот Колл вызывает ее плай тоже вызывает ее только вы плаваем мы можем и Мы также в каждую из этих функций можем передавать аргументы Но вот и в этом отличие
01:03:32 - 01:05:24
например кола что мы в коле Мы через запятую перечисляем можем массив передать аргументов Как думаешь в чем разница между нами значение undefind оно неопределено и Ну соответственно если мы не присваиваем значение переменная только объявляем ее Это значит что сама переменная есть и но у нее не определено значение а нал это специально определено что это ничего [музыка] то есть нал мы можем получить явно да Ну явно явно можем получить на вот значение Нет это на отсутствие присвоения Или например defind это отсутствие
01:04:31 - 01:06:21
возвращаемого значения например объекте мы не существующему Полю обратились у нас вернется но не определено а что значит [музыка] может ли она быть перебираемым хорошо Как работает память вообще JavaScript точнее Как работает как работает сборщик мусора сборщик мусора сам сам работает сборщик мусора он отслеживает вопрос по какому алгоритму По какому принципу он работает сейчас в современных браузерах есть определенный алгоритм согласно которому работает сборщик мусора скрипте если он отслеживает объекты если на них нету
01:05:37 - 01:07:17
ссылок активных он освобождает память вот как там браузер работает Ну если объект нельзя достать из глобала то этот объект считается мусором что будет если сделать не уфанкшим например вот вот мы создаем конструктор например в классе да а ты сможешь с помощью функции например знаешь как реализовывать конструктор Так ну надо списать функции и дернуть This но до того как появились классовые компоненты синтаксический сахар JavaScript и так далее там конструкторе реализовывать скрипте вот с помощью этих функций вот как они
01:06:55 - 01:08:58
реализовывали знаешь Ну вообще когда конструктора ты есть функция то есть как бы условно мы пишем там вот ты создал например конструктор Да функцию Например если ты получаешь от нее instance пишешь создается Новый объект каким то есть в плане контекста что происходит выделяется область памяти и прикрепляется ссылка на лексическое значение на область вот это вот конкретно закрепленную за это за этими ячейками памяти памяти на что ссылаются Какие значения Какие значения ссылаются конструктора функцию Да там у тебя есть
01:08:05 - 01:10:04
работа с контекстом то есть создаешь там различные когда ты создаешь этой функции с помощью то какому контексту то есть вы вообще как работает Давай начнем с этого вот так вот ты создаешь здесь это ссылка как раз на Вот на этот Новый instance то есть на область памяти в которой которая была создана ты создал функцию например Забудем про конструкторы по класса пока что вот эту функцию ты в ней работаешь например This в этой функции выясно Какой объект будет ссылаться на какой контекст на что будет ссылаться этой функции
01:09:32 - 01:11:02
на только что созданную область на только что созданную область он будет ссылаться объект у нас все является объект на самом деле это не совсем правильно говоришь то есть Эти моменты я уже тебе подчеркнул подчеркнул после интервью чтобы ты уже сам разобрался То есть хорошо забудем об этом вопросе придем к следующему будем долго застряться вот еще такой вопрос например мы можем реализовать инкапсуляцию например [музыка] реализовать капсуляцию вообще замыкание это механизм который позволяет функции захватить ссылку на
01:10:35 - 01:12:15
лексическое значение в котором она была определена и в случае и при работе функции в случае нахождения свободных переменных функция идет по этой ссылке во внешней лексическое окружение и ищет эти Блин когда когда мы не переопределили Нет не присвоили и ищет присвоение свободным переменным во внешнем лексическом окружении соответственно вот так работает замыкание и мы можем так и сохранять с помощью этого механизма с помощью сохранения автоматического ссылки на внешний лексическое окружение в котором была
01:11:30 - 01:12:59
определена функция [музыка] а зачем подобные капитуляция вообще нужна чтобы функциональным программирование [музыка] Но если доступ к лексическому значению которое соответственно остается функции может получить доступ к нему только эта функция то наверное для изоляции [музыка] отлично правильно Так время уже час-полтора думаю прошли еще еще один вопрос тогда задам и думаю можно заканчивать так еще такой вопрос Что такое Map Что такое сет Что такое выкрев Ну начнут секретов и крепов это слабая ссылка на объект то есть
01:12:16 - 01:14:09
она если кроме викреафа больше нет ссылок на объект то этот объект будет уничтожен с разборщиком [музыка] Что такое это структура данных которая предоставляет собой представляет собой ключ значение [музыка] правильно я думаю можно заканчивать на самом деле было круто да Мне тоже понравилось да спасибо выложу все-таки Наверное это на Ну как минимум в чат в телеграме чтобы другие тоже глянули вынесут для себя что-то полезное подчеркну Ну я уже подчеркнул все моменты на которые можно обратить внимание Вот твоих ответах и так далее
01:13:14 - 01:14:50
можно будет потом повторно повторно продолжение строить по этим моментам которые выделил хочу еще раз подчеркнуть там для зрителей что совет был на уровень Strong Junior Week Metal То есть если будет там стронг видел какой-нибудь то конечно же будет посложнее Думаю будет Вот как бы не особо углубляясь прошлись по всем таким моментам то есть Например можно было бы углубляться в алгоритмы то есть сложность Функции там Нижняя граница Верхняя граница и так далее То есть такие тоже могут быть моменты и так далее Отлично тогда
01:14:09 - 01:15:27
Еще раз спасибо за интервью Спасибо у меня один вопрос [музыка] на какой архитектуру все-таки указывает для меня вопрос мне интересно Эванс арсинг есть такая архитектура вот эта архитектура предназначена для документирования всех процессов происходивших состоянием приложения чтобы к этим логом можно было обратиться скажем так к этим записям вот и также что-то делать состоянием то есть вот вкратце почитать называется even Surfing такой вот архитектурный подход используется понял хорошо спасибо Я тогда жду когда
01:14:48 - 01:16:21
ты сказал Ты пришлешь Давай тогда удачи Желаю успехов что надеюсь вам понравилось Данное видео Надеюсь вы узнали для себя что-то полезное единственное мы забыли поговорить про typescript Но я надеюсь это не последнее видео такого формата на моем канале Всем спасибо за просмотр ставьте лайки подписывайтесь на канал и до новых выпусков всем
01:15:37 - 01:16:23