<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Вопросы на подумать on IT Ментор | Java методичка</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/</link><description>Recent content in Вопросы на подумать on IT Ментор | Java методичка</description><generator>Hugo</generator><language>ru</language><atom:link href="https://krios2146.github.io/java-backend-interview-prep/thought-exercises/index.xml" rel="self" type="application/rss+xml"/><item><title>Основы Java, коллекции, OOP, лямбды, иммутабельность</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/java-core/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/java-core/</guid><description>&lt;h1&gt;Основы Java, коллекции, OOP, лямбды, иммутабельность&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. HashMap расширилась. Добавили в неё 13 элементов, потом удалили 2 что произойдет?&lt;/h3&gt;

 &lt;h3&gt;2. В HashMap вставляем 10 тыс ключ-значений, это все разные объекты. Как сделать так, что с вероятностью 99% мы получили значение по ключу за константное время? - один вариант: сразу создать очень большую мапу 10 млрд значений&lt;/h3&gt;

 &lt;h3&gt;3. Какие коллекции позволяют дублировать, какие не позволяют?&lt;/h3&gt;

 &lt;h3&gt;4. Переменная не помечена словом final, но изменяться она не может?&lt;/h3&gt;

 &lt;h3&gt;5. Хорошо ли делать длинную цепочку наследования на классах?&lt;/h3&gt;

 &lt;h3&gt;6. Есть класс, у которого 2 поля int и java.util.date. Как сделать immutable class из этого?&lt;/h3&gt;

 &lt;h3&gt;7. Есть key, value. Программист создает Map с дженериками, где key - собственный класс, а value - string. Что ему нужно сделать, чтобы использовать key?&lt;/h3&gt;

 &lt;h3&gt;8. Есть список из 10 объектов. Делаю стрим map, filter, и другие нетерминальные операции. Сохраняю ссылку на стрим. Потом добавлю новые объекты в список. В самом конце, беру ссылку на стрим, вызываю терминальную операцию toList(). Какое количество объектов стрим обработает: изначальное или новое? Или ошибка?&lt;/h3&gt;

 &lt;h3&gt;9. Я использую массив в качестве ключа для HashMap. Во время код-ревью что вы мне скажете?&lt;/h3&gt;

 &lt;h3&gt;10. В таблице первичный ключ Х, но нужно искать не по Х, а по У. Когда грузишь мапу, что ты можешь сделать, чтобы ключь стал другим в мапе, но ты не потеряешь данные? Зачем я могу это делать?&lt;/h3&gt;

 &lt;h3&gt;11. Компилятор требует при использовании лямбды выражения либо final, либо effectively final?&lt;/h3&gt;

 &lt;h3&gt;12. Ты передаешь переменные. Параметры через конструктор. Они объявлены как final. Это иммутабельность?&lt;/h3&gt;

 &lt;h3&gt;13. У класса переопределили метод. Как вызвать метод предка из переопределенного класса? Представим, что метод приватный.&lt;/h3&gt;

 &lt;h3&gt;14. Создал иммутабельный класс, в нем 10 полей, хочу использовать свой класс как ключ в HashMap. Что делать?&lt;/h3&gt;

 &lt;h3&gt;15. Объект типа User с двумя полями String firstName, String lastName, без реализации hashCode(). Объекты User используются в качестве ключей в HashMap. Сначала записали в HashMap с ключом user1. Потом создали user2 с такими же firstName, lastName, пробуем по ключу user2 вытащить из HashMap данные. Что будет?&lt;/h3&gt;

 &lt;h3&gt;16. Сможет ли сборщик мусора удалить два объекта ссылающиеся друг на друга?&lt;/h3&gt;

 &lt;h3&gt;17. Если в интервейсе есть один дефолтный метод, то его можно использовать как функциональный интерфейс?&lt;/h3&gt;

 &lt;h3&gt;18. Если мы переопределяем поведение родительского метода, можем ли мы изменить тип исключения, которое выбрасывает родительское?&lt;/h3&gt;

 &lt;h3&gt;19. Предположим у тебя есть объект, который представляет из себя List листов стрингов. С помощью Stream API тебе надо найти String с наибольшей длиной&lt;/h3&gt;

 &lt;h3&gt;20. Статический блок, переменная статическая не final, она проинициализированна в блоке инициализации и в самом поле. Какое значение переменная примет?&lt;/h3&gt;

 &lt;h3&gt;21. Берем не final переменную. Инициализируем переменную через поле и через конструктор. Какое значение переменная примет?&lt;/h3&gt;

 &lt;h3&gt;22. Есть три способа пройтись по коллекции. Расскажи про них и какой в каком случае использовать?&lt;/h3&gt;

 &lt;h3&gt;23. Что будет если на вход map() и flatMap() приходит null&lt;/h3&gt;

 &lt;h3&gt;24. Как скопировать объект? Сделать копию объекта&lt;/h3&gt;

 &lt;h3&gt;25. Есть ArrayList на 10 элементов. Хочу получить доступ к пятому элементу. Почему доступ будет O(1)? Как сработает доступ по индексу? Если в ArrayList лежат strings?&lt;/h3&gt;

 &lt;h3&gt;26. Хочу создать LinkedList из strings. Где будут лежать strings?&lt;/h3&gt;

 &lt;h3&gt;27. У нас есть некий объект Юзер. Есть три параметра. Как инкапсулировать параметры?&lt;/h3&gt;

 &lt;h3&gt;28. Есть класс Parent и от него наследуется класс Child. В Parent есть три метода. Как нам реализовать методы, чтобы ими могли пользоваться только наследуемые.&lt;/h3&gt;

 &lt;h3&gt;29. Есть класс внутри которого находится статический параметр. Если я создам 50 инстрансов этого класса и буду менять этот статический параметр, то что будет?&lt;/h3&gt;

 &lt;h3&gt;30. Создал Stream. Произвел операцию. Смогу ли я обратиться к этому стриму еще раз?&lt;/h3&gt;

 &lt;h3&gt;31. Нужно отсортироваться List с какими то классами. Стринговыми юзерами. а стринговые юзеры они храняться в пакете который мы получили из мавена. Что тут лучше использовать?&lt;/h3&gt;

 &lt;h3&gt;32. Если мы напишем stream.filter.filter.filter что произойдет?&lt;/h3&gt;

 &lt;h3&gt;33. Как на практике проверить, что вместо родителя можно подставить наследника?&lt;/h3&gt;

 &lt;h3&gt;34. С чего начинается поиск ресурсов для удаления GC. Как GC ищет первые ссылки для удаления?&lt;/h3&gt;

 &lt;h3&gt;35. Пердставим, что у нас есть приложение, которое нормально обрабатывает 100 RPS. Жрет 250 мб оперативки. Мы захотели его ускорить и выдали ему 32 гб оперативки. Дадим на него теже 100 RPS. Измениться ли профиль ответа? Ускориться ли работа? Как будет наполняться Heap?&lt;/h3&gt;

 &lt;h3&gt;36. Как можно сравнить объекты между собой кроме equals и hashcode&lt;/h3&gt;

 &lt;h3&gt;37. Есть два класса. Один класс используется как ключ для мапы, другой класс исспользуется только для значений в мапе. Как ты будешь реализовывать контракт hashCode и equals в этих классах&lt;/h3&gt;

 &lt;h3&gt;38. TreeSet. Есть элементы от 0 до n. Начинаю последовательно вставлять в TreeSet. Какая будет высота дерева?&lt;/h3&gt;

 &lt;h3&gt;39. Есть список состоящий из одного миллиона объектов. Нужно отыскать все дубликаты использую минимальный объем памяти&lt;/h3&gt;

 &lt;h3&gt;40. Есть класс User. Внутри есть поле класса Address. В классе Address есть поле класса Building. Хочу по user получить номер здания, в котором живет. В этой цепочке всё может быть Null. Мы не хотим NullPointerException. Как это сделать? Какой уникальный безопасный метод нужно создать?&lt;/h3&gt;

 &lt;h3&gt;41. Если в кетч поймали исключение, начали обрабатываеть и словили еще одно исключение. Что будет?&lt;/h3&gt;

 &lt;h3&gt;42. Что можно сделать с List, но нельзя сделать с Queue&lt;/h3&gt;

 &lt;h3&gt;43. Как сделать копию объекта не используя стандартные методы?&lt;/h3&gt;

 &lt;h3&gt;44. Предоположим у нас есть лист Юзеров. У Юзера есть логин. Как преобразовать лист в мапу, где ключ будет логин, а значение будет Юзер.&lt;/h3&gt;

 &lt;h3&gt;45. Есть бинарное дерево упорядоченное слево на право. Есть ссылка на корень дерева. Нужно вывести все элементы дерева в порядке возрастания.&lt;/h3&gt;

 &lt;h3&gt;46. Предположим есть обхект, который представляет из себя List&amp;lt;List&lt;!-- raw HTML omitted --&gt;&amp;gt;. С помощью Stream нужно найти String с наибольшей длиной&lt;/h3&gt;

 &lt;h3&gt;47. Тебе с фронтенда приходит enum. Тебе надо сравнить два enum. Что ты будешь использовать? equals или == и почему?&lt;/h3&gt;

 &lt;h3&gt;48. Нужно List&lt;!-- raw HTML omitted --&gt; превратить в List&lt;!-- raw HTML omitted --&gt;. Что используешь для задачи перегнать один тип объектов в другой? Классический цикл или Java Stream API?&lt;/h3&gt;

 &lt;h3&gt;49. Я создал интерфейс там есть абстрактный метод и дефолтный метод. Это будет являться функциональным интерфейсом?&lt;/h3&gt;

 &lt;h3&gt;50. We have a large text file, we want to count all the words. What Java collection you will use?&lt;/h3&gt;

 &lt;h3&gt;51. We have a list of Strings. There are some duplicates. How to remove duplicates without loops and if statements?&lt;/h3&gt;

 &lt;h3&gt;52. Есть код, написанный на Java. Какие этапы он проходит перед тем, как он будет исполнен на машине? И что происходит при исполнении на машине?&lt;/h3&gt;

 &lt;h3&gt;53. Есть наш класс, в котором переопределили hashCode() так, что каждый раз возвращается новое рандомное значение (return Random.nextInt()). Мы параметризовали этим классом HashSet. Изменится ли сложность contains() у HashSet? Как будет работать HashSet?&lt;/h3&gt;

 &lt;h3&gt;54. Нужно реализовать энциклопедию: книжка, в которой написаны слова и их значения. Все слова упорядочены по алфавиту. Какую структуру, структуры данных ты бы использовал?&lt;/h3&gt;

 &lt;h3&gt;55. I put a key-value pair into the HashMap. Then another key (different from the first key) generates the same hashcode. What is the HashMap next scenario?&lt;/h3&gt;

 &lt;h3&gt;56. I&amp;rsquo;ve created final HashMap. Can I change elements of HashMap?&lt;/h3&gt;

 &lt;h3&gt;57. А как сделать, чтобы при получении ссылочного типа через getter я не мог его изменять внутри?&lt;/h3&gt;

 &lt;h3&gt;58. Ты создал параметризованный класс. Потом ты где-то в коде насоздавал этих классов, параметризованных разными классами. В Runtime все эти классы будут разными?&lt;/h3&gt;

 &lt;h3&gt;59. Открываем ресурс в конструкции try-with-resources. В логическом блоке вылетело исключение. Ресурс будет закрываться, но процессе закрытия что-то произошло с сетью и тоже вылетело исключение. Ресурс закроется?&lt;/h3&gt;

 &lt;h3&gt;60. Пишем Generic List&lt;!-- raw HTML omitted --&gt;. Что это будет значить? Какие объекты можем положить в этот лист?&lt;/h3&gt;

 &lt;h3&gt;61. Есть Pair a и Pair b. Содержимое одинаковое. Ты сравниваешь через равно, через тройное равно, через equals(). Какие результаты будут? Как в ключевом слове record?&lt;/h3&gt;

 &lt;h3&gt;62. Создашь переменную внутри цикла. Что с ней произойдет в Куче, после того, как одна итерация цикла пройдет? Когда она вычистится?&lt;/h3&gt;

 &lt;h3&gt;63. Мы делаем много вставок в конец ArrayList. Иногда хватает места, иногда не хватает, приходится расширяться. Какая средняя сложность операции? Чаще встречается плохой сценарий, когда надо расширяться?&lt;/h3&gt;

 &lt;h3&gt;64. Есть два списка очень больших, с млн элементов в каждом. ArrayList и LinkedList. Мы просто итерируемся foreach по каждому. Где быстрее процедура итерации?&lt;/h3&gt;

 &lt;h3&gt;65. Хотим использовать как ключ HashMap свой класс иммутабельный. В классе очень много полей 20-30, многие из них опциональные. Я не хочу создавать поля через конструктор объекта. Какую более удачную конструкцию можешь предложить для создания иммутабельных объектов с кучей опциональных полей?&lt;/h3&gt;

 &lt;h3&gt;66. Есть интерфейс. В нем один метод. В сигнатуре метода я не написал, что он кидает какие-либо исключения. Реализую этот интерфейс, хочу из этого метода кинуть проверяемое исключение. Могу ли я так сделать?&lt;/h3&gt;

 &lt;h3&gt;67. В TreeMap 100 элементов. Сколько там будет сравнений, сколько проходов в худшем случае, пока он не найдет элемент?&lt;/h3&gt;

 &lt;h3&gt;68. Ситуация с двумя списками: ArrayList vs LinkedList. Элементы одинаковые. Ты постоянно добавляешь элемент в конец каждого списка. И итерируешься полностью по листу. Что будет быстрее отрабатывать?&lt;/h3&gt;

 &lt;h3&gt;69. List очень большой, а памяти очень мало. На копирование даже половины исходного списка не хватит. Как с этим побороться?&lt;/h3&gt;

 &lt;h3&gt;70. Что будет быстрее работать при операции сложения: два int или два Integer?&lt;/h3&gt;

 &lt;h3&gt;71. Есть функция, которая складывает два числа. Сначала ее сигнатура: передаем в нее два int, возвращает она тоже int. Потом заменили все эти int на Integer. Это корректная замена? Какие проблемы, ошибки могут быть?&lt;/h3&gt;

 &lt;h3&gt;72. Есть список с объектами - геометрическими фигурами. У них есть свойство цвет. Надо из списка с помощью Stream API получить только зеленые фигуры. Как это сделать? Усложнение ситуации. На выходе нужно получить Map, у которой ключ это цвет, а значение это список фигур такого цвета&lt;/h3&gt;

 &lt;h3&gt;73. Как найти последний элемент стрима? Сколько всего элементов заранее не известно&lt;/h3&gt;

 &lt;h3&gt;74. Объявили переменную типа int count. Потом есть стрим и в нем есть метод map(). И в методе map() мы инкрементим count переменную, чтобы посчитать количество вызовов map(). Можно ли так сделать?&lt;/h3&gt;

 &lt;h3&gt;75. ArrayList с capacity 20. Я уже вставил 3 элемента. Потом вставляю четвертый элемент посерединке. Будет ли расширение ArrayList?&lt;/h3&gt;

 &lt;h3&gt;76. Создали HashMap. У нее 16 бакетов. Хотим вставить элемент. Посчитали его hashCode(), получили число 1024. Что дальше? Следующий элемент тоже имеет hashCode() 1024? Следующий элемент имеет hashCode() 1025, в какой бакет? Бакеты будут создаваться до бесконечности? Как буду складывать на основе hashCode() в бакеты, если в hashCode() элементов намного больше, чем 16 бакетов?&lt;/h3&gt;

 &lt;h3&gt;77. Есть наш класс, он в jar файле. jar с классом добавлен в classpath в явном виде. Какой жизненный цикл при старте JVM проходит наш класс?&lt;/h3&gt;

 &lt;h3&gt;78. Есть объекты A и B. Из A есть ссылка на B, из B есть ссылка на A. Больше на эти объекты никто не ссылается. Будет ли такая пара собрана GC?&lt;/h3&gt;

 &lt;h3&gt;79. Есть стек вызова потока. Там указана точка возврата, точка входа в метод. Что-нибудь еще на стеке есть в это время?&lt;/h3&gt;

 &lt;h3&gt;80. Есть объект, просто new Object(). У него я вызвал hashCode(). Потом прошла сборка GC, переместила объект между поколениями, по хипу перемещала. И потом я еще раз вызвал hashCode(). Он вернется такой же или изменится?&lt;/h3&gt;

 &lt;h3&gt;81. Если GC переместил объект в памяти, ссылка на объект меняется, но hashCode объекта не должен меняться. Как это происходит?&lt;/h3&gt;

 &lt;h3&gt;82. Пишешь программу. Унаследовался от какого-то класса. И тебе надо получить доступ к приватному полю или приватному методу у родительского класса. Какие варианты есть?&lt;/h3&gt;

 &lt;h3&gt;83. Есть 2 интерфейса, их оба наследует наш класс. У этих интерфейсов есть дефолтные методы с одинаковым названием и сигнатурой. Метод void apply(). Как на экземпляре нашего класса вызвать конкретный метод apply() конкретного интерфейса?&lt;/h3&gt;

 &lt;h3&gt;84. Как трансформировать Set&lt;!-- raw HTML omitted --&gt; mySet в List&lt;!-- raw HTML omitted --&gt; myList = mySet с помощью стримов?&lt;/h3&gt;

 &lt;h3&gt;85. Вы пишете код. У вас есть валидация. Вам нужно создать свое собственное исключение. Какое будете создавать? Проверяемое или нет? Критерии выбора&lt;/h3&gt;

 &lt;h3&gt;86. Есть SQLException - он проверяемый, а HibernateException почему-то не проверяемый. По сути одно и тоже. Почему так сделано&lt;/h3&gt;

 &lt;h3&gt;87. Immutability. We have an Employee object with List of departments inside it. What should we do to make Employee object immutable? The list of departments is set through the construction of the Employee object&lt;/h3&gt;

 &lt;h3&gt;88. We have an Employee object. We want to put it to the TreeSet. How Java knows what is the correct order of Employee objects?&lt;/h3&gt;

 &lt;h3&gt;89. StreamAPI. Есть терминальные операции findFirst() и findAny(). Если у тебя Array, ты сделал Stream. Сначала сделал findFirst(), а потом сделал findAny() - всегда будет возвращать одно и то же? Или разное?&lt;/h3&gt;

 &lt;h3&gt;90. Есть список lst из Integer-ов (1, 2, 3, 4, 5). Я сделал два стрима lst.stream().findFirst() и lst.stream().findAny(). Могу я быть уверенным, что вернет одно и то же? Странно, если рандомно findAny() выводит&lt;/h3&gt;

 &lt;h3&gt;91. Есть время заказа, какой бы тип ты выбрал: LocalDateTime или ZonedDateTime?&lt;/h3&gt;

 &lt;h3&gt;92. В стримах есть метод findFirst(), он находит первый элемент в стриме. А как бы ты реализовал поиск последнего элемента в стриме?&lt;/h3&gt;

 &lt;h3&gt;93. Есть классическое консольное приложение. Мы добавили 1 млн примитивных объектов в это приложение. Мы хотим очень часто (200 раз в сек.) делать операции contains(), чтобы просто получать результат True или False, и выводить на консоль. Нас интересует только скорость работы contains(), чтобы он работал как можно быстрее. Что лучше выбрать в этой ситуации: ArrayList или LinkedList?&lt;/h3&gt;

 &lt;h3&gt;94. Вставили в HashSet 1 млн уникальных объектов, они успешно вставились. Но мы реализовали hash функцию, которая всегда возвращает 1. Какой сложности будет операция contains() в этом случае?&lt;/h3&gt;

 &lt;h3&gt;95. Добавили в TreeSet 1 млн объектов, при условии, что каждый новый добавляемый объект больше предыдущего. Какая будет эффективность contains()?&lt;/h3&gt;

 &lt;h3&gt;96. Ты пишешь свой микросервис. В нем надо реализовать 10 кастомных исключений. У тебя возникает вопрос: сделать их Checked или Unchecked? Как поступишь? Где перехватывать родителя исключений будешь?&lt;/h3&gt;

 &lt;h3&gt;97. Пусть у нас есть два поля: a = 1, b = 2. В методе в одном случае они будут помечены как final, в другом не будут. С ними будут делать какие то математические операции, менять их между собой. Например, a = a * b, b = b ÷ a. Будет ли в чем-то разница, пометим мы их final или нет?&lt;/h3&gt;

 &lt;h3&gt;98. А если тебе из массива случайных чисел нужно убрать повторы, как бы ты делал? Какая будет сложность алгоритма?&lt;/h3&gt;

 &lt;h3&gt;99. Есть объект у которого два поля. Id и List&lt;!-- raw HTML omitted --&gt;. Что сделать, чтобы класс стал иммутабельным?&lt;/h3&gt;

 &lt;h3&gt;100. Представьте, что у нас есть ArrayList, что нужно сделать, чтобы поиск элемента был быстрее чем O(n)&lt;/h3&gt;

 &lt;h3&gt;101. Есть заполненная HashMap. Нужно из ключей этой HashMap сделать HashSet. Что нужно написать в коде для этого?&lt;/h3&gt;

 &lt;h3&gt;102. Сериализация. Нам потребовалось провести Singleton по процессу сериализации и десериализации. С чем можем столкнуться?&lt;/h3&gt;

 &lt;h3&gt;103. Мы добавили какой-то элемент и хотим добавить еще один. У него hash code оказался таким же. Как такая ситуация называется?&lt;/h3&gt;

 &lt;h3&gt;104. У нас есть мапа, в качестве ключа используем собственный класс, в котором hash code константа. Создаю два экземпляра этого класса и использую их как ключи. В один положил единицу, во второй двойку. Теперь я хочу получить по первому ключу значение. Какое получу? Какие плюсы и минусы того, что я сделал?&lt;/h3&gt;

 &lt;h3&gt;105. Я пишу класс, в конструкторе которого выдаю ссылку на этот класс до конца работы конструктора. Когда вызывается конструктор - об этом оповещается какой-то другой класс, допустим, через событие в Rabbit. Чем это действие мне грозит?&lt;/h3&gt;

 &lt;h3&gt;106. У меня есть ArrayList и мне нужно распечатать элементы в обратном порядке. Какие есть варианты?&lt;/h3&gt;

 &lt;h3&gt;107. Пусть в моей коллекции ArrayList 1 млн элементов. Что происходит, когда мы удаляем элемент из середины? А как мне эффективно удалить 10000 элементов в середине в ArrayList быстро?&lt;/h3&gt;

 &lt;h3&gt;108. У меня есть лист Integer, надо найти сумму через Stream API. Как будешь реализовывать?&lt;/h3&gt;

 &lt;h3&gt;109. В TreeMap внутри тоже красно-черное дерево. Чтобы оно построилось, мы должны соблюдать контракт: либо Comparator передать, либо интерфейс Comparable реализовать. Без них контракта нет. Но в HashMap красно-черное дерево строится без них. Как?&lt;/h3&gt;

 &lt;h3&gt;110. Stream API. Есть метод findFirst(). Как бы ты реализовал найти последний элемент в стриме?&lt;/h3&gt;

 &lt;h3&gt;111. Collections. Я хочу использовать свой класс как ключ HashMap. В классе много полей. Хочу, чтобы класс был иммутабельный. Как удобнее сконструировать такой объект, если многие из этих полей опциональные (то есть могут быть NULL), а в конструктор не хочу много NULL класть?&lt;/h3&gt;

 &lt;h3&gt;112. Зачем создавать такой объект, который может по независящим от нас причинам может исчезнуть? Зачем нам нужны раззные типы ссылок? Можно примеры?&lt;/h3&gt;

 &lt;h3&gt;113. У нас есть в программе данные которые хорошо если есть но ничего страшного если они исчезнут. Есть механизм для работы с такими данными. Что это за механиз?&lt;/h3&gt;

 &lt;h3&gt;114. При проектировании системы, вы обычно отделяете в архитектуре ввод и вывод от самой бизнес функуиональности. Загрузка класса, когда вы грузите ввод-вывод может быть из разных источников, а само формирование класса у вас отдельно. Представьте, что есть метод, который берет данные и превращает их в класс. Какие у него могут быть параметры&lt;/h3&gt;

 &lt;h3&gt;115. Есть список POJO классов в которых два поля, ключ и значение. Надо преобразовать в мапу без потери данных. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;116. Как можем напечатать числа от нуля до миллиона не используя циклы? Нельзя чтобы вызвался StackOverFlow&lt;/h3&gt;

 &lt;h3&gt;117. У нас есть список, ссылки которого замкнуты сами на себя. Из вне к этому списку ссылок нет. Отработает ли GC?&lt;/h3&gt;

 &lt;h3&gt;118. Есть ArrayList и LinkedList, в каждом по 1 млн объектов. Тебе нужно добавить элемент по индексу. Индекс в рантайме вычисляется. Почему?&lt;/h3&gt;

 &lt;h3&gt;119. Представим, что у нас есть объект Car. У объекта есть ArrayList деталей. Детали тоже объекты. Какую инкапсуляцию применить в данном случае?&lt;/h3&gt;

 &lt;h3&gt;120. На вход передается массив, а на выход число. Цикл, которых ходит по каждому индексу в массиве и что-то считает. Что нужно сделать, чтобы сложность по памяти была O(n)?&lt;/h3&gt;

 &lt;h3&gt;121. Когда мы делаем new Object что будет в Stack, а что в Heap? А если используем примитив?&lt;/h3&gt;</description></item><item><title>Многопоточность</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/multithreading/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/multithreading/</guid><description>&lt;h1&gt;Многопоточность&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Переменную count хочешь быстро заинкрементировать до 10 тыс. В цикле запустил 10 тыс. потоков, которые инкрементят счетчик. Решил сделать синхронизацию. Какой способ выбрать: synchronized или atomic? Почему?&lt;/h3&gt;

 &lt;h3&gt;2. Как сделать так, если 10 потоков вызывают get() одновременно, ты не создал 10 объектов Singletone?&lt;/h3&gt;

 &lt;h3&gt;3. Может ли быть, что разные потоки всегда видят актуальное значение переменной, хотя она НЕ помечена volatile?&lt;/h3&gt;

 &lt;h3&gt;4. Есть статичный метод, в его сигнатуре пишу synchronized. На чем будет происходить синхронизация?&lt;/h3&gt;

 &lt;h3&gt;5. Есть объект, внутри синхронизированный метод, к которому могут обратиться несколько потоков. Предположите, когда синхронизированный метод не сработает и получим коллизию?&lt;/h3&gt;

 &lt;h3&gt;6. Пишем генерацию отчета. Мне надо сходить в 4 системы по HTTP и получить данные. Хотим ускорить с помощью многопоточки. Как сделать?&lt;/h3&gt;

 &lt;h3&gt;7. Есть 5 разных потоков. Есть метод объекта, который потоки хотят плюс-минус одновременно дернуть, но нужно, чтобы дернул только один. Что делать в первую очередь&lt;/h3&gt;

 &lt;h3&gt;8. На atomic переменной сделали счетчик. Изначально значение переменной 0. Два потока прибавляют 1 одновременно.&lt;/h3&gt;

 &lt;h3&gt;9. Есть несколько потоков, мы хотим, чтобы они все стартанули одновременно. Как это сделать средствами Java?&lt;/h3&gt;

 &lt;h3&gt;10. В коде нужно сделать паузу. Нельзя использовать классические способы Thread sleep, wait. Как нам реализовать паузу?&lt;/h3&gt;

 &lt;h3&gt;11. Нужно сделать систему мониторов, мьютексов, чтобы таски выполнять согласованно. Какой concurrency интерфейс использовать? Методы, классы, интерфейсы, которые предоставляют механизмы блокировок?&lt;/h3&gt;

 &lt;h3&gt;12. Есть счетчик. Запустили 100 потоков. По итогу у нас будет значение 100?&lt;/h3&gt;

 &lt;h3&gt;13. В одном потоке перебирается коллекция, а в другом потоке из коллекции что-то удаляется. Что делать, чтобы не было ошибки?&lt;/h3&gt;

 &lt;h3&gt;14. У хэшмап планируем использовать в качестве некого счетчика для действий пользователя. В качестве ключа у нас пользователь, в качестве значения счетчик. Происходит какое-то событие, мы берем пользователя, добавляем в счетчик плюс один. Таким образом у нас растет событие. Вопрос. Будет ли корректно такая мапа работать в многопоточке?&lt;/h3&gt;

 &lt;h3&gt;15. Если создать 100 потоков программа будет выполняться быстрее? Поток идет в центробанк запрашивает валюту и заносит в таблицу. Миллион значений. Если создать 5 потоков и 100 потоков. Что быстрее выполнится?&lt;/h3&gt;

 &lt;h3&gt;16. Создание потока дорогая операция. Как нам помогает ExecutorService?&lt;/h3&gt;

 &lt;h3&gt;17. У многопоточки есть 3 параметра. atomicity, visibility, happens-before. Что из этого нам обеспечивает переменная volatile&lt;/h3&gt;

 &lt;h3&gt;18. Предположим поток ничего не выделяет из памяти. Вообще не обращается к Хипу. Этот поток может жить без Стека?&lt;/h3&gt;

 &lt;h3&gt;19. Поток который обрабатывает очень большой объекм данных. Поток обращается к данным. Все данные будут закешированы к кеше этого потока?&lt;/h3&gt;

 &lt;h3&gt;20. Когда присваиваете значение в переменную это атомарное действие?&lt;/h3&gt;

 &lt;h3&gt;21. Если два потока хотят синхронизироваться, какой объект они могут использовать в качестве монитора?&lt;/h3&gt;

 &lt;h3&gt;22. Если 10 потоков, которые пришли в synchronize, кто из них первый попадет в Lock&lt;/h3&gt;

 &lt;h3&gt;23. Есть потоки. Вы стартуете на каждую задачу либо сделали threadPool или Executor. У вас ограниченное количество потоков. С точки зрения вычислений это более эффективно или просто удобно?&lt;/h3&gt;

 &lt;h3&gt;24. Как написать асинхронное приложение. Как одновременно запустить две функции и дождаться их выполнения. Например есть getTotalPrice и getBonusRubbles. Надо вычесть их в конце. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;25. В чем отличие несинхронной обработки запроса и неблокирующей реактивной обработки?&lt;/h3&gt;

 &lt;h3&gt;26. Почему в многопоточной среде выполнения из коллекции ArrayList может выброситься ConcurrentModificationException. Как это пофиксить?&lt;/h3&gt;

 &lt;h3&gt;27. Если создали в main новый поток и запустили, какой приоритет будет у потока?&lt;/h3&gt;

 &lt;h3&gt;28. Пишу код, хочу использовать чужой класс. Мой участок кода будет исполняться многопоточно. Как понять, что чужой класс будет нормально работать в многопоточной среде? Чужой класс - это Registry, там обычная HashMap, в которую что-то складываем, потом что-то достаем&lt;/h3&gt;

 &lt;h3&gt;29. Хотим вызвать три метода в параллель, объединить результаты которые они выдадут и вызвать из своего метода? Каждый из методов возвращает Set.&lt;/h3&gt;

 &lt;h3&gt;30. Создаем на Spring Initializer простое Spring Boot приложение, добавив в него всего один компонент Web. И создадим один контроллер, в рамках которого создадим один метод. Это приложение будет однопоточным или многопоточным?&lt;/h3&gt;

 &lt;h3&gt;31. Как считаете, это безопасно с точки зрения потоков, что дефолтный скоуп Singleton, а кругом многопоточка?&lt;/h3&gt;

 &lt;h3&gt;32. Как блокировать поток в многопоточной среде&lt;/h3&gt;

 &lt;h3&gt;33. Хотим вызавать три метода в параллель, объединить результаты и вернуть из своего метода. Как такое реализовать?&lt;/h3&gt;

 &lt;h3&gt;34. Есть класс Thread, в нем есть статический метод sleep(). В Sleep можем передать временное значение. У каждого объекта в Java есть метод wait(). Чем отличаются эти два метода?&lt;/h3&gt;

 &lt;h3&gt;35. Когда выполняли notifyAll и все потоки пробудились, какой поток будет выполняться?&lt;/h3&gt;

 &lt;h3&gt;36. Как проверить, что именно 20 потоков прошло через блок кода?&lt;/h3&gt;

 &lt;h3&gt;37. Есть класс Desk. Есть якобы AI и пользователь работают параллельно, а IndianAI игрок сидит из Индии и по TCP/IP общается с программой. Как бы реализовал многопоточку в этом случае?&lt;/h3&gt;

 &lt;h3&gt;38. Есть метод помеченный synchronized. И есть другой метод в том же классе, в котором критическая секция помечена через Lock объект. Что является монитором в данном случае? Относительно чего синхронизируются?&lt;/h3&gt;

 &lt;h3&gt;39. Если я напишу volatile в многопоточном инкременте обычного int, будет ли корректно считаться инкремент?&lt;/h3&gt;

 &lt;h3&gt;40. Если указали synchronized в сигнатуре метода, то кто будет там монитором?&lt;/h3&gt;

 &lt;h3&gt;41. Запустил CompletableFuture на 10 задач. И запустил Executor на 10 потоков. В чем разница?&lt;/h3&gt;

 &lt;h3&gt;42. Есть сервис. На вход ему посылаем потоки. Один сделан на синхронном потоке, другой на асинхронном. У каждого под капотом пул из 10 потоков. Ядер у процессора 10. Каждый запрос выполняется 3 мин. Кинул первый, второй, &amp;hellip;, десятый запрос, потом одиннадцатый запрос кидаю, а под капотом всего 10 потоков. Что произойдет с одиннадцатым запросом, если первые десять запросов еще не исполнились?&lt;/h3&gt;

 &lt;h3&gt;43. Есть глобально доступный счетчик public static int count = 0. Есть два потока. Каждый поток в цикле из 100 итераций делает инкремент на 1 счетчика count. Потоки запускаются одновременно. Мы дожидаемся их выполнения. Что мы увидим в счетчике count после их отработки?&lt;/h3&gt;

 &lt;h3&gt;44. Есть 1000 клиентов. Нужно каждый час проходить и выполнять какую-то работу. Есть вариант распараллелить?&lt;/h3&gt;

 &lt;h3&gt;45. У Вас есть два потока, которые считывают данные из заказа. Один поток не справлялся и Вы решили подключить второй. Может получиться, что Вы заказ считали, а он в БД не вставляется. Например, товар еще не подгрузился. Надо к этому заказу потом вернуться, а у Вас два потока работают, нужно как-то переставлять смещение, что считали, а что нет. Как бы Вы это решили?&lt;/h3&gt;

 &lt;h3&gt;46. Есть базовый трехзвенный сервис: получить пользователей, в БД все идет. Через RestController идет. Жирный pod на 20 потоков вызывает одни и те же методы, использует одни и те же классы. И в многопоточной среде все отлично работает. Мы не ставим блокировки, не используем многопоточные коллекции. Почему?&lt;/h3&gt;

 &lt;h3&gt;47. Как думаешь, будут ли проблемы с многопоточностью, если мы поменяем скоуп бина? Если поставим Prototype или Web Request?&lt;/h3&gt;

 &lt;h3&gt;48. Часто бывает, что из БД вычитал набор тасков, они обрабатываются долго, надо это сделать параллельно. Как обычно такое решаешь?&lt;/h3&gt;

 &lt;h3&gt;49. Ты пишешь приложение, в котором используется CompletableFuture, которую ты запускаешь и пытаешься прочитать что-то из SecurityContext и как-то обработать. Что будет происходить?&lt;/h3&gt;

 &lt;h3&gt;50. Многопоточка, CompletableFuture. Есть наш метод, он выполняет какую-то логику. Мы можем вносить изменения в его реализацию. Главный нюанс: если в метод закинуть много данных, то для обработки он будет потреблять много ресурсов и очень долго выполняться. Мы хотим начать вызывать его в отдельном потоке. Но с нюансом: если за 5 сек ответ, мы больше не хотим ждать его выполнения и больше не хотим потреблять ресурсы на его выполнение. Что нужно сделать?&lt;/h3&gt;

 &lt;h3&gt;51. Есть 3 потока, каждый что-то делает и мы сделали счетчик количества операций. В каждом потоке мы хотим этот счетчик инкрементировать. Как это сделать потокобезопасно?&lt;/h3&gt;

 &lt;h3&gt;52. Если через семафор: пришел поток, захватил семафор, остальные потоки сидят-курят, в ожидании, когда освободится. То есть в момент инкрементации все потоки стоят, ничего не делают, пока один не сделает. Как бы ты реализовал в таком случае?&lt;/h3&gt;

 &lt;h3&gt;53. У нас есть два потока - A и B. В какой-то момент из потока А в поток В каким-то образом нужно передать информацию, что мы заняли ресурс. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;54. У нас есть два потока, они не завершились и что-то делают. Допустим, первый поток ждет второго. Как из второго потока прокинуть в первый сообщение, чтобы его оживить?&lt;/h3&gt;

 &lt;h3&gt;55. А если мы хотим ограничить метод несколькими потоками? Например, у нас есть крупный метод, который работает с большой локальной мапой. Нужно, чтобы с ним работало максимум три потока, больше нельзя. Как это реализовать?&lt;/h3&gt;

 &lt;h3&gt;56. Соотношение Happens-before. Если мы что-то записали в волатайл переменную, а в другом потоке считали измененное значение, то&amp;hellip;? Что будет?&lt;/h3&gt;

 &lt;h3&gt;57. Когда мы используем ComplitableFuture у нас подается асинхронная задача. Асинхронная задача должна где-то выполняться. Где выполняется асинхронная задача?&lt;/h3&gt;

 &lt;h3&gt;58. Два потока зашли в один метод, при этом в методе не рассчитано, что с ним будут работать параллельно два потока. Что мы получим на выходе?&lt;/h3&gt;

 &lt;h3&gt;59. Из-за synchronized мы лишаемся преимуществ многопоточности: потоки стоят в очереди. Как можно решить эту проблему?&lt;/h3&gt;

 &lt;h3&gt;60. Пусть ExecutorService создал потоки, мы из пула взяли поток, он выполнил свою задачу. Что с ним дальше происходит?&lt;/h3&gt;

 &lt;h3&gt;61. Мы хотим написать самопальный кеш. Не использую готовые решения. Что будем использовать?&lt;/h3&gt;

 &lt;h3&gt;62. Взяли кеш и выяснили, что общий кеш нам не нужен. Нам нужен для каждого нового вызова сервиса нам нужно создавать кеш. Что будем делать? У нас есть вызов сервиса. 16 потоков, мы 16 раз вызвали сервис. Для каждого единичного вызова сервиса, нужно сделать так, чтобы создавался новый кеш&lt;/h3&gt;

 &lt;h3&gt;63. Есть сервис отправки пушей для клиентов в телефон. Пуши отправляете пакетами по 200 номеров. Хотите чтобы пакеты отправлялись параллельно. Как бы вы это сделали через Compatible Future?&lt;/h3&gt;

 &lt;h3&gt;64. Как обрабатывать ошибки в Compatible Future? У вас какие то элементы отправились, а какие то ошбику сделали. N потоков отправки. Какие то успешно, какие то нет. Надо разобраться, какие в этих потоках сообщения отправились, а какие нет. Те которые не отправились, отправить повторно&lt;/h3&gt;

 &lt;h3&gt;65. Есть main. В нем мы создаем новый поток, в котором просто в цикле со слипом выводим лог. Есть дочерний поток. Если main процесс завершится, закроется ли дочерний поток?&lt;/h3&gt;

 &lt;h3&gt;66. Есть файл, в нем хранятся key-value. Этот словарь в файле неизменен, мы его включили в сборку. Нам нужно этот словарь отдавать потребителям. Как это лучше имплементировать? Чтобы поддерживать многопоточное чтение. Надо отдавать записи по ключу из него. В каких структурах бы хранил? Сделал бы блокировки?&lt;/h3&gt;

 &lt;h3&gt;67. Есть HashMap, объявил ее volatile. Я делаю put в нее. Потом следующий поток. Это будет атомарное изменение? Поможет ли volatile в данном случае?&lt;/h3&gt;

 &lt;h3&gt;68. Есть мой кастомный поток, connection. Что нужно сделать, чтобы поместить его в try-with-resources?&lt;/h3&gt;

 &lt;h3&gt;69. Есть проблема в том, что параллельный стрим берет потоки из пула, которым пользуется весь application?&lt;/h3&gt;

 &lt;h3&gt;70. Что случится если параллельный стрим возьмет все потоки из пула?&lt;/h3&gt;

 &lt;h3&gt;71. Работаю на одноядерном процессоре. Создавать больше одного потока не имеет смысла? Можно ли создать больше одного потока?&lt;/h3&gt;

 &lt;h3&gt;72. У нас большая система. В процессе работы запустился поток и в нем произошел exception. Где мы увидем его? В логах или не увидем? В методе run, try и catch нету.&lt;/h3&gt;

 &lt;h3&gt;73. У меня идет процесс и мне нужно получить сигнал от другого потока в течении определенного времени. Какой класс использовать или механизм?&lt;/h3&gt;

 &lt;h3&gt;74. Есть функция вычисляющая новое значение на основе предыдущего. Выполнение функции требует больших ресурсов. Вызывается из многопоточного окружения. Что лучше использовать атомарные типы или блоки синхронизации?&lt;/h3&gt;</description></item><item><title>SQL, базы данных, индексы, ORM и миграции</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/sql-databases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/sql-databases/</guid><description>&lt;h1&gt;SQL, базы данных, индексы, ORM и миграции&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. На счету пользователя 1000 р. Первая транзакция: читает 1000 на счету, пытается снять 1000. Вторая транзакция тоже читает 1000, хочет снять еще 500 р. По результату уходим в минус. Как обойти ситуацию? -Если хотим решить ситуацию, но оставить уровень транзакции READ COMMITED?&lt;/h3&gt;

 &lt;h3&gt;2. На уровне Repeatable Read или Serializable транзакция начинает обновлять запись, но сама транзакция еще не завершается. Могут ли две транзакции друг друга заблокировать? Как называется, как с ней быть? - deadlock&lt;/h3&gt;

 &lt;h3&gt;3. По бизнес-логике нужно часто делать запросы по точному совпадению фамилии доставать пользователей. Ты хочешь повесить индекс на это поле для повышения перформанса. Какой тип индекса лучше подойдет? - А хеш-индекс подойдет? - Если поле не фамилия, а номер счета, но не primary key? - Если поле updated_at timestamp, хочу посмотреть все данные, которые были обновлены за последний час, либо за вчерашний день, какой индекс лучше подойдет? - BTree, потому что отсортированное дерево&lt;/h3&gt;

 &lt;h3&gt;4. Как резделять данные по шардам, если есть 4 инстанса, мы берем данные из uuid. А потом захотим добавить 5 инстанс, придется переложить заново? - Альтернатива координатору для распределения по шардам (если координатор упадет, потеряем данные ко всему)&lt;/h3&gt;

 &lt;h3&gt;5. Liquibase. Как действовать если не знаем, какая БД в проде. Боимся, что что-то произойдет при накатке. Хотим сделать себе возможность откатить изменения&lt;/h3&gt;

 &lt;h3&gt;6. Есть таблица, 2 поля: айди и количество лайков. Как бы ты сделал увеличение счетчиков лайков на 1?&lt;/h3&gt;

 &lt;h3&gt;7. Какой-то запрос читает данные, в это время другой изменяет данные в бд. Какие данные к нам прийдут?&lt;/h3&gt;

 &lt;h3&gt;8. Создали индекс на поле, делаем запрос на это поле, а индексы не сработали. Такое возможно?&lt;/h3&gt;

 &lt;h3&gt;9. Запрос медленно работает Что делать?&lt;/h3&gt;

 &lt;h3&gt;10. Есть атрибут state, на нем есть индекс. Подхватится ли индекс при запросе с проверкой state на Null?&lt;/h3&gt;

 &lt;h3&gt;11. Из таблицы удаляем автора. К автору прицеплено 10 книг. К кому будут прицеплены эти книги? Что будет с id автора?&lt;/h3&gt;

 &lt;h3&gt;12. Почему нельзя сделать две БД на запись и на чтение?&lt;/h3&gt;

 &lt;h3&gt;13. Как из запроса с группировкой выбрать одну группу? Например, чтобы сумма была больше чего-то?&lt;/h3&gt;

 &lt;h3&gt;14. Большая таблица на миллион записей. Обеспечить быстрый доступ к данным. В таблицу много пишем. Как совместить?&lt;/h3&gt;

 &lt;h3&gt;15. Как удалять быстро и много данных из БД? Удаление по дням. Как можно реализовать?&lt;/h3&gt;

 &lt;h3&gt;16. Как ограничить размер выборки? Запрос должен вытащить n записей. Как реализовать?&lt;/h3&gt;

 &lt;h3&gt;17. Есть таблица с данными. 10 полей. Есть выбор сделать 10 индексов по одному полю или один индекс по десяти. Как лучше?&lt;/h3&gt;

 &lt;h3&gt;18. Представь, что у нас много компаний сидят на одной БД и у нас в каждой таблице есть колонка с кодом компании. Любой WHERE начинается с наименования компании. Означает ли это что нужно повесить индекс на колонку с компаниями?&lt;/h3&gt;

 &lt;h3&gt;19. Есть два апдейта. Есть пользователь и баланс на счете. Первый апдейт снимает с него 50 рублей. Второй апдейт снимает 50 рублей. Они выполняются одновременно или последовательно? Есть ли какие то механизмы управления?&lt;/h3&gt;

 &lt;h3&gt;20. У нас есть очень длинная транзакция с большим количеством селектов. В конце один апдейт. Что сделать чтобы заблокировать данные на этапе когда я их селекчу.&lt;/h3&gt;

 &lt;h3&gt;21. Что будет если мы делаем селект в одну таблицу, но у таблицы есть много ссылок на другие таблицы. Один ко многим. Что делать, чтобы объединить таблицы и был только одни запрос&lt;/h3&gt;

 &lt;h3&gt;22. Представь, что ты проектируешь таблицу. Как ты в самом начале накидываешь индексы?&lt;/h3&gt;

 &lt;h3&gt;23. Уровень изоляции Repeatable read. Две транзакции работают. Будет Lock на чтение, на запись или на то и на другое?&lt;/h3&gt;

 &lt;h3&gt;24. Твой запрос перестал работать через некоторое время. Твои действия?&lt;/h3&gt;

 &lt;h3&gt;25. Есть таблица с данными. Кредитные заявки. Есть некий кредитный статус. 3 штуки. New, in progres, close. Нам нужно написать миграцию, которая будет доставать заявку по статусу и их мигрировать. Миграция подразумевает изменение статусов. Какие проблемы могут появиться и как их решать? Рассматриваем один поток. Данных очень много и нельзя все вытаскивать скопом.&lt;/h3&gt;

 &lt;h3&gt;26. Таблица пользователей и таблица машин. Связь один-ко-многим. Где здесь N+1 запрос?&lt;/h3&gt;

 &lt;h3&gt;27. Две простые сущности: сотрудник и телефон. О сотруднике данных мало: ФИО одной строкой. О телефоне данных мало: номер одной строкой. Сотрудник имеет много номеров, один номер принадлежит только одному сотруднику. Как организовать в БД?&lt;/h3&gt;

 &lt;h3&gt;28. Есть сущность и связанная к ней сущность. Нужно вытащить список родительских сущностей. Что произойдет в рамках запроса, если ленивая загрузка включена? Как называется эта проблема?&lt;/h3&gt;

 &lt;h3&gt;29. В БД есть справочные таблицы, которые никогда не меняются. Есть Spring MVC приложение. Нужно много ходить в эти таблицы, много запросов к БД. Как разрулить ситуацию со стороны Hibernate?&lt;/h3&gt;

 &lt;h3&gt;30. Запускаем поток 1. В этом потоке сделаю 5 раз выборку из базу по одному и тому же id. Если включить запросы в БД, что мы увидим?&lt;/h3&gt;

 &lt;h3&gt;31. Если написать дефортный OneToMany? Выберу из базы и закрою транзакцию и попробую сериализовать. Что будет?&lt;/h3&gt;

 &lt;h3&gt;32. Есть транзакция, которая состоит из 10 различных комманд. Предположим, что все вычислили правильно, уровень изоляции постален верно. Концепция ACID гарантирует на 100% что проблем не возникнет?&lt;/h3&gt;

 &lt;h3&gt;33. Когда делаем JOIN указываем по каким параметрам связываем таблицы. Чаще всего используем оператор ON. Какие еще операторы можно использовать?&lt;/h3&gt;

 &lt;h3&gt;34. Нужно делать поиск по большому количеству колонок. Не хочу делать индексы. Что можно придумать?&lt;/h3&gt;

 &lt;h3&gt;35. Есть формочка поиска в интернет магазине и надо строить динамический sql запросы в зависимости от параметров с формы. Как мы можем по запросу формировать динамические sql запросы?&lt;/h3&gt;

 &lt;h3&gt;36. Берем постгре консоль, где можно выполнять запросы. Нужно вывести первую страницу, которая содержит пять элементов. Как должен выглять запрос?&lt;/h3&gt;

 &lt;h3&gt;37. Находимся на первой страничке интернет магазина. Вывелось пять элементов. Переходим на вторую страницу, но в момент перехода добавляется еще пять элементов. Получается, что при переходе с первой страницы на вторую мы увидем информацию с первой страницы. Как решить?&lt;/h3&gt;

 &lt;h3&gt;38. Приложение супер оптимизировано, но мы уперлись в производительность в БД. Как это можно решить?&lt;/h3&gt;

 &lt;h3&gt;39. Есть индекс по нескольким полям X, Y, Z. Уcловия Y1, Z2. X - не указан. Будет ли профилировщик использовать этот индекс?&lt;/h3&gt;

 &lt;h3&gt;40. Создали Entity, неправильно переопределили hashCode(), он всегда возвращает рандомное число. Чем это опасно?&lt;/h3&gt;

 &lt;h3&gt;41. Есть две сущности. Связь One to Many. В первой сущности есть поле список второй сущности. Достаем из БД первую сущность и удаляем ее. Что будет с вложенным списком второй сущности&lt;/h3&gt;

 &lt;h3&gt;42. Почему OneToMany Lazy, а ManyToOne Eager&lt;/h3&gt;

 &lt;h3&gt;43. В БД много записей. Как настроишь отображение большого количества данных между бэком и фронтом?&lt;/h3&gt;

 &lt;h3&gt;44. Описываешь структуру сотрудника предприятия. У сотрудника есть начальник и подчиненные. Как реализовать такую структуру?&lt;/h3&gt;

 &lt;h3&gt;45. Делаешь рабочий проект. Как понять тебе нужна ORM или JDBC?&lt;/h3&gt;

 &lt;h3&gt;46. Как с помощью LEFT и RIGHT JOIN получить выборку аналогичную FULL JOIN&lt;/h3&gt;

 &lt;h3&gt;47. Можно в проде создать новое поле на работающей базе?&lt;/h3&gt;

 &lt;h3&gt;48. Как в SQL посчитать уникальные значения по нескольким полям? Без использования DISTINCT, потому что поле высчитывается, например&lt;/h3&gt;

 &lt;h3&gt;49. Где отследить миграцию, которую сделали с помощью liquibase для Postgres? Как в liquibase настраивается лог миграции?&lt;/h3&gt;

 &lt;h3&gt;50. Есть таблица. После каких значений id выборка может подтормаживать? (к примеру если 10 Id то норм, а весли десять миллионов то начинает лагать)&lt;/h3&gt;

 &lt;h3&gt;51. Микросервисная среда, много микросервисов работают. Мы обращаемся к одному сервису, а он тормозит. Год назад он отвечал за 2 сек, а сейчас за 20 сек. Какие варианты есть, чтобы понять, что происходит?&lt;/h3&gt;

 &lt;h3&gt;52. Интернет магазин и клиент ищет товар. Все характиристики товаров разложены по разным таблицам. Клиент выбирает один или два параметра. Как ты будешь формировать запрос?&lt;/h3&gt;

 &lt;h3&gt;53. Нужно хранить в БД сущности определенное количество времени, по месяцу. Как бы реализовал эту логику?&lt;/h3&gt;

 &lt;h3&gt;54. На бэке есть таблица с пользователями, где много полей (фио, телефон, тд). На фронте эта таблица выводится списком. У пользователя есть фильтр по всем полям пользователя. В запросе на бэк все фильтры передаются в объекте вместе с запросом. На бэке нужно посмотреть на выбранные фильтры и сделать SQL запрос. Динамическая фильтрация. Как сделать в рамках Spring?&lt;/h3&gt;

 &lt;h3&gt;55. Есть метод getUsers(), он возвращает все, что есть в таблице. Бизнес просит добавить пагинацию и фильтрацию по 100 колонкам. Фильтрация по каждой колонке может быть, а может не быть. Как решить задачу в Java?&lt;/h3&gt;

 &lt;h3&gt;56. Hibernate. Есть таблицы users, roles. В сущности user прописана коллекция roles ManyToMany, мы проставили @Lazy. Пришла задача сделать эндпоинт, где смогу вытащить user-а со всеми его roles. Менять @Lazy на @Eager мы не можем. Что делать?&lt;/h3&gt;

 &lt;h3&gt;57. DB. Table: employee(id, name, email). Column email is unique. But we only have SELECT query: SELECT * FROM employee WHERE id = ? Should we put index on email column? If we put index on column email, would we change smth for this query?&lt;/h3&gt;

 &lt;h3&gt;58. Хочу посчитать среднее значение по таблицам, но не хочу выводить среднее значение меньше 10. Как это будет выглядить в запросе?&lt;/h3&gt;

 &lt;h3&gt;59. Что используешь, если нужно в колонке установить значение 1, если было 5, установить значение 2, если было 10, иначе оставить прежнее?&lt;/h3&gt;

 &lt;h3&gt;60. Есть БД с крупными записями. Мы хотим читать эти записи и работать с большим объемом этих записей. Иногда падаем при чтении этих записей. Как решить с помощью Hibernate, Spring Data JPA? Какие подходы использовать?&lt;/h3&gt;

 &lt;h3&gt;61. БД, большой объем. Есть таблица весом 1 Тб. В момент обращения к таблице на диске происходят проблемы со стороны БД. Что делать, чтобы снизить нагрузку на таблицу? В таблице жирные записи. К таблице очень часто обращаются. В момент фильтраций, сортировки таблица на диске отжирает очень большое пространство&lt;/h3&gt;

 &lt;h3&gt;62. Первая транзакция стала менять строку, вторая транзакция встала в блокировку, так как ждет первую. Первая меняет условия для второй транзакции. Первая транзакция коммитется. Вторая транзакция выполнится?&lt;/h3&gt;

 &lt;h3&gt;63. Когда вылетает исключение, что не может удалить из БД какое то значение. Из-за чего такое бывает?&lt;/h3&gt;

 &lt;h3&gt;64. У нас есть B-Tree индекс по varchar столбцу. Мы делаем запрос &amp;ldquo;LIKE ? небольшой кусок текста ?&amp;rdquo;. Индекс будет работать? Какие есть варианты чтобы использовался индекс?&lt;/h3&gt;

 &lt;h3&gt;65. У нас оптимистическая блокировка, мы вытащили запись. У нее есть какая-то версия. Мы в моменте, когда нам нужно обновить эту запись в БД. Как сделать так, чтобы наш апдейт случился только тогда, когда версии совпадают? Если нет, то выкинуть ошибку.&lt;/h3&gt;

 &lt;h3&gt;66. В соцсети, которую пишем люди часто ищут пользователей по возрасту. WHERE age &amp;gt; 30 AND age &amp;lt; 40. В Postgres можем посмотреть служебную таблицу с данными о медленных запросах slow queries. И там много запросов с таким фильтром. Как побороть эту проблему?&lt;/h3&gt;

 &lt;h3&gt;67. Есть таблица, в ней есть столбцы. В какой-то момент в одном из столбцов потребовалось изменить тип данных. Предположим, что вместо целочисленного нужен строковый. Как будешь реализовывать?&lt;/h3&gt;

 &lt;h3&gt;68. У тебя есть селективная ручка, вы провели анализ и поняли, что проблема с перформансом. Как бы ты решал эту проблему? Мы пошли копать, денормализовали базу. Посмотрели в EXPLAIN ANALYZE, видим, что индексы есть, но мы туда не идем. Может ли такое быть? Дальше пошли копать. Индексы есть, система разрослась. Проблемы с перформансом есть. Что еще можем сделать?&lt;/h3&gt;

 &lt;h3&gt;69. По-умолчанию используется B-Tree дерево, в котором скорость поиска логарифмическое. А мы в начале собеса говорили, что есть структуры данных, где константный поиск. Почему HashMap не используют по-умолчанию?&lt;/h3&gt;

 &lt;h3&gt;70. Нужны специфичные операции: проверить, что у jsonb на верхнем уровне существует определенный ключ. Какой индекс использовать?&lt;/h3&gt;

 &lt;h3&gt;71. Таблица заказов. Три столбца: id заказа, статус заказа boolean и описание заказа. Хотим вытащить все незавершенные заказы. На какие столбцы будем вешать составной индекс?&lt;/h3&gt;

 &lt;h3&gt;72. Важно, в каком порядке указывать столбцы в составном индексе? Что меняется, если порядок столбцов меняется?&lt;/h3&gt;

 &lt;h3&gt;73. Если я создал составной индекс на колонки a и b, потом в запросе ссылаюсь только на b столбец в WHERE, будет ли использоваться составной индекс?&lt;/h3&gt;

 &lt;h3&gt;74. В JPA-репозитории есть какая-то сущность. У него есть id. На уровне БД это Primary Key. Мы пытаемся сохранить другую сущность с идентичным id. С помощью JPA-репозитория делаем save(). Что произойдет? Будет ли исключение?&lt;/h3&gt;

 &lt;h3&gt;75. Пишу класс JPA, который описывает Entity. В классе есть id. Достаточно ли брать hashcode() только от id? Или лучше использовать все поля?&lt;/h3&gt;

 &lt;h3&gt;76. В БД есть таблица с людьми. И нам нужно зачитать всех людей, которые родились после определенной даты. Какую технологию бы выбрали и как реализовали бы в коде?&lt;/h3&gt;

 &lt;h3&gt;77. Нужно спроектировать БД, где много операций вставки и изменения, мало операций чтения. Что удобнее использовать: нормализованные или денормализованные таблицы? Почему?&lt;/h3&gt;

 &lt;h3&gt;78. БД где есть сотрудники и история операций (действий) сотрудников. Как выглядит денормализованная и нормализованная форма такой БД? Сколько таблиц? Если денормализованная БД, как много действий одного сотрудника записать? Если нужно поменять историю действий сотрудника? Для чего делается денормализация? В случае денормализации нам нужно, чтобы у каждого сотрудника была только одна строка, вместе с историей. Как сделать? Нужна выжимка всех действий сотрудника в одну строчку&lt;/h3&gt;

 &lt;h3&gt;79. Есть таблица банковской БД. Две колонки: номер счета, значение на счету (сколько денег). Множество клиентов пытаются проводить много операций: кладут деньги на счет, снимают деньги со счета. Какие проблемы в БД могут быть? Почему? Какой уровень изоляции транзакций вы бы применили?&lt;/h3&gt;

 &lt;h3&gt;80. Есть маленькая таблица на 10 записей, у нее есть индекс. Будет ли анализатор использовать индекс? Почему? На основании чего анализатор посчитает, что Full Scan быстрее, чем Index Scan?&lt;/h3&gt;

 &lt;h3&gt;81. В Postgres была таблица на 1000 записей. Я удалил 1000 записей. У меня места на диске стало больше или меньше?&lt;/h3&gt;

 &lt;h3&gt;82. Объект находится в Persistence Context. Ты вытащил его с помощью findById(). И ты поменял что-то в объекте. В какой момент изменения будут сливаться в БД? Если знаешь, расскажи архитектуру Hibernate более детально&lt;/h3&gt;

 &lt;h3&gt;83. Используем JPA репозитории. Ты вытаскиваешь из одного репозитория, объект из БД с помощью findById() и делаешь в объекте изменения. Следующей командой с помощью findById() достаешь вторую сущность из второго репозитория. Что будет происходить с первой сущностью, которую ты уже изменил? Пример: есть два репозитория: repo1, repo2. Сначала entity1 = repo1.findById(id1); entity1.setMyValue(n); Потом entity2 = repo2.findById(id2); Какие запросы к БД будут сгенерированы под капотом?&lt;/h3&gt;

 &lt;h3&gt;84. Many-to-many связь. Есть сущность книга, есть сущность автор. Между ними связь many-to-many. Книга содержит коллекцию авторов, а автор содержит коллекцию книг. Какие типы Collections использовать? Что делать с equals() и hashCode(), если ты реализуешь эту ситуацию и используешь Set для коллекций авторов, коллекций книг? И здесь же ситуация с LazyInitializationException&lt;/h3&gt;

 &lt;h3&gt;85. Postgres. Есть система, которая занимается обработкой чего-то. Есть табличка, в ней ОЧЕНЬ много записей. У каждой записи есть статус. Модель изменения статуса линейная: &amp;ldquo;новая&amp;rdquo;, &amp;ldquo;в обработке&amp;rdquo;, &amp;ldquo;завершено&amp;rdquo;. Как оптимально быстро получить список еще незавершенных задач (которые не в статусе &amp;ldquo;завершено&amp;rdquo;)? Какие здесь есть проблемы? Как их решить? Как будешь реализовывать атомарность изменений при дублировании?&lt;/h3&gt;

 &lt;h3&gt;86. Есть сущность status. В Java это enum. Какой тип задашь полю status в таблице БД при проектировании? Почему?&lt;/h3&gt;

 &lt;h3&gt;87. На проде таблица с 1 Тб данных логов. Надо удалить все данные в этой таблице. Как сделаешь?&lt;/h3&gt;

 &lt;h3&gt;88. Нужно удалить из таблицы все данные, которые старше 3 мес. И теперь каждый месяц нужно удалять данные, которые старше 3 мес. Как?&lt;/h3&gt;

 &lt;h3&gt;89. В Hibernate в параметрах стоит lazy. Я делаю обращение к коллекции, идет еще один запрос в БД. Почему я словлю ошибку?&lt;/h3&gt;

 &lt;h3&gt;90. JPA или Hibernate. Есть сущность Заказы. У нее есть связь 1-to-many Товары для Заказа. Я хочу сделать эндпоинт, который достает большой список с Заказами и показывает их сразу с Товарами. Я делаю репозиторий и делаю findAll() по Заказам. Все ли хорошо? Какая проблема есть? Что поправить?&lt;/h3&gt;

 &lt;h3&gt;91. JPA, Hiber. Есть Заказы и я хочу по-всякому их фильтровать. На фронте есть фильтры: по имени, по заказчику, по сумме. Должен быть 1 эндпоинт. Как решить?&lt;/h3&gt;

 &lt;h3&gt;92. Как заставить Hibernate проделать оптимистическую блокировку?&lt;/h3&gt;

 &lt;h3&gt;93. БД, параллельный доступ к данным. Есть таблица, в ней строка, в которой поле isExecuted. Мы должны вычитать таски и написать лог. У нас есть 10 pod-ов, которые смотрят на эту таблицу по шедуллеру и каждые 10 сек делают SELECT. От коллеги разраба ты видишь pull request нативного запроса: SELECT * FROM table WHERE isExecuted=0. Что об этом думаешь? Какие проблемы могут быть? Если используешь ShedLock, создается прокси-таблица. И мы понимаем, что задач дофига. На проме должно работать за 1 сек большая пачка запросов. Очень интенсивная параллельная работа с таблицей. И с ShedLock теряем горизонтальную масштабируемость, завязаны на узкое горлышко в 1 pod. Что еще предложишь для масштабирования?&lt;/h3&gt;

 &lt;h3&gt;94. На UI есть таблица с пагинацией, сортировкой, фильтрацией. Мы реализовали всю логику. Это очень большой объем данных, идет на миллионы строк. Отображаем по 20 строк. Генерируется запрос SELECT &amp;hellip; FROM &amp;hellip; WHERE &amp;hellip; LIMIT 20 OFFSET &amp;hellip; Какие проблемы видишь в LIMIT, OFFSET конструкции? Spring нам сгенерировал, вроде работает норм. Если OFFSET 100000 LIMIT 10 ? Что будет сделано 100000 раз?Мы говорим базе: иди на 100000 строчку и возьми 10 значений. Как БД перемещается на строчку 100000? На чем индекс построен здесь? Как мы можем проиндексировать номера строк?&lt;/h3&gt;

 &lt;h3&gt;95. Как Postgres работает с данными в таблице: если мы UPDATE поле, то Postgres прямо идет в таблицу и меняет поле? Или что-то хитрее происходит?&lt;/h3&gt;

 &lt;h3&gt;96. Если чтений одной и той же записи на порядки больше, чем вставок, и БД говорит, что слишком много чтений, не вывозит, какие варианты разгрузить БД есть?&lt;/h3&gt;

 &lt;h3&gt;97. Есть таблица всего с одной ячейкой, в которой записано значение 1. Есть транзакция, в которой сначала Read, потом Update +1 значение в таблице, и Commit транзакции. Приложение многопоточное. Вторая транзакция начинается по времени где-то между Read и Update первой транзакции. Вторая транзакция делает Read где-то после Update и Commit первой транзакции. Вторая транзакция делает Update+1, после Commit первой транзакции (см рисунок в видео). Когда закоммитится вторая транзакция, какое число получится в ячейке таблицы в конце?&lt;/h3&gt;

 &lt;h3&gt;98. Есть таблица, есть поле. Две транзакции. Уровень Repeatable read. Одна транзакция запросила, другая поменяла, в рамках первой транзакции запросили снова и получили тоже самое - не поменянное.&lt;/h3&gt;

 &lt;h3&gt;99. Уровень Repeatable read. Есть поле и две транзакции. Транзакции одновременно стартанули. В рамках одной транзакции добавляется +10. Одна транзакция завершилась раньше, другая позже. Какое будет итоговое значение?&lt;/h3&gt;

 &lt;h3&gt;100. У нас может индекс создаваться по несколькими полям, если я сделаю индекс по полям &amp;ldquo;а&amp;rdquo; и &amp;ldquo;b&amp;rdquo; BTREE индекс и сделаю запрос по полю &amp;ldquo;а&amp;rdquo;, отработает индекс или нет?&lt;/h3&gt;

 &lt;h3&gt;101. Liquibase. You created a changeset? It can be executed from dev stage. But then you find a typo in a column name. How would you fix it?&lt;/h3&gt;

 &lt;h3&gt;102. Я вызываю список, в нем настроено 1-to-many, есть проблемы с вытягиванием этих Entit-ей. Какие проблемы? Как их можно решать?&lt;/h3&gt;

 &lt;h3&gt;103. Таблицы users и addresses. Сделал FETCH JOIN, и тогда user-ы размножатся на количество address-ов у этого user-а. Как FETCH JOIN происходит? FETCH JOIN потом соединяет user-ов c addres-ами. А если у меня много 1-to-many? Кроме связи user с address, есть еще связь user с заказом. И я напишу два FETCH JOIN, есть ли в этом подводные камни?&lt;/h3&gt;

 &lt;h3&gt;104. Postgres заблокирует строчки двух таблиц (Person и City). Есть идеи, как указать Postgres, что нужно заблокировать только строчку в Person таблице?&lt;/h3&gt;

 &lt;h3&gt;105. У меня сущность, которая имеет два атрибута, и оба они списки. Может ли Entity Graph сразу две коллекции загрузить?&lt;/h3&gt;

 &lt;h3&gt;106. SQL, пагинация. Как написать такой один SQL запрос для пагинации, чтобы общее количество записей тоже вернулось? SELECT * FROM table &amp;hellip; LIMIT OFFSET. А что еще туда добавить?&lt;/h3&gt;

 &lt;h3&gt;107. У тебя есть сервис, который что-то выгружает за сутки из таблицы. Представь, что таблица разрослась до десятков миллионов записей. Твой запрос стал работать медленно. Что можно сделать для решения этой проблемы?&lt;/h3&gt;

 &lt;h3&gt;108. Представьте, что в момент времени прилетает два апдейта последовательно. У одного апдейта, при балансе в 100р идет вычет 60р, а у второго 90р. Что на уровне БД можно сделать?&lt;/h3&gt;

 &lt;h3&gt;109. У тебя есть приложение, которое делает insert в базу, при это ты должен выстроить insert&amp;rsquo;ы таким образом, чтобы один insert шел за другим. Как это можно выстроить?&lt;/h3&gt;

 &lt;h3&gt;110. В банках часто используется таблица курсов валют. Валюты могут сыпаться из разных мест. Евро из Мосбиржы, доллар из центробанка. Источников может быть много. Нам нужно на каждый запрос получать последний курс валют. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;111. Допустим у нас есть большая жирная таблица. В таблице очень много данных. Это аналитическая таблица, значит в нее данные постоянно дописываются, а чтение происходит редко. Представь что приходит DBA и говорит, что на жестком диске заканчивается место. Удалите что нибудь. Что нужно делать? Сходили к бизнесу и узнали, что его интересуют данные за последние 30 дней, а все что старше нас не интересуются. Что будешь делать?&lt;/h3&gt;

 &lt;h3&gt;112. Сделали свое приложение. Бизнес доволен, клиенты покупают в нашем магазине вещи. В какой то момент к нам приходит бизнес и говорит, что хочет увидеть какое количество раз пользователи заходят в корзину. Снять метрики. На фронте мы не можем такое делать. На беке было бы классно поставить Прометей или Графану и визуализировать, но у нас нет денег на это. Пришли к тому, что можем считать статистику и хранить ее в базе. Приняли решение значение счетчика складывать в отдельную таблицу в которой есть отдельная колонка в которой есть значение счетчика. Учитывая, что у нас микросервисная архитектура. Каким образом ты будешь решать эту задачу, чтобы не потерять значение счетчика. Счетчик должен отображать ровно то значение, сколько раз пользователь заходил в корзину.&lt;/h3&gt;

 &lt;h3&gt;113. Допустим у нас уровень изоляции repeatable read. Есть две транзации которые вычитывают данные. Вторая транзакция уже поменяла данные, первая еще не закончила. Что будет?&lt;/h3&gt;

 &lt;h3&gt;114. Если я в каждом классе и слое начиная от Контроллера буду писать аннотацию Transactional сколько транзакций будет?&lt;/h3&gt;

 &lt;h3&gt;115. Вытащил сущность из БД. Поработал с ней, поменял ее. Транзакция открыта. Как мне сохранить сущность?&lt;/h3&gt;

 &lt;h3&gt;116. Как можно удалить все данные из таблицы?&lt;/h3&gt;

 &lt;h3&gt;117. Чем отличается в SQL COUNT(*) и COUNT(column)? Что лучше использовать?&lt;/h3&gt;

 &lt;h3&gt;118. Вы используете Hibernate, у Вас две таблицы. Одна ссылается на другую. Что Вы делали с точки зрения Hibernate и с точки зрения БД?&lt;/h3&gt;

 &lt;h3&gt;119. У вас две таблицы в БД - две сущности в Hibernate. Есть внешний ключ. С точки зрения Hibernate его нет, а в БД вы его делали?&lt;/h3&gt;

 &lt;h3&gt;120. Hibernate, EntityGraph. Есть бизнес модель: есть книжка. У книжки есть жанры и авторы. Связи many-to-many. У книжки может быть много жанров и много авторов. У жанра много книг. У автора много книг. Я делаю EntityGraph и прошу, чтобы загрузили все книжки с авторами и жанрами. К чему это приведет?&lt;/h3&gt;

 &lt;h3&gt;121. У нас книжный магаз. Есть книги и их цены. Мы три раза меняли цены у книг. Сколько записей будет в БД?&lt;/h3&gt;

 &lt;h3&gt;122. Хотим реализовать паттерн Transactional Outbox. Есть табличка событий, которые хотим отправить куда-то (в Kafka, например). В таблице есть столбик, где написано, отправили, или не отправили уже событие. Почти все события отправлены, имеют True в столбике. Каждый раз мы хотим доставать те, которые не отправились еще. Как быстро доставать такие записи? Как создать индекс удачно?&lt;/h3&gt;

 &lt;h3&gt;123. Индексы по нескольким полям. Есть поля x, y, z. Они используются в нашем составном индексе. Есть запрос с WHERE y = 1, z = 2. Будет ли планировщик использовать наш индекс?&lt;/h3&gt;

 &lt;h3&gt;124. Есть 1 млрд записей. На колонку гендер (только 2 пола) нужно ли вешать индекс? В плане скорости&lt;/h3&gt;

 &lt;h3&gt;125. Решили разбить на партиции таблицу, как будет организовано дерево индекса? Что значит разделение таблицы на партиции?&lt;/h3&gt;

 &lt;h3&gt;126. Консистентность БД. Есть больница, в ней есть доктора. В одну смену должно быть минимум 1 доктор. Сейчас в какой-то смене находятся 2 доктора, оба хотят взять отгул, друг о друге не знают. Оба одновременно запрашивают в системе: сколько докторов в смене. Одновременно каждый увидел, что 2 доктора в этой смене. Каждый из них нажал кнопку: Взять отгул. Получается так, что ни одного доктора на смене не останется, хотя в системе есть проверка на минимум 1 доктора.&lt;/h3&gt;

 &lt;h3&gt;127. У нас дана таблица city. К базе у нас подключаются два пользователя. Пользователи заметили ошибку в коде города. Две параллельные транзакции. Первый пользователь выполняет UPDATE. Второй пользователь в этот момент выполняет SELECT. Что будет в результате выполнения запросов?&lt;/h3&gt;

 &lt;h3&gt;128. У нас две таблицы и все строки совпали. В левой таблице пять записей, в правой пять записей. Сколько у нас будет всего записей, результирующей выборки с помощью JOIN&lt;/h3&gt;

 &lt;h3&gt;129. Таблица в БД. В ней одно поле целочисленное. Как нам SQL запросом найте первое пропущенное число? Найти с помощью селекта. 1, 2, 3, 5, 6&lt;/h3&gt;

 &lt;h3&gt;130. Банковская система. У нас есть деньги. К примеру рубли. Два разряда. С ними происходят операции. Какие могут быть проблемы? Например надо считать НДС и нельзя ничего потерять. Как сделать так, чтобы не округлялись. Считать в целочисленном виде или с плавующей точкой?&lt;/h3&gt;

 &lt;h3&gt;131. Есть документ. К него есть поля. От класса документ есть наследники. Как это будет выглядеть в БД?&lt;/h3&gt;

 &lt;h3&gt;132. Написал скрипт в Liquibase, он выполнился и теперь мне нужно поправить этот скрипт. Что мне сделать?&lt;/h3&gt;

 &lt;h3&gt;133. Если взять ютуб, там есть просмотр аудитории своей. И можно выбрать пол. И ютуб как-то ускоряет выборку по полу. Что там есть, как думаешь?&lt;/h3&gt;

 &lt;h3&gt;134. Есть селективный эндпоинт. Рост производительности, на селективном эндпоинте низкий перформанс. Как исправить? Навесили индексы, но не хватает производительности, что еще делать?&lt;/h3&gt;

 &lt;h3&gt;135. У меня 10 селектов и 2 пула. Как будет отрабатывать?&lt;/h3&gt;

 &lt;h3&gt;136. Нужно написать запрос к БД. Как ты это сделаешь в коде? У тебя есть сервис и тебе надо получить список машин. Как ты это напишешь в коде?&lt;/h3&gt;

 &lt;h3&gt;137. Идет релиз. В релизе есть миграция. Выпускаем релиз на прод, идет проверка и оказалось, что все плохо. Релиз надо откатить. Миграцию уже накатили и их тоже надо откатить.&lt;/h3&gt;

 &lt;h3&gt;138. В одной транзакции сделан SELECT FOR UPDATE, транзакция еще исполняется, а в другой параллельной транзакции хотим прочитать эту строку. Что будет?&lt;/h3&gt;

 &lt;h3&gt;139. Есть метод получения всех машин. Мы его можем закешировать. А есть метод, который говорит получи все машины и сделай что-то. Когда стоит кешировать, а когда нет?&lt;/h3&gt;

 &lt;h3&gt;140. В процессе Redis происходит сериализация, а в обратном происходит десериализация данных. Может возникнуть проблема, когда в кеше находится значение, а мы в коде этот объект изменили. Мы запрашиваем кеш, он приходит и у нас ошибка. С чем связана эта ошибка?&lt;/h3&gt;

 &lt;h3&gt;141. У человека в банке есть баланс. 100 рублей. Так получилось, что он одновременно переводит себя 10 рублей из другого банка. Два перевода по 10 рублей. Сколько рублей будет на балансе?&lt;/h3&gt;

 &lt;h3&gt;142. Есть таблица пользователей, в ней два пользователя и таблица баланса. В таблице баланса только один пользователь. Мы делаем INNER JOIN. Какой набор данных мы получим и сколько строк будет?&lt;/h3&gt;

 &lt;h3&gt;143. Приложение в проде крутится, все хорошо. Но пошли ситуации, что по timeout отваливаемся. Фрон ходит на бэк долго. Есть запрос в БД, он очень долгий. Как искать ошибку?&lt;/h3&gt;

 &lt;h3&gt;144. Если одна транзакция Serializable запустилась, что-то делает. И запустилась вторая транзакция, тоже что-то делает. Что случится с ними? Фактически они не в очередь выстраиваются?&lt;/h3&gt;

 &lt;h3&gt;145. Ты поставил Eager, и грузишь id-шники пользователей из одной таблицы, и список комментариев из другой таблицы так же по одному пользователю&lt;/h3&gt;

 &lt;h3&gt;146. Приложение ищет записи по ключу, id. Этот запрос будет лучше работать при партицировании?&lt;/h3&gt;

 &lt;h3&gt;147. Запрос по статусам и мы добавили селект ограничение по времени, но с одной стороны. Запрос будет сканить одну партицию или не одну? Партиционирование по неделям&lt;/h3&gt;</description></item><item><title>Spring Framework</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/spring-framework/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/spring-framework/</guid><description>&lt;h1&gt;Spring Framework&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Есть Spring Boot Application, он собрался. Запускаешь получившийся jar-ник. Он падает с Runtime Exception - не может внедрить зависимости: 2 кандидата на внедрение в какое-то место. Из-за чего такое может произойти? Как решить?&lt;/h3&gt;

 &lt;h3&gt;2. Есть класс-сервис. Внутри 2 метода. Оба public, @Transactional. Первый метод внутри обращается ко второму. Инжектим класс из другого класса и обращаемся к первому методу. Будет ли второй метод транзакционным? После. бираем транзакцию у первого метода. Делаем такое же обращение через первый метод. Через 10 минут демо, надо, чтобы второй метод стал транзакционным&lt;/h3&gt;

 &lt;h3&gt;3. Можем ли мы создать несколько синглтонов, которые будут имплемитировать один и тот же класс, но будут разные параметры?&lt;/h3&gt;

 &lt;h3&gt;4. Подключаю Spring Boot Application, делаю Maven parent SpringBoot и подключаю SpringBootStarter. Веб появляется?&lt;/h3&gt;

 &lt;h3&gt;5. От стартеров абстрагируемся. Хотим сделать Spring Boot приложение. Ставим @SpringBootApplication public static void main. Передаешь класс, где main. Добавляешь зависимости, стартеры и все начинает работать. От момента, как прописал зависимости и поставил аннотацию - что происходит? - Что значит идет конфигурирование приложения?&lt;/h3&gt;

 &lt;h3&gt;6. Как поведёт себя запущенный проект на Spring без spring-boot-starter-web?&lt;/h3&gt;

 &lt;h3&gt;7. Есть метод который помеченный @Transactional, в середине нужно сохранить сохранить промежуточный результат в отдельную таблицу даже при исключении&lt;/h3&gt;

 &lt;h3&gt;8. Есть контроллер Singletone. Он торчит наружу своим API. Мы этот контроллер autowire-им в сервис. Сервис Prototype. User 10 раз дергает контроллер. Сколько будет создано сервисов?&lt;/h3&gt;

 &lt;h3&gt;9. У нас есть библиотека. В ней главный интерфейес movable. У него метод move() что-то двигает. У нас есть имплементация movableImpl() этого метода. Скомпилировали, собрали war, выложили на Nexus. Другой разраб берет нашу библиотеку, использует autowired куда-то себе, у него все работает. Менеджер попросил что-то у нас переделат. Мы решили сделать movableImpl2(), там имплементация того же интерфейса movable, который autowire-ид тот разраб у себя. Какие будут проблемы?&lt;/h3&gt;

 &lt;h3&gt;10. Junior developer повесил @Transactional так, что транзакция не открывается. Как он это сделал?&lt;/h3&gt;

 &lt;h3&gt;11. Есть аннотация, уже написана. Когда разраб помечает свой метод этой аннотацией, происходит логирование. Как реализовать такой функционал?&lt;/h3&gt;

 &lt;h3&gt;12. Приложение использует библиотеку. Библиотека реализует интерфейс. Есть две реализации бинов, одна в самой библиотеке, вторая в нашем приложении. Мы инжектим интерфейс. Как ведет себя Spring?&lt;/h3&gt;

 &lt;h3&gt;13. Есть интерфейс, который реализуют несколько классов. Я пытаюсь внедрять этот интерфейс куда-нибудь как Bean. Как Spring поймет, какую реализацию выбрать?&lt;/h3&gt;

 &lt;h3&gt;14. Один сервис отправил сообщение, что нужно сохранить несколько сущностей. Нужно сохранить всё или ничего. Как бы сделал процесс отката?&lt;/h3&gt;

 &lt;h3&gt;15. Представим что у нас есть Транзакционный метод. В нем вначале через репозиторий делаем findOne, потом изменяем ее через save и кидаем повторный запрос findOne. Сколько запросов к БД будет выполнено?&lt;/h3&gt;

 &lt;h3&gt;16. Приложение работает несколько суток, принимает HTTP трафик. Есть ли возможность в Spring закинуть туда бин, не рестартуя приложение?&lt;/h3&gt;

 &lt;h3&gt;17. Spring приложение, прикручена БД. Есть требование, что нельзя хранить login, password в Application Properties в открытом виде. Они там хранятся в зашифрованном виде. Как решить проблему, чтобы Spring расшифровывал их? Токен для расшифровки хранится на локальной машине&lt;/h3&gt;

 &lt;h3&gt;18. Создаем бины котрые реализовывают временный контейнер Файл. Файл, что то сохраняет и что то достает. Если закроем приложение то файл останется. Как уничтожить бин, для грамотного использования ресурсов.&lt;/h3&gt;

 &lt;h3&gt;19. Как создать несколько DataSource в спринг-приложении и управлять ими?&lt;/h3&gt;

 &lt;h3&gt;20. Если у нас есть несколько DataSource, создаются в нашем приложении два бина одного и того же типа. Место для инжекта только одно. Как разрулить ситуацию?&lt;/h3&gt;

 &lt;h3&gt;21. Если создаем в бине обращение к ресурсу. Нужно корректно закрыть ресурс. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;22. Есть standalone провайдер авторизации. KeyClock к примеру. Как сервис провалидирует этот токен?&lt;/h3&gt;

 &lt;h3&gt;23. Если я поменяю Service на Component. Что-то поменяется в приложении?&lt;/h3&gt;

 &lt;h3&gt;24. Можно миксовать конфигурации? Часть сделать аннотациями, а часть XML?&lt;/h3&gt;

 &lt;h3&gt;25. Что если надо заинжектить интерфейс, а у меня две реализации в Context&lt;/h3&gt;

 &lt;h3&gt;26. Есть Singleton Bean. Есть Request HTTP запрос. Нам надо из запроса получить хедеры и залогировать. Как можно это заинжектить? Есть ли готовые решения у Spring?&lt;/h3&gt;

 &lt;h3&gt;27. Что будет если на каждый запрос будет создавать новый ApplicationContext?&lt;/h3&gt;

 &lt;h3&gt;28. Что будет если будет исключение в PostConstruct&lt;/h3&gt;

 &lt;h3&gt;29. Используем SpringBootApplication, а используемые Бины лежат в библиотеке. Будут ли они подтягиваться автоматически?&lt;/h3&gt;

 &lt;h3&gt;30. Как без LAZY мы можем сделать ленивую загрузку бина?&lt;/h3&gt;

 &lt;h3&gt;31. Есть проект. В проекте есть Kafka и БД. Указываем параметры подключения к БД. Если у нас не указаны переменные в Application Properties для БД, то нам ДатаСоурс создавать не надо. Если у нас не указаны параметры application properties то нам Бин поднимать не надо. Как тогда сделать?&lt;/h3&gt;

 &lt;h3&gt;32. Если ловим OptimisticLockException, что делаем?&lt;/h3&gt;

 &lt;h3&gt;33. Есть самописная аннотация. Есть метод, который реализует определенный функционал. Как сделать так, чтобы когда мы ставили нашу самописную аннотацию вызывался наш метод с прописанным функционалом.&lt;/h3&gt;

 &lt;h3&gt;34. Проблема управления распределнной транзакцией. Какие есть подходы к решению?&lt;/h3&gt;

 &lt;h3&gt;35. Пишем интеграционный тест, который протестирует endpont, обращение в Сервис и БД. Как на Spring написать интеграционный тест?&lt;/h3&gt;

 &lt;h3&gt;36. Есть стартер и Application. В стартере определен бин датасоурс, который инжектиться аппликейшином и аппликатион с ним работает. Потом сделали вторую версию Стартера и в эту версию нужно добавить еще один бин такого же типа, чтобы в одном месте кода использовался один бин, в другом другой бин. Важно, чтобы бины были одного типа. Вопросы: 1. Как можно реализовать, чтобы использовать два бина с одинаковым типом. 2. Приложение не должно заметить изменений и должно продолжить использовать первый бин.&lt;/h3&gt;

 &lt;h3&gt;37. Есть Java интерфейс, который имплементируют два класса. На каждой имплементации висит @Service. Это корректно?&lt;/h3&gt;

 &lt;h3&gt;38. Когда подключаешь стартер, он подтягивает все зависимости. Если мне нужен стартер, но одна зависимость в нем не нужна. А переписывать стартер не хочется, что делать?&lt;/h3&gt;

 &lt;h3&gt;39. Если заменить Configuration на Component бины не будут создаваться?&lt;/h3&gt;

 &lt;h3&gt;40. Есть большое приложение. Много классов, контроллеров, сервисных слоев. В большую часть этих слоев инжектится бин, созданный из какого-то библиотечного класса, который мы менять не можем. Этот бин везде используем, он создан через Java конфигурацию. Теперь нам надо создать еще один такой же бин, но с другими параметрами. Хотим новый бин использовать в новом сервисе. А в старых местах должен инжектиться старый бин. Как это развязать? Хотим иметь два Singleton&lt;/h3&gt;

 &lt;h3&gt;41. Есть наша инфраструктурная аннотация, которая логирует Rest контроллеры (@RestLogger). Мы ее везде вешаем, но иногда забываем. Можно ли сделать, чтобы при старте приложения Spring сам проверил, что на всех классах, помеченных @RestController есть @RestLogger? И, если где-то не висит, то деплой падает с понятной ошибкой&lt;/h3&gt;

 &lt;h3&gt;42. Подключаешь старый проект через зависимости к своему проекту. Надо, чтобы все бины из старого проекта попали в Spring context. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;43. Две транзакции хотят обновить одну и туже строку. Что будет происходить?&lt;/h3&gt;

 &lt;h3&gt;44. Если первая транзакция захватила объект для изменения и изменила его. Вторая транзакция на этом объекте отработает? Какие проблемы будут? Ситуация гонки за данными&lt;/h3&gt;

 &lt;h3&gt;45. Как настроить зависимости бинов для разных сред разработки? Например нужно использовать две разные БД.&lt;/h3&gt;

 &lt;h3&gt;46. Как логировать бины при создании бинов? Если бинов больше сотни?&lt;/h3&gt;

 &lt;h3&gt;47. Почему дефолтным выбран Singleton? Кажется, что это не удобно, раз надо обращать внимание на что-то?&lt;/h3&gt;

 &lt;h3&gt;48. По всему проекту мы выбрасываем RuntimeExceptions и хотим в одном месте их ловить. Чем воспользоваться?&lt;/h3&gt;

 &lt;h3&gt;49. Каким инструментом можно гарантировать, чтобы scheduler работал только в master ноде? На уровне Spring приложения&lt;/h3&gt;

 &lt;h3&gt;50. Нормально ли в методе помеченном @Transactional кидать HTTP-запросы?&lt;/h3&gt;

 &lt;h3&gt;51. Мне нужно в программе, чтобы бин создавался при условии, что подключена определенная библиотека. Как это реализовать?&lt;/h3&gt;

 &lt;h3&gt;52. Ты подключаешь библиотеку и хочешь переопределить у этой библиотеки бин. Что для этого в библиотеке должно быть указано, чтобы ты смог это сделать? Как это возможно сделать?&lt;/h3&gt;

 &lt;h3&gt;53. Две транзакции хотят обновить одну и туже строку. Что будет происходить?&lt;/h3&gt;

 &lt;h3&gt;54. Есть 4 бина одного типа, мне нужно собрать их в одном месте. Как сделать?&lt;/h3&gt;

 &lt;h3&gt;55. У нас есть прокси. Он добавляет действие на все методы какого-то класса. Прокси должен логгировать все вызовы методов класса. Пусть в классе есть методы B, C. Оба публичные и помечены аннотацией, чтобы прокси их обрабатывал. Другой сервис вызывает метод B, а метод B вызывает метод C. Сколько в логах будет записей?&lt;/h3&gt;

 &lt;h3&gt;56. Есть сервис, в сервисе есть метод, который внутри себя вызывает метод репозитория. Над методом в сервисе я поставил @Transactional. И над методом в репозитории тоже поставил @Transactional. Вызвал метод сервиса, который внутри вызвал метод репозитория. Сколько транзакций откроется?&lt;/h3&gt;

 &lt;h3&gt;57. Есть ли отличия внутри Spring, если мы применяем @Autowired к интерфейсу или обычному классу? И отличия использования @Autowired внутри конструктора или просто в методе?&lt;/h3&gt;

 &lt;h3&gt;58. В контроллер пришел запрос из фронтенда и где-то в глубине сервиса упала ошибка. Хочется обработать ошибку и дать осмысленный ответ на фронтенд. Как это сделать средствами Spring?&lt;/h3&gt;

 &lt;h3&gt;59. У нас есть два контроллера. Они синглтоны. Туда инжектится сервис, который прототайп. Идут запросы в эти контроллеры, которые обращаются к сервису. Сколько экземпляров сервиса будет?&lt;/h3&gt;

 &lt;h3&gt;60. У нас есть бин A, который нужен в бине B и наоборот - в бине B нужен бин A. Как нам такое сделать?&lt;/h3&gt;

 &lt;h3&gt;61. Что Spring ищет с точки зрения Controller-а? Если мы хотим использовать @Component, что можно законфигурировать, чтобы Spring понял, что это Controller?&lt;/h3&gt;

 &lt;h3&gt;62. Есть транзакционный метод. Поняли, что хотим сделать его асинхронным. Что будет, если повесим на метод сразу две аннотации: @Transactional и @Async?&lt;/h3&gt;

 &lt;h3&gt;63. Есть сервис очень простой. Он читает из Kafka 2 числа. Считает сумму, складывает в Postgres. И отправляет в Kafka сообщение, что он сложил, результат записан в БД. Какие стартеры Spring Boot ты бы добавил для этого сервиса? Нужен ли Tomcat?&lt;/h3&gt;

 &lt;h3&gt;64. Создается бин, какой-то метод помечен @PostConstruct и мы вешаем над этим же методом @Transactional. Что произойдет? Создастся ли бин? Будет ли транзакция?&lt;/h3&gt;

 &lt;h3&gt;65. У нас есть интерфейс, есть две реализации его. Обе реализации одного интерфейса помечены @Component. При запуске приложения получаем ошибку, что Spring не знает, какой заинжектить. Как решить проблему?&lt;/h3&gt;

 &lt;h3&gt;66. Есть Spring Boot приложение, много зависимостей. Мы понимаем, что какой-то Spring Boot Starter нам мешает, он не прописан в Maven, он подтянулся из сторонней библиотеки. Что сделать, чтобы конкретный Spring Boot Starter не запускался? Какие варианты?&lt;/h3&gt;

 &lt;h3&gt;67. Есть класс, в нем методы a() и b(). Метод a() вызывает метод b(). На b() есть Spring аннотация любая. Будет ли аннотация работать?&lt;/h3&gt;

 &lt;h3&gt;68. Класс с @Transactional, есть public методы. Внутри одного public метода на какой-то строке код выбрасывает исключение. Что произойдет?&lt;/h3&gt;

 &lt;h3&gt;69. Над классом вешаю @Transactional. А потом внутри этого же класса над одним из public методов тоже вешаю @Transactional. Вызываем метод снаружи. Что происходит? Что происходит с остальными public методами этого класса?&lt;/h3&gt;

 &lt;h3&gt;70. Над методом висит @Transactional. В первой половине метода что-то делаем с БД (insert, update…), а во второй половине метода видим, что у нас отрицательный баланс, а такая ситуация недопустима. Можно ли откатить изменения?&lt;/h3&gt;

 &lt;h3&gt;71. У вас приложение и несколько баз данных. Можно ли в Spring Boot подключиться к двум разным базам? Как? Как настроить работу через JPA с двумя БД? Чтобы два репозитория было?&lt;/h3&gt;

 &lt;h3&gt;72. Есть метод @Transactional. Внутри него я вызываю другой метод тоже @Transactional. Как сделать вложенную транзакцию? Чтобы, если внутренний метод падал, то внешняя транзакция выполнилась бы всегда. Чтобы внешняя транзакция не откатывалась в этой ситуации. Что произойдет, когда попадаем во внутренний метод, помеченный @Transactional?&lt;/h3&gt;

 &lt;h3&gt;73. Можно ли в Singleton автоварить (autowir-ить) Prototype?&lt;/h3&gt;

 &lt;h3&gt;74. Есть Spring контекст, в котором живет два бина: Singleton и Prototype. У Prototype есть PreDestroy метод, из которого вываливается исключение. Мы пытаемся красиво закрыть Spring контекст. Удастся ли нам это сделать?&lt;/h3&gt;

 &lt;h3&gt;75. Как можно получить destroy callback бина? Например, использовать @PreDestroy. Как еще указать контексту, что какие-то методы надо вызвать при закрытии контекста?&lt;/h3&gt;

 &lt;h3&gt;76. Есть Singleton. Он раз в час требует новый инстанс Prototype бина, то есть при каждом вызове определенного метода нам нужен новый инстанс Prototype бина. Как поступишь?&lt;/h3&gt;

 &lt;h3&gt;77. Как создается Proxy в Spring? У тебя только main() и JDK 11. Напиши функцию, которая на вход принимает объект, а на выходе тот же объект, все методы которого модифицированы: в каждом методе сначала прописывается лог с названием этого метода&lt;/h3&gt;

 &lt;h3&gt;78. У нас есть бин синглтон Box, у которого зависимость прототип Color. Как сделать так, чтобы Box был всегда один и тот же, а Color всегда разным?&lt;/h3&gt;

 &lt;h3&gt;79. Механизм стартеров Spring. Иногда в application properties или в yaml файле пишем строчку cache=none, или другую имплементацию. И получаем какое-то поведение. Когда мы указываем cache=none, что происходит дальше с имплементацией этого cache manager? В pom-нике висит Spring Boot Starter, мы ожидаем, что все бины окажутся в контексте&lt;/h3&gt;

 &lt;h3&gt;80. В Spring мы пишем многопоточное Java приложение, но игнорируем многопоточность. С чем это связано? Как это работает?&lt;/h3&gt;

 &lt;h3&gt;81. У меня объявлен RestController, какой-то эндпоинт. И вызывается какой-то сервис. В сервисе я делаю разные хитрые валидации с расчетами. Если что-то не так я бросаю кастомный Exception: throw new MyCastomException. И вот, возникла ошибка. Если я ничего не настрою, будет 500 выходить. А я хочу настроить 400 Bad Request, и json с подробным описанием ошибки. Как это настроить в Spring?&lt;/h3&gt;

 &lt;h3&gt;82. Почему дефолтный GC не чистит бины в Spring?&lt;/h3&gt;

 &lt;h3&gt;83. Spring Security. Есть ли возможность настроить разные бранчи для определенной &amp;hellip; (слово не разобрать)? Идет жесткая страшная аутентификация. И у нас подключены актуаторы. Я хочу, чтобы эти актуаторы не были покрыты этой аутентификацией&lt;/h3&gt;

 &lt;h3&gt;84. Spring Security. Если в Spring Security один фильтр падает с ошибкой (настроено логирование), что при этом произойдет? Подумай логически, как работает FilterChain? Что нужно, чтобы запросы проходили, даже если возникают ошибки при логировании в фильтре FilterChain?&lt;/h3&gt;

 &lt;h3&gt;85. Порассуждай, если Singleton нарушает SOLID, может привести к Race Condition, почему в Spring сплошные Singleton?&lt;/h3&gt;

 &lt;h3&gt;86. У тебя есть три среды. test, dev, prod. Тебе нужно, чтобы программа вела себя по разному в каждой из этих сред. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;87. Есть Controller, в нем определен endpoint. Внутри сервис делает валидации и кидает кастомные ошибки. По умолчанию отдается 500-ая, а мы хотим красиво сделать, чтобы отдавал красивый 400-ый request, красиво json разложить. Как бы ты это настроил?&lt;/h3&gt;

 &lt;h3&gt;88. Есть типичная модель, RestController, Service Repository. У сервиса метод @Transactional. Как внутри Spring происходит превращение из декларативного в оперативный&lt;/h3&gt;

 &lt;h3&gt;89. У нас может быть реализовано множество интерфейсов с разными методами. Как спринг решит проблему проксирования?&lt;/h3&gt;

 &lt;h3&gt;90. Какие проблемы могут возникнуть если над классом стоит @Transactional?&lt;/h3&gt;

 &lt;h3&gt;91. У тебя есть бин в котором два метода. Метод один вызывает внутри себя метод два. Метод два обращается к БД. Метод два помечен @Cacheable. При вызове метода один у тебя обращение к БД идет в сто процентах из ста. Почему?&lt;/h3&gt;

 &lt;h3&gt;92. Если два конструктора нужна аннотация Autowired?&lt;/h3&gt;

 &lt;h3&gt;93. Является ли Spring Bean потокобезопасным? Как сделать Bean потокобезопасным? И можно ли?&lt;/h3&gt;

 &lt;h3&gt;94. Хотим что-то внедрить с помощью @Autowired. В каком порядке он начинает искать подходящий бин, который надо внедрить? С чего начинает сканировать? Какие этапы может проходить?&lt;/h3&gt;

 &lt;h3&gt;95. У нас огромная транзакция: 1.5 тыс строк. Где-то между нужно было вывести кусок кода из транзакции. Допустим, 300 строк в транзакции, следующие 5 вне транзакции, потом дальше снова в транзакции. Как можно это сделать?&lt;/h3&gt;

 &lt;h3&gt;96. У меня есть транзакция, внутри метода создаю новый thread и в нем делаю какую-то логику. Сохранится ли транзакция в этом thread&amp;rsquo;е?&lt;/h3&gt;

 &lt;h3&gt;97. Тебя попросили сделать аннотацию и сделать ее обработчик. Как ты будешь делать? На основании каких данных Spring решит, что этот класс с этим методом надо превратить в Proxy?&lt;/h3&gt;

 &lt;h3&gt;98. Ты разраб, должен написать свой Proxy для Transactional. Как реализуешь: открыть транзакцию, закрыть, сделать rollback? Аннотация висит на уровне сервиса. Оригинальный метод на уровне сервиса. Там никакого Hibernate нет. Может я вообще Elasticsearch прикрутил в качестве БД. Персистентностью может выступать любая дичь. Что у меня в реализации должно быть, чтобы эта штука не зависила от реальной моей персистентности?&lt;/h3&gt;

 &lt;h3&gt;99. JPA Repository. Есть UserRepository интерфейс. Делаю extends JPA Repository, и когда UserRepository в сервис свой инжекчу, вижу, что у меня появились методы save(), saveAll(), find(). Как это реализовано? Почему это срабатывает? Как именно Spring понимает, какие данные брать из БД? Под капотом?&lt;/h3&gt;

 &lt;h3&gt;100. Есть дефолтные методы save() и saveAll() из JPA Repository. Почему выгоднее использовать saveAll(), а не в цикле foreach использовать save(), если хотим сохранить коллекцию Entity?&lt;/h3&gt;

 &lt;h3&gt;101. Spring. Интерфейс, есть ряд реализаций. Как можно заинжектить коллекцию? И как там выстроить порядок имплементаций? Как получить имплементации в коллекции? Та же ситуация, по-другому. Есть абстракция, у нее есть несколько реализаций в виде компонентов. Нам нужно заинжектить все эти имплементации. Что сделать?&lt;/h3&gt;

 &lt;h3&gt;102. Тебе надо разработать сервис построения отчетов. Надо залезать в БД. Ты создаешь бин Repository для работы с БД. В чем разница, если ты бин создашь руками в классе, или ты его заавтоваеришь?&lt;/h3&gt;

 &lt;h3&gt;103. Есть твой сервис, есть репозиторий для работы с БД. Можем его через конструктор внедрит, или через setter, или через поле. С точки зрения использования репозитория в коде, будет ли разница? Ты постоянно пользуешься этим репозиторием&lt;/h3&gt;

 &lt;h3&gt;104. Ты решил сам написать прокси, которая будет обрабатывать транзакционную логику. Как бы ты писал?&lt;/h3&gt;

 &lt;h3&gt;105. Одна часть логики это получить значение из БД по id, а вторая это записать полученное значение. Делать это в разных транзакциях?&lt;/h3&gt;

 &lt;h3&gt;106. Мы взяли сервис на Spring Starter. Все прописали. Все оформили красиво. Почему Listener не работает?&lt;/h3&gt;

 &lt;h3&gt;107. Начитались умных учебников и понимаем как работает транзакции. Знаем как вызвать их в одном методе. Как убедиться, что вызываются две транзакции?&lt;/h3&gt;

 &lt;h3&gt;108. Приложение работает в проде. Нам сообщают, что пароль к БД поменялся. Как нам внедрить новый пароль?&lt;/h3&gt;

 &lt;h3&gt;109. Мы загрузили файл и транзакция откатилась. Когда у нас упирается физический носитель, который находится вне транзакционной модели БД. Как вы обрабатывали вещи, когда загрузили, а транзакция откатилась?&lt;/h3&gt;

 &lt;h3&gt;110. Есть сервисный класс. Есть ли смысл давать сервисному классу интерфейс?. Вариант 1: Есть просто класс DocumentService. Ms gовесили на него @Service и все везде инжектим. Вариант 2: Сначала создали интерфейс DocumentService, заимплементировали класс DocumentServiceSimple, и повесили @Service. Какие плюсы и минусы второго варианта?&lt;/h3&gt;

 &lt;h3&gt;111. Есть метод @Transactional. У него низкий перформанс. Посовещались, решили сделать его асинхронным. Можно ли навесить на метод кроме @Transactional еще и @Async?&lt;/h3&gt;

 &lt;h3&gt;112. Есть Сервис или Компонент, который Singletone, а в него загружаем Prototype, то когда мы будет внедрять родительский компонент в другие места, нам будет внутренний объект приходить новым всегда?&lt;/h3&gt;

 &lt;h3&gt;113. Если @Transactional весит одновременно и над классом и над методом, что будет? Как будет работать?&lt;/h3&gt;

 &lt;h3&gt;114. Хотим сделать свой BeanPostProcessor. Есть несколько стандартных методов. Какая у них очередность?&lt;/h3&gt;

 &lt;h3&gt;115. Если метод помечен Transactional и мы вызываем его через PostConstruct сработает ли транзакция?&lt;/h3&gt;

 &lt;h3&gt;116. В классе postConstruct прошел. Мы зашли в метод, который транзакционный и второй медот тоже транзакционный и мы вызываем из одного другой. Сколько транзакций будет?&lt;/h3&gt;

 &lt;h3&gt;117. Есть класс, который помечен @Configutation. Два метода внутри класса помечены @Bean. Если из одного метода вызываешь другой, будет таже история, что и с транзакциями или будет что-то другое?&lt;/h3&gt;

 &lt;h3&gt;118. Есть библиотека, в ней мы пишем свою конфигурацию. Есть основной проект в который включаем эту библиотеку. Что нужно сделать, чтобы эта конфигурация автоматически стартовала в нашем проекте?&lt;/h3&gt;

 &lt;h3&gt;119. У нас есть поток, который вызывает репозиторий. Репозиторий сохраняет что-то в базу. Т.е. в транзакции создается новый поток. Сколько будет транзакций?&lt;/h3&gt;

 &lt;h3&gt;120. У интерфейса 10 реализаций. Хочу в бине сразу поработать со всеми реализациями. Вызвать метод, который отработает у всех разных реализаций.&lt;/h3&gt;

 &lt;h3&gt;121. Мы указали Spring Boot Parent для Data JPA или для Security. Внутри аккумулируются несколько зависимостей. Можно провалиться через ctrl посмотреть их. Можно ли поменять версию внутри одной из зависимостей?&lt;/h3&gt;

 &lt;h3&gt;122. Приложение HelloWorld. Контроллер, сервис, репозиторий. Мы на сервис повесили @Transactional. Логику делаем: какой-то SELECT, обновить какие-то поля и сделать Save. Все работает. Высоконагруженное приложение, много вызовов по REST. Потом добавили в @Transactional метод вызов стороннего сервиса, который всегда нам возвращает результат, но стал тупить и дольше возвращать результат. Что может произойти в этом случае?&lt;/h3&gt;

 &lt;h3&gt;123. Без локов. Есть SELECT к БД. Метод приходит с фронта. Мы вызываем наш сервис. Обернули его в Transactional. Нужно сходить в 5 таблиц БД. Теоретически это можно сделать параллельно. Мы сделали ExecutorService, делаем там запросы в 5 репозиториев в потоках. В чем нюанс?&lt;/h3&gt;

 &lt;h3&gt;124. Есть набор справочников, которыми данные обогащаем. Справочники достаточно статичные. Храним их в БД. Мы хотим один раз из БД вытащить, у себя в словаре сохранить, потом использовать. Как это проще всего в Spring сделать?&lt;/h3&gt;

 &lt;h3&gt;125. Если у нас бин принимает значения null, его можно заинжектить?&lt;/h3&gt;

 &lt;h3&gt;126. Если несколько реализаций бина. @Primary и @Qualifier не прописаны, как поведет себя @Autowired?&lt;/h3&gt;

 &lt;h3&gt;127. Представь, что ты инжектишь к себе в Сервис Репозиторий. В поле написал Репозиторий, положил. Сверху Автовайред над полем. Сеттер к этому полю у тебя есть. Конструктор по умолчанию в Сервисе и ты хочешь вызвать через Конструктор Репозиторий и сделать getAll. Какие подводные камни?&lt;/h3&gt;</description></item><item><title>Kafka и брокеры сообщений</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/kafka-message-brokers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/kafka-message-brokers/</guid><description>&lt;h1&gt;Kafka и брокеры сообщений&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Со стороны consumer-а. Топик очень высоконагруженый. 8 партиций. Хотим масшрабироваться на стороне consumer-а, читать сообщения побыстрее. Какой способ? Чтобы читать сообщения с одной бизнес-логикой несколькими Spring-приложениями&lt;/h3&gt;

 &lt;h3&gt;2. Три машины в кафке и одна упала. Что с нашей инфой? Инфа постарадает?&lt;/h3&gt;

 &lt;h3&gt;3. Было 2 сервиса (producer, consumer), общались по Kafka. Consumer на каждое сообщение должен проходить большой процесс обогащения, поэтому стали копиться сообщения. Решили в двух pod-ах поднять consumer. Но второй pod не видит сообщений. В чем проблема?&lt;/h3&gt;

 &lt;h3&gt;4. Если у нас несколько брокеров как будут распологаться partition?&lt;/h3&gt;

 &lt;h3&gt;5. У нас есть n partition. Есть ли смысл настроить Spring приложение для увеличения partition?&lt;/h3&gt;

 &lt;h3&gt;6. Consumer group. 10 партиций и консьюмеры не справляются. Что делать?&lt;/h3&gt;

 &lt;h3&gt;7. Есть producer, consumer, consumer record. Consumer record несет в себе key-value. Есть топик, в нем 3 партиции. Мы продьюсим сообщения. Вкакую патртицию попадают сообщения? По каким принципам?&lt;/h3&gt;

 &lt;h3&gt;8. Топик и 3 партиции. Мы создаем одного consumer-a. К каким партициям прицепится consumer? - цепляется ко всем 3 партициям. Создаем еще одного consumera. С такой же group id. И цепляем его к такому же топику. Он тоже подцепится к этим трем партициям? - Kafka ребалансируется, один консьюмер получит 2 партиции, а второй консьюмер получит 1 партицию&lt;/h3&gt;

 &lt;h3&gt;9. Есть 5 консьюмеров. Хотим ими параллельно читать из Kafka, чтобы каждому доставались уникальные сообщения. Можно ли такого достичь?&lt;/h3&gt;

 &lt;h3&gt;10. Есть два сервиса, им нужно общаться между собой. Два топика. Что должно быть реализовано на сервисах?&lt;/h3&gt;

 &lt;h3&gt;11. Есть consumer group c одним consumer-ом и топик с одной партицией, есть задержка в чтении как можно исправить?&lt;/h3&gt;

 &lt;h3&gt;12. Есть брокер и сервис который отправляет в него сообщения. Нужно сделать чтобы сообщения отправлялись всегда даже при сбое, потере питания и т.д&lt;/h3&gt;

 &lt;h3&gt;13. Несколько микросервисов читают из одного топика. Как обеспечить, что один топик, один producer и 3 consumer-а, и все 3 гарантированно должны забрать одно и то же сообщение?&lt;/h3&gt;

 &lt;h3&gt;14. Возможно в Kafka послать сообщения так, чтобы они были получены в том же порядке, как отправлены?&lt;/h3&gt;

 &lt;h3&gt;15. Один сервис продуцирует сообщеня, по сути является продьюсером. Публикует результаты экзаменов учеников. Есть 3 системы, которые потребляют сообщения. Сколько нужно сделать Топиков и Партиций? Если сделаем 1 партицию, что случится? А если 10?&lt;/h3&gt;

 &lt;h3&gt;16. Возможно обрабатывать несколькими консьюмерами одну партицию?&lt;/h3&gt;

 &lt;h3&gt;17. Как на стороне консьюмера обрабатывать сообщения, чтобы не обрабатывать дубли?&lt;/h3&gt;

 &lt;h3&gt;18. Консьюмер отвалился, продьюсер есть, сообщения идут в топик. Консьюмеров на топике нет. Потеряются ли сообщения? Когда консьюмер поднимется, придут ли к нему пропущенные сообщения?&lt;/h3&gt;

 &lt;h3&gt;19. Consumer не существует. Топик существует, Продюсеры что-то туда откидывают. Создаю нового Консьюмера. Есть ли возможность получить все сообщения, которые были до этого? Скажем так, остались в этом Топике&lt;/h3&gt;

 &lt;h3&gt;20. Консьюмер подключился к Топику и считывает сообщения. В одном из сообщений вылетело необработанное исключение. Что будет с ним?&lt;/h3&gt;

 &lt;h3&gt;21. 1 продьюсер, 1 топик, 2 консьюмера. Продьюсер посылает ивент. Кто из консьюмеров получит ивент?&lt;/h3&gt;

 &lt;h3&gt;22. Что делать если у нас 1000 listener в kafka?&lt;/h3&gt;

 &lt;h3&gt;23. Есть топик. 2 партиции. Отправляем одно сообщение. Есть два потребителя. Есть два варианта. Первый, у них одна консьюмер группа. Второй, у них разные консьюмер группы. В каком случае оба микросервиса прочитают одно и тоже сообщение.&lt;/h3&gt;

 &lt;h3&gt;24. Что будет если консьюмеров будет больше чем партиций?&lt;/h3&gt;

 &lt;h3&gt;25. Что будет если партиций будет больше чем консьюмеров?&lt;/h3&gt;

 &lt;h3&gt;26. 1000 сообщений в секундку, как нам определить, что пришедший ответ из kafka тот, который нам нужен.&lt;/h3&gt;

 &lt;h3&gt;27. Можно в RabbitMQ послать сообщение напрямую или нужно вводить промежуточные сущности?&lt;/h3&gt;

 &lt;h3&gt;28. Как будет вести себя консьюмеры, если количество консьюмеров меньше чем количество партиций в топике? А если 10 Консьюмеров а Партиций пять. Как распределятся?&lt;/h3&gt;

 &lt;h3&gt;29. Несколько Consumer в группе читает из одного Топика. Какой то Consumer отказал. Нужно чтобы другой Consumer стал читать из Топика вместо отказавшего.&lt;/h3&gt;

 &lt;h3&gt;30. Есть Consumer зависает, какие последствия могут возникнуть?&lt;/h3&gt;

 &lt;h3&gt;31. Если два контейнера будут в одной сети, какие будут проблемы?&lt;/h3&gt;

 &lt;h3&gt;32. Есть однопоточный лиснер Kafk-и, но нужно параллельно обрабатывать то, что оттуда приходит. Как бы ты это сделал? Нельзя использовать батчевый лиснер Kafk-и&lt;/h3&gt;

 &lt;h3&gt;33. Нужно, чтобы один консьюмер всегда обрабатывал один и тот же тип сообщений. Как реализовать?&lt;/h3&gt;

 &lt;h3&gt;34. У нас 4 партиции и 4 консьюмера. Потом добавляется еще один Консьюмер. Что будет?&lt;/h3&gt;

 &lt;h3&gt;35. Два топика, три партиции, два консьюмера из одной группы. Как распределятся партиции по консьюмерам?&lt;/h3&gt;

 &lt;h3&gt;36. Что если выставил batch size условно 10 кб. В итоге рейт очень маленький. Пишешь по одному сообщению в минуту. Как это исправить?&lt;/h3&gt;

 &lt;h3&gt;37. Есть Консьюмер группа. 2 консьюмера читают из топика из 4 партиций. Что произойдет если один из консьюмеров в группе сдохнет?&lt;/h3&gt;

 &lt;h3&gt;38. Можно сделать, чтобы несколько консюмеров читали несколько партиций?&lt;/h3&gt;

 &lt;h3&gt;39. У тебя 3 партиции и 1 консюмер. В первую ты закидываешь миллион, во вторую тысячу сообщений, а в третью десять. Как будет происходить чтение этим консюмером?&lt;/h3&gt;

 &lt;h3&gt;40. K8s, контейнеризованное приложение. Есть Kafka топик, в нем 40 партиций. Есть сервис, поднят один под. Ты захотел сделать 5 подов. У всех 5 подов одна консьюмер группа. Все они подписаны на этот топик Kafka. Какой под из какой партиции будет читать?&lt;/h3&gt;

 &lt;h3&gt;41. Kafka. We have one topic. Producer produces temperature updates into topic. On the other side we want to have one app that reads temp updates and shows them. And second app that also reads the same temp updates and send the email. We want both apps to recieve all the updates. What should we do?&lt;/h3&gt;

 &lt;h3&gt;42. Kafka. What should you do if you want to create Load Balancer: we want to have 3-4 apps that can process tasks from one topic? Different apps should process different messages. How many partitions? How many consumer groups?&lt;/h3&gt;

 &lt;h3&gt;43. Kafka. Если нужно сделать паузу в Consumer Kafka, что использовать? Как остановить Consumer на 5 сек? Какие способы остановки потока знаешь? Какой будет хороший?&lt;/h3&gt;

 &lt;h3&gt;44. Kafka. В Consumer Group большой лаг. Как будешь исследовать проблему? В топике 1 млн невычитанных сообщений, и их количество только увеличивается&lt;/h3&gt;

 &lt;h3&gt;45. Есть топик, в который публикуется информация, которая нужна разным микросервисам. Если два микросервиса оба подключатся, как сделать так, чтобы каждое сообщение попало в каждый микросервис. Как правильно объединить или не объединять в консьюмер группу в этом случае?&lt;/h3&gt;

 &lt;h3&gt;46. Система публикует статусы заказа: создан, оплачен, еще что-то. Второй сервис принимает сообщения, у него консьюмер группа из двух консьюмеров, которые поделили партиции топика на себя. В продьюсере создали заказ, отправили сообщение - оно попало первому консьюмеру. Создали второе сообщение по этому же заказу - оно попало второму консьюмеру, который оказался быстрее, чем первый. И сообщения прочитались в неверном порядке. Как этого избежать?&lt;/h3&gt;

 &lt;h3&gt;47. У нас есть два сервиса, которые общаются по кафке. Один отправляет команду второму на запуск симуляции. Второй ее получил и ответил первому, что он получил команду и запустил симуляцию. Но произошла проблема с сетью и первый сервис не получил это сообщение, из-за чего повторно отправил команду второму на запуск симуляции. Как настроить все так, чтобы не происходил повторный запуск?&lt;/h3&gt;

 &lt;h3&gt;48. Есть два сервиса: serviceA, serviceB. serviceB занимается обработкой платежей, например, есть команда: переведи от Пети к Васе 100 руб. serviceA получает от пользователя запрос: переведи от Пети к Васе 100 руб. И serviceA отправляет через Kafka этот запрос в serviceB. Сервис важный, мы хотим, чтобы деньги переходили ровно один раз при одном запросе. Как обеспечить семантику обработки exactly once для этого взаимодействия между сервисами?&lt;/h3&gt;

 &lt;h3&gt;49. Есть топик, в него кто-то пишет. Есть два независимых микросервиса, которые не знают друг про друга. Они должны к топику подключиться. Как настроить микросервисы так, чтобы они не подворовывали друг у друга сообщения из топика?&lt;/h3&gt;

 &lt;h3&gt;50. Если видео ролики нельзя пережать до нужного размера. Какой может быть обходной вариант с пересылкой в Kafka?&lt;/h3&gt;

 &lt;h3&gt;51. Есть топик с 5 партициями. И есть consumer group с одним консьюмером. Как он будет читать топик? Все партиции? Только одну партицию? Мы используем subscribe&lt;/h3&gt;

 &lt;h3&gt;52. Консьюмеров стало 10 в одной consumer group. А партиций пять в топике. Как распределятся консьюмеры?&lt;/h3&gt;

 &lt;h3&gt;53. Есть два сервиса: serviceA, serviceB. serviceB занимается обработкой платежей, например, есть команда: переведи от Пети к Васе 100 руб. serviceA получает от пользователя запрос: переведи от Пети к Васе 100 руб. И serviceA отправляет через Kafka этот запрос в serviceB. Сервис важный, мы хотим, чтобы деньги переходили ровно один раз при одном запросе. Как обеспечить семантику обработки exactly once для этого взаимодействия между сервисами?&lt;/h3&gt;

 &lt;h3&gt;54. Много партиций, таски накидали. Мы их вычитываем консьюмерами. Хотим как можно больше консьюмеров добавить, чтобы они в параллель все больше вычитывали. В какой момент надо остановиться в количестве консьюмеров?&lt;/h3&gt;

 &lt;h3&gt;55. Есть 2 инстанса приложения, которые читают один и тот же топик. Один из инстансов это просто реплика, которая хочет получать те же самые сообщения, что и первый инстанс&lt;/h3&gt;

 &lt;h3&gt;56. Есть 1 продюсер, есть 1 консьюмер. Несколько партиций топика. Продюсер в некотором порядке записывает сообщения в топик. Гарантируется ли, что консьюмер вычитает в том же порядке?&lt;/h3&gt;

 &lt;h3&gt;57. В техническом стеке проекта Kafka и Postgres. Нам говорят, что мы не можем оставить Postgres, только Kafka. Как нам придумать решение, когда только в Kafka храним и состояние объектов, и реальные запросы. На сколько далеко можем продвинуться в использовании Kafka как БД? Какие механизмы Kafka нам помогут? Есть топик Kafka. Сервис накидал туда сообщений со счетами на оплату. Их кто-то может вычитать. Сообщения в Kafka не хранятся вечно. Состояние утеряно. Другие счета прилетели. Пользователей тоже храним, у них фамилии, статусы хранятся. Что делать? Увеличили время хранения сообщений в Kafka. Записи копятся, память сильно растет, когда-то точно закончится. Сущности часто меняются, в топике сто тыс состояний каждого пользователя. Что делать с историчностью, чтобы система не слегла? Нужно только несколько конечных состояний каждого пользователя&lt;/h3&gt;

 &lt;h3&gt;58. Работает брокер, в топике 3 партиции. Подняли 3 приложения (консьюмера). Поняли, что 3 приложения не справляются. Как не выключая ничего, добавить еще консьюмеров, чтобы они быстрее читали из топика? Какие есть возможности, чтобы 5 консьюмеров читали из 3 партиций?&lt;/h3&gt;

 &lt;h3&gt;59. Ты разрабатываешь консьюмера для системы с доставкой минимум 1 раз. Что он должен учитывать?&lt;/h3&gt;

 &lt;h3&gt;60. Может ли быть в Kafka такая проблема, что каждый раз при запуске приложения оно будет идти по всем опубликованным сообщениям с нуля? Если неправильно настроена гарантия доставки. А еще какие проблемы могут быть, что каждый перезапуск приложения заново читаются с нуля все сообщения?&lt;/h3&gt;

 &lt;h3&gt;61. Допустим в транзакции мы записали в outbox таблицу слушатель получил данные и отправил их в kafka соответственно он помечает что отправил и ему не удалось записать, потом сервис мы переподняли у него есть outbox он смотрит не доставленные сообщения видит это сообщение которое не пометил и заново доставляет разве это exactly once?&lt;/h3&gt;

 &lt;h3&gt;62. Одно и то же приложение ставится в два контура: промышленный и резервный. Нужно, чтобы каждый контур получал какое-то уведомление. Приложение одно и то же, читает одну и ту же Kafka. Что нужно сделать, чтобы оба контура получали уведомление?&lt;/h3&gt;

 &lt;h3&gt;63. Есть 5 партиций в топике. Мы вычитываем его каким-то сервисом и хотим максимально ускорить. Сначала сделали 1 consumer, поняли, что медленно, добавили второй consumer. До скольки consumer-ов имеет смысл увеличивать? Почему?&lt;/h3&gt;

 &lt;h3&gt;64. Продюсер один, он пишет сообщения в топик в каком-то порядке. Консьюмер один, читает сообщения. Партиций много. Гарантируется ли, что консьюмер будет сообщения в том же порядке, в каком продюсер пишет?&lt;/h3&gt;

 &lt;h3&gt;65. Есть несколько инстансов микросервиса. Они читают один и тот же топик. Какой механизм позволит избежать дублирования обработки сообщений из топика?&lt;/h3&gt;

 &lt;h3&gt;66. За счет чего происходит то, что каждый консьюмер находит свою партицию?&lt;/h3&gt;

 &lt;h3&gt;67. У тебя есть интегратор, который читает данные из Kafka. Он один. Поняли, что нас не устраивает скорость обработки данных и добавили еще пять экземпляров. Опиши, что произойдет. Поможет ли это нам? По умолчанию одна партиция.&lt;/h3&gt;

 &lt;h3&gt;68. С какой проблемой можем столкнуться. Если засунем в обработчик Kafka допустим, параллельную обработку. Многопоточность. Решили засунуть в метод чтения данных многопоточность&lt;/h3&gt;

 &lt;h3&gt;69. Со стороны Consumer ты вычитываешь сообщение, по сообщению тебе надо сходить, несколько интеграций сделать. Ты идешь в первую интеграцию, и получаешь ошибку. Что можно сделать, чтобы еще раз это сообщение обработать? Как это организовать? Как это в коде это сделать (сдвигать offset в Kafka назад)? Как автоматизировать? Читаешь сообщение, у нее идет 3 интеграции. Всегда есть шанс, что одна из интеграций приляжет&lt;/h3&gt;

 &lt;h3&gt;70. У тебя стоит @Listener, ты получил сообщение, десериализовал его в какой то объект. Что в этот момент сразу произошло в кафке?&lt;/h3&gt;

 &lt;h3&gt;71. В топик Kafka попадает 10 сообщений, из топика читают два консьюмера с разными консьюсер группами. Сколько сообщений считает каждый консьюмер. А если в одной консьюмер группе?&lt;/h3&gt;

 &lt;h3&gt;72. Настроили Kafka. Обмен пошел. Перегоняем JSON между сервисами. Потом я пришел и послал в этот топик String. Что будет?&lt;/h3&gt;

 &lt;h3&gt;73. Есть топик в нем пять партиций. Есть 10 слушателей у каждого топика. Каждый из них сможет прочитать?&lt;/h3&gt;

 &lt;h3&gt;74. Пусть у нас min.insync.replicas на топике 5, брокеров у нас 6. При этом настроим на consume&amp;rsquo;е acks=all. Что это будет означать?&lt;/h3&gt;

 &lt;h3&gt;75. Пусть у нас 10 партиций. Какое количество pod имело бы смысл масшатибровать горизонтально?&lt;/h3&gt;

 &lt;h3&gt;76. Есть PaymentService и TransactionHistoryService. После каждого проведения оплаты, тебе нужно передавать в Kafka информацию о транзакции. В TransactionHistoryService должен быть kafka-listner, который примет это сообщение и сохранит в БД. Нам нельзя терять информацию. Как бы ты реализовал гарантию доставки и гарантию обработки сообщений?&lt;/h3&gt;

 &lt;h3&gt;77. Есть один producer, он пулит сообщения в Kafka. Как сделать так, чтобы два разных сервиса прочитали сообщения из этого топика?&lt;/h3&gt;

 &lt;h3&gt;78. Есть топик, мы консьюмером что-то из него читаем. У нас микросервисы. Нагрузка увеличилась. Датчики стали много всего писать. Наш один консьюмер не справляется все вычитывать. Как в Kafka с этим справляются?&lt;/h3&gt;

 &lt;h3&gt;79. В outbox лежит запись, шедулер пытается отправить ее в Kafka. У нас лежит запись в базе. Мы отправляем событие в Kafka, запись в базу не прошла. Шедулер считает, что событие не отправлено, отправляем его повторно. Запись в БД проходит и мы считаем что событие отправлено. Получается, что в Kafka происходят два события, по одной и той же записью. Как это решить?&lt;/h3&gt;

 &lt;h3&gt;80. По организации топиков, консьюмеров. Есть 50 консьюмеров. Что нужно сделать, чтобы все консьюмеры что-то вычитывали с одного топика?&lt;/h3&gt;

 &lt;h3&gt;81. Есть 2 сервиса, которые параллельно обрабатывают одни и те же сообщения и пишут в разные места. Тогда сколько консьюмер групп?&lt;/h3&gt;

 &lt;h3&gt;82. Неблокирующую обработку в Kafka можно создать двумя способами. Какими?&lt;/h3&gt;

 &lt;h3&gt;83. Есть топики, есть партиции, допустим две. Каждая партиция это отделный набор сообщений по своим offset. В двух партиция может быть одинакой offset. Если для каждой консюмер группы хранить один offset на топик, то мы не знаем к какой партиции этот offset относится.&lt;/h3&gt;

 &lt;h3&gt;84. Есть пять топиков. Каждый из них считается отдельной Consumer Group. И мы в один топик добавляем еще одного Консюмера. Где будет происходить ребалансировка и что с чем?&lt;/h3&gt;

 &lt;h3&gt;85. Есть 3 брокера. Есть 3 партиций, или 6 партиций. За счет чего достигается отказоустойчивость?&lt;/h3&gt;

 &lt;h3&gt;86. Есть много реплик в Kafka. Мы хотим гарантировать сохранение сообщения, но не записывать на все реплики. Что сделать? В топике 100 партиций&lt;/h3&gt;

 &lt;h3&gt;87. У тебя есть сообщение с одним и тем же ключом. Ты можешь записать их в несколько партиций?&lt;/h3&gt;</description></item><item><title>Микросервисы, REST, дизайн систем, деплой</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/microservices-system-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/microservices-system-design/</guid><description>&lt;h1&gt;Микросервисы, REST, дизайн систем, деплой&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Сервис в рамках транзакции сохранил в БД и должен еще записать в Kafka, но отключили свет. Как предусмотреть, что в БД закомичены данные, которые не дошли до конца?&lt;/h3&gt;

 &lt;h3&gt;2. Сервис закупок хранит количества остатка товара на складе. Пользователь выбирает товары в приложении и видит, сколько товаров осталось. Этот сервис проскалирован и используется кеширование для количества остатка товара. Какой кеш лучше локальный или распределенный? - Если сделаем локально, будут ли проблемы? - С другой стороне, если товар в одном экземпляре, у каждого клиента это записано. Что может случиться?&lt;/h3&gt;

 &lt;h3&gt;3. Стратегии деплоя. Сервис работает в проде, новый релиз с серьезным багом. Если такой релиз выкатим, а предыдущий убьем, будет больно. Какие более плавные подходы деплоя?&lt;/h3&gt;

 &lt;h3&gt;4. У тебя был монолит, билдился 40 минут. Если надо раскатить предыдущую версию, придется ждать 40 минут. Есть ли менее болезненные подходы?&lt;/h3&gt;

 &lt;h3&gt;5. Есть веб-сервис на Tomcat, Spring Boot. Ты написал Controller получения имени пользователя по id. За именем пользователя идешь в БД Postgres. Запускаешь этот сервис на одноядерной системе, ожидаешь нагрузку около 100 запросов в секунду. Будет ли это работать?&lt;/h3&gt;

 &lt;h3&gt;6. Одноядерная система. Запускаем сервер, но ручка вычисляет числа Фибоначчи. Что-то изменится? - Как это будет выглядеть со стороны метрик? - Со стороны пользователей это будет выглядеть так, что запрос очень долго выполняется? Что будет с CPU? На сколько он будет нагружен?&lt;/h3&gt;

 &lt;h3&gt;7. Нужно передать на сервер логин и пароль. Через что будем делать? Почему?&lt;/h3&gt;

 &lt;h3&gt;8. Есть сервис, который вызывает другой сервис по http. Мы используем RestTemplate или Feign Client. Мы должны взять метод, что-то сделать, обработать, в базу положить. И хотим весь процесс сделать асинхронным, чтобы метод не блочил систему. Как это реализовать?&lt;/h3&gt;

 &lt;h3&gt;9. Есть API, мы торчим наружу get запросом, с помощью которого туда передается команда. В рамках API выбираются очень большие данные, их нужно будет отправить в Kafka. За месяц накапливается 2 млн записей таблицы и их нужно выгрузить в Kafka. Какие подводные камни могут быть, если наружу торчим get запросом? На фронт нужно отправить количество записей&lt;/h3&gt;

 &lt;h3&gt;10. Одно и то же приложение нужно запустить в двух разных окружениях. Как это сделать проще всего?&lt;/h3&gt;

 &lt;h3&gt;11. Пишешь приложение, на локалке все работает, отдаешь в сборку. DevOps запускает на проде, там все падает, не подключается к БД, не подключается к Kafka. Что делать?&lt;/h3&gt;

 &lt;h3&gt;12. Хотим запускать приложение на нескольких стендах: dev, prod. Есть выбор: использовать Spring, либо собственную Статическую Фабрику. Где будет удобнее? Продолжение ситуации. Есть подключение к БД. В Абстрактной Фабрике есть конфиги, объекты, я сам создаю инстанс. На другом стенде придется создать другой класс с другими конфигами. И подкладывать нужный объект для каждого стенда. Как это в Spring реализовано?&lt;/h3&gt;

 &lt;h3&gt;13. Синхронизация микросервисов, чтобы только один микросервис отправил запрос, а остальные не отправляли. Есть монолит, есть Sheduled, который идет в БД, строит отчет, отправляет сообщение в Kafka. Если есть второй инстанс, то оба отправят в Kafka сообщение, а нам нужно только одно сообщение.&lt;/h3&gt;

 &lt;h3&gt;14. Один сервис вызывает другой сервис. Где может возникнуть задержка? На что обратить внимание, что бы уменьшить время задержки?&lt;/h3&gt;

 &lt;h3&gt;15. Работа с БД в микросервисах. Используем подход Database per Microservice. Как добиться той же ситуации, как с транзакциями?&lt;/h3&gt;

 &lt;h3&gt;16. Работает только синхронно и в диалоговом режиме. Посылает гет запрос и должен получить ответ. Сложность в том, что данные которые нужно получить собираются асинхронно. Как совместить асинхронность и синхронность?&lt;/h3&gt;

 &lt;h3&gt;17. Есть приложение, навешал туда Lock-ов, все работает четко. По бизнесу конфликтов нет. Начал горизонтально масштабировать свое приложение, и полезли проблемы. Почему Lock-и перестали спасать после горизонтального масштабирования? Горизонтальное масштабирование - приложение работало в одном экземпляре, стало в двух экземплярах работать&lt;/h3&gt;

 &lt;h3&gt;18. Есть запрос от клиента в какой-то из наших контроллеров, через что проходит запрос?&lt;/h3&gt;

 &lt;h3&gt;19. У тебя есть бизнес процессы, есть микросервисы. Микросервис отправки сообщений и микросервис бизнесс логики. Как ты будешь их интегрировать? Какой протокол и какую технологию выберешь?&lt;/h3&gt;

 &lt;h3&gt;20. Тебе запрещено работать с Kafka. Есть только REST. Микросервис который отвечает за работу оборудования. Он оставляет заявку сервису, который регистрирует и составляет расписание проверок. Как это реализовать по REST. Составление расписания раз в 8 часов&lt;/h3&gt;

 &lt;h3&gt;21. Внедрение гарантий доставки. Если мы добавляем запись в БД, то как проверять, что случилось с клиентом? Клиент тоже должен взаимодействовать с БД?&lt;/h3&gt;

 &lt;h3&gt;22. Есть сервис, который по эндпоинту обновляет что то в базе. В эндпоинт могут одновременно обратиться с разных мест. По умолчанию Spring boot может добавить в базу сразу два одинаковых запроса. В итоге мы ломаем логику. Как решить эту проблему?&lt;/h3&gt;

 &lt;h3&gt;23. У нас нет REST, пришел менеджер, хочет ввести REST. Точно ли нам надо, хорошо ли? Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;24. Как завернуть Java приложение в Docker? Есть JAR. Расскажи пошагово&lt;/h3&gt;

 &lt;h3&gt;25. Если у нас злоумышленник сворует рефреш токен, он не сможет получить новый access?&lt;/h3&gt;

 &lt;h3&gt;26. REST. Ты сделал Get запрос, как он получает данные? Что тебе надо сделать, чтобы получить определенные данные?&lt;/h3&gt;

 &lt;h3&gt;27. Есть старый монолит и новые микросервисы. Старую БД мигрировать не хотим. Если нагрузка повышается, то старый монолит начинает отказывать. Каскадно микросервисы начинают отключаться. Фронт отключился. Как сделать так, чтобы старый микросервис не особо влиял на текущую реализацию? Как выжить в периоды пиковой нагрузки?&amp;hellip;Продолжение ситуации. Circuit Breaker отрубил микросервис, хорошо все заработало. Но нас начали DDOS-ить. Реальные клиенты начинают получать timeout. Что делать?&lt;/h3&gt;

 &lt;h3&gt;28. Как написать интеграцию с другими сервисами? С чего начнешь?&lt;/h3&gt;

 &lt;h3&gt;29. Есть Сервис который принимет http запрос и этому Сервису нужно сходить в другой Сервис и принять от него запрос и передать первому Сервису. Запросы через Kafka в синхронном режиме. Код должен принять http запрос и дать синхронно ответ и в промежутке вызвать Kafka.&lt;/h3&gt;

 &lt;h3&gt;30. Банковское приложение. Есть несколько фронтендов. Браузерый и мобильный. Есть общее API. Есть общее ядро, которому все равно откуда приходят запросы. Фронтенды ожидают свои JSON.&lt;/h3&gt;

 &lt;h3&gt;31. Что сделать для создания endpoint для POST запроса?&lt;/h3&gt;

 &lt;h3&gt;32. В Сервисе есть обращение к Google api. Как сделать так, чтобы при тестах не отсылались запросы в сторонние сервисы?&lt;/h3&gt;

 &lt;h3&gt;33. Предположим, разработали микросервис на спринге и есть бизнес-логика по забору данных, есть &amp;ldquo;тонкое место&amp;rdquo;. Что делать будем, как решать проблему?&lt;/h3&gt;

 &lt;h3&gt;34. Есть бизнес, где функционал очень связан. Микросервис большой. Он может оставаться микросервисом? Или это уже монолит?&lt;/h3&gt;

 &lt;h3&gt;35. Есть сервис, который нужно протестировать. В сервисе есть внедрение стороннего компонента, хочу этому компоненту придать определенное поведение. Тест с какой аннотацией нужно сделать заглушкой?&lt;/h3&gt;

 &lt;h3&gt;36. Нужно разработать систему уведомлений, которая поддерживает несколько каналов доставки. Например email, смс, пуш уведомления. Нужно спроектировать так, чтобы система поддерживала расширение в виде добавления новых каналов доставки.&lt;/h3&gt;

 &lt;h3&gt;37. Есть некоторый эндпоинт, к обращению к которому происходит 500 ошибка и пользователь получает StackTrace. Не хотим, чтобы пользователь это видел. Нужно сделать, чтобы при ошибке пользователь получал осмысленное сообщение. Как это сделать средствами Rest и Spring MVC&lt;/h3&gt;

 &lt;h3&gt;38. Разрабатываешь новый Hello сервис. Есть один get метод. Поднимаем в Спринг Сервис. Из Постмана посылаем запрос Get. Опиши что происходит на пути следования запроса. От нажатия кнопки до того как запрос пришел в Сервис&lt;/h3&gt;

 &lt;h3&gt;39. Представь, что проектируем приложение. Нужно сохранить объект. Например сессию пользователя или покупку пользователя. Какую БД выбрать?&lt;/h3&gt;

 &lt;h3&gt;40. В k8s поднимаем более одного экземпляра микросервисного приложения. Возможны подводные камни, связанные с синхронизацией. Были ли такие ситуации? Какие проблемы?&lt;/h3&gt;

 &lt;h3&gt;41. Есть два сервера, ты хочешь подружить их по TLS. Что для этого нужно?&lt;/h3&gt;

 &lt;h3&gt;42. Банковское приложение. Пользователь хочет сделать перевод. В БД надо поменять запись и отправить сообщение в очередь. Как это сделать транзакционно?&lt;/h3&gt;

 &lt;h3&gt;43. Банковское приложение. Хотим сделать вызов на перевод денег. Отваливается сеть. Как сделать запрос только один раз? Как точки зрения приложения сделать так, чтобы ничего не задублировалось из-за падения сети. т.е. запрос от пользователя ушел и сразу потерялась связь, но запрос отработал. Что делать?&lt;/h3&gt;

 &lt;h3&gt;44. Есть запрос, который должен возвращать разные ответы. Например, запрос должен сохранять данные по ИП. Если данные сохранились, ответ 200. Если данные уже есть, то возвращается код 409 и полностью другой ответ. Как реализуешь такую логику?&lt;/h3&gt;

 &lt;h3&gt;45. Архитектура приложения, потенциальный Highload. Пришла задача от бизнеса. Есть данные на входе, например ИНН, что-то с ними делаем. На выходе генерируем excel файлы с данными. При этом, в запросе нам могут отправлять другие файлы из внешних API. В полученном запросе может быть от 1 до массива из тысяч ИНН-ов. За сутки может быть от 100 до 10 млн запросов к сервису. Нам выделили не мощный сервис. Нужно выдерживать нагрузку. Когда происходит генерация excel, не должен блокироваться сервис с REST. Как архитектурно это реализовать?&lt;/h3&gt;

 &lt;h3&gt;46. Существует горизонтально масштабируемый сервис на базе Spring. В его зоне ответственности есть реляционная БД с таблицей пользователей. Необходимо реализовать scheduler, который раз в месяц будет отправлять пользователям некоторый email. Допустимая задержка отправки - 1 час. Опциональное усложнение - инстансы приложения должны делить между собой список рассылки. Задача: гарантировать, что каждый пользователь получает ровно один email&lt;/h3&gt;

 &lt;h3&gt;47. На Gateway приходит запрос /user , запрос авторизуется. У вас один сервис, у него 3 инстанса. Как Gateway поймет, куда ему закинуть запрос? Какие есть варианты?&lt;/h3&gt;

 &lt;h3&gt;48. Retry. Есть сервис A и сервис B. Мы хотим из A пойти в B. Делаем запрос. ConnectionTimeout, либо сервис B лежит. И мы делаем Retry. В чем минус такого подхода? Как бы ты сам реализовал Retry, если нет Kafka, и мы идем по REST к сервису, чтобы получить данные?&lt;/h3&gt;

 &lt;h3&gt;49. Микросервис активно работает с Kafka: много пишет в нее, много читает из нее. И с БД работает микросервис. Как решить проблему с Data Race без блокировок на таблицу? Есть набор данных, который передается в Kafka: объекты с каким-то содержанием. Объекты принадлежат разным родительским типам. Как использовать Kafka для оптимизации? Пример: есть датчик погоды, который очень активно шлет информацию об изменениях погоды. Мы эту инфу сохраняем в БД. Как обеспечить, чтобы эта инфа сохранялась последовательно, чтобы было консистентное состояние БД, ничего не терялось, ничего не перезаписывалось? На один объект может приходить 10 тыс изменений. Потоковая обработка, не хотим ничего ждать&lt;/h3&gt;

 &lt;h3&gt;50. Проектируем банковское приложение. Есть кнопка для перевода с одного счета на другой. Хотим, чтобы во время обрыва связи, перевод выполнился только один раз. Как нам такое организовать?&lt;/h3&gt;

 &lt;h3&gt;51. Массовая рассылка. Нужно разослать 200 тыс. push уведомлений. Какое простое решение без Kafka, без RabbitMQ? Как это организовать без влияния на инфраструктуру?&lt;/h3&gt;

 &lt;h3&gt;52. Реальная первая задача будет на проекте. Есть Web, Android, iOS. Это нативные клиенты. Нам нужно прогрузить excel размером 2Gb. У клиента есть этот файл, а у нас есть ingress controller, который принимает эти файлы. Перед ним NGINX, после него NGINX. И Ingress-ов 20 штук. Но инфраструктуру сейчас не обсуждаем. Тебе нужно донести этот тяжелый excel документ до некоторого сервиса, которого пока не существует. Этот excel в базу мы положим уже со столбцами, с определенными типами, ячейки будем процессить. Может млрд ячеек придется процессить. Как будешь решать задачу?&lt;/h3&gt;

 &lt;h3&gt;53. У вас небольшой сервис. Если завтра поток возрастет в 10 раз, какие ваши действия? Архитектурный взгляд&lt;/h3&gt;

 &lt;h3&gt;54. Есть приложение, работает в проде, все хорошо. В одном из бизнес-процессов приложения мы отправляем email клиенту. Своего email-сервиса у нас нет, мы купили внешнюю API, в которую мы отправляем POST запрос, email адрес и текст, а внешний сервис отправляет email. За каждый вызов API мы платим 10р. Еще мы любим писать тесты, есть много тестов, есть ночные тесты, билды на новые коммиты. Оказывается, что в тестах мы тоже используем внешний API и платим деньги. А в тестах не хочется это делать. Как решить эту проблему?&lt;/h3&gt;

 &lt;h3&gt;55. У тебя есть сервис, который откидывает в кафку изменения сущности. С другой стороны есть сервис, который читает эти сущности. Как сделать так, чтобы у них эти сущности были в том же состоянии, что и в master-системе? Как ты это реализуешь, при условии, что сущности могут обновляться очень много раз в короткий промежуток времени. Также нужно обеспечить, чтобы у потребителя не получилось так, что более старые данные перезатирают более новые?&lt;/h3&gt;

 &lt;h3&gt;56. У нас есть контроллер, который вызывает сервис, который вызывает сохранения сущности в БД. У сущности есть поле автор. Приходит запрос на сохранение от какого-то пользователя. Мы хотим узнать что это за пользователь и записать его username в поле автор. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;57. У меня есть виртуалка (kuber не берем). В чем разница двух подходов? Первый вариант: я в рамках виртуалки пишу docker start container1, docker start container2. Второй вариант: я просто пишу java -jar свой_jar_файл&lt;/h3&gt;

 &lt;h3&gt;58. Есть микросервисы. Есть только один лог. Хочу подтянуть еще логи. Как это сделать в Grafana?&lt;/h3&gt;

 &lt;h3&gt;59. Есть твой микросервис, он хорошо законфигурирован. В application.yml указан определенный порт, законфигурировано общение с Redis. И на твоей локальной машине установлен тоже Redis. И у DevOps-а на сервисе, где он делал тестирование тоже что-то есть на этом же порту. Ты используешь Testcontainers. Берешь Redis. Но, если ты просто будешь поднимать тестовое окружение, то будет ругаться, говорить, что у тебя на таком-то порту что-то стоит. Ты хочешь сохранить application.yml, не хочешь делать отдельный profile. Что будешь делать, чтобы тест запустился? Какой мощный механизм у Spring Boot Test есть, чтобы показать, что ты игноришь определнный порт?&lt;/h3&gt;

 &lt;h3&gt;60. Есть два сервера. На первом сервере запускаем две виртуальных машины. На втором сервере linux с запущенным Docker-ом с несколькими контейнерами. На первом сервере на одной виртуалке запускаем приложение, которое умеет убивать операционную систему. И на втором сервере в докере тоже запускаем то же приложение. Выживет ли на первом сервере вторая виртуалка? Выживут ли остальные контейнеры на втором сервере после того, как в одном контейнере убили ОС?&lt;/h3&gt;

 &lt;h3&gt;61. Grafana. Есть счетчик, он растет от 1 до 5. Потом инстанс перезагрузился, счетчик опять начинает расти с нуля. Если такой трафик вывести в Grafana, он будет расти и падать. Как это решить?&lt;/h3&gt;

 &lt;h3&gt;62. Расскажи как ты будешь добавлять клиента в приложение магазина. Расскажи по слоям&lt;/h3&gt;

 &lt;h3&gt;63. У меня появился новый микрос, хочу с ним определить feign взаимодействие. Что представляет из себя Feign? Что мне надо определить? На Feign клиенте наверху указываешь путь до сервера, который вызываешь. У меня может оказаться, что путь разный на разных стендах (test, dev, prom). Как настраиваете стендозависимые пути на проекте?&lt;/h3&gt;

 &lt;h3&gt;64. Где в k8s наш Docker контейнер с приложением? Мы собрали jar-ник. Как его довести до pod? Где здесь сущность service и deployment? Если в k8s открыли вкладку с нашим pod-ом, то какая инфа содержится в deployment? Есть pod, мы говорим, что там крутится наше приложение. А pod это и есть наше приложение? Что находится в самом pod-е? Может ли там 10 приложение находиться, абсолютно разных, между собой не связанных?&lt;/h3&gt;

 &lt;h3&gt;65. Есть 2 сервиса (один из них user_service). Используется feign-client. И написано в k8s user_service:port_8080. Как второй java сервис находится просто по именованию? Мы пишем user_service и вся инфраструктура знает, как по IP открыть TCP соединение с ним? Где что указано в k8s?&lt;/h3&gt;

 &lt;h3&gt;66. Есть микросервис для списания денег со счета для оплаты Заказа. Его через REST вызывает другой сервис. Наш микросервис высоконагруженный, иногда много заказов приходит, два заказа от одного клиента может прийти. Какие проблемы могут быть? Как бы ты спроектировал?&lt;/h3&gt;

 &lt;h3&gt;67. Есть голосовой ассистент, который выдает востребованные вещи пользователю. Это диалоговая система. Пользователь что-то говорит ему, тот ему отвечает. Ассистент сам не может инициализировать взаимодействие с пользователем, только отвечает на его вопросы. Внутри есть платформа для взаимодействия на человеческом языке, и вызываются API. Система какие-то данные получает и отвечает пользователю. По факту это классический REST API. Но данные, которые нужны системе, собираются асинхронно. Есть отдельно запрос, который стартует сбор данных. И есть отдельно запрос, который ты дергаешь и получаешь либо ответ, либо просьбу ожидать. Какой алгоритм работы нужен, чтобы поженить между собой эти системы, и дать возможность голосовому ассистенту отвечать в синхронном режиме, получая данные из асинхронной системы?&lt;/h3&gt;

 &lt;h3&gt;68. If we delete container and recreate it from the image, will we have data from the previous run?&lt;/h3&gt;

 &lt;h3&gt;69. Микросервис. К нему пришло сто тыщ запросов. Где могут быть проблемы? По базе все ок, по памяти тоже все ок и по процессорному времени все ок. С чем еще могут быть проблемы?&lt;/h3&gt;

 &lt;h3&gt;70. Допустим у тебя есть очень медленный сервис и ему иногда прилетает прилетает миллионы записей и сервис неделю переваривает данные, как бы ты сделал по другому?&lt;/h3&gt;

 &lt;h3&gt;71. Как бы ты организовал обработку больших сложных JSON файлов? Какие библиотеки будешь использовать?&lt;/h3&gt;

 &lt;h3&gt;72. Тебе надо реализовать, чтобы на основную страницу мог зайти кто угодно, а на определенную страницу, смог заходить только человек с определенной ролью. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;73. User profile (User Service) is smth often requested by many services, and we don&amp;rsquo;t want to overwhelme such micro service. What we can do?&lt;/h3&gt;

 &lt;h3&gt;74. Есть 2 микроса. Первый микрос формирует заказы и хочет списать со счета клиента их оплату. Он передает номер счета и количество денег второму микросу. Второй микрос списывает с конкретного счета конкретную сумму. Работа сервиса интенсивная. Может оказаться, что у одного и того же клиента подряд быстро идут две оплаты. Что нужно сделать на втором микросе, чтобы все было хорошо? Может даже одновременно от первого сервиса прийти запрос: спиши с этого счета 500 р. Какие могут быть проблемы?&lt;/h3&gt;

 &lt;h3&gt;75. Есть класс. У него 2 метода: первый и второй. Ты повесил @Retryable на второй метод класса. Вызываешь из первого метода класса второй метод класса. Будет ли работать этот @Retryable?&lt;/h3&gt;

 &lt;h3&gt;76. Нужно написать клиентский сервис. Что бы ты писал в части строки запроса, или в ресурсах, property, yaml? Как бы указывал, что нужно сделать обращение к интеграции?&lt;/h3&gt;

 &lt;h3&gt;77. Мы реализовали сервис. Наша задача в нем реализовать функционал, который будет говорить о том, что сервис жив. Какие идеи?&lt;/h3&gt;

 &lt;h3&gt;78. Ты хочешь поднять локально БД. Она хранится в контейнере. Что нужно прописать, чтобы данные в БД не потерялись при дропе контейнера?&lt;/h3&gt;

 &lt;h3&gt;79. У тебя один микрос должен сохранять в две БД. Помимо Outbox, как еще можно реализовать, контролировать?&lt;/h3&gt;

 &lt;h3&gt;80. Есть сервис. Мы его масштабируем в K8s. Это же может привести к проблемам. Каким?&lt;/h3&gt;

 &lt;h3&gt;81. Ты сделал REST API для пагинации с выводом еще общего кол-ва страниц. Какие параметры ты бы выставил на вход? Или вообще никакие параметры не нужны?&lt;/h3&gt;

 &lt;h3&gt;82. Идемпотентный POST. Как будешь в коде проверять? К тебе приходит на создание сущность. Что будешь с ней делать?&lt;/h3&gt;

 &lt;h3&gt;83. С мобильного интернета хочешь оплатить домашний интернет. Нажимаешь кнопку Оплатить. С мобильной сетью неполадки, происходит Сетевая Ошибка. Еще раз нажимаешь Оплатить, еще раз отправляется запрос. И запрос обрабатывается 2 раза, ты 2 раза оплачиваешь домашний интернет. Это норм?&lt;/h3&gt;

 &lt;h3&gt;84. У тебя есть какой-то вызов, тебе надо прикрутить Retry, чтобы при определенных ошибках еще раз вызывал сервис. Как это сделать?&lt;/h3&gt;

 &lt;h3&gt;85. У пользователя есть аккаунт и он поделился им со своим родственником. Теперь они делают заказы вдвоем с этого аккаунта. Что плохого может случиться в нашем коде в таком случае?&lt;/h3&gt;

 &lt;h3&gt;86. У нас n-ое реплик запущено и каждый поднимает планировщик, в outbox пишем и все реплики читают и отправляют одно и то же событие. Как эту проблему решить?&lt;/h3&gt;

 &lt;h3&gt;87. У тебя есть какой-то сервис, он может обращаться к разным экземплярам другого сервсиса. Был ли у вас какой нибудь сервис discovery в инфраструктуре, который мог регистрировать обращения и каким образом в этом случае происходила балансировка?&lt;/h3&gt;

 &lt;h3&gt;88. Тебе приходит задача написать crud микросервис. Расскажи, как инициализируешь проект, как назовешь пакеты, классы?&lt;/h3&gt;

 &lt;h3&gt;89. Допустим простых вариантов у нас нету. Тогда application event. В спринге application event бросается в самой поде, в том же самом инстенсе. Соответственно у тебя где то внутри будет обработчик. Таким образом задача доступа, когда у тебя много инстансов заходит в одну и туже таблицу в базе остается. Каким образом будешь решать?&lt;/h3&gt;

 &lt;h3&gt;90. У тебя поднято 3 инстанса, а тебе нужно обращаться по одному хосту. Как это реализовать?&lt;/h3&gt;

 &lt;h3&gt;91. Нам нужно реализовать сервис лайков, например, во ВКонтакте или Instagram. Нам фронт присылает по REST, что такой-то пользователь поставил лайк. Нужно запроектировать backend так, чтобы уметь сохранять лайк, показывать количество лайков у конкретного поста и показывать, какой пользователь поставил этот лайк. При этом нагрузка 100 тыс RPC или более. С учетом такой нагрузки нужно придумать, как запроектировать такую систему используя современные средства разработки?&lt;/h3&gt;

 &lt;h3&gt;92. Мы написали какое-то большое приложение по документообороту. Мы сделали журналирование над документами. Загрузили документ - зажурналировали. Все операции (предосмотр файла, загрузка) логируются в таблицу. Мы вывели это в продакшен. Задача от бизнеса - сделать одностраничный сайт с таблицей журнала. Разработчик не заморачивался, сделал findAll() и отдал на фронтенд. На фронте сделал логику. Пока пользователей было мало - работало все хорошо. Появилось 100 пользователей и перекладывают около 100ГБ файлов в месяц. Прошло полгода и таблица весит 500МБ. На фронтенд передается 500МБ данных, браузер ломается. С нашей стороны нужно решить проблему на бэкенде. Какой метод бы предложил?&lt;/h3&gt;

 &lt;h3&gt;93. Есть RESTController метод GET в Spring Boot приложении. Возвращает метод модель книжек. Пишу get &amp;hellip;book_id, предполагаю, что вернется книжка по id. От чего будет зависеть, в каком формате будет отдавать RESTController? Я написал BookDTO. У нее какие-то атрибуты. Те атрибуты, которые нужны для фронта я отдаю&lt;/h3&gt;

 &lt;h3&gt;94. У тебя есть микросервис взаимодействия с фронтендом. Как сделать так, чтобы условно больше 50 запросов в секунду сервис не принимал.&lt;/h3&gt;

 &lt;h3&gt;95. Как спроектировать систему. У вас REST сервис, который вы можете вызвать одновременно не больше пяти раз. Если больше пяти раз то выбрасывается 429 ошибка. Как вы спроектируете систему если у вас есть Kafka? Как настроиться консьюмер, чтобы не превышал количество разрешенных вызово?&lt;/h3&gt;

 &lt;h3&gt;96. Есть большая сущность. Она хранит внутри подсущности key-value. Нужно обновлять ее. Приходит часть сущностей. Как избежать потерянных update-ов?&lt;/h3&gt;

 &lt;h3&gt;97. Есть виртуальная машина. У нас есть 2 сервиса, для них есть 2 images, и делаем для них docker run. Это первый вариант. Второй вариент: выкачали с Nexus артифактори наши jar-ники. И на этой же виртаульной машине делаем java-jar без Docker. В чем разница этих двух вариантов?&lt;/h3&gt;

 &lt;h3&gt;98. У тебя есть репозиторий, он используется для получения данных. Какие шаги применяются для получения данных? По шагам&lt;/h3&gt;

 &lt;h3&gt;99. Ты пишешь микросервис для получения статистики продаж. Как бы ты выставил процесс аутентификации и авторизации? Как ты будешь защищать сервис?&lt;/h3&gt;

 &lt;h3&gt;100. Представим, что падает заявка на получение кредита и когда вы получаете кредит, у вас есть четкая последовательность. Это скоринг клиента, двинуть его на другую операцию и выдать ему кредит и пополнить его карту. Как вы это реализовали?&lt;/h3&gt;

 &lt;h3&gt;101. JWT Token. Сервис выдал нам токен, от фронта пошел на бэк, передал токен. Как понять, что фронт передал нам нормальный токен?&lt;/h3&gt;

 &lt;h3&gt;102. JWT Token. Я посмотрел токен, исправил его поля. Токен будет испорчен?&lt;/h3&gt;

 &lt;h3&gt;103. Есть приложение HelloWorld. Контроллер, сервис. Сервис вызывает JPA репозиторий. Интерфейс получается. Аннотации Transactional нигде нет. По репозиторию делаем GET. Получаем сущность, у которой есть Lazy поле. Мы это Lazy поле делаем GET, но делаем в контроллере. Получим ли мы ошибку?&lt;/h3&gt;

 &lt;h3&gt;104. Микросервисы. Есть два сервиса, которые общаются между собой только через REST. Сервис А запрашивает у сервиса B какую-то информацию. Если берем классический REST-запрос, то мы должны получить от сервиса B ответ, чтобы двигаться дальше, это синхронное взаимодействие. Как мы можем организовать через REST асинхронное взаимодействие. С командой, которая разрабатывает сервис B мы можем о чем-то договориться&lt;/h3&gt;

 &lt;h3&gt;105. Есть два инстанса. Есть клиент должнен заплатить по запросу. Гейтвей перенаправляет на первый инстанс, он работает долго и гейтвей решает, что там таймаут и перенаправляет реквест на второй инстанс. Второй инстанс его успешно процессит и все удачно выполняет. После просыпается первый инстанс, видит тот же самый реквест, делает коммит. По факту деньги у юзера списались два раза. Как решить проблему?&lt;/h3&gt;

 &lt;h3&gt;106. В одно и тоже время купили два мороженных. Все одинаково, но по факту надо списать деньги два раза. Что делать? Как раздеять идентичность и разность?&lt;/h3&gt;

 &lt;h3&gt;107. Есть инстанс юзеров. Два микросервиса. Чтобы создать полностью юзера, ему нужно присвоить роль. Мы получаем реквест на создание юзера, все проходит, мы создаем юзера и по какой то причине роли падают и юзер удаляется. До ошибки, кто-то запросил всех юзеров. Как избежать ситуацию, чтобы возвращались польностью сконфигурированные юзеры?&lt;/h3&gt;

 &lt;h3&gt;108. Есть клиент и сервер. Клиент у нас продвинутый, на клиенте регистрируются продажи. Продажа формируется на клиенте, отсылается на бекенд, бекенд ее принимает, валидирует, сохраняет, 200 ОК. На клиенте реализована логика, что если у нас бек не доступен или 500, то он хранит ее в локадж сторедже и когда очередь отправки он все неуспешные отправляет. Если клиент не получил 200 ОК по причине сеть оборвалась. Положили в очередь, повторно отправили и случился дубль. Как решить эту ситуацию&lt;/h3&gt;

 &lt;h3&gt;109. Если применить хореографию к 10 сервисам, какие проблемы могут возникнуть?&lt;/h3&gt;</description></item><item><title>Отладка и производительность</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/debugging-performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/debugging-performance/</guid><description>&lt;h1&gt;Отладка и производительность&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Действия при OutOfMemory. Сервис перезагружается каждые несколько часов&lt;/h3&gt;

 &lt;h3&gt;2. ЦПУ улетел вверх. Твои действия.&lt;/h3&gt;

 &lt;h3&gt;3. Приходил запрос от саппорта. Клиент жалуется, что у него тормозит конкретная страница. Как будешь начинать копать задачу и куда будешь двигаться.&lt;/h3&gt;

 &lt;h3&gt;4. Есть микросервис. Есть ендпоинт. Ендпоинт не укладывается по времени работы на какой то ступени нагрузочного тестирования. Нужно ускорить его работу. Как приступить к этой задаче? Предположим у нас нет БД. Какие болевые точки могут быть?&lt;/h3&gt;

 &lt;h3&gt;5. Есть java сервер. Сервер завис. Как подойти к этой проблеме?&lt;/h3&gt;

 &lt;h3&gt;6. Микросервис уходит в рестарт по памяти. Твои дейстия? OutOfMemoryException&lt;/h3&gt;

 &lt;h3&gt;7. Авторизация. Есть запрос. Как бэкэнд может узнать, какой пользователь делает запрос: из браузера или API? Как информация об авторизации, сессии передается в запросе? В каком заголовке эта инфа может передаваться?&lt;/h3&gt;

 &lt;h3&gt;8. В проде все было хорошо. И вдруг бэкэнд стал отвечать с длительностью 1.5 сек. Решили добавить кэш, добавили, а время ответа возрасло до 1.6 сек. Почему такое могло случиться?&lt;/h3&gt;

 &lt;h3&gt;9. Деплоим версию сервиса (делаем выкатку на прод). Сервис поднимается, но спустя 20-60 сек падает по ошибке &amp;ldquo;Не хватает памяти OOM (Out of memory)&amp;rdquo;. Kuber убивает старый под, поднимает новый под, снова сервис поднимает. Но снова сервис падает, и снова. Куда бы ты посмотрел? Что бы сделал?&lt;/h3&gt;

 &lt;h3&gt;10. Есть микросервис, который сохраняет файлы в S3. Есть API загрузки файла. Какой-то микросервис дергает этот метод, передает файл, и микросервис, который сохраняет файл падает по OutOfMemoryError. Что будешь делать? Падает микросервис до сохранения файла на S3&lt;/h3&gt;

 &lt;h3&gt;11. Написали код, код возможно будет меняться. Есть риск возникновения ошибки при изменении кода. Какую стратегию тестирования выбрать?&lt;/h3&gt;

 &lt;h3&gt;12. Java сервер. Работал работал и завис. Как нам разобраться, что пошло не так?&lt;/h3&gt;

 &lt;h3&gt;13. Надо протестировать какой то объект. В него инжектится другой объект. На другой объект кидаем мок. Как проверить вызывается ли объект?&lt;/h3&gt;

 &lt;h3&gt;14. Мы сидим в k8s и никто не даст нам снять heap dump. Что делать? Есть Grafana. На какие метрики будем обращать внимание?&lt;/h3&gt;

 &lt;h3&gt;15. Написали сервис, в нем есть (а?)синхронный запрос. Flux, GraphQL. К нам в сервис приходит сущность. Мы должны записать ее в БД и сверить expected и received сущности. Тебе надо написать тест этого сравнения. Как будешь делать?&lt;/h3&gt;

 &lt;h3&gt;16. Идёт загрузка клиентов, большое количество данных. Нам хочется, чтобы грузилось 5-10 тысяч записей в секунду. Это данные передают пакетами. Они могут быть в базе данных, а могут и не быть. Какой быстрый алгоритм Вы бы организовали для добавление/обновление данных?&lt;/h3&gt;

 &lt;h3&gt;17. Есть приложение по заказу такси. Пользователь едет в метро, связь работает не очень хорошо. Он нажимает кнопку Заказать машину, а в ответ прилетает ошибка, второй раз нажимает - тоже ошибка. В третий раз нажимает - успех. Выходит из метро, его ждут 3 машины. Как такое могло произойти? Что надо переделать в приложении, чтобы избежать такой ситуации?&lt;/h3&gt;

 &lt;h3&gt;18. What happens if you create a changeset that runs on the development environment, but then you realize there’s a typo in a column name? How would you fix it?&lt;/h3&gt;

 &lt;h3&gt;19. Есть наш сервис. Мы из него делаем HTTP запрос во внешний источник (ВИ) в диком интернете. Каждый запрос во ВИ для нас платный. В логах видим, что от ВИ периодически приходят ошибки в течение определенного времени. Потом восстанавливается, потом снова ошибки. Может связано с часами пиковых нагрузок. Как избежать переплат? Мы переживем без ответа от ВИ, но хотелось бы получать ответ от него&lt;/h3&gt;

 &lt;h3&gt;20. Представьте, что вы fullstack разработчик и кто-то за Вас написал одностраничное приложение (бэк и фронт). У нас есть несколько графиков – это векторная графика, некий &amp;ldquo;пирог&amp;rdquo; для отображения данных и некая заключительная таблица, которая показывает полную информацию по всем данным, которые у нас есть. Они отображают действия на странице. Произошел большой наплыв активности, аналитика заполнилась и таблицы стали весить по 500 мегабайт, стало все зависать. Как оптимизировать запрос получения данных аналитики?&lt;/h3&gt;

 &lt;h3&gt;21. Мы хотим реализовать класс, который пишет логи. Он должен выдерживать большую нагрузку, допустим, 5000 записей в секунду. Хочу иметь возможность для каждого экземпляра логгера указывать имя файла, куда будут писаться логи. Как будем реализовывать? У нас есть метод, который принимает строку и пишет ее в файл. А если у Вас будет дикая запись днем, а ночью не наберется и 50 для чанка? Тогда эти элементы останутся висеть, пока не соберется чанк?&lt;/h3&gt;

 &lt;h3&gt;22. Вот к тебе пришли тестировщики и сказали, что нагрузочное тестирование провалилось. С чего ты начинаешь работать?&lt;/h3&gt;

 &lt;h3&gt;23. Есть веб сервис написанный на Java. Сервис отдает расписание чего нибудь. Допустим футбольные матчи. При частои обращении пользователя сервис начинает деградировать. Какие твои шаги решения?&lt;/h3&gt;

 &lt;h3&gt;24. Интеграционный тест. В проде есть огромный справочник. Ты хочешь в тестах использовать часть данных из справочника на проде. При прогонке тестов этот справочник должен быть внутри БД. Как бы реализовал? Чем больше вариантов решения, тем лучше&lt;/h3&gt;

 &lt;h3&gt;25. Пришли DevOps, говорят, на проме OutOfMemory. Как будешь диагностировать, смотреть? Есть Grafana или другой аггрегатор метрик. На какие метрики можно обратить внимание? Дамп с прома в банке снять нельзя&lt;/h3&gt;

 &lt;h3&gt;26. Есть тест на сервис. В случае тестирования сервисного слоя не так важно, что вернется, важно понимать, что бизнес-логика отработала корректно. Как понять?&lt;/h3&gt;

 &lt;h3&gt;27. Датчики очень часто заливают данные в таблицу. Таблица индексируется, из-за этого тормозит, какие-то датчики могут не залиться. Как можно решить проблему?&lt;/h3&gt;

 &lt;h3&gt;28. Ваша задача сделать REST API. С помощью каких инструментов будете его проверять?&lt;/h3&gt;

 &lt;h3&gt;29. Вам нужно протестировать взаимодействие двух сервисов. Один эталонный, второй вы разрабатываете. Какой подход к тестированию выбрать?&lt;/h3&gt;

 &lt;h3&gt;30. У нас есть сервис с двумя репликами. В какой то момент пользователей стало много и нагрузка на сервисы стала возрастать. Что нужно сделать, чтобы выдержать эту нагрузку?&lt;/h3&gt;

 &lt;h3&gt;31. У нас есть форма, через которую заводим пользователей в систему. Оператор нажимает на кнопку добавить пользователя и нечаянно нажимает два раза. Как на беке отобразиться эта ситуация? Как исправить проблему?&lt;/h3&gt;

 &lt;h3&gt;32. У тебя произошел SteckOverFlow или OutOfMemory. Представим, что у тебя продакшен сервис. Эти ошибка происходят в проде. Твои действия?&lt;/h3&gt;

 &lt;h3&gt;33. Система работает 24/7, нельзя ее останавливать. Микросервисы. 5 подов поднято (экземпляров одного сервиса). Они работают с одной БД. Поступила задача переименовать колонку в БД. Как можно выстроить процесс без остановки приложения?&lt;/h3&gt;

 &lt;h3&gt;34. На продакшене упало в логах OutOfMemory, но приложение продолжило работу дальше. Что будем делать?&lt;/h3&gt;

 &lt;h3&gt;35. Приложение работает штатно, но упал прод с OutOfMemory. Поняли, что из за реализации на двух коллекциях. Элементы монотонно возрастающие и х2 по памяти. Что будем делать?&lt;/h3&gt;</description></item><item><title>Чистый код, SOLID, паттерны и рефакторинг</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/clean-code-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/clean-code-design/</guid><description>&lt;h1&gt;Чистый код, SOLID, паттерны и рефакторинг&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Есть один монолит на Java 11. Он содержит системы, которые надо вынести. С чего бы начал?&lt;/h3&gt;

 &lt;h3&gt;2. У нас есть SOLID и есть множественная имплементация. С одной стороны говорят дробите, с другой принцип единой ответственности, как решить этот диссонанс?&lt;/h3&gt;

 &lt;h3&gt;3. Метод, в котором 150 if-ов, где сравниваются строки. Как отрефакторить?&lt;/h3&gt;

 &lt;h3&gt;4. Сервис А должен сходить в Сервис Б. Они не знают API друг друга. Какой паттерн помогает им понять?&lt;/h3&gt;

 &lt;h3&gt;5. Планирование архитектуры между несколькими сервисами. (нужно смотреть фотографию) Как бы ты создал Контракт взаимодействия между сервисом egrn и внутренними клиентами. И между egrn и внешним сервисом Росреестр.&lt;/h3&gt;

 &lt;h3&gt;6. В первом сервисе произошло событие, закоммитили в БД, нужно отправить сообщение в кафку. Кафка реализует мост at least once т.е. может много сообщений в кафку. Если транзакция закоммителась мы должны гарантированно другому сервису сообщать, что событие произошло. Какие паттерны реализовать?&lt;/h3&gt;

 &lt;h3&gt;7. Общаемся с сервисом по REST, получили сетевую ошибку, кажется, что можно вызывать заново. Что настроить на своей стороне? - паттерн Retry - Если соседний сервис очень слабый, то постоянный retry еще больше его положит - увеличить промежутки времени между retry или паттерн circuit breaker&lt;/h3&gt;

 &lt;h3&gt;8. Какие концепции в SOLID вы считаете самыми важными? А какими иногда в угоду бизнеса, скорости можно пренебречь?&lt;/h3&gt;

 &lt;h3&gt;9. Принцип Open-closed подразумевает изменение не только через наследование или имплементацию интерфейсов. Он про то, что старый код не надо трогать, но можно расширять. Кроме Enum, как еще можно расширить старый код? (адаптеры, декораторы собесещующему не подошли)&lt;/h3&gt;

 &lt;h3&gt;10. Создали абстрактный терминал класс и у него есть метод по работе с картой. Нужно реализовать этот абстрактный класс?&lt;/h3&gt;</description></item><item><title>Git и системы сборки</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/git-build-systems/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/git-build-systems/</guid><description>&lt;h1&gt;Git и системы сборки&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Есть Петя и Вася пишут каждый пишет в своей ветке, Пети понадобился один из комитов Васи как это сделать?&lt;/h3&gt;

 &lt;h3&gt;2. Есть maven репозиторий с API и репозиторий с вашим сервисом который подключен как зависимость, после обновления API и сервиса - обновленния не произошло, почему? Загрузиться ли в репозиторий изменения при использовании package?&lt;/h3&gt;

 &lt;h3&gt;3. Как в консоле скомпилировать и запустить класс?&lt;/h3&gt;

 &lt;h3&gt;4. Есть две зависимости А и Б. Каждая завист от библиотеки С. Первая от первой версии, вторая от второй. Какая версия библиотеки С подтянется в проект?&lt;/h3&gt;

 &lt;h3&gt;5. Есть Maven проект. В pom есть блок dependencies. У каждой зависимости можно указать scope. Какие scope существуют?&lt;/h3&gt;

 &lt;h3&gt;6. Ты локально разрабатываешь. Сделал коммит, но не пушил. Понимаешь в моменте, что есть лишний файл в коммите. Что нужно предпринять, чтобы убрать лишнее?&lt;/h3&gt;

 &lt;h3&gt;7. Шаги разработки. Вам поступила задача. Какие шаги у вас как у разраба от начала задачи до выкатки на dev стенд? От чего создаете ветку? Как ее меняете?&lt;/h3&gt;

 &lt;h3&gt;8. Ты локально разрабатываешь у себя в IDE. Понимаешь, что закоммитил пару файлов, которые не хотел коммитить. Но еще никуда не пушил их. Они локально закоммичены. Что делать?&lt;/h3&gt;

 &lt;h3&gt;9. У тебя есть фича, ты ее закоммитил, запушил. Развернули на тестовом стенде. Тестировщик тебе пишет, что у какого-то слова всего 1 символ неправильный. Надо поправить 1 букву. Как ты исправишь это с точки зрения git? Не хочешь плодить коммиты&lt;/h3&gt;

 &lt;h3&gt;10. Добавляешь в проект dependency, видишь, что оно тянет еще транзитивные dependencies. Одна зависимость мешает. Можно ли отключить ее?&lt;/h3&gt;

 &lt;h3&gt;11. Открыл Pull Request, решил свою задачу, тебе все зааппрувили. Но, пока аппрувили, поменяли те же файлы и у тебя возник конфликт, не можешь замержить.&lt;/h3&gt;

 &lt;h3&gt;12. Maven. Ты добавил себе dependency. Эта dependency несет транзитивную зависимость, ты хочешь от нее избавиться. Как бы ты избавился от нее?&lt;/h3&gt;

 &lt;h3&gt;13. Ты сделал задачу, закинул pull request (merge request). Тебе его зааппрувили, но пока аппрувили, случился конфликт, замержить ты не можешь. Как ты обычно решаешь такую проблему?&lt;/h3&gt;

 &lt;h3&gt;14. Ты пришел на новое место работы. Тебе дают ссылку на репозиторий, ты скачиваешь проект. Начинаешь собирать проект и у тебя не выкачиваются библиотеки из репозитория. С чем это может быть связано? Зависимости из мавен репы не скачиваются.&lt;/h3&gt;

 &lt;h3&gt;15. Библиотеки у тебя скачались, но при поднятии проекта у тебя падает приложение с ошибкой, что версии библиотек конфликтуют. Как решить эту проблему?&lt;/h3&gt;

 &lt;h3&gt;16. Есть коммит, был предыдущий коммит, нам надо откатиться до предыдущего коммита так, чтобы git отслеживал изменения и более позднего коммита тоже&lt;/h3&gt;

 &lt;h3&gt;17. У вас новый сервис и несколько разработчиков будут контребьютить. Как бы вы организовали процесс в гите?&lt;/h3&gt;

 &lt;h3&gt;18. Если кто-то уже влил в develop ветку свои изменения, а вы поправили какой-то класс и делаете pull request (merge request). И происходит конфликт. Как решаете конфликты?&lt;/h3&gt;</description></item><item><title>Командные процессы</title><link>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/team-processes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://krios2146.github.io/java-backend-interview-prep/thought-exercises/team-processes/</guid><description>&lt;h1&gt;Командные процессы&lt;/h1&gt;
