Дорога к Богу как Java-инженер (пересмотренное издание 2018 г.)

Java база данных алгоритм Безопасность
основная версия Время обновления Примечание
v1.0 2015-08-01 Начальная версия
v1.1 2018-03-12 Расширьте знания о новых технологиях и улучшите систему знаний

1. Основы

JVM

Структура памяти JVM

Разница между кучей, стеком, областью метода, прямой памятью, кучей и стеком

Модель памяти Java

видимость памяти, переупорядочивание, последовательная согласованность, изменчивость, блокировка, окончательная

вывоз мусора

Стратегия выделения памяти, сборщик мусора (G1), алгоритм сборки мусора, параметры сборки мусора, определение выживания объекта

Параметры и настройка JVM

Объектная модель Java

oop-klass, заголовок объекта

HotSpot

Своевременный компилятор, оптимизация компиляции

механизм загрузки классов

classLoader, процесс загрузки классов, родительское делегирование (уничтожить родительское делегирование), модульность (модули jboss, osgi, jigsaw)

Средства мониторинга производительности виртуальных машин и устранения неполадок

jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace, TProfiler

Компиляция и декомпиляция

javac, javap, jad, CRF

Основы Java

прочитать исходный код

String, Integer, Long, Enum, BigDecimal, ThreadLocal, ClassLoader и URLClassLoader, ArrayList и LinkedList, HashMap и LinkedHashMap и TreeMap и CouncurrentHashMap, HashSet и LinkedHashSet и TreeSet

Различные типы переменных в Java

Знаком с использованием Java String, знаком с различными функциями String

Принцип и отличие подстроки в JDK 6 и JDK 7,

replaceFirst, replaceAll, замена разницы,

Строковые перегрузки "+",

Разница между String.valueOf и Integer.toString,

неизменность строк

Автоматическая распаковка

Целочисленный механизм кэширования

Знаком с различными ключевыми словами в Java

переходный, instanceof, изменчивый, синхронизированный, окончательный, статический, постоянный Принцип и использование.

Класс коллекции

Использование общих классов коллекций, разница между ArrayList и LinkedList и Vector, разница между SynchronizedList и Vector, разница между HashMap, HashTable, ConcurrentHashMap, связанное использование потока в Java 8, использование класса инструмента обработки коллекции apache, реализация HashMap в разных версиях JDK разница и почему

перечислить

Использование перечисления, перечисление и синглтон, класс Enum

Java IO и Java NIO и научитесь использовать

Разница между bio, nio и aio, использование и принципы трех IO, netty

Отражение Java и javassist

отражение и заводской узор,java.lang.reflect.*

Java-сериализация

Что такое сериализация и десериализация, почему сериализация, базовый принцип сериализации, сериализация и одноэлементный режим, protobuf, почему сериализация небезопасна

аннотация

Мета-аннотации, пользовательские аннотации, использование общих аннотаций в Java, сочетание аннотаций и рефлексии

JMS

Что такое служба сообщений Java, модель обмена сообщениями JMS

JMX

java.lang.management.*,javax.management.*

Дженерики

Дженерики и наследование, Type Erasure, KTVE в дженериках? Значение объекта и т. Д., Различные варианты использования дженериков.

модульный тест

junit, mock, mockito, база данных в памяти (h2)

регулярное выражение

java.lang.util.regex.*

Часто используемая библиотека инструментов Java

commons.lang, commons.*... guava-libraries netty

Что такое API и SPI

аномальный

Типы исключений, правильная обработка исключений, пользовательские исключения

обработка времени

Часовой пояс, сезон, API времени в Java

Кодирование

Решение проблемы искаженных символов, распространенные методы кодирования

синтаксический сахар

Принцип синтаксического сахара в Java, решение синтаксического сахара

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

Что такое поток и отличие от процесса

Прочтите исходный код и научитесь использовать

Thread, Runnable, Callable, ReentrantLock, ReentrantReadWriteLock, Atomic*, Semaphore, CountDownLatch, ConcurrentHashMap, Executors

Пул потоков

Создайте свой собственный пул потоков, submit() и execute()

потокобезопасность

Взаимная блокировка, как устранить взаимоблокировку, планирование потоков Java, взаимосвязь между безопасностью потоков и моделью памяти

Замок

CAS, оптимистичные блокировки и пессимистические блокировки, механизмы блокировки, связанные с базой данных, распределенные блокировки, предвзятые блокировки, облегченные блокировки, тяжеловесные блокировки, мониторинг, оптимизация блокировок, устранение блокировок, огрубление блокировок, спин-блокировки, повторные блокировки, блокирующие блокировки, тупиковые блокировки

тупик

volatile

происходит до, переупорядочивание инструкций компилятора и переупорядочивание инструкций ЦП

synchronized

Как реализована синхронизация? Связь между синхронизацией и блокировкой, как реализовать потокобезопасный синглтон без синхронизации

