**Открытое Java-собеседование с Senior из Uzum, ex-WB — Transcript & Summary | SozAI**
Source: https://sozai.app/transcript/open-java-interview-senior-uzum-ex-wb/

Открытое Java-собеседование с senior-разработчиком из Uzum: вопросы по Quarkus, нативной компиляции, try-with-resources, коллекциям и потокам, а также обзор менторской программы Shortcut.

## Key Takeaways

- Quarkus выбран за удобство интеграции с Kubernetes и быстрый старт благодаря нативной компиляции.
- Важность понимания базовых механизмов Java: ресурсы нужно закрывать явно, даже при наличии GC.
- Shortcut предлагает мок-собеседования с менторами из крупного бигтеха и оценку уровня кандидата.

## What the video covers

- Стрим начинается с технических неполадок подключения кандидата Умита, ведущий Сергей Чёмкин (Shortcut) представляет формат мок-собеседования.
- Кандидат Умит — Java-разработчик с 4 годами опыта в финтехе (платёжное приложение для египетского рынка, аутсорс из Узбекистана), стек: Java 21, Spring, Spark, Quarkus, PostgreSQL, Pulsar, Keycloak.
- Обсуждаются преимущества Quarkus для микросервисов в Kubernetes: быстрый старт, нативная AOT-компиляция, dev-режим с горячей перезагрузкой; сравнение со Spring (DevTools, слайс-тесты, Graceful Shutdown).
- Блок по основам Java: try-with-resources и закрытие ресурсов, сборка мусора, checked vs unchecked исключения, аннотации Lombok и @Transactional.
- Вопросы по коллекциям: LinkedList и итераторы, HashMap, сравнение с другими структурами.
- Вопросы по многопоточности: потоки-демоны, работа с БД: PreparedStatement и защита от SQL-инъекций, курсоры, транзакции и Kafka.
- Ведущий рассказывает о менторской программе Shortcut: более 150 менторов из крупных компаний (Amazon, Uber, Booking, Revolut и др.), результаты выпускников в Яндексе и других компаниях.
- В конце кандидат делится впечатлением от мока, а ведущие обещают бонусы тем, кто досмотрит до конца.

## Chapters

1. 00:00 Начало стрима и технические неполадки
2. 03:53 Представление кандидата и его опыта
3. 07:37 Quarkus, нативная компиляция и сравнение со Spring
4. 11:12 Основы Java: try-with-resources и исключения
5. 22:54 Коллекции и итераторы
6. 35:00 Потоки, базы данных и транзакции
7. 48:00 Презентация менторской программы Shortcut
8. 83:00 Итоги мока и обратная связь

Answers

## Questions about this video

Какой опыт и стек у кандидата в этом видео?

Кандидат Умит — Java-разработчик с 4 годами опыта в финтехе, работает над платёжным приложением. Основной стек: Java 21, Spring, Spark, Quarkus, PostgreSQL, Pulsar и Keycloak.

Почему для микросервисов выбрали Quarkus?

Quarkus лучше интегрируется с Kubernetes, быстро стартует и поддерживает нативную AOT-компиляцию, что важно при перезапусках сервисов. Кандидат также отметил удобный режим горячей перезагрузки кода.

Что такое Shortcut и что предлагает программа?

Shortcut — менторская программа, где проводятся мок-собеседования с менторами из крупных компаний (Amazon, Uber, Booking, Revolut и др.). Участники получают оценку знаний, обратную связь и помощь с трудоустройством.

## Full Transcript — Download SRT & Markdown

00:00

Speaker A

Всем привет. Всем привет. Так, давайте начнём. Удобно ли общаться на «ты»? Да, удобно, конечно.

00:10

Speaker A

Можно начать. Привет. У меня сейчас мне нужно перелететь. У меня шакалит голос. Да, видимо, у Серёжи небольшие техпроблемы, ребят. Ну, для всех, кто хотел на мог, кстати, я скину ссылочку.

00:32

Speaker A

Да, за [фыркает] 2000 там можно перейти. Вот, теперь к нам Серёжа только что подключился.

00:37

Speaker A

Технические неполадки были. Нормально слышно? Алло. Умит? Меня слышно, Серёжа, отлично. Умит, а у тебя?

00:51

Speaker A

Алло. Алло. Извините. Да. Умит, ты нас слышишь? Умит. А ты меня слышишь, Дима? Я тебя слышу, Серёжа.

01:06

Speaker A

Пока ты можешь рассказывать про себя для ребят. Собственно, у нас, видимо, какой-то такой прикол. Умит, а ты нас слышишь или нет?

01:16

Speaker A

Просто, когда ты переходишь из бэкстейджа сюда, оно на пару, на минуту залагивает эта площадка. И мне тоже самое пришлось перезайти.

01:26

Speaker A

Ну, баг, баг, очередной баг. Да, вообще надо менять эту почту. А зачем бегать? [смех] Да, впервые такое, видать.

01:43

Speaker A

Ну, давайте тогда расскажу о себе. Я Сергей Чёмкин, у меня больше 7 лет опыта. На самом деле, провёл очень много мок-собеседований. Сейчас в последнее время провожу довольно популярные собеседования, это систем-дизайн. Учу систем-дизайну.

01:59

Speaker A

Подготавливаю и Java. Ну, по-разному. Могу даже по алгосам поспрашивать. На самом деле, у многих людей разные потребности. Кто-то хочет больше алгоритмы.

02:09

Speaker A

Дима? Кто-то хочет потренить больше а-а лайвкодинг. Кто-то хочет там ревью потренить. Вот. Кто-то хочет вопросы, похожие там, не знаю, на Епам.

02:20

Speaker A

Я вас не слышу. На Тиньков. Перезайти? А-а. Мы под разных людей подстраиваемся. В конце всегда даём отчёт, и в принципе, сегодня будет самое обычное тестовое собеседование.

02:37

Speaker A

А сейчас ты явно нас. И каждого, кто дойдёт до конца, будет ждать бонус. Так что надеюсь, вы дождётесь.

02:52

Speaker A

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

03:09

Speaker A

Нас слышно, Умит? Раз. Раз. Да. Привет. Привет. Ты нас слышишь, Умит? Да-да, слышу. Только я сам очень лагаю.

03:25

Speaker A

Э-э, сейчас, давай я тебя, э-э, э-э, можно тебя попросить? У тебя две вкладки, видимо, с этой трансляцией открыто.

03:34

Speaker A

Э-э, ну, что ж, извините, ребят. Э-э, у нас впервые такие вообще, мне кажется, технические неполадки за 2 года.

03:42

Speaker A

Включил. Да-да-да, за 2 года стримов. Извините, пожалуйста. Там сегодня РКН очень много VPN-ов переблочил.

03:52

Speaker A

Э-э, домен на коме, не знаю, может быть, тоже что-то попало под раздачу. Алло, Умит, да? Слышно нас?

04:05

Speaker A

Меня слышно? Да, тебя слышно, а нас? Умит, ты нас слышишь? Подскажи, пожалуйста. А я вас что-то не слышу.

04:17

Speaker A

Раз, два. Я динамики сделал. Ну как? Всё слышно. Всё, супер. Я думаю, можно начинать сегодня.

04:27

Speaker A

Ну что, Умит, удобно ли общаться на «ты»? Удобно, конечно. Можем на «ты». Расскажи о себе. Давай сократим чуть-чуть, ускоримся, чтобы зрители не заскучали. А то что скучать?

04:37

Speaker A

Опыт, у меня опыт 4 года, работаю в финтеке. Это моя первая и текущая место работы.

04:47

Speaker A

Э-э, проект сам в рынке Египта, э-э, мы работаем с Узбекистаном, outsource. Ну, основной стек Java, Spring, э-э, приходилось и Spark'ом работать, э-э, в прошлом году несколько микросервисов написал на Quarkus'е.

05:08

Speaker A

Э-э, из базы данных, э-э, PostgreSQL, э-э, из message broker Pulsar, э-э, OAuth, Keycloak и всё такое.

05:19

Speaker A

Ну, в общем, хорошо. Отлично. То есть ты работаешь из Узбекистана на египетский какой-то банк.

05:26

Speaker A

Э-э, не банк, это payment application. Да, payment application. Хорошо, очень интересный опыт. На какой версии Java работаешь?

05:34

Speaker A

Хоп, э-э, старый проект, э-э, был у нас на восьмёрке, а сейчас все новые на двадцать первой.

05:44

Speaker A

Отлично. Вот ты сказал, что у тебя есть опыт Quarkus'а. Расскажи, зачем, почему, вот почему был выбран именно он?

05:51

Speaker A

А какой бы ты свой опыт описал? М-м, Quarkus, э-э, вообще, э-э, это были микросервисы на клауде, там всё крутилось в Kubernetes'е, а-а, у Quarkus'а, э-э, много чего под капотом уже подключено к Kubernetes'у, он удобнее, поэтому мы, э-э, сначала

06:10

Speaker A

экспериментально выбрали только для одного микросервиса, а потом уже добавили там две-три штуки. В основном, в общем, пять, что ли, у нас было микросервисов на Quarkus'е, э-э, четыре из них писал я.

06:25

Speaker A

Ну, э-э, много чего у него compile time, не то что в Спринге. Э-э, можно, э-э, не то что можно, лучше компилировать на натив, э-э, всё такое.

06:37

Speaker A

Хорошо, вот, думаю, многим будет интересно, а что мы получаем бонусом, компилируя в натив, AOT-компиляцию, ahead-of-time?

06:47

Speaker A

Хоп, э-э, микросервис всё, э-э, очень, как сказать? М-м. Должно быть, чтобы, э-э, ну, Java, она не так уж хорошо работает в микросервисах, э-э, она как бы предназначена для деплоев, которые работают месяцами, да, чтобы она могла, э-э, всё профилировать,

07:11

Speaker A

оптимизировать, э-э, поэтому оно быстро поднимается, э-э, пока Спринг все бины поднимет, а у неё всё compile.

07:22

Speaker A

Э-э, микросервисы уже, когда Kubernetes работает, э-э, очень важно, чтобы, э-э, сервис быстро стартанул. М-м, в этом есть, э-э, у него, как бы, плюсы. Ещё что?

07:37

Speaker A

Ну, э-э, в Спринге очень трудно было компилировать на натив, э-э, м-м, если. В чём именно?

07:45

Speaker A

М-м. В чём была такая острая необходимость быстрого старта? Сколько у вас было деплоев в день?

07:50

Speaker A

Э-э, нет, деплоев в день не было. Если вдруг, э-э, Kubernetes, э-э, отключает и поднимает сервис, в этот момент для нас было важно, чтобы микросервис быстро стартанул.

08:03

Speaker A

