ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:03:37
Принципы SOLID:
  • 1. Обсуждены и названы основные принципы программирования SOLID (Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, Dependency Inversion Principle)
  • 2. Принцип Single Responsibility гласит, что любой класс должен отвечать только за одну функциональную область
  • 3. Принцип DRY (Don't Repeat Yourself) утверждает необходимость написания программного кода один раз и многократного использования, избегая дублирования функционала
00:06:55
Паттерны проектирования:
  • Обсуждались различные паттерны проектирования (порождающие, структурные, поведенческие)
  • Упоминались конкретные паттерны: Фабричный метод, абстрактная фабрика, синглтон, адаптер, строитель
  • Рассматривались подходы к внедрению зависимостей (использование своего класса-синглтона, библиотеки dependency injection)
00:10:48
Работа с реактивной моделью и Dart:
  • 1. Обсуждались понятия и особенности работы алгоритмов, включая скорость вычислений и сложность (big оо нотей)
  • 2. Приведен пример стандартных алгоритмов с указанием типичных сложностей, среди которых упомянута пузырьковая сортировка
  • 3. Рассматривались методы оптимизации алгоритмов для упрощения вычислений и исключения вложенных циклов
00:12:40
Архитектура приложений:
  • 1. Обсудили концепцию чистой (clean) архитектуры Роберта Мартина, предложенную в 1985 году, и её применение в мобильной разработке
  • 2. Рассмотрели возможность организации чистой архитектуры в приложениях Flutter, выделив отдельные слои UI, бизнес-логики и данных
  • 3. Обозначили важность минимизации связей между компонентами приложения через использование паттерна SOLID и внедрение интерфейсов между слоями
00:15:54
Организация многопроектных решений:
  • 1. Обсуждался подход к разработке многомодульных приложений во Flutter с разделением функциональности по отдельным модулям (фичам), хранящимися в отдельных папках
  • 2. Упоминался пример структуры проекта, где общие модули (например, оплата) реализованы отдельно от конкретных экранов, обеспечивая повторное использование функционала
  • 3. Рассматривался вопрос взаимодействия подхода к архитектуре Clean Architecture с предложенным методом организации модулей и фич
00:18:01
Модели данных и JSON:
  • Рассматривались темы преобразования данных (dt), сущности (энтити), юзер-кейсов, иммутабельных классов, интерфейсов (`extends`, `implements`), операций сравнения, хэш-кодов, итерабельных классов, хэш-мапов, коллекций, асинхронности, изоляторов, стримов, миксиновых классов, расширений классов (экстеншенов), памяти и сборщиков мусора, виджетов (`inherit` виджеты, ключи, страницы хранения, рендеринг)
  • Упоминались следующие технологии и инструменты разработки: Dart, Flutter, RetroFit, Dio, JSON сериализация/десериализация, Go Router, Firebase Notifications, HTTP-интерцепторы, JSON-преобразователи, File multipart POST-запросы, локальные базы данных (SecureStore, Drift, Hive, SharedPreferences), тестирование компонентов (виджеты-тесты)
  • Участники обсуждения затронули практические аспекты разработки мобильных приложений на платформе Flutter, включая работу с камерой, нативными библиотеками, пуш-уведомлениями, сетевыми запросами, локальным хранилищем данных и интеграцией тестов
01:01:32
Интеграционное тестирование:
  • 1. Обсуждались виды тестов (интеграционные и виджеты)
  • 2. Интеграционные тесты предназначены для проверки взаимодействия модулей при различных входных значениях
  • 3. Виджет-тесты применяются для тестирования отдельных компонентов
01:02:17
Тестирование программного обеспечения:
  • 1. Обсуждалась тема пирамиды тестирования и методики TDD IDDI (разработка через тестирование)
  • 2. Участники обсудили подход разработки тестов, начиная с написания отрицательных тестов перед функционалом и последующим покрытием основных функциональных возможностей положительными и отрицательными тестами
  • 3. Конкретный пример методики был описан, однако детали реализации и конкретные шаги не уточнялись
01:03:24
Git и инструменты контроля версий:
  • Участники обсудили различные термины и понятия системы контроля версий Git (ребейс, мерж, reset, амент-коммит, чеприк)
  • Обсуждался опыт участников с использованием инструментов CI/CD (SonaQube, Flavors), однако прямого обсуждения интеграции конкретных решений не проводилось
  • Участники говорили о методах оценки сложности новых задач и важности предварительной консультации с экспертом перед началом выполнения неизвестной ранее задачи
0: Мы сообщество криминал айти, последние несколько лет мы помогаем людям с трудоустройством в лучшие it компании. Получение оффера это обычный навык, и мы помогаем довести его до идеала. Стань частью нашей.
1: Истории, вступай в сообщество в telegram. Получить оффер это проще, чем ты думаешь.
2: Алло, добрый день. Добрый день.
3: Меня зовут Данил, я плато разработчик в компании андерсон. Вот проведу тебе сейчас тех интервью. Сразу 2 вопроса. Комфортно ли будет общаться на ты? Да, да, без проблем, конечно. Окей. И
4: Против, если я запись включу. Да, да, пожалуйста, конечно. Окей. Хорошо, тогда начнём, наверное, с
5: Я твоё резюме посмотрел, ознакомился.
6: Уточню по актуальности, правильно понимаю, что в flutter ты с react native перешёл, да? Ой, да, с reactnative. А до этого был ещё react джиэс, а до этого ещё на 4 курсе был php. Так что да, да, с реакт натива перешёл. Ага.
7: Как так получилось? Почему такой выбор? Ну, я с ребятами начинал работать, как джаваскрипт разработчик. Потом мы выбрали стек. Пришёл 1 заказчик, сказал, хочу на react, джесси и
8: И мы стали клипать проекты на рек. Джейс долго сидели там где-то года 2 с половиной, а потом 1 из опять заказчиков пришёл и сказал, вы прикольно сделали мне веб проект. Давайте мобильный проект, если можете, тоже запилите и
9: Я попробовал, у меня был начальник, он андроид разработчик, и я взял реакт натив, пытался делать, он мне помогал влиться в это все и все. Я переквалифицировался в react. Native разработчика и так года 2 с половиной 3 поработал.
10: Вот, а потом уже, когда пришла пандемия, были проблемы с проектами и заказчиками, потому что не немногие хотели. Вот, и нашёлся 1 проект на флаттере. Мне дали время на то, что
11: Чтобы посмотреть уроки, немножко влиться, потом посадили на проект, и вот остался на нём намного приятнее другой альтернативы как переходить на flutter был ещё kotlin, но он тогда был совсем сырой, это
12: Были совсем зачатки, поэтому у нас ещё 1 из коллег говорил, попробуйте флаттер, попробуйте флаттер, он прикольный, я его там потыкал, вот он нас подбивал, подбивал и так и получилось.
13: А, Котлин, в смысле, Котлин, мультиплатформ рассматриваем? Да, да, да. Kotlin мультиплатформ, да, он и сейчас сырой. Не, ну, надеемся, потому что выглядит как идея, идея классная, идея шикарная. Все, я как бы согласен.
14: Что половина андроид разработчиков уйдёт на Котлин платформ мультиплатформ, да, но мне как реактнатив разработчику вот как-то flutter он и работает постабильней, и документация получше и вышел на рынок он как-то пораньше ну в общем своих.
15: Плюшек у него много. Да? Окей, хорошо, давай тогда перейдём, чтоб сильно не тянуть сразу к техническим вопросам. И начнём, наверное, с фундаментальных.
16: Каких-то вещей в программировании. И 1, что я попрошу тебя рассказать, это солит перечислить принципы без подробностей, просто назвать их можешь солит.
17: 1 это single responsibility 2.
18: Так, а нет, 2, это, о, это опен Клоус, 3 л Лисков, substitution подстановки 4, это депонии inversion и
19: А этот интерфейс 4 интерфейс.
20: Серегей, н, что-то такое разделение там какое-то. Угу. Да, все верно. А можешь поподробнее про, с, о, и, и принципе рассказать? Угу. С, о, и, и хорошо. Сингл респонсибилити отвечает.
21: За то, чтобы какой-либо компонент отвечал только за 1 функционал. То есть если у тебя есть какой-то класс, то он должен выполнять 1 функцию, а не лепить 1000000 функций в 1 класс.
22: Потому что это уже какой-то god object получается с с о open closed это вот как раз ещё ооо отвечает за то, чтобы класс был открыт для расширения, но для и при этом закрыт для
23: Изменения. Так гарантируется стабильность работы, стабильность работы и при этом защита от изменения уже рабочего кода с о и д да, и и и.
24: Интерфейс, интерфейс с агрегейшн, разделение интерфейсов. Здесь говорится о том, что если у вас есть какой-либо интерфейс, то он должен тоже дробиться на
25: Маленькие интерфейсы, а не быть достаточно широким и не иметь внутри себя каких-либо полей, которые мешают вот работе.
26: Работе сущности. Вот скажем так, если у нас там, например, есть какой-то интерфейс, например, оружие в него, скажем, там ударить, там, починить и перезарядить. А при этом мы реализуем потом какой-либо, какое-либо оружие, например,
27: Нож. И у нас получается, что есть перезарядка, то для ножа это ненужный функционал, поэтому об этом говорится в интерфейсе Серегей.
28: Окей гуд гуд супер а знаешь такой принцип dry don't repeat yourself данный принцип говорит о том что нужно писать код единожды то есть ты не должен повторяться.
29: И если вдруг необходим какой-либо функционал, который уже реализован, то необходимо модернизировать код так, чтобы ты, ну, мог его переиспользовать и ни в коем случае не дублировал.
30: Окей good, хорошо, давай про паттерны ещё поговорим знаешь на какие группы делятся? Паттерны основные там там их много порождающие.
31: Их их там много. Я, я в паттерны не особо вдавался. Просто часть из них мы используем. И вот те, которые чаще используем за те, я знаю. А их там сколько там? 20, 26, если я не ошибаюсь. Ну да.
32: Ну, группы 3. Угу. Порождающие структурные, поведенческие. Ну, окей, сказал про порождающие тогда спрошу такую штуку. Знаешь, что такое фабричный метод и абстрактная фабрика и в чем разница между ними?
33: Во флаттере есть ключевое слово фабрик, и благодаря этому слову мы можем в конструкторе возвращать различные раз.
34: Различные классы, ну то есть различные типы классов. То есть у нас конструктор вызывается с разным, конструктор может возвращать различные классы. То есть ты прям в конструкторе можешь описать логику, которая вернёт тебе разные классы.
35: Например, такое прикольно использовать когда ты пишешь оплату, ты пишешь фабрику, ты говоришь, что у тебя если там, скажем, платформа ios, то ты возвращаешь Apple Pay. Если там да, андроид, то ты
36: Уже там можешь ещё распарсить, там google пэй, либо там ещё распарсить там самсунг и вот классный подход.
37: Окей, окей. А single тон знаешь такой паттерн single тон самый популярный паттерн паттерн, который обычно используется для того, чтобы.
38: Синглтон 1, то есть он и обычно в него лепят все методы, все, что есть, это самый простой паттерн, и это плохой подход, потому что так и получается. Гад, обжект это
39: Антипаттерн, который стараются избегать во Флат разработке, ну и, в принципе, в разработке
40: Окей, гуд, а может быть, знаешь, что такое адаптер? Паттерн структурный?
41: Ну, я слышал, скорее всего, даже где-то применял, но не расскажу. Я честно, не повторял прям так сильно.
42: Структуры и поэтому не буду тянуть ни своё, ни ваше время тратить a good окей хорошо, а Строитель не слышал про такое, естественно слышал, но не собирал, не работал.
43: Окей, окей, хорошо. А используешь в работе депенденс инъек какой-нибудь? Так, у нас было пару.
44: Проектов, и в каждом из них депонии инжекшн были реализованы все по разному. На самом деле в 1 из проектов просто был свой класс, синглтон, в котором
45: Были подключения. В другом проекте, была отдельная библиотека какая-то для этого asl гёте, по моему ещё был проект, в котором использовался для реализации, в общем, какой-то
46: То пули для пенсии инжекшн нет, но кто как хочет, так и реализует этот подход.
47: Окей, хорошо. Давай ещё, наверное, про алгоритмы немножко в 2 словах поговорим. Знаешь, что такое big оо нотей?
48: Это аннотация, которая объясняет скорость, скорость вычисления и сложность вычисления алгоритма.
49: Угу. А можешь привести пример какой-нибудь, какого-нибудь алгоритма стандартного и его сложности?
50: Да, там обычно берут якобы там пузырьковые там сортировки, все. В общем, там есть различные сложности логарифмов и
51: Вычисления и в зависимости от того, происходит ли там пересчёт, скажем, если у тебя цикл ссылки, то это алгоритм в квадрате там или там 2 алгоритма, в общем, о, в квадрате и так далее.
52: Это все подходы для вычисления стараются, чтобы алгоритм был линейный, стараются избавляться от вложенности циклов, чтобы алгоритм был попроще. Вот я поверхностно это все.
53: Знаю и трогал, но прям есть специальные сайты, для которых можно взять эти алгоритмы и потренироваться. Но я не особо успеваю запариваться над таким. То есть понятно, если будет задача
54: Какая-то на оптимизацию конкретного кода, скажем там у нас там что-то жёсткое вычисляется нужно понять почему у нас так много времени тратится и соптимизировать работу я найду
55: Окей, окей, хорошо, давай ещё про архитектуру наверное поговорим. Знаешь, что такое clean architecture? Да, дядюшка боб Роберт Мартин, который
56: Придумал чистую архитектуру. Ох, тут не видно, но тут у меня книжка лежит. Чистый код. Очень интересное чтиво, чистая архитектура. По моему, он её заложил ещё в 85 году, и постепенно она была
57: Основана сперва на бэкенд разработке, а потом плавно перетекла и в мобильную разработку. Я недавно наткнулся на видео, в котором 1 из разработчиков объяснял, что данный подход уже неактуален, потому что много
58: С тех пор изменилось, да и on показывал, насколько же быстрее можно производить вычисления, не используя солит и чистую архитектуру, но да, я в курсе, что такое чистая архитектура.
59: А как мы можем чистую архитектуру во flutter приложении организовать?
60: Ну, у нас есть слои различные, и основная идея чистого, чистой архитектуры в том, чтобы разделить все эти слои. У нас есть ui слой, у нас есть слой логики, у нас есть слой, дата, вот, и
61: И все, что предложил, ну, придумал дядюшка боб, он предложил максимально их разъединить, при этом, ну, сохранить там, максимально их разделить для того, чтобы можно было в любой момент.
62: Учиться на, скажем, другую реализацию. То есть и таким образом можно достичь того, что ты, например, с реджиса можешь пересесть на view, а при этом твоя часть логики сохранится, либо же быстро переключить там с базы дан.
63: Там, с эскьюэль на, ну, на, но скил вряд. Хотя там тоже можно подумать. В общем, быстрое переключение. И как можно сильнее уменьшить связываемость компонентов проекта. Угу. А что мы?
64: Можем сделать, чтобы связанность была низкая между слоями.
65: Стараться, чтобы слои не зависели друг от друга, а зависели от каких-либо интерфейсов, то есть сущность между самими слоями, поставить ещё сущность.
66: Угу. А это, по моему, как раз-таки солид пенсии, инверсия зависимости. Как раз об этом и говорит. Угу. А знаешь, что такое репозиторий?
67: Это 1 из паттернов, который мы используем для работы, он как раз-таки как раз-таки в слое дата мы для того, чтобы у нас вот, например, dio есть кото
68: Который использует репозитории. Так вот, благодаря тому, что мы создаём клиент, мы можем спокойно этот клиент, ну, как раз-таки уменьшаем связанность за счёт вот этого паттерна, репозитория.
69: Окей, хорошо, такой ещё вопрос про clean был у тебя опыт разработки может быть многомодульных проектов во флаттере?
70: Например, какой, когда у нас, допустим, проект большой, да, и каждая фича это отдельный пакет, отдельный модуль. У меня были проекты, где
71: Структурно были разделения по фичам. То есть у нас есть фича, мей, скрина, фича, там какого-нибудь оплаты ещё. То есть у тебя каждая фича хранится в отдельной Папке вместе с собой в этой
72: Папки тянутся функционал то есть view слой функционал слой утилиты какие-то конкретные виджиты которые относятся именно к этой фиче ну и есть уже глобальные утилиты, которые там по всему проекту зависят. Если если я правильно понял, то
73: Такой был проект подход, да, подход, я бы сказал, сюда вопрос, а как это с Клином Клин архитектор, происходило? Ну вот можешь там структуру рассказать, фичи и в целом проекта.
74: Ну, как я понимаю, у нас есть, например, 2, 2 различных экрана, там, скажем, главная, и там какой-нибудь экран товара. И, например, ты, мо,
75: Там кнопка одинаковая с оплатой, пусть будет там оплатить сразу или оплатить в товаре. И у тебя один и тот же функционал, который необходимо в 2 различных там фичах и
76: Благодаря тому, что у нас эта фича, ну, функционал находится не в самой реализации конкретного экрана, а выше, в общем проекте, то у тебя доступ есть к данному функционалу.
77: Окей, окей, а знаешь что такое dt? Оо и entity?
78: Дито, дтошки, дата ту обжект расшифровывается. Насколько я помню, это преобразование данных, которые ты получаешь с сервера в объекты. Ну, в конкретно уже классы, скорее всего.
79: Латте, то есть для того, чтобы с ними было проще работать, мы получаем json, преобразуем и уже работаем с ними.
80: Угу. А дитишки мы можем отправлять вот на презентейшн слой, на экран и там с ними работать?
81: Ну, скажем.
82: Сейчас.
83: Ну, ты можешь достучаться с презентейшен слоя, например, там, ну, чтобы забить какими-то данными, то, конечно, можешь. Это просто класс, который ты импортируешь в, в презентейшен, и все, не вижу проблемы. Вот, ну,
84: Можно, да, можно. А нужно ли вот вопрос, нужно ли оно? Нет, вот скорее, скорее не нужно, не нужно, не надо, да, то есть такого делать, конечно, не надо. То есть у тебя, детошка, это класс, который отвечает за то, чтобы ты данные получил, преобразовал и сохранил.
85: В стейте уже конкретно приложение, то есть ты уже из стейта достаёшь эти данные, но
86: Вот для этого используется дто. Угу. А ntt не знаешь, что такое? Ну, энтити поинты, я так понимаю, это уже кусок урла в запросе, куда ты обращаешься? Нет?
87: Это туда же про модели энтити модели я имею ввиду энтити классы.
88: Возможно у них разные разные направления в работе. То есть там дтошки это конкретно класс энтити это может какая-то сущность, которая отвечает за преобразование полученных
89: Данных в запросе не знаю, предполагаю. Ну, вообще в 2 словах энтити это как бы, business logic моделька. Это то, с чем мы там на слое бизнес логики работаем. Дито это дата, трансфер, модель та, которая
90: На дата слое лежит. Угу. Получается, у нас есть 2 вида моделей. Одни с бэка как бы приходят в чистом виде. Мы их там спарсили с джейсона, а вторые мы на бизнес логике используем. И есть ещё мапперы.
91: Не переписывают, а как из дито создают энтити и наоборот, из это. Ну, короче, если че, почитаешь потом подробно, конечно, конечно. Окей, окей, хорошо. А знаешь, что такое юскейс?
92: Юзкейсы, по моему, 1 раз. Юскейс, я услышал на 4 курсе, когда мы описывали поведение юзеров и описание базы данных. То есть у тебя есть какая-то админка и мы описывали юскейсы, как
93: Каждый тип пользователя должен себя вести. Вот, конечно, в вебе, в мобилке тоже используют. Есть кейсы для, для того, чтобы описать поведение, функционал.
94: Я так понимаю, после, после слоя.
95: После слоя презентейшен, наверное, где-то там, то есть у тебя идёт отделение логики вью от бизнес логики и вот какие-то кейсы используются там для этого.
96: Окей, а может быть, знаешь, что такое интерактор?
97: Я, я не вспомню, честно. Ну, что-то такое было, я не вспомню. Да? Окей, окей, если че, там тоже потом это не будем останавливаться. Погнали дальше тогда.
98: Так, так, так, так, так, так, так, так, так. Давай, наверное, уже к торту ближе перейдём.
99: И такой будет вопрос. Знаешь, что такое иммутабельный класс? Класс, который не должен изменяться, обычно используется
100: Селит, селит классы. Есть такие, которые не должны изменяться. То есть у тебя класс, который иммутабельный, она ещё, ну, с иммутабельностью мы ещё начали работать, насколько я помню, с редакса, когда начали изучать
101: То есть у тебя есть state is java script я ещё там, который он не должен сам, сам себя изменяться вместо того, чтобы изменить сам класс, просто класс пересоздаётся с новым ключом. Так, обеспе?
102: Ну, сохранность данных, вот иммутабельность в дарте реализуется с помощью идентификаторов класса. То есть у тебя там есть силит классы, которые запрещены к
103: Угу. А обычный класс не силит, мы не можем сделать ему табельным. Ну, идентификатора можем дописать, и все. Нет, нет, не использует. Идентификатор силит класс.
104: Не совсем. Их можем как обычный класс использовать обычный класс без модификатора сил сделать его мутабельным. Там ещё, по моему, есть какие-то специальные аннотации через собаку. Можно ещё что
105: Такое придумал, если я не ошибаюсь. Ну, вообще есть, да, аннотация мутабл, но эта аннотация просто скажет линтеру подсветить тебе кое-что, что является ответом на мой вопрос. Вот вопрос.
106: Догадаешься, что, что она заставит тебя сделать, что заставит тебя сделать, линтер. Если ты эту аннотацию поставишь над классом, она попросит, скорее всего, тебя привести методы. Не, не свойства.
107: Класса к к final, чтобы чтобы сам конструктор тоже можно было привести к const или к final что-то такое да, да, все верно, все так, да.
108: Супер. Отлично. Смотри, следующий вопрос. Знаешь разницу между экстенс и implements ключевыми словами? Угу. Экстенс используется для того, чтобы расширить
109: Класс. А имплемент в основном для того, чтобы реализовать класс экстенс используется для наследования классов implements, больше используется для того, чтобы когда у тебя есть какой-либо
110: Интерфейс, его нужно, ну, реализовать. Окей, гуд гуд. Так, следующий вопрос. Смотри, у нас есть в дарте операция сравне.
111: Да. Угу. Если мы её переопределяем, то нам нужно переопределить хэш код. Да, почему я? Я уже пару раз запаривался над этим вопросом. В общем, у нас
112: В во флаттере хэш код, он как бы вычисляется для каждого класса, и под него выделено интовое значение, которое при вычислении может случиться так, что
113: Оно повторяется, потому что, ну, конечное число вот. И поэтому когда мы переопределяем равно, ну то есть сравнение, то ты обязан переопределить и вот этот хэш код. А почему? Потому что
114: Есть структурные структуры, которые используют как раз-таки hash для того, чтобы хранить эти данные.
115: Окей, окей, супер. Об этом мы ещё чуть попозже поговорим. Вопрос такой. Я сейчас тебе скину в чат код.
116: В чем заключается вопрос? Смотри, у нас есть класс, а он пустой, в нём нет никаких методов, вообще ничего, просто пустой класс. Мы создаём 2 его экземпляра, a1 и a2 2 разными способами 1.
117: Как днемк, a2 как object и потом пытаемся у обоих его экземпляров вызвать метод бла, которого ещё раз напоминаю в классе нет, что произойдёт в 1 и во 2 случае.
118: Ну, в 1 случае.
119: Поскольку класс, скорее всего, динамический, и он не знает о том, что внутри динамика есть, какие есть свойства и методы, хотя, скорее всего, компилятор все равно должен. В общем, я предполагаю, что
120: В 1 случае on таки создаст этот класс, но при выполнении бла скажет, что ой, я не могу найти этот метод, а во 2 случае он сразу подсветит и скажет ой, а я не могу найти этот метод в этом классе.
121: Угу. А, ну ты имеешь ввиду, во 2 случае он подсветит в какой момент? А так сразу при написании. Ага. А в 1, а в 1 он как бы скажет, окей, я создаю класс.
122: А потом при выполнении уже скажет, ой, а я не могу найти этот метод.
123: Угу. Окей, окей. Ну да. Так, так, так оно и есть. Хорошо. Так.
124: Пум, пум, пум, пум. Пойдём дальше. Тогда немножко про коллекции вернёмся. Вот как раз-таки немножко к тому, что мы говорили про операции, сравнения, хэш коды. Знаешь, что такое итерабл ит?
125: Это класс, который отвечает за итерации. Насколько я помню, он
126: Связан с листами вот такое. То есть в нём содержатся методы, которые помогают работать с итерациями.
127: Угу. Да, да, да, все верно. Это у нас, ну, супер класс, по сути, для коллекций, для листов и Сетов. Вот. Но map не реализует его.
128: Вопрос почему? Ну я помню, что мы мэпп преобразуем для того, чтобы его как-то протрирот там спрашиваем то ли его entity например зачем, почему не, а потому.
129: Потому что у тебя список, это как раз-таки итера, ну он может проитерироваться, а map это объект, который, ну как бы проитерировать сложно, поэтому он там не нужен.
130: И поэтому уже их преобразовывают. Отлично, отлично, хорошо. Так, а теперь возвращаемся к хэшам. Знаешь, что такое hashmap? Hash map. Это
131: Свойства классов, которые вычисляются и используются в определённых структурах.
132: Ну, почти, это хэш осно, да, да, он как-то там, я помню, что каждый класс создаёт, ну, он знает, что у него есть хэш мэп, он берет этот хэш мэп определённым образом и, по моему, из
133: Класса и ты можешь его переопределить и ну то есть заставить как-то вычислять уже свой если тебе он это надо не не совсем туда ты ушёл это просто вот метод hash у нас есть, есть
134: Да, да, да. В классе. Вот, а есть такая структура, которая называется hash map.
135: Основанная как раз-таки на этих хэшах, да, она в качестве ключей, по моему, использует эти хэши. Угу. Что-нибудь ещё знаешь про них? Про хэшмап, да?
136: Ну, ну окей, ладно, пойдём дальше. Да, там, там есть, там есть свои приколы, просто прикол этих.
137: Ну, самая главная фича этих структур, мы их не часто используем, но они очень классные в определённых случаях, например, когда у нас есть там, когда тебе нужно, по моему, список сделать связный, там, двусвязный, там
138: Ну, короче, есть определённый функционал, который очень помогает их использовать. Просто мы их не так часто используем и работаем с ними. Есть такое.
139: Окей, пойдём дальше. Давай ещё про асинхронность поговорим. Угу. Знаешь, ну, вообще, как работает у нас в торте эвентлуп? Угу. У нас есть event loop и
140: У нас и в браузере, который отвечает как раз-таки за обработку всех ивентов, и у нас есть микро и макро таски. Так вот, когда получается
141: В event клуб попадает асинхронность, то этот ивент клуб останавливается, ждёт завершения данной операции, а затем уже продолжает обрабатывать остальные ивенты. Ну, опять же там есть свои, свои.
142: Нюансы с приоритетами. То есть какая там микро или макрозадача, у них там своя приоритетность, но примерно так обрабатывает он их
143: Окей, а знаешь, что такое изолят?
144: Изоляты, изоляты. Это, в общем, флаттер, он однопоточный. Вот. И грубо говоря, когда тебе вот этот ивент клуб, он пытается
145: Обработать какую-то очень большую асинхронную функцию, он зависает и для того, чтобы как-то выполнять эти асинхронные функции вне основного потока придумали изоляты, он, он порождается, выполняет, не мешает.
146: При этом основного потока выполняет свои функции, отдаёт данные обратно в основной поток и как бы завершает свою работу.
147: Угу. А знаешь, как создать изолят? Там есть, по моему, 3 способа. И самый из них это самый простой из них. Это изолейт. Точка fall.
148: Что-то такое там есть, по моему криейт изолят что-то. В общем было, было 2 задачи, 1 из которых досталась моему коллеге. Я потом пытался найти ошибку в его коде. Нужно было спарсить.
149: Файлы, которые хранятся в директории на телефоне. И ты когда нажимал, ну, нажимаешь точку, кнопку спарсить и крутится прилоде. Вот эта функция оказывается очень тяжёлая и вот как раз для этого был создан, изолят, чтобы
150: Не нагружать основной процесс. И я смотрел, я как бы понимаю, как оно работает, но напрямую, как бы не было такой задачи, чтобы прям глубоко нырнуть в изолятор. Окей, а может быть, сможешь вспомнить, как между
151: Изоляторами можно передавать какие-то данные, как в него передать и как из него потом передать там там ограничения, они общаются с помощью, по моему портов или порталов. Что-то такое и запрещено передавать какие-либо
152: Какие-либо типы данных, по моему, кроме самых самых простых. Поэтому, если у тебя есть какой-либо большой объём данных, то его пере, его пере, переделают.
153: Стрингу передают стрингой и потом дешифруют эти данные обратно. Ну, там, скорее всего, через сон. Угу. Окей, окей. Хорошо, ещё вопрос.
154: Про стримы можешь в целом рассказать, что такое стрим, как работают они, стрим переводится как поток и стримы.
155: Ты креет. Стрим есть функция для создания стримов, для того, чтобы существуют различные стрим листенеры. Для того, чтобы отследить изменения, и стримы предоставляют определённые
156: Дополнительных функций для того, чтобы работать с ними. То есть ты можешь его породить, вовремя остановить у тебя
157: С ними классно работать, потому что ты всегда можешь понять, что происходит с ними. Не знаю, пойдёт такой ответ или нет. Да окей. Вопрос тогда такой. Ты вот.
158: Сказал про 1 способ создать стрима. Знаешь, ещё какие-нибудь там есть?
159: Там, по моему, есть ещё синк и асинк со звёздочками, что-то такое. Вот. Помню, что ими тоже можно порождать их, если я не ошибаюсь.
160: Окей, окей, хорошо.
161: Давай ещё про миксины поговорим. Смотри, у нас кла. Ну, знаешь, что такое Мексин в целом? Да, да, да. Мексин. Из за того, что рассказать.
162: Я просто верю. Вопрос такой. Смотри, к классу примешано 2 миксина.
163: В них в обоих есть одинаковый метод. Угу. И мы этот метод вызываем, из какого миксина этот метод сработает и сработает ли это вообще это?
164: Сработает. Вообще, я помню, что там определённая логика, что чем чем миксин правее, тем как, по моему, он главнее. Поэтому если до того, как этот
165: Им встретиться, там будет этот метод, то выполнится последний, который, который будет предоставлен, описан. Окей, окей, знаешь, как можно вызвать в каждом?
166: Как можно вызвать в каждом?
167: Как в каждом сине вызвать один и тот же метод?
168: Ну, тут, ну, перемешано 2 миксина, и мы вызываем в каждом из них этот метод.
169: Там, наверное, будет какая-то хитрость с
170: Передачи, может как-то с миксина в миксин, что-то такое. Не знаю, не знаю что.
171: В правильную сторону думаешь, да, там нет механизма как такового, но можно сделать миксин, который забирать этот миксин и вызовите из него метод, там метод этот, назвать по другому. Ну, короче, не, ну я не знаю, это уже не звучит как магия, это просто уже звучит.
172: Как кусок реализации, потому что если ты лезешь в метод и переписываешь ему ещё что-то, то это уже, ну нехорошо. Вот было бы ты пишешь миксин на миксин.
173: Окей, если че погугли на star flo есть ответ на этот вопрос, там даже даже несколько реализаций таких всяких есть, но в целом как будто в жизни не пригождалось ни разу, слава Богу.
174: Не дай Бог такое, чтоб пригодилось. Окей, хорошо. А экстеншены, знаешь, да, экстеншены, это очень крутая и полезная штука, когда у тебя есть
175: Скажем так, библиотека какая-то, у которой там класс, к которому ты добраться, например, не можешь, и ты хочешь его модифицировать. Как-то то ты можешь написать экстеншен к нему, который поможет тебе расширить этот класс своим функции.
176: Очень классно использовать, например, с dior ты можешь расширить, например, опшен у dior и навесить на них там какую-либо свою логику, например, с преобразованием там хедеров очень круто.
177: Угу. Окей. А знаешь, может быть, как они под капотом работают? Как механизм устроен вообще в целом работа экстеншена?
178: Нет, не знаю, не смотрел, но думаю, что, возможно, они как-то
179: Может как-то копируют класс основной и пытаются его расширить. Я ну может быть я это так.
180: Ну, почти, если че, почитаешь потом там, да, да. Используется в рапер. Ага. Обёртка, да. И как его. Да, да, да. Ну, просто обёртку над.
181: Создаёт, по сути. Угу. Окей. Погнали дальше. Вопрос про память можешь рассказать в целом, как в дорте у нас работает память, сборщик мусора и все вот эти дела. Угу. Угу.
182: Ну, когда ты создаёшь переменную, то дарт выделяет под неё определённые участки памяти, и он старается создавать эти участки так, чтобы.
183: Оптимизировать работу приложения, когда ты создаёшь какие-либо там стримы и не удаляешь их, то у нас есть Гарбач коллектор, который следит за тем, чтобы неиспользуемый неиспользуемая память.
184: Чистилась там определённые свои механизмы. Я читал о том, какие механизмы используются в джаваскрипте, но не читал, какие механизмы используются конкретно во флаттере, они там определённым образом помечают.
185: Смотрит, когда вызывалось последний раз. И надо ли это. В общем, когда у тебя происходит, скажем, ты выходишь с экрана и у тебя функции диспос, не прописано удаление.
186: Скажем, потока, то гарбуш коллектор пробежится по всем потокам, которые были созданы, и посмотрит, есть ли ещё кусок функционала, который запрашивает, либо следит за этим потоком. И если он его не обнаружит, он его убивает. Вот примерно так.
187: Collector отрабатывает на флаттере с потоками окей. А может быть, про поколение сборщика мусора слышал? Не?
188: Следил за этой темой. Ну окей, хорошо, я общее понятие про garbage collector есть, но о том, что там уже какие-то поколения появились, понятно, что google пытается арт. Нет, нет, не, не, не, не, нет.
189: В этом вопросе нет, просто в целом механизм Гарбич коллекшн в дорте это сборщик мусора по поколениям. То есть у него есть поколение мусора. Вот он делает сначала там по 1 проходит, потом их перекладывает.
190: Они становятся 1 поколения, 2 поколения. Вот там это вопрос был про именно сам механизм, как он это делает. Ага, что помещает и какие я почитаю, я почитаю обязательно, да.
191: Так, мы на собеседовании про флаттер дошли до вопросов, про флаттер, кстати говоря. Спустя 45 минут. Ну нормально, хорошо, идём. Да, да. Так, вопрос.
192: Такой знаешь что такое inherit виджит?
193: Да, это 1 из типов виджетов, который используется для передачи значения по дереву виджетов. У него есть свои ограничения, его там нельзя вызвать, по моему, в конструкторе.
194: Короче, крутой крутой класс, крутой, с крутыми методами, с помощью которых можно гонять по дереву видджитов данные, не передавая их прям по каждому компоненту.
195: Окей окей окей, хорошо. А знаешь что такое ключи? Ну k в виджитах по любому слышал и видел, да, ключи 1 из.
196: Свойства виджетов, которые используются, ну, для идентификации различных видов виджетов. Особенно ключи нужно использовать, когда у тебя есть, например, список виджетов и эти виджиты. Нужно как-то
197: Мониторить. Ну то есть, чтобы флаттер понимал, что к какому конкретному объекту относится этот ключ, идентифицировать их, потому что если ключи не передавать, например, в списке, то может возникнуть ситуация, что объект изменился, там его
198: Нужно перерисовать, а для флаттера, ну, это непонятно.
199: Угу. А можешь поподробнее рассказать, вот как ключи связаны с перерисовкой? Ну, я помню, там есть определённые валы икей, которые должны быть у них.
200: И благодаря этим валу икеям, потом происходит логика, при которой, ну, он идентифицирует их, либо каким-либо способом при изменении уже самого.
201: Я так понимаю, итома он понимает. Ага, он изменился. Надо его перерисовать. А слышал, может быть, про то, что у нас помимо виджит дерева есть ещё 3 элемента и
202: И рендер обжект видит дерево тоже, да. А знаешь, что хранит дерево элементов в себе?
203: Что хранит дерево элементов в себе?
204: Структуру всех элементов, я так понимаю. Просто я помню, что виджет дерева это как раз-таки то, что мы, мы конструкт с помощью флаттера описываем. Рендер, обжект дерева, это как раз уже сами рендер
205: Компонентов, а элемент дерева, дерево элементов. Но я его, ну так не помню, что конкретно реализация в нём, а может быть просто каждый элемент в дереве элементов, что хранит, не знаешь каждый
206: Элемент в дереве элементов, наверное, связь, ссылку с на какой конкретно рендер обжект он указывает, скорее всего, как-то так.
207: Ну, в каком-то смысле, да, но не совсем, не каждый элемент имеет рендер обжект. Ну, короче, почитаешь. Окей, там, ну, если почитаешь про дерево, элементов, станет сильно.
208: Понятнее, зачем нужны ключи и сильно понятнее, как в целом рендеринг во флаттере происходит и как сделать так, чтобы он лишний раз не перерисовывался. Вот. Поэтому прям полезная штука. Окей, хорошо, тогда вопрос такой.
209: Знаешь, что такое page сторедж и page сторедж кей может быть?
210: Не знаю, могу предположить пейдж 100 k.
211: Не знаю, честно. Че че то 1 раз слышу такое. Окей. А репейн баундери виджит такой не использовал ни разу. Репейн баундери, я его видел. Я его видел, да, по моему.
212: По моему, эта штука, которая может у тебя найти конкретный конкретный объект в дереве объектов, что-то такое. Не, нет, это ладно.
213: Все, не будем останавливаться, времени очень мало. Прости, я тебя потом погнали дальше. Можешь рассказать про жизненный цикл стейтфул виджита.
214: Да, у него есть определённые
215: В общем, мы вызываем, вызывается иниц тейт. После этого, скорее всего, насколько я помню, там есть метод.
216: Build, если мы используем в билде ещё state, то есть ещё 1 метод, который вызовется перед изменением самого стейта. И есть ещё
217: Метод, который вызовется, если мы в виджит, передадим изменённый, изменённое свойство какое-то дит виджит ченж, что-то такое.
218: Он remote диспос. Ещё есть метод, который вызовется, если при при уничтожении виджета.
219: Так, и что-то там ещё по моему я пропустил.
220: Деактивейт есть, деактивейт этот виджет вызовется как раз-таки, наверное, перед удалением виджета из дерева деактивейт нет.
221: Да, сперва деактивейт, потом, по моему, диспос. Так это работает не совсем. Ну ладно, окей, хорошо, погнали дальше тогда.
222: Работал с навигатором 2 0. Ну да, какими-то было, было, был переход с навигатора 1 и 0 на 2 и 0. И пришлось некоторые функции переписывать.
223: Ещё был навигатор от get x. Пришлось поработать, и, по моему, ещё go роутер был тоже.
224: Библиотека. Можешь про go роутер поподробнее немножко. Как там вообще? Я помню, что прикол большой плюс go роутера. Что когда ты работаешь с диплинками, у тебя
225: Есть классная возможность легко эти диплинки подключать и навигироваться основной плюс, плюс она предоставляет возможность вложенной навигации. Что
226: Достаточно, ну, сложнее делается на навигаторе 2 и 0. Вот основные плюсы. И, ну, там плюс набор методов, которые позволяют проще навигироваться, чем в навигаторе 2 0. Угу.
227: Торотом работал. Нет, не было опыта, не работал. Я видел, что также эта библиотека есть, что она тоже популярна, но просто не получилось с ней столкнуться в каком-либо проекте. Ну, они с go роутером похожи, на самом деле. Окей.
228: Немножко про анимации. Знаешь, что такое анимейшн контроллер и как с ним работать?
229: Да, есть специальный миксин, который необходимо подключить, если ты работаешь с анимацией для того, чтобы передать ему в sign анимейшн, контроллер используется для того, чтобы ты мог как-либо управлять.
230: Этой анимации. И как раз-таки контроллер отвечает за то, чтобы предоставить тебе методы для управления модификации этой анимации и удаления после выхода.
231: Это уничтожение виджета, чтобы почистить за собой все окей. Хорошо, был опыт с работы с нативом. Ну, именно связки фла.
232: Было пару задач, которые необходимо было реализовать. И там 1 из задач звучала так, что у нас есть камера, нужно стучаться к камере.
233: Брать QR-код и передавать этот QR-код парсить и возвращать его во флаттер и я немножко успел поработать я не нативный разработчик, я просто помню, что связка была реализована с помощью метод ченелов и нужно было на.
234: Экране, там дорисовать пару кнопок, закрывание, открывание такое вот. То есть это был прям целый виджет, целая библиотека. Потом вот, ну, получилось, работал, кое-что есть там какие-то понятия. Окей.
235: Знаешь, чем метод ченал от event channel отличается?
236: Нет, ну не знаю. Окей, окей, пойдём тогда дальше. Нотификейшнс есть опыт какой-нибудь? Да, да.
237: Работал, работал, есть опыт с фрбс уведомлениями, есть ещё от huawei, подключали уведомления от huawei, потому что на их аппаратах там своя библиотека сдк для работы.
238: В основном используется фаербейс. Помню, что есть ещё сигнал, которая тоже предоставляет возможность работать с пушами. Только у них там свой сервис целый на этом крутится. Вот. Ну, в основном используют фаербейс, конечно. Угу. Окей.
239: Отлично, давай ещё про работу с сетью поговорим. Знаешь, что такое интерсептор?
240: Interceptor это мидл бара, которая позволяет тебе навесить дополнительный функционал в в момент, когда ты уже.
241: Ты уже вызвал метод, который вызывает запрос, но при этом запрос не улетел. То есть ты, например, в этом интерсепторе можешь каким-либо образом обработать либо сам requests, либо респонс, либо он error отработать определённым образом на весь свой.
242: Так, например, добавляют, если у вас там живой токен какой-нибудь, нужно добавлять хедер, то вот прекрасное место для того, чтобы его вытащить откуда-то из стора и повесить на запрос. Окей, отлично.
243: Такой вопрос. Смотри, нам приходит с бэкенда джисон, да, как нам его можно стерилизовать и десерилизовать, собственно,
244: Есть функции сериал айс и de сериал айс, которые помогают это сделать. Мы в дио вместе с dio обычно используют ретрофит, который помогает тебе выполнять. Ну,
245: С помощью белтрана генерить как раз-таки модельки и использовать готовые методы для работы с сетью. Окей.
246: Был опыт использования, может быть, без ретрофита. Блин, когда-то очень давно, на 1 проекте мы ещё не знали ни про dio, ни про ретрофит. И что мы делали? Это мы.
247: Брали итипи, есть готовый сайт, я уже не вспомню. Апп, что-то там и туда можно было загнать джесон, который тебе возвращает сервер, ты туда его загоняешь, он тебе выплёвывает.
248: Готовую тошку ты её копируешь и переиспользуешь ну то есть это, это, это самое такое 1, что мы использовали окей, а json сериалайза не было опыта.
249: Не использовал. Так настолько нет. Окей. А фрист может быть, ну вот фрист это как дополнительно, как бы с блоком часто используют. Фрист тоже.
250: Как ну опять же как билл транер генератор моделек, можно использовать его модели и методы ну вот просто фрист генерирует же для классов методы from json и to json его можно исполь.
251: Для того же самого. Окей. Хорошо. А вопрос такой, как мы можем файл отправить в теле post запроса?
252: Как мы можем файл отправить в стиле постзапроса? Нужно пометить, что у тебя запрос будет содержать файл, а затем
253: А затем?
254: Медиа там что-то вроде media.
255: В retro фите, по моему, медиаквери есть такая штука, но я помню, что я отправлял, я создавал какой-то массив в этот массив, загонял.
256: В этот массив каким-то образом загонял данные и передавал их на сервер запросом. Но как я, я честно, уже это надо прям погуглить и вспомнить. Окей, а мультипарт может быть знаешь, что такое?
257: Мультипарт форм дата. Я так понимаю, что это как раз-таки пометка для запроса. Что ты собираешься серверу сейчас передавать файлы?
258: Угу. А как он примерно работает? Ну, типа, в общих словах механизм?
259: Знаешь, ну я так понимаю, ты помечаешь, помечаешь запрос, говоришь серверу, что ты собираешься слать данные сервер? Ну, файлы, в смысле, сервер видит, и, наверное, как-то с помощью, ну, посто.
260: Ну или Кусков, не знаю, он, скорее всего, как-то их делит на куски и передаёт серверу. Это все дело кусками.
261: Угу. Окей, окей. А на сервере они уже как-то там собираются?
262: Ну, в целом, да, так и есть. Окей. Ещё про локальное работу с локальными данными, какие, знаешь, библиотеки для работы с базами.
263: Данных именно в локальном хранилище. Ну, сикюр стор, дрифт, рифт, драйв, по моему, есть, есть хай.
264: Так что там ещё есть? Шарит преференсес. Ну, эскьюэль, да, эскьюэль, по моему, так она называется.
265: Угу. Окей, хорошо, хорошо. А с тестами был опыт? Было пару проектов, когда клиент приходил и на уверенных.
266: Говорил, что мне нужны тесты, мне нужны тесты. Мы даже начинали писать приложение с тестами. Но когда после пару спринтов он увидел, что работа идёт медленно, как это обычно бывает с тестами, он говорит, так, давайте тесты потом и
267: Продолжим без них, потом допишем. Ну, в общем, опыт работы с ними определённый имеется, но небольшой. Угу. Использовал, может быть, макита.
268: Макита маакте
269: Не ни 1, ни 2. Мы, по моему, писали юни тесты и небольшие тесты для того, чтобы, ну, для видджитов того, чтобы проверить функционал того, что он там, там отрисовался как, как надо.
270: И так далее. Можешь рассказать, что такое вообще виджит тесты и зачем? Ну зачем нужны. Сказал, а что это такое в целом? Это тесты, которые помогают понять, что какой-либо
271: Компонент, который ты ожидаешь увидеть, отрабатывает как надо при различном поведении. То есть ты можешь навесить логику там при наведении, спросить его, что там будет происходить при нажатии, что там цвет меняется там и так далее.
272: Угу. А знаешь, что такое интеграционные тесты тесты? Когда у тебя есть 2 каких-либо модуля, ты можешь написать интеграционный тест, чтобы проверить, что данный модуль
273: Как бы работает правильно, отрабатывает при разном поведении. То есть ты ему скармливаешь различные значения. А в чем разница между виджит тестами и интегра.
274: Иными тестами виджит тест он рассчитан на то, чтобы протестировать какой-либо маленький компонент, интеграционный тест это больше для уже какого-то модуля.
275: Угу. Окей, окей, хорошо. Так, ещё немножко по теории тестирования спрошу. Знаешь, что такое пирамида тестирования?
276: Так, пирамида тестирования.
277: Не, че то я такого не вспомню. Окей, а тдд идиди это методология, по которой 1 из методологий, по которой можно реализовывать написание.
278: Она заключается в том, что там подходы есть, при которых, ну, ты должен сначала написать отрицательный тест, затем написать функционал, ну то есть сам код.
279: Который должен быть реализован. Потом ты пишешь положительный тест, а потом ты на него ещё пишешь отрицательный, если я не ошибаюсь, таким образом ты покрываешь как бы основные основные функциональные возможности.
280: Хорошо. Так, ну почти все. Последний блок вопросов у меня остался про гид. Знаешь, что такое ребейс? Когда у тебя? У тебя?
281: Есть точка, относительно которой ты делаешь коммиты. Так вот, иногда бывает так, что эту точку, скажем, ты взял эту точку, наклепал коммитов, а потом кто-то ещё точку от точки которой ты делал.
282: Накомитил, ещё что-то. И тебе нужно эту точку 1 ребейс сделать, ребейс наверх, чтобы код, который уже новый тоже попал как бы к тебе. Поэтому ты делаешь ребейс. Ну это, блин, по моему, а чем?
283: От Мержа отличается меж, он стягивает код, который у тебя был в новый код, ты как бы к себе в ветку его стягиваешь, а ребейс он, наоборот, как бы переделывает.
284: Точку, основание которого ты берёшь, я так понимаю?
285: Ну, почти, он там коммиты переносит просто, то есть он точка там же остаётся, он просто коммиты наверх двигает. Ну, получается.
286: Ну окей, хорошо, тогда вопрос такой. Знаешь, что такое reset?
287: Да, это функция, которая помогает откатить твои изменения, которые ты сделал. Вот бывают там ещё какие-то модификаторы, у него мягкий, мягкий резет, жёсткий резет.
288: Я помню, что hard reset это жёсткий резет, он просто удалит все твои изменения, которые ты успел наклепать до последней точки, которая была.
289: А мягкий ресет, он, по моему откатит, откатит изменения.
290: До момента.
291: Не вспомню, до какого момента там, там есть какой-то нюанс, не вспомню, он их не удалит, просто они останутся в этом, господи, в чем они не остались, да, типа.
292: Изменения просто висеть в изменениях, что якобы файлы модифицированы. Угу.
293: Окей, хорошо. А знаешь, что такое Амент коммит?
294: Амент.
295: Нет, окей, это штука, когда, если ты сделал коммит, понял, что тебе после этого коммита нужно сделать сразу же ещё 1. Ну, типа там, я не знаю, ты не все файлы добавил в него, например, или
296: Запятую где-нибудь там пропустил, добавил и смысла делать прям новый коммит с логичными изменениями. Нет, тебе нужно сделать ещё 1, но 2 коммита с одинаковым названием не очень хорошо смотрится и получается какая-то шляпа. Ты можешь сделать Амент коммит, он по сути
297: Делает reset предыдущего. Софт объединит твои 2 коммита и закоммитит новым коммитом. Угу. И у тебя получается, как бы ты предыдущий коммит перепишешь новым, сохранив изменения из обоих. Угу. Вот. О, интересный способ.
298: Обычно, когда такое происходит, просто делают там пару коммитов и склеивают их в 1. И все на этом. Ну да, да, вот есть такая штука. Окей. А знаешь, что такое черепик?
299: Это когда тебе нужно взять определённую часть коммитов и стянуть их к себе и на основе них там уже продолжить кодить. Ты можешь сделать черри пик. Окей, хорошо. А был?
300: Опыт реализации или использования готовых сиайсиди.
301: Не занимался никогда подключением и работой. Ну, созданием билдов с помощью сиасиди. Хотелось бы, конечно, попробовать, но пока не было такой возможности. Окей.
302: Был опыт, может быть, настройки флэйворс. Мы флейворы работал, я так понимаю, у нас был 1, даже не 1 несколько проектов, где мы использовали флейворы для того, чтобы сделать
303: Мульти мульти брендинг получается 1 проект, но при этом он перерисовывался под разных клиентов. Там сплеши были разные, айдии разные, там иконки разные. В общем, он делил их
304: Угу. Окей. Так, наверное, последний вопрос. Знаешь, что такое сонаркьюб?
305: Sonarqube.
306: Ну, у тебя опыта работы в целом на сиайсиди не было или был? Нет, нет, ни разу не было. Так что нужно было его подрубить. Ну, то есть была бы задача, типа, пожалуйста, подключи его, а
307: Если готовый уже кем-то подрубленный на проекте не использовал, ну в гитхабе было ты делаешь коммит, делаешь пуш код попадает, и ты просто лезешь в гитхаб и просишь его собрать тебе и все.
308: В конце у тебя получается, он билдит билдит и в конце выдаёт тебе билд. Окей, окей, понял. Не было такого, что там Мереке, допустим, проверялись каким-нибудь анализатором, типа во время меревести.
309: Нет, такого не было такого. Я думаю, что тут уже
310: Тут уже как бы гитхаб берет на себя, он тебе говорит о том, что так ты не можешь Мери крест влить, потому что у тебя там конфликты. Будь добр, разреши конфликты, а после этого вливай. То есть он тебе физически не даст. Не совсем про это вопрос. Вопрос, скорее про блин.
311: Чувак, у тебя очень плохо написан код ты используешь, не знаю, там запятые не, там стоят. Комментариев у нас там быть не должно в коде или наоборот, они должны быть и че то такое. Ага, ну.
312: Такого не было. У нас обычно просто код ревью проходит и тебе там человек бьёт по рукам и говорит, так давай вот тут поправь, вот тут поправь. Ну вот есть просто штуки, которые немножко автоматизируют код ревью и такие мелочи, типа, стандартные смотрят.
313: Упрощает. Окей, хорошо. И у меня последний человый супер вопрос. Как оценить задачу, которую ты никогда не делал?
314: Так как оценить задачу? Так, ну, я, наверное, потрачу время на то, чтобы понять.
315: На то, чтобы понять, что за задача, предметную область и обязательно консультация там с человеком, который этим уже занимался. То есть, если есть возможность кого-то спросить, если нет, то это, конечно, посложнее и
316: И нужно потратить. Я как обычно делаю. Мне кажется, что там, например, на задачу уйдёт неделя, но я всегда беру с большим запасом, ещё добавляю туда, там чуть ли не половину времени, потому что говорю о том, что могут быть
317: Подводные камни, задача новая, я такого не реализовывал и так далее. Ну вот стараюсь как бы адекватно, ну то есть объяснить, что почему такой большой эстимейт выбран.
318: Окей, окей, хорошо. И у меня все по вопросам. Может быть у тебя какие-то есть?
319: Что там за проект. Просто мне описали, что там какой-то проект, который связан с казино, по моему, и
320: Интересно, что ж там за стек такой, и что, в принципе, за казино? Я, к сожалению, не знаю даже, на какой тебя проект смотрят. И. Угу. Вот. И куда тебя хотят отправить. Поэтому.
321: Даже сказать ничего не могу. Угу. Угу. Это просто текст собес. Я понял. Вопросы не к тебе. Ну, спасибо. Прикольный был собес. На самом деле, есть, конечно, пару моментов, которые я ещё почитаю, но при
322: Прикольный. Прям прикольно. Обычно техсобес, он такой душноватый, а тут именно и вопросы прикольные из разной области. В общем, ну честно, мне понравилось. Спасибо. Я тебе, в общем, подробный фидбэк напишу, постараюсь сегодня успеть.
323: Прям распишу, что почитать, куда посмотреть. Вот чтоб тебе там пересматривать не приходилось, я все отметил.
324: И отдам рекрутёру, и она тебе уже там передаст. Понял? Спасибо большое. Спасибо большое. Все. Хорошего тебе вечера. Пока, пока, пока, пока.