Должен видеть! Java-бэкенд, яркий меч Чжусянь (самая полная точка знаний)

Java Архитектура

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

Здесь я грубо разделил категории по основам, основам Java и продвинутому уровню Java, и были выбраны наиболее часто используемые и важные инструменты.

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

Последний контент будет постоянно обновляться на github, добавляя новые избранные связанные статьи. адрес:

https://github.com/sayhiai/javaok

Базовые знания

структура данных

Базовая структура данных очень важна, независимо от того, с каким языком программирования вы работаете, эти базовые структуры данных необходимо освоить в первую очередь. Конкретная реализация отражена в классе коллекции java. Необходимо помнить об этих структурах данных, конкретных примитивных формах этих сложных инструментов.

Учебным агентствам обычно некогда популяризировать базовые знания, через алгоритмы и структуры данных «обычно» видно, обучены ли они.

Общие алгоритмы

Алгоритмы — это порог некоторых больших заводов. Нет никаких сомнений, что некоторые свежие выпускники, участвовавшие в ACM, могут моментально убить большинство кодовых фермеров, проработавших много лет. Алгоритмы могут развивать способность к логическому мышлению и практические способности, что является очень большим плюсом в первые несколько лет работы. Однако с увеличением трудового стажа его доля в системе способностей будет постепенно уменьшаться.

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

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

книги

«Введение в алгоритмы»
«Красота программирования»
«Красота математики»

Основы баз данных MySQL

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

MySQL отличается механизмом хранения. Наиболее часто используются InnoDB и MyISAM, плюсы и минусы которых очевидны. ACID является основным свойством реляционных баз данных, и необходимо понимать уровень изоляции транзакций, стоящий за ним. Следует также понимать причины грязного чтения и фантомного чтения.

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

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

книги

"Инсайдер технологии MySQL - механизм хранения InnoDB"
«Высокопроизводительный MySQL»
«Высокодоступный MySQL»

Основы сети

Сетевое общение является одной из самых привлекательных черт эпохи Интернета, можно сказать, что наша работа и жизнь связаны с этим постоянно.

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

HTTP является наиболее широко используемым протоколом и обычно требует более глубокого понимания. Для Java знакомство с разработкой Netty — это кратчайший путь к началу веб-разработки.

Crawler — еще один интересный момент в веб-разработке, но для этого рекомендуется использовать python, а не java.

книги

Полное руководство по HTTP
"Подробное объяснение TCP/IP, том 1"

Операционная система Линукс

Все окончившие специальность изучали курс «Организация компьютера», который очень важен, но очень скучен. Сочетание с пониманием Linux будет гораздо более интуитивным. Учитывая, что большинство серверных сред сегодня представляют собой Linux, раннее знакомство с ними может дополнять друг друга.

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

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

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

книги

Расширенное программирование в среде UNIX (3-е издание)
«Линукс-кухня Brother Bird»
«Проектирование и реализация ядра Linux»
«Энциклопедия командной строки Linux»

Статьи по Теме

«В Linux наиболее часто используемый пакет анализа команд (выбор за 10 лет)»

Основы Java

JVM

Любимец и кошмар Java-программиста. Версия оракула имеет преимущественную силу, существуют различия между различными версиями jvm. Знание JVM состоит из двух аспектов. Один находится на уровне хранения, а другой — на уровне выполнения.

Если взять в качестве примера хранилище, то оно делится на два типа: in-heap и out-of-heap, каждый со своими достоинствами. Сборщик мусора предназначен для памяти в куче, и наиболее часто используемые из них — CMS и G1. JVM имеет очень богатый набор параметров конфигурации для управления этим процессом. На уровне байт-кода будут такие знания, как эскалация блокировок и барьеры памяти, а JIT-компиляция повысит скорость выполнения.

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

Кроме того, jdk также предоставляет ряд инструментов для отслеживания этой информации. В том числе наиболее часто используются jstat, jmap, jstack, jvisualvm и т. д.

книги

"Глубокое понимание виртуальной машины Java"

JDK

Теперь, наконец, к ядру программистов Java: JDK, набор API, реализованный в соответствии со спецификацией jvm. Наша обычная работа — объединить эти API для управления поведением программы.