Какие есть, знаешь, вообще стратегии деплоймента? Развёртывания какие? Стратегии деплоймента, э-э, я точно не понял вопрос, э-э.

08:16

Speaker A

Ну, давай одну подскажу, Blue/Green. Blue. М-м, нет. Ну, вот, э-э, быстро стартануло. Смотри, у нас в Спринге есть такая штука, как Graceful Shutdown. Слышал ли ты про это?

08:29

Speaker A

Да, да, да. Вот, так, э-э, ты делаешь Graceful Shutdown и поднимаешь новые, а вам настолько быстро нужно было? Ну, ладно, может быть, есть какая-то оправданность. Что бы ты выделил необычного при работе с Quarkus'ом?

08:44

Speaker A

Необычного? Это плюс или минус? Ну, плюсы и минусы давай рассмотрим. Штука в том, что он, э-э, прямо во время, э-э, ты его запустил, э-э, он как бы стартанул, работает, и ты изменяешь код, оно как бы редеплой делает, и тебе не нужно как бы

09:07

Speaker A

сделать стоп и старт. Это когда, э-э, что-то перепроверяешь в стейджинге или тесте, э-э, очень удобно.

09:15

Speaker A

Вот это для меня было очень прикольно. В Спринге тоже есть такое. Есть? Есть. Ты можешь менять код, он у тебя авто-рестартит сам. Есть такое, есть у Спринга DevTools.

09:26

Speaker A

Не, оно не рестартится, оно просто, э-э, код компилирует то, что ты изменил, и не перезапускает.

09:35

Speaker A

Есть такое? Я не помню, перезапускает или нет. Я помню, что я с таким игрался, но меня это раздражать начало в один момент. Я его на ноуте с этим игрался. Ну, минусов. Я вот, Спринг-тесты очень хорошие, такие

09:52

Speaker A

прямо классные, слайс-тесты можно написать. В Корусе, по-моему, такого очень трудно сделать. Нужно очень постараться.

10:00

Speaker A

Хорошо. Да, опыт очень интересный, мне понравился. Давай опустимся уже вниз. Так, начнём с глубины.

10:08

Speaker A

О'кей. Зачем нужен try-with-resources? Давай с простых вопросов таких. Try-with-resources — то, чтобы Java сам закрыл, э-э, ресурсы, которые были открыты.

10:21

Speaker A

Нам закрывать? Э-э, если не закрывать, э-э, JS не сможет его убрать. Не JS, JS — другое, не JavaScript, Java. Э-э, да, допустим, а что garbage collector, да, garbage collector вот возьмёт, удалит объект.

10:37

Speaker A

Что в этом плохого? Зачем его закрывать? [тяжело вздыхает] [вздыхает] Э-э, зачем его закрывать? По-моему, он не сможет удалить, если остались открытые ресурсы.

10:50

Speaker A

Не сможет удалить? То есть он останется занятым? Э-э, я думаю, да. Я точного ответа сейчас не вспомню.

11:00

Speaker A

Э-э, по-моему, вот, например, ты открыл connection, оно, если его не закрыть, по-моему, garbage collector не сможет его убрать, и ещё он будет занимать ресурс.

11:14

Speaker A

Вот главное, это да, ресурс, не занимать ресурс. Какой ресурс мы можем занимать? Примеры. Э-э, примеры коннекшена, мы можем просто какой-то мёртвый коннекшен держать, да?

11:27

Speaker A

Ну, мёртвый коннекшен. Смотри, очень часто вопрос раньше слышал, сейчас стали задавать менее часто. Checked vs unchecked exception.

11:37

Speaker A

Представим, что ты пишешь свою библиотеку. У тебя есть выбор сделать в своей библио

11:47

Speaker A

Хоп, когда я пишу что-то, чтобы его нужно решать, да? Вот, я написал какую-то логику, не сработало, его нужно решить, да?

12:04

Speaker A

В этом случае нужно выбирать checked exception, чтобы человек предпринял меры, либо выбросил exception вверх, или обработал как следует.

12:22

Speaker A

Runtime exception, тогда когда? Runtime exception. Мм, честно, я не поразмышлял на это. Рантаймы. Когда, очень интересно.

12:39

Speaker A

Потому что я раньше был сподвижником только runtime ошибок, но потом пару раз словил в лицо runtime ошибки, когда я даже не смотрел и не ожидал. Ну, JavaDoc'ов нету, ничего нету, лишний раз не опускаешься в чужую библиотеку, и ловишь постоянно рантаймы, о которых

12:54

Speaker A

даже и представить не мог. Вот. Да, в тексте как будто говоришь, друг, если что-то произойдёт прими меры.

13:05

Speaker A

А если я не хочу принимать меры, вот человек накидал этих checked exception'ов ну вот реально, ну не хочется, вот что как мне это тогда избежать?

13:14

Speaker A

этом тоже как бы есть предел, например, для null pointer'а не сделали, потому что код будет очень трудно читать, да?

13:23

Speaker A

Если его сделать checked exception, когда ты объявляешь какую-то переменную Ага. и присваиваешь null, э, Java будет заставлять, да, тебя везде ставить try-catch, и это очень, как бы, усложняет чтение кода.

13:37

Speaker A

я не про это. Представь, что у тебя есть коллега, который везде пишет много checked exception'ов. Тебе надоело try-catch'и пустые делать. Как это обойти? Как не делать?

13:47

Speaker A

Э, я я честно не понял вопрос. Можно throws сделать наверх, или, э, как бы поставить аннотацию, да? Я не хочу обрабатывать.

14:02

Speaker A

[смех] Какая аннотация? SuppressWarnings, по-моему, было. Там Нет, SuppressWarnings - это чуть другое. А, SneakyThrows. Это моя любимая аннотация.

14:14

Speaker A

бока. А ты знаешь, как она работает? Она, по-моему, глушит, э, exception. Да, причём я о чём не узнаешь.

14:26

Speaker A

Да. Ну, она не глушит, она в runtime её переводит. Там она не просто так её переводит. Я думал, там try-catch стоит, и как-нибудь, да, там переворачивает.

14:34

Speaker A

Нет, там в байт-коде специально сделана обманка, и вот так она работает. Так что, на самом деле, удивительно.

14:42

Speaker A

Э хорошо. Давай подумаем. Что такое аннотации? Какие есть параметры у аннотации? Аннотации, вообще, есть три вида, если память меня не изменяет информационные которые вообще ничего не представляют собой, только инфо. Есть compile, э, который участвует в процессе компиляции, и есть runtime,

15:13

Speaker A

compile, э, аннотация - это, в основном, могу сказать, Lombok аннотации, а, э, runtime уже transactional.

15:24

Speaker A

Э, ещё что? По-моему [откашливается] аннотации тоже такие Ну а ОП вообще Вообще другая тема. Ну из ран-тайм транзакшн такой примитивный самый такой все знают Так Тоесть ты нам говоришь про retention, тоесть как долго живёт аннотация, да?

15:47

Speaker A

Компилятор, байт-код и доступна через reflection API. Окей, какие ещё есть параметры? Из параметров на что он рассчитан? На метод на поле, на класс, ещё Ещё не вспомню, наверное, больше.

16:09

Speaker A

Хорошо. Приходилось тебе пользоваться рекордами? Рекордами, да. В основном ДТОшки все пишем в рекордах. Особенно когда начали пользоваться 21 Java.

16:22

Speaker A

Угу. Да, окей. Назови пять-шесть стандартных Java функциональных интерфейсов. Функциональных? [откашливается] Интерфейсов саплайер, би-фанкшн фанкшн компаратор по-моему тоже Так.

16:43

Speaker A

и саплайербл консьюмер Ну ещё предикат, да, можно. Предикат, точно. Зачем придумали боксинг-анбоксинг? Боксинг-анбоксинг, зачем придумали, я сейчас, наверное, не вспомню. Это про то, что вот примитивные переменные переводить в этой в объектной.

17:12

Speaker A

А за зачем придумали, вот я точно не вспомню. Чтоб ты с ума не сошёл, да? Потому что мы часто там используем в обёртках обычные наши примитивы. Представляешь, если пришлось бы писать бы а-а, целые текста огромные, поэтому это даже на самом деле хорошо.

17:31

Speaker A

А-а, его придумали, когда я начал изучать Java, поэтому, наверное. [тяжело вздыхает] Ой, ну, не знаю.

17:39

Speaker A

Давай представим, что тебе есть цель создать immutable класс. Как бы ты его создал? Давай, ты попробуй создать, а я попробую его сломать.

17:45

Speaker A

М-м, ну, самый примитивный final, а-а, и ещё record. А-а, ещё в Java как бы придумали э-э, новое что-то, sealed. Подходит или не подходит, в этом не уверен. А-а, ну, в основном final.

18:03

Speaker A

Так, ты делаешь класс финальным. Ну, о'кей, я беру через геттер, через сеттер, через геттер я, допустим, беру объект и меняю внутри метода своего. А через сеттер, если ты оставил, то устанавливаю.

18:20

Speaker A

Ну, если будем считать, что я не оставил сеттеров, у меня только конструктор и геттеры.

18:25

Speaker A

Хорошо, конструктор, сеттеров нету, но остаются геттеры, правильно? Да. А в геттерах получаю, допустим, какой-нибудь объект, а этот объект мутабельный. Как будешь с ним бороться?

18:39

Speaker A

М-м, я чуть не понял. Можешь повторить, пожалуйста? Тебе нужно сделать immutable класс. В этом immutable классе есть поля.

18:48

Speaker A

О'кей. Они мутабельные. Если ты геттером будешь получать, ты их замутируешь. И изменишь, тогда объект у тебя не мутабельный.

19:00

Speaker A

Оп. [вздыхает] Можно через геттер передать, а-а, какую-то копию, а не саму поле. Ну, то что у тебя было.

19:16

Speaker A

Как копии эти называются? Копии называются Да, да. В Джаве можно по-разному копии сделать. Ну, э-э, я понял, к чему ты ведёшь. По-моему, deep copy нужно сделать.

19:32

Speaker A

Deep copy, да, абсолютно верно. Давай поговорим про Hashmap теперь. Как без неё, любимой, ни одно собеседование никогда не пройдёт без Hashmap. Почему?

19:44

Speaker A

В принципе, потому что это одна из самых распространённых коллекций. Ну, и не понимая Hashmap, в принципе, понятно, что человек либо мало пишет, либо такое.

19:55

Speaker A

Хорошо. Чем Hashmap отличается от TreeMap и LinkedHashMap? Ой. [смех] LinkedHashMap, наверное, я по названию поразмышляю.

20:10

Speaker A

TreeMap - это уже дерево. В этом всё понятно. А LinkedHashMap от TreeMap м-м Уп-уп-уп.

20:22

Speaker A

Даже не знаю. Могу предполагать, что у них у него бакеты по-другому как-то устроены внутри, в LinkedHashMap. Я, честно не не заглядывал.

20:33

Speaker A

У меня дефолтный Hashmap, и только его и использую. Так, никогда тебе в задачах не приходилось сохранять порядок вставки или порядок получения элементов?

20:44

Speaker A

Hashmap. О, понятно. Я понял, к чему ты ведёшь. Значит LinkedHashMap по-моему сохраняет порядок. Ну, там есть настройки, да, как сохранять.

20:55

Speaker A

Хорошо. А вот TreeMap и Hashmap сравни. Что, где, как мы получаем, как мне выбрать правильную коллекцию?

21:03

Speaker A

Хоп. [вздыхает] TreeMap. Hop hop hop. Я за 2,5 года к Tree Map не прикасался, сразу говорю, и очень рад. Моя жизнь стала лучше, как только я перестал прикасаться к таким коллекциям.

21:33

Speaker A

Я тоже к нему вообще не прикасался. Если честно. есть, особо не знаешь про Tree Map.

21:38

Speaker A

Нет. А, в основном В идеале пощупать, конечно, можно, нужно. А, во сколько раз увеличивается HashMap, а во сколько раз увеличивается динамический массив?

21:49

Speaker A

Hop. А, по-моему, у HashMap 0,75. HashMap 0,75. А да. я если правильно понял вопрос.

22:03

Speaker A

Нет, не на 0,75 увеличивается. HashMap в два раза увеличивается. А. Я я А, понял, всё, всё. Да, да.

22:13

Speaker A

У массива такой А, у динамического такой 0,75. У динамического 3/2. 3/2. А. Хорошо. Какая сложность вставки в середину ArrayList и LinkedList? Вот, тут может подумать, что простой вопрос, но половина на нём сыпется.

22:36

Speaker A

А, вставка? В середину. В середину. Именно вставка, не замена, а новый элемент в середину добавить.

22:52

Speaker A

В середину добавить. У ArrayList и у LinkedList да? Угу, да. А. У LinkedList [вздыхает] Hop.

23:05

Speaker A

Нужно пройти до нужного элемента и просто изменить ссылки. У листа нужно копировать. Всё остальное, середину.

23:18

Speaker A

А вторую половину. Ну вот по-моему, логарифм n. Если я не ошибаюсь. Логарифм это когда я могу половинками добраться до чего-то или как-то. А нам как нужно сделать?

23:35

Speaker A

А У листа или Да и там, и там, в принципе. Давай порассуждаем тогда, глубоко окунёмся в процесс.

23:46

Speaker A

А давай начнём с linked листа. Нам что нужно сделать, чтобы добраться до середины? Сколько действий?

23:53

Speaker A

Нам нужно пройти до половины. Итера- итера- итерация. А какая будет сложность дойти до половины?

24:02

Speaker A

А n разделить на два. Ну 1/2 мы выносим, все константы, получается от n. О'кей.

24:12

Speaker A

О от n. Да, чтобы Ну вот дошли мы до середины. А дальше что нужно сделать?

24:18

Speaker A

Просто поменять ссылки. И единичка. Вот единичка. Значит, итоговая о от n. А давай теперь посмотрим на array list.

24:26

Speaker A

Что там надо сделать? У array листа мы находим быстро О от единицы, да. за за единицу находим середину и копируем остальную середину.

24:41

Speaker A

Остальную середину. Копирование остальной середины вправо сдвиг. Это при условии, если он даже расширяться не будет. Какая Какая сложность?

24:50

Speaker A

Оп. Сложность. Вот с сложностями у меня всегда были проблемы. Ну, линейная сложность, это все элементы сдвинуть вправо. На самом Ну, на самом деле, под капотом там используется операция. Знаешь ли, какая операция используется для сдвига вправо?

25:10

Speaker A

Ну, и просто при переносе, э, кусков таких массивов. Не битовая операция? System.arraycopy используется. М-м.

25:24

Speaker A

Так, а, поэтому нормально. Э, давай с тобой обсудим. Я создаю массив Person. Person у меня состоит там из трёх полей, трёх интов. Когда я создаю массив, это что такое? Он прямо под трёх персон выделяет память или как?

25:40

Speaker A

Массив, да. Ну, массив, квадратные скобки, просто вот. Person Person сравняется там new Person с троечкой. Вот как будет память выделяться? Сколько памяти будет выделено?

25:52

Speaker A

Э, к трём элементам массив, э, массив сразу, э, берёт себе, вот эту память-то. Да, три элемента. Откуда он знает, сколько один элемент занимает памяти?

26:04

Speaker A

Э, откуда он знает? Хоп. Из объекта? То есть, ему чтобы вот новый массив создать в Джаве, мне нужно посчитать, сколько потребляет объект и потом умножить на три, столько памяти занять?

26:20

Speaker A

Ну, логически, да. Так. Не, не так. Это массив указателей, он всегда занимает, э, столько, сколько, ну, ссылка занимает. А там Person он ещё нигде нигде не размещён. Ну, null будет, короче.

26:37

Speaker A

Поэтому нет, не совсем так. Вот тут я тебя поймал на понимании, как аллоцируется память.

26:45

Speaker A

Так ладно. Мой любимый тоже вопрос, fail-fast и fail-safe итераторы. Fail-fast, fail, вот? Safe, safe.

26:56

Speaker A

Safe. Я, честно, не понял вопрос. В чём разница между ними? Между этими итераторами. М-м.

27:14

Speaker A

Вот, не вспомню, честно. Ну, и ничего. А, так уж и быть, пропустим этот вопрос. Но он очень интересный, потому что он говорит про понимание многопоточки и в целом.

27:26

Speaker A

Я посмотрю. Может, я неверно понял вопрос. Я сейчас про итератор, который используется чтобы Пройтись по объектам, да.

27:36

Speaker A

Да, да. Fail fast - это у нас array list, hash map, hash set, почти все. Fail safe - это у нас concurrent hash map, то же самое, copy on write array list. Они не бросают исключения, когда мы Во время добавления или изменения

27:51

Speaker A

коллекции. Понял. Ну, а у fail fast у них есть счётчик структурных модификаций, mod count.

27:59

Speaker A

И каждый add и remove его инкрементирует да. Итератор при создании запоминает количество, сколько должно быть этих модов. И next сверяет с текущим. Если он не сошлось, он пускает concurrent modification exception.

28:13

Speaker A

Exception, да, да. Я, честно, не понял вопрос. Ну, вот. Хорошо. Да, поговорим про garbage collector. Что это, зачем и почему, кто их придумал, почему без них нельзя, как это в других языках реализуется.

28:28

Speaker A

О, garbage collector убирает объекты, которые уже не нужны в Java, да, в программе. Ну, которые не достать до ссылками.

28:39

Speaker A

О сейчас не достать? А, нет активных ссылок на них. А что, а как понять, что ссылка активна?

28:47

Speaker A

А-а, ссылка активная, переменная в области видимости. Так, а что в неё входит? А-а, я не понял, честно.

29:01

Speaker A

Ну, вот как это область видимости? Вот что входит в область видимости, чтобы понять, что это переменная в области видимости?

29:07

Speaker A

Например, если мы заходим вовнутрь метода, у неё есть а-а м-м, локальные переменные, которые принадлежат только методу.

29:17

Speaker A

Когда мы выходим из метода, уже она как бы неактивна и не нужна. Ну, есть такая область видимости. Так, а ещё какие есть? Тогда, если мы такие обсудим, то мы пропустим ещё статик переменные, допустим.

29:34

Speaker A

А, статик переменные, они принадлежат классу и не умрёт, пока класс жив. Так. Ну, вот, то есть, это называется GC Roots. То есть, корни, от которых у нас идёт проверка, вот этот граф доступности, трассировка. И вот по ней как раз понятно, жив объект или нет.

29:56

Speaker A

[откашливается] Ну. Понятно всё. Вот. Ну, вот, да, давай продолжим дальше про GC. Извини, что я тебя перебил.

30:02

Speaker A

Хоп, есть Serial, когда у application мало ресурсов, используется оно, как бы, однопоточное, если память не изменяет.

30:17

Speaker A

А, есть G1. М-м. По-моему, с Java 9 default. А-а ещё после него Shenandoah вышел.

30:35

Speaker A

Есть ещё Epsilon, что ли, как как называлось? Epsilon. Epsilon, Epsilon, да. М-м, ну Так.

30:45

Speaker A

То, что припоменяет. Так, это хорошо. Давай поговорим такой снова душный вопрос. Почему G1 называется G1?

30:57

Speaker A

Честно, не знаю. Ладно, а если я скажу garbage first? Это garbage G, first один G1. Давай посмотрим, как он устроен.

31:09

Speaker A

Он оп, он устроен, ты имеешь ввиду, как он работает? Там Ну, да, да, да. Что в нём такого, почему нужен он, допустим, а не serial?

31:23

Speaker A

Зачем он мне вообще нужен? Вот продай мне garbage first. Если сервера есть ресурсы, G1 работает многопоточно во-первых.

31:34

Speaker A

Так, а parallel GC он думаешь, он однопоточный? Оп, G1, смотря, сколько ресурсов зани вообще создаёт вот эти воркеры, которые убирают мусор. Если у тебя как бы ресурсов мало, он создаст четыре, например, потока. Если у тебя ресурсов хватает, восемь,

32:02

Speaker A

может быть. Так, ну, в parallel GC я, кстати, тоже могу это и теперь у меня путаница, с чем чего не разное там придумали.

32:16

Speaker A

Вот, вот что G1 делает с памятью, может быть, какие приколюхи всякие. Мм. С хипом тогда он работает по-другому.

32:32

Speaker A

Ну, что-то он делает как-то вот интересно, так, чтобы вот прям Любим его, да? [откашливается] Мм.

32:38

Speaker A

Ну, пойдёт, да. Может быть, э-э, он убирает, э-э, Он разделяет на регионы хипу. Ну, ладно, да, не надо это мучить.

32:52

Speaker A

Давай так, System.gc, э-э GetRunTime RunTime.gc. Какая разница? Вот, и вызовется ли Garbage Collector хоть в каком-то из случаев?

33:05

Speaker A

[вздыхает] Э-э, в любом случае, по-моему, не вызовется, если что-то не изменилось после того, как я прочитал теорию.

33:15

Speaker A

Э-э, System.gc, э-э, не гарантирует. Вот, э-э, RunTime.gc я впервые слышу, честно. Э-э, System.gc точно не гарантирует вызов Garbage Collector'а.

33:25

Speaker A

Он как бы даёт сигнал. Братан, можешь убрать мусор, э-э, но Garbage Collector, э-э уберёт когда э-э Он лучше знает.

