Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.86K photos
38 videos
42 files
2.64K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
В ВТБ открыта вакансия Java-разработчика. На позиции вы будете:
— разрабатывать приложения с использованием микросервисной архитектуры;
— участвовать в code review;
— заниматься написанием unit-тестов.

Присоединяйтесь к ВТБ и вы получите:
— достойную заработную плату и соц.пакет;
— живые и интересные проекты;
— команда из лучших профессионалов, среди более 5000 IT-специалистов компании;
— карьерный рост и возможность выбора направления развития.

Отправляйте резюме до 23 апреля включительно: https://clc.am/lTzxjA
#вопросы_с_собеседований
Как вызывать default метод интерфейса в реализующем этот интерфейс классе?
interface Paper {
default void show() {
System.out.println("default show()");
}
}

class Licence implements Paper {
public void show() {
Paper.super.show();
}
}
#вопросы_с_собеседований
Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
Объявляем конкурс на самый интересный контент в телеграм-каналах Proglib!
Призовой фонд — 280 тысяч рублей.
Автор лучшего поста в отдельно взятом канале получает 20 тысяч рублей.
В каналах по языкам программирования, data science и мобильной разработке интересно увидеть топовые материалы по этим темам, в канале @progbook топовые рецензии на книги, в @proglibrary материалы по общим темам: проектирование, базы данных, linux, алгоритмы и структуры данных. Поощряются интерактивные форматы — авторские тесты, квизы, функционал которых встроен в Telegram, гифки, шпаргалки, неочевидные фишки.

Полный список каналов:
https://yangx.top/progbook
https://yangx.top/proglibrary
https://yangx.top/pyproglib
https://yangx.top/frontendproglib
https://yangx.top/javaproglib
https://yangx.top/dsproglib
https://yangx.top/phpproglib
https://yangx.top/cppproglib
https://yangx.top/mobileproglib
https://yangx.top/goproglib
https://yangx.top/csharpproglib
https://yangx.top/devopsslib
https://yangx.top/testerlib
https://yangx.top/hackproglib

Все посты будут с лайками и дизлайками и хэштегом #proglib_contest. Ссылки мы будем прогонять через наш сокращатель, будут браться в расчет лайки, дизлайки, охваты, клики по ссылкам. Чем больше лайков/охватов/кликов по ссылкам в публикации, тем больше шансов статьи победителем в конкурсе. Присылайте посты боту @proglib_contest_bot с указанием, на какой канал идет публикация. Юридическая информация здесь.
☕️ OutputStreamWriter — «мост» между классом OutputStream и классом Writer. Символы, записанные в поток, преобразовываются в байты.
☕️ InputStreamReader — аналог для чтения. При помощи методов класса Reader читаются байты из потока InputStream и далее преобразуются в символы.
Что такое Java-модули?

Java Platform Module System (JPMS) – система модулей, появившаяся в Java версии 9. Она разрабатывалась под названием Project Jigsaw, и ожидалась еще с Java 7.

Модуль – группа связанных пакетов и ресурсов. Механизм модулей определяет видимость содержимого одних модулей для других. Скрытые модули недоступны ни для обычного использования в коде, ни даже для рефлекшна: Class.forName() выбросит ClassNotFoundException.

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

Модуль определяется файлом объявления module-info.java.

JVM может работать относительно модулей в трех режимах:

• Legacy mode – применяется, когда код компилируется в режиме совместимости с версиями Java 8 и меньше. Весь код работает как безымянный модуль, флаги для настройки модулярности не работают.

• Single module mode – когда не используется флаг --module-source-path. Структура проекта остается старой, файл module-info.java лежит в директории /src. Поэтому иметь несколько модулей в одном проекте не получится.

• Multi-module mode – каждый модуль находится в собственной директории. Общая корневая директория передается в --module-source-path. Полноценное использование JPMS.

#Модули
⚡️Ищете работу или мечтаете поменять профессию?

Полезная информация для вас. За интересными вакансиями следите на профильном канале @pravkiforyou.

Этот канал публикует вакансии с тех пор, как по телеграму ходили динозавры 🦖. Там сразу все условия и прямые контакты работодателей, без посредников.

Молодых перспективных специалистов легче найти в телеграме, а подписаться на вакансии тут: https://yangx.top/pravkiforyou
Инкапсуляция

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

Более узкий и прикладной смысл инкапсуляции – принцип сокрытия данных. Так инкапсуляция достигается не только группировкой, но и ограничением доступа к внутренней реализации для других компонентов. Под компонентами здесь подразумеваются и более мелкие чем модуль части программы. Функция инкапсулирует локальные переменные, класс инкапсулирует приватные поля.

Термин тесно связан с понятием абстракции. Это техника разделения программного контракта и средств его реализации. Если проще, разделения на интерфейс и его имплементацию.

Понятие инкапсуляции присуще не только ООП. Абстракция данных применяется например и в функциональном программировании, модуляризация широко применима в процедурных языках.

#ООП
#вопросы_с_собеседований
Как выбрать все элементы определенного каталога по критерию (например, с определенным расширением)?
Метод File.listFiles() возвращает массив объектов File, содержащихся в каталоге. Метод может принимать в качестве параметра объект класса, реализующего FileFilter. Это позволяет включить в список только те элементы, для которых метод accept возвращает true (критерием может быть длина имени файла или его расширение).
Есть опыт и знания в IT, которыми Вы хотите поделиться ?

Станьте автором технических статей вместе с Proglib
и получайте достойное вознаграждение!

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

