Java для начинающих habrahabr – Java – General-purpose computer-programming language that is concurrent, class-based, object-oriented, and specifically designed to have as few implementation dependencies as possible / Habr

Содержание

Задачи для начинающих Java программистов / Habr

В продолжение моего поста «Начинающим Java программистам» публикую очередную свою шпаргалку, а именно список задач, которые я обычно даю новичкам. Опытным разработчикам они покажутся тривиальными, а только начинающим изучать Java, причём самостоятельно, надеюсь будут в самый раз. Так же если Вы используете какие-то ещё задачи для обучения, то поделитесь ими, пожалуйста.:) Так как мне, иногда, как-то не по себе в …-цатый раз рассказывать стажёрам одну и ту же задачу — пусть даже они её слышат впервые:)

Задачи выстроены в порядке увеличения сложности. Каждая задача так же имеет несколько степеней «развития», каждая из которых нацелена на привлечение новых пакетов и т.д.
Задача: Аналог grep

Необходимо реализовать консольную программу, которая бы фильтровала поток текстовой информации подаваемой на вход и на выходе показывала лишь те строчки, которые содержат слово передаваемое программе на вход в качестве аргумента.

Варианты усложнения:

  1. Программа не должна учитывать регистр
  2. В аргументах может быть передано не одно слово, а несколько
  3. В качестве аргумента может быть задано не конкретное слово, а регулярное выражение
Задача: Аналог Sort

Написать консольную программу, которая бы сортировала текст поданный ей на стандартный вход по алфавиту.

Варианты усложнения:

  1. Программа должна игнорировать регистр при сортировке
  2. Программа должна сортировать не по алфавиту, а по количеству символов в строке
  3. Программа в качестве аргумента может получать порядковый номер слова в строке, по которому надо сортировать строки
Задача: чат

Задача состоит из этапов, в конце которых должен получиться стандартный консольный чат.
  1. Реализовать консольную программу, которая бы открывала серверный сокет на порту 1234. При подключении клиента программа должна выводить все то, что передал клиент. Удостовериться в работоспособности можно попробовав подключиться с помощью системной программы telnet. В дальнейшем будем эту программу называть
    серверной частью
  2. Усложнить программу и сделать так, чтобы можно было подключиться одновременно нескольким клиентам посредством telnet
  3. Реализовать другую консольную программу, которая по сути была бы аналогом telnet — т.е. подключалась к заданному IP на порт 1234 и отправляла бы на сервер строчку введённую пользователем по нажатию enter. В дальнейшем будем эту программу называть клиентской частью или просто клиентом
  4. Усложнить серверную часть программы таким образом, чтобы пришедшее сообщение от одного пользователя отправлялось сразу всем пользователям, которые подключены в данный момент к серверу
  5. Усложнить серверную часть программы так, чтобы при подключении нового пользователя ему показывались последние 10 сообщений
  6. При запуске клиентская часть должна спрашивать у пользователя его имя. В дальнейшем при отсылке сообщений на сервер должен использоваться следующий шаблон: «Имя пользователя: текст»
  7. До этого момента сообщения между сервером и клиентом — обычный текст. Это с трудом позволяет передавать так же сопроводительную информацию например: имя пользователя, дату приёма сообщения сервером и т.д. В этом задании необходимо перевести обмен информации на использование Serialization. Т.е. обмен информацией между клиентом и сервером должно производится посредством сериализованного класса Message, который в свою очередь содержит помимо текста дополнительную атрибутику: дата создания сообщения, имя пользователя, IP отправителя, режим в котором находится отправитель (как в аське: сплю, ем, работаю:) )
  8. Дописать серверную часть таким образом, чтобы она следила за количеством подключённых пользователей и не позволяла подключаться большему количеству пользователей нежели 10
  9. На данный момент многие параметры сервера прописаны в коде самой программы, например: порт на котором открывать сервер, количество сообщений выдаваемых при подключении, максимальное количество подключённых пользователей и т.д. Перенести все эти конфигурационные параметры в XML файл.
  10. Сервер должен позволять подключаться только тем пользователям, которые знают соответствующий пароль для их имени пользователя. Для этого при запуске клиент должен спрашивать так же и пароль. А сервер при подключении нового пользователя должен сверять имя пользователя/пароль с имеющимися данными в конфигурационном файле. Если пароль не подходит, или такой пользователь не существует, то сервер должен отключить клиента с соответствующим сообщением.
Задача: Java Command Line (JCL)

Данная задача обычно дается мной в качестве зачетной по всему курсу J2SDK.
Реализовать консольную программу на Java, которая бы представляла некую реализацию командной строки, то есть могла бы выполнять команды вводимые построчно пользователем. Под командой понимается следующая строка:
"имя команды" "аргумент №1" "аргумент №2" ... "аргумент №N"

Код, который выполняет необходимую команду пользователя, должен оформляться как отдельный Java класс. Соответствие между классом и именем команды должно задаваться в конфигурационном (XML) файле программы. Команда во время выполнения может так же взаимодействовать с пользователем используя стандартный ввод/вывод.
Программа должна поддерживать следующие команды:
  • dir — выводит список файлов в текущей директории
  • cd «путь» — перейти в директорию, путь к которой задан первым аргументом
  • pwd — вывести полный путь до текущей директории

Варианты усложнения:

  1. Программа должна поддерживать команду «! имя_системной_программы аргумент№1… аргумент№N», которая запускает системную программу с соответствующими аргументами — так же ввод JCL должен подаваться на вход системной программы и тоже самое с ее выводом
  2. Программа должна поддерживать следующий синтаксис: «команда1 аргументы && команда2 аргументы» и «команда1 аргументы || команда2 аргументы». В первом случае «команда2» запускается только если «команда1» выполнилась успешно. Во втором случае «команда2» запускается только тогда, когда выполнение «команда1» завершилось не успешно
  3. Программа должна поддерживать возможность запускать команды в фоновом режиме. Для этого достаточно в конце командной строчки ввести знак «&». Так же программа должна поддерживать команду «jobs», которая выводит список задач, которые выполняются в фоне
  4. Реализовать возможность запускать программу в сетевом варианте: т.е. программа открывает порт и работать с ней можно используя обычный telnet с отдалённой машины. Программа должна поддерживать подключение сразу нескольких пользователей, а так же команды who и write, которые показывают кто подключён и посылают сообщение всем соответственно.

P.S. Если кто-то попробует себя в Java’e по этим задачам, то готов сам проверить решённые задачи и, по возможности, дать полезные замечания:)

P.P.S. Как думаете, стоит ли снабдить материал ссылками на пакеты и библиотеки, знание которых понадобиться для реализации того или иного пункта?

от новичка до профессионала / Habr

Книги, которые должен прочитать Java программист: от новичка до профессионала

[Примечание переводчика: термины градации «профессионализма» оставлены англоязычные в связи с трудностью их адекватного перевода на русский и несовпадением с привычными Junior-Middle-Senior-Lead. Перевод достаточно вольный — если знаний языка хватает, то лучше читать оригинал, как и советует автор. Оба языка для меня не родные, так что про ошибки сообщайте в личку — исправим. Здесь и далее в квадратных скобках примечания переводчика]

Я заметил, что в последние месяцы я рекомендую одни и те же книги как новичкам, так и опытным разработчикам. Поэтому я решил составить список этих книг. Они составили мне неплохую компанию в процессе моего роста от новичка до сегодняшнего уровня (какой-бы он не был 🙂 ) Составить список мне помогали друзья и коллеги. Особая благодарнасть Frank Appel, Rüdiger Herrmann, Benjamin Muskalla и Ralf Sternberg

Порядок книг в списке отражает мой персональный выбор. Меняйте его, как вам угодно 🙂 Одна важная вещь — если вы покупаете книгу из этого списка, то всегда выбирайте англоязычный вариант. Даже если есть перевод на ваш родной язык, оригинальная версия почти всегда лучший выбор.

Beginner

Если вы только начали знакомство с Java, то для начала нужно познакомиться с синтаксисом языка. Существует большое количество книг для этого. Практически всегда содержание этих книг очень похоже, но вот стиль написания отличается кардинально.

Есть две книги, которые стоит порекомендовать. Head First Java нестандартная, но легкочитаемая. Как и вся серия, вы можете любить её или нет (я обожаю их). Java, A Beginner’s Guide более традиционная книга, которая отлично объясняет Java. После того, как вы сполна ознакомились с синтаксисом и базовыми конструкциями, я рекомендую прочитать еще одну книгу перед тем, как переходить к следующему этапу (это справедливо и для других языков программирования). Test Driven Development (автор Kent Beck) описывает технику программирования, который мы используем в EclipseSource. ИМХО TDD должна входить в курс обучения каждого программиста.
Journeyman

Journeyman — программист, которые уже знает язык, сделал несколько небольших проектов, но которому еще предстоит развиться до профессионала. Конечно, я уверен, что вы не согласны с этим утверждением (я не был согласен, например). Но после пяти лет в этом статусе вы согласитесь 🙂

