Предисловие:
Я разобрался с некоторыми базовыми блок-схемами/схемами архитектуры Java, сделал заметки и давайте учиться вместе.
1. Жизненный цикл весны
Spring — самая популярная и мощная легкая среда контейнеров на Java, поэтому очень важно знать жизненный цикл Spring;
- Во-первых, после запуска контейнера инициализируйте bean-компонент
- Согласно определению бина, вводить свойства
- Определите, реализует ли объект интерфейс xxxAware, и внедрите соответствующий экземпляр xxxAware в компонент, например BeanNameAware и т. д.
- В приведенных выше шагах объект bean был правильно сконструирован.Реализуя интерфейс BeanPostProcessor, можно выполнить некоторую обработку пользовательского метода. Например: postProcessBeforeInitialzation.
- После завершения предварительной обработки BeanPostProcessor могут быть реализованы такие методы, как postConstruct, afterPropertiesSet, init-method и т. д. Добавьте нашу пользовательскую логику,
- За счет реализации интерфейса BeanPostProcessor выполняется постобработка postProcessAfterInitialzation.
- После этого фасоль готова к употреблению.
- После закрытия контейнера, если компонент реализует интерфейс DisposableBean, будет вызван метод интерфейса destroy().
- Указав функцию для метода destroy, указанная логика может быть выполнена до того, как компонент будет уничтожен.
2. TCP рукопожатие три раза, волна четыре раза
Трехстороннее рукопожатие TCP и четырехсторонняя волна должны быть знакомы каждому программисту.
Трехстороннее рукопожатие:
- Первое рукопожатие (SYN=1, seq=x), после отправки клиент переходит в состояние SYN_SEND
- Второе рукопожатие (SYN=1, ACK=1, seq=y, ACKnum=x+1), после отправки, сервер переходит в состояние SYN_RCVD.
- Третье рукопожатие (ACK=1, ACKnum=y+1), после отправки клиент переходит в состояние ESTABLISHED, когда сервер получает пакет, он также входит в состояние ESTABLISHED, и TCP-рукопожатие может начать передачу данных.
Четыре волны:
- Первая волна (FIN=1, seq=a), после отправки клиент переходит в состояние FIN_WAIT_1
- Вторая волна (ACK=1, ACKnum=a+1), после отправки сервер переходит в состояние CLOSE_WAIT, а клиент переходит в состояние FIN_WAIT_2 после получения пакета подтверждения
- Третья волна (FIN=1, seq=b), после отправки сервер переходит в состояние LAST_ACK, ожидая последнего ACK от клиента.
- Четвертая волна (ACK=1, ACKnum=b+1): клиент получает от сервера запрос на отключение, отправляет пакет подтверждения и переходит в состояние TIME_WAIT, ожидая фиксированное время (два максимальных жизненных цикла сегмента, после 2MSL). , 2 Максимальное время жизни сегмента), ACK от сервера не получено, и считается, что сервер нормально закрыл соединение, поэтому он также закрывает соединение и переходит в состояние CLOSED. После того, как сервер получает этот пакет подтверждения, он закрывает соединение и переходит в состояние CLOSED.
3. Блок-схема выполнения пула потоков
Пул потоков: шаблон использования потоков. Слишком большое количество потоков увеличивает нагрузку на планирование, что, в свою очередь, влияет на локальность кэша и общую производительность. Пул потоков поддерживает несколько потоков, ожидая, пока супервизор назначит задачи, которые могут выполняться одновременно, что позволяет избежать затрат на создание и уничтожение потоков при обработке краткосрочных задач. Процесс выполнения пула потоков необходим для каждой разработки.
Процесс реализации
- Отправить задачу, когда количество основных потоков, оставшихся в пуле потоков, меньше, чем количество потоков corePoolSize, пул потоков создаст основной поток для обработки отправленной задачи.
- Если количество основных потоков в пуле потоков заполнено, то есть количество потоков равно corePoolSize, вновь отправленная задача будет помещена в очередь задач workQueue для постановки в очередь на выполнение.
- Когда количество выживших потоков в пуле потоков равно corePoolSize, а очередь задач workQueue заполнена, определить, достигает ли количество потоков максимумаPoolSize, то есть заполнено ли максимальное количество потоков, и если нет, создать неосновной поток для выполнения отправленной задачи.
- Если текущее количество потоков достигает максимального размера пула и появляются новые задачи, политика отклонения будет использоваться напрямую.
JDK предоставляет четыре класса обработки политик отказа.
- AbortPolicy (выдает исключение, по умолчанию)
- DiscardPolicy (отбрасывать задачи напрямую)
- DiscardOldestPolicy (отбросить самую старую задачу в очереди и продолжить отправку текущей задачи в пул потоков)
- CallerRunsPolicy (передается потоку, в котором находится вызов пула потоков для обработки)
4. Структура памяти JVM
Структура памяти JVM — это основа, которую должны освоить Java-программисты.
Счетчик программ (регистр ПК)
Счетчик программ — это небольшой объем памяти, который можно рассматривать как индикатор номера строки байт-кода, выполняемого текущим потоком. В модели виртуальной машины интерпретатор байт-кода выбирает следующую инструкцию байт-кода для выполнения, изменяя значение счетчика, когда он работает.Основные функции, такие как ветвление, цикл, обработка исключений и восстановление потока, должны полагаться на счетчик для выполнения. полный .
Стек виртуальной машины Java
- Как и счетчик программ, стек виртуальной машины Java также является частным потоком, и его жизненный цикл такой же, как у потока.
- При выполнении каждого метода создается «фрейм стека», который используется для хранения такой информации, как таблица локальных переменных (включая параметры), стек операндов, динамическая ссылка, выход из метода и так далее. Каждый метод вызывается в процессе выполнения, который соответствует процессу помещения кадра стека в стек в стеке виртуальной машины.
- В таблице локальных переменных хранятся различные основные типы данных, такие как логические, байтовые, символьные, короткие и т. д.
собственный стек методов
По сути, он похож на стек виртуальной машины, разница в том, что стек виртуальной машины обслуживает метод Java, выполняемый виртуальной машиной, а локальный стек методов обслуживает собственный метод.
куча Java
- Куча GC — это самая большая область памяти в памяти, управляемой виртуальной машиной Java, а также область памяти, совместно используемая различными потоками, которая создается при запуске JVM.
- Его размер задается параметрами -Xms (минимальное значение) и -Xmx (максимальное значение), -Xms — это минимальный объем памяти, запрашиваемый при запуске JVM, а -Xmx — максимальный объем памяти, на который может претендовать JVM.
- Поскольку все сборщики используют алгоритм сбора поколений, куча делится на новое поколение и старое поколение. Новое поколение состоит из S0 и S1, а размер нового поколения можно указать параметром -Xmn.
- Все экземпляры объектов, а также массивы размещаются в куче.
- В дополнение к информации описания версии класса, поля, метода, интерфейса и т. д. в файле класса также существует пул констант, который используется для хранения различных ссылок на символы, сгенерированных компилятором.Эта часть содержимого будет помещаться в метод после загрузки класса в пул констант времени выполнения зоны.
область метода
- Также известный как «постоянная генерация», он используется для хранения информации о классе, констант и статических переменных, загруженных виртуальной машиной, и представляет собой область памяти, совместно используемую каждым потоком. Размер области метода может быть ограничен параметрами -XX:PermSize и -XX:MaxPermSize.
- Константный пул времени выполнения: это часть области методов, основное содержимое которой исходит от загрузки класса JVM.
- В дополнение к информации описания версии класса, поля, метода, интерфейса и т. д. в файле класса также существует пул констант, который используется для хранения различных ссылок на символы, сгенерированных компилятором.Эта часть содержимого будет помещаться в метод после загрузки класса в пул констант времени выполнения зоны.
5. Модель памяти Java
- Многопоточность Java взаимодействует через разделяемую память.В процессе связи возникнет ряд проблем, таких как видимость, атомарность и последовательность.JMM основана на многопоточной связи и ряде связанных характеристик.Устоявшаяся модель. JMM определяет некоторые наборы синтаксиса, которые сопоставляются с такими ключевыми словами, как volatile и synchronized в языке Java. Если вам интересно, вы можете ознакомиться с другими моими заметками:woohoo.brief.com/afraid/3 от 1691AE…
- Модель памяти Java предусматривает, что все переменные хранятся в основной памяти, и у каждого потока есть своя рабочая память. В рабочей памяти потока хранится копия основной памяти, копия переменных, используемых в потоке. Все операции должны быть выполняется в рабочей памяти и не может напрямую читать или записывать в основную память. Разные потоки не могут напрямую обращаться к переменным в рабочей памяти друг друга, а передача переменных между потоками требует синхронизации данных между их собственной рабочей памятью и основной памятью.
6. Блок-схема выполнения SpringMVC
- Пользователь отправляет запрос на сервер, и внешний интерфейс управляет Servelt DispatcherServlet для захвата;
- DispatcherServlet анализирует URL-адрес запроса, вызывает HandlerMapping для получения всех связанных объектов, настроенных обработчиком, и, наконец, возвращает его в форме объекта HandlerExecutionChain.
- DispatcherServlet выбирает подходящий HandlerAdapter в соответствии с полученным обработчиком.
- Извлеките данные модели из запроса, заполните входные параметры обработчика и начните выполнение обработчика (контроллера).
- После выполнения Handler он возвращает объект ModelAndView в DispatcherServlet.
- В соответствии с возвращенным ModelAndView выберите подходящий ViewResolver
- ViewResolver объединяет модель и представление для визуализации представлений.
- Вернуть результат рендеринга клиенту.
7. Процесс выполнения JDBC
Поток выполнения JDBC:
- Подключить источник данных
- Передать запросы и инструкции по обновлению в базу данных
- Обработать ответ базы данных и вернуть результат
8. Архитектура облачных компонентов Spring
Spring Cloud — это инструмент разработки облачных приложений на основе Spring Boot, который обеспечивает управление конфигурацией, обнаружение служб, автоматические выключатели, интеллектуальную маршрутизацию, микроагенты, шины управления, распределенные сеансы и кластеры, участвующие в разработке облачных приложений на основе JVM. Такие операции, как управление состоянием, обеспечивают простой способ разработки.
- Эврика отвечает за регистрацию и обнаружение сервисов.
- Hystrix отвечает за мониторинг вызова между сервисами и играет роль предохранителя и даунгрейда.
- Spring Cloud Config предоставляет единую службу центра конфигурации.
- Мы перенаправляем все внешние запросы и услуги через Zuul, выступая в качестве API-шлюза.
- Наконец, мы используем Sleuth+Zipkin для записи всех данных запроса, что нам удобно для проведения последующего анализа.
- Spring Cloud Ribbon — это набор инструментов для балансировки клиентской нагрузки, основанный на ленте Netflix. Это балансировщик нагрузки на стороне клиента, основанный на HTTP и TCP.
- Feign — это декларативный клиент веб-сервиса, его цель — упростить вызов веб-сервиса.
9.даббо звонок
Dubbo — это распределенная служба, предназначенная для обеспечения высокопроизводительной и прозрачной схемы удаленного вызова службы, которую легко спутать с балансировкой нагрузки. и т. д. на другой сервер.
- Поставщик: поставщик услуг, предоставляющий услугу.
- Потребитель: потребитель службы, который вызывает удаленную службу.
- Реестр: Реестр для регистрации и обнаружения служб.
- Монитор: центр мониторинга, который подсчитывает время вызова и время вызова службы.
- Контейнер: служба запускает контейнер.
10. Будет обновлено позже...
Личный публичный аккаунт
Приглашаем всех обратить внимание, учиться и обсуждать вместе.