N вопросов о злоупотреблениях со стороны начинающей компании

Java
N вопросов о злоупотреблениях со стороны начинающей компании

предисловие

Хорошие братья, как и титул, Ань Цзян был оскорблен, и оскорбленное тело было неиссякаемым, оно сводится к блюду (настоящему блюду).

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

Если вы берете интервью у компании, то говорят, что стартап был создан командой во главе с техническим боссом на Weibo (я не знаю, так ли это, во всяком случае, это большая фабрика) (конечно, это все еще в Гуанчжоу, у вас есть хороший брат, который хочет бросить ему вызов?Область комментариев скажите мне). Я вошел и задал вопрос для интервью, если быть точным, вопрос напрямую связан со стандартным байтом. Хороший парень смотрит на вопрос вероятности монеты, два алгоритма (помните, что один из них является алгоритмом на месте) и еще одинMysqlизMVCCПринцип реализации (похоже, тут другойsynchronizedиvolatileпринцип). Сделано за 45 минут.

Думаете, это закончилось? Еще больше оскорблял меня интервьюер: я практически перебивал меня, если говорил какой-то технический момент. как следующееHttp 与 Netty 数据传输的区别Эта тема изFeignиDubboвзято из разницы. Как бы это сказать, это всего лишь точка и деталь, перед этим режимом действительно сложно устоять! ! !

В теме я записал несколько хороших, на которые не ответили, и Ань Цзян не смог сказать, сложно это или нет (картинки все передвинул мой брат С, а в конце есть ссылка).
垃圾

Какова основная структура данных индекса Mysql

MysqlСтруктура данных, используемая индексом,B+дерево (на фото ниже), сB树Основное отличие в том, чтоB+Дерево различает листовые узлы и нелистовые узлы. Только конечные узлы хранят данные, а нелистовые узлы хранят только значения ключей.

Двусторонние указатели используются для соединения конечных узлов, а нижние конечные узлы образуют двунаправленный упорядоченный связанный список.B+树

Почему структура данных индекса Mysql выбирает дерево B+ вместо красно-черного дерева или других деревьев

Давайте поговорим об использовании этогоB+Достаточно немного дерева, и тогда я снова ответил одиночеством (спросил меня в тот момент, я был немного смущен, на самом деле, я знал это, но я не сказал ему).

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

  2. B+Данные различаются между конечными узлами и нелистовыми узлами, и только конечные узлы фактически будут хранить данные. так какMysqlизInnoDBмеханизм хранения один разIOОбъем данных, которые будут прочитаны на одной странице (по умолчанию 16 КБ).B树И конечные узлы, и нелистовые узлы будут хранить реальные данные, то есть по мере увеличения количества столбцов занимаемое пространство будет увеличиваться, соответственно дерево будет становиться выше, а количество дисковых операций ввода-вывода будет увеличиваться.

  3. использоватьB+Улучшенная поддержка поиска диапазона. Тут главное производительность.B树Поиск по диапазону также поддерживается, но его нужно искать вниз или вверх по дереву.B+Двунаправленный упорядоченный связанный список поддерживается в конечном узле, поэтому он, естественно, подходит для поиска по диапазону.

Как индексный файл Mysql загружается в память

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

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

等值查找
Предположим, мы запрашиваем данные со значением, равным 9. путь запроса磁盘块1->磁盘块2->磁盘块6.

Первый дисковый ввод-вывод: будет磁盘块1загрузить в память, пройти сравнение в памяти с нуля,9 < 15, налево, к адресации диска磁盘块2.

Второй диск IO: будет磁盘块2загрузить в память, пройти сравнение в памяти с нуля,7 < 9 < 12, на диск, обращающийся к расположению磁盘块6.

Третий диск IO: будет磁盘块6Загрузить в память, пройти сравнение в памяти с начала, найти 9 в третьем индексе, получитьData,еслиDataСохраненные записи строк, выборкаData, запрос заканчивается. Если адрес диска сохранен, данные должны быть извлечены с диска в соответствии с адресом диска, и запрос завершается. (Здесь следует различать, чтоInnoDBсерединаDataхранится как данные строки, аMyIsamХранится в адрес диска. )

Как TCP обеспечивает надежность передачи