Простых знаний языка недостаточно — вам необходимо углублять их. Для этих целей практически любой профессионал Java порекомендует книгу Effective Java, автор Joshua Bloch. Другая книга — The Pragmatic Programmer — похожа на сборник заметок. Она подробна раскрывает те темы, с которыми вы столкнетесь как программист, поэтому ее также обязательно надо прочитать. Но знание языка не научит вас хорошо писать программы. С моей точки зрения одна из долгосрочных задач программиста — научиться правильно создавать архитектуру приложений. Для этих целей Design Patterns Book, написаная Бандой Четырех [нет, это не те, которые левые в КПК, а распространённое название группы авторов (Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес)] — хорошее начало.


Согласно книге TDD (автор Beck) золотое правило — это: красный, зеленый, рефактор. Martin Fowler объясняет последний пункт в своей книге Refactoring Book. После того, как все тесты прошли успешно и вы основательно переработали код, необходимо прочитать книгу Clean Code (Robert C. Martin) (минимум два раза). После первого раза я более чем уверен, что вы начнете думать про свой код по-другому [и вряд ли в лучшую сторону]. OSGi in Action смотриться странно в этом списке. Я добавил ее сюда, потому что я думаю, что модульность один из самых важных принципов дизайна приложений. Java-программисту просто необходимо знать OSGI. Помните, я упомянул, что вы не будете соглашаться со мной, что вы не станете Professional, пока не побудете в статусе Journeyman по крайней мере несколько лет? Я уверен, что после прочтения The Clean Coder я вас убедил. Robert C. Martin пишет про себя и свой путь развития от новичка до профессионала. Это действительно самое настоящее откровение!
Professional

Я использую слово «Professional», потому что в этом контексте его используют многие авторы. Но я не люблю использовать это слово для описания уровня программиста. «Professional» звучит так, как будто вы уже достигли вершины. Но это просто-напросто неправда. Программист никогда не может закончить свое обучение [впрочем, это справедливо для 83% профессий]. Книги, которые я поместил в эту категорию — просто более продвинутые. Они углубляются в детали или тренируют вас на роль лидера команды.

Совсем немного можно сделать в Java, не используя многопоточность. Пока вы в статусе Journeyman, скорее всего у вас в команде будет человек [ну-да, ну-да], который сможет вам помочь с этой темой. Но рано или поздно настанет момент, когда вам нужно будет научиться многопоточности самому. Brian Goetz проделал огромную работу в своей книге Java Concurrency in Practice. Быть профессионалом — значит брать ответственность. А так как вы программист — это еще значить нести ответственность за устаревший код. Micheal Feathers описал эту скучную тему немного веселее в книге Woking Effectively with Legacy Code. Также вы должны уметь брать ответственность за свою команду. Tom DeMarco и Timothy Lister постарались раскрыть эту тему в Peopleware, где описали, как работают эфективные команды и важные характеристики таких команд. Просто объяснить трудную тему — очень тяжелая задача. Немноге авторы способны на это. Martin Fowler проделал огромную работу в книге Patterns of Enterprise Application Architecture, где подробно описал процесс проектирования ПО.

Надеюсь, вам понравились (или понравятся, если вы еще не читали) эти книги. Если вы не согласны со списком, или можете порекомендовать другие интересные книги — отмечайтесь в комментариях [присоединяюсь к автору. Также в комментариях к оригинальной статье есть несколько интересных книг. Те книги из списка, что я уже прочитал — однозначно стоили этого. Ну и теперь есть неплохой список для продолжения]

Java по-русски. Часть первая: Книги / Habr

Не так давно я проводил опрос «Какие материалы о Java вас интересуют на русском языке?» среди посетителей Хабра. Вторым этапом моего исследования будет обзор существующих русско-язычных ресурсов.
Книги

За 2009 на Ozon.ru можно найти 8 книг по Java (всего за последние 3 года их вышло 22 — примерно по 7 в год, на books.ru набор примерно такой же, так что наша выборка довольно репрезентативна). Посмотрим, что это за книги?
Java EE


«Программирование web-приложений на языке Java» от Буди Курняван, «Технологии программирования на Java 2. Распределенные приложения» от Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри и «Java сервлеты и JSP. Сборник рецептов» Брюс Перри. Выпущены они были в 2002, 2001 и 2004 годах и современные Java EE(5 версия вышла в 2006, к концу 2009 выходит 6) технологии и фреймворки(EJB 3, JPA, JSF, Spring, Hibernate, Dependency Injection) никак не покрывают, поэтому говорить что-то о них смысла попросту нет.
Java SE



Здесь авторы куда более именитые. Все 4 книги в принципе можно рекомендовать как начальные, хотя я бы посоветовал Хорстманна.

«Философия Java» Брюс Эккель. По праву считается одной из лучших книг по Java(русское издание даже идёт с логотипом Luxoft), но к сожалению перевод страдает не только качеством(судя по отзывам на books.ru), а и урезанным содержанием: 640 страниц против 1150 в оригинале.

«Java 2. Библиотека профессионала. Том 2. Тонкости программирования» Кей Хорстманн, Гари Корнелл. Это второй том книги, которую можно назвать учебником от создателя(Sun Press). Первый том книги вышел в прошлом году, а задержка перевода составляет всего год. Наверное, это самый полный и актуальный(отражающий 6 версию) учебник по Java SE.

«Java. Руководство для начинающих» Герберт Шилдт. Треть всех книг по Java за последние 3 года именно от этого автора. Так же у этой книги самый большой тираж — 3000 экземпляров. Популярны и его книги по C++ & C#(уж не знаю, как ему удаётся писать по 3-4 книге в год по разным технологиям), поэтому наверное много программистов, переходящих с этих технологий на Java, выбирают именно его: знакомая фамилия как-никак.

«Язык программирования Java и среда NetBeans» В. Монахов. Курс лекций СПбГУ, содержит обзор практически всех технологий компании Sun: Java, Netbeans, Java ME/SE/EE. Так что если вы хотите познакомится с платформой в целом — это ваш выбор. Правда в свете недавнего приобретения Sun компанией Oracle, будущее инструментов, используемых в книге, неизвестно.

Java ME


Единственная книжка по Java ME за этот год — Майкл Моррисон «Java 2 Me. Программирование игр для мобильных телефонов». К сожалению сказать ничего не могу, но рейтинг оригинала на Amazon = 4,5 звезды(максимум 5). Надеюсь, что это так, потому что все другие книги по этой технологии за прошедшие года(а их набралось всего 4) не нашли ни одного положительного комментария на books.ru & Ozon.
Итог

Довольно широкий выбор книжек по Java SE: совеременные издания, которые позволяют вам даже поэстетствовать при выборе автора. К сожалению, не всегда удачный перевод.

ШОК: Практически полное отсутствие книжек по технологии Java EE: единственная книга, стоящая покупки за последние 4 года: Дэвид Гери, Кей Хорстманн «JavaServer Faces»(что интересно: английское издание на Ozon стоит в 3 раза дороже, чем на Amazon). По Java ME ситуация схожая, хотя технология эта уже не так популярна у начинающих разработчиков, которые смотрят в сторону iPhone & Android.

Что почитать про Java прямо сейчас? / Mail.ru Group corporate blog / Habr

Язык Java появился в уже далёких в 1990-х годах и менее чем за 5 лет стал одним из трёх самых популярных языков на планете. Сегодня, в том числе благодаря развитию мобильного мира, Java продолжает быть современным и невероятно востребованным представителем мира IT.

Но популярность вкупе с возрастом имеет и обратную сторону медали — за эти 23 года было издано огромное количество литературы. Некоторые книги стали настоящей классикой, поэтому именно на них ориентируются преподаватели на учебных курсах даже сегодня в 2018 году. Однако это не означает, что за последние годы не издавалось хороших книг. В подтверждение этого, автор GeekBrains Илья Бубнов изучил онлайн-магазины, чтобы найти десяток самых рейтинговых книг по Java, изданных или переизданных на русском языке за последний год.




Начнём мы с книг, наполненных примерами с комментариями, ведь именно в них заложена особая ценность при изучении нынешней версии Java. «Java на примерах» — доработка аналогичной книги Сеттера 2016 года. Тот экземпляр отличался абстрактными задачами, поданными без контекста и с поверхностным подходом, который без использования дополнительной литературы был бесполезным.

Эта книга сделала шаг вперёд в плане качества: код годен для реального применения, информация подаётся правильной дозировкой, а для понимания задач новичку достаточно официальной документации по Java.


В своей книге Коузен рассматривает подходы к решению более чем 70 классических задач. Большинство из них ориентированы на Java SE8, так как именно эта версия совершила мини-революцию в языке, но есть и дополнение из девятой версии.

Эту книгу будет полезно прочитать тем, кто уже учится на курсах или даже имеет пару лет опыта. То есть базовой теории здесь почти нет, зато достаточно много внимания уделено
возможностям обновлённой Java: лямбда-выражениям, функциональным интерфейсам, предикатам и многому другому.


