Вопросы по mysql, которые необходимо задавать на собеседованиях в интернет-компании (часть 1)

интервью база данных MySQL SQL

图片描述
Это пиковый сезон приема на работу, и меня попросили подготовить несколько наборов вопросов для социального и школьного набора.

Введение: MySQL — это система управления реляционными базами данных, в настоящее время принадлежащая Oracle. Хотя производительность отдельной машины не так хороша, как у Oracle, она бесплатна и имеет открытый исходный код, имеет низкую стоимость в расчете на одну машину и пользуется популярностью у интернет-компаний с помощью распределенных кластеров.Это основная база данных интернет-компаний. .

Что такое транзакция базы данных? Какие были бы последствия, если бы не было вещей? Каковы особенности сделок?

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

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

Характеристики транзакций (ACID)

А, атомарностьТранзакция должна быть атомарной единицей работы; либо все ее модификации данных, либо никакие из них не выполняются. Часто операции, связанные с транзакцией, имеют общую цель и являются взаимозависимыми. Если система выполняет только часть этих операций, общая цель транзакции может быть нарушена. Атомарность исключает возможность обработки системой подмножеств операций.

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

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

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

图片描述
01

Что такое транзакция базы данных? Какие были бы последствия, если бы не было вещей? Каковы особенности сделок?

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

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

Характеристики транзакций (ACID)

A, атомарность Транзакция должна быть атомарной единицей работы; выполняются либо все ее модификации данных, либо никакие. Часто операции, связанные с транзакцией, имеют общую цель и являются взаимозависимыми. Если система выполняет только часть этих операций, общая цель транзакции может быть нарушена. Атомарность исключает возможность обработки системой подмножеств операций.

С, консистенция

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

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

Д, долговечность

После завершения транзакции ее влияние на систему остается постоянным. Эта модификация сохранится даже в случае фатального сбоя системы.

图片描述

«А переводит 100 в Б»

  1. Прочитайте баланс счета А (500).
  2. Операция по списанию со счета (500-100).
  3. Результат записывается обратно на счет А (400).
  4. Прочитайте баланс счета B (500).
  5. Счет Б выполняет операцию сложения (500+100).
  6. Результат записывается обратно на счет Б (600).

Атомарность:Гарантируется, что либо выполняются все процедуры 1-6, либо не выполняется ни одна из них. Если это ненормально, то откатитесь.

последовательностьПеред переводом на счетах А и Б было в общей сложности 500+500=1000 юаней. После перевода на счетах А и Б в сумме 400+600=1000 юаней.

изоляцияВ течение всего процесса перевода денег от A к B, пока транзакция не была зафиксирована (commit), при запросе счета A и счета B сумма денег на двух счетах не изменится.

УпорствоКак только перевод будет успешным (отправка транзакции), деньги на двух счетах действительно изменятся.

Что такое грязное чтение? Призрачное чтение? Неповторимое чтение? Каков уровень изоляции транзакции? Каков уровень изоляции Mysql по умолчанию?

  • Грязное чтение: транзакция A считывает данные, обновленные транзакцией B, а затем B откатывает операцию, после чего данные, считанные A, являются грязными данными.
  • Неповторяющееся чтение: транзакция A считывает одни и те же данные несколько раз, а транзакция B обновляет и фиксирует данные во время многократного чтения транзакции A, что приводит к противоречивым результатам, когда транзакция A считывает одни и те же данные несколько раз.
  • Фантомное чтение: системный администратор А изменил оценки всех учащихся в базе данных с конкретных баллов на оценки ABCDE, но в это время системный администратор Б вставил запись с конкретными баллами. Если запись не была изменена, это как если бы произошла галлюцинация, которая называется галлюцинацией.

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

Сяо А пошел что-то купить (10 000 юаней на его карте), когда он заплатил (транзакция была открыта), система заранее определила, что у него на карте было 10 000 юаней, как раз в этот момент! ! Жена Сяо А должна перевести все деньги на домашнее хозяйство и передать их. Когда система готова к списанию денег, она еще раз проверяет сумму в карте и обнаруживает, что денег не осталось (второй раз для проверки суммы, конечно, дождаться подачи транзакции женой на перевод количество). А будет очень подавлен

