From b67a4a098c56a978cc0e0a60f9e4b8093bc3a830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Thu, 17 Jan 2019 21:40:09 +0300 Subject: [PATCH 01/29] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e288257e..6f275f7f 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ # Изучайте [первое открытое занятие](lesson/lesson1.md). ### Внизу урока есть первое домашнее задание, по которому можно оценить свой уровень готовности к проекту. -## Программа +## Программа ### [Регистрация](http://javaops.ru/reg/basejava) ### Открытое занятие 1 - [Презентация проекта](lesson/lesson1.md#-Вебинар-ПРЕЗЕНТАЦИЯ-обучения) From 775207c0379665959ce5f1042a136ab007e6894a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Thu, 17 Jan 2019 21:56:17 +0300 Subject: [PATCH 02/29] Update README.md --- README.md | 180 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 134 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 6f275f7f..197623f4 100644 --- a/README.md +++ b/README.md @@ -27,84 +27,172 @@ ## Программа ### [Регистрация](http://javaops.ru/reg/basejava) ### Открытое занятие 1 - - [Презентация проекта](lesson/lesson1.md#-Вебинар-ПРЕЗЕНТАЦИЯ-обучения) - - [Разработка ПО](lesson/lesson1.md#-1-Разработка-ПО) - - [Обзор языка Java](lesson/lesson1.md#-3-Обзор-языка-java) - - [Системы управления версиями. Git](lesson/lesson1.md#-4-Системы-управления-версиями-git) - - [ПЕРВОЕ ДОМАШНЕЕ ЗАДАНИЕ](lesson/lesson1.md#Домашнее-задание-hw1) + - Обзор курса и методики обучения + - Подготовка и настройка рабочего окружения + - Подходы, применяемые при разработке ПО + - Обзор инструментов и технологий, используемых Java-разработчиками + - Введение в язык Java: история создания, JVM, JIT-компиляция + - Системы управления версиями. Git + - Домашнее задание ### Занятие 2 - - [Принципы ООП](lesson/lesson2.md#Принципы-ООП) - - [Структура памяти: куча, стек, регистры, константы](lesson/lesson2.md#Структура-памяти-куча-стек-регистры-константы) - - [Типы данных. Пакеты](lesson/lesson2.md#Типы-данных-Пакеты) + - Введение в объектно-ориентированное программирование + - Принципы ООП + - Модификаторы доступа + - Классы-обертки + - Классы и объекты + - Структура памяти java-программы: Heap (куча), Stack (стек) + - Типы данных + - Пакетная организация файлов + - Домашнее задание ### Занятие 3 - - [Объектная модель в Java](lesson/lesson3.md#Объектная-модель-в-java) - - [Сложность алгоритмов](lesson/lesson3.md#Сложность-алгоритмов) - - [Паттерн проектирования Шаблонный метод](https://github.com/JavaOPs/JavaSE-Web/blob/master/lesson/lesson3.md#Паттерн-проектирования-Шаблонный-метод) + - Разбор домашнего задания + - Обзор суперкласса Object + - Связь между equals() и hashCode() + - Статические методы и переменные + - Программирование с помощью интерфейсов + - Абстрактные классы + - Сложность алгоритмов + - Паттерн проектирования Шаблонный метод + - Домашнее задание ### Занятие 4 - - [Работа со строками](lesson/lesson4.md#Работа-со-строками) - - [Исключения](lesson/lesson4.md#Исключения) - - [Reflection. Аннотации. Модульное тестирование](lesson/lesson4.md#reflection-Аннотации-Модульное-тестирование) + - Разбор домашнего задания + - Работа со строками: String, StringBuilder, StringBuffer + - String literal pool + - Исключения (Exceptions) + - Конструктор + - Ключевые слова: this, super + - Reflection + - Аннотации в Java 8 + - Введение в модульное тестирование. JUnit + - Домашнее задание ### Занятие 5 - - [Контейнеры/коллекции](lesson/lesson5.md#Контейнерыколлекции) + - Разбор домашнего задания + - Иерархия классов Коллекций + - Списки (List) + - Множества (Set) + - Ассоциативные массивы (Map) + - Введение в Iterator + - Тестирование коллекций + - Домашнее задание ### Занятие 6 - - [Iterator / Iterable. Вложенные, внутренние, локальные и анонимные классы](lesson/lesson6.md#iterator--iterable-Вложенные-внутренние-локальные-и-анонимные-классы) - - [Новое в Java 8](lesson/lesson6.md#Новое-в-java-8) + - Разбор домашнего задания + - Autoboxing and Unboxing + - Паттерн проектирования Итератор + - Вложенные классы + - Внутренние классы + - Локальные классы + - Анонимные классы + - Введение в лямбды + - Функциональный интерфейс + - Домашнее задание ### Занятие 7 - - [Параметризация. Стирание типов](lesson/lesson7.md#Параметризация-Стирание-типов) - - [Логирование](lesson/lesson7.md#Логирование) - - [Синглетон, Enum](lesson/lesson7.md#Синглетон-enum) + - Разбор домашнего задания + - Дженерики (Generic) + - Введение в логирование. Log4J + - Стандартный логер - Java Logging API + - Паттерн проектирования - Синглтон + - Перечисляемые типы (Enum) + - Объектная модель + - Домашнее задание ### Занятие 8 - - [Работа с датами и временем](lesson/lesson8.md#Работа-с-датами-и-временем) - - [Работа с файлами и ресурсами](lesson/lesson8.md#Работа-с-файлами-и-ресурсами) + - Разбор домашнего задания + - Классы работы с датами: Date, Calendar, TimeZone + - Дата и время в Java 8 + - Внешние библиотеки: Joda Time library + - Работа с файловой системой: класс File + - try-with-resources + - Домашнее задание ### Занятие 9 - - [Ввод/вывод](lesson/lesson9.md#Вводвывод) - - [Сериализация](lesson/lesson9.md#Сериализация) - - [NIO](lesson/lesson9.md#nio) - - [Основы Java 8 Stream API](lesson/lesson9.md#Основы-java-8-stream-api) + - Разбор домашнего задания + - Обзор пакета java.io + - Классы чтения/записи потоков: InputStream/OutputStream + - Паттерн проектирования Декоратор + - Работа с классами чтения/записи символов: Reader и Writer + - Сериализация + - Обзор пакета java.nio + - Введение в Java 8 Stream API + - Домашнее задание ### Занятие 10 - - [Формат XML. Работа с XML в Java](lesson/lesson10.md#Формат-xml-Работа-с-xml-в-java) - - [JSON](lesson/lesson10.md#json) - - [DataInputStream / DataOutputStream](lesson/lesson10.md#datainputstream--dataoutputstream) + - Разбор домашнего задания + - Паттерн проектирования Стратегия + - Работа с XML + - Работа с JSON: Google GSON и Jackson + - Введение в REST + - DataInputStream/DataOutputStream + - Домашнее задание ### Занятие 11 - - [Многопоточность. Параллельное выполнение.](lesson/lesson11.md#Многопоточность-Параллельное-выполнение) - - [Потоки. Синхронизация](lesson/lesson11.md#Потоки-Синхронизация) - - [Ленивая инициализация, JMM](lesson/lesson11.md#Ленивая-инициализация-jmm) + - Процессы и потоки + - Синхронизация методов и блоков + - Закон Мура + - Закон Амдала + - Обзор методов класса Object + - Ленивая инициализация + - Java Memory Model + - Взаимная блокировка + - Домашнее задание ### Занятие 12 - - [java.util.concurrent](lesson/lesson12.md#javautilconcurrent) + - Разбор домашнего задания + - Обзор java.util.concurrent + - Синхронизаторы + - ThreadLocal переменные + - Сравнение с обменом (Compare-and-swap) + - Домашнее задание ### Занятие 13 - - [Базы данных. Реляционные СУБД. PostgreSQL](lesson/lesson13.md#Базы-данных-Реляционные-СУБД-postgresql) - - [Конфигурирование данных в Java проекте](lesson/lesson13.md#Конфигурирование-данных-в-java-проекте) - - [Подключение DB в проект](lesson/lesson13.md#Подключение-db-в-проект) + - Разбор домашнего задания + - Введение в реляционные базы данных + - Язык SQL + - Обзор NoSQL баз данных + - Установка и настройка СУБД PostgreSQL + - Работа с базами данных из IDEA + - Конфигурирование базы данных и каталога хранения + - Подключение базы данных к проекту + - Обзор JDBC-архитектуры + - Домашнее задание ### Занятие 14 - - [JOIN](lesson/lesson14.md#join) - - [Транзакции](lesson/lesson14.md#Транзакции) - - [Установка/запуск Tomcat](lesson/lesson14.md#Установказапуск-tomcat) + - Разбор домашнего задания + - Операции соединения таблиц. JOIN + - Транзакции + - Требования к транзакциям. ACID + - Уровни изоляции транзакций в SQL + - Установка и настройка контейнера сервлетов Tomcat + - Домашнее задание ### Занятие 15 - - [HTML, Tomcat](lesson/lesson15.md#html-tomcat) - - [Сервлеты](lesson/lesson15.md#Сервлеты) + - Разбор домашнего задания + - Введение в HTML + - Основы протокола HTTP + - Настройка web.xml + - Развертывание (деплой) web-приложения в Tomcat + - Сервлеты + - Домашнее задание ### Занятие 16 - - [JSP](lesson/lesson16.md#jsp) - - [JSTL](lesson/lesson16.md#jstl) + - Разбор домашнего задания + - Жизненный цикл сервлета + - Создание динамических страниц. JSP + - Расширенные возможности JSP: JSTL + - Redirect и Forward + - CRUD + - Домашнее задание ### Занятие 17 - - [Деплой в Heroku](lesson/lesson17.md#Деплой-в-heroku) - - [Classloader](lesson/lesson17.md#classloader) - - [Обзор Java Enterprise](lesson/lesson17.md#Обзор-java-enterprise) + - Разбор домашнего задания + - Деплой приложения в облачный сервис Heroku + - Загрузка классов в Java. Classloader + - Домашнее задание ## Рекомендуемые книги - YAKOV FAIN: Программирование на Java для начинающих From 75e6adcf4a9d346a8c98165a7c16f5e82a02fee6 Mon Sep 17 00:00:00 2001 From: ichimax Date: Thu, 17 Jan 2019 22:08:54 +0300 Subject: [PATCH 03/29] rm old lessons --- lesson/lesson10.md | 19 ------------------- lesson/lesson11.md | 31 ------------------------------- lesson/lesson12.md | 35 ----------------------------------- lesson/lesson13.md | 29 ----------------------------- lesson/lesson14.md | 26 -------------------------- lesson/lesson15.md | 26 -------------------------- lesson/lesson16.md | 21 --------------------- lesson/lesson17.md | 24 ------------------------ lesson/lesson2.md | 41 ----------------------------------------- lesson/lesson3.md | 24 ------------------------ lesson/lesson4.md | 28 ---------------------------- lesson/lesson5.md | 15 --------------- lesson/lesson6.md | 20 -------------------- lesson/lesson7.md | 46 ---------------------------------------------- lesson/lesson8.md | 21 --------------------- lesson/lesson9.md | 25 ------------------------- 16 files changed, 431 deletions(-) delete mode 100644 lesson/lesson10.md delete mode 100644 lesson/lesson11.md delete mode 100644 lesson/lesson12.md delete mode 100644 lesson/lesson13.md delete mode 100644 lesson/lesson14.md delete mode 100644 lesson/lesson15.md delete mode 100644 lesson/lesson16.md delete mode 100644 lesson/lesson17.md delete mode 100644 lesson/lesson2.md delete mode 100644 lesson/lesson3.md delete mode 100644 lesson/lesson4.md delete mode 100644 lesson/lesson5.md delete mode 100644 lesson/lesson6.md delete mode 100644 lesson/lesson7.md delete mode 100644 lesson/lesson8.md delete mode 100644 lesson/lesson9.md diff --git a/lesson/lesson10.md b/lesson/lesson10.md deleted file mode 100644 index 1c279e7a..00000000 --- a/lesson/lesson10.md +++ /dev/null @@ -1,19 +0,0 @@ - -# Десятое занятие - -## Разбор Домашнего Задания-9: - -## Формат XML. Работа с XML в Java -- XML формат и технологии -- Wiki: XML, XSL , DOM, SAX, StAX, JAXB -- Работа с XML в Java. Реализация хранения в XML. - -## JSON -- JSON. JSON в JavaScript. REST -- Работа с JSON в Java: Google GSON и Jackson. Реализация хранения в JSON. - -## DataInputStream / DataOutputStream -- Реализация Store на основе `DataInputStream/DataOutputStream`. - -## Домашнее задание -- Сделать и протестировать реализацию `DataStreamSerializer` \ No newline at end of file diff --git a/lesson/lesson11.md b/lesson/lesson11.md deleted file mode 100644 index 1a1e7a91..00000000 --- a/lesson/lesson11.md +++ /dev/null @@ -1,31 +0,0 @@ - -# Одиннадцатое занятие - -## Многопоточность. Параллельное выполнение. -![Закон Мура](https://www.karlrupp.net/wp-content/uploads/2015/06/40-years-processor-trend.png) -- Закон Мура -- Закон Амдала - -![Concurrent vs Parallel](https://joearms.github.io/images/con_and_par.jpg) - -## Потоки. Синхронизация -- Потоки выполнения. Синхронизация. -- Методы wait(), notify(), notifyAll() класса Object - -## Ленивая инициализация, JMM -- Параллелизм в Java -- Реализация Singleton в JAVA -- Double checked locking -- Java Memory Model. final, volatile -- Initialization-on-demand holder idiom - -### Ресурсы -- Алексей Владыкин, Основы многопоточность в Java -- Виталий Чибриков, Java. Многопоточность -- Computer Science Center, курс Параллельное программирование -- Юрий Ткач, курс Advanced Java - Concurrency -- Головач, курс Java Multithreading - -## Домашнее задание -- Реализовать deadlock -- Взаимная блокировка diff --git a/lesson/lesson12.md b/lesson/lesson12.md deleted file mode 100644 index 47156cdd..00000000 --- a/lesson/lesson12.md +++ /dev/null @@ -1,35 +0,0 @@ - -# Двенадцатое занятие - -## Разбор Домашнего Задания-11: реализация dead lock. - -## java.util.concurrent -- Обзор java.util.concurrent.* -- Compare-and-swap -- Справочник по синхронизаторам java.util.concurrent.* -- Использование ThreadLocal переменных - -> Замечания по видео: - - ThreadLocal DATE_FORMAT = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); - }; - }; - -можно написать через лямбду: - - ThreadLocal.withInitial(() -> new SimpleDateFormat("dd.MM.yyyy HH:mm:ss")); - -А лучше использовать потокобезопасный `DateTimeFormatter` Java 8 Time API: - - DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); - -## Разбор домашнего задания 10го урока - -## Домашнее задание: -- Установить PostgreSQL -- Посомтреть на реляционные базы данных и SQL: - - Введение в базы данных - - Основы SQL diff --git a/lesson/lesson13.md b/lesson/lesson13.md deleted file mode 100644 index 2ad74ff1..00000000 --- a/lesson/lesson13.md +++ /dev/null @@ -1,29 +0,0 @@ - -# Тринадцатое занятие - -### Базы данных. Реляционные СУБД. PostgreSQL -- DB-Engines Ranking -- Реляционная СУБД -- Введение в базы данных -- Реляционные базы vs NoSQL. SQL. Денормализация. PK, FK, Cascade -- PostgreSQL. Надёжность -- Создание базы резюме. Работа с базами данных из IDEA -- IDEA Database tools. - -### Конфигурирование данных в Java проекте -- Properties sample -- Конфигурирование DB и каталога хранения - -### Подключение DB в проект -- JDBC. JDBC Architecture. -- ConnectionFactory. Реализация SqlStorage. -- Ресурсы: - - Книга: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL - - Работа с базами данных с помощью JDBC драйвера - - Уроки по JDBC - -### ![hw](https://cloud.githubusercontent.com/assets/13649199/13672719/09593080-e6e7-11e5-81d1-5cb629c438ca.png) Домашнее задание HW13 -- Доделать `SqlStorage` без контактов и секций. - - Для работы с DB надо в lib и проект добавить драйвер базы данных - - Запустить `SqlStorageTest` (в `AbstractStorageTest` контакты и секции закоменченны), креденшелы к базе взять из `Config` -- Вынести общий код (`getConnection(), prepareStatement, catch SQLException`) в класс `SqlHelper`. diff --git a/lesson/lesson14.md b/lesson/lesson14.md deleted file mode 100644 index f625d1d0..00000000 --- a/lesson/lesson14.md +++ /dev/null @@ -1,26 +0,0 @@ - -# Четырнадцатое занятие - -### Разбор HW13 - -### JOIN -- LEFT, RIGHT, INNER JOIN -- Добавляем в `SqlStorage` контакты - -### Транзакции. -- Транзакция. ACID. Уровни изоляции транзакций. -- Уровни изоляции транзакций в SQL -- Добавляем в `SqlStorage` транзакции -- Batch execute. - -### Установка/запуск Tomcat -- Скачать и установить Tomcat 8. Устанавливать лучше простым копированием из архива в каталог (в том числе и для unix). Следите чтобы в пути не было пробелов и национальных букв. -- Для доступа к Tomсat Manager добавьте в конфигурацию Tomcat `TOMCAT_HOME\conf\tomcat-users.xml` права: -``` - -``` -- Запуск из `TOMCAT_HOME\bin\`: `catalina.bat start` - -## Домашнее задание HW14 -- Закончить реализацию `SqlStorage` с контактами -- Добавить `TextSection` в базу данных (`init_db.sql`) и `SqlStorage`. diff --git a/lesson/lesson15.md b/lesson/lesson15.md deleted file mode 100644 index 4939684e..00000000 --- a/lesson/lesson15.md +++ /dev/null @@ -1,26 +0,0 @@ -# Пятнадцатое занятие - -### Разбор HW14 - -### HTML, Tomcat -- Протокол HTTP. Смотрим демо приложение в Chrome -> Инструменты разработчика -- Добавление в проект Web Facet. web.xml. Постороение/cтруктура WAR. Статические ресурсы. -- Настройка и деплой в Tomcat. Tomcat manager. -- Запуск Tomcat из IDEA. Динамическое обновление без передеплоя. - -### Сервлеты -- Создаем Servlet. Параметры. Кодировка. -- Дополнительно: - - How do servlets work? - - Язык программирования Java и среда NetBeans: Введение в сетевое программирование - - Основы работы с HTML - - Учебник HTML - - Технологии Java для разработки веб-приложений - - Таблицы стилей CSS - - Основы JavaScript - -## Домашнее задание HW15 -- Сделать реализацию `SqlStorage.getAll` через 2 отдельных запроса: отдельно резюме и отдельно контакты. -- Добавить в реализацию `SqlStorage` и в базу секции (кроме `OrganizationSection`). Для `ListSection` склеиваем строки через `\n`. -- Сделать отображение таблицы резюме в сервлете. - - HTML таблицы diff --git a/lesson/lesson16.md b/lesson/lesson16.md deleted file mode 100644 index 6e431f31..00000000 --- a/lesson/lesson16.md +++ /dev/null @@ -1,21 +0,0 @@ -# Шестнадцатое занятие - -### Разбор HW15 -- Почему вы никогда не должны использовать MongoDB -- Жизненный цикл сервлета -- Tomcat maxThreads configuration - -### JSP -- Что такое JSP. Wiki JSP -- Predefined Variables in JSP -- Стандартные элементы action -- How to use relative paths in JSP -- Отличие Redirect от Forward - -### JSTL -- JSTL -- JSTL для написания JSP страниц - -## Домашнее задание HW15 -- Доделать логику сервлета -- Дополнить отображение и редактирование JSP секциями diff --git a/lesson/lesson17.md b/lesson/lesson17.md deleted file mode 100644 index e2cbc7c8..00000000 --- a/lesson/lesson17.md +++ /dev/null @@ -1,24 +0,0 @@ -# Семнадцатое занятие - -### Разбор HW16 - -### Деплой в Heroku -- Deployment with the Heroku CLI - -### Classloader -- Загрузка классов в Java -- Apache Tomcat Class Loader - -## Обзор Java Enterprise -- Из юниоров в разработчики: получаем первую работу -- Java Tools and Technologies Landscape for 2014 -- Java Tools and Technologies Landscape Report 2016 - -#### Spring Pet-Clinic -- Spring PetClinic Sample Application -- Demo -- Presentation - -#### Java Enterprise project Topjava -- Java Enterprise: Вводное занятие -- Demo приложение diff --git a/lesson/lesson2.md b/lesson/lesson2.md deleted file mode 100644 index 1e9066ff..00000000 --- a/lesson/lesson2.md +++ /dev/null @@ -1,41 +0,0 @@ - -# Второе занятие - -## Принципы ООП. -- Методология процедурно-ориентированного и объектно-ориентированного программирования -- Объекты (cостояние, поведение, уникальность) -- Классы. Инкапсуляция. Наследование. Полиморфизм. -- Основы Объектно-Ориентированного Программирования (ООП) -- Типы отношений между классами Наследование, агрегация, композиция, ассоциация. -- Достоинства/Недостатки ООП. Библиотеки vs фреймворки. -- Дополнительно: - - Что такое ООП и с чем его едят? - - Объектно ориентированное программирование - - Николай Алименков — Парадигмы ООП - - Концепции объектно-ориентированного программирования - -### Структура памяти: куча, стек, регистры, константы - - JVM изнутри - оптимизация и профилирование. - - Stack and Heap - - Дополнительно: - - Из каких частей состоит память java процесса. - - Permanent область памяти - - Java thread stack - - Размер Java объектов - -### Типы данных. Пакеты. - - Типы данных - - Классы- оберки - - Ссылочные типы - - Пакеты - - Модификаторы доступа. Область Видимости. - -## Домашнее задание - -> Правка к видео: ArrayStorage.delete() - вместо `storage[i] = null` нужно `storage[size-1] = null` - -- Прочитать Соглашения по именованию. -- Реализовать `ArrayStorage.update` -- Сделать проверки: в `update/delete/get` - резюме есть в storage, в `save`- нет в storage: `System.out.println("Resume ...")`. -- Сделать в save проверку на переполнениеe: `System.out.println("...")`. -- Избавится от дублирования в коде `ArrayStorage` diff --git a/lesson/lesson3.md b/lesson/lesson3.md deleted file mode 100644 index 36b8407f..00000000 --- a/lesson/lesson3.md +++ /dev/null @@ -1,24 +0,0 @@ - -# Третье занятие - -## Разбор Домашнего Задания-2 - -## Объектная модель в Java -- static -- Object. Контракт equals/hashCode -- Интерфейсы -- Полиморфизм, abstract -- [Java Core. Вопросы к собеседованию](http://info.javarush.ru/translation/2014/02/12/Java-Core-Вопросы-к-собеседованию-ч-1.html) - -## Сложность алгоритмов -- Алгоритмы и структуры данных для начинающих: сложность алгоритмов -- Time complexity -- Временная сложность алгоритма -- Вычислительная сложность - -## Паттерн проектирования Шаблонный метод -- Шаблонный метод - -## Домашнее задание -- Закончить реализацию `AbstractArrayStorage`, `ArrayStorage`, `SortedArrayStorage` (`SortedArrayStorage` хранит элементы отсортированными, сортировать весь массив не надо). -- Сделать проверку `ArrayStorage.update` diff --git a/lesson/lesson4.md b/lesson/lesson4.md deleted file mode 100644 index 4207304b..00000000 --- a/lesson/lesson4.md +++ /dev/null @@ -1,28 +0,0 @@ - -# Четвертое занятие - -## Разбор Домашнего Задания-3 - -## Работа со строками. -- Строки в Java. Кодировка. -- Управление строками, функции для работы со строками в Java. -- StringBuilder vs StringBuffer -- String literal pool - -## Исключения - - Исключения (Exceptions). - - "Java. Эффективное программирование" Джошуа Блох: Исключения. - - Конструктор. this, super - -![image](https://cloud.githubusercontent.com/assets/18701152/15581283/4c2f5348-2374-11e6-8fd2-e4de02d2c389.png) - -## Reflection. Аннотации. Модульное тестирование - - Аннотации - - Введение в Java Reflection API - - Модульное тестирование JUnit 4 - - Тестирование с помощью JUnit (Test Case) - - -## Домашнее задание -Реализовать `AbstractStorageTest` и тесты `ArrayStorageTest` и `SortedArrayStorageTest`. -В `MainReflection` сделать вызов метода `toString` через отражение. diff --git a/lesson/lesson5.md b/lesson/lesson5.md deleted file mode 100644 index 169a361c..00000000 --- a/lesson/lesson5.md +++ /dev/null @@ -1,15 +0,0 @@ - -# Пятое занятие - -## Разбор Домашнего Задания-4 - -## Контейнеры/коллекции. -- List, Set, Map, Queue, Iterator, ListIterator -- Структуры данных в картинках -- Инициализация полей в Java -- Java собеседование по коллекциям -- [Часто задаваемые на собеседованиях вопросы по классам коллекциям в Java](http://info.javarush.ru/translation/2013/10/08/Часто-задаваемые-на-собеседованиях-вопросы-по-классам-коллекциям-в-Java-Часть-2-.html#1) -- [Собеседование по Java — коллекции](http://javastudy.ru/interview/collections/) - -## Домашнее задание -Выделить общий класс `AbstractStorage` и реализовать подклассы `ListStorage` и `MapStorage`. Выбор реализации List и Map за вами. diff --git a/lesson/lesson6.md b/lesson/lesson6.md deleted file mode 100644 index 3295fbb7..00000000 --- a/lesson/lesson6.md +++ /dev/null @@ -1,20 +0,0 @@ - -# Шестое занятие - -## Разбор Домашнего Задания-5 -- Преобразования Integer и int - -## Iterator / Iterable. Вложенные, внутренние, локальные и анонимные классы. -- Iterator / Iterable. -- Вложенные и внутренние классы. Примеры в Collections API: Arrays.asList, ArrayList.iterator -- Локальные и анонимные классы. Comparator - -## Новое в Java 8. -- Lambda выражения. Default методы для Interface. -- Встроенные функциональные интерфейсы. - -## Домашнее задание -- Сделать рефакторинг тестов: `saveOverflow` должно быть только для Array реализаций. -- Рефакторинг: в конструктор Resume добавить второй параметр `fullName` -- Сделать рефакторинг всех реализаций `Storage`: заменить метод `Resume[] getAll()` на `List getAllSorted()` -- Реализовать до конца `MapUuidStorage`. Подумать что еще может быть search key в реализации на основе Map. diff --git a/lesson/lesson7.md b/lesson/lesson7.md deleted file mode 100644 index 30494c95..00000000 --- a/lesson/lesson7.md +++ /dev/null @@ -1,46 +0,0 @@ - -# Седьмое занятие - -## [Разбор Домашнего Задания-6](lesson6.md#Домашнее-задание) - -## Параметризация. Стирание типов. -- Дженерики (Java, обучающая статья) -- Обобщения (Generic) -- Ограничения. - -## Логирование -- Log4J (Apache logging) -- Java Logging API - Tutorial -- Логирование в Java / quick start -- Ведение лога приложения -- Java Logging: история кошмара - -## Синглетон, Enum -- Одиночка (шаблон проектирования) -- Перечисляемые типы (enum) в Java - -## Домашнее задание: -Доменный объект - -Cделать объектную модель резюме (диаграмма и классы). Образец резюме (делаем упрощенно) - - Делать только классы, включаемые в Resume. Resume - главный класс. В него все включается (композиция - строгий вид агрегации). - - Схожие по структуре и функциональности сущности делаем одним классом. - - Модель упрощаем для хранения только необходимой информации для вывода/ редактирования резюме. - - В модели резюме должны быть представлены контакты и следующие разделы: - - PERSONAL("Личные качества") - - OBJECTIVE("Позиция") - - ACHIEVEMENT("Достижения") - - QUALIFICATIONS("Квалификация") - - EXPERIENCE("Опыт работы") - - EDUCATION("Образование") - - В секциях Достижения и Квалификация хранить список строк - - Учесть в классах модели, что обработка резюме (вывод в html, сохранение, чтение) будет сделано следующим образом: -обработка `fullName`, цикл обработки по контактам, цикл обработки по секциям (для секций использовать полиморфизм, как для фигур: круг, квадрат..). -При добавлении/удалении новых видов контактов (например домашний телефон) или разделов изменения в коде (и БД) должны быть минимальны. - -#### Инструменты для рисования: - -- Generate class diagram in IntelliJ IDEA (Help: working with Diagrams) -- Нарисовать и сфотографировать -- Online: www.draw.io -- yEd - Graph Editor diff --git a/lesson/lesson8.md b/lesson/lesson8.md deleted file mode 100644 index d7336ade..00000000 --- a/lesson/lesson8.md +++ /dev/null @@ -1,21 +0,0 @@ - -# Восьмое занятие - -## Разбор Домашнего Задания-7: объектная модель резюме - -## Работа с датами и временем -- Класс Date, Calendar, TimeZone -- Java – Convert date and time between timezone -- Joda Time library -- Java 8 Date API - -## Работа с файлами и ресурсами. - - File. Работа с файловой системой. - - Работа с ресурсами. Правильно освобождаем ресурсы в Java - - Java 7 try-with-resources - -## Домашнее задание -- Переделать модель резюме: учесть, что на одной работе (в одном учебном заведении) можно работать/ учиться в разные периоды и при этом имя организации не дублируется -- Сделать рекурсивный обход и вывод имени файлов в каталогах и подкаталогах (корневой каталог- ваш проект) -- Заполнить в `AbstractStorageTest` резюме данными -- Реализовать `AbstractFileStorage`, базовый класс для хранения резюме в файлах. diff --git a/lesson/lesson9.md b/lesson/lesson9.md deleted file mode 100644 index de787f63..00000000 --- a/lesson/lesson9.md +++ /dev/null @@ -1,25 +0,0 @@ - -# Девятое занятие - -## Разбор Домашнего Задания-8: - -## Ввод/вывод -- Пакет java.io -- Паттерн Декоратор. -- Классы Reader и Writer. - -## Сериализация -- Сериализация объектов (serialization) -- Реализация Storage используя сериализацию. - -## NIO -- NIO Java 7 -- Чтения строк из файла - -## Основы Java 8 Stream API -- Потоки - -## Домашнее задание -- Сделать рекурсивный вывод каталогов с отступом -- Реализовать Storage через java.nio.file.Path. -- Сделать возможным выбор меджу FileStorage и PathStorage для сериализации через ObjectStream. From da6578c3cd85c4b7c2c93adc40060cb44f4b19aa Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 7 Feb 2019 17:32:31 +0300 Subject: [PATCH 04/29] Update lesson1.md --- lesson/lesson1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 2b5e4491..a1b848e6 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -54,6 +54,7 @@ - [Working with remote repositories](https://illustrated-git.readthedocs.org/en/latest/#working-with-remote-repositories) - [Базовый курс по обучению Git](https://www.youtube.com/playlist?list=PLIU76b8Cjem5B3sufBJ_KFTpKkMEvaTQR) (youtube) - [Git. Быстрый старт](https://www.youtube.com/watch?v=4-NX17Ip-xQ&list=PLmRNNqEA7JoM77hOJkPrLOfJQGizCLR3P) (youtube) + - [Подробное введение в работу с Git](https://tproger.ru/translations/beginner-git-cheatsheet/) ### Настройка проекта - Создайте на GitHub репозиторий с названием `basejava` From 47e96cd2c3df97400801a6d9b8d61b810601f428 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 16 Aug 2019 22:31:24 +0300 Subject: [PATCH 05/29] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 197623f4..3d0033ff 100644 --- a/README.md +++ b/README.md @@ -202,6 +202,7 @@ - Редмонд Э.: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL. ## Ресуры в сети +- [EduTools плагин от JetBrains для изучения Kotlin, Java, Python, Scala, ...](http://javaops.ru/view/story/story21#edutools) - [Руководство по Java Core](http://proselyte.net/tutorials/java-core/) - [Java. Базовый курс](https://stepik.org/course/Java-Базовый-курс-187) - intuit: Программирование на Java From 493a7bb6651bd1f12821a61eb4bc47e3a4f1d705 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 16 Aug 2019 22:42:34 +0300 Subject: [PATCH 06/29] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d0033ff..36da323d 100644 --- a/README.md +++ b/README.md @@ -204,6 +204,6 @@ ## Ресуры в сети - [EduTools плагин от JetBrains для изучения Kotlin, Java, Python, Scala, ...](http://javaops.ru/view/story/story21#edutools) - [Руководство по Java Core](http://proselyte.net/tutorials/java-core/) -- [Java. Базовый курс](https://stepik.org/course/Java-Базовый-курс-187) +- [Java. Базовый курс (доступен также через плагин JetBrains EduTools)](https://stepik.org/course/Java-Базовый-курс-187) - intuit: Программирование на Java - Основы программирования на Java: учебное пособие From a2249f1042465ccadf73a5ffd00562970757e489 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Wed, 26 Feb 2020 22:47:01 +0300 Subject: [PATCH 07/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index a1b848e6..df65dd37 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -10,7 +10,7 @@ ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/open?id=0B_4NpoQW1xfpVjZUTEpvVUN1TTA) - [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) (wiki) -- [Размеры проектов в количестве строк кода [eng]](https://medium.freecodecamp.com/the-biggest-codebases-in-history-a128bb3eea73) +- [Размеры проектов в количестве строк кода [eng]](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) - [Соглашения по оформлению кода [eng]](https://google.github.io/styleguide/javaguide.html) - [Методологии разработки ПО](https://dou.ua/forums/topic/14015/) - [Ещё раз про семь основных методологий разработки](https://habrahabr.ru/company/edison/blog/269789/) From f816603599eaa9f0cf8fd76a3623c7ece84488b2 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 28 Feb 2020 14:26:28 +0300 Subject: [PATCH 08/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index df65dd37..70e81223 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -40,7 +40,7 @@ - **Дополнительно:** - [Java version and vendor data analyzed 2017](https://plumbr.io/blog/java/java-version-and-vendor-data-analyzed-2017-edition) - [Most popular Java application servers: 2017 edition](https://plumbr.io/blog/java/most-popular-java-application-servers-2017-edition) - - [Понимаем основы Java garbage collection](https://ggenikus.github.io/blog/2014/05/04/gc) + - [Понимаем основы Java garbage collection](http://web.archive.org/web/20180831013112/https://ggenikus.github.io/blog/2014/05/04/gc) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s) From 8c34e2789ef3afb53b676895d2a775e83ab86839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Wed, 4 Mar 2020 18:43:38 +0300 Subject: [PATCH 09/29] Update lesson1.md --- lesson/lesson1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 70e81223..a55bf6dd 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -114,6 +114,8 @@ r1, r2, r3,..., rn, null, null,..., null 5. Не игнорируй подсказки IDEA (подсвечивает) 6. `Resume r` — давай переменным осмысленные имена, например `resume`. `r` допустимо в коротких циклах и лямбдах. 7. В методе `clear()` обнуление массива предполагает именно обнуление (null), а не создание нового +1. При реализации методов не используйте коллекции +1. Не меняйте сигнатуры методов в `ArrayStorage` # Дополнительно (как учиться программированию) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 5. [Вебинар "Быть программистом: от детства к зрелости"](https://www.youtube.com/watch?v=D5Hej0TyLaU) From 627eedf85cfd3065b3197cb8e18c164e380c54b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Tue, 19 May 2020 23:16:50 +0200 Subject: [PATCH 10/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index a55bf6dd..2ba55791 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -60,7 +60,7 @@ - Создайте на GitHub репозиторий с названием `basejava` - Откройте консоль (терминал) у себя на компьютере - Наберите и запустите: `git` (по умолчанию при установке git заносится в PATH. Если он не находится, [занесите](https://www.java.com/ru/download/help/path.xml) git в переменную окружения PATH и перезапустите консоль) -- Создайте локальную копию проекта: `git clone https://github.com/JavaOps/basejava.git` +- **Создайте локальную копию проекта: `git clone https://github.com/JavaOps/basejava.git`. Реализацию дз выполняйте в рамках данной копии** - Перейдите в каталог проекта: `cd basejava` - Настройте git в локальном проекте на свой проект в GitHub: - `git remote -v` From 16e2af68b2d25e86b2fbddea13c705f2b86fb5ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Wed, 8 Jul 2020 16:15:14 +0300 Subject: [PATCH 11/29] Update lesson1.md --- lesson/lesson1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 2ba55791..ae701b4c 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -6,12 +6,12 @@ - Установите [JDK8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (выбрать Accept License Agreement) - Установите систему управления версиями [Git](http://git-scm.com/downloads) (опции по умолчанию) - Создайте аккаунт на [GitHub](https://github.com/). Для удобной навигации по файлам на GitHub можно установить расширение для браузера [Octotree](https://habrahabr.ru/post/223527/) -- Установите [IntelliJ IDEA](http://www.jetbrains.com/idea/download/index.html). **Пока нет базы данных и веб, можно работать с версией Community**. На версию Ultimate дается 30 дней пробного бесплатного использования (trial). На проектах каждый участник проектов получает единоразовый личный купон на бесплатную версию Ultimate на 6 месяцев. +- Установите [IntelliJ IDEA](http://www.jetbrains.com/idea/download/index.html). **Пока нет базы данных и веб, можно работать с версией Community**. На версию Ultimate дается 30 дней пробного бесплатного использования (trial). На проектах каждый участник получает единоразовый личный купон на бесплатную версию Ultimate на 6 месяцев ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/open?id=0B_4NpoQW1xfpVjZUTEpvVUN1TTA) - [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) (wiki) - [Размеры проектов в количестве строк кода [eng]](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) -- [Соглашения по оформлению кода [eng]](https://google.github.io/styleguide/javaguide.html) +- [Руководство Google по форматированию кода на Java](https://topjava.ru/blog/google-java-style-guide) - [Методологии разработки ПО](https://dou.ua/forums/topic/14015/) - [Ещё раз про семь основных методологий разработки](https://habrahabr.ru/company/edison/blog/269789/) From 0b0ef3f49bd677fbd73f036c378d96fe321612f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Wed, 29 Jul 2020 02:40:23 +0300 Subject: [PATCH 12/29] Update README.md --- README.md | 181 ++++++++++++++++++++++++++---------------------------- 1 file changed, 87 insertions(+), 94 deletions(-) diff --git a/README.md b/README.md index 36da323d..1fdcab28 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,52 @@ -# Курс BaseJava (обновленный и переработанный) - -## Разработка Web приложения "База данных резюме" - - используем: Java 8, IntelliJ IDEA, - GitHib/Git, Сервлеты, JSP, JSTL, Tomcat, JUnit, PostgreSQL, GSON, JAXB - - хранение резюме - - в памяти на основе массива, отсортированного массива, списка и ассоциированного массива (Map) - - в файловой системе (File API и Java 7 NIO File API) +# [Курс BaseJava (обновленный и переработанный)](http://javaops.ru/reg/basejava) + +## Разработка web-приложения "База данных резюме" + +В данном курсе вы создадите с нуля web-приложение, реализуя разные способы хранения резюме. Проект включает в себя следующее: + - **Технологии:** Java 8, GitHub/Git, JUnit, Logging, GSON, JAXB, SQL, PostgreSQL, Сервлеты, HTML, JSP, JSTL, Tomcat, Maven и многое другое + - **Различные способы реализации хранения резюме:** + - в сортированном и не сортированном массиве + - в коллекциях (List, Map) + - в файловой системе: + - с использованием File и Path API - в стандартной и кастомной сериализации Java - - в формате JSON (Google Gson) - - в формате XML (JAXB) - - в реляционной базе PostgreSQL - - деплой веб приложения - - в контейнер сервлетов Tomcat - - в облачный сервис Heroku + - в формате JSON ([Google Gson](https://en.wikipedia.org/wiki/Gson)) + - в формате XML ([JAXB](https://ru.wikipedia.org/wiki/Java_Architecture_for_XML_Binding)) + - в реляционной базе [PostgreSQL](https://ru.wikipedia.org/wiki/PostgreSQL) + - **Установку (деплой) web-приложения:** + - в контейнер сервлетов [Tomcat](https://ru.wikipedia.org/wiki/Apache_Tomcat) + - в облачный сервис [Heroku](https://ru.wikipedia.org/wiki/Heroku) -Приложение будет разрабатываться начиная со первого занятия, основываясь на базовых темах курса: -**объектная модель, коллекции, система ввода-вывода, работа с файлами, сериализация, работа с XML, JSON, SQL, персистентность в базу данных (PostgreSQL), сервлеты, HTML/JSP/JSTL, веб-контейнер Tomcat, модульные тесты JUnit, java.util.Logging, система контроля версий Git.** +> Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе последним не на чем будет держаться -> Любое знание стоит воспринимать как подобие семантического дерева: убедитесь в том, что понимаете фундаментальные принципы, то есть ствол и крупные ветки, прежде чем лезть в мелкие листья-детали. Иначе последним не на чем будет держаться. +— Илон Маск -[*— Илон Маск](https://ru.wikipedia.org/wiki/Маск,_Илон) +### Изучите [бесплатный урок](lesson/lesson1.md). В конце урока находится домашнее задание, по которому можно оценить свой уровень готовности к проекту -# Изучайте [первое открытое занятие](lesson/lesson1.md). -### Внизу урока есть первое домашнее задание, по которому можно оценить свой уровень готовности к проекту. +## Программа курса -## Программа -### [Регистрация](http://javaops.ru/reg/basejava) -### Открытое занятие 1 +#### Занятие 1 (бесплатное) - Обзор курса и методики обучения - Подготовка и настройка рабочего окружения - Подходы, применяемые при разработке ПО - Обзор инструментов и технологий, используемых Java-разработчиками - - Введение в язык Java: история создания, JVM, JIT-компиляция + - Введение в язык Java: история создания, JDK, JVM, JRE, JIT-компиляция - Системы управления версиями. Git - Домашнее задание -### Занятие 2 +#### Занятие 2 + - Типы данных - Введение в объектно-ориентированное программирование - Принципы ООП - - Модификаторы доступа - - Классы-обертки - Классы и объекты + - Классы-обертки + - Модификаторы доступа + - Конструктор - Структура памяти java-программы: Heap (куча), Stack (стек) - - Типы данных - - Пакетная организация файлов + - Пакеты - Домашнее задание -### Занятие 3 +#### Занятие 3 - Разбор домашнего задания - Обзор суперкласса Object - Связь между equals() и hashCode() @@ -54,102 +54,97 @@ - Программирование с помощью интерфейсов - Абстрактные классы - Сложность алгоритмов - - Паттерн проектирования Шаблонный метод + - Паттерн проектирования Template Method - Домашнее задание -### Занятие 4 +#### Занятие 4 - Разбор домашнего задания + - Конструктор - Работа со строками: String, StringBuilder, StringBuffer - String literal pool - Исключения (Exceptions) - - Конструктор - Ключевые слова: this, super - Reflection - - Аннотации в Java 8 + - Аннотации - Введение в модульное тестирование. JUnit - Домашнее задание -### Занятие 5 +#### Занятие 5 - Разбор домашнего задания - - Иерархия классов Коллекций + - Коллекций. Иерархия классов - Списки (List) - Множества (Set) - Ассоциативные массивы (Map) - Введение в Iterator - - Тестирование коллекций - Домашнее задание -### Занятие 6 +#### Занятие 6 - Разбор домашнего задания - - Autoboxing and Unboxing - - Паттерн проектирования Итератор + - Паттерн проектирования Iterator + - Autoboxing и Unboxing - Вложенные классы - Внутренние классы - Локальные классы - Анонимные классы - - Введение в лямбды + - Введение в лямбда-выражения - Функциональный интерфейс - Домашнее задание -### Занятие 7 +#### Занятие 7 - Разбор домашнего задания - Дженерики (Generic) - - Введение в логирование. Log4J - - Стандартный логер - Java Logging API - - Паттерн проектирования - Синглтон - - Перечисляемые типы (Enum) + - Введение в логирование. Log4J, Java Logging API + - Паттерн проектирования Singleton + - Перечисления (Enum) - Объектная модель - Домашнее задание -### Занятие 8 +#### Занятие 8 - Разбор домашнего задания - Классы работы с датами: Date, Calendar, TimeZone - - Дата и время в Java 8 - - Внешние библиотеки: Joda Time library - - Работа с файловой системой: класс File - - try-with-resources + - Дата и время в Java 8+ + - File API + - Освобождение ресурсов: try-with-resources - Домашнее задание -### Занятие 9 +#### Занятие 9 - Разбор домашнего задания - Обзор пакета java.io - - Классы чтения/записи потоков: InputStream/OutputStream - - Паттерн проектирования Декоратор - - Работа с классами чтения/записи символов: Reader и Writer - - Сериализация + - Классы чтения/записи потоков: InputStream и OutputStream + - Паттерн проектирования Decorator + - Классы чтения/записи символов: Reader и Writer + - Сериализация объектов - Обзор пакета java.nio - - Введение в Java 8 Stream API + - Введение в Java 8+ Stream API - Домашнее задание -### Занятие 10 +#### Занятие 10 - Разбор домашнего задания - - Паттерн проектирования Стратегия - - Работа с XML - - Работа с JSON: Google GSON и Jackson - - Введение в REST - - DataInputStream/DataOutputStream - - Домашнее задание - -### Занятие 11 - - Процессы и потоки - - Синхронизация методов и блоков - - Закон Мура - - Закон Амдала + - Паттерн проектирования Strategy + - Работа с XML (JAXB) + - Работа с JSON (GSON) + - Классы чтения/записи примитивных типов: DataInputStream и DataOutputStream + - Домашнее задание + +#### Занятие 11 + - Многопоточность + - Закон Мура и Амдала + - Потоки. Синхронизация доступа - Обзор методов класса Object - Ленивая инициализация - Java Memory Model - - Взаимная блокировка + - Deadlock - Домашнее задание -### Занятие 12 +#### Занятие 12 - Разбор домашнего задания - - Обзор java.util.concurrent + - Обзор классов java.util.concurrent - Синхронизаторы - - ThreadLocal переменные + - ThreadLocal-переменные - Сравнение с обменом (Compare-and-swap) - Домашнее задание -### Занятие 13 +#### Занятие 13 - Разбор домашнего задания - Введение в реляционные базы данных - Язык SQL @@ -161,7 +156,7 @@ - Обзор JDBC-архитектуры - Домашнее задание -### Занятие 14 +#### Занятие 14 - Разбор домашнего задания - Операции соединения таблиц. JOIN - Транзакции @@ -170,40 +165,38 @@ - Установка и настройка контейнера сервлетов Tomcat - Домашнее задание -### Занятие 15 +#### Занятие 15 - Разбор домашнего задания - Введение в HTML - Основы протокола HTTP - Настройка web.xml - - Развертывание (деплой) web-приложения в Tomcat + - Деплой web-приложения в Tomcat - Сервлеты - Домашнее задание -### Занятие 16 +#### Занятие 16 - Разбор домашнего задания - Жизненный цикл сервлета - Создание динамических страниц. JSP - - Расширенные возможности JSP: JSTL + - Расширенные возможности JSP. JSTL - Redirect и Forward - - CRUD + - CRUD-операции - Домашнее задание -### Занятие 17 +#### Занятие 17 - Разбор домашнего задания - Деплой приложения в облачный сервис Heroku - Загрузка классов в Java. Classloader - Домашнее задание ## Рекомендуемые книги -- YAKOV FAIN: Программирование на Java для начинающих -- Книги по Java: от новичка до профессионала -- Джошуа Блох: Java. Эффективное программирование, 2-е издание -- Гамма, Хелм, Джонсон: Приемы объектно-ориентированного проектирования. Паттерны проектирования -- Редмонд Э.: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL. - -## Ресуры в сети -- [EduTools плагин от JetBrains для изучения Kotlin, Java, Python, Scala, ...](http://javaops.ru/view/story/story21#edutools) -- [Руководство по Java Core](http://proselyte.net/tutorials/java-core/) -- [Java. Базовый курс (доступен также через плагин JetBrains EduTools)](https://stepik.org/course/Java-Базовый-курс-187) -- intuit: Программирование на Java -- Основы программирования на Java: учебное пособие +- [Яков Файн, "Программирование на Java для начинающих"](http://myflex.org/books/java4kids/java4kids.htm) +- [Книги по Java: от новичка до профессионала](https://proglib.io/p/java-books-2019/) +- [Джошуа Блох, "Java. Эффективное программирование, 3-е издание"](https://www.ozon.ru/context/detail/id/148627191/) +- [Роберт Мартин, "Чистый код"](https://www.ozon.ru/context/detail/id/142429922/) +- [Серия Head First, "Паттерны проектирования"](https://www.ozon.ru/context/detail/id/144233005/) +- [Вайсфельд Мэтт, "Объектно-ориентированный подход"](https://www.ozon.ru/context/detail/id/166375103/?stat=YW5fMQ%3D%3D) + +## Ресурсы в сети +- [EduTools плагин от JetBrains для изучения Kotlin, Java, Python, Scala и других языков](http://javaops.ru/view/story/story21#edutools) +- [JetBrains Academy — интерактивный учебный курс по Java](https://www.jetbrains.com/ru-ru/academy/) From 1a2dff2b2f384e1cd0fa700939775d054c5460c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Wed, 29 Jul 2020 03:14:34 +0300 Subject: [PATCH 13/29] Update lesson1.md --- lesson/lesson1.md | 131 ++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 73 deletions(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index ae701b4c..f65d53a2 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -1,86 +1,76 @@ # Первое занятие -## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) [Видеообзор проекта Basejava](https://www.youtube.com/watch?v=0ydTRfKS9yY) +## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) [Видеообзор курса Basejava](https://www.youtube.com/watch?v=0ydTRfKS9yY) ### Подготовка рабочего окружения - Установите [JDK8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (выбрать Accept License Agreement) -- Установите систему управления версиями [Git](http://git-scm.com/downloads) (опции по умолчанию) -- Создайте аккаунт на [GitHub](https://github.com/). Для удобной навигации по файлам на GitHub можно установить расширение для браузера [Octotree](https://habrahabr.ru/post/223527/) -- Установите [IntelliJ IDEA](http://www.jetbrains.com/idea/download/index.html). **Пока нет базы данных и веб, можно работать с версией Community**. На версию Ultimate дается 30 дней пробного бесплатного использования (trial). На проектах каждый участник получает единоразовый личный купон на бесплатную версию Ultimate на 6 месяцев +- Установите систему управления версиями [Git](http://git-scm.com/downloads) +- Создайте аккаунт на [GitHub](https://github.com/) +- Для удобной навигации по файлам на GitHub установите расширение для браузера [Octotree](https://habrahabr.ru/post/223527/) +- Установите [IntelliJ IDEA Community](http://www.jetbrains.com/idea/download/index.html) (Ultimate-версия понадобится позже, при работе с базой данных и web) +> Для версии Ultimate дается 30 дней бесплатного использования. Но в качестве подарка, каждому участнику курса, мы выдаем единоразово купон на 6 месяцев ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/open?id=0B_4NpoQW1xfpVjZUTEpvVUN1TTA) - [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) (wiki) -- [Размеры проектов в количестве строк кода [eng]](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) -- [Руководство Google по форматированию кода на Java](https://topjava.ru/blog/google-java-style-guide) +- [Подборка книг для руководителей в сфере IT](https://habr.com/ru/company/skyeng/blog/465215/) +- [Размеры проектов в количестве строк кода](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) +- [Соглашения по оформлению кода](https://topjava.ru/blog/google-java-style-guide) - [Методологии разработки ПО](https://dou.ua/forums/topic/14015/) - [Ещё раз про семь основных методологий разработки](https://habrahabr.ru/company/edison/blog/269789/) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 2. [Обзор инструментов и технологий](https://drive.google.com/file/d/0B_4NpoQW1xfpTXJYU2xZbjN2d2M) -- [Bash — шпаргалка для начинающих](https://tproger.ru/translations/bash-cheatsheet) -- **Обновление!!* - - [The State of Java in 2018](http://www.baeldung.com/java-in-2018) - - [Что и почему используют Java-разработчики: опрос RebelLabs](https://jug.ru/2017/12/rebellabs-report/) - - [Java Tools and Technologies Landscape Report 2016](https://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016/) - - [Java Tools and Technologies Landscape for 2014](http://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-for-2014) -- **Дополнительно:** - - [Типичный тест SQL на собеседованиях](https://habrahabr.ru/post/181033/) +- [Популярность Java-технологий в 2019 году](https://topjava.ru/blog/sostoyanie-java-v-2019-godu) +- [Java Technology Report 2020](https://www.jrebel.com/blog/2020-java-technology-report) +- [The State of Developer Ecosystem 2020](https://www.jetbrains.com/lp/devecosystem-2020/java/) +- [JVM Ecosystem Report 2020](https://snyk.io/wp-content/uploads/jvm_2020.pdf) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/open?id=0B_4NpoQW1xfpTU5SSElhUjlGNnc) -- [Java](http://ru.wikipedia.org/wiki/Java), [JVM](http://ru.wikipedia.org/wiki/Виртуальная_машина_Java), [JIT-компиляция](http://ru.wikipedia.org/wiki/JIT) (wiki) + +![jvm](https://cloud.githubusercontent.com/assets/18701152/15219296/e6c67e86-186b-11e6-986f-651a87deec6c.png) + +- [Java](http://ru.wikipedia.org/wiki/Java), [JVM](http://ru.wikipedia.org/wiki/Виртуальная_машина_Java), [JIT-компиляция](http://ru.wikipedia.org/wiki/JIT) +- Java [ME](http://ru.wikipedia.org/wiki/Java_Platform,_Micro_Edition), [SE](https://ru.wikipedia.org/wiki/Java_Platform,_Standard_Edition), [EE](http://ru.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition) - [Что такое JDK? Введение в средства разработки Java](https://topjava.ru/blog/what-is-the-jdk) - [Что такое JRE? Введение в среду выполнения Java](https://topjava.ru/blog/what-is-the-jre) - [Что такое Java? История создания](http://www.intuit.ru/studies/courses/16/16/lecture/27105) - [Programming languages TIOBE Index](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) - -![jvm](https://cloud.githubusercontent.com/assets/18701152/15219296/e6c67e86-186b-11e6-986f-651a87deec6c.png) - -- [ME](http://ru.wikipedia.org/wiki/Java_Platform,_Micro_Edition), [SE](https://ru.wikipedia.org/wiki/Java_Platform,_Standard_Edition), [EE](http://ru.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition) (wiki) - [Java Microbenchmark JMH](http://openjdk.java.net/projects/code-tools/jmh/) (используем на курсе [MasterJava](https://github.com/JavaWebinar/masterjava#Занятие-2)) -- [Oracle Java8 Home](http://docs.oracle.com/javase/8/docs/index.html) -- **Дополнительно:** - - [Java version and vendor data analyzed 2017](https://plumbr.io/blog/java/java-version-and-vendor-data-analyzed-2017-edition) - - [Most popular Java application servers: 2017 edition](https://plumbr.io/blog/java/most-popular-java-application-servers-2017-edition) - - [Понимаем основы Java garbage collection](http://web.archive.org/web/20180831013112/https://ggenikus.github.io/blog/2014/05/04/gc) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s) ![image](https://cloud.githubusercontent.com/assets/18701152/15219746/9295a2fe-186d-11e6-876b-c61cc9be71e4.png) - - [Система управления версиями](https://ru.wikipedia.org/wiki/Система_управления_версиями) (wiki) - - [Сравнение разных VCS](https://biz30.timedoctor.com/ru/cистема-контроля-версий/) - - [Git обучалка](https://githowto.com/ru) - - [Интерактивная Git обучалка (в настройках выберите русский язык)](http://learngitbranching.js.org) - - [Официальная книга про Git](https://git-scm.com/book/ru/v2) - - [Working with remote repositories](https://illustrated-git.readthedocs.org/en/latest/#working-with-remote-repositories) - - [Базовый курс по обучению Git](https://www.youtube.com/playlist?list=PLIU76b8Cjem5B3sufBJ_KFTpKkMEvaTQR) (youtube) - - [Git. Быстрый старт](https://www.youtube.com/watch?v=4-NX17Ip-xQ&list=PLmRNNqEA7JoM77hOJkPrLOfJQGizCLR3P) (youtube) - - [Подробное введение в работу с Git](https://tproger.ru/translations/beginner-git-cheatsheet/) +- [Система управления версиями (VCS)](https://ru.wikipedia.org/wiki/Система_управления_версиями) +- [Сравнение разных VCS](https://biz30.timedoctor.com/ru/cистема-контроля-версий/) +- [Видео-уроки по Git](https://www.youtube.com/playlist?list=PLDyvV36pndZHkDRik6kKF6gSb0N0W995h) +- Интерактивные Git-обучалки: [1](https://githowto.com/ru), [2](http://learngitbranching.js.org) +- [Официальная книга по Git](https://git-scm.com/book/ru/v2) ### Настройка проекта - Создайте на GitHub репозиторий с названием `basejava` -- Откройте консоль (терминал) у себя на компьютере -- Наберите и запустите: `git` (по умолчанию при установке git заносится в PATH. Если он не находится, [занесите](https://www.java.com/ru/download/help/path.xml) git в переменную окружения PATH и перезапустите консоль) -- **Создайте локальную копию проекта: `git clone https://github.com/JavaOps/basejava.git`. Реализацию дз выполняйте в рамках данной копии** -- Перейдите в каталог проекта: `cd basejava` -- Настройте git в локальном проекте на свой проект в GitHub: - - `git remote -v` - - `git remote set-url origin url_на_твой_basejava-репозиторий.git` - настройка pull - - `git remote set-url --push origin url_на_твой_basejava-репозиторий.git` - настройка push - - `git push -u origin master` +- Откройте консоль у себя на компьютере (в папке, где планируете разместить проект) и выполните следующее: + - **Скачайте копию проекта с заранее заданными классами: `git clone https://github.com/JavaOps/basejava.git`. Реализацию дз выполняйте в рамках данной копии** + - Перейдите в каталог проекта: `cd basejava` + - Настройте git у себя на компьютере на свой репозиторий в GitHub: + - `git remote set-url origin url_на_ваш_basejava-репозиторий.git` — настройка pull + - `git remote set-url --push origin url_на_ваш_basejava-репозиторий.git` — настройка push + - `git remote -v` — удостоверьтесь, что команда выводит ссылки на ваш удаленный репозиторий + - `git push -u origin master` — [устанавливаем связь](https://qna.habr.com/q/118865) между локальной и удаленной веткой master ## Домашнее задание HW1 -- Создайте в IntelliJ IDEA новый проект, выбрав каталог `basejava`, который вы клонировали ранее к себе на компьютер: +- Создайте в IntelliJ IDEA новый проект, выбрав каталог `basejava`, который вы скачали ранее к себе на компьютер: -![newproject](https://user-images.githubusercontent.com/29703461/38273513-d1f7ce52-3794-11e8-829c-305212c25be7.png) +![newproject](https://user-images.githubusercontent.com/29703461/88058015-95008580-cb6b-11ea-9b7c-65843b859988.png) -![next](https://user-images.githubusercontent.com/29703461/38273546-e712a6fe-3794-11e8-9850-29287b46a8a0.png) +![next](https://user-images.githubusercontent.com/29703461/88057628-055ad700-cb6b-11ea-9c59-72bb538e2541.png) -![next1](https://user-images.githubusercontent.com/29703461/38273584-00e07dc2-3795-11e8-9006-3109f949cf33.png) +![next1](https://user-images.githubusercontent.com/29703461/88058925-d2b1de00-cb6c-11ea-9d0b-83c771899457.png) -![finish](https://user-images.githubusercontent.com/29703461/38275669-3e621614-379b-11e8-8b3a-8e0a3ad4c65c.png) +![finish](https://user-images.githubusercontent.com/29703461/88059306-579cf780-cb6d-11ea-8094-bbf87474a127.png) -- Реализуйте класс `ArrayStorage`, организовав хранение резюме на основе массива с методами `save, get, delete, size, clear, getAll` -- Храните все резюме в начале `storage` (без дырок в виде `null`), чтобы не перебирать каждый раз все 10000 элементов +- Реализуйте методы `save, get, delete, clear, getAll, size` в классе `ArrayStorage`, организовав хранение резюме в массиве +- Храните все резюме в начале `storage` (без пустот в виде `null`), чтобы не перебирать каждый раз все 10_000 элементов +- При реализации метода `delete` учитывайте, что после удаления резюме между оставшимися резюме не должно быть пустых ячеек, заполненных null ``` Схема хранения резюме в массиве storage (в элементах от 0 до size-1 отсутствуют null): @@ -88,41 +78,36 @@ r1, r2, r3,..., rn, null, null,..., null <----- size -----> <------- storage.length (10000) -------> ``` -- Протестируйте вашу реализацию с помощью классов `MainArray.main()` и `MainTestArrayStorage.main()` +- Проверьте вашу реализацию с помощью классов `MainArray.main()` и `MainTestArrayStorage.main()` - Изучите дополнительные материалы по IntelliJ IDEA: - - [Idea Wiki](https://github.com/JavaOPs/topjava/wiki/IDEA) ([поставьте кодировку UTF-8](https://github.com/JavaOPs/topjava/wiki/IDEA#Поставить-кодировку-utf-8), [поменяйте шрифт по умолчанию на DejaVu](https://github.com/JavaOPs/topjava/wiki/IDEA#Поменять-фонт-по-умолчанию-dejavu)) - - [Руководство пользователя IntelliJ IDEA. Отладчик](http://info.javarush.ru/idea_help/2014/01/22/Руководство-пользователя-IntelliJ-IDEA-Отладчик-.html) - - [Эффективная работа с кодом в IntelliJ IDEA](https://www.youtube.com/watch?v=tpv5n2jWHlw) (youtube) - - [Эффективная работа в IDEA](https://www.youtube.com/watch?v=_rj7dx6c5R8) (youtube) + - [Idea Wiki](https://github.com/JavaOPs/topjava/wiki/IDEA) + - [Отладка Java кода в IDEA. Основные возможности отладчика](https://youtu.be/Z1BQsf0A4xY) + - [Эффективная работа с кодом в IntelliJ IDEA](https://www.youtube.com/watch?v=tpv5n2jWHlw) + - [Эффективная работа в IDEA](https://www.youtube.com/watch?v=_rj7dx6c5R8) ### Вопросы по HW1 > Не могу запустить программу, да и рядом с классами появился какой-то значок + ![badsrc](https://user-images.githubusercontent.com/29703461/38277015-9cd9155e-379f-11e8-9cd4-a9182a005e9a.png) - Проблема в том, что IDEA неправильно "воспринимает" папку `src`. Для ее решения необходимо нажать `ПКМ на папке src -> выбрать Mark Directory as -> Sources Root` - > Что такое `null`? - -[Что такое null в Java?](http://qaru.site/questions/1960/what-is-null-in-java) (оригинал: [What is null in Java? -](https://stackoverflow.com/questions/2707322/what-is-null-in-java)) - ### Замечания по выполнению HW1 -1. Все резюме в хранилище имеют уникальный `uuid`, что исключает повторы. Cортировка по `uuid` не требуется -2. Давайте осмысленные комментарии коммитам -3. Перед каждым коммитом не забывайте пользоваться сочетанием клавиш `Ctrl + Alt + L` (автоматическое форматирование кода) -4. Не злоупотребляйте пустыми строками. Они используются нечасто для логического отделения больших кусков кода. -5. Удаляйте неиспользуемые импорты (`Ctrl + Alt + O`) -5. Не игнорируй подсказки IDEA (подсвечивает) -6. `Resume r` — давай переменным осмысленные имена, например `resume`. `r` допустимо в коротких циклах и лямбдах. -7. В методе `clear()` обнуление массива предполагает именно обнуление (null), а не создание нового +1. Все резюме в хранилище имеют уникальный `uuid`, что исключает повторы. Сортировка по `uuid` не требуется +1. Давайте осмысленные комментарии коммитам +1. Перед каждым коммитом не забывайте пользоваться сочетанием клавиш `Ctrl + Alt + L` (автоматическое форматирование кода) +1. Удаляйте в классах неиспользуемые импорты (`Ctrl + Alt + O`) +1. Не игнорируй подсказки IDEA (подсвечивает) +1. В методе `clear()` обнуление массива предполагает обнуление (null) ячеек, где хранятся Resume, а не создание нового или присваивание ему null 1. При реализации методов не используйте коллекции 1. Не меняйте сигнатуры методов в `ArrayStorage` +1. Не добавляйте в `Resume` новые поля +1. Resume r — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях -# Дополнительно (как учиться программированию) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 5. [Вебинар "Быть программистом: от детства к зрелости"](https://www.youtube.com/watch?v=D5Hej0TyLaU) - [Слайды вебинара](https://docs.google.com/presentation/d/1YwtCCZsaGMdl-V15kTDHiJxiS52IAl-qqheNPpiNr54/) -## Советы по обучению - - Учись грамотно формулировать проблему. Проблема "у меня не работает" может иметь тысячи причин. В процессе формулирования очень часто приходит ее решение. - - Учись инвестигировать проблему. Внимательное чтение логов и умение дебажить - основные навыки разработчика. В логах надо читать верх самого нижнего эксепшена - там причина всей портянки. - - Грамотно уделяй время каждой проблеме. Две крайности - сразу бросаться за помощью и бится нам ней часами. Пробуй решить ее сам и в зависимости от проблемы выделяй на это разумное время. - - Получай в процессе решения обратную связь - в том ли направлении ты идешь. +### Советы по обучению + - Учитесь грамотно формулировать проблему: "у меня не работает" может иметь тысячи причин. В процессе формулирования часто приходит ее решение + - Учитесь исследовать проблему. Внимательное чтение логов и умение дебажить — основные навыки разработчика. В логах необходимо читать верхнюю часть самого нижнего иксепшена. Именно там находится причина возникшей ошибки + - Грамотно распределяйте время для каждой проблемы. Не впадайте в крайности: сразу бросаться за помощью или биться над ней часами. Подходите к ее решению разумно + - Получайте в процессе решения обратную связь, что бы убедиться в правильности выбранного направления - [Советы новичкам](http://blog.csssr.ru/2016/09/19/how-to-be-a-beginner-developer) From b0183ce136fd9b2ff2231e83843ec55d51de03eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Wed, 29 Jul 2020 03:17:50 +0300 Subject: [PATCH 14/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index f65d53a2..3bd9043a 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -11,7 +11,7 @@ > Для версии Ultimate дается 30 дней бесплатного использования. Но в качестве подарка, каждому участнику курса, мы выдаем единоразово купон на 6 месяцев ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/open?id=0B_4NpoQW1xfpVjZUTEpvVUN1TTA) -- [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) (wiki) +- [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) - [Подборка книг для руководителей в сфере IT](https://habr.com/ru/company/skyeng/blog/465215/) - [Размеры проектов в количестве строк кода](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) - [Соглашения по оформлению кода](https://topjava.ru/blog/google-java-style-guide) From 781170798d01ac1e6bf311583e65e91a4ebb38ae Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 17 Dec 2020 17:57:27 +0300 Subject: [PATCH 15/29] Update lesson1.md --- lesson/lesson1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 3bd9043a..b6a98124 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -41,6 +41,7 @@ ![image](https://cloud.githubusercontent.com/assets/18701152/15219746/9295a2fe-186d-11e6-876b-c61cc9be71e4.png) - [Система управления версиями (VCS)](https://ru.wikipedia.org/wiki/Система_управления_версиями) +- [Введение в Git: от установки до основных команд](https://tproger.ru/translations/beginner-git-cheatsheet/) - [Сравнение разных VCS](https://biz30.timedoctor.com/ru/cистема-контроля-версий/) - [Видео-уроки по Git](https://www.youtube.com/playlist?list=PLDyvV36pndZHkDRik6kKF6gSb0N0W995h) - Интерактивные Git-обучалки: [1](https://githowto.com/ru), [2](http://learngitbranching.js.org) From d91ae923417cb9819a313aceec4177cbdc09885d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Fri, 5 Mar 2021 13:35:08 +0300 Subject: [PATCH 16/29] Update MainArray.java --- src/MainArray.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MainArray.java b/src/MainArray.java index b1cb33b7..063364db 100644 --- a/src/MainArray.java +++ b/src/MainArray.java @@ -13,7 +13,7 @@ public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); Resume r; while (true) { - System.out.print("Введите одну из команд - (list | save uuid | delete uuid | get uuid | clear | exit): "); + System.out.print("Введите одну из команд - (list | size | save uuid | delete uuid | get uuid | clear | exit): "); String[] params = reader.readLine().trim().toLowerCase().split(" "); if (params.length < 1 || params.length > 2) { System.out.println("Неверная команда."); @@ -68,4 +68,4 @@ static void printAll() { } System.out.println("----------------------------"); } -} \ No newline at end of file +} From 481ff68f22d937588df29bf0dc24b2abf30387de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Sat, 13 Mar 2021 11:57:30 +0300 Subject: [PATCH 17/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index b6a98124..7ae19cae 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -20,7 +20,7 @@ ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 2. [Обзор инструментов и технологий](https://drive.google.com/file/d/0B_4NpoQW1xfpTXJYU2xZbjN2d2M) - [Популярность Java-технологий в 2019 году](https://topjava.ru/blog/sostoyanie-java-v-2019-godu) -- [Java Technology Report 2020](https://www.jrebel.com/blog/2020-java-technology-report) +- [Java Technology Report 2021](https://www.jrebel.com/blog/2021-java-technology-report) - [The State of Developer Ecosystem 2020](https://www.jetbrains.com/lp/devecosystem-2020/java/) - [JVM Ecosystem Report 2020](https://snyk.io/wp-content/uploads/jvm_2020.pdf) From deb19274caf36b67e718cf3a3195daf01a488be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Mon, 28 Jun 2021 19:32:51 +0300 Subject: [PATCH 18/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 7ae19cae..5995d080 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -22,7 +22,7 @@ - [Популярность Java-технологий в 2019 году](https://topjava.ru/blog/sostoyanie-java-v-2019-godu) - [Java Technology Report 2021](https://www.jrebel.com/blog/2021-java-technology-report) - [The State of Developer Ecosystem 2020](https://www.jetbrains.com/lp/devecosystem-2020/java/) -- [JVM Ecosystem Report 2020](https://snyk.io/wp-content/uploads/jvm_2020.pdf) +- [JVM Ecosystem Report 2021](https://snyk.io/jvm-ecosystem-report-2021/) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/open?id=0B_4NpoQW1xfpTU5SSElhUjlGNnc) From 5a55bf6cd910d58008594c2110993abf87995348 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Mon, 27 Sep 2021 00:08:55 +0300 Subject: [PATCH 19/29] Update lesson1.md --- lesson/lesson1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 5995d080..8f421ce7 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -10,7 +10,7 @@ - Установите [IntelliJ IDEA Community](http://www.jetbrains.com/idea/download/index.html) (Ultimate-версия понадобится позже, при работе с базой данных и web) > Для версии Ultimate дается 30 дней бесплатного использования. Но в качестве подарка, каждому участнику курса, мы выдаем единоразово купон на 6 месяцев -## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/open?id=0B_4NpoQW1xfpVjZUTEpvVUN1TTA) +## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/file/d/0B_4NpoQW1xfpVjZUTEpvVUN1TTA/view?usp=sharing&resourcekey=0-hnn1HIBU3WIuDMVuQAxA8w) - [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) - [Подборка книг для руководителей в сфере IT](https://habr.com/ru/company/skyeng/blog/465215/) - [Размеры проектов в количестве строк кода](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) @@ -18,13 +18,13 @@ - [Методологии разработки ПО](https://dou.ua/forums/topic/14015/) - [Ещё раз про семь основных методологий разработки](https://habrahabr.ru/company/edison/blog/269789/) -## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 2. [Обзор инструментов и технологий](https://drive.google.com/file/d/0B_4NpoQW1xfpTXJYU2xZbjN2d2M) +## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 2. [Обзор инструментов и технологий](https://drive.google.com/file/d/0B_4NpoQW1xfpTXJYU2xZbjN2d2M/view?usp=sharing&resourcekey=0-Uw_lRGW12YNjwY7phXzVdg) - [Популярность Java-технологий в 2019 году](https://topjava.ru/blog/sostoyanie-java-v-2019-godu) - [Java Technology Report 2021](https://www.jrebel.com/blog/2021-java-technology-report) - [The State of Developer Ecosystem 2020](https://www.jetbrains.com/lp/devecosystem-2020/java/) - [JVM Ecosystem Report 2021](https://snyk.io/jvm-ecosystem-report-2021/) -## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/open?id=0B_4NpoQW1xfpTU5SSElhUjlGNnc) +## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/file/d/0B_4NpoQW1xfpTU5SSElhUjlGNnc/view?usp=sharing&resourcekey=0-DOyRoGhREx2kvKwAKTOlYg) ![jvm](https://cloud.githubusercontent.com/assets/18701152/15219296/e6c67e86-186b-11e6-986f-651a87deec6c.png) @@ -36,7 +36,7 @@ - [Programming languages TIOBE Index](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) - [Java Microbenchmark JMH](http://openjdk.java.net/projects/code-tools/jmh/) (используем на курсе [MasterJava](https://github.com/JavaWebinar/masterjava#Занятие-2)) -## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s) +## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s/edit?resourcekey=0-6scb0PBj2A3Oqf6rsU2egQ) ![image](https://cloud.githubusercontent.com/assets/18701152/15219746/9295a2fe-186d-11e6-876b-c61cc9be71e4.png) From f2df92cd928222c64c862c625327e13de546c588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Sun, 10 Apr 2022 16:35:05 +0300 Subject: [PATCH 20/29] add a link to the new design --- lesson/lesson1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 8f421ce7..0a85be6c 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -1,5 +1,7 @@ # Первое занятие +## [Демо разрабатываемого приложения](https://basejava.herokuapp.com/resume?theme=light) + ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) [Видеообзор курса Basejava](https://www.youtube.com/watch?v=0ydTRfKS9yY) ### Подготовка рабочего окружения From 58b491c0a8ea60fdfa25c69683f46ea967c490fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Fri, 19 Aug 2022 20:16:47 +0300 Subject: [PATCH 21/29] Update lesson1.md --- lesson/lesson1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 0a85be6c..ce6414a9 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -37,6 +37,7 @@ - [Что такое Java? История создания](http://www.intuit.ru/studies/courses/16/16/lecture/27105) - [Programming languages TIOBE Index](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) - [Java Microbenchmark JMH](http://openjdk.java.net/projects/code-tools/jmh/) (используем на курсе [MasterJava](https://github.com/JavaWebinar/masterjava#Занятие-2)) +- [Руководство по массивам в Java](https://topjava.ru/blog/rukovodstvo-po-massivam-v-java-ch1) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s/edit?resourcekey=0-6scb0PBj2A3Oqf6rsU2egQ) From 12835d1271aef6e185ae0b5c4bba2bf989a0c226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Wed, 2 Nov 2022 19:46:00 +0300 Subject: [PATCH 22/29] Update lesson1.md --- lesson/lesson1.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index ce6414a9..73fc4529 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -62,15 +62,9 @@ - `git push -u origin master` — [устанавливаем связь](https://qna.habr.com/q/118865) между локальной и удаленной веткой master ## Домашнее задание HW1 -- Создайте в IntelliJ IDEA новый проект, выбрав каталог `basejava`, который вы скачали ранее к себе на компьютер: +- Откройте в IntelliJ IDEA ваш проект, выбрав каталог `basejava`, который вы скачали ранее к себе на компьютер: -![newproject](https://user-images.githubusercontent.com/29703461/88058015-95008580-cb6b-11ea-9b7c-65843b859988.png) - -![next](https://user-images.githubusercontent.com/29703461/88057628-055ad700-cb6b-11ea-9c59-72bb538e2541.png) - -![next1](https://user-images.githubusercontent.com/29703461/88058925-d2b1de00-cb6c-11ea-9d0b-83c771899457.png) - -![finish](https://user-images.githubusercontent.com/29703461/88059306-579cf780-cb6d-11ea-8094-bbf87474a127.png) +![Screenshot_5](https://user-images.githubusercontent.com/29703461/199550057-fce7cf3c-7040-422f-b490-7b85b47ae952.png) - Реализуйте методы `save, get, delete, clear, getAll, size` в классе `ArrayStorage`, организовав хранение резюме в массиве - Храните все резюме в начале `storage` (без пустот в виде `null`), чтобы не перебирать каждый раз все 10_000 элементов From 1e5e420d260dea22ce859f73a67f76793fb47d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Thu, 5 Jan 2023 20:57:47 +0300 Subject: [PATCH 23/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 73fc4529..b428a169 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -1,6 +1,6 @@ # Первое занятие -## [Демо разрабатываемого приложения](https://basejava.herokuapp.com/resume?theme=light) +## [Демо разрабатываемого приложения](http://javaops-demo.ru/basejava/resume?theme=light) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) [Видеообзор курса Basejava](https://www.youtube.com/watch?v=0ydTRfKS9yY) From 109aa6febbeb42c8a07b9a9a6fc727c44e317344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Wed, 16 Aug 2023 09:45:21 +0300 Subject: [PATCH 24/29] Update lesson1.md --- lesson/lesson1.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index b428a169..6c2f6331 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -5,7 +5,7 @@ ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) [Видеообзор курса Basejava](https://www.youtube.com/watch?v=0ydTRfKS9yY) ### Подготовка рабочего окружения -- Установите [JDK8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (выбрать Accept License Agreement) +- Установите [JDK8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (или более свежую версию) - Установите систему управления версиями [Git](http://git-scm.com/downloads) - Создайте аккаунт на [GitHub](https://github.com/) - Для удобной навигации по файлам на GitHub установите расширение для браузера [Octotree](https://habrahabr.ru/post/223527/) @@ -17,7 +17,8 @@ - [Подборка книг для руководителей в сфере IT](https://habr.com/ru/company/skyeng/blog/465215/) - [Размеры проектов в количестве строк кода](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) - [Соглашения по оформлению кода](https://topjava.ru/blog/google-java-style-guide) -- [Методологии разработки ПО](https://dou.ua/forums/topic/14015/) +- Методологии разработки ПО: [Agile, Scrum](https://youtu.be/cDvZaXzQezs), [Kanban](https://youtu.be/1_Zti9v5ugA) +- [Методологии разработки и их влияние на качество](https://youtu.be/y4B2Hv3HgpE) - [Ещё раз про семь основных методологий разработки](https://habrahabr.ru/company/edison/blog/269789/) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 2. [Обзор инструментов и технологий](https://drive.google.com/file/d/0B_4NpoQW1xfpTXJYU2xZbjN2d2M/view?usp=sharing&resourcekey=0-Uw_lRGW12YNjwY7phXzVdg) @@ -108,4 +109,4 @@ r1, r2, r3,..., rn, null, null,..., null - Учитесь исследовать проблему. Внимательное чтение логов и умение дебажить — основные навыки разработчика. В логах необходимо читать верхнюю часть самого нижнего иксепшена. Именно там находится причина возникшей ошибки - Грамотно распределяйте время для каждой проблемы. Не впадайте в крайности: сразу бросаться за помощью или биться над ней часами. Подходите к ее решению разумно - Получайте в процессе решения обратную связь, что бы убедиться в правильности выбранного направления - - [Советы новичкам](http://blog.csssr.ru/2016/09/19/how-to-be-a-beginner-developer) + - [Советы новичкам](https://blog.csssr.com/ru/article/how-to-be-a-beginner-developer/) From 5b4499e48e8dd1e498a3c8562139121ebd860840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Fri, 31 Jan 2025 16:12:06 +0300 Subject: [PATCH 25/29] Update lesson1.md --- lesson/lesson1.md | 1 - 1 file changed, 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 6c2f6331..8d632bd0 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -10,7 +10,6 @@ - Создайте аккаунт на [GitHub](https://github.com/) - Для удобной навигации по файлам на GitHub установите расширение для браузера [Octotree](https://habrahabr.ru/post/223527/) - Установите [IntelliJ IDEA Community](http://www.jetbrains.com/idea/download/index.html) (Ultimate-версия понадобится позже, при работе с базой данных и web) -> Для версии Ultimate дается 30 дней бесплатного использования. Но в качестве подарка, каждому участнику курса, мы выдаем единоразово купон на 6 месяцев ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/file/d/0B_4NpoQW1xfpVjZUTEpvVUN1TTA/view?usp=sharing&resourcekey=0-hnn1HIBU3WIuDMVuQAxA8w) - [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) From 4905613d675bdc0d1f93df6be6886ecc59f36c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Sun, 21 Dec 2025 09:24:12 +0300 Subject: [PATCH 26/29] Update lesson1.md --- lesson/lesson1.md | 55 ++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 8d632bd0..fc741dfe 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -5,50 +5,53 @@ ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) [Видеообзор курса Basejava](https://www.youtube.com/watch?v=0ydTRfKS9yY) ### Подготовка рабочего окружения -- Установите [JDK8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) (или более свежую версию) +- Установите последнюю версию [JDK](https://www.oracle.com/java/technologies/downloads/) - Установите систему управления версиями [Git](http://git-scm.com/downloads) - Создайте аккаунт на [GitHub](https://github.com/) -- Для удобной навигации по файлам на GitHub установите расширение для браузера [Octotree](https://habrahabr.ru/post/223527/) -- Установите [IntelliJ IDEA Community](http://www.jetbrains.com/idea/download/index.html) (Ultimate-версия понадобится позже, при работе с базой данных и web) +- Установите [боковую панель](https://topjava.ru/blog/vvedeniye-v-git-github-ustanovka-i-nastroyka#8) для удобной навигации по файлам на GitHub +- Установите [IntelliJ IDEA Community](https://www.jetbrains.com/idea/download/) (Ultimate-версия понадобится позже, при работе с базой данных и web) +- Установите плагин для [Checkstyle](https://topjava.ru/blog/nastroyka-checkstyle-v-intellij-idea) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/file/d/0B_4NpoQW1xfpVjZUTEpvVUN1TTA/view?usp=sharing&resourcekey=0-hnn1HIBU3WIuDMVuQAxA8w) -- [Мифический человеко-месяц](https://ru.wikipedia.org/wiki/Мифический_человеко-месяц) -- [Подборка книг для руководителей в сфере IT](https://habr.com/ru/company/skyeng/blog/465215/) +- [Мифический человеко-месяц](https://habr.com/ru/companies/raiffeisenbank/articles/533216/) +- [Подборка книг для руководителей в сфере IT](https://habr.com/ru/companies/skyeng/articles/465215/) - [Размеры проектов в количестве строк кода](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) - [Соглашения по оформлению кода](https://topjava.ru/blog/google-java-style-guide) - Методологии разработки ПО: [Agile, Scrum](https://youtu.be/cDvZaXzQezs), [Kanban](https://youtu.be/1_Zti9v5ugA) - [Методологии разработки и их влияние на качество](https://youtu.be/y4B2Hv3HgpE) -- [Ещё раз про семь основных методологий разработки](https://habrahabr.ru/company/edison/blog/269789/) +- [Ещё раз про семь основных методологий разработки](https://habr.com/ru/companies/edison/articles/269789/) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 2. [Обзор инструментов и технологий](https://drive.google.com/file/d/0B_4NpoQW1xfpTXJYU2xZbjN2d2M/view?usp=sharing&resourcekey=0-Uw_lRGW12YNjwY7phXzVdg) -- [Популярность Java-технологий в 2019 году](https://topjava.ru/blog/sostoyanie-java-v-2019-godu) -- [Java Technology Report 2021](https://www.jrebel.com/blog/2021-java-technology-report) -- [The State of Developer Ecosystem 2020](https://www.jetbrains.com/lp/devecosystem-2020/java/) -- [JVM Ecosystem Report 2021](https://snyk.io/jvm-ecosystem-report-2021/) +- [Java в 2025 году](https://habr.com/ru/companies/spring_aio/articles/933180/) +- [State of Developer Ecosystem Report 2025](https://devecosystem-2025.jetbrains.com/ru) +- [Java Trends Report 2025](https://www.infoq.com/articles/java-trends-report-2025/) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/file/d/0B_4NpoQW1xfpTU5SSElhUjlGNnc/view?usp=sharing&resourcekey=0-DOyRoGhREx2kvKwAKTOlYg) ![jvm](https://cloud.githubusercontent.com/assets/18701152/15219296/e6c67e86-186b-11e6-986f-651a87deec6c.png) -- [Java](http://ru.wikipedia.org/wiki/Java), [JVM](http://ru.wikipedia.org/wiki/Виртуальная_машина_Java), [JIT-компиляция](http://ru.wikipedia.org/wiki/JIT) +- [Java](http://ru.wikipedia.org/wiki/Java), [JIT-компиляция](http://ru.wikipedia.org/wiki/JIT) - Java [ME](http://ru.wikipedia.org/wiki/Java_Platform,_Micro_Edition), [SE](https://ru.wikipedia.org/wiki/Java_Platform,_Standard_Edition), [EE](http://ru.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition) - [Что такое JDK? Введение в средства разработки Java](https://topjava.ru/blog/what-is-the-jdk) +- [Что такое JVM? Знакомство с виртуальной машиной Java](https://topjava.ru/blog/what-is-the-jvm) - [Что такое JRE? Введение в среду выполнения Java](https://topjava.ru/blog/what-is-the-jre) - [Что такое Java? История создания](http://www.intuit.ru/studies/courses/16/16/lecture/27105) -- [Programming languages TIOBE Index](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) -- [Java Microbenchmark JMH](http://openjdk.java.net/projects/code-tools/jmh/) (используем на курсе [MasterJava](https://github.com/JavaWebinar/masterjava#Занятие-2)) +- [Programming languages TIOBE Index](https://www.tiobe.com/tiobe-index/) - [Руководство по массивам в Java](https://topjava.ru/blog/rukovodstvo-po-massivam-v-java-ch1) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s/edit?resourcekey=0-6scb0PBj2A3Oqf6rsU2egQ) ![image](https://cloud.githubusercontent.com/assets/18701152/15219746/9295a2fe-186d-11e6-876b-c61cc9be71e4.png) -- [Система управления версиями (VCS)](https://ru.wikipedia.org/wiki/Система_управления_версиями) -- [Введение в Git: от установки до основных команд](https://tproger.ru/translations/beginner-git-cheatsheet/) -- [Сравнение разных VCS](https://biz30.timedoctor.com/ru/cистема-контроля-версий/) +- [Введение в Git: установка и настройка](https://topjava.ru/blog/vvedeniye-v-git-github-ustanovka-i-nastroyka) +- [Введение в Git: базовые команды](https://topjava.ru/blog/vvedeniye-v-git-github-bazovyye-komandy) +- [Введение в Git: ошибки использования](https://topjava.ru/blog/vvedeniye-v-git-oshibki-ispolzovaniya-ch-9) +- [Git: от установки до основных команд](https://tproger.ru/translations/beginner-git-cheatsheet/) +- [Сравнение разных VCS](https://dzen.ru/a/Z0Z0Ry7VD0gfPV5X) - [Видео-уроки по Git](https://www.youtube.com/playlist?list=PLDyvV36pndZHkDRik6kKF6gSb0N0W995h) - Интерактивные Git-обучалки: [1](https://githowto.com/ru), [2](http://learngitbranching.js.org) - [Официальная книга по Git](https://git-scm.com/book/ru/v2) +- [GitHub for beginners](https://github.blog/tag/github-for-beginners/) ### Настройка проекта - Создайте на GitHub репозиторий с названием `basejava` @@ -64,29 +67,31 @@ ## Домашнее задание HW1 - Откройте в IntelliJ IDEA ваш проект, выбрав каталог `basejava`, который вы скачали ранее к себе на компьютер: -![Screenshot_5](https://user-images.githubusercontent.com/29703461/199550057-fce7cf3c-7040-422f-b490-7b85b47ae952.png) +![Screenshot_5](https://github.com/user-attachments/assets/554c3119-85cc-41be-9ef0-087f360577f4) - Реализуйте методы `save, get, delete, clear, getAll, size` в классе `ArrayStorage`, организовав хранение резюме в массиве -- Храните все резюме в начале `storage` (без пустот в виде `null`), чтобы не перебирать каждый раз все 10_000 элементов -- При реализации метода `delete` учитывайте, что после удаления резюме между оставшимися резюме не должно быть пустых ячеек, заполненных null +- Храните все резюме в начале `storage` (без пустот в виде null), чтобы не перебирать каждый раз 10_000 элементов +- При реализации метода `delete` учитывайте: + - после удаления резюме между оставшимися резюме не должно быть пустых (null) ячеек + - резюме должны размещаться в ячейках под индексами `< size`. В противном случае обнуляйте их ``` -Схема хранения резюме в массиве storage (в элементах от 0 до size-1 отсутствуют null): +Схема хранения резюме в массиве storage (в элементах от 0 до size - 1 отсутствуют null): r1, r2, r3,..., rn, null, null,..., null <----- size -----> -<------- storage.length (10000) -------> +<------- storage.length (10_000) ------> ``` - Проверьте вашу реализацию с помощью классов `MainArray.main()` и `MainTestArrayStorage.main()` - Изучите дополнительные материалы по IntelliJ IDEA: - [Idea Wiki](https://github.com/JavaOPs/topjava/wiki/IDEA) - - [Отладка Java кода в IDEA. Основные возможности отладчика](https://youtu.be/Z1BQsf0A4xY) + - Отладка Java кода в IDEA: [1](https://youtu.be/Z1BQsf0A4xY?si=E8RtUNE1Pm3xP_w9), [2](https://youtu.be/V5iQ1FyRtBo), [3](https://blog.jetbrains.com/idea/2025/04/debugging-java-code-in-intellij-idea/) - [Эффективная работа с кодом в IntelliJ IDEA](https://www.youtube.com/watch?v=tpv5n2jWHlw) - [Эффективная работа в IDEA](https://www.youtube.com/watch?v=_rj7dx6c5R8) ### Вопросы по HW1 - > Не могу запустить программу, да и рядом с классами появился какой-то значок + > Не могу запустить программу, да и иконки рядом с классами изменились - ![badsrc](https://user-images.githubusercontent.com/29703461/38277015-9cd9155e-379f-11e8-9cd4-a9182a005e9a.png) + ![badsrc](https://github.com/user-attachments/assets/00db6e0a-59df-46d4-9ddd-abba0e52a7c9) - Проблема в том, что IDEA неправильно "воспринимает" папку `src`. Для ее решения необходимо нажать `ПКМ на папке src -> выбрать Mark Directory as -> Sources Root` ### Замечания по выполнению HW1 @@ -99,7 +104,7 @@ r1, r2, r3,..., rn, null, null,..., null 1. При реализации методов не используйте коллекции 1. Не меняйте сигнатуры методов в `ArrayStorage` 1. Не добавляйте в `Resume` новые поля -1. Resume r — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях +1. `Resume r` — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 5. [Вебинар "Быть программистом: от детства к зрелости"](https://www.youtube.com/watch?v=D5Hej0TyLaU) - [Слайды вебинара](https://docs.google.com/presentation/d/1YwtCCZsaGMdl-V15kTDHiJxiS52IAl-qqheNPpiNr54/) From b085805ff71fbcc2093df49c282d895bc487768f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Sun, 21 Dec 2025 09:36:45 +0300 Subject: [PATCH 27/29] Update lesson1.md --- lesson/lesson1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index fc741dfe..2dc70d9c 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -25,6 +25,7 @@ - [Java в 2025 году](https://habr.com/ru/companies/spring_aio/articles/933180/) - [State of Developer Ecosystem Report 2025](https://devecosystem-2025.jetbrains.com/ru) - [Java Trends Report 2025](https://www.infoq.com/articles/java-trends-report-2025/) +- Рейтинги языков программирования: [TIOBE](https://www.tiobe.com/tiobe-index/), [PYPL](https://pypl.github.io/PYPL.html), [IEEE](https://spectrum.ieee.org/tag/top-programming-languages) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/file/d/0B_4NpoQW1xfpTU5SSElhUjlGNnc/view?usp=sharing&resourcekey=0-DOyRoGhREx2kvKwAKTOlYg) @@ -36,7 +37,6 @@ - [Что такое JVM? Знакомство с виртуальной машиной Java](https://topjava.ru/blog/what-is-the-jvm) - [Что такое JRE? Введение в среду выполнения Java](https://topjava.ru/blog/what-is-the-jre) - [Что такое Java? История создания](http://www.intuit.ru/studies/courses/16/16/lecture/27105) -- [Programming languages TIOBE Index](https://www.tiobe.com/tiobe-index/) - [Руководство по массивам в Java](https://topjava.ru/blog/rukovodstvo-po-massivam-v-java-ch1) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s/edit?resourcekey=0-6scb0PBj2A3Oqf6rsU2egQ) From c2b7f1098b25d8c9cdfca630720d4ccad173a95a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Sun, 21 Dec 2025 09:41:32 +0300 Subject: [PATCH 28/29] Update lesson1.md --- lesson/lesson1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 2dc70d9c..233f0b48 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -25,6 +25,7 @@ - [Java в 2025 году](https://habr.com/ru/companies/spring_aio/articles/933180/) - [State of Developer Ecosystem Report 2025](https://devecosystem-2025.jetbrains.com/ru) - [Java Trends Report 2025](https://www.infoq.com/articles/java-trends-report-2025/) +- [The 2025 Developer Survey](https://survey.stackoverflow.co/2025) - Рейтинги языков программирования: [TIOBE](https://www.tiobe.com/tiobe-index/), [PYPL](https://pypl.github.io/PYPL.html), [IEEE](https://spectrum.ieee.org/tag/top-programming-languages) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/file/d/0B_4NpoQW1xfpTU5SSElhUjlGNnc/view?usp=sharing&resourcekey=0-DOyRoGhREx2kvKwAKTOlYg) From efc27d6a55f9dbe48977673059d2186e814248fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D0=B8=D0=BC=D0=B0=D0=B5=D0=B2=20=D0=9C=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D0=BC?= Date: Sun, 21 Dec 2025 09:50:13 +0300 Subject: [PATCH 29/29] Update lesson1.md --- lesson/lesson1.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 233f0b48..aa5a34c0 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -42,8 +42,6 @@ ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s/edit?resourcekey=0-6scb0PBj2A3Oqf6rsU2egQ) -![image](https://cloud.githubusercontent.com/assets/18701152/15219746/9295a2fe-186d-11e6-876b-c61cc9be71e4.png) - - [Введение в Git: установка и настройка](https://topjava.ru/blog/vvedeniye-v-git-github-ustanovka-i-nastroyka) - [Введение в Git: базовые команды](https://topjava.ru/blog/vvedeniye-v-git-github-bazovyye-komandy) - [Введение в Git: ошибки использования](https://topjava.ru/blog/vvedeniye-v-git-oshibki-ispolzovaniya-ch-9)