33:36

Speaker A

Он лучше знает, да. Ну, System.gc точно не гарантирует. Давай поговорим. Приходилось ли тебе как-то тюнить JVM, то есть передавать какие-то флаги, какие-то передавал, что делал?

33:49

Speaker A

Не приходилось, честно. Я Java 17 только один раз заставил использовать SerialGC, потому что проект был такой маленький, ресурсов очень мало.

34:01

Speaker A

Э-э, мало ресурсов это сколько? Э-э, по-моему м-м там сервер даже на 2 ГБ, что ли, такой самый скромный м-м бесплатный.

34:13

Speaker A

А ЦПУ сколько было? Хоп, ЦПУ точно не вспомню. Ну, скорее всего, у тебя по умолчанию и Serial был.

34:26

Speaker A

Потому что у тебя, скорее всего, client, э-э, в client режиме была запущена. Может быть, может быть. Ну, я передавал.

34:32

Speaker A

А так тюнить JVM мне не приходилось, честно. э-э, Я не работал с этим. есть, ты не делал какие-нибудь хип-дампы вот на out of memory, XMS, XMX? Не приходилось?

34:44

Speaker A

Не приходилось. Ну, я как-то увлекался с помощью Eclipse'а что-то анализ делал. Это уже давно.

34:54

Speaker A

Я это всё уже не помню. Угу. Да, хорошо. О'кей. Так, расскажи мне, что за потоки-демоны?

35:06

Speaker A

Э-э, демоны, э-э, легк- э-э, они легковесные. Демон - это который, э-э, если ну, первое, что приходит в ум, если application падает, а она сразу умирает.

35:25

Speaker A

М-м. Хоп. Э-э, насчёт ресурсов, я точно не вспомню. Может, у него ресурсов меньше. Э-э, Ну, демон - это, скорее, фоновые потоки, причём бывают ошибки, что люди делают фоновый поток, но они ставят ему демон. И когда, допустим, Spring завершает работу или

35:52

Speaker A

кто-то завершает работу, полностью приложение не выходит, и оно остаётся, JVM остаётся дожидать демона, а демон никогда и не умирает.

36:01

Speaker A

Вот. М-м, как сделать поток, чтобы он стал демоном? Ну, поставить true, setDaemon(true). Да, да, абсолютно верно, setDaemon(true).

36:11

Speaker A

Э-э, да. Что такое race condition? Вообще, как он возникает? Что это такое? Race condition - это когда, э-э, [откашливается] м-м, как как объяснить?

36:30

Speaker A

[откашливается] Когда, а-а, что-то происходит, м-м, ну, во время многопоточной программы, что ли, как объяснить? Даже вот, э-э, насчёт happens before, да?

36:50

Speaker A

Race condition. Не, ну, race condition это самое ба, это базис база. Хоп, когда вот, э-э, ну, тогда я сейчас постараюсь вспомнить, когда, э-э, один поток проигрывает второму, да?

37:10

Speaker A

Ну, причём, не всегда второму. Там проблема в том, что твой код становится недетерминированным. Да, да, да, я понял.

37:16

Speaker A

Мы, как программисты, должны писать детерминированный код, у нас не должно зависеть от, э-э, никаких других, как кода, и бизнеса, результат.

37:27

Speaker A

А в данном случае результат будет зависеть от того, сработал там ГЦ, как планировщик ОС, там, сколько времени процессу на поток, да. Что именно происходит плохого?

37:38

Speaker A

А-а, код не будет себя вести, как, э-э, мы ожидали. Как мы ожидали. Вот давай примеры, что может произойти не так, вот чего я мог ожидать не такого?

37:53

Speaker A

Хоп, я расскажу из своего опыта, если м-м м-м можно. У нас был такой, э-э, ну, те, кто работает с банками, знают settlement транзакций, э-э, быва, бывали так, бывал так, что мы запускали автосеттлмент для всех активных мерчантов, которые делали

38:15

Speaker A

хотя бы одну транзакцию в течение дня. [фыркает] Э-э, бывало так, э-э, прямо у у возникла такая ситуация.

38:22

Speaker A

Э-э, когда расчёт делается, всё это э-э считается, сколько он sales сделал, сколько refund, сколько void и отправляется в банк.

38:32

Speaker A

Во время этой э-э этого расчёта э-э бывало так, что торговец сделал ещё один sale и э-э она не попадала в расчёт.

38:42

Speaker A

И получилось, э-э что [откашливается] э-э с банком было несоответствие баланса. Э-э например, мы уже рассчитали и отправили, вот merchant сделал 10 транзакций, как бы условно.

38:57

Speaker A

Э-э во время этого расчёта merchant сделал одиннадцатый sale и пришлось э-э потом починить, я поставил блокер э-э для каждого merchant'а, да?

39:13

Speaker A

Прямо флаг в базе, что вот is active, у него settlement активный, пока не делай никаких э-э продаж.

39:23

Speaker A

Вот это и есть race condition. Вот этот sale э-э он как бы обгоняет э-э не то что обгоняет, когда он когда другой поток считает его расчёты, он ещё не знает про sale, и он вот проскальзывает во время расчёта и

39:40

Speaker A

вот это и есть race condition. Да. Э-э примерно это и есть. Хорошо, parallel stream и fork-join, как они связаны и когда параллельные стримы реально вредят?

39:58

Speaker A

Параллельные стримы реально вни- э-э вредят, когда э-э у тебя задача не такая уж как бы CPU-bound, да?

40:08

Speaker A

Когда э-э не надо делать очень много работы, да? Когда разделение на задачи как бы э-э [фыркает] тебе стоит больше, чем а-а какбы сделать вот эту задачу на обычном стриме.

40:28

Speaker A

Если Ну а как понять, когда это вот? Я ж пишу код, мне нужно понять, вот параллель сейчас мне пихнуть или обычный стрим?

40:38

Speaker A

О, м-м М-м, [тяжело вздыхает] как понять? Вот М-м, честно, я не знаю, как ответить на это. Например, на такие обычные задачи не Вот ForkJoinPool, он а-а ты ему говоришь, вот а-а раздели задачу да вот до такого состояния да например.

41:06

Speaker A

М-м если задача не CPU bounded, если я одним словом, а-а то не стоит использовать параллель стрим.

41:15

Speaker A

Не стоит, да. А можно ли какой-то свой пул использовать при параллель стримах? Свой пул?

41:23

Speaker A

Угу. А-а, свой пул? М-м, ты имеешь в виду а-а пул экзекьютора или я не туда пошёл?

41:35

Speaker A

Ну вот у нас мне не нравится, что у нас везде один и тот же параллель ой ForkJoinPool используется.

41:42

Speaker A

Я хочу свой пул создать и чтобы он использовался в этом параллель стриме. М-м, по-моему, можно. Я я честно не знаю.

41:56

Speaker A

Ну логически можно. Там лайфхаком можно сделать, но в принципе да. Такое. Очень интересный у тебя опыт по Quarkus'у. Я сейчас скажу, Quarkus не писал вообще почти на Quarkus'е, немного играл с АОТ компиляцией.

42:13

Speaker A

Да, прикольно, что он стартует быстро. Да, интересно, что это всё новое, но честно Spring больше привлекает, потому что я уже старею, черствею и не так открыт к новому.

42:28

Speaker A

А давай вот тоже популярный вопрос. Что такое Bean Factory Post Processor? Ой. Я всегда, м-м, когда слышу об этом, читаю и сразу забываю.

42:45

Speaker A

Если рассудить по названию, Bean Post Processor э-э это Factory Post Processor. А, Factory Post Processor.

42:53

Speaker A

Bean Factory Post Processor. Даже не не Bean Post Processor, а Bean Factory Post Processor.

42:58

Speaker A

Bean Factory Post Processor. Она э-э м-м, делает что-то с бином после его инициализации. Нет. Вот как раз-таки Factory делает до.

43:12

Speaker A

Вот До, а тогда, э-э, тогда всякие вот эти, э-э, прокси, то, что нужно обернуть, э-э, наверное, этим он Нет?

43:23

Speaker A

Он с Bean Definition'ами работает. Вот это с чер- с черновиком бина, с шаблончиком, так сказать.

43:30

Speaker A

Ну ладно. Советую повторить, потому что, ну, жизненный цикл бина, он не сложный. Он очень-очень сильно логичный и, прочувствовав его, станет проще.

43:42

Speaker A

А вот что такое Dispatcher Servlet? Я вот бывает, смотри, дебажу приложение и вижу у себя там слева в IDE видно там, знаешь, стак вызовов. И вижу иногда там Dispatcher.

43:54

Speaker A

Чего он там делает? Зачем он нужен? М-м, Dispatcher Servlet, когда у тебя MVC э-э это м-м, ну, Dispatcher Servlet, в которые были созданы.

44:09

Speaker A

А-а, Spring под капотом, м-м, создаёт вот этот диспетчер сервлетов, а-а когда а-а приходит а-а, запрос, а-а, он первым делом попадает к этому диспетчер-сервлету.

44:23

Speaker A

Зачем? М-м, это, по-моему, первая дверь. Ну а-а когда, а-а, я учился о-о, очень давно, мы писали JSP и сами писали сервлеты в XML-ах. А-а, а диспетчер-сервлет вот это всё, а-а, делает для тебя.

44:47

Speaker A

Так, а как диспетчер-сервлет понимает, куда какой запрос отправить, зароутить, как вызвать и как он вообще вызывает?

44:56

Speaker A

Хоп. [откашливается] Я могу поразмышлять, но точного ответа не знаю. Но он сканирует все твои Post Mapping, Get Mapping, контроллеры.

45:10

Speaker A

[откашливается] сервлеты, а-а. Ну, короче, вот так, это, Ну, что ж, как работает Transactional, какие есть параметры?

45:24

Speaker A

Хоп. Transactional [вздыхает] создаёт, а-а, прокси и обер, а-а, как бы оборачивает вот этот метод, а-а, в прокси.

45:39

Speaker A

А-а, когда, а-а, он заходит, а-а, ну, как обычный, а-а, SQL Transactional ставит а-а Auto Commit False и если возникает exception, делает, а-а, [откашливается] rollback.

45:55

Speaker A

Если нет, всё в порядке, да, сделает commit а-а. Какие, а-а, хоп. М-м, я, честно, есть?

46:04

Speaker A

Параметры, не вспомню, потому что, ну, и самые типичные reading, э, read only true, то, что я вспомню.

46:14

Speaker A

А так я очень мало пользовался транзакшеном. Мы в основном только со статусами работали. А, меняем статусы прям.

46:26

Speaker A

Так. Что ты вспомнил? Read only, read only true. Только. Ну, read only, А можно задавать exception, по-моему, Да.

