Программирование {BookFlow}
16.2K subscribers
1.58K photos
468 videos
145 files
2.1K links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций, новости технологий.

Группа в https://vk.com/bookflow.

По всем вопросам @evgenycarter

РКН https://clck.ru/3KoAbH
Download Telegram
Программирование на Java
Автор: Патрик Нимейер, Дэниэл Леук

Описание:
Если вы новичок, то перед вами практическое пособие по изучению свойств и интерфейса языка Java. Авторы Патрик Нимейер и Дэниэл Леук, используя великолепные, реалистичные и забавные примеры, познакомят вас с основами языка Java, включая его библиотеки классов, приемы программирования и идиомы, а также примеры создания реальных приложений.
Если у вас уже есть опыт работы с Java, эта книга быстро выведет вас на требуемый уровень по параллельным программам, таким как приложения Java для веб-сервисов и XML. Вы изучите мощные новые средства управления ресурсами и исключениями в ваших приложениях.

· Изучайте базовый язык Java – базовый синтаксис, классы и объекты, и другие компоненты;
· Разрабатывайте на Java, используя компилятор, интерпретатор и другие инструменты
· Исследуйте встроенные средства для работы с потоками и пакеты для поддержки параллелизма
· Осваивайте обработку текста и интерфейс мощных регулярных выражений
· Пишите современные сетевые или базирующиеся на веб-технологиях приложения и сервисы
· Создавайте графические приложения, используя компонентную архитектуру Java
· Осваивайте новые мощные функциональные интерфейсы, в том числе и только что появившиеся в Java 8
· Работайте с XML и XSLT , включая XML Schema, валидацию, XPath и XInclude

#Java@bookflow #book@bookflow
Алгоритмы. Справочник с примерами на C, C++, Java и Python (2017)
Автор: Джордж Хайнеман, Гари Поллис, Стэнли Селков

Если вы считаете, что скорость решения той или иной задачи зависит, в первую очередь, от мощности компьютера, на котором она решается, то эта книга станет для вас откровением с самой первой страницы. Вы узнаете, что наибольший вклад в производительность программы вносят правильно выбранный алгоритм и его реализация в виде компьютерной программы. Выбор подходящего алгоритма среди массы других, способных решить вашу задачу, - дело не из самых простых, и этому вы тоже научитесь в данной книге.
В новом издании описано множество алгоритмов для решения задач из самых разных областей, и вы сможете выбрать и реализовать наиболее подходящий для ваших задач алгоритм. Здесь даже совершенно незнакомый с математикой читатель найдет все, что нужно для понимания и анализа производительности алгоритма.
Написанная профессионалами в своей области, книга достойна занять место на книжной полке любого практикующего программиста.
Эта книга потрясающая по трем причинам: в ней легко найти нужные алгоритмы и структуры данных; стиль изложения материала - скорее разговорный, чем академический; внимание читателя постоянно акцентируется на сравнительном анализе производительности алгоритмов. Если вы живете в реальном мире, эта книга навсегда изменит ваш способ использования структур данных.

tglink.me/bfbook/370

#book@bookflow #cpp@bookflow #java@bookflow #python@bookflow
https://tglink.me/bfbook/370
Java Programming (2018) Автор: Joyce Farrell

tglink.me/bfbook/442

Discover the power of Java for developing applications today when you trust the engaging, hands-on approach in Farrell's JAVA PROGRAMMING, 9E. Even if you're a first-time programmer, JAVA PROGRAMMING can show you how to quickly start developing useful programs, all while still mastering the basic principles of structured and object-oriented programming. Unique, reader-friendly explanations and meaningful programming exercises emphasize business applications and game creation while useful debugging exercises and contemporary case problems further expand your understanding. Additional digital learning resources within MindTap provide interactive learning tools as well as coding IDE (Integrated Development Environment) labs for practicing and expanding your skills.

tglink.me/bfbook/442

#book@bookflow #java@bookflow
https://tglink.me/bfbook/442
Разработка обслуживаемых программ на языке Java
Джуст Виссер

Скачать книгу

Вы когда-нибудь ощущали разочарование, работая с чужим кодом? Сегодня трудности сопровождения исходного кода представляют важную проблему разработки программного обеспечения, приводящую к дорогостоящим срывам сроков и ошибкам. Подключайтесь к ее решению. Данное практическое руководство познакомит вас с 10 простыми рекомендациями, помогающими писать программное обеспечение, которое легко поддерживать и адаптировать. Эти тезисы сформулированы на основании анализа сотен реальных систем.
Написанная консультантами компании Software Improvement Group (SIG), книга содержит ясные и краткие советы по применению рекомендаций на практике. Примеры для этого издания написаны на языке Java, но существует аналогичная книга с примерами на языке C#.

