Hang - XX тур по жестокому обращению с автомобилем

Java

После волны крещения мне пришлось подводить шрамы и болевые точки на теле. Конечно, квалификация слишком мелкая! !

1. Как хэш-индексы в MySQL разрешают конфликты

Честно говоря, я только что подумал об этой темеHashMapКак разрешается индекс в конфликте (с использованием метода застежки-молнии для разрешения конфликта и использования функции скремблирования для уменьшения конфликта).hashконфликт), для технологических стеков используется толькоMySQLinnodbB+Дерево, я могу только покорно сказать, что не знаю, не использовал ли я хэш-индекс. После этого путем поиска обнаруживается, что он должен быть решен так же, как HashMap.Если есть конфликт, конфликтующие элементы также помещаются в конфликтующий связанный список Hash.

2. Как определить уникальность класса

Этот вопрос очень плохой, перед этим вопросом были заданы некоторые предварительные вопросы (загрузчики классов) с ответами на этот вопрос. Но когда дело доходит до этого вопроса, я его не помню.类加载器 + 类路径Идентифицирован только один класс Java. Если совпадает только путь к пакету, невозможно определить, что это единственный класс.

3. При каких обстоятельствах MySQL не использует индекс

Для текущего использования стека технологийhibernateС точки зрения фреймворка я очень редко пишу sql. Тогда в настоящее время я знаю только, что если самое левое совпадение будет удовлетворено, оно пойдет, поэтому нечеткие запросы по другим индексам не пойдут. остальное не знаю! !

1. like '%abc' 或者 like‘%abc%’(不满足最左匹配,同时他不是覆盖索引查询)
2.where num/2=100 或者 subString(a,1,3)='ab'(索引参与表达式)
3.关联查询的时候,主键类型与外键类型不一致
4.OR查询条件中存在没有索引的列
5.数据量过少

Это мой простой запрос и краткое изложение ситуации без индексации (ситуация может быть недостаточно полной на данный момент, и я продолжу добавлять ее позже). Конечно, если вы идете на индекс, вы должны обратить внимание на ситуацию с покрытием индекса. И (5.7?) версия индекса pushdown и так далее.

4. Несколько способов полного клонирования в JAVA

  1. Реализовать интерфейс клонирования и переопределить метод clone().
  2. Объекты сериализуются и десериализуются.

Я помню это так, как будто в то время было больше двух путей. . . Я еще не запомнил (позже добавлю)

5. Почему MySQL самое левое совпадение?

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

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

6. Что такое атрибуты столбца и значения типа в объяснении

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

table: показывает, к какой таблице относятся данные этой строки.

type: Это важный столбец, показывающий, какой тип соединения используется. Типы соединений от лучшего к худшему: const, eq_reg, ref, range, index и ALL.

possible_keys: отображает индексы, которые можно применить к этой таблице. Если пусто, нет возможных индексов. Соответствующий оператор можно выбрать из оператора WHERE для соответствующего поля. Этот список создается на ранней стадии процесса оптимизации, поэтому некоторые из перечисленных индексов могут оказаться бесполезными для последующих процессов оптимизации.

key: Фактический используемый индекс. Если NULL, индекс не используется. В редких случаях MYSQL выберет недостаточно оптимизированный индекс. В этом случае вы можете использовать USE INDEX(имя_индекса) в операторе SELECT, чтобы принудительно использовать индекс, или IGNORE INDEX(имя_индекса), чтобы заставить MySQL игнорировать индекс.

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

key_len: Длина используемого индекса. Чем короче длина, тем лучше без потери точности

ref: показывает, какой столбец индекса используется, константа, если возможно

rows: количество строк, которые, по мнению MYSQL, необходимо проверить, чтобы вернуть запрошенные данные.

extra: дополнительная информация о том, как MYSQL анализирует запрос

Столбец «Тип» в основном говорит нам, как получить доступ к таблице, которая в основном включает следующие централизованные типы:

all: Полное сканирование таблицы.

const: при чтении констант совпадет не более одной записи.Поскольку это константа, на самом деле ее нужно прочитать только один раз.

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

