Тестовое собеседование Java разработчика #24 - Никита Ким

Подготовка к собеседованию на Java Developer

Транскрипция видео:

  • И всем привет У нас в гостях сегодня Никита кандидат на позицию разработчика раскрыть себе кто откуда Какие цели перед собой ставишь Петербурга у меня 31 год изучают жабу примерно с 2019 с небольшими перерывами там были сложности в изучении плюс коронавирус цели ставлю перед собой до конца года сменить работу на данный момент интересный конструкт и погрузиться в разработку собственно Хорошо скажи пожалуйста вот на данный момент по javasteco что-то изучал по каким ресурсам До куда продвинулся Что изучал Я изучал Java Core это было

    00:00:00 - 00:01:23

  • по степику в основном плюс курсы изучал как бы кибернетик Spring дочери коснулся немножко ну как бы различные базы данных msql позже mongo db так ознакомился только в принципе Она работает сам не работал я понял А какие-то проекты свои маленькие писали командной разработка часто проект писал и немножко поучаствовал командной разработке проекты собственно были Я в прошлом году получается летом пробовал трудоустроиться и там выполнял разные тестовые задания ну и плюс был свой проект как бы писал небольшой онлайн

    00:00:41 - 00:01:56

  • магазин сейчас попробую писать свой аналог Пикабу либо Twitter Да я понял хорошо Хорошо ну давай начнем с тобой немного по технической части пробежимся То есть как мы обсуждали Давай начнем с такого примитивного у нас в любой программе есть метод Main у него есть свои контора падает [музыка] массив строк как аргументы каждое слово разобрать из объявлений этого метода Ну вне зависимости в общем как других пакетов скажем так Статик Это означает что он статичному как бы вызываться без создания экземпляра

    00:01:19 - 00:02:35

  • объекта воет то что ничего не возвращает и мы собственно название место Хорошо хорошо А может немножко более детально погрузиться в ключевое слово Статик что он дает Статик позволяет нам если это касается метода то позволяет нам использовать данный метод без создания экземпляра объекта как бы просто по имени класса это касается переменной то собственно точно также позволяет пользоваться нам этой переменной без создания объекта хорошо и Давай тогда отталкиваясь от этого ответа подумаем Почему метод Main

    00:02:05 - 00:03:28

  • который приложение является статическим потому что нет возможности создать экземпляр класса еще создавать хорошо и по поводу аргументов которые мы можем передавать в метод как Мы это можем сделать передавать аргументы в метод мы не совсем понял вопроса но мы у нас есть метод Main Да там есть массив строк вряд ли это просто так сделано и вероятнее всего мы как-то с этими аргументами можем работать так как переменная в методе по идее я бы мог там вывести список всех элементов этого массива Да ну вы сталкиваюсь

    00:02:48 - 00:04:10

  • Честно не знаю но думаю что это как-то подозреваю что мы можем переменную строку либо когда ты делаешь конфигурация запуска класса то там ты можешь указать аргументы самой идее указано хорошо Хорошо давай Немного более подробно по ним пройдемся Что такое массивы массив это структура данных собственно которая ограничена определенным объемом памяти мы задаем собственно при создании массива сколько мы хотим элементов туда вложить он динамический не расширяется и занимаются памяти непрерывное пространство

    00:03:36 - 00:05:13

  • Хорошо а почему он не расширяется динамически Почему не расширяется Так реализованность мы хотим как бы динамически надо воспользоваться коллекциями Какая мотивация в чем какой есть ограничение что нельзя просто накидывать постоянные элементы Я думал потому что один раз выделили память определенный кусок и чтобы надо было Заранее скажем так подготовить необходимость Мы хотим мы можем как бы заново выделить в памяти другой кусок хорошо предположим что я создал массив на 15 элементов и пытаюсь записать в 48 элемент

    00:04:41 - 00:06:14

  • что произойдет индекс по моему там как-то так называется ошибка что скажут с Java что дед такого индекса как бы хорошо вот это ошибка или исключение Так мы часть называем оно является проверяемым или непроверяемым это непроверяемые исключение как бы мы не должны обрабатывать Потому что если мы сами пишем такой метод то эта проблема в нас они программы скажем так да принято Хорошо хорошо есть такая штука а вот если я хочу поработать с динамическим массивом такой класс из джавы я могу использовать

    00:05:37 - 00:06:59

  • хорошо если мы загружаем массив по моему наполовину то он расширяется в полтора раза автоматически еще раз То есть если мы его наполовину заполняем то наша полтора раза по-моему наполовину либо либо на 75 процентов значение путаюсь периодически по-моему наполовину наполовину хорошо А зачем ты смотри предположим У тебя есть массив на миллион элементов ты заполнил 500 тысяч 1 и мы увеличим его в полтора раза правильно 500 тысяч свободных элементов есть подозреваю что это для оптимизации Мне кажется

    00:06:23 - 00:07:57

  • мы теряем время вот на момент когда мы увеличиваем Но с другой стороны мы подготовимся почву чтобы дальше записывать относительно производительности Давай еще более такой яркий пример приведем у тебя есть под капотом релиста массив на миллиард элементов ты добавляешь миллиард первый элемент и у меня теперь будет длина этого массива под капотом 2 миллиарда то есть 999 миллионов там девятки до упора будут стоять и ждать правильно [музыка] я ошибся У тебя есть под капотом массивная миллиард элементов ты

    00:07:36 - 00:09:07

  • заполняешь 500 миллионов 1 у тебя еще 500 миллионов ячеек и ты в ответ увеличиваешь свой массив под капотом до 2 миллиардов участвуется полтора миллиарда свободных ячеек Ну теперь я начинаю подождать что что-то есть скорее всего есть по похожая штука в хэшмэп лот фактор используется там и количество бакетов количество в массиве Да если очень грубо взять увеличивал когда заполняется 75 процентов по дефолту в роллисте если я не ошибаюсь перепроверил там немножко по-другому то есть там идет привод Когда

    00:08:24 - 00:09:43

  • ударяемся в границы то есть лимит тогда мы делаем увеличение надо будет перепроверить еще раз Хорошо хорошо есть такая штука Давайте вперед отталкивается того что мы с тобой сказали подумал какая у нас сложность О большое вставки элемента в реалист Смотря как мы вставляем если свободные места мы вставляем без увеличения тот единицы мы просто же переза нет стоп если в начало мы хотим заменить как бы текущие или просто если заменить тот от единицы по как бы хорошо хорошо и получается В общем случае то есть если все нормально еще

    00:09:06 - 00:10:30

  • раз как она будет сложность в общем случае от единицы худшему Вот хорошо Какая у нас сложность сортировки массива динамическом случае сейчас скажу это быстро сортировка логарифм по моему quicksort у него Логан а худший случай Какое бывает Для каких сорта [музыка] то есть мы говорим что В общем случае то есть в стандартном у нас будет хорошо А почему там есть другие транспортировки вроде бы звучит круто но из того что пока неплохо зачем например нужен То же самое мерч сорт и летим сорт там различные реализации не помню чтобы

    00:10:08 - 00:12:00

  • у кого-то была скорость быстрее честно говоря чем быстрый сортировки нет быстрее чем логин Я тоже не знаю но если например мы отдадим для Квик сорта уже отсортированный массив или какая будет сложно если [музыка] вообще логарифмическая должна быть думаю Вот как раз сложность Квик сорта Ну как бы недостаток точнее что если от демон отсортированный то сложность будет квадратичной именно поэтому мы квиксорт не всегда используем то есть используется мир мир сорт или хорошо есть такая штука разобрались Давай пойдем дальше у нас

    00:11:26 - 00:12:52

  • для работы с файлами стандартная Java есть две библиотеки да то есть это ИО и Нил более новой версии вот говорят что обеспечит не блокирующий доступ к ресурсам вопрос что это означает и второе за счет чего не обеспечить него как раз не блокируемый доступ [музыка] это значит Ну да Хорошо если более подробно является потоко ориентированным Да если они на что ориентируются а Ну сейчас как бы не скажу так то что он отректируется как бы примерно представляю что он не блокирует ресурс полностью частично

    00:12:21 - 00:14:01

  • он скорее как создается под капотом который работает который пишет знаком ли тебе такие понятия как буфер канал и селектор знакомств селектором не особо хорошо Вот ты когда говорил про реалист Ты затронул что он не потока безопасны Да есть класс потока безопасности не вспомнишь работать полностью отдельные чеки с которыми Мы работаем давай подумаем про название этого класса то есть копии он если из названия то Он копирует себе как бы этот массив тогда я так понимаю [музыка] происходит копирование хорошо хорошо

    00:13:33 - 00:15:15

  • Да если говорить что есть хэштей был устаревший Да там мы блокируем все полностью блокируем какой-то сегмент Бакета хорошо расскажи пожалуйста что такое Стрим в контексте Стрим API Рим это потоки данных чтобы по большому счету синтаксический сахар Чтобы проще было работать с коллекциями силами с помощью них реализован функционально программирование это синтаксический сахар или это введение функциональной парадигмы но отчасти введения функциональной парадигмы наверное больше Хорошо Хорошо смотри вот у меня есть методы Да после

    00:14:51 - 00:16:25

  • ipi какие две большие группы методов У нас есть промежуточные терминальные собственно Стрим работают у нас один раз завершает начинает выполняться и завершается по выполнению терминальных операций как бы до терминальных можно поставить несколько промежуточных сколько душе угодно что возвращают мне не терминальные методы возвращает они возвращают Стрим как бы в зависимости от того какие то операции они могут вернуть Стрим того же типа данных либо изменить данных Хорошо хорошо вот есть мне например два

    00:15:40 - 00:16:56

  • метра которые довольно часто используется это методы Мэт и флэтмен что делает каждый из них в чем отличие преобразуем тип данных другой тип данных объекта если они тоже являются с ними Давай еще уточним то есть объяснила не понимаю пока как работает он возвращает нам даже не ходи только коллекции по моему залазим получаем объект потом проваливаемся в него собственно и по полям вот выдаем стрельбы Ну то есть ты говоришь например у меня есть класс девелопер у него есть иные То есть я передаю коллекцию таких

    00:16:19 - 00:17:47

  • девелоперов которые мне сейчас допустим 100 разработчиков 100 объектов разработчиков в метод то есть я говорю там Ван Хантера точка Stream и что я получу из этого если если только в полях есть хорошо то есть ты говоришь что например у меня есть листов хорошо получил если листов допустим для простоты я передаю их и что я получаю а лист интеджеров мы Передаем Во флотме мы говорим что у нас есть коллекция коллекция то есть лист котором лежат листы то есть Каждый элемент этого листа это еще один лист

    00:17:26 - 00:18:54

  • котором интеджеры и передаю вот их Во флэтмен что произойдет Для чего я хочу это сделать чтобы работать уже как с потоком с коллекцией вот которым передали каким типом данных Я буду работать вот я получается пошла какая-то Там Ой какой тип данных будет этого Хорошо хорошо И второй вопрос С каким функциональным интерфейсом Мы взаимодействуем в обоих этих методах если функция называется отлично является функциональным интерфейсом Что такое функциональный интерфейс интерфейсам маркерная такая метод может быть в функциональном

    00:18:28 - 00:20:07

  • интерфейсе один публичный не имеющий без реализации один абстрактный метод один фрагмент визуализации хорошо А с чем вызвано такое ограничение тем что когда мы используем их собственно в лямдах чтобы точно понимала что мы хотим делать да потому что не пойму какой метод реализуем Да сейчас Супер Что такое лямбда [музыка] скорее можно отнести синтетическому сахару как бы это создание анонимных класса хорошо Хорошо давай понемножку по много по точке тогда вот есть Такая сущность сервис вопрос что это такое Какие сдачи Он решает и

    00:19:40 - 00:21:14

  • второе Какие имплементации этого интерфейса У нас есть имплементациям честно я не помню какие задачи Он решает как бы мы чтобы не запускать потоки вручную потому что это как бы энергозатратные на приемка операция как бы мы вот создаем сервис с определенным количеством потоков и закидываем него задачи которые надо решать он сам распределяет эти задачи по потокам после того как поток отработал задача он как бы накидывает многое Хорошо хорошо есть такая штука Давай такой еще вопрос все-таки попробуем разобраться с имплементациями

    00:20:31 - 00:21:49

  • как что может быть слышал какие-то классы хочу поработать более детально как не создать сервис Насколько помню через Factory создается там ты говоришь [музыка] по умолчанию максимальное -1 максимальное количество потоков столько сколько позволяет Наша машина Ну А могу я создать допустим я 8 ядер А я хочу создать 500 потоков не мешает что-то сделать это ограничение по железу Ну мы говорим о том что мне компилятор что-то скажут я не запущусь у меня поломается что-то что произойдет нет Я подозреваю что компилятор не

    00:21:13 - 00:22:47

  • скажешь ничего просто это фактически не будет как бы решающий ролик скажем так То есть это может быть неэффективно ты имеешь Хорошо хорошо допустим давай такую ситуацию рассмотрим у меня давай так еще с другой стороны зайдем чтобы докопаться Что принимает тебя из-за компьютера сервис на исполнение задача У меня есть необходимость отправить миллион имейлов то есть Пришла коллекция в нем коллекция строк это каждая строка это e-mail нужно на каждый из них отправить email Привет Как мне это сделать с помощью сервиса

    00:22:16 - 00:23:50

  • насколько я помню принимает он Объект который имплементирует рано был или кола был либо наследников тред Если вы памяти смеет Вот так это принимает или возвращает голову или рано был принимает возвращает он объекты типа [музыка] хорошо достать результат наших работ хорошо а что такое слышал может быть Future Task [музыка] Да собственно он походу принимает объекты примерно хорошо уже получше Давай еще такой вопрос а слышал ли ты про такую штуку как рекорсе слышал читал где-то что это а имплементация либо Ну да скорее

    00:23:06 - 00:24:56

  • интуиция не помню там питаться Давай остановимся хорошо то есть и в чем его особенность То есть как он работает он может сам по себе насколько если правильно понял как это работает он делится задачи на под задачу Так мы стараемся все-таки рекрутированные какие-то вещи туда методы которые содержат круче закидывать туда и он делит это до самых маленьких частей собственно возможно и потом объединяет все эти результаты вычисления в одну один ответ почему тогда мы не всегда его используем вроде stargus звучит хорошо почему мы

    00:24:23 - 00:25:45

  • все остальное не выкинем и ставим только поражен пул всегда у нас есть задача которой можно бесконечно делить во-вторых Я не знаю кроме вот этого момента порядок исполнения можем как-то гарантировать исполнение я не помню что-то можно было ограничивать Ну вот если у нас важно как бы порядок исполнения тогда тоже да хорошо отлично давай дальше пойдем тогда Смотри Вот у нас есть Опа есть солиды то есть принцип соли Солид набор принципов и там есть буква О что это такое как ты понимаешь для изменения собственно

    00:25:06 - 00:26:36

  • Единственное что мы можем дополнять Классно Ничего не меняется единственное как для себя я понял это что единственный вариант Выход из этой ситуации это просто наследоваться я не знаю решить эту задачу хорошо Приведи пример нарушение этого принципа нарушение То есть хорошо хорошо Например у меня есть какой-то базовый класс У меня есть у него два наследника B и C и Например я в класс B основано том что сказал чтобы следовать принципу openclosed добавляю новый публичный метод с которым я работаю потенциально какой принцип солида я могу

    00:26:01 - 00:27:48

  • нарушить Если я так сделаю хорошо хорошо есть по шаблону 100 пройдемся вот у меня есть такие два шаблона довольно известных состояния стоит и стратегии стратегии в чем между ними отличия если знаком с ними честно с ними Незнакомка разбирал некоторые шаблоны хорошо Аки шаблон ты разбирал разбирал я [музыка] доктор что он делает Для чего Нам нужен хорошо а мост знаком с таким шаблоном мост слышал но реализации не видел хорошо отлично давай то Никита мы с тобой пройдемся по задачам как говорил я тебе

    00:27:08 - 00:28:48

  • сейчас кидаю ссылку в наш чат сюда на код Шер и попрошу тебя пошарить экран Да есть отличника Итак нам с тобой предлагается решить задачу в которую в которой мы хотим определить является строка которому Передаем в метод из палиндром палиндромом То есть палиндром это строка которая и слева направо и справа налево читается одинаково да то есть нам говорится что фраза является если после конвертации всех символов в Верхнем регистре в нижний регистр и удаление всех не буквенно числовых символов она что

    00:28:18 - 00:29:44

  • касается одинаково вперед и назад то есть буквенные числовые символы включают в себя символы и буквы и числа то есть мы говорим что нам дается строка S мы начнем True если на палиндром и Фолз если она не палиндром настройки 4 мы имеем пример Example 1 и здесь мы говорим что у нас есть Channel панама да то есть output будет труп Потому что когда мы все приведем к нижнему регистру мы получим вот строку как на линии номер семь и там идет аманопла то есть я не выговорю это извини но слева направо и справа налево

    00:29:02 - 00:30:28

  • начинается одинаково есть на строке действует к То есть она будет false потому что мы получим на строке 12 строку но она читается по-разному слева направо и справа налево и если например пустую строку либо только пробелы то после удаления Всех элементов это будет пустая строка Мы тоже возвращаем True У нас есть контракт на строке 22 мы пишем что длина нашего нашей строки от одного до двух пятой степени и строка содержит только адски символы всё вот можем подумать как это реализовать Ну я бы реализовал то Сначала мы через лигакс

    00:29:44 - 00:31:10

  • удалили бы все значения которые не числовые и не символьные собственно и потом с помощью string баффера Я бы крутил в обратную через реверс и проверялся Впадает ли она с тем что мы получили числовые символы значения хороший вариант давай подумаем тут вот на чем какая у меня в этом случае будет сложность по времени и сложность по памяти сложность по времени Ну крутануть это сравнить Ну я думаю да хорошо предположим что это решение валидное не проблема то есть на легкое рабочее предположим что у нас почему-то

    00:30:28 - 00:31:58

  • есть ограничение по памяти Мы хотим это решить за сложность по памяти от одного То есть я не хочу выделять дополнительную структуру данных для хранения этой строки как мы могли поступить в этом случае Да мы как бы представляем это строку в виде массива символов и до середины массива если это нечетный массив Ну если у нас есть Центральная опорный элемент который является 4 если мы берем и получается и будем попарно сравнивать кроме опорного элемента если у нас нет опорного элемента мы сравниваем

    00:31:18 - 00:32:34

  • с конца вперед отлично хорошо то есть ты говоришь что у тебя полезного указателя я правильно понимаю Ну да и потом что ты делаешь с ними Ну вот указатель первый это опорный элемент массив нечетный если массив четный топорно элементы такого нету опорный элемент это какой будет у нечетного это половина массива я понял то есть усложнение что как по-другому можем пойти то есть нужно ли тебе идти Ну прям сразу зарубаться наполовину сразу мы можем не зарубаться на половину можем как бы идти с конца в начало в

    00:31:54 - 00:33:23

  • принципе это нам ничего не мешает и пока мы не дойдем до середины как бы суперпустя полез два указателя в начало массива и в конец массива да потом ты начинаешь их сближать на каждой итерации сравнивать равенство хорошо давай поехали попробуем сделать это решение звучит хорошо Единственное что могу ли я посмотреть потому что так я не помню Давай через Стрим он удалит нам только пробел запятые же он не удаляет Насколько помню я понял хорошо Давай может даже опустить пока то есть представим что у нас там

    00:32:51 - 00:34:08

  • все нормально А ну тогда в идеале можно было сделать но это не критично такой вопросик Скажи пожалуйста какой тип цикла исходя из того что мы с тобой проговорили нам будет более подручнее использовать А какой ну понятно что мне его сейчас надо замкнуть на длину половины строки Почему ты так думаешь еще раз повторю что мы с тобой сказали да Когда проговорились нам решение то есть у тебя есть строка это массив символов да у нас появляется с тобой указатели в начало у нас появляется указатель в конец на каждой операции мы

    00:33:32 - 00:34:59

  • сравниваем эти элементы сближаем наши указатели до тех пор пока они не встретятся правильно то есть доходим в центр есть такая штука Давай поговорим то есть делаем два указателя сближая пока не встретиться какой цикл в этом случае мы можем использовать Что является более простым наверное да С каким условием пока И ты элемент не будет пока и не будет равно длина с таким минус и получается вот так Ну то есть пока и меньше либо равно А разве длине строки то есть тогда мы пойдем минус и длина строки минус и но давай хорошо Еще

    00:34:41 - 00:36:15

  • раз у тебя появляется два указателя и допустим и G Да и 0 G равно получается лент Минус один Да и ты их начинаешь сближать до тех пор пока они не встретятся как мне вот в условии описать что они встретились ну либо их хорошо то есть мы закончим когда они будут равны правильно Значит мы до какой если мы переводим на цикл до какого условия Мы будем выполнять данный цикл пока И что и меньше либо равно отлично хорошо а и G это у нас что ну обычно мы не объявляем в while то есть Думаю будет проще донести отсюда

    00:35:31 - 00:37:20

  • [музыка] Давай еще раз пройдем условия Никит смотри то есть мы говорим что первый указатель показывает в начало массива второй указатель показывает в конец Минус один Скажи пожалуйста это какой-то поле у строки или это метод все-таки здесь мы должны сразу добавить хорошо А скажи пожалуйста Нужно ли мне приравнивать и равно и плюс плюс или если ты вот и равно уберешь и J равно уберешь я вот не помню По моему она и так сработает но решил здесь мы должны проверить букву по порядку не переводя это принудительно в массив чаров сначала Да

    00:36:45 - 00:38:26

  • ты имеешь ввиду метод char at да Давай еще внимательно посмотрим на вот наверно что-то не хватает да еще [музыка] здесь фигурной в конце 38 по идее мы можем поставить скобочку если я не ошибаюсь да работает да все верно отличника хорошо давай проверяем То есть у меня есть два указателя и G с -1 далее мы идем увели если все хорошо мы их увеличиваем в конце мы возвращаем True если будет это неравенство мы вернем там еще есть такой метод точнее класс Checker есть там ряд утиных методов которые будут работать более

    00:38:55 - 00:40:30

  • быстро Там можно несколько оптимизация сделать но как бы концептуально все корректно без вопросов Давай еще раз пройдемся какая будет сложность по времени этого решения [музыка] так как мы дроби всегда опускаем то это хорошо От количества элементов в строке мы делаем только два дополнительных все хорошо Давай пройдем с тобой по бадашке немного смотри есть такое понятие как группировка Да вот грубой в что это такое Для чего мне необходимо чтобы сгруппировать по какому-то признаку скажем так но по свойству поля

    00:40:43 - 00:42:09

  • Вот хорошо представим что у нас тобой из таблица студенты там есть поле например ID имя и группа потом первая вторая третья четвертая просто номер группы который он учится и я хочу посчитать сколько у меня студентов находится в группе 8 как бы я мог это сделать [музыка] где-то Калам пропустил как будто бы Давай еще раз Давай пока закончим мысль то есть heaving heaving own да ты имеешь ввиду но хэвинг значение которое нам нужно группа иди допустим и не помню Честно каком месте Он по моему до [музыка]

    00:41:49 - 00:43:42

  • до грубой он ставится из того что ты имеешь ввиду что я пишу Select звездочка пром Стивенс групп Buy в скобочки открываем группа иди потом пробел хевин каунт больше либо равно 8 правильно 8 отлично хорошо хорошо задание проговорим То есть я хочу получить количество студентов которые учатся в группе номер восемь что мы должны выбрать то есть Select вместо звездочки что мы ставим каунт что ли получается да Да он просто считаем Давай немножко переформулируем сдачу Я хочу вывести только те группы которых у меня больше 20 студентов как

    00:43:16 - 00:44:53

  • это сделать только те группы собственно группу сойди у нас таблица еще раз Напомнить студенты там есть поля ID есть поле name warchar есть integer Group ID больше ничего нет и я хочу сейчас вывести только те группы то есть айтишники тех групп которых у меня учатся больше 20 студентов вот я воспользуюсь тетрадкой конечно да проще будет соображать Так у нас студенты собственно там еще иди [музыка] групп в которых студентов больше определенного количества больше 20 до группа иди а я тут сейчас нам надо посчитать собственно

    00:44:43 - 00:46:34

  • тогда получается или вдруг пойти что-то Я запутался теперь вопрос изначально мы говорили про группировку Да наверное группировка будет участвовать здесь Круг получается группа с помощью под запросов что ли получается А зачем под запрос мы же хотим у тебя в данной таблице есть все данные которые мне нужны количество студентов и потом посчитать их и Мы можем сгруппировать по группе как это сделать просто просто хорошо Теперь ты хочешь добавить условие там где больше 20 студентов Да это значит что в данной

    00:46:47 - 00:48:21

  • таблице запись группа иди повторяется больше 20 раз давай еще раз я делаю грубой группа иди ладно что я сломался просто то есть мы пишем Select группа иди пром стилю группа иди хевин каунт больше 20 что мы с тобой сделаем мы с тобой условия только те где количество этих записей больше 20 и вывели эту группу в консоль хорошо Хорошо давай пойдем дальше есть такое понятие как что это такое и какие реализации Ну орленки кроме кибернета Я не знаю наверное никакой собственно орлом это обжиг маппинг собственно

    00:47:58 - 00:49:47

  • позволяет нам объекты представлять видеозаписи Баси данных хорошо а джипа Что такое джипа это спецификация собственно основе которой Вот и построен кибернет Ну я могу работать не с кибернетом а с gpa например лучше планету Как таковой реализации это просто скажем так документ который объясняет нам какие-то методы или что-то должно быть хорошо хорошо то есть мы говорим что он это фреймворк же обжиг позволяет не преобразовывать объектное представление в традиционное и наоборот да и у нас только это не какая-то реализация поклацать

    00:49:20 - 00:50:48

  • нельзя то есть пощупать нельзя Это просто стандарт какой-то хорошо говорим Какие уровни кэширования есть hypernate И что это такое позволяет нам как бы не лазить в базу данных каждый раз собственно когда Ну каждый запрос чтобы не вел нас в базу данных в общем чтобы экономить ресурсы так как по ходу базы данных Это несколько энергозатратные операции кэширование насколько я помню там три первые подключен по умолчанию второй и третий должны настраиваться реализацию к сожалению не особо помню как они реализованы кэширования

    00:50:08 - 00:51:32

  • давай так первый уровень он нас идет он его надо подключать Как подключать Не надо автоматически идет как бы я не помню как именно он кэширует но знают что он по умолчанию настраивать не надо Какая область видимости США первого уровня Сколько живет есть подозрение а что такое сессия в кибернетиза вот в рамках одной сессии живёт хорошо а в рамках сайте может быть много транзакций может быть много транзакций да но потом создаем транзакцию мы сами выбираем как бы [музыка] мы можем принудительно сказать что нужно

    00:51:02 - 00:52:25

  • хорошо А что стоит вот есть иерархически взять над сессией [музыка] Да ну аж Какой объект отвечает за подключение у нас в кибернете [музыка] коннектор подключается Ну не так глубоко то есть вот как получить не объект Саша вот ты пишешь Session S равно как ты получал через допустим вот как раз одна над сессии получается что выше стоит Session Factory Но если брать другой подход внизу более базовая но как бы выше по иерархии хорошо есть такая штука Давай еще про Spring поговорим То есть ты работал да сынком будет я так понимаю

    00:51:59 - 00:53:23

  • работал Смотри вот есть мне допустим стандартная зависимость то есть там будут стартер веб джипа и так далее и Вот я жму зеленую кнопочку в идее запускается приложение Расскажи пожалуйста с точки зрения спинка Что начинает происходить с этого момента и в каком порядке и потом создается собственно Tomcat сервер отымается Хорошо хорошо А может быть детально Вот про подъем контекста рассказать что у нас там происходит подъем контекст мы собственно сначала читаем конфигурации самих бинов как они связаны друг с другом создаем

    00:53:04 - 00:54:37

  • создаем экземпляр этих бинов чтобы за инжектить давай хорошо Другой то есть вот у тебя например есть Бин а для его запуска необходим Бин Бену б необходим какой-то bin C то есть такая зависимость а стрелочка вправо Как получается так что Spring запускает их в правильном порядке сначала создаст зависимостью Хорошо хорошо есть такая штука Скажи пожалуйста какие отличия между Юнит тестами и интеграционными тестами [музыка] Тестируем как бы какой-то отдельный кусок кода отдельный метод мы Тестируем всю нашу кусок программы

    00:54:27 - 00:56:12

  • какой-то но не всю программу чаще всего кусок программы какой-то отделены как бы интеграционный вне зависимости мы можем протестировать сразу взаимодействие нескольких сервисов наши допустим это сервис висит потом как бы юзер сервисом какого-нибудь базы данных и баз данных поднять какую-то чаще всего как бы контейнер такой контейнер понимает тестовый контейнер загружаем схему нашей базы имитируем работу сто процентов если мы просто говорим что нам заглушка какая-то возвращает тут непонятно боевой базе тут

    00:55:28 - 00:57:00

  • работает без возможности какой Framework Хорошо подходит для этих целей какой фреймворк хочу поднять какую-то базу данных то есть допустим не хочу допустим создавать отдельный N в котором будет баз данных Железяка крутится хочу какую-то базу данных создавать через дотер поднимали фреймворк думает через отеров фреймворка честно сейчас не помню тест контейнер отлично хорошая штука А я рад что коснулись Докера Что такое докер это собственно виртуальная машина если трудно сказать который позволяет нам на

    00:56:28 - 00:57:54

  • каком-то севере поднять за 10 определенной мощности этого сервера поднять там виртуальная машина которой мы будем поднимать какие-то программы либо базу данных то же самое с помощью составить зависимости между двумя контейнерами если это касательно программы базы данных либо создать несколько контейнер завязать их между собой хорошо тут небольшое смотри А в чем отличие между докером и виртуальной машиной то есть я понял что именно слово виртуальный фраза виртуальная машина она как бы в контексте докер не самый лучший

    00:57:15 - 00:58:32

  • не самый лучший фраза потому что это как раз аналоги то есть виртуальная машина там вес докер В чем отличие Докера от виртуальной машины он себя закопался честно Так прямое отличие наверное не скажу Да ладно Нет я скажу что мы можем как бы накатить если на виртуальную машину должны каждый раз обкатывать какие-то операционные системы качаем образ системы как бы взаимодействие на уровне образов скажем так установлена давай так просто знаешь что такое гипервизор нет Да все тогда не будет это не так критично То

    00:57:54 - 00:59:22

  • есть это не переживаний все хорошо Никита когда мы постный вопрос закончили у меня больше вопросов нет Какие вопросы возможно из тебя наверное Пока особо Вопросов нет либо не все вылетелись хорошо Хорошо [музыка] как говорил то есть подготовили фидбэк опубликую скину материалы список вопросов Ответы на них То есть как это было предыдущих видео будут вопросы пиши Ну так Спасибо тебе свое время

    00:58:45 - 00:59:44