46:37

Speaker A

Тайм-аут можно задать. Давай поговорим про актуатор. А, что это, зачем, почему, чего сюда тащат, что он даёт?

46:45

Speaker A

Актуатор, м, показывает все, не то, что показывает, подключит метрики к твоему приложению. Так. Когда ты А что за метрики?

47:00

Speaker A

А, метрики э health чеки есть ещё. это не метрики. А, health чек это уже health. То, что он, э, подключает метрики и health чек тоже. А, А, что ещё есть, вот бывает полезно, вот, знаешь, я перезапустил, и бывает

47:18

Speaker A

мне очень хочется посмотреть, какая версия. Версия приложения где, в какой ручке вообще возвращается? Ты имеешь в виду именно в актуаторе?

47:29

Speaker A

Да, есть. Мы так делали. Почти на каждом месте работы, кстати, э, ну, приходилось это делать.

47:39

Speaker A

Версия, версия. Инфо. Инфо, а. А в каком формате метрики вообще Spring передаёт, кто их забирает, для чего, почему?

47:49

Speaker A

Как мы их смотрим? Его забирает Prometheus. А, потом с помощью Prometheus можно сделать дашборды, графаны такие с метриками, сколько реквестов в секунду там средняя обработка реквеста и всякое такое.

48:09

Speaker A

А как сервисы между собой могут общаться? Какие знаешь способы? Сервисы между собой Ты имеешь в виду REST, gRPC, вот это или?

48:22

Speaker A

Да-да-да-да-да. Хоп, ну REST, gRPC, если нужно только что-то сообщить, можно мессенджинг. Мессенджинг это брокеры в смысле?

48:36

Speaker A

Да, брокеры, да. Брокеры, что ещё можем? Хоп, ещё вообще если вниз спуститься, сокетами можно и сокеты.

48:45

Speaker A

Сокетами тоже можно. А ещё какие есть древние способы, экзотические способы? Экзотические, по-моему, SOAP есть.

48:54

Speaker A

[смех] Ну SOAP он древний, а экзотический такой вот, знаешь, который прямо такой себе. Я бы не хотел бы с ним работать.

49:06

Speaker A

[вздыхает] А-а-а. Не знаю. GraphQL ещё, допустим. А-а, GraphQL. Ещё Ещё из таких прикольных это FTP, допустим, мы можем по FTP общаться, знаешь, закидывать файл.

49:20

Speaker A

Файл, файл. Ну, да, тоже как вариант. А можно, не знаю, в БД пушить и тоже ждать, вот через базу.

49:29

Speaker A

Вот. Так. Поэтому нормально. Расскажи про Outbox Pattern, вообще зачем его придумали? Вот раньше жили и жили, всё хорошо было.

49:40

Speaker A

Какую проблему Outbox Pattern Оп. Я вот, например, тебе нужно сделать что-то в транзакции и и сообщить об этом кому-то, да, например, через Kafka сделаю, а что что плохого?

50:02

Speaker A

Ну, э-э, э-э, транзакция откатилась назад, э-э, например чисто Unique, э-э, пока он хотел сделать insert, кто-то сделал другой кто-то сделал insert и падает, э-э, например, через exception.

50:21

Speaker A

Там на column Unique стоит и из-за этого падает, а messaging отправился, да, а его невозможно откатить назад.

50:29

Speaker A

Поэтому мы используем Outbox pattern. А если сделать после транзакции сразу отправку? А после транзакции?

50:42

Speaker A

Ну, транзакция прошла, и я сразу делаю отправку в Kafka, допустим. Э-э, ну, может, э-э, случиться так, что, э-э, вот Kafka не отправит.

50:52

Speaker A

Как? А вот не Транзакция прошла, а а А Kafka не отправит. Kafka не отправил, да, по каким-то причинам.

51:01

Speaker A

Так. Тогда такой вопрос. Что возвращает KafkaTemplate.send? [фыркает] Я Kafka не пользовался, честно, вообще не знаю. По-моему, Completable Future там.

51:14

Speaker A

Да, ну, Future возвращает. Ну, вот как вариант, реально тоже. Если плохо написать, то действительно может потеряться.

51:22

Speaker A

Вот. Ну, допустим, так а как это решить? Ну, вот, м-м, делаем БД, э-э, таблицу какую-то, да, и со статусом решим вот, э-э, success или approved или, не знаю, failed.

51:40

Speaker A

Ну, вот я хожу по этой таблице, у меня несколько обработчиков, допустим, Outbox воркеров. Как сделать так, чтобы они друг другу не мешали?

51:51

Speaker A

В базе? Э-э. Да. М-м. Ну, если ты клонишь к этому, как его, лог можно хоп если конечно, я в правильном направлении думаю, можно эти, как его э-э, счётчики поставить, что ли?

52:21

Speaker A

Если я Нет, счётчики это гига-мега сложно. Ты, наверное, имеешь в виду optimistic lock? Optimistic lock есть, есть, да.

52:28

Speaker A

Да, так ты предлагаешь использовать просто локи. А как залокировать, так сказать, забрать себе запись, чтобы другие не взяли?

52:38

Speaker A

Э-э, в базе, или как? Ну, можно вообще его читать только вот в queue какую-то, да, и из него забирать, чтобы так, если Ну, а давай не queue, да, всё-таки у нас таблица ивентов, [фыркает] и нужно, вот у нас 10 под обрабатывают, и нужно,

52:57

Speaker A

чтобы они друг другу не мешали. Как это сделать? Хоп, не мешали? Ну, запустить их в таком-то в этом, как его, в execute, в executor'е, по-моему.

53:09

Speaker A

Ну, вот у меня это полностью разные приложения. А, разные приложения, ой. [тяжело вздыхает] Хоп, ты имеешь в виду, какая-то приложение читает, записывает данные в этот, в эту таблицу, а совсем другое приложение читает?

53:29

Speaker A

Так? Да, ну, вот у тебя 10 10 разных приложений 10 допустим спрингов запущено, и нужно, чтобы они друг другу не мешали.

53:39

Speaker A

[откашливается] Друг другу не мешали. Честно я не так уж в них вопросов. Ну вот у тебя 10 приложений, 10 инстансов запущено. Вот 10 под одного и того же приложения. Все они разбирают ивенты. И нужно, чтобы они не трогали

54:10

Speaker A

одни и те же записи. А, я понял, инстансов, да, много? Да-да-да, подов. Подов много.

54:22

Speaker A

[вздыхает][тяжело вздыхает] Чтоб друг другу не мешали. Даже не вспомню. Ну, select for update skip locked, вот это самое простое.

54:47

Speaker A

Пессимистический лок? Да-да-да. И причём skip locked обязательно добавлять, иначе Так. Зависнет. А, я думал вообще в другую направлении.

54:59

Speaker A

Давай поговорим, что что за explain, что показывает explain вообще? Explain показывает примерный анализ селекта, да?

55:13

Speaker A

Что он сделал, какой путь выбрал. А почему там цифры через две точки? Цифры, честно, не вспомню. По-моему, то, что он вот посчитал вот например, вот столько-то записей будет, а а там Э-э, ну, то, что он э-э, как сказать,

55:39

Speaker A

предвидел и то, что реально, по-моему, такое. Ну, да. А а реальный а реальный как получить?

55:52

Speaker A

С explain analyze. Explain analyze. А просто explain реально не покажет? Нет. Explain analyze просто запустит, да, сам select, а explain просто покажет то, что он предвидел, да? Что он хочет сделать.

56:09

Speaker A

Да. Давай поговорим про кэши в Hibernate. Какие знаешь? Э-э, хаб кэши, э-э, с Hibernate я не так уж часто работал, в основном MyBatis, а я слышал, я я не то что слышал, читал, и у него есть двух, как сказать,

56:27

Speaker A

двухслойный кэш. Угу. [откашливается] Можно как-то настроить, чтобы э-э, Hibernate э-э, не пошёл, например, мы сделали select find by ID и параметр передали один, в следующем м-м запросе мы передаём один, он не будет, по-моему, или в одной сессии не будет

56:49

Speaker A

ходить в эту базу, или что-то такое. Можно хорошенько настроить и подёргать, э-э, и она очень хорошо будет работать.

56:59

Speaker A

А так, э-э, так хорошо не знаком я с Hibernate. Примерно знаю entity ID, fetch, всякие кэш не не приходилось использовать.

57:14

Speaker A

Так. А-а хорошо. Какими миграциями в базу данных, работал? Что использовал? Flyway использовал, э-э, и сейчас пользуюсь Flyway.

57:29

Speaker A

Что делать, если мне нужно миграцию прокатить заново. Оп, м-м, Flyway есть была специальная команда, которая отменяет последнюю, по-моему, только последнюю.

57:44

Speaker A

Если м-м А если посередине нужно? Посередине, по-моему, у него вот этот нужен. Как его? Э-э production покупать.

57:57

Speaker A

Если не ошибаюсь, вот это м-м production перезапустить просто его. Перезапустить в каком смысле? Ну, заново прогнать.

58:07

Speaker A

Заново прогнать? Э-э, ну, history table можно удалить и всё. Вот, вот. Э-э, мне думается, что каждый почти такое делал в своё время.

58:17

Speaker A

Да, да. Я даже вот эти checksum менял. Вот. А, хорошо. Э, когда мы партицируем таблицу в Postgres'е, мы реально разделяем её или она как-то вот нереально?

58:31

Speaker A

Э-э, она, по-моему, лежит в каком-то другом месте, э-э, реального разделения этого там. Ну, БД я с партицией, с шардингом не занимался, честно.

58:45

Speaker A

Я запросы пишу, э-э, то, что касается м-м части программирования. У нас есть ДБ администратор.

58:54

Speaker A

Ну, м-м, как-то интересовался, почитал что-то, а так, э-э Партиции ты имеешь в виду вот, например, по числам, да, по каким-то колонкам Ну, берём таблицу и партицируем.

59:08

Speaker A

[тяжело вздыхает][вздыхает] Э-э, по-моему, он разделяет, э-э, как будет, э-э, хранить вот эти, как его?

59:14

Speaker A

М-м, или разделяет саму таблицу на подтаблицы и сразу знает по параметру, куда пойти. Чтобы Да, да. Причём это виртуальное разделение. Ну, то есть он не создаёт там кучу маленьких.

59:29

Speaker A

Хорошо. А, возвращаемся к вопросам, а, стареньким. Statement и prepared statement, в чём разница? Хоп.

59:41

Speaker A

М-м. Statement, prepared statement. А, я помню а prepared statement нас, а, как бы хранит от этого, от SQL injection, если Да, ну, наверное.

60:01

Speaker A