#book #java
Самоучитель Java с примерами и программами
А. Васильев

Скачать книгу

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

#book #java
Java. Оптимизация программ. Практические методы повышения производительности приложений в JVM
Эванс Бенджамин, Джеймс Гоф, Ньюланд Крис

Скачать книгу

Узнайте, как принципы и технологии Java наилучшим образом используют современные аппаратные средства и операционные системы.
Исследуйте различные тесты производительности и распространенные антипаттерны, которые могут завести вашу команду в тупик.
Изучите ловушки измерений показателей производительности Java и недостатки микротестирования.
Погрузитесь в сборку мусора, протоколирование, мониторинг, настройки и инструменты JVM.
Исследуйте JIT-компиляцию и методы повышения производительности в языке Java.
Изучите аспекты производительности API коллекций и вопросы параллельных вычислений в Java.

#book #java
Java Concurrency in Practice / Параллельное программирование в JAVA на практике (2018г)

Брайан Готц, Тим Пайерлс, Джошуа Блох, Джозеф Боубир, Дэвид Холмс, Дуг Ли

Скачать книгу

Книга будет полезна в первую очередь для Java разработчиков. Все повествование в книге идет вокруг джавовских примитивов синхронизации и классов, полезных при написании параллельных программ.
Книгу отличает практический подход к изложению, в ней очень много небольших листингов (в среднем около 20 на главу), отражающих все моменты, описываемые в тексте.

#book #java
Программирование на Java
Нимейер П., Леук Д.

Скачать книгу

Комплексное руководство по освоению языка программирования Java с многочисленными подробными и реалистичными примерами. Если вы - начинающий программист, то книга станет незаменимым помощником для того, чтобы стать профессионалом, а если у вас уже есть опыт работы - вы узнаете о многочисленных тонкостях и разберетесь в самых новых средствах для создания приложений и сервисов. Описаны новинки, появившиеся в Java 8.

#book #java
Какие типы Java могут имплементировать интерфейсы?

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

В основном существуют 5 типов Java, которые могут реализовывать интерфейсы:

1. Обычный класс
2. Абстрактный класс
3. Вложенный класс
4. Enum
5. Динамический прокси

Подписывайтесь на канал 👉@coddy_academy

#java
👍1
​Anonymous Messenger – Одноранговый мессенджер, работающий через tor.

Функционал:
• Голосовые сообщения
• Живые голосовые вызовы через tor (альфа-функция)
• Текстовые сообщения
• Медиа-сообщения с удаленными метаданными
• Отправка необработанных файлов любого размера (100 ГБ +)
• Исчезающие сообщения по умолчанию
• Зашифрованное хранилище файлов на Android
• Шифрование по протоколу Диффи-Хеллмана

#GitHub | #Java #Messenger

👉 @Githublib
👍8
MicroG - это свободная реализация проприетарных библиотек Google с открытым исходным кодом, которая заменяет службы Google Play в операционной системе Android.

Грубо говоря, это фреймворк, позволяющий приложениям, предназначенным для Google Play Services, работать в системах, где Play Services недоступны.

#Java #Implementation

👉 @Githublib
👍8
Совет по java💡

Обычно при сортировке в Spring Data мы указываем свойство, по которому хотим отсортировать, как строку. Однако существует класс TypedSort, который дает нам возможность передавать функцию в качестве параметра для сортировки. Это повышает безопасность типов в нашем коде.

#java

👉 @bookflow
👍5
MicroG - это свободная реализация проприетарных библиотек Google с открытым исходным кодом, которая заменяет службы Google Play в операционной системе Android.

Грубо говоря, это фреймворк, позволяющий приложениям, предназначенным для Google Play Services, работать в системах, где Play Services недоступны.

#Java

👉 @bookflow
👍4
Что происходит внутри HashMap.put()?

1. Вычисляется хэш ключа. Если ключ null, хэш считается равным 0. Чтобы достичь лучшего распределения, результат вызова hashCode() «перемешивается»: его старшие биты XOR-ятся на младшие.

2. Значения внутри хэш-таблицы хранятся в специальных структурах данных – нодах, в массиве. Из хэша высчитывается номер бакета – индекс для значения в этом массиве. Полученный хэш обрезается по текущей длине массива. Длина – всегда степень двойки, так что для скорости используется битовая операция &.

3. В бакете ищется нода. В ячейке массива лежит не просто одна нода, а связка всех нод, которые туда попали. Исполнение проходит по этой связке (цепочке или дереву), и ищет ноду с таким же ключом. Ключ сравнивается с имеющимися сначала на ==, затем на equals.

4. Если нода найдена – её значение просто заменяется новым. Работа метода на этом завершается.

