SQL, базы данных, индексы, ORM и миграции

SQL, базы данных, индексы, ORM и миграции #


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

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

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

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

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

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

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

8. Создали индекс на поле, делаем запрос на это поле, а индексы не сработали. Такое возможно? #

9. Запрос медленно работает Что делать? #

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

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

12. Почему нельзя сделать две БД на запись и на чтение? #

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

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

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

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

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

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

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

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

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

22. Представь, что ты проектируешь таблицу. Как ты в самом начале накидываешь индексы? #

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

24. Твой запрос перестал работать через некоторое время. Твои действия? #

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

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

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

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

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

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

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

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

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

34. Нужно делать поиск по большому количеству колонок. Не хочу делать индексы. Что можно придумать? #

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

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

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

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

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

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

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

42. Почему OneToMany Lazy, а ManyToOne Eager #

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

44. Описываешь структуру сотрудника предприятия. У сотрудника есть начальник и подчиненные. Как реализовать такую структуру? #

45. Делаешь рабочий проект. Как понять тебе нужна ORM или JDBC? #

46. Как с помощью LEFT и RIGHT JOIN получить выборку аналогичную FULL JOIN #

47. Можно в проде создать новое поле на работающей базе? #

48. Как в SQL посчитать уникальные значения по нескольким полям? Без использования DISTINCT, потому что поле высчитывается, например #

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

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

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

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

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

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

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

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

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? #

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

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

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

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

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

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

64. У нас есть B-Tree индекс по varchar столбцу. Мы делаем запрос “LIKE ? небольшой кусок текста ?”. Индекс будет работать? Какие есть варианты чтобы использовался индекс? #

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

85. Postgres. Есть система, которая занимается обработкой чего-то. Есть табличка, в ней ОЧЕНЬ много записей. У каждой записи есть статус. Модель изменения статуса линейная: “новая”, “в обработке”, “завершено”. Как оптимально быстро получить список еще незавершенных задач (которые не в статусе “завершено”)? Какие здесь есть проблемы? Как их решить? Как будешь реализовывать атомарность изменений при дублировании? #

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

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

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

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

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

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

92. Как заставить Hibernate проделать оптимистическую блокировку? #

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

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

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

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

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

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

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

100. У нас может индекс создаваться по несколькими полям, если я сделаю индекс по полям “а” и “b” BTREE индекс и сделаю запрос по полю “а”, отработает индекс или нет? #

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? #

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

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

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

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

106. SQL, пагинация. Как написать такой один SQL запрос для пагинации, чтобы общее количество записей тоже вернулось? SELECT * FROM table … LIMIT OFFSET. А что еще туда добавить? #

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

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

109. У тебя есть приложение, которое делает insert в базу, при это ты должен выстроить insert’ы таким образом, чтобы один insert шел за другим. Как это можно выстроить? #

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

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

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

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

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

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

116. Как можно удалить все данные из таблицы? #

117. Чем отличается в SQL COUNT(*) и COUNT(column)? Что лучше использовать? #

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

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

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

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

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

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

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

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

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

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

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

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

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

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

132. Написал скрипт в Liquibase, он выполнился и теперь мне нужно поправить этот скрипт. Что мне сделать? #

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

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

135. У меня 10 селектов и 2 пула. Как будет отрабатывать? #

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

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

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

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

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

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

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

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