&lt;hr&gt;


 &lt;h3&gt;1. Ты делаешь задачу и не успеваешь к дедлайну, какие твои действия?&lt;/h3&gt;

 &lt;h3&gt;2. Сервис интеграции с платежным шлюзом. Два метода. Как бы вы оценили эту таску и какой срок реализации таски?&lt;/h3&gt;

 &lt;h3&gt;3. Есть куб. Он состоит из тысячи маленьких кубиков. То есть у нас куб со стороной 10 на 10 на 10. Нужно найти количество кубиков, находящихся на внешнем слое этого куба. То есть мы можем крутить-вертеть, сколько мы можем в сумме увидеть на внешнем слое кубиков&lt;/h3&gt;

 &lt;h3&gt;4. Есть два микросервиса. Ты работаешь на одном из них. Пришли коллеги с другого сервиса и говорят, что они подготовили api и просят дать комментарий, может надо что-то подправить?&lt;/h3&gt;

 &lt;h3&gt;5. У тебя есть большое, сложное приложение. Десятки тысяч строк. К тебе приходит бизнес аналитик и ставит задачу. В интерфейсе должна появиться красивая кнопка с определенной логикой. Как ты будешь анализировать этот запрос и как ты будешь понимать куда писать, что писать?&lt;/h3&gt;

 &lt;h3&gt;6. Пришла новая технология и ты хочешь внедрить ее в команду или проект. Как бы ты это делал или как это у вас делается?&lt;/h3&gt;

 &lt;h3&gt;7. Представьте, что к вам пришел стажер. Чтобы вы рассказали ему о бинах?&lt;/h3&gt;</description></item></channel></rss>