5. Если ноды с таким же ключом в бакете пока нет – добавляемая пара ключ-значение запаковывается в новый объект типа Node, и прикрепляется к структуре существующих нод бакета. Ноды составляют структуру за счет того, что в ноде хранится ссылка на следующий элемент (для дерева – следующие элементы). Кроме самой пары и ссылок, чтобы потом не считать заново, записывается и хэш ключа.

6. В случае, когда структурой была цепочка а не дерево, и длина цепочки превысила 7 элементов – происходит процедура treeification – превращение списка в самобалансирующееся дерево. В случае коллизии это ускоряет доступ к элементам на чтение с O(n) до O(log(n)). У comparable-ключей для балансировки используется их естественный порядок. Другие ключи балансируются по порядку имен их классов и значениям identityHashCode-ов. Для маленьких хэш-таблиц (< 64 бакетов) «одеревенение» заменяется увеличением (см. п.8).

7. Если новая нода попала в пустую ячейку, заняла новый бакет – увеличивается счетчик структурных модификаций. Изменение этого счетчика сообщит всем итераторам контейнера, что при следующем обращении они должны выбросить ConcurrentModificationException.

8. Когда количество занятых бакетов массива превысило пороговое (capacity * load factor), внутренний массив увеличивается вдвое, а для всего содержимого выполняется рехэш – все имеющиеся ноды перераспределяются по бакетам по тем же правилам, но уже с учетом нового размера.

#java

👉 @Bookflow
👍61
Чем синхронный сервер отличается от асинхронного?

Вопрос может быть сформулирован как «сравните Jetty и Netty», или «зачем нужен Spring WebFlux».

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

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

Альтернативное решение – асинхронные сервера. В них для потоков обработки HTTP-запросов используется work stealing. В широком смысле, вызовы асинхронных функций не блокируют выполнение, а их результат вместо return value возвращается параметром коллбэка. В Java этот результат зачастую возвращается в виде объекта Future.

Чтобы вся обработка запроса стала действительно асинхронной, необходимо также избавиться от блокирующих операций. Иначе преимущество подхода с work stealing выродится в простой пул потоков. Блокирующая работа с файлами и сетью должна быть заменена на NIO, а для БД должен быть использован асинхронный драйвер.

#Java

👉 @Bookflow
👍5
Совет по Java 💡

С помощью библиотеки Jinq (https://jinq.org) вы можете писать запросы к базам данных, используя потоки Java. Она обеспечивает стиль запросов, схожий с известной библиотекой .NET LINQ. Конечно, вы можете легко интегрировать Jinq с Spring Boot.

#java #jpa #streams
👉 @Bookflow
👍4🤔1
📌 Декоратор в Java: Как добавить логику без изменения кода?

🔹 Когда использовать?
- Когда нужно добавить поведение к объекту динамически.
- Когда нельзя или не хочется менять исходный код класса.
- Когда необходимо сохранить принцип открытости/закрытости (OCP из SOLID).

🔹 Как это работает?
Декоратор — это обёртка вокруг базового объекта. Он реализует тот же интерфейс, но внутри может добавлять новую логику.

Пример использования
Допустим, у нас есть базовый интерфейс Notifier, который отправляет уведомления:


public interface Notifier {
void send(String message);
}


И его простая реализация:


public class BasicNotifier implements Notifier {
@Override
public void send(String message) {
System.out.println("Отправка сообщения: " + message);
}
}


Теперь добавим декораторы, которые расширяют функциональность:
1️⃣ Декоратор для отправки в Slack:

public class SlackNotifierDecorator implements Notifier {
private final Notifier wrapped;

public SlackNotifierDecorator(Notifier wrapped) {
this.wrapped = wrapped;
}

@Override
public void send(String message) {
wrapped.send(message); // вызываем базовый метод
System.out.println("Дополнительно отправляем в Slack: " + message);
}
}


2️⃣ Декоратор для отправки в Email:

public class EmailNotifierDecorator implements Notifier {
private final Notifier wrapped;

public EmailNotifierDecorator(Notifier wrapped) {
this.wrapped = wrapped;
}

@Override
public void send(String message) {
wrapped.send(message);
System.out.println("Дополнительно отправляем Email: " + message);
}
}


🚀 Использование:

public class Main {
public static void main(String[] args) {
Notifier notifier = new BasicNotifier();
notifier = new SlackNotifierDecorator(notifier);
notifier = new EmailNotifierDecorator(notifier);

notifier.send("Привет, мир!");
}
}


🔥 Что произойдет?

Отправка сообщения: Привет, мир!
Дополнительно отправляем в Slack: Привет, мир!
Дополнительно отправляем Email: Привет, мир!


🎯 Итог:
Мы не изменяли код BasicNotifier, но добавили новую функциональность.
Гибкость: можем легко комбинировать декораторы в любом порядке.
Код остаётся чистым и расширяемым.

#java

👉 @Bookflow
👍5