Получите навыки программиста за 7 дней!
Вы погрузитесь в направление «Программирование» от GeekBrains, пройдёте мастер-класс от ведущих специалистов и выберите себе специализацию.
Вас ждут:
– Вводный курс: все, что вам нужно знать на старте про профессию программиста и другие ключевые профессии в IT.
– Мастер-класс по программированию, где вы сможете самостоятельно попрактиковаться в решении задач.
– Эксклюзивные лекции по основам программирования – знания, которые необходимы для любой IT-профессии(
Пройдите анкету после регистрации и получите курсы с платных программ GeekBrains: https://clc.to/5mY5Uw
Вы погрузитесь в направление «Программирование» от GeekBrains, пройдёте мастер-класс от ведущих специалистов и выберите себе специализацию.
Вас ждут:
– Вводный курс: все, что вам нужно знать на старте про профессию программиста и другие ключевые профессии в IT.
– Мастер-класс по программированию, где вы сможете самостоятельно попрактиковаться в решении задач.
– Эксклюзивные лекции по основам программирования – знания, которые необходимы для любой IT-профессии(
Пройдите анкету после регистрации и получите курсы с платных программ GeekBrains: https://clc.to/5mY5Uw
Weekend Offer в команду VK Звонков
До 9 сентября VK принимают заявки на участие в оффере для Java-разработчиков, чтобы те стали частью большой команды и помогали развивать один из самых востребованных продуктов ВКонтакте – VK Звонки.
10 сентября тимлиды команды VK Звонков подробно расскажут о задачах, которые вам предстоит решать, а уже 11 сентября, после финальных собеседований,
отправят офферы лучшим кандидатам.
Подать заявку
До 9 сентября VK принимают заявки на участие в оффере для Java-разработчиков, чтобы те стали частью большой команды и помогали развивать один из самых востребованных продуктов ВКонтакте – VK Звонки.
10 сентября тимлиды команды VK Звонков подробно расскажут о задачах, которые вам предстоит решать, а уже 11 сентября, после финальных собеседований,
отправят офферы лучшим кандидатам.
Подать заявку
👍3❤1👎1
Классы BigInteger и BigDecimal
Числа с плавающей точкой (
BigDecimal хранит число в десятичном виде: немасштабированное значение (intVal), размерность (scale), точность (precision) и знак. Значение раскладывается на эти компоненты как intVal ÷ 10^scale. Точность – количество используемых знаков, без учета нулей в начале, но с учетом нулей в конце. Точность числа 0.0010 – 2.
Экземпляр
У класса BigDecimal есть редкая особенность: у него не согласованы методы equals() и compareTo(). equals() сравнивает значения с точки зрения структуры объекта – компоненты точности, размерности и значения сравниваются по отдельности. Так equals на числах 0.1 и 0.10 вернет false – у них разная точность, 1 и 2. compareTo() сравнивает числа с математической точки зрения – на тех же 0.1 и 0.10 compareTo вернет 0.
Вместе с
BigInteger можем рассматривать как частный случай
👉@BookJava
BigInteger
и BigDecimal
– иммутабельные числа с заданной точностью. Эти классы – наследники Number
, наряду с обертками примитивных чисел. В классах также реализованы базовые математические операции. Наибольший интерес представляет класс BigDecimal
– дробное число.Числа с плавающей точкой (
float, double
) хранят свои значения в памяти в экспоненциальном виде: знак-порядок-мантисса. Этот факт приводит к неочевидным с точки зрения десятичной системы округлениям при математических операциях.BigDecimal хранит число в десятичном виде: немасштабированное значение (intVal), размерность (scale), точность (precision) и знак. Значение раскладывается на эти компоненты как intVal ÷ 10^scale. Точность – количество используемых знаков, без учета нулей в начале, но с учетом нулей в конце. Точность числа 0.0010 – 2.
Экземпляр
BigDecimal
можно создавать из числа с плавающей точкой, и из строки. В первом случае преобразование из экспоненциального в десятичный вид может привести к неожиданной точности, так что рекомендуется использовать строку.У класса BigDecimal есть редкая особенность: у него не согласованы методы equals() и compareTo(). equals() сравнивает значения с точки зрения структуры объекта – компоненты точности, размерности и значения сравниваются по отдельности. Так equals на числах 0.1 и 0.10 вернет false – у них разная точность, 1 и 2. compareTo() сравнивает числа с математической точки зрения – на тех же 0.1 и 0.10 compareTo вернет 0.
Вместе с
BigDecimal
активно используется класс MathContext
. Это точность, плюс план действий когда значение в нее не влазит – стратегия округления. MathContext можно передавать как в конструктор, так и в математические операции.BigInteger можем рассматривать как частный случай
BigDecimal
. Он используется для целых чисел, больших чем Long.MAX_VALUE.👉@BookJava
👍6
Алексей Шипилёв - Java-объекты наизнанку
Один из часто задаваемых вопросов об объектах в Java — сколько же они занимают в памяти? В отсутствие языковой или библиотечной операции «sizeof», программистам остаётся гадать о футпринте их кода, или ссылаться на легенды и рассказы специалистов.
В этом докладе мы постараемся заглянуть в изнанку Java-объектов и увидеть, что в них лежит. После этого должны стать ясны многие трюки в футпринте объектов, станут понятны некоторые особенности рантаймов, и будет очевидно, что и как можно эксплуатировать в грязных низкоуровневых целях
https://www.youtube.com/watch?v=3BmznLJAgaA
👉@BookJava
Один из часто задаваемых вопросов об объектах в Java — сколько же они занимают в памяти? В отсутствие языковой или библиотечной операции «sizeof», программистам остаётся гадать о футпринте их кода, или ссылаться на легенды и рассказы специалистов.
В этом докладе мы постараемся заглянуть в изнанку Java-объектов и увидеть, что в них лежит. После этого должны стать ясны многие трюки в футпринте объектов, станут понятны некоторые особенности рантаймов, и будет очевидно, что и как можно эксплуатировать в грязных низкоуровневых целях
https://www.youtube.com/watch?v=3BmznLJAgaA
👉@BookJava
YouTube
Алексей Шипилёв - Java-объекты наизнанку
Один из часто задаваемых вопросов об объектах в Java — сколько же они занимают в памяти? В отсутствие языковой или библиотечной операции «sizeof», программистам остаётся гадать о футпринте их кода, или ссылаться на легенды и рассказы специалистов.
В этом…
В этом…
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