simple questions between themes

This commit is contained in:
Ivan I. Ovchinnikov 2022-08-18 00:47:01 +03:00
parent 5bbedb6bdc
commit 3c6c82b9fe
3 changed files with 66 additions and 3 deletions

Binary file not shown.

View File

@ -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]

Binary file not shown.