Если был такой жестокий день, я случайно выпил не ту бутылку лекарства, перечеркнул свой более чем десятилетний опыт программирования и превратил меня в новичка. Я хочу изучать Java самостоятельно, и я хочу найти работу, я ожидаю, что это займет 6 месяцев, предпосылкой является то, что я нахожусь в состоянии высокоэффективного обучения каждый день, и я учусь не менее 12 часов в день.
Тем не менее, я уверен, что работа, которую я нашел, будет не очень хорошей, и я едва смогу зарабатывать на жизнь, ведь это запись с нуля.
Если вы хотите пойти дальше и действительно стать незаменимым старшим Java-инженером, это займет больше времени, два, три, пять лет, пока вы не станете лысым.
Думая об этом, я почувствовал необходимость подготовиться к этому дню, на всякий случай.
01. Первый этап, подготовка среды и инструмента
- Подготовьте компьютер с доступом в Интернет
- Загрузите и установите JDK, настройте среду разработки Java
- скачать, настроитьMaven
- Загрузите и установите IntelliJ IDEA.
- Подготовьте репозиторий GitHub (или облако кода) для управления исходным кодом Java.
Java — это компьютерный язык программирования, и если вы его выучите, у вас даже не будет компьютера. У меня есть ребенок родственника, который хочет научиться программировать, поэтому он только читает книги, у него дома даже компьютера нет, когда он говорит "сначала заложить хорошую теоретическую базу, а потом практиковаться", я действительно немного пьян.
Если у вас есть компьютер, вы должны быть подключены к Интернету.Вы обязательно столкнетесь со многими проблемами в процессе самостоятельного обучения.Когда вы столкнетесь с проблемой, сначала спросите поисковую систему, и порекомендуйте Google и Bing.Если есть нет ответа, вы также можете прийти ко мне и подать заявку на вступление в группу технического обмена, спросите у больших парней в группе.
Поскольку вы хотите изучать Java, сначала необходимо установить JDK, иначе Java-программы не смогут быть скомпилированы и выполнены.
Maven также необходимо установить и настроить заранее, потому что, если вы продолжите работу позже, вам потребуются некоторые практические проекты, которые обычно требуют, чтобы Maven загружал сторонние библиотеки классов.
Используйте интегрированную среду разработки IntelliJ IDEA для написания кода Java, более популярную, чем Eclipse. Не используйте Блокнот для написания исходного кода. Для Xiaobai время драгоценно. Блокнот подходит только для того, чтобы большие коровы притворялись, а не для использования Xiaobai для программирования (введение). Это пустая трата времени.
С IDEA будет гораздо удобнее потом изучать исходный код, включая декомпиляцию байткода.
Если ваши знания английского языка не очень хороши, рекомендуется установить эти два плагина IDEA:китайский и перевод.
Если вы обращаете внимание на стандарты кодирования, рекомендуется установить эти два плагина IDEA:Алибаба и СонарЛинт.
Зачем вам репозиторий GitHub или облачный репозиторий кода? Их можно использовать для онлайн-синхронизации исходного кода с облаком, что предотвращает потерю версии. По окончанию обучения вы также можете сформировать свою библиотеку инструментов, и у вас будут колеса.Эффективность работы будет намного выше, когда вы пойдете на работу, а код, который можно использовать напрямую, больше не нужно будет переписано.
02. Второй этап, базовое введение в Java
1) Основные типы данных
- 8 основных типов данных (boolean, char, byte, short, int, long, float, double)
- Диапазон значений byte, short, int и long в целых числах
- одинарная и двойная точность
- Почему вы не можете использовать "==" для сравнения чисел с плавающей запятой
- Разница между примитивными типами и типами-оболочками
- Автоматическая распаковка и упаковка
- Целочисленный механизм кэширования
2) Оператор
- арифметические операторы
- Логические операторы
- оператор сравнения
3) Оператор управления потоком
- Условные переходы (if/else/else if, тернарный оператор,switch)
- Цикл или обход (для, пока, делать-пока)
- прерваться и продолжить
4) Пакет
- Создать пакет
- импортный пакет
- полное имя пакета
5) Подробное объяснение основного метода
- общедоступное ключевое слово
- статическое ключевое слово
- пустое ключевое слово
- основной метод
- Параметр строкового массива (
String[] args
)
- Что такое массив?
- массив доступа
- перебирать массив
- печатать массив
- переменный параметр
- сортировка массива
- Преобразовать массив в поток
- Массив в список
- поиск по массиву
- java.util.Arrays
- массив выходит за пределы
7) Примечания
- однострочный комментарий
- многострочный комментарий
- Примечания к документации
- Аннотации действительно не выполняются?
- Неужели хорошие программисты не пишут комментарии?
8) Строка
- Строки в двойных кавычках и новые строковые объекты
- Почему строки неизменяемы?
- Разница между String, StringBuilder и StringBuffer
- Несколько способов объединения строк
- Пул строковых констант
- О стажере
- Сравнение строк (== и равно)
- разделение строки
- Советы по работе со строками
- Строка для изменения формы
- Сгенерировать UUID
- Можно ли передавать строки по ссылке?
- длина строки
- О подстроках
03. Третий этап, базовая технология Java
1) Объектно-ориентированный
- Объектно-ориентированный и процессно-ориентированный
- упаковка
- наследовать
- полиморфизм
- интерфейс
- абстрактный класс
- Переопределение и перегрузка
- Метод строительства
- Локальные переменные, переменные-члены, статические переменные, константы
- передача по значению или передача по ссылке
- конечное ключевое слово
- это ключевое слово
- супер ключевое слово
- неизменяемый объект
- равно() и hashCode()
- печатать объекты Java
- NullPointerException
2) Общие инструменты
- Инструменты, связанные со строками
- Инструменты, связанные с датой и временем
- перечислить
- случайный номер
- регулярное выражение
- Библиотека инструментов Apache-commons
- Библиотека инструментов гуавы
3) Структура коллекции
- ArrayList
- LinkedList
- Разница между ArrayList и LinkedList
- Неизменяемый список
- CopyOnWriteArrayList
- HashMap
- LinkedHashMap
- TreeMap
- ConcurrentHashMap
- fail-fast
- Что такое отражение?
- Какая польза от отражения?
- класс класс
- Зачем нужен механизм обработки исключений?
- Ошибка и исключение
- try-catch-finally
- try-with-resource
- пользовательское исключение
- Попробуйте поймать исходное исключение
- Не печатать стек, а затем выдавать исключение
- Не заменяйте суждение механизмами обработки исключений.
- Не перехватывайте исключения преждевременно
- Что такое аннотации?
- Жизненный цикл аннотации
- Цель украшения аннотации
- пользовательская аннотация
- использовать аннотации
7) поток ввода-вывода
- поток символов, поток байтов
- входной поток, выходной поток
- Синхронный Асинхронный
- блокирующий, не блокирующий
- БИО, НИО и АИО
- NIO 2.0
- Что такое сериализация и десериализация
- Как Java реализует сериализацию и десериализацию
- Serializbale и Externalizable
- serialVersionUID
- Что такое дженерики?
- стирание типа
- Проблемы с дженериками
- Значение этих специальных подзаголовков в родовом типе K T V E
- подстановочный знак
- Квалификаторы верхней и нижней границы extends и super
- Не используйте примитивные типы Java в коллекциях
10) Модульное тестирование
- Junit
- TestNG
11) Метод кодирования
- ASCII
- Unicode
- UTF-8
- ГБК, ГБ2312
- Как исправить искаженные символы
12) Параллельное программирование
- что такое параллелизм
- что такое параллелизм
- что такое нить
- что такое процесс
- состояние потока
- приоритет потока
- создать тему
- Создать пул потоков
- что такое безопасность потоков
- Проблемы с многоуровневым кэшированием и когерентностью
- Срезы процессорного времени и проблемы атомарности
- Перестановка инструкций и вопросы заказа
- потокобезопасность и модель памяти
- happens-before
- повторная блокировка
- блокирующий замок
- оптимистическая блокировка
- пессимистический замок
- Распределенная блокировка
- CAS
- ABA
- Блокировка смещения
- Легкий замок
- тяжелый замок
- блокировка спина
- что такое тупик
- Если избежать тупика
- synchronized
- volatile
- ThreadLocal
- Executors
- CountDownLatch
- Thread
- Runnable
- Callable
- ReentrantLock
- ReentrantReadWriteLock
- Классы, связанные с атомами
13) Новые функции Java 8
14) Чтение исходного кода
- String
- Integer
- ArrayList
- LinkedList
- CopyOnWriteArrayList
- HashMap
- TreeMap
- LinkedHashMap
- ConcurrentHashMap
- CopyOnWriteArrayList
04. Четвертый этап, расширенное обновление Java
1) JVM
- Структура памяти Java
- куча
- куча
- вывоз мусора
- Настройка параметров JVM
- Объектная модель Java
- HotSpot
- механизм загрузки классов
- Компиляция и декомпиляция
- декомпилятор
- JIT
- Инструмент мониторинга производительности виртуальной машины и устранения неполадок (jps, jstack, jmap, jstat, jconsole, javap)
2) Оптимизация производительности
- использовать синглтон
- Использовать пул потоков
- уменьшить переключение контекста
- Уменьшить детализацию блокировки
- Сжатие данных
- Параллельный поток
- Настройка GC
- Настройка распределения памяти JVM
- btrace
3) Шаблоны проектирования
- Шесть принципов шаблонов проектирования
- Создание шаблонов проектирования (Singleton, Abstract Factory, Builder, Factory, Prototype)
- Шаблоны структурного проектирования (адаптер, мост, декоратор, композиция, фасад, приспособленец, прокси)
- Шаблоны поведенческого проектирования (методы шаблонов, команды, итераторы, наблюдатели, посредники, заметки, интерпретаторы, состояния, политики, цепочки ответственности, посетители)
- Семь способов написать синглтон
4) Структуры данных и алгоритмы
- Простые структуры данных (стеки, очереди, связанные списки, массивы, хеш-таблицы)
- Деревья (бинарное дерево, словарное дерево, сбалансированное дерево, отсортированное дерево, B-дерево, B+-дерево, R-дерево, красно-черное дерево, многоканальное дерево)
- куча
- Графы (топология, направленные, неориентированные)
- Стабильные алгоритмы сортировки (пузырьковая сортировка, сортировка вставками, коктейльная сортировка, сортировка ведрами, сортировка подсчетом, сортировка слиянием, сортировка слиянием на месте, сортировка двоичным деревом, сортировка голубиным гнездом, сортировка по основанию, сортировка гномов, сортировка библиотекой, блочная сортировка)
- Нестабильные алгоритмы сортировки (сортировка выбором, сортировка холма, сортировка гребнем, сортировка кучей, гладкая сортировка, быстрая сортировка, сортировка самоанализа, сортировка терпения, сортировка Клевера)
- временная сложность
- космическая сложность
- как дела
- Алгоритм КМП
5) Операционная система
- Общие команды Linux (find, top, tar, move, grep, tail, netstat, curl, wget, ping, ssh)
- Показатели производительности сервера (QPS, загрузка ЦП)
- Синхронизация процессов
- Сегментация и пагинация
- виртуальная память и основная память
6) Безопасность сети
- CSRF
- XSS
- SQL-инъекция
- Шифрование и дешифрование (симметричное шифрование, асимметричное шифрование)
- MD5, SHA1, DES, RSA
- DDOS-атака
- HTTP и HTTPS
- SSL
- TLS
- TCP и UDP
- Файлы cookie, сеансы
- CDN
- DNS
7) База данных
- MySql
- показатель
- хранимая процедура
- Подбиблиотека и подтаблица
- binlog
- разделение чтения-записи
- Кэш базы данных (Redis,MongoDB)
- ПО промежуточного слоя базы данных (MyCat)
- Пул соединений с базой данных (Друид)
8) Большие данные
- поиск(Elasticsearch, Соль)
- Потоковые вычисления (Storm, Spark, Flink)
- Hadoop
9) Сервер
- Tomcat
- jetty
- Nginx
10) Рамка
- Spring
- MyBatis
- Spring MVC
- Spring Boot
- Spring Security
- Spring Cloud
- Netty
- Dubbo
11) Очередь сообщений
- RabbitMQ
- Kafka
12) Контейнер
- Docker
- K8s
Если вам нужен список книг по Java, яGitHubЯ нашел сокровище на веб-сайте, и просто просмотр каталога меня немного привлек.
Кому нужно, могут забрать по требованию, а адрес следующий:
05. Пятый этап, жить — самое главное
Технологии нет конца, и этому нельзя научиться, главное остаться в живых и не облысеть.
Когда вы начинаете с нулевых основ, вы должны читать книги или смотреть видео. Я думаю, взрослые, зачем вам нужно делать вопросы с несколькими вариантами ответов? Вам нужно и то, и другое. Если вам нравится читать книги, читайте книги, если вам нравится смотреть видео, смотрите видео.
Самое главное, что в процессе самообучения нужно не думать о мастерах, а вкладывать полученные навыки в проект, решать задачи, а затем еще больше оттачивать свои навыки.
Для проектов с открытым исходным кодом рекомендую mall и vhr на GitHub.Первый это система электронной коммерции, а второй-микроперсонал.Оба используют самые передовые технологии,и документация очень подробная,так что не бойтесь запутаться.
Самое страшное в самообучении - это отсутствие силы самодвижения.Вы должны быть самодисциплинированы и покончить с "три дня ловить рыбу и два дня сушить сети", а в конце концов вы будете заняты .
Имея высокую степень самодисциплины, вы должны быть терпеливы, никогда не сдаваться и не сдаваться, никогда не жалеть себя, каждый день немного поощрять себя, у вас будет много энергии для учебы, и вы не будете легко заснуть.
После того, как вы освоили технологию, вы должны подготовить хорошее резюме при поиске работы. Вы можете перейти по ссылке ниже и хорошо подготовить свое резюме, в конце концов, это ступенька к поиску работы.
После того, как я присоединился к Али, я понял, что мое резюме было написано так
Получив приглашение на собеседование, вы должны проявить великодушие во время собеседования и постараться максимально комфортно выразить полученные знания. Не будьте самоуверенны из-за того, что вы самоучка. шанс на успех на собеседовании уменьшится, будет гораздо больше, давай, Сао Нянь!