память не изменяет. Да, дальше не надо. Андрей, чем отличается delete и truncate? Допустим, вот у меня большая таблица, и мне нужно её почистить. У меня есть, а, пару способов, как я это могу сделать, какой будет самый лучший, в чём разница?

60:21

Speaker A

Хоп. Я наверное сразу не скажу, а, потому что не делал такого. Truncate, по-моему, сразу удаляет.

60:35

Speaker A

Truncate быстрее. Delete, он delete, он будет по одному, а truncate, он быстренько. Я вот помню, на своей самой первой работе, меня попросили почистить таблицу, но мы их чистили перед индексациями.

60:48

Speaker A

Я что-то, мне первое, что в голову попало, это сделать delete. Вот, delete работал в разы медленнее, на порядке медленнее, чем truncate. Я truncate такой сделал, мне не лид говорит: "А что ты не truncate'ишь?" Вот, я прямо удивился, он так быстро работает.

61:01

Speaker A

у нас тоже такой кейс был, а, мы, когда с Vault'ом играли, интегрировали Postgres, а, вот этот, как его, м-м, а, [фыркает] изменение пароля и юзернейма, да? Со стороны Vault'а, каждый какие-то, каждое какое-то время.

61:19

Speaker A

А, у нас настолько юзеров, а, вот, собрался, мы когда вот просто писали SQL вот этот для ваута, не написали, да, удали юзер, который ты создал да.

61:31

Speaker A

У нас накопился очень такой миллион пользователей ваупских таких с этим, вауп такой вауп такой Ага.

61:41

Speaker A

девочкой. Мы их удаляли потом, о. Долго. Долго. А, что такое пакетная вставка, зачем она нужна? Вот я, допустим, джун, я говорю, почему мы не можем вставлять по одному, зачем нам батчевая вставка?

61:58

Speaker A

А, батчевая вставка быстрее, потому что она будет батчами, да, делать, например, инсерт, если инсерт.

62:08

Speaker A

[тяжело вздыхает] А, ну, она как бы уменьшает, э, как его к как его, ха, ха Он меньше ходит к базе данных, да?

62:23

Speaker A

Вот собрал 15, один раз походил и сделал инсерт. А, это в, по-любому лучше и быстрее, чем по одному.

62:34

Speaker A

Так, тогда, а какие есть ловушки, когда мы включаем батчинг в Hibernate? Какие есть базовые ловушки?

62:43

Speaker A

Ха, пфф. Мм, хм хм. Базовые ловушки? Мм. Hibernate я точно не скажу, я этим не сталкивался.

62:55

Speaker A

Ладно, да. А в этом [откашливается] Мм. Какие есть способы управления транзакциями в в Спринге?

63:07

Speaker A

Мм, управление, э, у, ты имеешь ввиду изоляцию или я Нет, это про, больше вопрос про то, как можно создать транзакцию.

63:21

Speaker A

Ты можешь декларативно, то есть tx.begin transaction, а можешь через аннотацию. Это про этот вопрос был.

63:27

Speaker A

А. Угу. Ну, вот можно и JDBC template там взять. Что такое курсор в SQL?

63:39

Speaker A

В SQL курсор? Наверное, не вспомню. Да. Я, кстати, один раз за жизнь писал курсор, когда работал в Wildberries.

63:54

Speaker A

Мы там генерировали отчёты, их нужно было генерировать там минут за 5-7, а они долго очень генерировались.

64:02

Speaker A

Хорошо. Расскажи, что такое пирамида тестирования, зачем это? Пирамида тестирования? Мм, в самом низу, как рабы, это юнит-тесты.

64:13

Speaker A

Рабы? Ты пишешь очень-очень много, мм, например, для каждого метода по три-четыре штуки. Так. Потом уже идут, по-моему, интеграционные, мм, потом уже, если память не изменяет, стресс-тесты и все такие.

64:37

Speaker A

А почему это пирамида? Вот, э, вроде бы ты объяснил это как не пирамида, а просто разновидности.

64:44

Speaker A

мм э когда ты э пишешь какую-то имплементацию [тяжело вздыхает][вздыхает] э, пирамида, пирамида. Ну, как сказать? Мм, можно объяснить, э потому что мм нужно вот, например, интеграционных тестов тебе не так уж и много нужно, да? А ты будешь подниматься, например, сначала

65:11

Speaker A

юнит-тесты тебе очень много нужно писать, а интеграционные тесты не так уж много. Э-э, тебе достаточно Ну, и это ещё про разработку. Ты сначала, когда пишешь, ты пишешь юнит-тесты. Интеграционные - это уже дальше. И цена ошибки уже у тебя что-то э-э готовое, да?

65:30

Speaker A

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

65:39

Speaker A

Хорошо. Как считали кода, какое у вас покрытие кода? Тестами. Оп, Sonar, SonarQube, э-э, Jacoco, э-э, Ну, э-э, у нас 70%, но бывает, когда у тебя, например, очень много детошек, э-э, она снижает процент. Ну, в этом Детошки можно исключить. Исключить.

66:05

Speaker A

А, исключить можно, да. Ну, Ну, я имею в виду, если э-э Так э-э чисто там не так уж и нужен там 70%, э-э, это простилось как бы, а когда уже нужно, э-э прямо.

66:24

Speaker A

Ну это э-э, зависит от, как сказать, например, с э-э, самый такой типичный, ты не подключил вот этот, да, э-э, Джакарту Validation, например, да? Ну, поставил not now в контроллере. Если ты не протестируешь это, оно не будет работать, потому что это только

66:44

Speaker A

контракт. А, если ты не подключил, э-э, какой-то Hibernate например валидатор а э, не поймёшь, если Да.

66:54

Speaker A

Не понял. вы контракты публикуем? Э-э, в каком смысле? Ну, вот как передать контракт коллегам?

67:05

Speaker A

А, коллегам? Ну через через Open API, Swagger. Абсолютно верно. И последний вопрос. Давай поговорим про принципы хороших тестов. Слышал ли ты про First?

67:18

Speaker A

Хоп. Можешь повторить про что? Принцип хороших тестов First. First. М-м, из таких самых хороших правил я знаю про Date, потому что я сам сталкивался с этим.

67:36

Speaker A

Date не хардкодит, э-э. Э-э, вообще в Спринге, э-э, [откашливается] в плане то, что хороший тест это, э-э, для меня свайс-тесты.

67:49

Speaker A

Э-э, когда ты прям не поднимаешь весь контекст, э-э, если я в правильном направлении думаю.

67:57

Speaker A

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

68:06

Speaker A

Можешь вообще даже фильтр, э-э, убрать. Это очень Убирать плохо. Фильтры убирать очень плохо, не рекомендую.

68:14

Speaker A

Не, ну Вот очень много ошибок, если ты пишешь кастомные фильтры, ты просто очень много потеряешь. Лучше поднять полностью один контекст, ну, не знаю, на на 20-30 тестовых классов, чем вот это резать и потом вот у меня много было проблем,

68:29

Speaker A

когда вот Спринг обрезал, угу, поднимал не полный контекст, буквально некоторые проблемы просто не выяснялись. Сидишь, думаешь, а что они там? А вот он реально может обрезать некоторые фильтры.

68:41

Speaker A

Хорошо, First это Fast, то есть тесты должны быть быстрые. Если тесты идут по 50 минут, то в один момент ты сойдёшь с ума, особенно если у тебя в пайплайнах и ты не можешь замёржиться. Угу. Вот, если они у тебя, э-э, не независимые, то есть

68:57

Speaker A

шанс флаки-тестов. То есть тесты должны быть независимы друг от друга. Независимы, да, да, да.

69:01

Speaker A

Да. Repeatable, то есть Я чё-то не вспомнил, да. Да, self-validating, то есть самопроверяемые. То есть ты не должен лезть в консоль.

69:12

Speaker A

Да, с базой был кейс, э-э, когда вот для каждой репозитории поднимался Postgres контейнер. Ну, э-э, вот тогда написали абстрактный класс, в котором как бы контейнер запускался и экстендили от него.

69:26

Speaker A

Да, я понял. И тесты должны быть своевременные. Они должны писаться вместе вместе с кодом, либо писаться до кода, а не когда-нибудь потом. Потому что потом обычно оно не наступает. В принципе, у меня всё.

69:42

Speaker A

Передаю слово обратно Диме. Да, подключаюсь я, и у нас впереди на самом деле самая важная и интересная часть, это собственно фидбэк, который будет давать Серёжа Умиду. Но, э-э, пока Серёжа собственно готовит фидбэк, я немного расскажу про Shortcut, чем мы

69:58

Speaker A

занимаемся и чуть более подробно расскажу про то, а что же с вами будет происходить после мок-интервью. А пока Серёжа собственно идёт готовиться, а Умид отдыхать.

70:08

Speaker A

Э-э, собственно, ребят, вы на канале Shortcut. Мы это менторская программа для разработчиков. Мы помогаем вам в том, чтобы повысить ваш грейд из интернов до джунов, а джунов до мидлов, а мидлов до сеньоров, быстрее найти работу в России или за рубежом, или просто

70:24

Speaker A

начать решать решать более интересные, высоконагруженные, крутецкие задачи. Собственно, у нас в нашем сообществе уже больше 20 тысяч разработчиков, в том числе на этом YouTube-канале, в наших Telegram-ботах и э-э соответственно э-э, о из них 2 тысячи, больше 2 тысяч

70:40

Speaker A

даже человек успешно прошли у нас мок-интервью, э-э, и получили, э-э, больше 500 офферов суммарно.

70:48

Speaker A

При этом средняя оценка занятия у нас 4.9 из 5. Собственно, то, что вы сейчас увидели, это не только публичное собеседование, но это ещё пример того мок интервью, которое вы можете пройти в Шорткате. Но, конечно, ваше интервью будет один на один, без

71:03

Speaker A

меня, без зрителей по ту сторону, оно не будет никуда выкладываться, оно останется только у вас и так далее, да, то есть оно будет суперприватным. И в целом мок интервью - это такая возможность понять для тех, кто, например, давно сидит на одном месте

71:16

Speaker A

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

71:32

Speaker A

кажется, это довольно стрёмно с учётом текущего состояния рынка. Для тех же, кто уже давно собеседуется, откликается и не может получить оффер, для них это возможность посмотреть на себя глазами интервьюера и понять, что конкретно нужно подтянуть, чтобы, соответственно, найти оффер и

71:50

Speaker A

классное место работы. До мок интервью мы вам предложим ментора, представим его, но если у вас есть какое-то пожелание, то вы сами можете сказать: "Хочу Серёжу Чанкина, хочу Витю Анохина, хочу ментора из Авито, из Яндекса, из ВК, из Епама, из

72:06

Speaker A