Книга написана профессиональными преподавателями по Java, поэтому с точки зрения подачи материала придраться не к чему. Сначала вы познакомитесь со средой разработки, после этого перейдёте к основам ООП и языка. Всё сопровождается примерами кода и образными сравнениями, у вас не возникнет проблем с пониманием теории.

Ещё один плюс — книга не обрывается на базовых возможностях Java, а затрагивает некоторые моменты продвинутого программирования. Для этого в конце даже есть специальный раздел со сценариями, в которых можно применить изученный материал. Единственное, что может не понравиться в «Java для начинающих», это частые повторения фундаментальных понятий языка. Для новичка это скорее плюс, но если Java для вас просто очередной язык, читать становится тяжеловато.


Четвёртое издание популярной серии справочников O’Reilly, обновлённое до версии Java 9. Как и в другим книгах, здесь вы найдёте дублирование официального документа, но с живым языком и более качественной структурой. Естественно, учиться по такой книге достаточно тяжело, а вот купить и положить на рабочий стол будет очень полезно.


Ещё одна классическая серия книг. Как подобает серии, здесь очень много практической, пошаговой теории, которая позволит человеку, даже далёкому от программирования, понять и проникнуться Java. Это не практический учебник и не справочник; это книга, которую можно прочитать один раз и понять, хочешь ли ты двигаться дальше. Она обновлена до Java 9 и переиздана в 2018 году. Но для долгого объяснения ООП и базовых программ версия не имеет значения.


Название книги однозначно показывает целевую аудиторию. Эта книга не подойдёт новичкам, тем, кто слабо знаком с программированием в целом и с Java в частности. Однако тем, кто изучал Java много лет назад, а теперь потребовалась бумажная книга, где в терминах описаны изменения девятой версии — это полезная литература. Адаптация книга прошла безболезненно, поэтому для людей, которые давно дружат с Java, будет полезно купить «Полный обзор нововведений» и положить на ближайшую книжную полку.


Кей Хорстманн — автор нескольких известнейших книг по Java. Конкретно эта будет интересна не столько теорией, хотя здесь её хватает, сколько способом подачи и последующей практикой. Информация подаётся небольшими порциями и тут же закрепляется в упражнениях. С точки зрения усвояемости такой подход полезен большинству людей, однако в качестве справочника такая книга имеет явный недостаток — стандартная темы может быть растянута на несколько страниц.

Java SE от Хорстманна, пожалуй, одна из самых популярных учебных книг по языку. Поэтому если информация в предыдущих книгах вам показалось слишком сжатой, сложной для понимания, то здесь вы точно этого не почувствуете.


Профильная книга, что только придаёт ей ценность, Себастьяна Дашнера, в 2016 году удостоившегося звания Java-champion (это очень круто, если что). Это не книга для обучения языку, она, скорее, подойдёт тем, кто собрался перейти от прикладного уровня к созданию корпоративных приложений. Здесь есть всё необходимое: общие принципы создания таких продуктов, организация работы по принципу DevOps, фундаментальные основы для создания тестов.


Герберт Шилдт — автор множества книг не только по Java, но и по другим языкам. Данная работа — та самая классика, причём обновлённая уже в десятый раз до версии Java 9. На почти полутора тысячах страниц вам предстоит путь от изучения принципов ООП до компонентов JavaBeans. Здесь много теории и примеров с комментариями, в общем, всё то, что хочется видеть новичку в, быть может, единственной бумажной книге по программированию.

В мировой практике книга Шилдта также является общепризнанной must-read, входит в топ на Amazon и фигурирует практически во всех рейтингах лучших публикаций по Java. Издание на русском языке не испортило оригинал, а значит к прочтению строго рекомендуется.


Книга популярной серии Head First — определённый знак качества для тех, кто хочет быстро вникнуть в незнакомую тему. Здесь есть всё, чтобы новичку познакомиться с языком: юмор, иллюстрации, упражнения, примеры с комментариями. При этом вам даже не обязательно знать основы программирования, здесь всё подробно расписано.

Если говорить о недостатках, то это, конечно же, слабая актуальность книги. Английская версия была издана аж 13 лет назад, то есть от современных возможностей Java она невероятно далека. Для начала подойдёт, но в качестве настольного справочника лучше держать другие книги.


Завершим мы рейтинг одним важным примером того, почему программисту нужно знать английский язык и использовать оригинальную литературу. «Java. Библиотека профессионала» — ещё одна отличная книга Хорстманна, давно ставшая классикой. Состоит из двух томов «Основы» и «Расширенные средства программирования», каждый под 1000 страниц, поэтому на нехватку информации точно не пожалуетесь. Это уже 10-е по счёту издание, в России оно появилось в конце 2017 года. Оно посвящено Java SE 8, хотя сейчас актуальна уже 9 версия, но не это самое страшное. К сожалению, как это часто бывает, адаптация не прошла бесследно — перевод и экономия на печати сильно понизили градус крутости труда Кей С. Хорстманна. Вам придётся столкнуться с такой дикостью, как, например, перевод аббревиатуры IDE (тут он ИСР). В изучении языка вам это не помешает, но если вы совсем зелёный программист, можете понабраться неправильных слов.

В связи с последним примером, возник важный вопрос: а какие книги вы НЕ рекомендуете покупать из-за «кривой» адаптации?

Зачем учить Java и как делать это эффективно. Доклад Яндекса / Яндекс corporate blog / Habr

Чем Java отличается от других популярных языков? Почему именно Java может быть первым языком для изучения? Давайте составим план, который поможет выучить Java как с нуля, так и с применением навыков программирования на других языках. Перечислим отличия между созданием продакшен-кода на Java и разработкой на других языках. Михаил Затепякин прочитал этот доклад на встрече для будущих участников стажировки Яндекса и других начинающих разработчиков — Java Junior meetup.


— Всем привет, меня зовут Миша. Я разработчик из Яндекс.Маркета, и сегодня я расскажу вам, зачем учить Java и как делать это эффективно. Вы можете задать резонный вопрос: почему это буду рассказывать я, а не какой-нибудь сильный разработчик с кучей лет стажа? Дело в том, что я сам изучал Java недавно, года полтора назад, поэтому еще помню, как это примерно было и какие есть подводные камни.

Год назад я попал на стажировку в Яндекс.Маркет. Разрабатывал бэкенд для «Беру», для самого Маркета, вы наверняка им пользовались. Сейчас продолжаю там работать, в другой команде. Мы делаем аналитическую платформу Яндекс.Маркета для бизнес-партнеров.

Давайте приступим. Зачем учить Java с практической точки зрения? Дело в том, что Java — это очень известный язык программирования. У него очень большое комьюнити.

Например, есть такой TIOBE-индекс, популярный индекс популярности языков программирования, и Java там занимает первое место. Также на сайтах с вакансиями вы наверняка заметите, что большинство вакансий — как раз таки про Java, то есть разрабатывая на Java, вы всегда сможете найти себе работу.

Поскольку комьюнити очень большое, на любой ваш вопрос найдется ответ на каком-нибудь Stack Overflow или других сайтах. А еще, разрабатывая на Java, вы, на самом деле, пишете код по JVM, поэтому сможете легко пересесть на Kotlin, Scala и другие языки, использующие JVM.

Чем хороша Java с идеологической точки зрения? Есть разные языки программирования. Они решают разные задачи, вы это знаете. Например, на Python очень здорово писать однострочные скрипты для решения быстрых задач.

На плюсах можно полностью контролировать исполняемый код. Например, у нас ездят машинки, беспилотные автомобили Яндекса, их код написан на плюсах. Почему? У Java есть такая штука — Garbage Collector. Она очищает оперативную память от ненужных объектов. Эта штука запускается спонтанно и делает stop-the-world, то есть останавливает всю остальную программу и идет считать объекты, очищать память от объектов. Если такая штука будет работать в беспилотнике, это не круто. Ваш беспилотник будет ехать прямо, в этот момент очищать память и никак не смотреть на дорогу. Поэтому беспилотник написан на плюсах.

Какие задачи решает Java? Это в первую очередь язык для разработки больших программ, которые пишутся годами, десятками или сотнями людей. В частности, много бэкенда в Яндекс.Маркете написано на Java. У нас распределенная команда в нескольких городах, по десять человек в каждом. И код легко поддерживать, он поддерживается уже десять и более лет, и при этом приходят новые люди, разбираются в этом коде.

Какими характеристиками должен обладать язык, чтобы код на нем был легко поддерживаемый и чтобы его легко было разрабатывать в больших командах. Это в первую очередь должен быть читаемый код, и на нем должно быть легко реализовывать сложные архитектурные решения. То есть на нем должно быть легко писать высокоуровневые абстракции и т. д. Все это как раз и предоставляет нам Java. Это объектно-ориентированный язык. На нем действительно просто реализовывать высокоуровневые абстракции и сложные архитектуры.

Также существует очень много фреймворков и библиотек для Java, потому что языку уже больше 15 лет. За это время на нем было написано все, что могло быть написано, поэтому есть куча библиотек для всего, что может вам пригодиться.

