Обзор записи интервью Java (постоянно обновляется)

день12.30 Цепочка поставок подержанных автомобилей Guazi (одна сторона)

  1. Самостоятельное введение
  2. спросил три предмета
  3. Связь между операционными системами
  1. Конвейерная связь: конвейер — это полудуплексный метод связи, данные могут передаваться только в одном направлении и могут использоваться только между процессами с родством. Сходства с процессами обычно представляют собой отношения между родительскими и дочерними процессами.
    2. Именованный канал FIFO: Именованный канал также является методом полудуплексной связи, но он позволяет обмениваться данными между несвязанными процессами.
    3. Очередь сообщений MessageQueue: Очередь сообщений — это связанный список сообщений, хранящийся в ядре и идентифицируемый идентификатором очереди сообщений. Очередь сообщений преодолевает недостатки низкой передачи сигнала, конвейеров, которые могут передавать только неформатированные потоки символов, и ограниченного размера буфера.
    4. Общее хранилище ShareMemeory: общее хранилище предназначено для сопоставления части памяти, к которой могут обращаться другие процессы.Эта общая память создается одним процессом, но может быть доступна нескольким процессам. Общая память — это самый быстрый метод IPC, и он специально разработан с учетом неэффективности других методов межпроцессного взаимодействия. Он часто используется в сочетании с другими механизмами связи, такими как семафоры, для достижения синхронизации и связи между процессами.
    5. Семафор Семафор. Семафор — это счетчик, который можно использовать для управления доступом к общим ресурсам несколькими процессами. Он часто используется в качестве механизма блокировки для предотвращения доступа других процессов к общему ресурсу, в то время как процесс обращается к ресурсу. Поэтому он в основном используется как метод синхронизации между процессами и между разными потоками в одном процессе.
    6. Сокет: сокет также является механизмом межпроцессного взаимодействия, в отличие от других механизмов взаимодействия, его можно использовать для различных и межпроцессных взаимодействий.
    7. Сигнал (синусный). Сигнал — это относительно сложный метод связи, используемый для уведомления принимающего процесса о наступлении определенного времени.
  1. Как реализован индекс базы данных?

Что такое индекс: Индекс — это структура данных, которая помогает MySQL эффективно получать данные. Извлекая основу предложения, можно понять суть индекса: индекс — это структура данных. Системы баз данных также поддерживают структуры данных, которые удовлетворяют определенным алгоритмам поиска, и эти структуры данных ссылаются на данные таким образом, что в этих структурах данных могут быть реализованы расширенные алгоритмы поиска. Эта структура данных является индексом.
Индекс базы данных фактически должен сделать данные запроса эффективными. Индексы могут значительно улучшить скорость поиска в MySQL.

  • В настоящее время большинство баз данных и их файловых систем используют B-Tree или его вариант B+Tree в качестве структуры индекса.

  • Реализация индексов в MySQL:
    В MySQL индексы относятся к концепции уровня механизма хранения.Различные механизмы хранения реализуют индексы по-разному.В этой статье в основном обсуждаются методы реализации индексов MyISAM и InnoDB .

  • Реализация индекса MyISAM : механизм MyISAM использует B+Tree в качестве структуры индекса, а поле данных конечного узла хранит адрес записи данных. На следующем рисунке представлена ​​схема индекса MyISAM:
    вставьте сюда описание изображенияМетод индекса MyISAM также называется «некластеризованным», что призвано отличать его от кластеризованного индекса InnoDB.

  • Реализация индекса InnoDB:
    хотя InnoDB также использует B+Tree в качестве структуры индекса, конкретная реализация полностью отличается от MyISAM.