Валберса и так далее". У нас больше 150 менторов суммарно и мы охватываем ими весь российский бигтех и многие-многие, соответственно, зарубежные компании. В том числе у нас есть менторы там из Амазона, из Убера, из Букинга, из Революта и так далее. По итогам мока мы

72:22

Speaker A

дадим вам фидбек, в котором скажем ваши сильные, слабые стороны, скажем, какой у вас сейчас грейд, какой может быть уровень зарплаты и что нужно прокачать до следующего грейда. Фидбек выглядит примерно так, да, вот здесь это реально фидбек, мы заблюрили имя человека,

72:37

Speaker A

которому мы его дали. Собственно, здесь вот наверху зелёным отмечены те вещи, которые вам стоит прокачать, да, то есть это наоборот, то, что вам прокачивать не нужно, это то, что вы уже классно ответили на собеседовании. При этом вот здесь вот на заднем плане красным, да,

72:52

Speaker A

отмечены те вещи, которые как раз стоит прокачать. Это то, что либо вы плохо ответили, то либо то, что на собесе не рассматривалось. То есть это те вещи, которым вам нужно уделить внимание до реального собеседования. Ну и, конечно, отметим ваш текущий грейд, скажем, какая

73:06

Speaker A

у вас может быть потенциальная зарплата прямо сейчас на рынке. Какой у вас может быть следующий грейд и что вам нужно сделать, чтобы перейти с текущего грейда в следующий.

73:15

Speaker A

И, конечно, да, в том числе мы расскажем про то, а как мы в Шорткате сможем с этим помочь. Да, соответственно, и вы можете прийти к нам на занятия, прокачивать именно те вещи, которые у вас западают. Да, у нас нет каких-то

73:31

Speaker A

курсов знаете где все общаются в каком-то гигантском чате, проходят одно и то же. Наоборот, мы уделяем внимание тому, что конкретно вам нужно подтянуть.

73:44

Speaker A

И вы занимаетесь с ментором этим один на один. До каждого занятия ментор скидывает теорию. На самом занятии, соответственно, вы эту теорию разбираете, практикуетесь. Между занятиями можно задать любой вопрос, можно просить провести код ревью домашки или пет-проекта, либо можно запросить

74:01

Speaker A

дополнительные материалы по теме домашки при необходимости. При этом теория это не какие-то ссылки из Гугла, вся теория собрана на нашей платформе, и мы её собираем специально так, чтобы когда вы, например, прошли курс по алгоритмам или, когда, соответственно, у

74:18

Speaker A

вам, не знаю, например, там курс по базам данных, мы составляем их так, мы составляем их ориентируясь на те вопросы, которые прямо сейчас задают на рынке. И после каждого такого навыка у вас будет, соответственно, пул вопросов, которые у вас могут

74:35

Speaker A

спросить на этом, по этой теме на собеседовании. И также, когда вы уже заботали теорию, когда вы заботали практику, мы э А-а устраиваем вам мок-интервью с другим ментором, да, который поможет, а-а подскажет, а-а и ладно, сорри, не поможет и не подскажет. Мы устраиваем

74:56

Speaker A

мок-интервью с другим ментором, чтобы удостоверить, что вы эту тему правильно поняли, да, потому что теория и практика это хорошо, но на собеседовании вас будут собеседовать по этой теме, и это отдельный скилл. И благодаря вот этому подходу, что вы сначала у вас проходит

75:09

Speaker A

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

75:23

Speaker A

ответите на собеседовании. Собственно, менторов у нас больше 150, в том числе Серёжа Чанкин, в том числе ребята, кого вы видите на слайде. Это ребята там из всего российского бигтеха и многих зарубежных компаний. Суммарно у нас менторов больше 150, это мидл плюс и

75:36

Speaker A

синьор а-а Java-разработчики. Также это, конечно, и тимлиды, поэтому, если вы хотите качаться дальше в синьоры, тоже мы с этим вам можем помочь. Но собственно, наша задача не сделать какой-то очередной курс, знаете, который прошёл, забыл и всё. Наша задача сделать

75:51

Speaker A

так, чтобы вы либо быстрее нашли работу, если у вас такая цель, да, и с нами время перехода на новое место работы это 2-3, иногда 4 месяца против стандартных текущих месяца 6 месяцев на рынке.

76:04

Speaker A

Но мы, конечно, не кнопка бабло, да, а-а мы не можем сделать так, чтобы вы нам заплатили денег, мы вам надали больше денег. Конечно, мы хотели бы, чтобы вы занимались как минимум 10 часов в неделю, это где-то один выходной

76:17

Speaker A

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

76:28

Speaker A

Собственно, мы с этим и помогаем, вот здесь история наших менти. Да, как там ребята устраиваются в Яндекс, в а-а другие какие-то большие компании. Вот в том числе в Островок, и здесь есть фан-факт, что у нас а-а есть одна ком- команда в Островке, где все,

76:44

Speaker A

там, по-моему, четыре или пять человек работают в этой команде, все, кроме тимлида, это наши бывшие менти. Вот это очень крутой факт, узнал буквально несколько недель назад. И мне кажется, это суперкруто.

76:56

Speaker A

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

77:10

Speaker A

Собственно, первый тариф, да, это как раз грейд-ап и рост зарплаты, да, здесь, соответственно, собрано всё, что вам нужно, если вы хотите остаться на текущем месте работы, никуда не хотите переходить. Во втором тарифе, его берут 70% наших менти, в

77:27

Speaker A

июле взяли 73%, соответственно, собрано всё, что нужно для перехода в другую компанию. И в том числе здесь есть гарантия пяти собеседований. Что это значит? Это значит, что если вы покупаете этот тариф, либо там есть ещё некоторые, о которых вам расскажет менеджер, это

77:44

Speaker A

означает, что у вас будет как минимум пять собесов. Почему это возможно? Потому что у нас есть менторы из более чем их больше, чем 150, мы покрываем ими все большие российские и многие зарубежные IT-компании. И благодаря им мы можем вас рефералить в компании, куда

78:02

Speaker A

вы хотите. Но часто, знаете, бывает, что на курсах каких-то или какие-то карьерные консультанты просто дают таблицу и говорят: "Откликайся, пиши им сам".

78:13

Speaker A

Ты написал десяти, тебе ответил один и так далее. У нас есть специальный человек который вместо вас, как бы сказать без мата, задалбывает менторов. И говорит им, что вас нужно зарефералить, просит скрины подтверждения, что вас зарефералили и так далее. И у этого

78:33

Speaker A

человека KPI, да, что пока у вас не будет пять собесов, он не получит за вас выплату. Поэтому он очень заинтересован в том, чтобы у вас было пять собесов, иначе денег он не заработает.

78:45

Speaker A

Собственно, первый шаг, ребят, это мок-интервью. На мок-интервью вы сможете узнать свою реальную стоимость на рынке и свой текущий грейд. Получите план развития до следующего грейда. Ну и в целом, да, пройдёте симуляцию собеседования настоящего с ментором из интересующей вас компании.

79:01

Speaker A

Собственно, мок мы можем провести по любому стеку, в том числе по Джаве, в том числе по Девопсу, по базам данных, по Гошке, Питону, фронтенду, мобильной разработке. И у нас есть ещё там, конечно, и ML, Data Science и так далее.

79:13

Speaker A

И для всех, кто нас сегодня смотрит, у нас есть два бонуса. Первый - это если вы оставите по ссылке в описании либо просто зайдёте в нашего бота shop.code.java, оставите там заявку на мок-интервью, оно будет стоить для вас 2.000 руб. вместо 7.900. Всего 2.000. За

79:31

Speaker A

эти 2.000 вы получите часовое собеседование с ментором и персональный фидбек и план развития. И если вдруг мок-интервью вам не понравится по каким-то причинам, если что-то вам не подойдёт, у нас есть гарантия возврата, что в течение недели после мока вы

79:46

Speaker A

можете нам написать, сказать: "Пацаны, мне не понравилось, ожидания там не оправдались" или ещё что-то в этом роде, и мы вам вернём все деньги.

79:53

Speaker A

Можете, кстати, любые причины там называть. Вот я сейчас привожу, что вы можете сказать, что там был Дима лысый и и, так сказать, э-э, верните деньги, мне не нравится Дима.

80:03

Speaker A

Ну, без проблем, вернём. Собственно, но несмотря на то, что здесь я убеждаю всех возвращать деньги за мок каждую неделю, из 2.000 прошедших э-э, мок-интервью вернули деньги всего 11 человек. Это полпроцента. Полпроцента. Это типа очень мало, если что, да? 11, 2.000, да?

80:23

Speaker A

Разные порядки чисел даже. Полпроцента, очень мало. Поэтому мок-интервью вам точно понравится, приходите на него. Вот QR-код, да, вот вот большой. По ссылке в описании есть ссылка, та же самая, с этим QR-кодом. За 2.000 руб.

80:39

Speaker A

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

80:54

Speaker A

следующего грейда. И также, конечно, оценку вашей текущей зарплаты и, возможно, следующей зарплаты. Ну и, конечно, дальше вы можете прийти в Shortcut, заниматься, прокачиваться. Но если вы хотите просто оценить свои знания, без проблем, вот это возможность, собственно. Мы никого

81:08

Speaker A

дальше силком на менторство не тащим. Хотите к Серёге Чанкину, без проблем. Хотите к Вите, no problems. 2.000 руб.

81:16

Speaker A

это очень немного, мне кажется, за такую услугу. И мне кажется, что каждый её должен попробовать. Поэтому приходите к нам на мок-интервью. А я возвращаю Серёжу и Умида чуть-чуть, э-э чуть-чуть соответственно подержу этот QR-кодик и, э-э, собственно, верну Серёжу и Умида.

81:38

Speaker A

От себя могу сказать, что действительно работают приглашалки, рефералки от Шортката. Это прямо гарантированно вам напишут.

81:48

Speaker A

Кто ещё вам напишет на этом рынке? На этом рынке очень как-то пишет. Мне это очень нравится. Плюс, кому бы я советовал пройти, мок почти всем. Я бы сам бы с радостью прошёл бы мок какие-нибудь алгосы да.

82:03

Speaker A

Потому что давно их не тренировал. Ну что, давайте вернёмся к Умиду. Умид, как тебе в целом интервью?

82:11

Speaker A

В целом интервью очень классно. Я по всем критериям, наверное, подхожу к темплейту Димы. Я, наверное, года три, что ли, или четыре вообще не ходил на собеседования.

82:26

Speaker A

И было классно. М-м. Много чего узнал, э-э, что нужно подтянуть, где нужно, э, где нужно как его почитать.

82:38

Speaker A