Анализ: это фиксация чтения.Если есть транзакция для обновления данных (UPDATE), транзакция операции чтения должна дождаться фиксации транзакции операции обновления, прежде чем читать данные, что может решить проблему грязного чтения. Но в этом случае два идентичных запроса в области транзакции возвращают разные данные, чтение которых невозможно.

Repeatable readПовторное чтение, то есть при запуске чтения данных (транзакция открыта), операции модификации больше не допускаются

Пример: Сяо А идет что-то купить (на его карте 10 000 юаней), когда он оплачивает счет (транзакция открыта, и операции модификации других транзакций не разрешены), система тарификации заранее определяет, что на его карте есть 10 000 юаней. юань. В это время его жена не могла перевести сумму. После этого платежная система спишет платеж.

Анализ: повторные чтения могут решить проблему неповторяющихся чтений. Написав здесь, следует понимать, что неповторяемое чтение соответствует модификации, то есть операции UPDATE. Но также могут быть проблемы с фантомным чтением. Потому что проблема фантомного чтения соответствует операции INSERT, а не операции UPDATE.

Когда появятся галлюцинации?

Пример: Сяо А пошел что-то купить и потратил 2000 юаней, а затем его жена пошла проверить его записи о потреблении (полное сканирование таблицы FTS, открытие дел жены) и увидела, что это действительно 2000 юаней, в это время Сяо А потратил 10 000 на покупку компьютера, ВСТАВЬТЕ отчет о потреблении и отправьте его. Когда жена распечатала список потребления Сяо А (представленный делами жены), она обнаружила, что потратила 12 000 юаней, и, похоже, у нее были галлюцинации.

Сериализуемая сериализация

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

Уровень изоляции Mysql по умолчанию — Repeatable read.

Как достигается изоляция вещей?

Он основан на замках.

Какие замки есть? Ввести отдельно

В СУБД блокировки базы данных можно разделить на блокировки на уровне строк (механизм INNODB), блокировки на уровне таблицы (механизм MYISAM) и блокировки на уровне страницы (механизм BDB) в зависимости от степени детализации блокировок.

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

блокировка на уровне столаБлокировка на уровне таблицы — это блокировка с наибольшей степенью детализации блокировки в MySQL, что означает, что блокируется вся таблица текущей операции.Он прост в реализации, потребляет меньше ресурсов и поддерживается большинством движков MySQL. Наиболее часто используемые MYISAM и INNODB поддерживают блокировку на уровне таблицы. Блокировки на уровне таблицы делятся на разделяемые блокировки чтения таблицы (разделяемые блокировки) и блокировки таблицы с монопольной записью (эксклюзивные блокировки).
Функции:
Низкие накладные расходы и быстрая блокировка, отсутствие взаимоблокировок, высокая степень детализации блокировки, самая высокая вероятность возникновения конфликтов блокировок и самый низкий уровень параллелизма.

блокировка на уровне страницыБлокировка на уровне страницы — это блокировка в MySQL, степень детализации блокировки которой находится между блокировками на уровне строк и блокировками на уровне таблицы. Блокировки на уровне таблицы работают быстро, но возникают много конфликтов, а блокировки на уровне строк немногочисленны, но медленны. Так что возьмите компромиссный уровень страницы, заблокируйте соседние группы записей за раз.
Функции:
Накладные расходы и время блокировки ограничены между блокировками таблицы и блокировками строк; будут возникать взаимоблокировки; степень детализации блокировок ограничена между блокировками таблиц и блокировками строк, а степень параллелизма является средней.

Что такое тупик? Как с этим бороться? (Первые несколько вопросов - моя личная любимая серийная артиллерия, которая в основном показывает базовые навыки интервьюера)

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

Общие решения взаимоблокировок

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

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

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

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

