<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5_Java</id>
	<title>Промышленное программирование на языке Java - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5_Java"/>
	<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5_Java&amp;action=history"/>
	<updated>2026-06-06T12:34:58Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wikicshse.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5_Java&amp;diff=1941&amp;oldid=prev</id>
		<title>imported&gt;Lotrek: Migrated current public revision from wiki.cs.hse.ru</title>
		<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5_Java&amp;diff=1941&amp;oldid=prev"/>
		<updated>2020-06-02T16:24:39Z</updated>

		<summary type="html">&lt;p&gt;Migrated current public revision from wiki.cs.hse.ru&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== О курсе ==&lt;br /&gt;
&lt;br /&gt;
Курс читается для студентов 3-го и 4-го курса [https://cs.hse.ru/ami ПМИ ФКН ВШЭ] в 3-4 модулях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Лектор:&amp;#039;&amp;#039;&amp;#039; Лепешкин Игорь&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Семинаристы:&amp;#039;&amp;#039;&amp;#039; Косолапов Кирилл, Буланов Артем&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Расписание:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Лекции по вторникам, 09:00 - 10:20&lt;br /&gt;
&lt;br /&gt;
Семинары 3-ий курс: вторники 10:30 - 11:50&lt;br /&gt;
&lt;br /&gt;
Семинары 4-ый курс понедельники 10:30 - 11:50&lt;br /&gt;
&lt;br /&gt;
== Лекции ==&lt;br /&gt;
Лекции лежат на [https://yadi.sk/d/pnm_X0KmiFfsVA Яндекс.Диске]&lt;br /&gt;
&lt;br /&gt;
Список тем:&lt;br /&gt;
* Управляющие конструкции, типы данных, преобразование типов&lt;br /&gt;
* Объекты классы и интерфейсы, утилитные классы, пакеты, фабричный метод&lt;br /&gt;
* Строки&lt;br /&gt;
* Исключения&lt;br /&gt;
* Дженерики&lt;br /&gt;
* Коллекции&lt;br /&gt;
* Varargs, try-finally&lt;br /&gt;
* Работа с датой и временем&lt;br /&gt;
* Элементы функционального программирования&lt;br /&gt;
* Стримы&lt;br /&gt;
* Потоковый ввод и вывод&lt;br /&gt;
* Многопоточность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Аннотации. Рефлекшн. Байткод&lt;br /&gt;
* Java и базы данных. JDBC&lt;br /&gt;
* JPA, Hibernate, JOOQ&lt;br /&gt;
* Java и Web&lt;br /&gt;
* IOC, DI, Spring&lt;br /&gt;
* Паттерны проектирования&lt;br /&gt;
* GC, CI/CD&lt;br /&gt;
&lt;br /&gt;
== Домашнее задание ==&lt;br /&gt;
Планируется 2 ДЗ в 3ем модуле и 2 ДЗ в 4ом.&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/spreadsheets/d/1dLmscZdQaAluX77yU1IRt744yHbqH7e301JZxfNxEHw/edit#gid=596552630 Статусы проверки]&lt;br /&gt;
=== Задание 1: Disk Analyzer ===&lt;br /&gt;
* Консольное приложение&lt;br /&gt;
* Принимает на вход папку&lt;br /&gt;
* Выводит непосредственное (только на первом уровне вложенности в переданную папку) содержимое папки в консоль в виде таблицы:&lt;br /&gt;
# Номер&lt;br /&gt;
# Название папки&lt;br /&gt;
# Размер папки с содержимым&lt;br /&gt;
# Процент от общего размера&lt;br /&gt;
# Количество вложенных элементов&lt;br /&gt;
* Отдельно рисует таблицу — топ самых больших файлов с полным путем&lt;br /&gt;
* Выводит время работы&lt;br /&gt;
* Симлинки не нужно учитывать и не надо выводить&lt;br /&gt;
&lt;br /&gt;
Срок сдачи: 3.03.2020&lt;br /&gt;
&lt;br /&gt;
===Домашнее задание 2: Кеш===&lt;br /&gt;
* В итоге мы должны получить интерфейс и его имплементацию, которые уже затем использовать в любом приложении&lt;br /&gt;
* Кеш из long в String (из-за десериализации, но можно писать и обобщенно)&lt;br /&gt;
* Поддерживает минимум две Eviction Policy (LRU + LFU)&lt;br /&gt;
* Может хранить данные на диске&lt;br /&gt;
* При создании указывается размер кеша в памяти, предельный размер на диске, папка, в которой кеш хранится и Eviction Policy: public CacheImpl(long memorySize, long diskSize, String path, EvictionPolicy policy)&lt;br /&gt;
* Нельзя создавать по файлу на каждую запись&lt;br /&gt;
* memorySize &amp;lt; diskSize&lt;br /&gt;
* Если данные есть в памяти, читаем из памяти, если нет, то с диска&lt;br /&gt;
* Скорость из памяти O(L), где L - длина строки, скорость чтения с диска тоже, за исключением моментов компактизации диска&lt;br /&gt;
* Компактизация диска не должна происходить на каждую запись, способ компактизации не принципиален.&lt;br /&gt;
* При работе с диском все ключи можно держать в памяти (но не все значения)&lt;br /&gt;
* Кеш not thread-safe.&lt;br /&gt;
* Можно восстановить с диска&lt;br /&gt;
* В интерфейсе только get и put (возвращает старое значение)&lt;br /&gt;
* Подсчет размера кеша в памяти можно делать приближенно (но учитывать количество записей + длину значений)&lt;br /&gt;
&lt;br /&gt;
Срок сдачи: 24.03.2020&lt;br /&gt;
&lt;br /&gt;
===Домашнее задание 3: Телеграм бот для работы с Яндекс.Трекером===&lt;br /&gt;
Функциональные требования:&lt;br /&gt;
* любой пользователь любой организации в трекере может авторизоваться через бота&lt;br /&gt;
* пользователь может создать задачу в любой очереди, поля для заполнения: название, описание, назначить на меня или нет (добавить себя в поле &amp;quot;исполнитель&amp;quot;)&lt;br /&gt;
* пользователь может посмотреть список задач, назначенные на него, отсортированные по убыванию по дате обновления с паджинацией&lt;br /&gt;
* пользователь может посмотреть задачу по ключу и из списка найденных, при просмотре доступны: описание, название, автор, исполнитель, наблюдатели + комментарии&lt;br /&gt;
&lt;br /&gt;
Нефункциональные требования:&lt;br /&gt;
* клиент трекера, клиент Телеграма, работа с базой, должны быть изолированы от остального кода (отдельные классы, библиотеки или модули)&lt;br /&gt;
* тесты&lt;br /&gt;
* использование OAuth&lt;br /&gt;
* использование БД для хранения необходимых данных&lt;br /&gt;
&lt;br /&gt;
Срок сдачи: 26.05.2020&lt;br /&gt;
&lt;br /&gt;
===Домашнее задание 4: ДЗ 3 + комментирование и подписки===&lt;br /&gt;
* Пользователь может прокомментировать задачу&lt;br /&gt;
* Можно подписаться на задачу и получать в боте уведомления по изменениям в ней (используя механизм триггеров и вебхуков)&lt;br /&gt;
&lt;br /&gt;
Срок сдачи: до экзамена&lt;br /&gt;
&lt;br /&gt;
=== Правила сдачи ДЗ: ===&lt;br /&gt;
&lt;br /&gt;
* Для запуска сборки, проверок стиля и юнит-тестов используем gradle. Если оно не собирается через грэйдл, оно не собирается.&lt;br /&gt;
* Сдачу задач ведем в отдельных приватных клонах репозитория на github.&lt;br /&gt;
* Все задачи располагаем в одном репозитории. В корне репозитория находится необходимая обвязка для сборки и запуска, и, по отдельной директории-модулю на каждую задачу (task-XX-taskname).&lt;br /&gt;
* Код реализации задач располагаем в пакете ru.hse.cs.java2020.&amp;lt;github-login&amp;gt;.task-XX&lt;br /&gt;
* Задание считается принятым, если вы отправили PR, получили ок у преподавателя по PR и затем защитили очно у преподавателя задание&lt;br /&gt;
* Преподаватель может пропустить часть очной защиты по своему усмотрению&lt;br /&gt;
* до дедлайна надо успеть не только отправить PR, но и пройти защиту ДЗ&lt;br /&gt;
&lt;br /&gt;
За что снимаются баллы:&lt;br /&gt;
* опоздание при сдаче задания&lt;br /&gt;
* сдача задания, в котором не проходят checkstyle/tests&lt;br /&gt;
* плохая структура кода (слишком большие классы, неочевидные зависимости, отсутствие валидаций входных параметров, непонятный нейминг и т.п.)&lt;br /&gt;
* отсутствие тестов на базовые сценарии, низкое покрытие тестов (для заданий 4го модуля).&lt;br /&gt;
* большое количество багов в задании&lt;br /&gt;
&lt;br /&gt;
Преподаватель может требовать выполнения тех или иных дополнительных условий, не обозначенных в условии задачи.&lt;br /&gt;
&lt;br /&gt;
== Правила выставления оценок ==&lt;br /&gt;
&lt;br /&gt;
В курсе предусмотрено две формы контроля знания:&lt;br /&gt;
* Домашние работы&lt;br /&gt;
* Устный экзамен&lt;br /&gt;
&lt;br /&gt;
Итоговая оценка вычисляется по формуле:&lt;br /&gt;
&lt;br /&gt;
Итог 3го курса = Округление(0.15 * ДЗ1 + 0.15 * ДЗ2 + 0.15 * ДЗ3 +0.15 * ДЗ4 + 0.4 * Э)&lt;br /&gt;
&lt;br /&gt;
Итог 4го курса = Округление(0.3 * ДЗ1 + 0.3 * ДЗ2 + 0.4 * Э)&lt;br /&gt;
&lt;br /&gt;
ДЗ1 - ДЗ4  — оценки за домашние задания&lt;br /&gt;
&lt;br /&gt;
Э — оценка за экзамен&lt;br /&gt;
&lt;br /&gt;
Округление арифметическое.&lt;br /&gt;
&lt;br /&gt;
== Необходимый инвентарь ==&lt;br /&gt;
Ноутбук с установленными:&lt;br /&gt;
[https://www.oracle.com/technetwork/java/javase/downloads/5066655 JDK 11] &lt;br /&gt;
[https://www.jetbrains.com/idea/ IntelliJ IDEA]&lt;br /&gt;
[https://git-scm.com/download Git]&lt;br /&gt;
&lt;br /&gt;
== Полезные ссылки ==&lt;br /&gt;
https://compscicenter.ru/courses/java/nsk/2017-autumn/&lt;br /&gt;
&lt;br /&gt;
https://github.com/c-tash/HSE-CS-Java2020-Tasks&lt;/div&gt;</summary>
		<author><name>imported&gt;Lotrek</name></author>
	</entry>
</feed>