diff --git a/build/j-spec.pdf b/build/j-spec.pdf index 5266492..b3f9b0c 100644 Binary files a/build/j-spec.pdf and b/build/j-spec.pdf differ diff --git a/j-spec.tex b/j-spec.tex index 4502946..2b55a73 100644 --- a/j-spec.tex +++ b/j-spec.tex @@ -26,8 +26,8 @@ \renewcommand{\nomname}{Термины, определения и сокращения} \makeindex \makenomenclature -\babelfont{rm}{PT Astra Serif} -\babelfont{sf}{PT Astra Serif} +\babelfont{rm}{IBM Plex Sans} +\babelfont{sf}{IBM Plex Sans} \babelfont{tt}{PT Mono} \graphicspath{{./pics/}} @@ -115,6 +115,16 @@ \label{pic:java-in-tiobe} \end{figure} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Как Вы думаете, почему язык программирования Java стал популярен в такие короткие сроки? (3) + \begin{itemize} + \item существовавшие на тот момент Pascal и C++ были слишком сложными; + \item Java быстрее C++; + \item Однажды написанная на Java программа работает везде. + \end{itemize} +\end{enumerate} + \subsubsection{Базовый инструментарий, который понадобится (выбор IDE)} \begin{itemize} \item NetBeans - хороший, добротный инструмент с лёгким ностальгическим оттенком; @@ -123,6 +133,17 @@ \item Android Studio - если заниматься мобильной разработкой. \end{itemize} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Как Вы думаете, почему среда разработки IntelliJ IDEA стала стандартом де-факто в коммерческой разработке приложений на Java? (4) + \begin{itemize} + \item NetBeans перестали поддерживать; + \item Eclipse слишком медленный и тяжеловесный; + \item IDEA оказалась самой дружелюбной к начинающему программисту; + \item Все варианты верны. + \end{itemize} +\end{enumerate} + \subsubsection{Что нужно скачать, откуда (как выбрать вендора, версии)} Для разработки понадобится среда разработки (IDE) и инструментарий разработчика (JDK). JDK выпускается несколькими поставщиками, большинство из них бесплатны и полнофункциональны, то есть поддерживают весь функционал языка и платформы. @@ -136,6 +157,13 @@ Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava. +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Чем отличается SDK от JDK? (J это частный случай, больше спец. библиотек) +\item Какая версия языка (к сожалению) остаётся самой популярной в разработке на Java? (8, 1.8) +\item Какие ещё JVM языки существуют? (Scala, Kotlin, Groovy) +\end{enumerate} + \subsubsection{Из чего всё состоит (JDK, JRE, JVM и их друзья)} TL;DR: \begin{itemize} @@ -150,7 +178,7 @@ TL;DR: JVM для своей работы запрашивает у ОС некоторый сегмент оперативной памяти, в котором хранит данные программы. Это хранение происходит «слоями»: \begin{enumerate} -\item Eden Space (heap) – в этой области выделятся память под все создаваемые из программы объекты. Большая часть объектов живёт недолго (итераторы, временные объекты, используемые внутри методов и т.п.), и удаляются при выполнении сборок мусора это области памяти, не перемещаются в другие области памяти. Когда данная область заполняется (т.е. количество выделенной памяти в этой области превышает некоторый заданный процент), сборщик мусора выполняет быструю (minor collection) сборку. По сравнению с полной сборкой, она занимает мало времени, и затрагивает только эту область памяти, а именно, очищает от устаревших объектов Eden Space и перемещает выжившие объекты в следующую область. +\item Eden Space (heap) – в этой области выделяется память под все создаваемые из программы объекты. Большая часть объектов живёт недолго (итераторы, временные объекты, используемые внутри методов и т.п.), и удаляются при выполнении сборок мусора это области памяти, не перемещаются в другие области памяти. Когда данная область заполняется (т.е. количество выделенной памяти в этой области превышает некоторый заданный процент), сборщик мусора выполняет быструю (minor collection) сборку. По сравнению с полной сборкой, она занимает мало времени, и затрагивает только эту область памяти, а именно, очищает от устаревших объектов Eden Space и перемещает выжившие объекты в следующую область. \item Survivor Space (heap) – сюда перемещаются объекты из предыдущей области после того, как они пережили хотя бы одну сборку мусора. Время от времени долгоживущие объекты из этой области перемещаются в Tenured Space. \item Tenured (Old) Generation (heap) — Здесь скапливаются долгоживущие объекты (крупные высокоуровневые объекты, синглтоны, менеджеры ресурсов и прочие). Когда заполняется эта область, выполняется полная сборка мусора (full, major collection), которая обрабатывает все созданные JVM объекты. \item Permanent Generation (non-heap) – Здесь хранится метаинформация, используемая JVM (используемые классы, методы и т.п.). @@ -206,6 +234,18 @@ Java Development Kit является изрядно дополненным сп \caption{Общее представление состава JDK} \end{table} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item JVM и JRE - это одно и тоже? (нет) +\item Что входит в состав JDK, но не входят в состав JRE? (компилятор, средства для доков, отладки, развёртывания) +\item Утечки памяти (2) + \begin{itemize} + \item Невозможны, поскольку работает сборщик мусора; + \item Возможны; + \item Существуют только в С++ и других языках с открытым менеджментом памяти. + \end{itemize} +\end{enumerate} + \subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)} Проекты могут быть любой сложности. Часто структуру проекта задаёт сборщик проекта, предписывая в каких папках будут храниться исходные коды, исполняемые файлы, ресурсы и документация. Без их использования необходимо задать структуру самостоятельно. @@ -308,6 +348,17 @@ public class OtherClass { } \end{lstlisting} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Зачем складывать классы в пакеты? (структурирование, видимость*) +\item Может ли существовать класс вне пакета? (да*, нет) +\item Комментирование кода(2) + \begin{itemize} + \item Нужно только если пишется большая подключаемая библиотека; + \item Хорошая привычка; + \item Захламляет исходники. + \end{itemize} +\end{enumerate} \subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)} Простейший проект возможно скомпилировать и запустить без использования тяжеловесных сред разработки, введя в командной строке ОС две команды: @@ -356,6 +407,18 @@ Hello, world! Here is your number: 4. \end{lstlisting} +\subsubsection{Задания для самопроверки} +\begin{enumerate} +\item Что такое javac? (компилятор) +\item Кофе, крошка? (да) +\item Где находится класс в папке назначения работы компилятора? (1) + \begin{itemize} + \item В подпапках, повторяющих структуру пакетов в исходниках + \item В корне плоским списком; + \item Зависит от ключей компиляции. + \end{itemize} +\end{enumerate} + \subsubsection{Документирование (Javadoc)} Документирование конкретных методов и классов всегда ложится на плечи программиста, потому что никто не знает программу и алгоритмы в ней лучше, чем программист. Утилита Javadoc избавляет программиста от необходимости осваивать инструменты создания веб-страниц и записывать туда свою документацию. Достаточно писать хорошо отформатированные комментарии, а остальное Javadoc возьмёт на себя. \begin{figure}[H] diff --git a/scenarios/build/jc-1-c.pdf b/scenarios/build/jc-1-c.pdf index e1556cc..ad83caf 100644 Binary files a/scenarios/build/jc-1-c.pdf and b/scenarios/build/jc-1-c.pdf differ