Когда интервьюер спросил меня об этом, мой ответ был我不会(Это правда, я действительно не)!!!

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

  1. TCPМеханизм управления соединением трехстороннего рукопожатия и четырехсторонней волны при установлении соединения (я ответил только на этот в свое время, а потом интервьюер спросил, безопасна ли и надежна ли передача из-за этого. Очень хочу ответить да из).

  2. Контрольная сумма.TCPКонтрольная сумма вычисляется с помощьюUDPто же, добавить в расчет12byteПсевдозаголовок , объем проверки включаетTCPзаголовок и часть данных, ноUDPПоле контрольной суммы является необязательным, аTCPэто должно быть. Метод расчета такой: у отправителя весь сегмент делится на несколько16位Затем добавьте все сегменты и сохраните результат в поле контрольной суммы.Приемник использует тот же метод для расчета.Если окончательный результат состоит в том, что все биты контрольного поля равны 1, это правильно (0 в UDP является правильным), иначе будет ошибка.

  3. серийный номер.TCPДанные каждого байта нумеруются, что является порядковым номером. Эффект следующий:

  • 3.1 Гарантированная достоверность (когда в полученных данных всегда отсутствует определенный порядковый номер, это можно узнать сразу).
  • 3.2 Гарантировать упорядоченное поступление данных.
  • 3.1 Для повышения эффективности он может реализовывать множественную отправку и одно подтверждение.
  • 3.1 Удалить повторяющиеся данные.
  1. механизм ответа подтверждения (ACK).TCPНадежная передача данных достигается за счет механизма подтверждения. существуетTCPВ заголовке есть флаг -ACK, этот бит флага указывает, действителен ли номер подтверждения. Приемник подтвердит поступление данных последовательно, когда бит флагаACK=1При подтверждении того, что поле подтверждения заголовка действительно. При подтверждении значение поля подтверждения указывает, что данные до этого значения поступили по порядку. Если отправитель получит сообщение подтверждения для отправленных данных, он продолжит передачу следующей части данных, а если отправитель не получил сообщение подтверждения по истечении определенного периода времени, он запустит механизм повторной передачи.

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

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

  4. контроль заторов. Управление потоком решает проблему потери пакетов, которая может быть вызвана скоростью передачи между двумя хостами, и, с одной стороны, обеспечивает надежность передачи данных TCP. Однако, если сеть сильно перегружена, отправка данных в это время увеличит нагрузку на сеть, поэтому отправленный сегмент данных, вероятно, превысит максимальное время существования и не достигнет получателя, что приведет к потере пакетов. к этому концуTCPВводится механизм запуска, и сначала отправляется небольшой объем данных, как и в случае с Pathfinder, после определения текущего состояния перегрузки сети он решает, как быстро передавать данные. Здесь вводится окно перегрузки.

Разница между передачей данных Http и Netty

На самом деле вопросRPCвывел. я спросилDubboиFeignКакая разница? В это время Ань Цзян прыгнул в ловушку, потому чтоDubboиспользуетNettyтранспорта, а затем вызвать собственный метод через отражение, в то время какFeignчерезRestTemplateперечислитьHttpспособ интерфейса. Потом я попал в объятия интервьюера, что привело к этому вопросу, и я снова одиноко ответил.

Слова здесь в основном дляHttpиScoket,Nettyподдерживать себяHttpиз.

  1. HTTPЭто объектно-ориентированный объект, принадлежащий прикладному уровню.协议Scoketэто приложение сTCP/IPПротокол взаимодействия обеспечивает сокеты (Socket)Интерфейс.

  2. HTTPОтносится к короткому соединению (хотя длинное соединение поддерживается, но время соединения определяется сервером);ScoketЭто долгое соединение, обычноSocketсоединениеTCPсоединение, так чтоSocketКак только соединение установлено, обе стороны связи начинают отправлять содержимое данных друг другу до тех пор, пока обе стороны не разорвутся.

  3. HTTPОн основан на режиме запрос/ответ.Serverконец иclientРоли терминала не взаимозаменяемы;ScoketОн относится к полнодуплексной связи,Serverконец иclientмогут общаться друг с другом.

Сравнительная метафора:HttpЭто автомобиль, в котором предусмотрена определенная форма упаковки или отображения данных;SocketЭто движок, обеспечивающий возможность сетевого взаимодействия.

Ссылаться на:

Поймите все точки знаний об индексе MySQL за один раз

Как TCP гарантирует надежность