Код jdk очень большой, а содержание очень сложное. К наиболее важным из них обычно относятся: коллекции, многопоточность, NIO, отражение, операции с файлами, синтаксис Lambda и т. д. В этой части, а также в приведенном ниже SSM играет большинство маленьких друзей.

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

книги

«Эффективное китайское издание Java»
«Структура данных и анализ алгоритмов: описание языка Java»

SSM

Вы можете разработать проект с помощью SSM и думать, что программирование — это все. Шаблоны проектирования плохо запоминаются, а IOC и АОП легко понять. Большинство сверстников сосредоточены здесь, и некоторые могут быть в порядке на этом этапе, потому что некоторые студенты будут сосредоточены на управлении проектами, а не на технологиях.

Лучше всего SSM делает веб-разработку. Текущие формы выражения постепенно диверсифицируются, и с преобладанием разделения на интерфейс и сервер постепенно становится популярной модель Restful с четкой семантикой.

книги

«Шаблоны проектирования Head First»
"Весна раскрыта"
«Секрет Спрингбут»
"Инсайдерская информация о технологиях MyBatis"
"Углубленный анализ Tomcat"

На самом деле, просто следуйте документу один раз, многие книги — это просто переводы.

параллельное программирование

Сегодняшние серверы многоядерные, и одновременного программирования становится все больше. В Java есть множество способов создания нескольких потоков, но в настоящее время используется больше пулов потоков. Основой пула потоков является AQS, основанный на AQS, существует множество расширений классов инструментов.

В Java существует много способов одновременной блокировки и синхронизации потоков. Блокировки можно разделить на оптимистичные блокировки/пессимистические блокировки и честные блокировки/несправедливые блокировки.Написать код взаимоблокировки по-прежнему немного сложно.

Есть две проблемы, которые исследуются очень часто: одна — ABA, а другая — псевдосовместное использование. Параллельное программирование обычно сочетается с сетевым программированием, чтобы предоставить набор решений проблемы.

Это крепкий орешек в Java.

книги

«Серия основных технологий Java: базовая технология многопоточного программирования Java»
Полное руководство по производительности Java
«Практика параллельного программирования на Java»

Настройка производительности и устранение неполадок

Некоторые считают, что это должно быть прерогативой SRE, но обычно наиболее знакомым с бизнесом является разработка, а технология не имеет четких границ. Овладение этим контентом выделит вас из толпы.

От оптимизации ядра операционной системы до индексации баз данных и оптимизации транзакций — эта часть набора навыков построена на прочном фундаменте. Это основа операционной системы.

С каждым компонентом операционной системы могут быть проблемы, и Java-серверу очень легко обнаружить эти проблемы. Например, общая проблема переполнения памяти.

книги

Вершина производительности: понимание систем, предприятий и облачных вычислений
"Практика построения высокопроизводительных Linux-серверов"

Java расширенный

Ниже есть некоторые точки знаний, границы очень размыты. У них я в тебе, а у меня ты в них, так сказать, они одно целое.

Redis

Кэширование, возможно, является наиболее широко используемой технологией в компьютерных системах. Для распределенного кеша чаще всего используется Redis. Благодаря богатой структуре данных он используется во все большем количестве сценариев.

Основные 5 типов данных известны, но если назвать остальные, то впечатление будет другим. Redis имеет два режима кластера: ведущий-ведомый и кластер, и конфигурации высокой доступности также различаются.

Redis может адаптироваться практически ко всем интернет-сервисам, кроме поиска, для его использования очень нужны некоторые ограничения спецификации. Как правило, чем быстрее система, тем легче ее затащить на смерть операцией длинного хвоста. Таким образом, дляinfoСодержание команды также должно быть понято.

Есть три момента, на которые следует обратить особое внимание: распределенные блокировки, ограничение тока и синхронизация с исходными данными.

книги

"Редис бой"
«Разработка, эксплуатация и обслуживание Redis»
«Проектирование и реализация Redis»

Статьи по Теме

«Вероятно, это наиболее подходящая спецификация Redis».

Kafka

MQ — очень важный компонент в распределенных системах, и Kafka в настоящее время используется наиболее широко. Помимо использования в сценариях с большими данными, Kafka также можно использовать в бизнес-системах.