Какими основными скиллами, на мой взгляд, должен обладать начинающий джавист? В первую очередь, это знание языка Java core. Далее это какой-нибудь Dependency Injection фреймворк. Про это более полно будет рассказывать следующий докладчик Кирилл. Я особо углубляться не буду. Далее это архитектура и паттерны проектирования. Нам нужно уметь писать архитектурно красивый код, чтобы писать большие приложения. И это какой-нибудь SQL или ORM для задач работы с базой. И это больше касается бэкенда.

Поехали! Java core. Тут я особо Америку не открою — нужно знать сам язык. На что стоит обратить внимание. Во-первых, Java вышло очень много версий за последние годы, то есть в 2014-2015 году вышла седьмая, потом восьмая, девятая, десятая, очень много новых версий, и в них вводили очень много новых крутых штук, например, Java Stream API, лямбда и т. д. Очень клевые свежие крутые штуки, которые используются в production-коде, о чем спрашивают на собеседованиях и которые нужно знать. Поэтому не стоит брать книгу с полки в библиотеке Java-4 и идти ее учить. Такой себе план: учим Java-8 или выше.

Внимательно обращаем внимание на нововведения, такие как Stream API, var, и т. д. Их спрашивают на собеседованиях, постоянно используют в production. То есть в Stream API сильно круче циклов, вообще, очень крутая штука. Обратите внимание обязательно.

И есть еще всякие штуки вроде итераторов, Exceptions и так далее. То, что кажется вам неважным, пока вы пишете какой-то маленький код сами. Вам не нужны эти Exceptions, кому они вообще нужны? Но их точно будут спрашивать на собеседованиях, они точно вам пригодятся в продакшене. В общем, стоит обратить внимание на Exceptions, итераторы и прочие штуки.

Структуры данных. Без структур никуда, при этом будет здорово, если вы будете не просто знать, что бывают set, dictionary, листы. А еще разные реализации структур. Например, у той же dictionary в Java много реализаций, в том числе HashMap и TreeMap. У них разные асимптотики, они по-разному устроены внутри. Нужно знать, чем они отличаются, когда какую использовать.

Также очень здорово будет, если вы будет знать, как работают эти структуры данных внутри. То есть не просто знать их асимптотики — за сколько работает ставка, за сколько работает проход, а как работает структура внутри — например, что такое бакет в HashMap.

Также стоит обратить внимание на деревья и графы. Это такие штуки, которых не очень много в продакшен-коде, но их любят на собеседованиях. Соответственно, нужно уметь обходить деревья, графы в ширину, глубину. Это все простенькие алгоритмы.

Как только вы начнете писать сколь-нибудь большой код, сложный, с использованием библиотек, многоклассовый код, вы поймете, что вам тяжко без систем сборки и resolve-зависимости. Это, в первую очередь Maven и Gradle. Они позволяют вам импортировать библиотеки в ваш проект реально в одну строчку. То есть вы пишете однострочный xml и импортируете в проект библиотеки. Отличные системы. Они примерно одинаковые, используйте любую — Maven или Gradle.

Далее — какая-нибудь система контроля версий. Я рекомендую Git, потому что он популярный, есть куча туториалов. Почти все пользуются Git, клевая штука, без нее никуда.

И — какая-нибудь среда разработки. Я рекомендую IntelliJ Idea. Она очень сильно ускоряет процесс разработки, сильно вам помогает, пишет за вас всякий boilerplate-код, в общем, клевая.


Ссылки со слайда: SQLZOO, хабрапост

SQL. Чуть-чуть про бэкендеров. Здесь, на самом деле, был забавный кейс. Мне за два дня до моего второго собеседования на стажировку позвонила девушка-HR и сказала, что меня через два дня будут спрашивать SQL и HTTP, нужно выучить. А я не знал ни про SQL, ни про HTTP примерно ничего. И я нашел такой клевый сайт — SQLZOO. На нем я выучил SQL часов за 12, в смысле, синтаксис SQL, как писать SELECT-запросы, JOIN и т. д. Очень клевый сайт, очень рекомендую. Реально за 12 часов выучил 90% того, что я знаю сейчас.

И еще здорово знать архитектуру баз данных. Это всякие ключи, индексы, нормализация. Про это есть серия постов на Хабре.

В Java, кроме SQL, есть всякие Object-relational mapping-системы типа JPA. Есть некий код. В первом методе некий SQL-код — SELECT id name FROM info.users WHERE id IN userIds. Из базы данных users, из таблицы, получают их айдишники, имена.

Далее есть некий маппер, который превращает объект из базы в джавовый объект. И есть ниже третий метод, который, собственно, выполняет этот код. Все это с помощью JPA можно заменить на одну строчку, которая написана ниже. Она делает все то же самое, — find All ByIdIn. То есть по названию метода он генерирует вам SQL-запрос.

Очень клевая штука. Я сам, когда не знал SQL, использовал JPA. В общем, обратите внимание. Если лень учить SQL, — огонь. И, вообще, огонь!

Spring. Кто слышал про такую штуку, как фреймворк Spring? Видите, как вас много? Неспроста. Spring есть в требованиях каждой второй вакансии по бэкенду на Java. Без него реально никуда в большой разработке. Что такое Spring? В первую очередь это Dependency Injection-фреймворк. Про это тоже будет рассказывать следующий докладчик. Но если вкратце, это штука, которая позволяет вам облегчить импортирование зависимостей одних классов на другие. То есть упрощается знание зависимостей.

Spring Boot — такой кусок Spring, который позволяет вам поднимать свое серверное приложение одной кнопкой. Вы заходите на THID, нажимаете пару кнопок, и вот у вас на localhost 8080 уже поднято ваше серверное приложение. То есть вы еще ни строчки кода не написали, а оно уже работает. Очень клевая штука. Если пишете что-то свое, — огонь!

Spring — очень большой фреймворк. Он не только поднимает вам серверное приложение и резолвит Dependency Injection. Он позволяет делать кучу всего, в том числе создавать REST API-методы. То есть вы написали какой-то метод, повесили на него аннотацию Get mapping. И вот у вас на localhost уже есть какой-то метод, который пишет вам Hello world. Две строчки кода, и работает. Крутая штука.

Также Spring упрощает написание тестов. Без тестирования в большой разработке никак. Код нужно тестировать. Для этого в Java есть клевая библиотека JUnit 5. И вообще JUnit, но последняя версия пятая. Там есть все для тестирования, всякие assertions и прочие штуки.

И есть офигенный фреймворк Mockito. Представьте, что у вас есть некая функциональность, которую вы хотите протестировать. Функциональность делает много чего, в том числе, где-то в серединке она входит во «ВКонтакте» с вашим, например, айдишником, и получает по айдишнику имя и фамилию юзера «ВКонтакте». Наверное, вы не будете в тестах входить «ВКонтакте», это странно. Но функциональность протестировать вам нужно, поэтому вы этот класс, с помощью Mockito, сделали его mok, его имитацию.

Вы скажете, что когда в этот класс приходит запрос с айдишником таким-то, возвращает какую-нибудь фамилию, например, Вася Пупкин. И это будет работать. То есть вы будете тестировать всю функциональность за mok один какой-то класс. Очень клевая штука.


Ссылка со слайда

Паттерны проектирования. Что это такое? Это шаблоны для решения типичных проблем, возникающих в разработке. В разработке частенько возникают одинаковые, или схожие какие-то задачи, которые было бы здорово как-то хорошо решать. Поэтому люди придумали best practices, некие шаблоны, как решать эти проблемы.

Есть веб-сайт с большинством популярных паттернов — refactoring.guru, можно почитать, узнать, какие бывают паттерны, прочитать кучу теории. Проблема в том, что это практически бесполезно. Фактически паттерны без практики особой пользы не несут.

Вы услышите про какие-нибудь паттерны типа Singletone или Builder. Кто слышал эти слова? Очень много людей. Есть такие простые паттерны, которые вы можете реализовать сами. Но большинство паттернов: стратегия, фабрика, фасад — не понятно, где их применять.

И пока вы не увидите на практике в каком-то чужом коде место, к которому применен этот паттерн, применять его самим не получится. Поэтому с паттернами очень важна практика. И просто прочитать о них на refactoring.guru не супер полезно, но это обязательно нужно сделать.

Зачем нужны паттерны? Пусть у вас есть некий класс User. У него есть Id и Name. У каждого User обязательно должен быть и Id, и Name. Слева сверху — класс.

Какие есть способы инициализировать User? Два варианта — либо конструктор, либо setter. Какие есть минусы у обоих подходов?

Конструктор. new User (7, «Bond»), окей. Теперь допустим, что у нас не класс User, а некий другой, с семью числовыми полями. У вас будет конструктор, в котором семь подряд идущих чисел. Непонятно, что это за числа, какое из них к какому property относится. Конструктор — это не здорово.