спать и ждать

подождите и сообщите

уведомлять и уведомлять всех

ThreadLocal

Написать заблокированную программу

Напишите код для решения проблемы производителя-потребителя

Нить демона

Разница и использование потоков демона и потоков, не являющихся демонами

2. Расширенный

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

Байт-код, формат файла класса

Кэш ЦП, L1, L2, L3 и ложное совместное использование

хвостовая рекурсия

битовая операция

Сложение, вычитание, умножение, деление и получение остатка с помощью побитовых операций

Шаблоны проектирования

Узнайте о 23 шаблонах проектирования

Используйте общие шаблоны проектирования

Синглтоны, политики, фабрики, адаптеры, цепочки ответственности.

Внедрить АОП

Внедрение IOC

Реализовать поточно-ориентированный одноэлементный шаблон без синхронизации и блокировки

нио и схемы проектирования реакторов

Знание сетевого программирования

Общие протоколы, такие как tcp, udp, http, https

Трехстороннее рукопожатие и четырехкратное закрытие, управление потоком и контроль перегрузки, семиуровневая модель OSI, привязка и распаковка tcp

Разница до http/1.0 http/1.1 http/2

Java RMI, сокет, HttpClient

куки и сеансы

cookie отключен, как реализовать сеанс

Напишите простой HTTP-сервер для статических файлов на Java.

Реализовать функцию кэширования на стороне клиента, поддерживать возврат 304 Реализовать одновременную загрузку файла Использовать пулы потоков для обработки клиентских запросов Использовать nio для обработки клиентских запросов Поддержка простых правил перезаписи Вышеуказанные функции должны соответствовать «принципу открытого и закрытого» при реализации

Понять характеристики серверов nginx и apache и построить соответствующий сервер

Реализация протоколов FTP и SMTP с помощью Java

способ связи между процессами

Что такое CDN? Если реализовано?

Что такое ДНС?

обратный прокси

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

Проблемы с безопасностью потоков сервлетов

Фильтр и прослушиватель в сервлете

Механизм кэширования Hibernate

Спящий режим с ленивой загрузкой

Инициализация Spring Beans

Принцип АОП Spring

Реализуйте IOC Spring самостоятельно

Spring MVC

Spring Boot2.0

Стартерный принцип Spring Boot, реализуйте стартер самостоятельно

Spring Security

Знание сервера приложений

JBoss

tomcat

jetty

Weblogic

инструмент

git & svn

maven & gradle

3. Расширенный

новая технология

Java 8

лямбда-выражения, Stream API,

Java 9

Jigsaw, Jshell, реактивные потоки

Java 10

Вывод типа локальной переменной, параллельный полный сборщик мусора G1, механизм рукопожатия ThreadLocal

Spring 5

реактивное программирование

Spring Boot 2.0

оптимизация производительности

Использовать синглтон, использовать шаблон Future, использовать пул потоков, выбрать готовый, уменьшить переключение контекста, уменьшить степень детализации блокировки, сжатие данных, кэширование результатов

онлайн анализ проблем

свалка получить

Дамп потока, дамп памяти, ситуация с gc

анализ дампа

Анализ взаимоблокировок и анализ утечек памяти

Самостоятельно писать различные программы outofmemory, stackoverflow

HeapOutOfMemory, Young OutOfMemory, MethodArea OutOfMemory, ConstantPool OutOfMemory, DirectMemory OutOfMemory, Stack OutOfMemory Stack Overflow

Общие идеи решения проблем

Переполнение памяти, взаимоблокировка потока, конфликт загрузки классов

Используйте инструменты, чтобы попытаться решить следующие проблемы и написать резюме

Как найти проблемы, когда программа Java отвечает медленно,

Как решить проблему, когда Java-программа часто использует FullGC,

Как просмотреть логи сборки мусора,

Как решить, когда OutOfMemory возникает в приложении Java,

Как судить, есть ли тупик,

Как узнать, есть ли утечка памяти

Знание принципа компиляции

Компиляция и декомпиляция

Компиляция и декомпиляция кода Java

декомпилятор Java

Лексический анализ, синтаксический анализ (алгоритм LL, алгоритм рекурсивного спуска, алгоритм LR), семантический анализ, среда выполнения, промежуточный код, генерация кода, оптимизация кода

Знание операционной системы

Общие команды в Linux

Синхронизация процессов

переполнение буфера

Сегментация и пагинация

виртуальная память против основной памяти

Знание баз данных

Исполняющий движок MySql

План выполнения MySQL

Как просмотреть план выполнения и как оптимизировать SQL на основе плана выполнения

SQL-оптимизация

дела

Уровень изоляции транзакции и может ли транзакция реализовать функцию блокировки

блокировка базы данных

Блокировки строк, блокировки таблиц, оптимистическая блокировка с использованием блокировок базы данных,

Построение активной и резервной базы данных

binlog

База данных памяти

h2