Интересующие направления для написания статей:
• DevOps
• Блокчейн
• Информационная безопасность
• Ruby on Rails
• C/ C++/ C#
• Java
• Go разработка
• Разработка игр
• Android-разработка
• iOS-разработка
• Системная аналитика
• Тестирование ПО
• Виртуальная реальность
• 1С
• Business Intelligence
• Интернет вещей
• Системы и сети
• IT Management

Оставьте заявку на https://proglib.io/w/186f13ee и мы свяжемся с вами!
LIFO и FIFO

Терминология, пришедшая в IT из бухучета. Так называют подходы к организации данных.

FIFO (First In, First Out, «первый пришел – первый ушел») – поведение как в очереди в магазине. Ему соответствует структура данных очередь). У такого хранилища две операции: enqueue – добавить элемент в конец, и dequeue – забрать из начала.

LIFO (Last In, First Out, «последний пришел – первый ушел» – наоборот, первый пришедший ждет всех остальных, подобно стопке тарелок. Соответственно, его реализует структура данных стек. Операция push кладет новый элемент наверх стопки, pop забирает сверху же.

Термины применяются не только к способу доступа к данным, но и к порядку разрешения конфликтов. Так, например, по принципу LIFO или FIFO может определяться порядок исполнения параллельно пришедших сигналов какой-либо системы: доступа к диску, планировки задач ОС, и прочих.

#Структуры
Погрузись в разработку на востребованном языке программирования Java!
Присоединяйся к бесплатному онлайн-интенсиву 24 апреля в 12:00 по московскому времени: 👉 https://clc.am/m0PPxw

Тебя ждут 6 часов мощной практики и теории, командная работа и постоянный обмен кодом 😎 Интенсив подойдёт как для начинающих, так и для опытных разработчиков!

⚡️ Познакомишься с enterprise-технологией в Java и микросервисной архитектурой.
⚡️ Узнаешь все стадии разработки приложений, научишься писать микросервисы для полноценного enterprise-проекта, и разберёшься в работе протокола HTTP и стандарте REST.
⚡️ На практике разработаешь корпоративный онлайн-чат на Java.

⚡️ У тебя будет полноценный готовый проект, который сможешь вложить себе в портфолио!

📣 Твоим наставником будет разработчик с 17-летним опытом, директор центра подбора IT-специалистов SymbioWay — Даниил Пилипенко.


🎁 Все участники получат электронную книгу «Век живи — век учись» Кей Петерсон и Дэвида Колба, а те, кто сдаст домашнюю работу, получат сертификат на 15 000 рублей на любой курс Skillbox.
Что такое О-нотация?

Для оценки сложности алгоритмов по времени или по памяти используется понятие "О большое". Например, алгоритм пузырьковой сортировки работает со скоростью O(n^2).

По определению, это ограничение асимптотической сложности сверху, с точностью до константного множителя. То есть, это описание, на что примерно будет похоже поведение алгоритма на большом объеме данных. В случае пузырьковой сортировки – это значит, что чем больше размер n массива данных, тем ближе количество операций для его сортировки будет подходить (не превышая) к (n*C)^2. Здесь C – любая фиксированная величина, не зависящая от n.

Два важных вывода, которые следуют из этого определения:
1. Константный множитель из О-нотации можно (и принято) выбрасывать: O(42*n) = O(n).
2. "Недоминантный компонент" тоже можно выбросить: O(n^2 + n) = O(n^2). Потому что n^2 + n < 2*n^2 при больших n.

Вопросу понятия и применения асимптотической оценки сложности посвящена глава VI книги Cracking the Coding Interview. Вот некоторые примеры сложностей алгоритмов:

#Алгоритмы
Библиотека программиста планирует организовать серию офлайн-мероприятий.
Мы создали опрос, чтобы учесть пожелания и интересы подписчиков, а также какие темы наиболее интересны. Опрос займет не более 3-х минут и пройти его можно тут.
Библиотека джависта | Java, Spring, Maven, Hibernate pinned «​Погрузись в разработку на востребованном языке программирования Java! Присоединяйся к бесплатному онлайн-интенсиву 24 апреля в 12:00 по московскому времени: 👉 https://clc.am/m0PPxw Тебя ждут 6 часов мощной практики и теории, командная работа и постоянный…»
Связный список

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

В пользовательском коде сохраняется адрес «головы» списка – первой ячейки. От нее по ссылкам можно дойти до любого элемента «хвоста».

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

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

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

#Структуры
☕️ 7 причин стать разработчиком на Java в 2021 году

Стремительно меняющиеся тренды, новые языки и высокие требования к коду ставят перед новичком вопрос: какой язык изучать, чтобы наверняка? Мы рекомендуем выбрать Java, несмотря на огромное
количество ультрамодных альтернатив.

https://proglib.io/sh/q8tzm6yx1V
В чем разница между агрегацией, композицией, и ассоциацией?

Ассоциация
– знание одного класса о другом. Например, класс Начальник может быть связан с классом Подчиненный отношением ассоциации, чтобы передавать ему запросы. Если и Подчиненный должен обращаться к Начальнику – ассоциация называется двунаправленной.

Агрегация и композиция – две разновидности ассоциации. Композиция подразумевает, что ассоциированный объект – «подобъект», составная часть, не имеющая смысла без ссылающегося. На практике, например, отношение композиции появляется когда мы выделяем часть свойств объекта в отдельную сущность.

Агрегация не подразумевает отношения владения. Это просто ссылка на другой, самостоятельный объект. Он может продолжить функционировать, если ссылающийся объект прекратит существование. Например, класс-контейнер агрегирует хранимые элементы.