А где нужно сделать матч, э-э, то, что я знаю, но название не знаю. Безусловно. Плюс я напомню, что фидбэк, который я сейчас дам, он не является фидбэком, который даётся за занятия после 2.000. Фидбэк после занятия, он огромный.

82:58

Speaker A

Текущий фидбэк, он в условиях того, что real time, плюс он не подготовленный, так чтобы сидеть, вспоминать, как бы вопрос какой.

83:06

Speaker A

Он, э-э, устный и устный намного меньше. Нравится, что у Мида он действительно практик. Причём у нас есть интересная практика даже с Quarkus'ом. Понимает, а-а, что такое АОТ, но есть блоки, целые блоки, которые стоит повторить, э-э, чтобы найти работу. Допустим,

83:26

Speaker A

многопоточку я бы точно рекомендовал повторить, Kafka изучить, освежить в памяти а-а Spring а-а освежить память GC, а-а, чуть-чуть дотянуть коллекции. В целом, как хороший middle с потенциалом middle плюс очень большим и быстрым, то есть не так, что там сидеть год-два

83:46

Speaker A

мучиться на middle плюс, а быстро потенциалом, то есть имея навыки, легко набрать теорию, потому что имея теорию, набрать практику только практикой, вот.

83:57

Speaker A

Очень понравилось, очень зашло. Плюс по soft skills Мид очень приятный, не конфликтный. Мой вердикт Миду - большой хороший middle.

84:09

Speaker A

Вот, мне кажется, мы завтра, что сегодня увидели, э-э, да, и пользу мог интервью, потому что видно, что у Мида есть опыт, видно, что этого опыта много, но если бы, например, там, а-а, мне кажется, это было, м-м, ну, как бы реальным

84:21

Speaker A

собеседованием, то Мид, скорее бы, попытку свою потерял. Но мне кажется, сейчас есть возможность позаботиться вот эту многопоточку, позаботиться вот эти все вещи и залутать оффер на, там, реальном собеседовании, если у Умида есть такая цель, а он не просто пришёл

84:34

Speaker A

проверить свои знания и скиллы. Ребят, напишите, пока, как вам вообще сегодняшний собес, что понравилось, что не понравилось. В целом, у нас есть такое сейчас вот 5-10-15 минут, сколько у вас будет вопросов, да, мы на все эти вопросы ответим. В том числе, можете

84:50

Speaker A

задавать вопросы про шорткат, про мок-интервью и так далее, если что-то было непонятно в моей презентации, тоже спрашивайте, мы на всё это ответим.

84:58

Speaker A

Умид, пока расскажи вообще, как тебе сегодняшний мок. Мок отлично. Мм, кстати, есть такая цель найти, как бы, работу, в частности, как бы, дистанционную.

85:13

Speaker A

Я почему-то очень быстро стал моральным сеньором. Мне уже хочется свою ферму, посадить, не знаю, виноград и держать скотов, курочек.

85:27

Speaker A

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

85:49

Speaker A

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

86:06

Speaker A

А, ну это [смех] это рассмотрим. О'кей. Раза в полтора-два занижена. О'кей. Реально, ну, это Классный, классный фидбэк.

86:18

Speaker A

[смех] Наверное, самый ценный. Ну, кстати, такое тоже бывает, соответственно, в Моке, что приходят ребята, которые действительно занижают свою зарплату. А, вот, а, ребят, есть ли у вас какие-то вопросы?

86:32

Speaker A

Если вопросов нет, просто оцените Мок. Скажите, вот тут Руслан сказал, сказал, что это было обычно говорят, давайте. А, напишите от одного до десяти, как вам сегодняшний эфир, где 10 - это было очень круто, вообще лучшее, что увидели, а один было полное

86:46

Speaker A

унылое Напишите, как вам, да, от одного до десяти. А, чтобы мы понимали. А, или задайте любой вопрос, мы, да, на все вопросы, соответственно, сейчас будем отвечать, а, у нас, а, есть для этого время. Да, вот Руслан тоже мне в Бучка захотелось, в общем, а,

87:06

Speaker A

заиметь, а, семь, восемь. Ну, мне тоже, на самом деле, вот я тоже думаю, блин, дача круто. Вот дачу воды, какой-нибудь.

87:16

Speaker A

Это вообще, конечно, круто. А, семь, восемь, кайф. Серёжа Чамкин начал А очень да. Релеят на результате. Релеят на результате.

87:29

Speaker A

А, Вы можете помочь подготовиться к собесу за неделю? Слушайте, ну, я честно скажу, что вы можете прийти на Мок, а, да а и озвучить ментору цель, что у вас собес через неделю, что можно сделать, типа, лучше всего. И он честно вам скажет, да,

87:47

Speaker A

реально это или нереально. Здесь как бы просто, знаете, а, вопрос, что такое подготовить к собесу за неделю. У нас есть, например, специальные навыки, специальные курсы, которые заточены под, а, то, чтобы вы вы быстро рефрешнули всю теорию, которую спрашивают на собесе.

88:04

Speaker A

Да, но это, конечно, не гарантия его прохождения. Если вы придёте там, не знаю, и не знаете, что такое инкапсуляция, дали полиморфизм, условно говоря Понятно что ну ладно типа ООП, не знаю, что такое там, или ещё что-нибудь, какие-нибудь другие вещи.

88:18

Speaker A

Да, понятно, что мы не сможем за неделю вас натаскать к собеседованию. Поэтому я бы на вашем месте пришёл на мок, спросил у ментора, что как, стоит или не стоит идти, стоит или не стоит готовиться, может, имеет смысл двинуть собеседование.

88:31

Speaker A

И от этого принимал бы решение. Если ментор вас хорошо оценит, без проблем, у нас есть специально заготовленные материалы для такого спидрана по собесу.

88:41

Speaker A

А-а. Как-то так. Надеюсь, ответил на ваш вопрос, Роман. Поэтому приходите на мок. Всех зову.

88:49

Speaker A

Да, и я подготовил даже целый банк вопросов, выложил его на GitHub, как у других коллег. Я просто взял 300 видосов на Ютубе с моковыми собеседованиями.

89:02

Speaker A

Наши или Транскрибировал их. Да, и выбрал самые топовые. Запушил, и вот Умит тоже оценил, он, видно, что некоторые материалы даже читал.

89:13

Speaker A

М-м, да, да. [смех] Было дело. Я я видел некоторые ответы, которые прямо как будто там А у нас тоже, кстати, слушай, Серёж, а мы тоже готовили, может быть, ты видел вот этот файлик, типа, топ-50 вопросов к собесу нет?

89:26

Speaker A

А, у меня 300. 300? Ну, у нас, видишь, 50. А-а, э-э, как-то так, как-то так. А, вопрос, э-э, батчёвая ставка Hibernate, какие ловушки?

89:40

Speaker A

Ну, вот это как раз-таки из этого репозитория. Ловушка с Identity, потому что, допустим, тот же Identity, айдишка, она говорит, что нужно здесь и сейчас делать инсерт, и она ломает.

89:55

Speaker A

Вообще, в целом, я никогда батчёвый Hibernate особо и не включал. Я вручную батчёвые запросы делал.

90:04

Speaker A

А будет ссылка на GitHub? Я могу скинуть, давайте, сейчас скину. Э-э. последний пост, да, у тебя?

90:11

Speaker A

ссылки не кидаются, кстати. Да? Ну, я вот скинул. Да. Реально? Ну, да. Вот. Ну, может, она плохо выделилась ребята.

90:23

Speaker A

А, это это System Design. А вот есть ещё и А, ну, это вот что там можно у Серёжи найти.

90:30

Speaker A

Да, у меня можно найти. Это бонус всем ученикам. Кайф, кайф. Ладно, ребят, есть ли у вас ещё какие-то вопросы? А, слушайте, а вот может, зададите вопросы какие-нибудь про Mock или Shortcut? Вообще, что как вам идея? Про вас, не про вас, хотите, не

90:48

Speaker A

хотите? Что думаете, так сказать? Э-э, так вот, я вот триггерю. Мне вот, например, захотелось ещё раз.

90:57

Speaker A

О, ну, приходи. Вообще, без проблем. С Витей, да, с Витей. Э-э, собрать, так сказать, всех интервьюеров ютубных наших.

91:09

Speaker A

Вот. Поэтому, поэтому реально приходи, вообще без вопросов. Э-э, всё, так сказать, организуем в лучшем виде.

91:17

Speaker A

Э-э, ну, ладно. Давайте, видим, вопросов нету. Я думаю, что будем постепенно завершаться. Спасибо большое Умиту за то, что ты к нам сегодня подключился.

91:24

Speaker A

Мне кажется, это всегда большой-большой стресс для человека подключаться на такое собеседование. Спасибо тебе большое за то, что собственно, as usual, отважился и пришёл к нам сегодня сюда.

91:36

Speaker A

Э-э, спасибо большое. Да, спасибо большое Серёжа за то, что к нам тоже сегодня с утра с утра сегодня, сейчас, на этот эфир присоединился. Э-э, спасибо большое за то, что, в общем, радуешь нас своими вопросами и своим, так сказать,

91:50

Speaker A

очаровательным видом. Э-э, но самое большое спасибо, как всегда, вам, дорогие наши зрители. Спасибо за то, что были с нами. Без вас мы были бы странными людьми, которые хрен пойми, зачем созваниваются друг с другом, собеседуют. Вы наделяете всё это

92:03

Speaker A

смыслом. Спасибо за то, что нас смотрите. Приходите, конечно, к нам на мок-интервью, стоит всего 2.000 руб.

92:09

Speaker A

Э-э вы получите часовое собеседование с ментором, получите фидбэк, получите индивидуальный план развития и понимание, что вам нужно прокачать, чтобы круто проходить собесы. Поэтому приходите к нам на мок и, конечно, подписывайтесь на этот канал. До встречи на следующей неделе, в среду в 7:00

92:26

Speaker A

вечера по Москве. Всем пока. Пока. Всем пока. Спасибо. Да.

Topics: Java собеседование Quarkus Spring мок-собеседование Shortcut нативная компиляция коллекции Java многопоточность подготовка к собеседованию бигтех

Учить по этому видео

- [Карточки по этому видео](https://sozai.app/ru/tools/ai-flashcard-generator/?from=transcript&id=84006)
- [Тест по этому видео](https://sozai.app/ru/tools/quiz-generator/?from=transcript&id=84006)

Бесплатно, составлено ИИ по этой расшифровке. Без регистрации.


---
This is the markdown twin of https://sozai.app/transcript/open-java-interview-senior-uzum-ex-wb/ — the same content, without the markup.
Published by SozAI (https://sozai.app). Reuse and quotation are allowed with attribution and a link back.
Machine-readable index: https://sozai.app/llms.txt · data API: https://sozai.app/api/
