1. Предпосылки
Для меня язык Java, знакомый и незнакомый язык, оказался особенно любимым Java, я чувствовал, что это лучший язык в мире. Дизайн спецификации очень хорош, код выглядит очень полным, имеется огромная библиотека компонентов/jar. Короче говоря, это очень мощно. С годами не контактировали с ним и постепенно забывали. Нравится автомобиль, часто открытый раньше чувствовался очень плавно, а теперь снова открылся, сложнее найти ощущение того года, который я нашел. [Восстановить] JAVA
- 【Revisit】Базовые знания Java
- 【Пересмотр】Архитектура J2EE
- 【Вновь】Java Framework
- [Recapture] Возможности проекта Java
1.1 Видение Java
- Цель: решение задач разработки приложений в гетерогенной распределенной сетевой среде. Главной из этих проблем является безопасная доставка приложений, которые потребляют минимальные системные ресурсы, могут работать на любой аппаратной и программной платформе и могут динамически масштабироваться. [компилировать один раз, выполнять везде]
- Цель: разработать небольшую, надежную, портативную, распределенную операционную платформу реального времени.
1.2 Какую проблему решает Java?
- Язык C++ имеет недостатки, такие как утечка памяти, которые могут устранить недостатки языка C++ и впитать в себя суть других языков.
- Устранение зависимостей платформы и сокращение кода для сборки в соответствии с различными платформами
- Предоставляйте универсальные решения для пользователей, занимающихся разработкой сетей, встроенных устройств, настольных сред или распределенных сетевых сред. Предоставьте разработчикам возможность сосредоточиться на развитии бизнеса
1.3 Ваши собственные требования
- Простой, объектно-ориентированный, знакомый
- надежный и безопасный
- Нейтральная и портативная архитектура
- высокая производительность
- Скомпилируй один раз, запускай везде
1.4 Свод знаний по Java
1.5 Учебный проект
1.5.1 Система личных блогов
1.5.2 проект github (Java)
2 Основы Java (Java SE),Проверить
2.1 Архитектура виртуальной машины Java
Создайте java-файлы/файлы классов в соответствии с синтаксисом java, а затем напрямую загрузите java-файлы в JVM с помощью инструмента javac, а затем сгенерируйте байт-коды. Приложение запрашивает среду JRE, и JRE возвращает результат выполнения класса приложению.
Java SE: среда запроса CLI JRE -> вызов/создание файла класса -> вызов собственной библиотеки -> вывод
2.1.1 Виртуальная машина Java HotSpot,Проверить
Синтаксический анализатор языка Java может скомпилировать файл класса для создания файла класса. Общий процесс: 1. Классификация: запросите блок памяти для исполняемых объектов и переменных/объектов, поместите их в кучу и поместите методы в область методов 2. Процесс разбора и выполнения: для файлов классов сначала скомпилируйте , если есть какие-либо ошибки, такие как нулевые объекты / нулевые указатели, будут бросать людей на освобождение памяти, а память будет собираться после выполнения; 3. Вызывать методы локальной системы, такие как файл, ввод-вывод и другие методы для создания файлов классов.
- Загрузчик классов (ClassLoader): загружать необходимые классы в JVM при запуске JVM или во время работы класса.
- Область памяти (также называемая областью рабочих данных): это область памяти, выделенная операцией во время работы JVM. Область оперативной памяти можно в основном разделить на 5 областей.
- Область метода: хранить структурные данные, включая переменные, конструкторы
- Куча: объекты хранения, области методов и кучи совместно используются потоками Java.
- Стек: каждый поток создает стек для хранения локальных переменных и стеков операций, а также возвращаемых значений метода. Стек является частным и независимым.
- Счетчик программ (регистр ПК): сообщает адрес памяти текущего выполнения потока. Удобно переключаться перед потоком, а также может восстановить исходное состояние.
- Механизм выполнения: генерировать файлы классов
- Интерфейс собственного метода: вызов c или c++ для реализации собственных методов и возврата результатов.
2.1.2 В зависимости от вычислительных возможностей системы можно настроить нижний размер кучи и размер стека,Проверить
2.1.3 Механизм загрузки классов Java,Проверить
Основная идея загрузки класса: для ссылочного класса он будет загружен первым, если он будет найден в конфигурации пути к классам, в противном случае он продолжит поиск, пока не будет найден rt.jar.Если он не существует, он сообщит ошибка "ClassNotFoundException"
- Наследственная загрузка классов
- шаг загрузки класса
В общем: загрузить файл класса -> проверка -> выделить место в памяти -> разрешение символов, переменные, константный пул -> можно использовать инициализацию
2.2 Основные понятия Java,Проверить
Базовые знания Java — это создание файлов классов Java в соответствии с Java API. Java API содержит компоненты/инструменты, как показано на следующей диаграмме:
-
Структура знаний Java
-
Документация по Java SE
2.2.1 Объектно-ориентированные концепции программирования (объектно-ориентированная концепция)
Объект содержит свойства и методы, а процесс CLI запускается через основную функцию для выполнения анализа файла класса.
- концепция объекта
public class Bicycle {
int speed = 1;
int gear = 1;
public void addSpeed(int value){
this.speed += value;
}
public int getSpeed(){
return this.speed;
}
public int getGear(){
return this.gear;
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
Bicycle b = new Bicycle();
b.addSpeed(3);
b.addSpeed(4);
System.out.println("Speed value :"+b.getSpeed());
System.out.println("Gear value :"+b.getGear());
}
}
- Концепция наследования: подклассы могут наследовать не частные вещи от родительского класса.
public class RoadBicycle extends Bicycle {
private int road =1;
public void setRoad(int val){
this.road += val;
//增加加速值
this.road += this.getGear();
}
public int getRoad(){
return this.road;
}
}
- Концепция интерфейса: абстракция классов и методов, а классы, которые наследуют интерфейс, должны реализовать все свои классы и методы.
public class Disk implements Circle{
private int weight = 100;
public void setWeight(){
this.weight += 10;
}
public int getLength() {
return this.weight/3;
}
public int getRadius() {
return this.weight/2;
}
}
- Концепция массивов: массивы, поддерживающие несколько измерений
public int[] getArray(){
int [] anArray = new int [10];;
for(int i=0; i<10; i++)
{
anArray[i] = i+10;
}
return anArray;
}
2.2.2 Основы языка
2.2.3 Классы и объекты
- Лямбда-регулярное выражение
public void invokeCalculator(){
Calculator myApp = new Calculator();
IntegerMath addition = (a, b) -> a + b;
IntegerMath subtraction = (a, b) -> a - b;
System.out.println("40 + 2 = " +
myApp.operateBinary(40, 2, addition));
System.out.println("20 - 10 = " +
myApp.operateBinary(20, 10, subtraction));
}
2.2.4 Аннотации (механизм аннотации)
Аннотации — это форма метаданных, предоставляющая данные о программе, которые не являются частью самой программы. Аннотации не имеют прямого влияния на работу кода, который они аннотируют.
-
Роль аннотаций:
- когда вы строите свой проект. Процесс сборки включает в себя создание исходного кода, компиляцию исходного кода, создание XML-файла, упаковку скомпилированного исходного кода и файлов в пакет JAR и т. д.
- Инструменты сборки, такие как Ant и maven, могут создавать исходные файлы на основе аннотаций.
- Механизм отражения Java может получать эти аннотации для создания документов и т. д.
-
Аннотации могут объявлять поля, классы, методы, свойства и т. д.
-
@Target: описывает область объектов, измененных аннотацией: аннотацию можно использовать для пакетов, типов (классы, интерфейсы, перечисления, типы аннотаций), членов типа (методы, конструкторы, переменные-члены, значения перечисления), параметры метода и локальные переменные. (например, переменные цикла, параметры catch).
-
@Retention определяет, как долго аннотация сохраняется: 1.SOURCE: действителен в исходном файле 2. CLASS: действителен в файле класса 3. RUNTIME: действителен во время выполнения
-
@Documented: общедоступный API, используемый для описания других типов аннотаций, которые следует использовать в качестве аннотированных членов программы.
-
Мета-аннотация @Inherited является маркерной аннотацией, @Inherited указывает, что аннотированный тип наследуется.
-
Определите формат аннотации:
  public @interface 注解名 {定义体}
2.2.5 Интерфейсы и наследование
2.2.6 Числа и строки
2.2.7 Generics (шаблон/шаблонный механизм),Проверить
-
Что делают дженерики: дженерики делают типы (классы и интерфейсы) параметрами при определении классов, интерфейсов и методов.
- Проверка типов проста во время компиляции
- Устранение приведения типов
- Позволяет программистам реализовывать алгоритмы общего назначения.
-
Общие параметры типа
E - Element (used extensively by the Java Collections Framework)
K - Key
N - Number
T - Type
V - Value
S,U,V etc. - 2nd, 3rd, 4th types
- общий код
public class OrderedPair<K, V> implements Pair<K, V> {
private K key;
private V value;
public OrderedPair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() { return key; }
public V getValue() { return value; }
}
public interface Pair<K, V> {
public K getKey();
public V getValue();
}
//泛型的处理
Pair<String, Integer> p1 = new OrderedPair<String, Integer>("Even", 8);
System.out.println("Generic key :" + p1.getKey() + " , value :" + p1.getValue());
2.2.8 Пакеты (концепция управления пакетами)
Предоставляет способ именования пакетов
2.3 Базовые классы Java, включая дату и время
2.3.1 Обработка исключений
Для перехвата исключений обработка исключений обычно осуществляется в файлах, вводах/выводах и базах данных.В этих местах возникают различные неопределенные ситуации, влияющие на их прерывание.
// 捕获异常
try {
} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
//扔出异常
public Object pop() {
Object obj;
if (size == 0) {
throw new EmptyStackException();
}
obj = objectAt(size - 1);
setObjectAt(size - 1, null);
size--;
return obj;
}
2.3.2 Базовый ввод/вывод
I для входного потока, O для выходного потока
-
Основной способ потока ввода/вывода
-
Ввод/вывод использует множество шаблонов проектирования.Поток предназначен для решения проблемы загрузки данных в буфер памяти.Прайтер в основном решает проблему сериализации/хранения потока.
-
Типовой поток включает:
- байтовый поток:
- поток сериализации объектов
- файловый поток
- Трубка
public boolean write(String sourceFileName, String targetFileName) throws IOException{
FileReader inputStream = null;
FileWriter outputStream = null;
try {
System.out.println("Now sourceFile :" +sourceFileName + " , targetFileName: "+ targetFileName);
inputStream = new FileReader(sourceFileName);
outputStream = new FileWriter(targetFileName);
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(c);
}
// return true;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
return false;
}
}
2.3.3 Параллелизм
В параллельном программировании есть две основные исполнительные единицы: процессы и потоки Процесс имеет независимую среду выполнения. Процесс обычно имеет полный набор собственных базовых ресурсов времени выполнения, в частности, каждый процесс имеет собственное пространство памяти. Следовательно, при работе с большим параллелизмом речь идет больше о нагрузке на ресурсы сервера связанными процессами или потоками. Включая ЦП, память и т.д.
- код потока
Есть два основных способа начать прямо сейчас: один — реализовать интерфейс Runable, а другой — наследовать Thread.
// 每个线程都继承了Runnable方法,每个方法都考虑执行的效果
public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
// 继承Thread的方式
public class HelloThread extends Thread {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new HelloThread()).start();
}
}
- В случае несогласованности памяти вы можете использовать синхронизированные блокировки синхронизации для поддержания согласованности.Проверить
Проблема в том, что если ресурс получает блокировку, а другой ресурс не освобождает блокировку, возникает взаимоблокировка. Таким образом, вам нужно учитывать сон ресурсов и необходимые перерывы.
- Пул потоков,Проверить
- corePoolSize: Размер основного пула
- maxPoolSize: максимальное количество потоков в пуле потоков, этот параметр также является очень важным параметром.
- keepAliveTime: указывает, как долго поток будет остановлен, если задача не выполняется.
- unit: единица времени параметра keepAliveTime
- workQueue: очередь блокировки, используемая для хранения задач, ожидающих выполнения.
- threadFactory: фабрика потоков, в основном используется для создания потоков;
public class Test {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(5));
for(int i=0;i <15 ; i++){
MyTask myTask = new MyTask(i);
executor.execute(myTask);
System.out.println("线程池中线程数目:"+executor.getPoolSize()+",队列中等待执行的任务数目:"+
executor.getQueue().size()+",已执行玩别的任务数目:"+executor.getCompletedTaskCount());
}
executor.shutdown();
}
}
class MyTask implements Runnable {
private int taskNum;
public MyTask(int num) {
this.taskNum = num;
}
@Override
public void run() {
System.out.println("正在执行task "+taskNum);
try {
Thread.currentThread().sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("task "+taskNum+"执行完毕");
}
}
2.3.4 Среда/свойства платформы
- java.util.Properties
Поддерживает crud, используя ключ и значение для системных атрибутов. Свойства наследуют java.util.Hashtable, вы можете использовать некоторые из его свойств
2.3.5 Регулярные выражения
В основном приобретение инструментария Java, Pattern.compile
Console console = System.console();
if (console == null) {
System.err.println("No console.");
System.exit(1);
}
while (true) {
Pattern pattern =
Pattern.compile(console.readLine("%nEnter your regex: "));
Matcher matcher =
pattern.matcher(console.readLine("Enter input string to search: "));
boolean found = false;
while (matcher.find()) {
console.format("I found the text" +
" \"%s\" starting at " +
"index %d and ending at index %d.%n",
matcher.group(),
matcher.start(),
matcher.end());
found = true;
}
if(!found){
console.format("No match found.%n");
}
}
2.4 Сбор и развертывание
2.4.1 Сбор -> Структура данных и алгоритм
Коллекция делится на три способа: Список (список-массив), Набор (коллекция, не допускающая дублирования элементов), Карта (коллекция ключей и значений), Очередь также является одним из способов.
-
структура данных
-
алгоритм
- Сортировать
- Перемешать
- Общие манипуляции с данными
- поиск
- сочинение
- Экстремальные значения: максимум и минимум
2.4.2 Дата/время
В основном используйте LocalTime для получения операций времени
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("MMM d yyyy");
LocalDate date = LocalDate.parse(input, formatter);
System.out.printf("%s%n", date);
2.5 Отражение
Суть механизма отражения заключается в проверке или изменении своего поведения в соответствии с блоком адресов, таким как блок адресов объектов, классов и методов. Основной механизм заключается в том, что виртуальная машина Java может использовать блок памяти через пространство имен + имя класса. И все классы/объекты имеют свои собственные метаданные, включая общедоступные, частные, свойства и т. д.
2.5.1 Функция
Хорошая часть заключается в том, что его можно вызывать извне, например, средства отладки, средства разработки, а объект Spring получается в соответствии с именем класса.Плохая часть в основном заключается в том, что производительность потребляет много и может повлиять на безопасность.
- Приложение можно использовать извне, например, Spring использует инверсию управления IoC для динамического вызова сконфигурированного объекта bean-компонента.
- На этом основаны браузеры классов и визуальная разработка, многие среды разработки, советы редакторов и предложения методов.
- Отладчик и инструменты тестирования: отладчик должен иметь возможность проверять закрытые члены класса, а инструмент тестирования может использовать механизм запуска для вызова API, который может быть обнаружен, гарантируя относительно высокое покрытие кода тестом.
2.5.2 Общая структура механизма отражения
Загрузите класс во время выполнения, затем найдите методы и поля класса (обычно путем анализа байт-кода для получения метаданных, связанных с классом), сгенерируйте информацию списка и, наконец, динамически загрузите класс.
2.6 Сеть, RMI и безопасность
2.6.1 Сеть,Проверить
- Топология сети, протокол 7-го уровня OSI преобразуется в протокол 5-го уровня TCP/IP.
Как правило, реальная обработка сети заключается в том, чтобы сосредоточиться на передаче данных с прикладного уровня на уровень TCP, а затем на преобразовании протокола IP.
-
содержимое пакета
-
Архитектура связи через сокет
Socket предназначен для решения двух типов данных, один для отправки данных, другой для получения данных, оба из которых связаны ip + портом, и сервер прослушивает данные Socket клиента, зацикливая
- Реализация кода сервера Socket в основном осуществляется через ввод-вывод,ПроверитьОбработка потока данных. Только сокет сетевое соединение установлено только каналы
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
while (true) {
String msg = br.readLine();
if ("exit".equalsIgnoreCase(msg))
break;
System.out.println("("
+ socket.getInetAddress().getHostAddress() + ":"
+ socket.getPort() + "):" + msg);
}
br.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- Розетка длинные и короткие соединения
Http обычно имеет три процесса: установление соединения, отправка запроса, прием запроса и, наконец, закрытие.Если канал закрыт на долгое время, это считается долгим соединением, в противном случае он закрывается после обработки, что считается короткое соединение.
2.6.2 RMI(Remote Method Invocation)
Этот метод удаленного вызова метода подходит для внутренней связи машины, но, учитывая совместимость системы, этот метод не очень хорош, В конце концов, обычно используется внутренняя связь http или веб-сервис. В основном путем регистрации этого метода, а затем его удаленного вызова в соответствии с параметрами и спецификациями метода. Он также должен основываться на спецификации RPC.
- эффект:
Удобство в том, что для языка java можно выполнять распределенные вычисления и привязку к языку, а в регистрационном списке виртуальной машины можно вызывать любую службу регистрации, но эта зависимость слишком сильная. Более поздний метод protobuf является заменой существующему. - Преимущества динамической загрузки кода: Динамическая загрузка путем регистрации классов. - Может вызывать удаленные интерфейсы и методы: в основном обрабатывается протоколом RPC/TCP. - Используйте RMI для создания распределенных приложений: вы можете поместить - Могут быть построены распределенные приложения: Computing Engine
2.6.3 Безопасность, [Просмотр](docs.Oracle.com/Java Color/Picture О...
)
В основном для обеспечения безопасной аутентификации продуктов Java, включая цифровые подписи.
2.7 JDBC
JDBC в основном решает API-интерфейс драйвера базы данных, предоставляемый JAVA, поэтому, пока соответствующий файл драйвера импортирован, его служба может быть вызвана.
2.7.1 Код JDBC для выполнения основных операций подключения и чтения данных
- API JDBC: Предоставьте унифицированный API с различными поставщиками данных, просто нужно ввести драйвер поставщика.
- JDBC Driver Manager: может динамически подключаться к нескольким типам баз данных.
- JDBC Test Suite: может тестировать характеристики использования JDBC.
- JDBC-ODBC Bridge: поддерживает логический способ вызова ODBC.
public void connectToAndQueryDatabase(String username, String password) {
Connection con = DriverManager.getConnection(
"jdbc:myDriver:myDatabase",
username,
password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
}
2.8 Наборы инструментов для Java-разработки
2.8.1 Системные требования и установка
2.8.2 документация JDK,Проверить
- Базовые инструменты (appletviewer, extcheck, jar, java, javac, javadoc, javah, javap, jdb, jdeps)
- Инструменты безопасности (keytool, jarsigner, policyool, kinit, klist, ktab)
- Инструменты интернационализации (native2ascii)
- Инструменты удаленного вызова методов (RMI) (rmic, rmiregistry, rmid, serialver)
- Инструменты Java IDL и RMI-IIOP (tnameserv, idlj, orbd, servertool)
- Инструменты развертывания Java (javapackager, pack200, unpack200)
- Инструмент веб-запуска Java (javaws)
- Средства устранения неполадок, анализа, мониторинга и управления Java (jcmd, jconsole, jmc, jvisualvm)
- Инструменты веб-сервиса Java (schemagen, wsgen, wsimport, xjc)
- Инструменты мониторинга (jps, jstat, jstatd)
- Инструменты устранения неполадок (jinfo, jhat, jmap, jsadebugd, jstack)
- Скриптовый инструмент (jrunscript)
2.8.3 Содержимое JDK
-
Инструменты разработки: (в подкаталоге bin/) Инструменты и утилиты, которые помогут вам разрабатывать, выполнять, отлаживать и писать программы, написанные на языке программирования Java. Дополнительную информацию см. в документации по инструменту.
-
Рабочая среда: (в подкаталоге jre/) Реализация Java Runtime Environment (JRE), используемая JDK. JRE содержит виртуальную машину Java (JVM™), библиотеки классов и другие файлы, поддерживающие выполнение программ, написанных на языке программирования Java.
-
Дополнительные библиотеки: (в подкаталоге lib/) Дополнительные библиотеки классов и вспомогательные файлы, необходимые для средств разработки.
-
БД Java: (В подкаталоге db/) Java DB, дистрибутив Oracle реляционной базы данных Apache Derby. Для получения дополнительной информации см. документацию.
-
Заголовок файла C: (в подкаталоге include/) Файлы заголовков, которые поддерживают программирование собственного кода с использованием собственного интерфейса Java, интерфейса инструментов JVM и других функций платформы Java.
-
Исходный код: (в src.zip) исходные файлы языка программирования Java для всех классов, составляющих базовый API Java. Использование: jar xvf src.zip
2.8.4 Среда выполнения Java (JRE)
- JRE: поддерживает Java в приложениях, созданных на языке, за исключением компиляторов и инструментов разработки для отладки.
- JDK: содержит компилятор и средства разработки отладки.
2.8.5 Перекомпилируйте
-
Компилятор байт-кода javac:
- bin/javac [ОС Solaris (x86) и Linux]
- bin\javac.exe[Microsoft Windows]
- lib/tools.jar [все платформы]
-
Механизм динамической компоновки, состоящий из следующих файлов:
- lib/tools.jar/[все платформы]
- jre\bin\attach.dll [Microsoft Windows]
-
Расширение шифра Java:
- /lib/security/local_policy.jar
- /lib/security/US_export_policy.jar
3. Java EE
Java EE: приложение (браузер / другой ключ) отправляет HTTP-запрос -> сервер (tomcat / nginx) -> java cgi -> Запрос JRE -> Вызов / генерирование файлов классов -> Вызов локальной библиотеки -> Вывод
- Цель Java EE: помочь разработчикам создавать крупномасштабные, многоуровневые, масштабируемые, надежные и безопасные сетевые приложения, а именно корпоративные приложения.
- Платформа Java EE снижает сложность разработки корпоративных приложений, предоставляя модель разработки, API и среду выполнения, которые позволяют разработчикам сосредоточиться на функциональности. (упор на развитие бизнеса)
- Историческая справка о сборках Java EE,Проверить
Он был разработан перед RMI. Поддерживает способы разработки на уровне предприятия. Но стандарты неизменно высоки, особенно с EJB очень сложно начать работу, и есть так много связанных вещей. Наконец, Spring специально врубается в управление Bean на основе стандарта j2EE, то есть облегченной версии (Model layer) EJB, а затем быстро занимает важную позицию в среде разработки J2EE, и медленно решает контроллер (Struct). Есть даже определенные компоненты и расширения для V-уровня. Тогда есть среда Spring MVC. Наконец, чтобы решить проблему стоимости распределенной разработки и развертывания EJB, Spring Boot был разработан для удовлетворения потребностей разработки.
3.1 Архитектура Java EE
3.1.1 Схема архитектуры Java EE
3.1.2 Трехуровневая архитектура Java EE,Проверить
В основном используйте механизм MVC и, наконец, читайте базу данных через уровень Dao.
3.1.2 Полная разработка проекта J2EE, тестирование, развертывание, среда публикации,Проверить
3.2 Основы Java EE,Проверить
3.2.1 Java EE API — это реализация исходного кода javax,Проверить
3.3 HTTP-запрос Java
3.3.1 Запрос запроса для веб-приложения
3.3.2 Структура каталогов сети
4. Java-фреймворк
4.1 Spring mvc, Проверить
4.1.2 Архитектура Spring MVC,Проверить
4.1.3 Способ создания базового MVC
5. Возможности Java-проекта
5.1 Знакомство с редактором IntelliJ IDEA
5.2 Инструменты: Maven
5.2.1 Как работает Maven,Проверить
Суть Maven в том, чтобы решить проблему унифицированного управления jar-пакетами, чтобы избежать загрузки большого количества jar-ов перед каждым проектом, а найти jar-ы иногда бывает очень хлопотно. Раньше были похожие сайты, которые могли скачивать различные jar-пакеты, просто искать по названию, но скачивать их по одному было неудобно. На основе решения таких задач и появился maven.На самом деле в каждом языке есть похожие инструменты,такие как php с Composer, python с pip
5.2.2 Используйте интегрированное использование редактора IDEA, Maven,Проверить
- Повторный импорт: перезагрузить зависимые библиотеки в соответствии с файлом pom.xml.
- Обновить папку/исходные файлы: создайте необходимые исходные файлы на основе файла pom.xml.
- Открытые настройки: в основном для установки лимита памяти maven и других ситуаций
- создание profiles.xml: необходимая информация для проекта/модуля, включая id, свойства
5.3 Инструменты: Tomcat,Проверить
Tomcat — это сервер, который в основном слушает определенный порт. Tomcat автоматически читает файл войны в веб-приложениях. War-файл Tomcat автоматически сгенерирует war-пакет из кода языка java в соответствии со спецификацией j2EE.
-
Для развертывания нескольких приложений вы можете использовать {DOMAIN_NAME}/{app} для локального управления несколькими проектами. Если он находится в сети, вы можете использовать Nginx + Tomcat. Nginx отвечает за распространение, а Tomcat отвечает за запуск нескольких служб для мониторить сервер Nginx.
-
Связь между idea и Tomcat: идея использует Tomcat для создания военного пакета из веб-кода, а затем браузер может анализировать и обрабатывать войну через tomcat.
5.8 Создайте систему блогов,Проверить
5.8.1 Исходный код системы блогов,Проверить
5.8.2 Локальное развертывание системы блогов,Проверить
в вики github есть подробное объяснение
- Используйте плагин: Lombok для решения подробных методов get и set в pojo,Проверить
5.8.3 Развертывание системы блогов в онлайн-сервисе
5.8.4 Платформа блейдов, используемая этой системой блогов,Проверить
5.8.5 Структура каталога сказок
6. Журнал изменений Java
7. Оценка компетенции Java
8. Справочная документация
- На веб-сайте Java Platform представлена самая свежая информация о технологии Java, информация о продуктах, новости и функции.Проверить
- Документация по платформе Java предоставляет доступ к официальным документам, учебным пособиям по Java и другой документации.Проверить
- Веб-сайт Developer Services (требуется бесплатная регистрация). Дополнительная техническая информация, новости и функции, пользовательские форумы, информация о поддержке и многое другое.Проверить
- продукты и API технологии Java,Проверить
- Описаны компоненты общей архитектуры Java, включая JMS, RMIПроверить
9. Часто задаваемые вопросы
9.1 Проблемы, возникающие из-за конфликтов классов Spring,Проверить
Решение: перенастройте файл класса maven, удалите конфликтующую библиотеку, а затем повторно импортируйте ее.
java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.isPresent(Ljava/lang/String;Ljava/l
9.2 Сообщается об ошибке при настройке обратного прокси-сервера nginx на Mac,Проверить
nginx: [error] invalid PID number "" in "/usr/local/var/run/nginx.pid"
9.3 Настройка домашней страницы на Mac,Проверить
## 解决 Mac 下配置环境变量在 ZSH 中无效的问题
在终端中输入: cat ~/.zshrc 以此来查看 .zshrc 文件, 找到里面的 “ # User configuration “ 部分. 可以看到当前 zsh 支持的所有本地已配置环境变量.
## 输入gradle home和path 目录
GRADLE_HOME=/usr/local/Cellar/gradle/4.4;
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin
9.4 неверное расположение градиента в IntelliJ,Проверить
应该使用如下路径进行设置:/usr/local/Cellar/gradle/2.4/libexec
,问题的关键就是路径要有 libexec
В будущем мы продолжим обновлять базу знаний о JAVA, включая распределенную архитектуру JAVA, микросервисы и некоторые статьи о высоком уровне параллелизма. Я также надеюсь, что у вас есть хорошие предложения и идеи для обратной связи со мной.