fulltext: выполнение полнотекстового поиска по индексу.

index: Полное сканирование индекса.

index_merge: одновременно используйте два (или более) индекса в запросе, затем объедините результаты индекса, а затем прочитайте данные таблицы.

index_subquery: возвращаемая комбинация полей результата в подзапросе является индексом (или комбинацией индексов), но не первичным ключом или уникальным индексом.

rang: сканирование диапазона индексов.

ref: запрос, на который ссылается индекс таблицы дисков в операторе соединения.

ref_or_null: Единственная разница с ref — это запрос с нулевым значением в дополнение к запросу, использующему ссылку на индекс.

system: системная таблица, в таблице только одна строка данных;

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

7. Жизненный цикл Spring Bean

  1. Создание экземпляра компонента — это то, что мы часто называем новым;

  2. Настройте экземпляр bean-компонента в соответствии с контекстом Spring, то есть внедрением IOC;

  3. Если бин реализовал интерфейс BeanNameAware, будет вызван реализованный им метод setBeanName(String), и здесь будет передано значение id бина в конфигурационном файле Spring.

  4. Если bean-компонент реализовал интерфейс BeanFactoryAware, он вызовет setBeanFactory, который он реализует (setBeanFactory(BeanFactory) для передачи самой фабрики Spring (вы можете использовать этот метод для получения других bean-компонентов, просто настройте общий bean-компонент в файле конфигурации Spring)) ;

  5. Если Бин реализовал интерфейс ApplicationContextAware, будет вызван метод setApplicationContext(ApplicationContext) и будет передан контекст Spring (тот же метод может также реализовать содержимое шага 4, но это лучше, чем 4, потому что ApplicationContext подинтерфейс BeanFactory, есть еще метод реализации);

  6. Если Bean-компонент связан с интерфейсом BeanPostProcessor, будет вызван метод postProcessBeforeInitialization(Object obj, String s). BeanPostProcessor часто используется для изменения содержимого bean-компонента, и, поскольку этот метод вызывается в конце инициализации bean-компонента, его также можно применяется в памяти или технологии кэширования;

  7. Если Bean настроен с помощью атрибута init-method в файле конфигурации Spring, его настроенный метод инициализации будет вызываться автоматически.

  8. Если Bean связан с интерфейсом BeanPostProcessor, будет вызван метод postProcessAfterInitialization(Object obj, String s);

Примечание. После того, как вышеописанная работа будет завершена, bean-компонент можно применять, тогда bean-компонент является синглтоном, поэтому в целом bean-компонент, который мы называем одним и тем же идентификатором, будет экземпляром с тем же адресом содержимого, конечно, он также может быть настроен в конфигурационном файле Spring. Non-Singleton, мы не будем здесь вдаваться в подробности.

  1. Когда бин больше не нужен, он проходит фазу очистки.Если бин реализует интерфейс DisposableBean, будет вызван реализуемый им метод destroy();

  2. Наконец, если атрибут destroy-method настроен в конфигурации Spring этого bean-компонента, его настроенный метод destroy будет вызываться автоматически.

Выше описан цикл bean-компонента контекста Spring.Если это фабричный bean-компонент, пятый шаг можно удалить.

8. Преимущества деревьев B+

  1. С точки зрения хранения, в случае большого объема данных структура B+-дерева позволяет загружать данные пакетами. С точки зрения запросов, если это только для одного запроса, конечно, хэш быстрее, но большинство наших бизнес-сценариев имеют несколько запросов, и их все равно нужно отсортировать и вернуть. В это время, если выполняется поиск по диапазону, он кажется более быстрым (поскольку узлы отсортированы, в это время выполняется локальный обход по порядку, и может потребоваться межуровневый доступ. Запрос данных может быть вернулся).

  2. Поскольку это дерево B+, многостороннее ветвление может уменьшить высоту дерева, повысить эффективность запросов и уменьшить количество дисковых операций ввода-вывода.

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

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

Большой парень в комментариях далIS NOT NULLа также!=иIS NULLДля разъяснения ситуации друзья могут посмотреть по ссылке размещенной