\immediate\write18{texcount -sum -1 j-spec.tex > /tmp/wordcount.tex} %\immediate\write18{texcount -sum -1 scenarios/jc-1-c.tex > /tmp/wordcount.tex} \documentclass[12pt, a4paper]{report} \usepackage[english,russian]{babel} % локализация и переносы \usepackage{fancyhdr} \usepackage{graphicx} \usepackage{titlesec} \usepackage{tikz} \usepackage{indentfirst} \usepackage{datetime2} \usepackage{geometry} \usepackage{enumitem} \usepackage{multicol} \usepackage{float} \usepackage{fontawesome} \usepackage{longtable} \usepackage{tikz} \usepackage{hyperref} \usetikzlibrary{mindmap,trees} \titlelabel{\thetitle. \quad} \setcounter{tocdepth}{1} \babelfont{rm}{PT Astra Serif} \babelfont{sf}{PT Astra Serif} \babelfont{tt}{PT Mono} \graphicspath{{./pics/}} \newcounter{slidenum} \setcounter{slidenum}{1} % set to 2 if want to exclude title page of presentation \newcommand{\showslide}[1]{ \noindent\makebox[\linewidth]{\rule{.90\paperwidth}{1.4pt}} \begin{center} \framebox{\includegraphics[page=\arabic{slidenum},width=.95\textwidth]{#1}} \stepcounter{slidenum} \end{center} } \newcommand{\wordcount}{\input{/tmp/wordcount.tex}} \newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize} \renewcommand\labelitemi{\textemdash} \newenvironment{frm} { \begin{center} \begin{tabular}{|p{0.9\textwidth}|} \hline\\ } { \\\\\hline \end{tabular} \end{center} } \fancypagestyle{plain}{ \setlength{\headheight}{33pt} \fancyhf{} \lhead{\includegraphics[height=5mm]{logo.png}} \rhead{И.И. Овчинников \\ \href{https://t.me/ivanigorevichfeed}{Telegram: ivanigorevichfeed}} \chead{\thepage} \cfoot{\faRocket} \rfoot{Всего слов: \wordcount} } \geometry{ left=2cm, right=1cm, top=2cm, bottom=2cm } \title{ТЗ на "Специализацию Java"} \author{Иван Игоревич Овчинников} \date{\today{} (\DTMcurrenttime)} \setlist{nolistsep} \setlist[itemize]{leftmargin=10mm} \setlist[enumerate]{leftmargin=10mm} \usepackage{subfiles} \begin{document} \maketitle \tableofcontents \pagestyle{plain} \chapter{Java Core} \section{Платформа: история и окружение} \subsection*{Конспект лекции} \subsubsection{Краткая история (причины возникновения)} \begin{figure}[H] \centering \includegraphics[width=17cm]{jc-01-tiobe.png} \caption{График популярности языков программирования TIOBE} \label{pic:java-in-tiobe} \end{figure} \subsubsection{Базовый инструментарий, который понадобится (выбор IDE)} \begin{itemize} \item NetBeans - хороший, добротный инструмент с лёгким ностальгическим оттенком; \item Eclipse - для поклонников Eclipse Foundation и швейцарских ножей с полусотней лезвий; \item IntelliJ IDEA - стандарт де-факто, используется на курсе и в большинстве современных компаний; \item Android Studio - если заниматься мобильной разработкой. \end{itemize} \subsubsection{Что нужно скачать, откуда (как выбрать вендора)} \subsubsection{Из чего всё состоит (JDK, JRE, JVM, выбор версии)} \subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)} \subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)} \subsubsection{Документирование (Javadoc)} \subsection*{Задания к семинару} \begin{itemize} \item Скомпилировать проект из трёх классов, находящихся в двух пакетах, а также создать для этого проекта стандартную веб-страницу с документацией \end{itemize} \subsection*{Сценарий лекции} %\subfile{scenarios/jc-1-c} \section{Управление проектом: сборщики проектов} Управление проектом: Jar-файлы; Gradle/Maven: зависимости, выгрузка артефакта, публичные репозитории, свойства проекта, приватные репозитории (хостинг); Bazel \subsection*{Задания к семинару} \begin{itemize} \item Создать загружаемый артефакт с функцией суммирования двух чисел и загрузить его в локальный кэш артефактов; \end{itemize} \section{Специализация: данные и функции} Базовые функции языка: математические операторы, условия, циклы, бинарные операторы; Данные: типы, преобразование типов, константы и переменные (примитивные, ссылочные), бинарное представление, массивы (ссылочная природа массивов, индексация, манипуляция данными); Функции: параметры, возвращаемые значения, перегрузка функций; \subsection*{Задания к семинару} \begin{itemize} \item Написать как можно больше вариантов функции инвертирования массива единиц и нулей за 15 минут (без ветвлений любого рода); \item Сравнить без условий две даты, представленные в виде трёх чисел гггг-мм-дд; \end{itemize} \section{Специализация: ООП} Инкапсуляция: Классы и объекты (внутренние классы, вложенные классы, static, private/public, final, интерфейс взаимодействия с объектом), перечисления (создание, конструкторы перечислений, объекты перечислений, дополнительные свойства); Наследование: extends, Object (глобальное наследование), protected, преобразование типов, final; Полиморфизм: override, abstract, final; %\subfile{scenarios/jc-4} \section{Специализация: Тонкости работы} Файловая система и представление данных; Пакеты \code{java.io}, \code{java.nio}, \code{String}, \code{StringBuilder}, string pool, ?JSON/XML? \chapter{Java Development Kit} \section{Исключения} Механизм и понятие, введение в \textbf{многопоточность}, throw; Наследование и полиморфизм в исключениях; Способы обработки исключений (try/catch, throws, finally); try-with-resources, штатные и нештатные ситуации \section{Интерфейсы} Понятие и принцип работы, implements; Наследование и множественное наследование интерфейсов; Значения по-умолчанию \section{Обобщённое программирование} \section{Коллекции} List, Set; Хэш-код, интерфейс Comparable; Map, Object (Использование методов, Переопределение методов); Итераторы, \textbf{Многопоточные} коллекции \section{Многопоточность} Понятие, Принцип (реальная и псевдопараллельность); Runnable, Thread (Свойства, Особенности создания); Deadlock, Состояние гонки, Object (Ожидание/уведомление); Синхронизация (Синхронизация по монитору, Частичная, по классу) \section{Графический интерфейс пользователя} GUI (Swing): Окна и свойства окон, \textbf{Многопоточность} и абстргирование асинхронных вызовов; менеджеры размещений и проведение параллелей с веб-фреймворками, разделение на фронт-энд и бэк-энд; JPanel и рисование, Обработка действий пользователя \chapter{Java Junior} \section{JDBC} \section{Сетевое программирование} Socket, ServerSocket, Многопоточность, абстрагирование сетевого взаимодействия, интерфейсы \section{Введение в архитектуры приложений на Java} клиент-серверы, веб-приложения, сервлеты, толстые и тонкие клиенты, выделение бизнес-логики и хранения, создание общих пространств и модульность проекта \section{Сериализация, StreamAPI, ReflectionAPI} \section{Введение в Java EE} \section{Введение в Spring framework} \chapter{Java Junior+} \end{document}