Жизненный цикл SQL? Порядок ключевых слов?

  1. Сервер приложений устанавливает соединение с сервером базы данных
  2. Процесс базы данных получает запрос sql
  3. Разобрать и сгенерировать план выполнения, выполнить
  4. Считайте данные в память и выполните логическую обработку
  5. Через подключение на шаге 1 отправляем результат клиенту
  6. Закройте соединение и освободите ресурсы
    图片描述

1. FROM: выполните декартово произведение (перекрестное соединение) для первых двух таблиц в предложении FROM, чтобы сгенерировать виртуальную таблицу VT1.
2. ON: Применить фильтр ON к VT1, в TV2 вставляются только те, которые соответствуют действительности.
3. OUTER (JOIN): если указано OUTER JOIN (в отличие от CROSS JOIN или INNER JOIN), оно не найдено в зарезервированной таблице. Совпадающие строки добавляются к VT2 как внешние строки, в результате чего получается TV3. Если предложение FROM содержит более двух таблиц, результирующий Повторяйте шаги с 1 по 3 для результирующей таблицы и следующей таблицы, пока не будут обработаны все позиции таблицы.
4. ГДЕ: примените фильтр ГДЕ к TV3 и вставьте TV4, только если это правда.
5. GROUP BY: группирует строки в TV4 по списку столбцов в предложении GROUP BY для создания TV5.
6. CUTE|ROLLUP: вставьте супергруппу в VT5, чтобы сгенерировать VT6.
7. HAVING: примените фильтр HAVING к VT6, и только группы, для которых установлено значение true, будут вставлены в VT7.
8. SELECT: Обработайте список SELECT и сгенерируйте VT8.
9. DISTINCT: удалить повторяющиеся строки из VT8, продукт VT9.
10. ORDER BY: сгенерируйте курсор (VC10), поместив строки в VT9 в порядке списка столбцов в предложении ORDER BY.
11. TOP: выберите указанное количество или пропорцию строк с начала VC10, сгенерируйте таблицу TV11 и верните ее вызывающей стороне.

Что такое оптимистическая блокировка? Пессимистический замок? Способ реализовать?

Пессимистический замок:Пессимистическая блокировка относится к консервативному отношению к случайным изменениям данных, полагаясь на механизм блокировки, изначально поддерживаемый базой данных, для обеспечения безопасности текущей транзакции, предотвращения уничтожения целевых данных другими параллельными транзакциями или уничтожения данных других параллельных транзакций. для блокировки во время выполнения и снять блокировку после выполнения. Это может серьезно повлиять на возможности одновременной обработки системой длинных транзакций. Встроенная транзакция базы данных представляет собой типичную пессимистическую блокировку.
Оптимистичная блокировка:Оптимистичная блокировка, как следует из названия, очень оптимистична.Каждый раз, когда я иду получать данные, я думаю, что другие не будут их изменять, поэтому он не будет заблокирован, но при отправке обновления он будет судить, обновили ли его другие за этот период эти данные. Оптимистическая блокировка подходит для сценариев приложений с большим количеством операций чтения и меньшим количеством операций записи, что может повысить пропускную способность.
Как правило, поле номера версии добавляется для сравнения номера версии при каждом обновлении.

Как сделать пагинацию в случае больших данных?

Вы можете обратиться к ответу в руководстве по разработке Java для Alibaba.

图片描述

Что такое пул соединений с базой данных?

Из предыдущего вопроса о жизненном цикле sql мы видим, что соединение играет в нем важную роль, но частое создание и уничтожение — пустая трата системных ресурсов. Поскольку база данных больше подходит для длинных соединений, существует также пул соединений, который может повторно использовать соединения, поддерживать объекты соединений, выделять, управлять и освобождать, а также избегать различных проблем, вызванных созданием большого количества соединений с БД; в Кроме того, за счет постановки в очередь запросов также уменьшается влияние на БД.

Рекомендуемое чтение

Вопросы Redis, которые необходимо задавать на собеседованиях в интернет-компании

На собеседовании в интернет-компании необходимо задавать вопросы по mysql (ниже)

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

Наконец, я желаю вам всем гладкого интервью! Добро пожаловать в длинное нажатие и подписку~ Нерегулярно отправлять книги