основная версия | Время обновления | Примечание |
---|---|---|
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) в процессе обучения. (Холлис). Добро пожаловать учиться вместе.