Kafka работает очень быстро, в зависимости от настроенного уровня ACK надежность увеличивается, но тормозит. Для системы сообщений мониторинг и сигнализация являются очень важной частью, которая может заранее предсказать системные проблемы. Сам кластер Kafka отличается высокой доступностью и зависит от компонента Zookeeper. Понимание некоторых основных понятий, включая ISR, может помочь вам понять этот процесс более подробно.

книги

«Введение и практика Кафки»
"Инсайдер технологий Кафки"

Статьи по Теме

«Указатель базовых знаний Кафки»

Разделение JDBC

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

По уровню сегментации самое похожее — врезаться на прокси-уровне и драйверном уровне. ShardingJDBC — это компонент на уровне драйвера.

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

Те, у кого есть условия для прохождения этого процесса, являются ценным активом. У него много проблем не только технических, но и процедурных. Вы познакомитесь с технологиями, процессами, управлением, независимо от семьи.

Статьи по Теме

«Подбиблиотека и подтаблица»? Отбор и процесс должны быть осторожными, иначе все выйдет из-под контроля».

Микросервисы и промежуточное ПО

В настоящее время самой популярной микросервисной архитектурой является SpringCloud. Это очень просто для студентов, знакомых с разработкой SSM. Микросервисы имеют ключевые компоненты, такие как реестр, RPC, балансировка нагрузки, автоматический выключатель, ограничение тока, шлюз и т. д. Некоторые компоненты имеют множество различных альтернатив.

После разделения микросервисов возник ряд проблем, и требуется какая-то другая промежуточная поддержка. Например, мониторинг сигнализации, ELKB, центр конфигурации, диспетчерский центр, цепочка вызовов и т. д. Хоть они и нужны без микросервисов, но явно лучше сочетаются. Различные A/B-тесты, канареечные, оттенки серого и т. д., по сути, являются одной из конечных целей.
Микросервисы представляют собой сложный монолит, который включает в себя как технические аспекты, так и аспекты управления процессами.

книги

Масштабируемая сервисная архитектура: платформы и ПО промежуточного слоя
«Практическая архитектура микросервисов Spring Cloud и Docker»
«Путь архитектуры»

распределенный

Когда количество серверов увеличивается, некоторым службам, в том числе упомянутым выше микросервисам, необходимо координировать свои действия и взаимодействовать друг с другом. Это распределенная система.

Теоретическая основа распределенных — это CAP, BASE и так далее. Для согласованности существует множество алгоритмов, среди которых Raft, как простой для понимания выскочка, все шире используется.

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

Статьи по Теме

«Также поговорим о ключевых моментах распределенного хранилища»

книги

«Основы NoSQL»
«ZooKeeper: подробное объяснение технологии совместной работы с распределенными процессами»
«Принцип и практика распределенной согласованности от Paxos до Zookeeper»

Технология поддержки

Основная эксплуатация и техническое обслуживание

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

Это место, где можно проверить всестороннее качество, как широту, так и глубину.

Статьи по Теме

«Так много компонентов мониторинга, всегда найдется подходящий для вас»

книги

"Беги, Ансибл"
«Докер — контейнеры и облака контейнеров»
Полное руководство по Kubernetes
Полное руководство по Дженкинсу
"Глубокое понимание Nginx"

Безопасность

Безопасность – это немаловажный вопрос, то же самое верно для строительных площадок и системной безопасности. Необходимо быть знакомым с некоторыми часто используемыми атаками и алгоритмами шифрования и дешифрования.

Это как запереть дверь своего дома: вы можете остановить большинство плохих парней, но не можете остановить беспринципных головорезов.

End

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

Стоит напомнить, что это знание является ответвлением многих путей развития. Могут быть друзья, которые в настоящее время борются только в одном из пунктов, не имея так называемой широты; также могут быть друзья, у которых есть фулстековые лейблы, но они занимаются SSM. Разные компании требуют разного уровня технологий. Компания, специализирующаяся на бизнесе ERP, будет иметь больше статей по управлению проектами; команда, специализирующаяся на IM, может быть хорошо знакома с разработкой сети.

еще раз подчеркнуть. Этот технический пункт организован для отдельных лиц, чтобы исправить когнитивное искажение, я буду поддерживать проект github, следить за классификацией и добавлять новые связанные статьи в режиме реального времени (пожалуйста, отправьте PR). Если у вас есть какие-либо идеи, пожалуйста, дайте мне обратную связь как можно скорее, большое спасибо.