Первое существенное отличие заключается в том, что файлы данных InnoDB сами по себе являются индексными файлами. Из вышеизложенного известно, что индексный файл MyISAM и файл данных разделены, а индексный файл сохраняет только адрес записи данных. В InnoDB сам файл данных таблицы представляет собой индексную структуру, организованную B+Tree, а поле данных конечного узла этого дерева сохраняет полные записи данных. Ключ этого индекса является первичным ключом таблицы данных, поэтому сам файл данных таблицы InnoDB является первичным индексом.
вставьте сюда описание изображения
Как показано на рисунке, конечные узлы содержат полные записи данных. Такой индекс называется кластерным индексом. Поскольку файлы данных InnoDB агрегируются по первичному ключу, InnoDB требует, чтобы таблица имела первичный ключ (MyISAM может не иметь его).Если он не указан явно, система MySQL автоматически выберет столбец, который может однозначно идентифицировать запись данных в качестве первичного ключа.Если он не существует Для этого типа столбца MySQL автоматически генерирует неявное поле в качестве первичного ключа для таблицы InnoDB.Длина этого поля составляет 6 байтов, а тип - long.
Для получения дополнительной информации см. эту статью https://blog.codinglabs.org/articles/theory-of-mysql-index.html
5. Разница между кластеризованным индексом и некластеризованным индексом
одинакова: оба являются структурой данных деревьев B+.

  • Кластеризованный индекс: хранилище данных и индекс объединены и организованы в определенном порядке. Когда индекс найден, данные найдены. Физический порядок хранения данных согласуется с порядком индекса, то есть как пока индексы находятся рядом, соответствующие данные также должны быть размещены на диске рядом.
  • Некластеризованный индекс: Листовой узел не хранит данные, а хранит адрес строки данных, то есть находит положение строки данных по индексу, а затем переходит к диску, чтобы найти данные, которые чем-то похож на каталог книги, например, чтобы найти первый первый раздел третьей главы, затем посмотреть в каталоге, найти соответствующий номер страницы, а затем перейти к соответствующему номеру страницы, чтобы прочитать статью.
  1. Как обеспечить синхронизацию между потоками в Java

1.synchronized ключевое слово, измененный метод, чтобы гарантировать, что этот метод будет иметь доступ только к одному объекту. Модифицированные блоки кода. Блок операторов, модифицированный этим ключевым словом, будет автоматически добавлен со встроенной блокировкой для достижения синхронизации.
1.synchronized ключевое слово, измененный метод, чтобы гарантировать, что этот метод будет иметь доступ только к одному объекту. Модифицированные блоки кода. Блок операторов, модифицированный этим ключевым словом, будет автоматически добавлен со встроенной блокировкой для достижения синхронизации.
2.wait() и уведомить
об ожидании(): перевести объект в состояние ожидания и снять блокировку удерживаемого объекта.
sleep(): переводит работающий поток в спящий режим. Это статический метод. Вызовите этот метод, чтобы поймать InterruptedException.
notify(): Разбудить поток в состоянии ожидания.Обратите внимание, что при вызове этого метода он не может точно разбудить поток в состоянии ожидания, но JVM определяет, какой поток разбудить, а не по приоритету.
ALLnotify(): Разбудить все потоки, находящиеся в состоянии ожидания.Обратите внимание, что это не для того, чтобы дать всем пробужденным потокам объектную блокировку, а для того, чтобы позволить им конкурировать.
3. Используйте специальные переменные домена (volatile) для синхронизации потоков . 1.
Ключевое слово volatile обеспечивает свободный от блокировок механизм доступа к переменным домена
. 2. Использование volatile для изменения домена эквивалентно указанию виртуальной машине, что домен может быть обновлен с помощью другие темы.
3. Поэтому каждый раз, когда поле используется, оно пересчитывается вместо использования значения в регистре.
4.volatile не обеспечивает никаких атомарных операций и не может использоваться для изменения переменных конечного типа.
5. Как использовать: Просто добавьте ключевое слово volatile перед переменной мьютекса.

  1. Что такое АОП
  • Можно сказать, что АОП (аспектно-ориентированное программирование, аспектно-ориентированное программирование) является дополнением и улучшением ООП (объектно-ориентированное программирование, объектно-ориентированное программирование).