Второй вариант — setter. Вы четко пишете: setId(7), setName(«Bond»). Вы понимаете, какая property к какому полю относится. Но у setter есть проблема. Во-первых, вы можете забыть засетить что-то, а во-вторых, ваш объект получается изменяемым. Это не потокобезопасно и чуть-чуть понижает читаемость кода. Поэтому люди придумали клевый паттерн — Builder.

Про что это? Постараемся собрать плюсы обоих подходов — и setter, и конструктора — в одном. Делаем некий объект, Builder, у которого тоже будут поля Id и Name, который сам будет строиться на основе setter, и у которого будет метод Build, который возвращает вам нового User со всеми параметрами. У нас получается неизменяемый объект и setter. Клево!

Какие есть проблемы? Вот у нас есть классический Builder. Проблема — мы все еще можем забыть засетить какое-то поле. И если мы забыли засетить айдишник, в данном случае в Builder он проинициализируется нулем, потому что тип int — не nullable. И если мы сделаем Name «Bond» и забудем посетить айдишник, у нас будет новый User с id «0» и именем «Bond». Не клево.

Попробуем с этим побороться. В Builder поменяем int на int же, чтобы он был nullable. Теперь все здорово.

Если мы пытаемся сделать User с именем «Bond», забыв проставить ему айдишник, у нас упадет null pointer exception, потому что айдишник не nullable, а у Builder — null, конкретно pointer exception.

Но мы все еще можем забыть поставить имя, поэтому мы навешиваем object replay на null. Теперь, когда мы строим из Builder наш объект, он проверяет, что поле не nullable. И это еще не все.

Посмотрим на последний пример. В данном случае если мы в айдишном рантайме каким-то образом положили null, и было бы здорово сразу узнать, что ты это сделал и это не клево, что ты сейчас делаешь ошибку.

Нужно кинуть ошибку не в момент создания User, а когда ты сетишь в айдишник null. Поэтому мы в Builder поменяем в setter Integer на int, и он сразу здесь ругнется, что выкинули null.

Короче, в чем суть? Есть простейший паттерн Builder, но даже в его реализации есть какие-то тонкости, поэтому очень клево посмотреть на разные реализации паттернов. У каждого паттерна есть десятки реализаций. Это все очень интересно.

Как мы пишем Builder в продакшен-коде? Вот наш User. На него вешаем ротацию Builder из библиотеки Lombok, и она сама генерирует нам Builder. То есть мы не пишем кода, но Java уже считает, что у этого класса есть Builder, и мы его можем вот так вызвать.

Я уже говорил, что в Java есть библиотеки практически для всего, в том числе Lombok, клевая библиотека, которая позволяет вам не писать boilerplate. Builder, GET.

Паттерны бывают архитектурные — относящиеся не только к одному классу, а к системе в целом. Есть такой клевый принцип в проектировании систем: Single Responsibility Principle. О чем он говорит? О том, что каждый класс должен отвечать за какую-то свою функциональность. В данном случае у нас есть Controller, который общается с пользователями, JSON-объектами. Есть Facade, который преобразует JSON-объекты в модели, с которыми далее будет работать Java приложение. Есть Service, в котором есть сложная логика, работающая с этими моделями. Есть Data Access Object, которая эти модели кладет в базу и достает из базы. И есть сама база данных. Другими словами, не все это находится в одном классе, а мы делаем пять разных классов, и это еще один паттерн.

Когда вы более-менее выучили Java, здорово написать какой-нибудь собственный проект, в котором будет база данных, работа с другими API, и который будет предоставлять REST API-клиентам ваше серверное приложение. Такую штуку будет здорово вставить в резюме, это клевое окончание вашего обучения. С этим можно идти и устраиваться на работу.

Вот пример моего серверного приложения. На втором курсе я с ребятами писал курсовую работу. Они писали мобильное приложение для организации мероприятий. Там пользователи могли заходить через «ВКонтакте», ставить на карте точки, создавать мероприятия, звать на них своих друзей, сохранять изображение мероприятий и т. д.

Что сделал в проекте я? Написал серверное приложение на Spring Boot, не используя SQL. Я его не знал, использовал JPA. Что оно умело делать? Авторизоваться в VK через OAuth-2. Брать токен пользователя, идти с ним в VK, проверять, что это настоящий пользователь. Получать информацию о пользователях через «ВКонтакте». Оно умело сохранять информацию в базе данных, также через JPA. Умело сохранять картинки и прочие файлы в памяти компьютера, и сохранять ссылки на них в базе. Я тогда еще не знал, что есть CLOB-объекты в базе, поэтому делал так. Там был REST API для пользователей, клиентских приложений. И были юнит-тесты на основные функциональности.

[…] Небольшой пример моего успешного изучения Java. На первом курсе в университете мне преподавали C# и дали понимание про ООП-программирование — что такое классы, интерфейсы, абстракция, зачем они нужны. Мне это очень помогло. Без этого изучать Java довольно сложно, непонятно, зачем нужны классы.

На втором курсе в университете опять же давали Java core, но я на этом не остановился, пошел изучать Spring сам и написал курсовую работу, свой проект, о котором я говорил выше. И с этим всем я пошел на стажировку в Яндекс, прошел собеседование, попал в Яндекс.Маркет. Там я писал бэкенд для Беру, это наш маркетплейс, и для самого Яндекс.Маркета.

После этого, полгода назад, я перевелся в другую команду внутри того же Маркета. Мы делаем аналитику для бизнес-партнеров. Мы в аналитической платформе, нас на бэкенде трое, поэтому у меня очень большая доля влияния на проект. Это очень интересно, на самом деле. То есть, мы реально предоставляем данные по рынку — какие продажи, в каких категориях, в каких моделях, для бизнес-партнеров, больших известных компаний. И нас всего трое, мы пишем этот код, и это очень прикольно.

Спасибо! Полезные ссылки:
— «Java 8. Руководство для начинающих».
— Структуры данных.
— SQLZOO.
— Нормализация баз данных.
— Паттерны проектирования.
— Design Patterns.
— Clean Code.
— Effective Java.

Шпаргалка Java-программиста 5. Двести пятьдесят русскоязычных обучающих видео докладов и лекций о Java

Думаю, мало кто будет спорить, что просмотр видео хороших лекций и докладов с конференций это один из самый быстрых и простых способов научится чему-то новому. Проблема в том, что по Java сложно найти все хорошие видео конференций и доклады по нужной теме. Более того, по названию многих видео с конференций сложно понять, какой именно они теме повещены.

Поэтому я подготовил данный сборник видео докладов на русском языке с различных конференций (Joker, JPoint, JavaDays, JEEConf, конечно, с DEV labs, которые организовывает Luxoft), и, естественно, видео из канала Luxoft Training Center. Всё видео разделено на различные категории и при необходимости добавлено описание.

Update: Внимание, актуальная версия со всеми ссылками на видео находиться теперь в моем github’e проекте useful-java-links, по этой ссылке.

Общее оглавление ‘Шпаргалок’

Чего НЕ БУДЕТ в данном сборнике:
1. Не будет видео про scala, так как scala это целый отдельный мир, для программистов на scala могу порекомендовать вот этот сборник,
2. Не будет видео на английском языке, я старался выбирать русскоязычное видео, так как далеко не все программисты все-таки владеют английским в совершенстве, ну и англоязычного видео слишком много, поэтому я решил остановится пока только на русскоязычных видео (и небольшом количестве видео на украинском языке), К тому же, уверен, для англоязычного видео по Java в инете и так найдется немало подобных сборников.

Не стесняйтесь писать в комментариях (или мне в личку) о других интересных видео по Java, которое нет в этом списке.

Итак, начнем:

1. Вопросы оптимизации и производительности


1.1 Производительность и оптимизация


  1. Сергей Куксенко — «Квантовые» эффекты производительности,
  2. Сергей Куксенко — Сессия вопросов-ответов о производительности Java,
  3. Алексей Шипилёв и Сергей Куксенко, Россия — Методология оптимизации производительности,
  4. Сергей Куксенко, Oracle — Железные счётчики
  5. Алексей Шипилёв, Oracle — Катехизис java.lang.String — о реализации строк в Java, способы оптимизации работы со строками и ошибки, которые часто допускают при оптимизации работы со строками,
  6. Алексей Шипилёв — Java Benchmarking: как два таймстампа прочитать!
  7. Алексей Шипилёв — Java Benchmarking: как два таймстампа записать
  8. Алексей Шипилёв и Сергей Куксенко — Оптимизация производительности Java-приложений: теория
  9. Алексей Шипилёв и Сергей Куксенко — Оптимизация производительности Java-приложений: детали
  10. Алексей Шипилёв и Сергей Куксенко — Оптимизация производительности Java-приложений: ещё детали
  11. Олег Бунин, Андрей Паньгин, Алексей Рагозин, Олег Анастасьев — Круглый стол. HighLoad
  12. Алексей Шипилёв, Oracle — Сжимай меня полностью
  13. Дмитрий Лазаренко — Оптимизация работы JVM в облаке
  14. Дмитрий Чуйко — Быстрая загрузка ваших классов
  15. Глеб Смирнов — HotSpot, что ты делаешь?! Ахаха, прекрати!
  16. Kirill Golodnov — О бесконечно долгой работе дочерних процессов Java-приложения
  17. Андрей Афанасьев — Оптимизация производительности распределенных приложений…
  18. Руслан Черёмин — Disruptor и прочие фокусы
  19. Gleb Smirnov — Side-By-Side Performance Comparisons — что значит «тормозит» и как с этим бороться
  20. Nikita Salnikov Tarnovski — First steps in GC tuning — проблемы, связанные с производительностью из-за сборщика мусора

