📘 Грокаем функциональное мышление [2023] Эрик Норманд
📗 Grokking Simplicity: Taming complex software with functional thinking [2021] Eric Normand
💾 Скачать книги
Функциональное программирование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и админу на кофе:
ЮMoney:
📗 Grokking Simplicity: Taming complex software with functional thinking [2021] Eric Normand
💾 Скачать книги
Функциональное программирование — парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и админу на кофе:
ЮMoney:
410012169999048
Карта ВТБ: 4272290768112195
Карта Сбербанк: 2202200638175206
#javascript #java #lisp #программирование #функциональное_программирование❤38👍26🔥5❤🔥3
📙 Программируем на Java. 5-е издание [2023] Марк Лой, Дэниэл Лук, Патрик Нимайер
📗 Learning Java: An Introduction to Real-World Programming with Java [2020] Marc Loy, Patrick Niemeyer, Daniel Leuck
📕 Learning Java: An Introduction to Real-World Programming with Java (Early Release) [2023] Marc Loy, Patrick Niemeyer, Daniel Leuck
💾 Скачать книги
☕️ Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process; язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle.
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и админу на кофе:
ЮMoney:
📗 Learning Java: An Introduction to Real-World Programming with Java [2020] Marc Loy, Patrick Niemeyer, Daniel Leuck
📕 Learning Java: An Introduction to Real-World Programming with Java (Early Release) [2023] Marc Loy, Patrick Niemeyer, Daniel Leuck
💾 Скачать книги
☕️ Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process; язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle.
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и админу на кофе:
ЮMoney:
410012169999048
Карта ВТБ: 4272290768112195
Карта Сбербанк: 2202200638175206
#java #web #программирование #подборка_книг👍32🔥7❤6❤🔥2💯1
📒 Numerical Methods Using Kotlin [2023] Haksun Li, PhD
💾 Скачать книгу
Узнайте, что Kotlin имеет много преимуществ перед Java в своей скорости, а в некоторых случаях и простоте использования. В этой книге вы увидите, как это может помочь вам легко создавать решения для ваших сложных инженерных задач и задач, связанных с обработкой данных. Прочитав эту книгу, вы получите знания, необходимые для создания собственных численных моделей и алгоритмов с использованием языка программирования Kotlin.
#kotlin #java #программирование #численные_методы #numerical_methods
💾 Скачать книгу
Узнайте, что Kotlin имеет много преимуществ перед Java в своей скорости, а в некоторых случаях и простоте использования. В этой книге вы увидите, как это может помочь вам легко создавать решения для ваших сложных инженерных задач и задач, связанных с обработкой данных. Прочитав эту книгу, вы получите знания, необходимые для создания собственных численных моделей и алгоритмов с использованием языка программирования Kotlin.
#kotlin #java #программирование #численные_методы #numerical_methods
👍27⚡2🆒1
📗 Clojure на производстве. Зипперы, базы данных, REPL [2023] Гришаев
💳 Купить книгу
💾 Ознакомиться с книгой
⚠️ Книги предоставляется вам для ознакомления и не для распространения
Если Вы обдумываете проект, который требовал бы Java Database Connectivity – рассмотрите Clojure для реализации своих задач.
Clojure — совершенно другой язык по сравнению с уже традиционными языками разработки, которые используют и к которым давно привыкли. Этот ЯП хорошо подходит для параллельного программирования. Предоставляет такие инструменты для работы с потоками, как программная транзакционная память и изменяемые ссылки. Это довольно интерактивный язык — в нем есть возможность написать функцию и сразу из редактора запустить её - проверить и посмотреть, как она работает.
Самый большой плюс Clojure в его функциональности и неизменяемости функций. Ещё из плюсов
— в Clojure можно использовать любые библиотеки из Java и JavaScript. Это огромный плюс языка
— сам по себе он достаточно маленький и людей на нем работает не очень много. Поэтому отлично, что можно использовать сторонние системы. #Clojure #JVM #Java #Lisp #web #программирование
💳 Купить книгу
💾 Ознакомиться с книгой
⚠️ Книги предоставляется вам для ознакомления и не для распространения
Если Вы обдумываете проект, который требовал бы Java Database Connectivity – рассмотрите Clojure для реализации своих задач.
Clojure — совершенно другой язык по сравнению с уже традиционными языками разработки, которые используют и к которым давно привыкли. Этот ЯП хорошо подходит для параллельного программирования. Предоставляет такие инструменты для работы с потоками, как программная транзакционная память и изменяемые ссылки. Это довольно интерактивный язык — в нем есть возможность написать функцию и сразу из редактора запустить её - проверить и посмотреть, как она работает.
Самый большой плюс Clojure в его функциональности и неизменяемости функций. Ещё из плюсов
— в Clojure можно использовать любые библиотеки из Java и JavaScript. Это огромный плюс языка
— сам по себе он достаточно маленький и людей на нем работает не очень много. Поэтому отлично, что можно использовать сторонние системы. #Clojure #JVM #Java #Lisp #web #программирование
👍35🔥13❤🔥4❤2
📚 Книжная серия. Бестселлеры O'Reilly [121 книга] [2008-2023]
💾 Скачать книги
Серия "Бестселлеры O'Reilly" познакомит читателя с различными областями программирования. Это уникальная серия "визуальных" книг, созданных по последним методикам эффективного обучения. Книги имеют огромное количество иллюстраций, графиков и таблиц, что позволяет усваивать материал намного эффективнее. Разговорный стиль изложения концентрирует внимание читателя, а упражнения, контрольные вопросы и задания позволяют эффективно закрепить полученные знания. #подборка_книг #программирование #алгоритмы #java #cpp #javascript #python #linux #html #css #php #машинное_обучение
📖 Вы можете купить книгу в бумаге по лучшим условиям. -35% по промокоду: MATH CODE Подробности тут
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💾 Скачать книги
Серия "Бестселлеры O'Reilly" познакомит читателя с различными областями программирования. Это уникальная серия "визуальных" книг, созданных по последним методикам эффективного обучения. Книги имеют огромное количество иллюстраций, графиков и таблиц, что позволяет усваивать материал намного эффективнее. Разговорный стиль изложения концентрирует внимание читателя, а упражнения, контрольные вопросы и задания позволяют эффективно закрепить полученные знания. #подборка_книг #программирование #алгоритмы #java #cpp #javascript #python #linux #html #css #php #машинное_обучение
📖 Вы можете купить книгу в бумаге по лучшим условиям. -35% по промокоду: MATH CODE Подробности тут
⚠️ Книги предоставляется вам для ознакомления и не для распространения
👍86🔥23❤12🤨6❤🔥4🥰2👏2
📙 Troubleshooting Java: Read, debug, and optimize JVM applications [2023] Laurentiu Spilca
📕 Java устранение проблем [2023] Лауренциу Спилкэ
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💳 Купить книгу
💾 Ознакомиться c RU+EN
Эффективное чтение и понимание существующего кода - это сверхспособность разработчика. В этой книге вы освоите методы профилирования кода, расширенной отладки и анализа журналов для поиска и исправления ошибок и проблем с производительностью. В разделе Устранение неполадок Java: чтение, отладка и оптимизация приложений JVM вы узнаете, как:
• Определите, что делает код, когда вы видите его в первый раз.
• Выявлять проблемы с логикой кода
• Оценивайте дампы кучи для поиска утечек памяти
• Контролируйте потребление процессора для оптимизации выполнения
• Используйте дампы потоков для поиска и устранения взаимоблокировок
• Легко использовать сервис-ориентированную систему или систему микросервисов
• Правильно используйте ведение журнала, чтобы лучше понять выполнение Java-приложения
• Эффективно использовать Java-отладчики
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и на кофе:
ЮMoney:
📕 Java устранение проблем [2023] Лауренциу Спилкэ
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💳 Купить книгу
💾 Ознакомиться c RU+EN
Эффективное чтение и понимание существующего кода - это сверхспособность разработчика. В этой книге вы освоите методы профилирования кода, расширенной отладки и анализа журналов для поиска и исправления ошибок и проблем с производительностью. В разделе Устранение неполадок Java: чтение, отладка и оптимизация приложений JVM вы узнаете, как:
• Определите, что делает код, когда вы видите его в первый раз.
• Выявлять проблемы с логикой кода
• Оценивайте дампы кучи для поиска утечек памяти
• Контролируйте потребление процессора для оптимизации выполнения
• Используйте дампы потоков для поиска и устранения взаимоблокировок
• Легко использовать сервис-ориентированную систему или систему микросервисов
• Правильно используйте ведение журнала, чтобы лучше понять выполнение Java-приложения
• Эффективно использовать Java-отладчики
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и на кофе:
ЮMoney:
410012169999048
Карта ВТБ: 4272290768112195
Карта Сбербанк: 2202200638175206
#программирование #Java #JVM #GPU #оптимизация #рефакторинг👍39🔥7❤6❤🔥2
📕 Apache Pulsar в действии [2023] Хьеррумгор Д.
📗 Apache Pulsar in Action [2021] David Kjerrumgaard
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💳 Купить книгу
💾 Ознакомиться с книгами RU+EN
Apache Pulsar — это платформа распределенного обмена сообщениями и потоковой передачи данных с открытым исходным кодом. Изначально она была разработана в компании Yahoo. УТП Pulsar — сегментированная архитектура, в которой о хранении данных полностью заботится Apache Bookkeeper.
Книга «Apache Pulsar в действии» предназначена для абсолютных новичков в Pulsar и является сочетанием информации, собранной автором во время непосредственного сотрудничества с основателями Pulsar в процессе активной разработки этой платформы, и опыта, накопленного во время работы с организациями, включившими Apache Pulsar в производственный процесс.
Издание придаст уверенности при разработке приложений потоковой обработки и микросервисов с спользованием Pulsar и языка программирования Java. Несмотря на то, что автор книги решил использовать Java для большинства примеров кода из-за личного знакомства с этим языком, он также создал аналогичный комплект исходного кода с использованием Python и загрузил его в свою учетную запись GitHub для тех, кто предпочитает писать код на этом языке.
Книга «Apache Pulsar в действии» поможет создавать масштабируемые системы потокового обмена сообщениями с использованием Pulsar. Следуя четким описаниям и выполняя практические примеры, читатель будет использовать фреймворк Pulsar Functions для разработки приложения на основе микросервисов.
Основные темы книги:
• Публикации сообщений из Pulsar в сторонние репозитории данныхи на другие платформы;
• Проектирование и разработка функций Apache Pulsar;
• Создание управляемого событиями приложения обработки заказов на доставку продуктов питания.
Издание предназначено для опытных разработчиков на языке Java. Предварительные знания о платформе Apache Pulsar не требуются. #java #apache #программирование
📗 Apache Pulsar in Action [2021] David Kjerrumgaard
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💳 Купить книгу
💾 Ознакомиться с книгами RU+EN
Apache Pulsar — это платформа распределенного обмена сообщениями и потоковой передачи данных с открытым исходным кодом. Изначально она была разработана в компании Yahoo. УТП Pulsar — сегментированная архитектура, в которой о хранении данных полностью заботится Apache Bookkeeper.
Книга «Apache Pulsar в действии» предназначена для абсолютных новичков в Pulsar и является сочетанием информации, собранной автором во время непосредственного сотрудничества с основателями Pulsar в процессе активной разработки этой платформы, и опыта, накопленного во время работы с организациями, включившими Apache Pulsar в производственный процесс.
Издание придаст уверенности при разработке приложений потоковой обработки и микросервисов с спользованием Pulsar и языка программирования Java. Несмотря на то, что автор книги решил использовать Java для большинства примеров кода из-за личного знакомства с этим языком, он также создал аналогичный комплект исходного кода с использованием Python и загрузил его в свою учетную запись GitHub для тех, кто предпочитает писать код на этом языке.
Книга «Apache Pulsar в действии» поможет создавать масштабируемые системы потокового обмена сообщениями с использованием Pulsar. Следуя четким описаниям и выполняя практические примеры, читатель будет использовать фреймворк Pulsar Functions для разработки приложения на основе микросервисов.
Основные темы книги:
• Публикации сообщений из Pulsar в сторонние репозитории данныхи на другие платформы;
• Проектирование и разработка функций Apache Pulsar;
• Создание управляемого событиями приложения обработки заказов на доставку продуктов питания.
Издание предназначено для опытных разработчиков на языке Java. Предварительные знания о платформе Apache Pulsar не требуются. #java #apache #программирование
👍32🔥9❤4❤🔥1😱1😍1
This media is not supported in your browser
VIEW IN TELEGRAM
В промышленных процедурных и объектных языках сборка мусора долго не использовалась. Предпочтение отдавалось ручному управлению памятью, как более эффективному и предсказуемому. Но со второй половины 1980-х годов технология сборки мусора стала использоваться и в директивных (императивных), и в объектных языках программирования, а со второй половины 1990-х годов всё большее число создаваемых языков и сред, ориентированных на прикладное программирование, включают механизм сборки мусора либо как единственный, либо как один из доступных механизмов управления динамической памятью. В настоящее время она используется в Оберон, Java, Python, Ruby, C#, D, F#, Go и других языках.
▪️Висячая ссылка (англ. dangling pointer) — это ссылка на объект, который уже удалён из памяти. После удаления объекта все сохранившиеся в программе ссылки на него становятся «висячими». Память, занимаемая ранее объектом, может быть передана операционной системе и стать недоступной, или быть использована для размещения нового объекта в той же программе. В первом случае попытка обратиться по «повисшей» ссылке приведёт к срабатыванию механизма защиты памяти и аварийной остановке программы, а во втором — к непредсказуемым последствиям. Появление висячих ссылок обычно становится следствием неправильной оценки времени жизни объекта: программист вызывает команду удаления объекта до того, как его использование прекратится.
▪️Утечки памяти — Создав объект в динамической памяти, программист может не удалить его после завершения использования. Если ссылающейся на объект переменной будет присвоено новое значение и на объект нет других ссылок, он становится программно недоступным, но продолжает занимать память, поскольку команда его удаления не вызывалась. Такая ситуация и называется утечкой памяти (англ. memory leak). Если объекты, ссылки на которые теряются, создаются в программе постоянно, то утечка памяти проявляется в постепенном увеличении объёма используемой памяти; если программа работает долго, объём используемой ею памяти постоянно растёт, и через какое-то время ощутимо замедляется работа системы (из-за необходимости при любом выделении памяти использовать свопинг), либо программа исчерпывает доступный объём адресного пространства и завершается с ошибкой.
#программирование #архитектура #многопоточность #сборщикмусора #cpp #java #coding #programming
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥82👍53❤16🤨2👨💻1🙈1
Есть два самых популярных способа создания строк:
1 —
String s1 = new String("Hello"); 2 —
String s2 = "Hello"; Разберем отличия.
▪️ 1. Место в памяти (Самое главное отличие) — Это отличие является корнем всех остальных различий.
🔸
String s1 = new String("Hello"); (Оператор new) ➖ Создает новый объект в Куче (Heap), независимо от того, какая строка там уже существует.
➖ Каждый вызов new String("Hello") гарантированно создает новый, уникальный объект в памяти.
🔸
String s2 = "Hello"; (Строковый литерал)➖ Строка создается и помещается в специальную область памяти — String Pool (Пул строк), который находится внутри кучи.
➖ Механизм String Pool: Перед созданием новой строки JVM проверяет, нет ли уже строки с таким же значением в пуле. Если есть — переменной просто присваивается ссылка на существующий объект. Если нет — тогда в пуле создается новый объект.
Наглядная аналогия:
➖ new String("Hello") — покупка нового, уникального экземпляра книги, даже если она уже есть в библиотеке.
➖ "Hello" — взятие книги из библиотеки. Если книга есть — вы получаете именно её. Если нет — библиотека сначала покупает новую, а вы её берете.
▪️ 2. Поведение при сравнении (==). Оператор == сравнивает ссылки на объекты, а не их содержимое. Из-за различий в памяти поведение будет разным.
String s1 = new String("Hello");
String s2 = "Hello";
String s3 = "Hello";
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // true➖ s1 == s2 -> false, потому что s1 ссылается на объект в куче, а s2 — на объект в String Pool. Это два разных объекта в памяти.
➖ s2 == s3 -> true, потому что обе переменные ссылаются на один и тот же объект в String Pool.
Для сравнения содержимого строк всегда используйте метод equals():
System.out.println(s1.equals(s2)); // true (сравнивается содержимое "Hello")
System.out.println(s2.equals(s3)); // true
▪️ 3. Производительность
🔸Строковый литерал ("Hello") — более эффективен. Он избегает создания дубликатов в памяти, что экономит память и ускоряет работу, так как не нужно создавать новый объект, если он уже существует в пуле.
🔸Оператор new — менее эффективен. Он принудительно создает новый объект в куче, даже если идентичная строка уже существует. Это может привести к избыточному расходу памяти.
▪️ 4. Количество создаваемых объектов
🔸
String s1 = new String("Hello"); — Может создать 1 или 2 объекта.➖ 1. Строковый литерал "Hello" сначала ищется в String Pool. Если его нет — он создается в пуле. (Первый возможный объект).
➖ 2. Затем ключевое слово new создает новый объект String в куче. (Второй объект).
Таким образом, если строка "Hello" ранее не существовала в пуле, эта строка кода создаст два объекта.
🔸
String s2 = "Hello";➖ Создает 0 или 1 объект.
➖ JVM ищет "Hello" в String Pool. Если находит — объект не создается, переменной присваивается существующая ссылка (0 новых объектов).
➖ Если не находит — создает новый объект в String Pool (1 новый объект).
▪️Метод intern() — мостик между двумя подходами. Метод intern() позволяет вручную поместить строку из кучи в String Pool или получить ссылку на уже существующую там строку.
String s1 = new String("Hello");
String s2 = s1.intern(); // Помещаем строку в пул (или получаем ссылку из пула)
String s3 = "Hello";
System.out.println(s1 == s2); // false, т.к. s1 все еще в куче
System.out.println(s2 == s3); // true, т.к. s2 и s3 ссылаются на один объект в пулеВ этом примере
s1.intern() находит строку "Hello" в пуле (которая была создана при вычислении литерала внутри конструктора) и возвращает на неё ссылку, которую мы присваиваем s2.Практический вывод: Почти всегда следует использовать строковые литералы (
String s = "value";). Этот способ более эффективен по памяти и времени, так как использует механизм пула строк. #java #задачи #программирование #собеседования #IT #структуры_данных💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤26👍20🔥7✍2👨💻2❤🔥1⚡1
В Java существует важное правило (контракт):
1. Если две строки равны по
equals(), то их hashCode() ДОЛЖЕН быть одинаковым2. Обратное не обязательно верно: одинаковый
hashCode() не гарантирует равенства строкString s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
System.out.println(s1.equals(s2)); // true
System.out.println(s1.hashCode() == s2.hashCode()); // true
System.out.println(s1.equals(s3)); // true
System.out.println(s1.hashCode() == s3.hashCode()); // true
Метод hashCode() в классе String вычисляется на основе содержимого строки:
public int hashCode() {
int h = hash; // кэшированное значение
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}➖ Вычисляется по формуле:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]➖ Результат кэшируется в поле hash для производительности
➖ Для одинакового содержимого всегда одинаковый hashCode, независимо от того, как была создана строка
➖ value и hash — являются полями класса String и уже существуют в объекте, когда вызывается метод hashCode().
value — массив символов, который хранит собственно содержимое строки. Он инициализируется при создании объекта.
String s = "Hello"; // value = {'H', 'e', 'l', 'l', 'o'}hash — поле для кэширования вычисленного хэш-кода. Оно инициализируется по умолчанию значением 0.
Практическое применение в коллекциях: Связь hashCode и equals критически важна для работы хэш-коллекций:
🔸 HashMap/HashSet
Map<String, Integer> map = new HashMap<>();
map.put("Hello", 1);
map.put(new String("Hello"), 2); // Затрет предыдущее значение!
System.out.println(map.size()); // 1 - потому что ключи равны по equals()
1. Сначала сравниваются hashCode() — если разные, объекты точно разные
2. Если hashCode одинаковые, тогда вызывается equals() для точной проверки
🔸 Оптимизация сравнения
String s1 = "very long string ...";
String s2 = "another very long string ...";
// Сначала проверяется hashCode - быстрая операция
if (s1.hashCode() == s2.hashCode() && s1.equals(s2)) {
// Строки точно равны
}
▪️ 1. Коллизии хэшей — Разные строки могут иметь одинаковый hashCode (хэш-коллизия)
String a = "Aa";
String b = "BB";
System.out.println(a.hashCode()); // 2112
System.out.println(b.hashCode()); // 2112
System.out.println(a.equals(b)); // false
▪️ 2. Производительность
// Медленно - создается новый объект и вычисляется hashCode
String s1 = new String("Hello");
// Быстро - используется кэшированный hashCode из String Pool
String s2 = "Hello";
3. String Pool и hashCode
String s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
// Все три имеют одинаковый hashCode, но разные способы создания
System.out.println(s1.hashCode()); // одинаковый
System.out.println(s2.hashCode()); // одинаковый
System.out.println(s3.hashCode()); // одинаковый
🔍 Важные моменты. HashCode тесно связан со сравнением строк через:
1. Контракт Java — равные строки по equals() должны иметь одинаковый hashCode
2.. Оптимизацию сравнения — хэш используется для быстрой предварительной проверки
3. Работу коллекций — HashMap, HashSet и другие используют эту связь для эффективного хранения и поиска
#java #задачи #программирование #собеседования #IT #структуры_данных
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤27👍22🔥7❤🔥4👨💻3