Он ориентирован на сквозную технологию, рассекает внутренности инкапсулированного объекта и инкапсулирует публичность, влияющую на несколько классов, в многократно используемый модуль, который называется «Аспект», то есть аспект. Проще говоря, это инкапсуляция логики или обязанностей, которые не связаны с бизнесом, но обычно вызываются бизнес-модулями, что удобно для сокращения повторяющегося кода системы, уменьшения связи между модулями и способствует будущая работоспособность и ремонтопригодность пола. АОП представляет горизонтальные отношения. Если «объект» представляет собой полый цилиндр, заключающий в себе свойства и поведение объекта, то метод аспектно-ориентированного программирования подобен острому лезвию, разрезающему эти полые цилиндры, чтобы получить свое внутреннее сообщение. Вырезанный участок – это так называемое «лицо». Затем своими искусными руками восстановил эти вырезы, не оставив следов.

  1. DI
    DI (Dependency Injection) Dependency Injection
    DI-Dependency Injection, то есть «внедрение зависимостей»: зависимости между компонентами определяются контейнером во время выполнения, образно говоря, контейнер динамически внедряет зависимость в компонент. Целью внедрения зависимостей является не добавление дополнительных функций в программную систему, а увеличение частоты повторного использования компонентов и создание гибкой и расширяемой платформы для системы. С помощью механизма внедрения зависимостей нам нужно только указать ресурсы, необходимые цели, с помощью простой настройки без какого-либо кода и завершить нашу собственную бизнес-логику, не заботясь о том, откуда берутся конкретные ресурсы и кто их реализует.
    Преимущества: Достигается развязка между модулями.

  2. IOC
    IOC (Ioc-Inversion of Control, то есть «инверсия управления», это не технология, а конструкторская идея.)
    Объект создается самой исходной программой и становится принимающим объектом программы.
    Программисты в основном сосредоточены на реализации бизнеса.
    Реализовано разделение службы и дао, а уровень службы и уровень дао разделены. Прямых зависимостей нет.
    Если реализация dao изменится, само приложение менять не нужно.

Что контролируется: Кто контролирует создание объектов: Созданием традиционных объектов приложения управляет сама программа. После использования Spring он создается Spring.
Обратное: прямое вращение означает, что программа создает объекты, а обратное вращение означает, что сама программа не создает объекты, а становится пассивно полученными объектами.
Описание: Раньше объекты создавались самой программой, после использования Spring программа пассивно получает объекты, созданные Spring.

Ioc – это программная идея. Перешел от активного программирования к пассивному приему,
реализация Ioc реализована через ioc-контейнер. Ioc-контейнер — BeanFactory

  1. Режим прокси (динамический прокси или статический прокси)
    Режим прокси (Proxy) предоставляет прокси другим объектам для управления доступом к этому объекту.
    Мысль: функция, которую хочет реализовать основная часть, нуждается в прокси-классе, чтобы реализовать ее для меня. Метод реализации: реализовать тот же интерфейс
    . Например: Сяобай хочет преследовать Сяохуна, а методы преследования включают в себя отправку цветов и отправку роз. Но Сяо Бай был слишком застенчив, чтобы проявить инициативу, поэтому он попросил Сяо Хуана преследовать его. Так что пусть Сяо Хуан пошлет ему цветы и розы. Следовательно, методы, которые должны быть реализованы прокси-классом и основным телом, одинаковы.
  2. Шаблон
    фабрики Простой шаблон фабрики: реализуйте базовый класс, затем инкапсулируйте каждую операцию в конкретный класс и наследуйте от этого класса. Таким образом, каждый раз, когда вы добавляете метод в будущем, вам нужно будет добавить только новый класс.
    Шаблон фабричного метода: в шаблоне фабричного метода родительский класс фабрики отвечает за определение открытого интерфейса для создания объектов продукта, а подкласс фабрики отвечает за создание конкретных объектов продукта. Целью этого является задержка создания экземпляра продукта. Это делается в классе, то есть через подкласс фабрики, чтобы определить, какой конкретный класс продукта должен быть создан.
    Шаблон абстрактной фабрики создает семейство объектов, то есть множество объектов вместо одного объекта, и эти объекты связаны между собой, то есть должны создаваться вместе. Шаблон фабричного метода используется только для создания объекта, который сильно отличается от абстрактного фабричного шаблона.
  3. что грязное читать
  4. дела
  5. Оператор SQL
  6. обратно связанный список
LinkList reverseLink(LinkList head)
{
    
    
	

	LinkList newhead=(LNode*)malloc(sizeof(LNode));
	newhead->next=NULL;
	newhead=newhead->next;
	LinkList node;
	while(head!=NULL)
	{
    
    
		node=head;
		head=head->next;
		node->next=newhead;
		newhead=node; 
	}
	return newhead;
}

день 1.4 (стажировка Jingwei Hengrun)

  1. Несколько способов создания объектов в Java

    1. Используйте новое ключевое словоEmployee emp1 = new Employee();
    2. Используйте метод newInstance класса ClassEmployee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
    3. Используйте метод newInstance класса ConstructorConstructor<Employee> constructor = Employee.class.getConstructor(); Employee emp3 = constructor.newInstance();
    4. Используйте метод клонированияEmployee emp4 = (Employee) emp3.clone();
    5. использовать десериализациюObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj")); Employee emp5 = (Employee) in.readObject();
  2. Знаете ли вы, что такое отражение?
    Отражение — это преобразование различных компонентов класса Java в объекты Java один за другим.

Портал: https://blog.csdn.net/sinat_38259539/article/details/71799078?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog - BlogCommendFromMachineLearnPai2-1.channel_param
3. В чем разница между final и finally
final:

  • Окончательный измененный класс не может быть унаследован, потому что это окончательный класс;
  • Final-modified переменная — это константа, которую можно присвоить только один раз;
  • Окончательные модифицированные методы нельзя переопределить, но можно перегрузить;
  • final может изменять классы, методы и переменные;
  • Внутренние классы могут обращаться только к локальным переменным, измененным с помощью final.
    в конце концов:
  • Блок finally обычно ставится после try and catch, иногда его можно поставить сразу после try, а иногда нельзя.
  • Оператор finally — это оператор, который должен быть выполнен после нормального выполнения или обработки исключений Блок finally обычно используется для закрытия (освобождения) физических ресурсов (подключений к базе данных, сетевых подключений, дисковых файлов и т. д.). Ресурс должен быть закрыт независимо от того, возникает ли исключение.
  • Когда нет необходимости освобождать необходимые ресурсы, блок finally не может быть определен.
  • Код в блоке finally всегда может быть выполнен, а это значит, что независимо от того, какой код выполняется в блоках try и catch, происходит ли исключение или обычная работа, блок finally обязательно будет выполнен.Метод выхода из виртуальной машины вызывается в блоке catch, иначе блок finally все равно будет выполнен, как показано на следующем рисунке:
  1. Разница между HashMap и хеш-таблицей
    HashMap не является потокобезопасной: HashMap является подклассом интерфейса карты и представляет собой объект, который отображает ключи в значения, где и ключи, и значения являются объектами и не могут содержать повторяющиеся ключи, но могут содержать повторяющиеся ценности. HashMap допускает нулевой ключ и нулевое значение, а хэш-таблица — нет.
    HashTable: HashTable является потокобезопасным, HashMap — это облегченная реализация Hashtable (не потокобезопасная реализация), все они дополняют интерфейс Map, основное отличие в том, что HashMap допускает нулевые (null) значения ключа (key), из-за non-thread-safety, что может быть более эффективным, чем Hashtable. Hashtable не допускает пустых ключей и значений.
    вставьте сюда описание изображения

  2. Переопределение и перегрузка
    Переопределение: Переопределение заключается в перезаписи процесса реализации метода, доступ к которому разрешен для подкласса, при этом ни возвращаемое значение, ни формальные параметры не могут быть изменены. То есть оболочка остается без изменений, а ядро ​​переписывается!
    Когда вам нужно вызвать переопределенный метод суперкласса в подклассе, используйте ключевое слово super.
    Перегрузка: Перегрузка находится в классе с тем же именем метода, но другими параметрами. Типы возвращаемых значений могут быть одинаковыми или разными.

день1.5 Пекинский восточный госинь (одна сторона) (предлагается)

  1. Шаблон проектирования:
    Одноэлементный шаблон:
  2. Разница между #{} и ${} в mybatis
  3. Методы обхода графа
    Поиск в глубину, поиск в ширину
  4. Как обойти бинарное дерево
  5. Способ создания потока
    . Наследование класса потока, реализация интерфейса runnable и создание потока через Callable и Future.
  6. Три способа внедрения зависимостей: внедрение
    конструктора, внедрение сеттера, внедрение аннотаций.
  7. левое соединение правое соединение внутреннее соединение

day1.6 Лун Ин (предлагается)

1. Трехстороннее рукопожатие TCP

2. 1*0,3 Умножение обоих типов равно 0,3.

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

Supongo que te gusta

Origin blog.csdn.net/qq_44867340/article/details/122245235
Recomendado
Clasificación