1.2 Высоконагруженные приложения (HighLoad)


  1. Андрей Паньгин — Особенности разработки высоконагруженного сервера на Java
  2. Алексей Шевчук — Подходы к решению проблем производительности высоконагруженых сервисов
  3. Роман Елизаров — Миллионы котировок в секунду на чистой Java
  4. Олег Анастасьев — За гранью возможного (Keynote) — о проблемах при создания Однокласников и решения для высоконагруженных сервисов,
  5. Андрея Паньгина — Выжимаем из сервера максимум: приемы кеширования и передачи данных на Java — описание приемов создания высоконагруженных систем на Odnoklassniki.ru,
  6. Alexander Oleynikov — Практический опыт построения API высоконагруженных сервисов — описание создания высоконагруженных систем в Yandex’е,
  7. Valerii Moisieienko — How to Manage 10K request per second in HA manner — история разработки высоконагруженного приложения на недорогом железе,

1.3 Сборка мусора, утечки памяти и работа с памятью


  1. Алексей Рагозин — Сборка мусора, битва алгоритмов
  2. Владимир Долженко — GC: друг или враг?
  3. Роман Елизаров — Почему GC съедает все моё CPU?
  4. Никита Сальников-Тарновский, Plumbr — Где моя память, чувак?!
  5. Глеб Смирнов, Plumbr — Тайны — в наших головах, а не в JVM
  6. Никита Сальников-Тарновский — Утечки памяти
  7. Алексей Шипилёв — О чём молчат Heap Dump-ы
  8. Владимир Воскресенский — Микрохирургия HotSpot
  9. Александр Макаров — Исследование возможностей и ограничений JVM по оптимизации памяти
  10. Андрей Паньгин — Кеширование данных вне Java Heap и работа с разделяемой памятью в Java
  11. Владимир Иванов — G1 Garbage Collector
  12. Иван Крылов — StructuredArray и ObjectLayout — как JVM представляет объекты и вопросы производительности представления объектов,
  13. Никита Сальников-Тарновский — Heap, off you go
  14. Nikita Salnikov-Tarnovski — I bet you have a permgen leak in your application — утечки памяти из-за class load’ов

2. Инструменты и IDE


2.1 IDE и инструменты разработки


  1. Андрей Зайцев, Дмитрий Нестерук, JetBrains — Инструменты командной разработки
  2. Николай Чашников — Поддержка Java 8 в IntelliJ IDEA
  3. Андрей Солнцев — Eclipse vs Intellij IDEA
  4. Николай Чашников — IntelliJ IDEA изнутри
  5. Дмитрий Найданов — Play Framework 2.0 в IntelliJ IDEA
  6. Николай Чашников — Компилятор Java и IDE: взаимовыгодное сотрудничество
  7. Андрей Чепцов, Барух Садогурский, Антон Архипов — Круглый стол. Инструменты Java-разработчика
  8. Александр (Шура) Ильин — Анализ покрытия с помощью JCov
  9. Антон Архипов — JRebel — инструмент, который позволяет «на лету» перезагружать классы, измененные с момента развёртывания приложения.,
  10. Барух Садогурский — Разработка модулярного софта: добро пожаловать в АД!
  11. Alexey Alexandrov — All inclusive Jeastic PaaS — описание платформы для облачных вычислений
  12. Baruch Sadogurskii — Managing Modular Software for your NuGet, C++ and Java Development
  13. Philip Torchinsky — Интеграция баг-трекера и сервера CI с IntelliJ IDEA
  14. ladimir Kozhaev — How to write IDE for your DSL in one day
  15. Евгений Борисов — Power of Gradle
  16. Sergey Morenets — Gradle 2. Write once, build everywhere — внимание: видео на украинском языке

2.2 Отладка, профилирование, мониторинг


  1. Алексей Рагозин — Непрерывное профилирование Java-приложений в ходе эксплуатации
  2. Андрей Паньгин, Одноклассники — Лучший отладчик — сделанный своими руками
  3. Владимир Ситников — Профайлер в каждый дом
  4. Владимир Красильщик — Мониторинг Java-приложения с многопроцессной архитектурой
  5. Виталий Трифанов и Дмитрий Цителов — Динамическое обнаружение гонок в многопоточных Java-программах
  6. Андрей Паньгин — Лучший отладчик — сделанный своими руками
  7. Андрей Паньгин — Аварийный дамп — черный ящик упавшей JVM
  8. Андрей Паньгин — Анализ аварийных дампов JVM, часть 2
  9. Андрей Паньгин — Анализ аварийных дампов JVM, часть 1
  10. Александр Отенко — О чём молчит профайлер
  11. Андрей Паньгин — Аварийный дамп — «черный ящик» JVM
  12. Алексей Рагозин — Диагностические интерфейсы JVM, или Как сделать профайлер своими руками
  13. Владимир Воскресенский — Практическое применение OSS для анализа Java-приложений — Использование Oracle Solaris Studio для анализа высокопроизводительных Java-приложений
  14. Алексей Шипилёв — (The Art of) (Java) Performance Benchmarking II

3. Особенности разных языков JVM и версий Java


3.1 Groovy и Grails


  1. Барух Садогурский, Евгений Борисов — Эпичные Groovy Puzzlers — Месть Скобок
  2. Барух Садогурский и Евгений Борисов — Groovy Puzzlers
  3. Барух Садогурский и Евгений Борисов — Groovy Puzzlers — Странное, Непонятное и Мамочки-а-это-что-такое?!
  4. Евгений Борисов — Марлезонский балет по Groovy в трех частях
  5. Барух Садогурский — Метапрограммирование на уровне компилятора в Groovy
  6. Барух Садогурский — Groovy DSL для plugin-ов: расширения человеческим языком
  7. Барух Садогурский — Транcформации Абстрактного Синтаксического Дерева в Груви. ЩИТО?!
  8. Izzet Mustafaiev — Groovy MOPping — принципы построения DSL на groovy
  9. Baruch Sadogursky — Search for the Holy Grail (and test it once found) — какие решения для поиска существуют в Grail и какие решения для тестирования существуют в Grails

3.2 Clojure


  1. Николай Рыжиков — Clojure: интерактивная разработка для интерактивного веб
  2. Maurice Naftalin — Closures and Collections: the World After Eight
  3. Dmitriy Morozov — ETL all the things! — использование ETL (Extract, transform, load) в Clojure, как можно использовать Spark c Clojure,
  4. Misha Kozik — DSL in Clojure — использование Clojure для написания DSL,

3.3 Kotlin


  1. Андрей Бреслав — Type-safe Web with Kotlin
  2. Андрей Бреслав — Project Kotlin
  3. Евгений Геращенко — Kotlin, язык программирования для JVM
  4. — Язык программирования Kotlin

3.4 Java Embedded и IoT


  1. Александр Белокрылов, Александр Мироненко, Oracle — Восстание машин: в энтерпрайз с 256 КБ RAM
  2. Белокрылов, Мироненко — Силовая установка c сердцем из Raspberry Pi и мозгом на Java Embedded
  3. Александр Белокрылов и Александр Мироненко — Java Embedded у вас дома
  4. Александр Мироненко и Александр Белокрылов — Java Embedded у вас дома
  5. Лев Прийма — Java SE Embedded 8
  6. Александр Белокрылов и Александр Мироненко — Полноценный Java runtime, 256Kb RAM и 5 литров пива
  7. — Java ME Embedded: проверенные технологии на перспективных рынках
  8. Yakov Fain — RESTful services and OAUTH protocol in IoT

3.5 Java EE 7


  1. Markus Eisele — 50 Best Features of Java EE 7