Часто используемая база данных nosql

редис, memcached

Используйте блокировки базы данных и NoSql для реализации распределенных блокировок соответственно.

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

Знание структур данных и алгоритмов

простая структура данных

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

Дерево

Бинарное дерево, словарное дерево, сбалансированное дерево, дерево сортировки, B-дерево, B+ дерево, R-дерево, многоходовое дерево, красно-черное дерево

Алгоритм сортировки

Различные алгоритмы сортировки и временная сложность Поиск в глубину и в ширину Полная перестановка, жадный алгоритм, алгоритм KMP, хэш-алгоритм, массивная обработка данных

Знание больших данных

Zookeeper

Основные понятия и общее использование

Solr, Lucene, ElasticSearch

Развертывание solr, solrcloud, а также добавление, удаление и запрос индексов в Linux

Storm, Потоковые вычисления, Понимание Spark, S4

Разверните Storm на Linux, координируйте свои действия с zookeeper, запускайте Storm Hello World, запускайте и отлаживайте топологию Storm в локальном и удаленном режиме.

Hadoop, автономные вычисления

HDFS, MapReduce

Распределенный сбор логов flume, kafka, logstash

интеллектуальный анализ данных, погонщик

Знание сетевой безопасности

Что такое XSS

Защита от XSS

Что такое CSRF

Что такое инъекционная атака

SQL-инъекция, XML-инъекция, CRLF-инъекция

Что такое уязвимость загрузки файлов

шифрование и дешифрование

MD5, SHA1, DES, AES, RSA, DSA

Что такое DOS-атака и DDOS-атака

Почему memcached может привести к DDos-атакам и что такое отражающий DDoS

SSL, TLS, HTTPS

Как провести DOS-атаку через коллизию хэшей

Подпишите сертификат с помощью openssl и разверните его на apache или nginx.

4. Архитектура

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

Непротиворечивость данных, управление услугами, деградация услуг

Распределенная транзакция

2ПК, 3ПК, КРЫШКА, БАЗА, Надежная консистентность сообщений, уведомление о максимальных усилиях, TCC

Dubbo

Регистрация службы, обнаружение службы, управление службами

Распределенная база данных

Как создать распределенную базу данных, когда вам нужна распределенная база данных, mycat, otter, HBase

Распределенная файловая система

мфс, фастдфс

Распределенный кеш

Когерентность кэша, частота попаданий в кэш, избыточность кэша

Микросервисы

SOA, закон Конвея

ServiceMesh

Docker & Kubernets

Spring Boot

Spring Cloud

Высокий параллелизм

Подбиблиотека и подтаблица

Технология CDN

очередь сообщений

ActiveMQ

монитор

что контролировать

ЦП, память, дисковый ввод-вывод, сетевой ввод-вывод и т. д.

Средства мониторинга

Мониторинг процессов, семантический мониторинг, мониторинг машинных ресурсов, колебания данных

Сбор данных мониторинга

журнал, журнал

Dapper

балансировки нагрузки

балансировка нагрузки tomcat, балансировка нагрузки Nginx

DNS

Принцип DNS, дизайн DNS

CDN

согласованность данных

5. Расширения

облачные вычисления

IaaS, SaaS, PaaS, технология виртуализации, openstack, Serverlessess

поисковый движок

Solr, Lucene, Nutch, Elasticsearch

управление полномочиями

Shiro

блокчейн

Алгоритм хеширования, дерево Меркла, алгоритм шифрования с открытым ключом, алгоритм консенсуса, протокол Raft, алгоритм Paxos и алгоритм Raft, византийская проблема и алгоритм, код аутентификации сообщения и цифровая подпись

биткойн

Майнинг, Механизм консенсуса, Lightning Network, Сайдчейны, Горячие вопросы, Вилки

Эфириум

Гиперледжер

искусственный интеллект

Математическая основа, машинное обучение, искусственная нейронная сеть, глубокое обучение, сценарии применения.

Общая структура

TensorFlow, DeepLearning4J

Другие языки

Groovy, Python, Go, NodeJs, Swift, Rust

6. Рекомендуемые книги

"Глубокое понимание виртуальной машины Java" «Эффективная Java» «Углубленный анализ инсайдерской технологии Java Web» «Техническая архитектура больших сайтов» «Чистый код» «Шаблоны проектирования Head First» "мавен бой" «Принцип блокчейна, дизайн и применение» «Практика параллельного программирования на Java» «Линукс-кухня Brother Bird» «От Паксоса до смотрителя зоопарка» «Архитектура — это будущее»

PS: я обогащал свою систему знаний в соответствии с этим набором руководств для продвинутых программистов на Java, и я подытожу то, что я узнал в своем блоге (http://www.hollischuang.com) в процессе обучения. (Холлис). Добро пожаловать учиться вместе.

Подпишитесь на мою официальную учетную запись, 2000G ресурсов для обучения Java будут раздаваться бесплатно