Py4J – мост между Python и Java
Название Py4J можно встретить разве что в списке библиотек, используемых PySpark, но не стоит недооценивать данный инструмент, который обеспечивает совместную работу Python и Java. В этой статье будет кратко описана работа Py4J, рассмотрен пример использования и перечислены сильные и слабые стороны библиотеки. В конце будут описаны альтернативные способы связи Java и Python.
👉@BookJava
Название Py4J можно встретить разве что в списке библиотек, используемых PySpark, но не стоит недооценивать данный инструмент, который обеспечивает совместную работу Python и Java. В этой статье будет кратко описана работа Py4J, рассмотрен пример использования и перечислены сильные и слабые стороны библиотеки. В конце будут описаны альтернативные способы связи Java и Python.
👉@BookJava
👍5❤1
Как применить регулярное выражение в Java?
Регулярные выражения – мощный механизм работы со строками. Здесь мы не будем говорить о регулярных выражениях в целом, поговорим об их использовании в Java. Это становится возможно благодаря пакету
Работа с регулярными выражениями в Java начинается с класса Pattern. Это представление самого выражения, без привязки к целевому тексту. Создать его можно компиляцией строки, с помощью фабричного метода
Matcher – регулярное выражение, примененное к конкретному тексту. Пораждается вызовом метода
Работа с экземпляром
В объекте шаблона
👉@BookJava
Регулярные выражения – мощный механизм работы со строками. Здесь мы не будем говорить о регулярных выражениях в целом, поговорим об их использовании в Java. Это становится возможно благодаря пакету
java.util.regex
стандартной библиотеки.Работа с регулярными выражениями в Java начинается с класса Pattern. Это представление самого выражения, без привязки к целевому тексту. Создать его можно компиляцией строки, с помощью фабричного метода
Pattern.compile()
. Паттерн иммутабельный и потокобезопасный.Matcher – регулярное выражение, примененное к конкретному тексту. Пораждается вызовом метода
Pattern.matches()
. Одним паттерном можно порождать несколько разных матчеров. В отличие от паттерна, матчер мутирует. Он не безопасен для многопоточной среды. Основные операции регулярных выражений – перебор совпадений, доступ к группам, замена – реализованы именно в этом классе.Работа с экземпляром
Matcher
похожа на работу с итератором. Результат метода matches()
просто скажет, соответствует ли строка шаблону. Но после его вызова матчер поменяет состояние. Теперь, из него можно получить группы, позицию совпадения в тексте, а также произвести замену. В объекте шаблона
Pattern
реализованы несколько методов-сокращений, чтобы не использовать Matcher
явно. Например, просто проверить строку на соответствие выражению можно одним методом Pattern.matches()
.👉@BookJava
👍6👎1
Что будет выведено на экран?
Anonymous Poll
45%
AB
20%
195
22%
131
10%
Compiler Error
3%
Runtime Error
👍8👎2
Forwarded from Java Geek
Head First Java, 3rd Edition (2022) ePUB
Kathy Sierra, Bert Bates, Trisha Gee
Head First Java is a complete learning experience in Java and object-oriented programming. With this book, you'll learn the Java language with a unique method that goes beyond how-to manuals and helps you become a great programmer. Through puzzles, mysteries, and soul-searching interviews with famous Java objects, you'll quickly get up to speed on Java's fundamentals and advanced topics including lambdas, streams, generics, threading, networking, and the dreaded desktop GUI. If you have experience with another programming language, Head First Java will engage your brain with more modern approaches to coding--the sleeker, faster, and easier to read, write, and maintain Java of today.
Скачать книгу
@java_geek
Kathy Sierra, Bert Bates, Trisha Gee
Head First Java is a complete learning experience in Java and object-oriented programming. With this book, you'll learn the Java language with a unique method that goes beyond how-to manuals and helps you become a great programmer. Through puzzles, mysteries, and soul-searching interviews with famous Java objects, you'll quickly get up to speed on Java's fundamentals and advanced topics including lambdas, streams, generics, threading, networking, and the dreaded desktop GUI. If you have experience with another programming language, Head First Java will engage your brain with more modern approaches to coding--the sleeker, faster, and easier to read, write, and maintain Java of today.
Скачать книгу
@java_geek
👍4
Какая разница между абстрактным классом и интерфейсом?
Абстрактный класс:
• абстрактные классы имеют дефолтный конструктор; он вызывается каждый раз, когда создается потомок этого абстрактного класса;
• содержит как абстрактные методы, так и не абстрактные. По большому счету может и не содержать абстрактных методов, но все равно быть абстрактным классом;
• класс, который наследуется от абстрактного, должен реализовать только абстрактные методы;
• абстрактный класс может содержать Instance Variable
Интерфейс:
• не имеет никакого конструктора и не может быть инициализирован;
• только абстрактные методы должны быть добавлены (не считая default methods);
• классы, реализующие интерфейс, должны реализовать все методы (не считая default methods);
• интерфейсы могут содержать только константы.
👉@BookJava
Абстрактный класс:
• абстрактные классы имеют дефолтный конструктор; он вызывается каждый раз, когда создается потомок этого абстрактного класса;
• содержит как абстрактные методы, так и не абстрактные. По большому счету может и не содержать абстрактных методов, но все равно быть абстрактным классом;
• класс, который наследуется от абстрактного, должен реализовать только абстрактные методы;
• абстрактный класс может содержать Instance Variable
Интерфейс:
• не имеет никакого конструктора и не может быть инициализирован;
• только абстрактные методы должны быть добавлены (не считая default methods);
• классы, реализующие интерфейс, должны реализовать все методы (не считая default methods);
• интерфейсы могут содержать только константы.
👉@BookJava
👍14👎1
Какие два класса не наследуются от Object?
Ответ: Не ведитесь на провокации, нет таких классов: все классы прямо или через предков наследуются от класса Object!
👉@BookJava
Ответ: Не ведитесь на провокации, нет таких классов: все классы прямо или через предков наследуются от класса Object!
👉@BookJava
😁17👍4😱3
Forwarded from Java Geek
Метод split()
Возвращает массив строк, вычисленных путем разделения данной строки вокруг данного регулярного выражения.
Параметры:
@java_geek
Возвращает массив строк, вычисленных путем разделения данной строки вокруг данного регулярного выражения.
Параметры:
regex
— разграничение регулярного выражения;limit
— порог, результатом которого означает, как много строк, должно быть возвращено.@java_geek
👍3💩1
Как оптимизировать циклы с длинными переменными в Java
JIT-компилятор в OpenJDK повышает производительность Java за счет ряда оптимизаций, особенно в циклах. До недавнего времени многие оптимизации работали только тогда, когда индекс цикла был int переменной. В этой статье показано, как виртуальная машина HotSpot была обновлена, чтобы добавить те же оптимизации для long переменных. В статье рассматривается, в частности, проверка за пределами поля (также называемая проверкой диапазона ). Далее
original https://developers.redhat.com/articles/2022/08/25/optimize-loops-long-variables-java
👉@BookJava
JIT-компилятор в OpenJDK повышает производительность Java за счет ряда оптимизаций, особенно в циклах. До недавнего времени многие оптимизации работали только тогда, когда индекс цикла был int переменной. В этой статье показано, как виртуальная машина HotSpot была обновлена, чтобы добавить те же оптимизации для long переменных. В статье рассматривается, в частности, проверка за пределами поля (также называемая проверкой диапазона ). Далее
original https://developers.redhat.com/articles/2022/08/25/optimize-loops-long-variables-java
👉@BookJava
👍4
Forwarded from Java Geek
Метод insert()
Вставляет символы в данную строку буфера (StringBuffer). Подстрока добавляется перед указанным индексом.
@java_geek
Вставляет символы в данную строку буфера (StringBuffer). Подстрока добавляется перед указанным индексом.
@java_geek
👍1
Что позволяет сделать PriorityQueue?
Особенностью
Используя
👉@BookJava
Особенностью
PriorityQueue
является возможность управления порядком элементов. По-умолчанию, элементы сортируются с использованием «natural ordering
», но это поведение может быть переопределено при помощи объекта Comparator, который задаётся при создании очереди. Данная коллекция не поддерживает null
в качестве элементов.Используя
PriorityQueue
, можно, например, реализовать алгоритм Дейкстры для поиска кратчайшего пути от одной вершины графа к другой. Либо для хранения объектов согласно определённого свойства.👉@BookJava
👍3
Дженерики в исключениях – что можно, а что нельзя?
1. Можно выбрасывать исключение generic-типа.
Тип-параметр
2. Нельзя использовать дженерик в catch.
Множественные блоки
3. Нельзя параметризовать класс-исключение типами.
Если вы попытаетесь скомпилировать конструкцию вида
4. Можно реализовывать исключением generic-интерфейс.
Исключение вполне может быть например
#Дженерики
👉@BookJava
1. Можно выбрасывать исключение generic-типа.
Тип-параметр
T
может использоваться в throws
, переменная типа T
может использоваться в throw
. Недавно мы уже говорили об этом.2. Нельзя использовать дженерик в catch.
Множественные блоки
catch
должны идти без повторений, в определенном порядке – от специфичного класса к более базовому. Стирание типов-параметров в связи с этими правилами добавило бы путаницу, не неся особой пользы.3. Нельзя параметризовать класс-исключение типами.
Если вы попытаетесь скомпилировать конструкцию вида
class MyException<T> extends Throwable {}
, то увидете ошибку generic class may not extend java.lang.Throwable
.4. Можно реализовывать исключением generic-интерфейс.
Исключение вполне может быть например
Comparable
или Iterable
. Механизм обработки исключений работает на классах, никак не затрагивая интерфейсы.#Дженерики
👉@BookJava
👍2
Лучшие практики по управлению зависимостями в Java
Создавать Java-приложения очень просто, и для этого существует множество ресурсов. Чтобы ускорить разработку, многие используют фреймворки и библиотеки, которые выполняют часть тяжелой работы. Если посмотреть на современные Java-приложения, то почти все они содержат зависимости от библиотек, разработанных кем-то другим. Далее
👉@BookJava
Создавать Java-приложения очень просто, и для этого существует множество ресурсов. Чтобы ускорить разработку, многие используют фреймворки и библиотеки, которые выполняют часть тяжелой работы. Если посмотреть на современные Java-приложения, то почти все они содержат зависимости от библиотек, разработанных кем-то другим. Далее
👉@BookJava
👍1
Холостые циклы в Java
Привет, сегодня поговорим о тонкостях реализации холостых циклов (холостого ожидания) в Java. Эта задача встречается нечасто: за девять с небольшим лет работы я столкнулся с ней лишь пару раз. Тем не менее, тема видится интересной и по ней есть что сказать, так что добро пожаловать!
👉@BookJava
Привет, сегодня поговорим о тонкостях реализации холостых циклов (холостого ожидания) в Java. Эта задача встречается нечасто: за девять с небольшим лет работы я столкнулся с ней лишь пару раз. Тем не менее, тема видится интересной и по ней есть что сказать, так что добро пожаловать!
👉@BookJava
👍4
Для чего служит Java KeyStore?
KeyStore и TrustStore – это хранилища криптографических публичных и приватных ключей и сертификатов. Обычно они представляются файлами формата
Для манипуляций над файлами хранилищ в JDK поставляется специальная утилита – keytool. Отдельные ключи разных типов добавляются в хранилище под заданными именами (
KeyStore и TrustStore устроены похоже, но служат разным целям. KeyStore хранит данные о нашем приложении, тогда как TrustStore – о других, которым мы доверяем.
По умолчанию не подключается никакой KeyStore. Подключить его можно параметрами
По умолчанию в приложении подключен один
Типичный пример использования – подключить TrustStore с самоподписанным SSL сертификатом, чтобы приложение могло ходить на определенный сайт по протоколу HTTPS, не проваливая проверку безопасности. Либо же подключить KeyStore с подлинным SSL сертификатом, чтобы приложение само работало как HTTPS-сервер.
#Безопасность
👉@BookJava
KeyStore и TrustStore – это хранилища криптографических публичных и приватных ключей и сертификатов. Обычно они представляются файлами формата
.jks
, .dks
, .p12
, и другими, в зависимости от типа хранилища.Для манипуляций над файлами хранилищ в JDK поставляется специальная утилита – keytool. Отдельные ключи разных типов добавляются в хранилище под заданными именами (
alias
). Еще этот файл называют базой данных сертификатов. Этот файл обычно защищен паролем.KeyStore и TrustStore устроены похоже, но служат разным целям. KeyStore хранит данные о нашем приложении, тогда как TrustStore – о других, которым мы доверяем.
По умолчанию не подключается никакой KeyStore. Подключить его можно параметрами
javax.net.ssl.keyStore
(расположение файла), javax.net.ssl.keyStoreType
(тип) и javax.net.ssl.keyStorePassword
(пароль). Добавочные можно загружать динамически, классом java.security.KeyStore
.По умолчанию в приложении подключен один
TrustStore
, файл jre/lib/security/cacerts
. Переопределить его можно параметрами JVM javax.net.ssl.trustStore
, javax.net.ssl.trustStorePassword
и javax.net.ssl.trustStorePassword
.Типичный пример использования – подключить TrustStore с самоподписанным SSL сертификатом, чтобы приложение могло ходить на определенный сайт по протоколу HTTPS, не проваливая проверку безопасности. Либо же подключить KeyStore с подлинным SSL сертификатом, чтобы приложение само работало как HTTPS-сервер.
#Безопасность
👉@BookJava
Wikipedia
Криптография
наука о конфиденциальности, целостности информации, аутентификации и шифровании
👍7
Перечислите методы класса java.lang.Object
Этот вопрос используется, как способ начать разговор – по большинству методов можно уйти в обсуждении далеко вглубь. В первую очередь важно запомнить сигнатуры – не зная ответов на вопросы по этим методам, можно будет хотя бы рассуждать отталкиваясь от них. Также полезно открыть исходник и внимательно прочитать javadoc-документацию. Поступим как на интервью, и далее рассмотрим каждый из методов детально. Их список:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
👉@BookJava
Этот вопрос используется, как способ начать разговор – по большинству методов можно уйти в обсуждении далеко вглубь. В первую очередь важно запомнить сигнатуры – не зная ответов на вопросы по этим методам, можно будет хотя бы рассуждать отталкиваясь от них. Также полезно открыть исходник и внимательно прочитать javadoc-документацию. Поступим как на интервью, и далее рассмотрим каждый из методов детально. Их список:
1.
public final native Class<?> getClass()
2.
public native int hashCode()
3.
public boolean equals(Object obj)
4.
protected native Object clone() throws CloneNotSupportedException
5.
public String toString()
6.
public final native void notify()
7.
public final native void notifyAll()
8.
public final native void wait(long timeout) throws InterruptedException
9.
public final void wait(long timeout, int nanos) throws InterruptedException
10.
public final void wait() throws InterruptedException
11.
protected void finalize() throws Throwable
👉@BookJava
👍7
Подборка Telegram каналов для программистов🔥
Сохраняйте, чтоб не потерять.
Backend разработка 📌
https://t.me/ruby_lib Библиотека Ruby программиста
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_geek Учим Java на примерах
https://t.me/php_lib Библиотека PHP программиста
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/pythonofff Python академия. Учи Python быстро и легко
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/golang_lib Библиотека Go (Golang) разработчика
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
https://t.me/codepen_1 Сообщество пользователей CodePen
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Book reserv 1500 руб
https://t.me/python_360 Книги по Python
https://t.me/java_360 Книги по Java
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии для программистов
Чат программистов📌
https://t.me/developers_ru
Excel лайфхак📌
https://t.me/Excel_lifehack
Подписывайтесь на понравившиеся Telegram-каналы для разработчиков и изучайте программирование из любой точки мира.
Сохраняйте, чтоб не потерять.
Backend разработка 📌
https://t.me/ruby_lib Библиотека Ruby программиста
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_geek Учим Java на примерах
https://t.me/php_lib Библиотека PHP программиста
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/pythonofff Python академия. Учи Python быстро и легко
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/golang_lib Библиотека Go (Golang) разработчика
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
https://t.me/codepen_1 Сообщество пользователей CodePen
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Book reserv 1500 руб
https://t.me/python_360 Книги по Python
https://t.me/java_360 Книги по Java
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии для программистов
Чат программистов📌
https://t.me/developers_ru
Excel лайфхак📌
https://t.me/Excel_lifehack
Подписывайтесь на понравившиеся Telegram-каналы для разработчиков и изучайте программирование из любой точки мира.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Forwarded from Java Geek
Создание объектов только при необходимости
Создание объектов – одна из самых затратных операций в Java. Лучшая практика – создавать их только при необходимости, когда они действительно нужны.
@java_geek
Создание объектов – одна из самых затратных операций в Java. Лучшая практика – создавать их только при необходимости, когда они действительно нужны.
@java_geek
👍4👎3
Как используется
Этой аннотацией помечают код, который устарел и не должен быть более использован. Классы, которые используют или переопределяют
Имеет retention
Начиная с Java 9 у этой аннотации появились опциональные параметры – строка
Обычно, когда элемент помечают устаревшим, причины устаревания и дальнейшие рекомендации указывают в его Javadoc-документации под тегом
#Аннотации
👉@BookJava
@Deprecated
?Этой аннотацией помечают код, который устарел и не должен быть более использован. Классы, которые используют или переопределяют
@Deprecated
элементы, будут компилироваться с warning-ом.Имеет retention
RUNTIME
, что значит, что фреймворки могут динамически проверять наличие аннотации на элементе с помощью Reflection API.Начиная с Java 9 у этой аннотации появились опциональные параметры – строка
since
и булево значение forRemoval
. В since указывается версия вашего приложения, начиная с которой элемент считается устаревшим. Значение true
в forRemoval
предупреждает, что со следующей мажорной версии этот элемент будет удален. Такое нововведение связано с изменением политики устаревания – с Java 9 и устаревшие элементы самой JDK тоже могут удаляться в будущих версиях.Обычно, когда элемент помечают устаревшим, причины устаревания и дальнейшие рекомендации указывают в его Javadoc-документации под тегом
@deprecated
.#Аннотации
👉@BookJava
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Паттерны проектирования программ на языке Java
Фабричный метод (FactoryMethod)
Абстрактная фабрика (Abstract Factory)
Строитель (Builder)
Одиночка (Singleton)
Прототип (Prototype)
Адаптер (Adapter) Реализация на уровне объектов.
Адаптер (Adapter) Реализация на уровне классов.
Мост (Bridge)
Компоновщик (Composite)
Декоратор (Decorator)
Фасад (Facade)
Легковес (Flyweight)
Заместитель (Proxy)
Цепочка обязанностей (Chain of responsibility)
Команда (Command)
Итератор (Iterator)
Посредник (Mediator)
Снимок (Memento)
Наблюдатель (Observer)
Состояние (State)
Стратегия (Strategy)
Шаблонный метод (Template method)
Посетитель (Visitor)
Полный курс на youtube
👉@BookJava
Фабричный метод (FactoryMethod)
Абстрактная фабрика (Abstract Factory)
Строитель (Builder)
Одиночка (Singleton)
Прототип (Prototype)
Адаптер (Adapter) Реализация на уровне объектов.
Адаптер (Adapter) Реализация на уровне классов.
Мост (Bridge)
Компоновщик (Composite)
Декоратор (Decorator)
Фасад (Facade)
Легковес (Flyweight)
Заместитель (Proxy)
Цепочка обязанностей (Chain of responsibility)
Команда (Command)
Итератор (Iterator)
Посредник (Mediator)
Снимок (Memento)
Наблюдатель (Observer)
Состояние (State)
Стратегия (Strategy)
Шаблонный метод (Template method)
Посетитель (Visitor)
Полный курс на youtube
👉@BookJava
👍11🔥1