3.6 Java 8, лямбды и Stream Api


  1. Сергей Куксенко — Я, лямбда
  2. Сергей Куксенко — JDK 8: Молот лямбд
  3. Сергей Куксенко и Алексей Шипилёв — Через тернии к лямбдам, часть 1
  4. Владимир Иванов — Java 8 и JVM: что нового в HotSpot
  5. Сергей Куксенко — Java 8: Advanced Stream Techniques
  6. Дмитрий Козорез — Java 8 Time API
  7. Владимир Иванов — Java 8: что нового в HotSpot JVM?
  8. Maurice Naftalin — What’s New in Java 8
  9. Александр Ильин — Type annotations in Java 8. И почему это хорошо
  10. Сергей Куксенко и Алексей Шипилёв — Через тернии к лямбдам, часть 2
  11. Сергей Куксенко и Алексей Шипилёв — Через тернии к лямбдам, часть 1
  12. Сергей Куксенко — Stream API, часть 2
  13. Сергей Куксенко — Stream API, часть 1
  14. Сергей Куксенко — JDK8: Stream style
  15. Алексей Фёдоров — Компромиссы в Java 8 с примерами и картинками
  16. Александр Белокрылов — Знакомьтесь, Java 8
  17. Дмитрий Козорез — Долгий путь к Лямбдам
  18. Соколов Михаил — Java 8: лямбда выражения и Stream API
  19. Oleg Tsal-Tsalko — Java 8 Date&Time benefits
  20. Oleg Tsal-Tsalko — Java 8 Lambdas Hands-On-Labs
  21. Pavel Grushetzky — Java for hipsters and rocks stars
  22. Oleg Tsal-Tsalko — 10+ new features you ought to know using Java 8

3.7 Java 9+ и будущее Java


  1. Иван Крылов, Владимир Иванов, Volker Simonis, Никита Липский — Круглый стол. Будущее Java-платформы
  2. Владимир Иванов — Future of Java: 9 and beyond
  3. Владимир Иванов — Платформа Java: прошлое и будущее
  4. Шура Ильин — Project Jigsaw. Take 2
  5. Александр Белокрылов, Oracle — Java: эволюция неизбежна
  6. Аня Барски — Java Life Story
  7. Olena Syrota, Oleg Tsal-Tsalko — Standard Java JSON binding. When? — описание существующих библиотек работы с JSON, их особенностей и проблем, ожидание стандартного JSON’a в Java 9

4. Фреймворки Java


4.1 Spring


  1. Барух Садогурский, Евгений Борисов — Spring Puzzlers — Начало
  2. Евгений Борисов — Spring Data? Да, та!
  3. Барух Садогурский, Евгений Борисов, Николай Алименков — Зачем у Spring столько конфигураций?
  4. Евгений Борисов — Spring the Ripper
  5. Евгений Борисов — Spring-потрошитель, часть 2
  6. Евгений Борисов — Spring-потрошитель, часть 1
  7. Евгений Борисов — Spring 4.0: новое поколение
  8. Владимир Сонькин — Использование Spring 4 и AngularJS для разработки веб-приложений на базе архитектуры REST
  9. Меркурьев Евгений — Весна идет, весне — дорогу! Новое в Spring Framework
  10. Artem Bilan — Spring and Messaging: The next development generation
  11. Vladimir Tsukur — From CRUD to Hypermedia APIs with Spring
  12. Igor Khotin — App infrastructure for microservices with Spring Cloud 1.0.0 — микросервисы, cloud, Spring и DevOps,
  13. Sergey Morenets — Spring Boot. Boot up your development — описание фреймворка Spring Boot, почему данный фреймворк позволяет создавать приложения намного быстрее,

4.2 Вебфреймворки (JavaFX, Javascript, AngularJS и т.п.)


  1. Сергей Гринёв — JavaFX: FXML и SceneBuilder
  2. Артём Ананьев — Неформально о JavaFX
  3. Дмитрий Кузовец — FXML и SceneBuilder: отделяем пользовательский интерфейс от логики в JavaFX
  4. Павел Нестеренко — Java + JavaScript: переходи на мобильную сторону
  5. Евгений Родин — Асинхронная обработка данных в web-приложениях на Java
  6. Евгений Родин — Разработка веб-сайтов средствами Java (на примере простого сайта) — примеры разработки вебсайта с использованием mysql, tomcat и т.п. технологий
  7. Соколов Дмитрий — Как выбрать библиотеки для современного Web-приложение на Java
  8. Владимир Сонькин — Использование AJAX в разработке web-приложений на Java
  9. Александор Дворецкий — Как подготовиться к созданию нагруженных сайтов
  10. Владимир Сонькин — Использование Spring 4 и AngularJS для разработки веб-приложений на базе архитектуры REST
  11. Victor Polischuk — Web-application I have always dreamt of
  12. Nikita Lipsky — Delivering Native User Experience in Client-Side Java Applications — нативные клиенты для работы с вебом вместо браузерного веба (от мобильных до десктопных приложений),
  13. Olga Semeniuk — Less JS! Web components for back-end developers — введение в веб компоненты для бакенд разработчиков

4.3 Прочие фреймворки и популярные библиотеки


  1. Цытович Павел — Основы разработки приложения на платформе Android
  2. Андрей Шевченко — Генерация больших отчетов с использованием Jasper Reports
  3. Владимир Красильщик — Java-mapping для прагматичных программистов — использования библиотек и фреймворктов для mapping’а (dozer, spring type converter api, nomin, scala dsl, transmorf и т.д.)
  4. Andrii Golovei — Highly available and scalable application for dummies with Storm — Storm фреймворк для машинного обучения, высокопроизводительных вычислений

5. Базы данных, поисковые системы и BigData


5.1 NoSql и кеши


  1. Олег Анастасьев — За гранью NoSQL: NewSQL на Cassandra
  2. Алексей Зиновьев — Мама, я так хочу Hibernate для NoSQL, ну или что там у вас есть на примете
  3. Яков Жданов — In-memory accelerator for MongoDB
  4. Олег Анастасьев — Класс! ная Cassandra
  5. Роман Антипин — Франкенштейнизация Voldemort, или Key-Value данные в «Одноклассниках»
  6. Яков Жданов — От дисковой архитектуры к In-Memory
  7. Алексей Рагозин — Блеск и нищета распределенных кешей
  8. Alexey Tokar — MongoDB в продакшене — миф или реальность?
  9. Artem Orobets — How do you store your data?
  10. Roman Nikitchenko — Big Data: from mammoth to elephant – transforming legacy with Hadoop — как преобразовать легаси проекты в новые Big Data приложений с современным стеком технологий,

5.2 Sql базы данных и JPA


  1. Николай Алименков — Босиком по граблям Hibernate
  2. Яков Сироткин, Sidenis — Миграция с PL/SQL на Java

5.3 Поисковые системы


  1. Михаил Хлуднев — В поисках Tommy Hilfiger — о Apache Lucene, свободной библиотеки для высокоскоростного полнотекстового поиска, о разных системах поиска,
  2. Alexey Tokar — To find a needle in a haystack — о нечетком поиске в словарях от разработчика Яндекса

5.4 BigData, Data Scientist, Машинное обучение


  1. Алексей Зиновьев — Java в качестве основного рабочего инструмента Data Scientist
  2. Roman Nikitchenko — Apache HBase: crazy dances on the elephant back
  3. Serhiy Masyutin — Big Data Analysis — внимание на украинском языке
  4. Boris Trofimov — Scalding Big Data: Thorns and Roses,
  5. Taras Matyashovskyy — Introduction to Real-Time Big Data with Apache Spark — внимание на украинском языке
  6. Serhiy Masyutin — Big Data analysis approaches in Java world — что такое Big Data, технология Map-Reduce и примеры проектов
  7. Kyrylo Holodnov — Scaling a solution of an NP-hard problem with Apache ZooKeeper — о Apache ZooKeeper, как с работать и решать различные задачи,
  8. Andrii Golovei — Elastic stack in BigData — использование полнотексового поиска в BigData используя решения компании Elastic (Elastic Search)

6. Особенности языка Java


6.1 Cериализации


  1. Роман Елизаров — Факты и заблуждения о Java-сериализации
  2. Olena Syrota, Oleg Tsal-Tsalko — Standard Java JSON binding. When? — описание существующих библиотек работы с JSON, их особенностей и проблем, ожидание стандартного JSON’a в Java 9

6.2 Работа с байткодом, java agent’ы, class loader и компиляции на лету


  1. Антон Архипов, ZeroTurnaround — Javassist на службе у Java-разработчика
  2. Никита Липский — Ahead-of-time компиляция
  3. Антон Архипов — Java-агенты, Instrumentation API и Javassist
  4. Антон Архипов — Загрузчики классов в Java: коллекция граблей
  5. Владимир Иванов — Динамическая (JIT) компиляция в JVM
  6. Дмитрий Завалишин — Конвертер байткода JVM для виртуальной машины Фантом

6.3 Aсинхронность и многопоточность


  1. Барух Садогурский — Как написать асинхронные многопоточные HTTP приложения
  2. Алексей Шипилёв — ForkJoinPool в Java 8
  3. Николай Алименков — Прикладная многопоточность
  4. Дмитрий Чуйко, Oracle — CompletableFuture уже здесь
  5. Глеб Смирнов — Расчленяя многопоточность
  6. Алексей Шипилёв — Прагматика Java Memory Model
  7. Глеб Смирнов — Многопоточность Java под капотом
  8. Роман Елизаров — Теоретический минимум для понимания Java Memory Model
  9. Дмитрий Чуйко — Новинки в java.util.concurrent
  10. Алексей Шипилёв — Bulletproof Java Concurrency
  11. Сергей Куксенко — Модель памяти
  12. Руслан Черёмин — Модель памяти Java: близкие контакты третьей степени
  13. Alexey Fyodorov — Atomics, CAS, and Nonblocking Algorithms — вопросы многозадачности, атомики, неблокирующие алгоритмы, CAS и т.п.
  14. Mikalai Alimenkou — Java Concurrency Applied — примеры практических решений про многозадачность

