моя контактная информация
Почтамезофия@protonmail.com
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Нижний уровень ArrayList реализован на основе массивов. Это достигается путем динамического расширения или уменьшения размера массива. Когда емкости недостаточно, он создаст массив большего размера, затем скопирует исходные данные и, наконец, добавит к нему новые данные.
Механизм расширения ArrayList таков: при добавлении первого элемента емкость ArrayList равна 10 каждый раз, когда добавляется новый элемент, если емкость превышена, исходная емкость будет удвоена, то есть исходная емкость * 2; , если исходная емкость равна 0, то новая емкость равна 1.
Внутренняя реализация ArrayList основана на массивах. Когда несколько потоков одновременно обращаются к одному и тому же ArrayList, может возникнуть несогласованность данных. Например, когда один поток читает данные ArrayList, а другой поток добавляет или удаляет данные. В ArrayList могут быть изменены данные в ArrayList, так что поток, читающий данные ArrayList, может прочитать неверные данные, что приведет к ошибке программы.
Стек представляет собой специальную линейную таблицу. Его особенностью является то, что данные могут быть вставлены и удалены только с одного конца, по принципу «первым вошел, последним вышел, последним пришел — первым вышел». Это структура хранения, которую можно использовать для хранения значений параметров функции, локальных переменных и т. д.
Куча — это особая древовидная структура, характеризующаяся тем, что значения всех узлов больше или равны значениям их дочерних узлов, а значение корневого узла является наибольшим или наименьшим. Куча — это динамическая структура хранения, которую можно использовать для хранения больших объемов данных, таких как сортировка, поиск и т. д.
Суть сопрограммы — это легкий поток. Каждая сопрограмма имеет стек для хранения функций и их параметров, локальных переменных и т. д. Сопрограмму можно приостановить, возобновить и переключить. Вот как реализовать сопрограмму.
Государственная синхронизация Это относится к передаче статуса (например, положения, скорости, ускорения и т. д.) каждой машины в многомашинной системе другим машинам в каждом цикле управления, чтобы каждая машина оставалась синхронизированной. Синхронизация состояний может обеспечить эффективность совместного управления несколькими машинами в реальном времени, но поскольку в каждом цикле управления необходимо передавать большой объем данных, ее точность может быть относительно низкой.
Синхронизация кадров Это означает, что в каждом цикле управления команды управления каждой машины в многомашинной системе передаются на другие машины, так что каждая машина остается синхронизированной. Синхронизация кадров может обеспечить точность совместного управления несколькими машинами, но поскольку в каждом цикле управления передается лишь небольшое количество команд управления, ее производительность в реальном времени может быть относительно низкой.
Нижний уровень HashMap реализован с использованием связанного списка массива (красно-черное дерево). Он хранит данные в соответствии со значением ключа hashCode. Он может вычислять положение данных в массиве (конфликт хеша) на основе хеша. код и использует связанный список (красно-черное дерево) для хранения конфликтов данных. HashMap В Java 8, когда длина связанного списка превышает пороговое значение (по умолчанию — 8), он преобразуется в красно-черное дерево для повышения эффективности запросов.Когда мощности недостаточно, она автоматически расширяется. Коэффициент загрузки по умолчанию составляет 0,75, а метод расширения в 2 раза превышает емкость.
Каковы сценарии использования стеков и очередей?
Функции браузера вперед и назад. Веб-страницы, посещаемые браузером, могут реализовывать функции вперед и назад через структуру данных стека.
Проблема липкости TCP связана с тем, что протокол TCP не фрагментирует данные при передаче, в результате чего объем данных, полученных принимающей стороной, превышает объем данных, отправленных отправляющей стороной.
Прежде всего, дейтаграммы UDP могут помочь реализовать процесс трехэтапного установления связи в протоколе TCP/IP. При первом установлении связи клиент отправляет датаграмму UDP, содержащую запрос на установление связи. Когда сервер получит это сообщение, он ответит подтверждающим сообщением, указывающим, что сервер получил запрос на установление связи от клиента и готов предоставлять услуги. При втором рукопожатии клиент снова отправит датаграмму UDP. На этот раз сообщение содержит некоторую полезную информацию, такую как IP-адрес клиента, номер порта и т. д., чтобы сервер мог идентифицировать клиента. При третьем рукопожатии сервер отправит датаграмму UDP, указывающую, что соединение установлено и клиент может начать отправку данных.
Во-вторых, дейтаграммы UDP также могут помочь реализовать процесс передачи данных в протоколе TCP/IP. Когда клиенту необходимо отправить данные на сервер, данные будут инкапсулированы в дейтаграмму UDP и отправлены на сервер. После того, как сервер получит дейтаграмму UDP, он проанализирует данные, содержащиеся в сообщении, и выполнит соответствующую обработку.
Наконец, дейтаграммы UDP также могут помочь реализовать процесс завершения в протоколе TCP/IP.Когда клиенту больше не нужно связываться с сервером, он может отправить дейтаграмму UDP, чтобы указать, что клиент завершает соединение. После того, как сервер получит это сообщение, он освободит соответствующие ресурсы, тем самым завершив работу всего протокола TCP/IP. . процесс подключения
Сопрограммы позволяют программам переключаться между различными задачами, тем самым повышая эффективность программы и сокращая время ее выполнения. Сопрограммы позволяют программе переключаться между несколькими задачами вместо того, чтобы ждать завершения одной задачи перед запуском другой. Он также может совместно использовать переменные между разными потоками, тем самым сокращая время работы программы. Для многозадачных приложений использование сопрограмм может значительно повысить производительность, что приведет к увеличению скорости работы.
Массивы работают быстрее, потому что адрес каждого элемента массива непрерывен и фиксирован, а адрес следующего элемента можно быстро получить, в то время как адрес каждого элемента связанного списка разрывен, и нужно перемещаться по указателю. чтобы получить адрес следующего элемента, чтобы перемещение массива происходило быстрее.
Виртуальная функция — это специальная функция, которая отличается от обычных функций тем, что она автоматически определяется компилятором и может вызываться во время компиляции. Характеристика виртуальной функции заключается в том, что ее реализация определяется во время выполнения, а не во время компиляции.
Основная цель виртуальных функций — добиться полиморфизма. Абстрактный класс может определять несколько виртуальных функций, а затем его подклассы могут реализовывать эти функции.
Это не обязательно должна быть виртуальная функция, но обычно рекомендуется использовать виртуальную функцию, поскольку виртуальная функция может быть переопределена производным классом, чтобы деструктор производного класса мог выполняться правильно, если виртуальная функция. не используется, деструктор производного класса вызываться не будет, что может вызвать такие проблемы, как утечки памяти.
Конвейер рендеринга — это серия шагов, используемых для преобразования данных игровой сцены из входной информации в изображения, отображаемые на экране.
Процесс конвейера рендеринга разделен на три основных этапа: этап подготовки, этап геометрии и этап освещения.
На этапе подготовки игровой движок загружает модели и текстуры игровой сцены в графический процессор (GPU) и организует данные для использования на последующих этапах.
На этапе геометрии матричные преобразования используются для размещения модели в трехмерном пространстве и преобразования модели в форму, которую могут поддерживать пиксели на экране.
На этапе освещения источник света и модель освещения используются для расчета значения цвета каждого пикселя, и полученное изображение наконец отображается на экране.
Условиями получения оптимального решения жадным алгоритмом являются «оптимальная подструктура» и «свойство жадного выбора»: