first done

This commit is contained in:
Ivan I. Ovchinnikov 2022-11-30 22:29:47 +03:00
parent 399bbd9feb
commit f4a7595214
4 changed files with 14 additions and 10 deletions

Binary file not shown.

View File

@ -33,7 +33,6 @@
\newpage
\appendix
\sloppy
%\addcontentsline{toc}{chapter}{Термины, определения и сокращения}
\printnomenclature[27mm]
\chapter*{Приложения}

View File

@ -1,6 +1,8 @@
\documentclass[j-spec.tex]{subfiles}
\begin{document}
\pagestyle{plain}
\sloppy
\section{Платформа: история и окружение}
\subsection{В этом разделе}
Краткая история (причины возникновения); инструментарий, выбор версии; CLI; структура проекта; документирование; некоторые интересные способы сборки проектов.
@ -11,14 +13,14 @@
\item \nom{JRE}{(от англ. Java Runtime Environment) — минимальная (без компилятора и других средств разработки) реализация виртуальной машины, необходимая для исполнения Java-приложений. Состоит из виртуальной машины Java Virtual Machine и библиотеки Java-классов.}
\item \nom{JVM}{(от англ. Java Virtual Machine) — виртуальная машина Java, основная часть исполняющей системы Java. Виртуальная машина Java исполняет байт-код, предварительно созданный из исходного текста Java-программы компилятором. JVM может также использоваться для выполнения программ, написанных на других языках программирования.}
\item \nom{JIT}{(англ. Just-in-Time, компиляция «точно в нужное время»), динамическая компиляция — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы. Таким образом достигается высокая скорость выполнения по сравнению с интерпретируемым байт-кодом за счёт увеличения потребления памяти (для хранения результатов компиляции) и затрат времени на компиляцию. Технология JIT базируется на двух более ранних идеях, касающихся среды выполнения: компиляции байт-кода и динамической компиляции.}
\item \nom{CLI}{(англ. Command line interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».}
\item \nom{CLI}{(англ. Command Line Interface, Интерфейс командной строки) — разновидность текстового интерфейса между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд). Также известен под названиями «консоль» и «терминал».}
\item \nom{Docker}{программное обеспечение для автоматизации развёртывания и управления приложениями, контейнеризатор приложений. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть развёрнут почти на любой системе.}
\end{itemize}
\nomenclature{GPL}{GNU General Public License (чаще всего переводят как Открытое лицензионное соглашение GNU) — лицензия на свободное программное обеспечение, созданная в рамках проекта GNU, по которой автор передаёт программное обеспечение в общественную собственность. Её также сокращённо называют GNU GPL или даже просто GPL, если из контекста понятно, что речь идёт именно о данной лицензии. GNU Lesser General Public License (LGPL) — это ослабленная версия GPL, предназначенная для некоторых библиотек ПО.}
\subsection{Краткая история (причины возникновения)}
\begin{itemize}
\item Язык создавали для разработки встраиваемых систем, сетевых приложений и прикладного \nom{ПО}{программное обеспечение};
\item Язык создавали для разработки встраиваемых систем, сетевых приложений и прикладного \nom{ПО}{(программное обеспечение) - программа или множество программ, используемых для управления компьютером.};
\item Популярен из-за скорости исполнения и полного абстрагирования от исполнителя кода;
\item Часто используется для программирования бэк-энда веб-приложений из-за изначальной нацеленности на сетевые приложения.
\end{itemize}
@ -109,7 +111,7 @@ JVM для своей работы запрашивает у ОС некотор
\item Survivor Space (heap) сюда перемещаются объекты из предыдущей области после того, как они пережили хотя бы одну сборку мусора. Время от времени долгоживущие объекты из этой области перемещаются в Tenured Space.
\item Tenured (Old) Generation (heap) — Здесь скапливаются долгоживущие объекты (крупные высокоуровневые объекты, синглтоны, менеджеры ресурсов и прочие). Когда заполняется эта область, выполняется полная сборка мусора (full, major collection), которая обрабатывает все созданные JVM объекты.
\item Permanent Generation (non-heap) Здесь хранится метаинформация, используемая JVM (используемые классы, методы и т.п.).
\item Code Cache (non-heap) — эта область используется JVM, когда включена JIT-компиляция, в ней кешируется скомпилированный платформенно-зависимый код.
\item Code Cache (non-heap) — эта область используется JVM, когда включена JIT-компиляция, в ней кэшируется скомпилированный платформенно-зависимый код.
\end{enumerate}
JVM самостоятельно осуществляет сборку так называемого мусора, что значительно облегчает работу программиста по отслеживанию утечек памяти, но важно помнить, что в Java утечки памяти всё равно существуют, особенно при программировании многопоточных приложений.
@ -119,7 +121,7 @@ JVM самостоятельно осуществляет сборку так н
\def\svgwidth{150mm}
\includesvg{pics/jc-01-jvm-struct.svg}
\label{jvm:structure}
\caption{принцип работы JVM}
\caption{Принцип работы JVM}
\end{figure}
На пользовательском уровне важно не только исполнять базовые инструкции программы, но чтобы эти базовые инструкции умели как-то взаимодействовать со внешним миром, в том числе другими программами, поэтому JVM интегрирована в JRE - Java Runtime Environment. JRE - это набор из классов и интерфейсов, реализующих
@ -306,7 +308,7 @@ Hello, world!
\end{lstlisting}
\begin{frm}
\info Скомпилированные классы всегда содержат одинаковые первые четыре байта, которые в шестнадцатиричном представлении формируют надпись «кофе, крошка».
\info Скомпилированные классы всегда содержат одинаковые первые четыре байта, которые в шестнадцатеричном представлении формируют надпись «кофе, крошка».
\begin{figure}[H]
\centering
\includegraphics[width=14cm]{jc-01-cafe-babe.png}
@ -448,7 +450,7 @@ Docker также не привносит ничего технологичес
RUN javac -sourcepath ./src -d out ./src/ru/gb/dj/Main.java
\end{lstlisting}
Последняя команда в \code{Dockerfile} говорит, что нужно сделать, когда контейнер создаётся из образа и заускается.
Последняя команда в \code{Dockerfile} говорит, что нужно сделать, когда контейнер создаётся из образа и запускается.
\begin{lstlisting}[style=ASMStyle]
CMD java -classpath ./out ru.gb.dj.Main
\end{lstlisting}
@ -462,7 +464,10 @@ Docker-образ и, как следствие, Docker-контейнеры в
\item Создать проект из трёх классов (основной с точкой входа и два класса в другом пакете), которые вместе должны составлять одну программу, позволяющую производить четыре основных математических действия и осуществлять форматированный вывод результатов пользователю;
\item Скомпилировать проект, а также создать для этого проекта стандартную веб-страницу с документацией ко всем пакетам;
\item Создать Makefile с задачами сборки, очистки и создания документации на весь проект.
\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере подьзователя, а второй забирать скомпилированные классы и исполнять их.
\item *Создать два Docker-образа. Один должен компилировать Java-проект обратно в папку на компьютере пользователя, а второй забирать скомпилированные классы и исполнять их.
\end{itemize}
\newpage
\printnomenclature[40mm]
\end{document}

View File

@ -57,10 +57,10 @@
\setlength{\headheight}{33pt}
\fancyhf{}
\lhead{\includegraphics[height=5mm]{logo.png}}
\rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}}
% \rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}}
\chead{\thepage}
% \cfoot{\faRocket}
\rfoot{Всего слов: \wordcount}
% \rfoot{Всего слов: \wordcount}
}
\geometry{