6.4 Интеграция


  1. Николай Алименков — Нужен ли нам JMS в мире современных Java-технологий?
  2. Яков Файн, Farata Systems — RESTful-сервисы и протокол OAuth в IoT
  3. Александр Белоцерковский — Windows Azure + Java = Open Integration
  4. Вадим Цесько — Фреймворк Akka и его использование в Яндексе
  5. Vladimir Tsukur — Вместе веcело шагать с HATEOAS! — разработка Web Api,
  6. Максим Юнусов — «Масштабируемое приложение за 15 минут (используем AKKA под Java)
  7. Вячеслав Лапин — Слабая связанность Java-сервера и web-интерфейса посредством REST API

6.5 Безопасность, Java Security Model и т.д.


  1. Михаил Дударев — Побег из песочницы. Уязвимости нулевого дня в Java
  2. Михаил Дударев — USS «Enterprise» — сквозь черные дыры безопасности Java Web-контейнеров
  3. Михаил Дударев — Опасные типы, или Java Security Model на практике

6.6 Виртуальная машина Java и особенности реализации JVM


  1. Андрей Паньгин — Java Runtime: повседневные обязанности виртуальной машины Java
  2. Олег Плисс — Виртуальные машины. Часть 1
  3. Олег Плисс — Виртуальные машины. Часть 2
  4. Олег Плисс — Виртуальные машины. Часть 3
  5. Олег Плисс — Виртуальные машины. Часть 4
  6. Артём Ананьев — Проект OpenJDK
  7. Андрей Бреслав — Компромиссы в разработке языков программирования
  8. Андрей Бреслав — Компромиссы, или Как проектируются языки программирования
  9. Никита Липский и Павел Павлов — Excelsior JET: внутренняя архитектура — описание быстрой JVM реализации Excelsior JET с компиляцией в машинный код,
  10. Никита Липский и Павел Павлов — Excelsior JET: обзор возможностей — описание быстрой JVM реализации Excelsior JET с компиляцией в машинный код,
  11. Nikita Lipsky — AOT компиляция — статическая компиляция JVM в Excelsior JET, её преимущества и возможности по сравнению с обычной компиляцией,
  12. Nikita Lipsky — Java худеет. Уменьшение размера дистрибутива Java приложения без зависимостей — использование статического компилятора Excelsior JET для уменьшения размеров дистрибутивов Java приложений,
  13. Никита Липский и Миша Быков — Занимательные истории из жизни техподдержки JVM — о техподержке JVM Excelsior JET, о Excelsior JET и об особенностях реализации JVM, различия между JVM и проблемы при переходе между разными JVM,
  14. Алексей Шипилёв — OpenJDK Frameworks: jmh & jcstress
  15. Шура Ильин — OpenJDK Test Base
  16. Шура Ильин — JTReg: OpenJDK test harness
  17. Шура Ильин — OpenJDK TestFest Intro
  18. Alexey Fyodorov — JDK: CPU, PSU, LU, FR – WTF??? — рассказывается о четырех типах обновлений JDK в компании Oracle (Critical Patch Update (CPU), Patch Set Update (PSU), Limited Update (LU) and Feature Release (FR)). Чем отличаются типы обновления, какие изменения возможны в каждом типе обновлений.

6.7 Аспектно-ориентированное программирование


  1. Николай Гарбузов, Донривер — Аспектно-ориентированное решение классических проблем
  2. Игорь Сухоруков. AspectJ Scripting

6.8 Рефлексия и Invokedynamic


  1. Владимир Иванов — Invokedynamic: роскошь или необходимость?
  2. Владимир Иванов — Глубокое погружение в invokedynamic

6.9 Работа с нативными библиотеками и кодом (JNI/JNA)


  1. Петр Кудрявцев — Эффективная разработка Java приложений с использованием JNI/JNA технологий

6.10 Особенности языка Java


  1. Владимир Ситников, NetCracker — Выражаемся регулярно — описание регулярных выражений, их использования и проблем,
  2. Алексей Рагозин — Структуры данных в Java, изобретаем заново — описание реализации коллекций в Java и возможные методы их улучшения,
  3. Светлана Исакова — Простыми словами про вывод типов

7. Качество кода и вопросы архитектуры


7.1 Рефакторинги, качество кода, методики программирования


  1. Яков Сироткин, Никита Липский, Олег Анастасьев, Филипп Дельгядо — Рефакторинги и технический долг
  2. Антон Кекс — Как нам спасти Java? — Часть 1 — о проблемах Java, о том как можно сделать Java лучше, какие привычные подходы программирования в Java на самом деле больше вредны, чем полезны,
  3. Антон Кекс — Как нам спасти Java? — Часть 2 — о проблемах Java, о том как можно сделать Java лучше, какие привычные подходы программирования в Java на самом деле больше вредны, чем полезны,
  4. Николай Чашников — Писать код быстрее, ошибаться реже
  5. Николай Чашников — Разработка API в Java-проекте
  6. Николай Алименков — Парадигмы ООП
  7. Михаил Ершов — Разработка совместимого API
  8. Nikolay Chashnikov — Write code faster with fewer errors: is it possible? — как избегать ошибок при написании кода,

7.2 Архитектура, бизнес правила, бизнес модель и примеры приложений


  1. Антон Кекс — Архитектура интернет-банка без Enterprise
  2. Константин Кривопустов — Выбор технологий для корпоративного приложения
  3. Александр Тоболь — Платформа для видео сроком в квартал
  4. Антон Кекс — Как я создал desktop-приложение на Java, скачанное 9 миллионов раз
  5. Виктор Полищук — JBoss Drools Expert против грязи — описание системы управления бизнес правилами JBoss Drools
  6. Дмитрий Завалишин и Александр Шлянников — Java-технологии в Digital Zone — примеры реализаций приложений в Digital Zone (использование груви скриптов для гибкой настройки бизнес модели системы приложения такси)
  7. Яков Сироткин — Почему геномный ассемблер нельзя написать за выходные? — история разработки геномного ассемблера
  8. Яков Сироткин — История релизов — продолжение истории разработки геномного ассемблера
  9. Евгений Борисов — eXtreme Application Platform (XAP)
  10. Барух Садогурский — Bintray: Масштабируемый сервис в облаке с нуля
  11. Anatoliy Sokolenko — Key Problems of Microservice Architecture — что такое сервисы и микросервисы, как их реализовать на практике, чем это лучше стандартной архитектуры и какие проблемы возникают при такой архитектуре,
  12. Izzet Mustafaiev — Fault tolerance – look, it’s possible!
  13. Oleg Tsal-Tsalko — Distributed systems and scalability rules
  14. Baruch Sadogursky — Everything you wanted to know about async HTTP apps in Java — о написании асинхронного менеджера загрузок с параллельной загрузок файлов, одного файла, прерывания и паузы для программы репозиторий
  15. Maxim Ivanov — Hey, I’ve seen something like it before! — подходы к принятию архитектурных решений. Хайп (использования модных базвордов — микросервисов, nosql и т.п. ради базвордов) и его последствия для архитекторов.

7.3 Тестирование приложений


  1. Глеб Смирнов — Мутационное тестирование, или О чём молчит Code Coverage — описание почему 100% Code Coverage у Unit тестов не гарантирует правильную работу кода, что такое мутационное тестирование и как оно помогает улучшить Unit тесты, описание мутационной системы pitest (http://pitest.org/)
  2. Алексей Рагозин — Как и зачем эмулировать распределённый кластер в JVM — описание библиотеки, которая позволяет для задач Unit тестирования эмулировать распределённый кластер на одной ноде
  3. Алексей Рагозин — Сеть — это большая JVM — часть 2 лекции » Как и зачем эмулировать распределённый кластер в JVM «
  4. Mikalai Alimenkou — «TDD for database related code, how is it possible?» — описание TDD методологии
  5. Katya Kameneva — How I lost my QA job — о внедрении TDD технологий
  6. Dmytro Chyzhykov — Testing Web Apps with Spring Framework — тестирование Spring MVC приложений
  7. Андрей Солнцев — Пацан накодил — пацан протестил!

8. Прочее


  1. Алексей Вишенцев и Илья Агошков — Advanced Deployment
  2. Дмитрий Черепанов — Self-contained Application
  3. Сергей Куксенко — Quantum Performance Effects
  4. Кузьма Деретюк — UrsaJ HTTP File Storage
  5. Дмитрий Чуйко — Java Mission Control
  6. Igor Khotin — The Craft of Metaprogramming on JVM — о метапрограммировании в Java

Update: Внимание, актуальная версия со всеми ссылками на видео находиться теперь в моем github’e проекте useful-java-links, по этой ссылке.

Общее оглавление ‘Шпаргалок’

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *