Forwarded from Академия Кода
Как получить ip адрес компьютера на java?
Используйте InetAddress чтобы получить IP адрес компьютера на Java, ниже пример кода как пример:
#java
Подписывайтесь на канал 👉@coddy_academy
Используйте InetAddress чтобы получить IP адрес компьютера на Java, ниже пример кода как пример:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Main {
public static void main(String args[]) {
try {
String ip = InetAddress.getLocalHost().getHostAddress();
// Вывод: 127.0.0.1
System.out.println(ip);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
#java
Подписывайтесь на канал 👉@coddy_academy
👍1
JPoint 2022 — Java-конференция от JUG Ru Group.
Она пройдет 13–15 июня, на 80% online, а 24 июня в Санкт-Петербурге будет offline-день.
Вас ждут 27 докладов от Java Champions и разработчиков из Huawei, МТС, Tinkoff, Одноклассников и других компаний. Поговорим об инструментах, внутренностях VM, базах данных, архитектуре, процессах, а также обсудим работу с Kotlin и Spring.
Среди докладов:
✔ «Becoming a More Effective Developer: Tips and Experiences»;
✔ «Thread Wars: проект Loom наносит ответный удар»;
✔ «Непрерывное профилирование в облаке с помощью eBPF»;
✔ «Индексы в PostgreSQL. Как понять, что создавать».
Подробности и полная программа — на сайте конференции.
При покупке билета на конференцию из категории «для частных лиц» используйте промокод:
Она пройдет 13–15 июня, на 80% online, а 24 июня в Санкт-Петербурге будет offline-день.
Вас ждут 27 докладов от Java Champions и разработчиков из Huawei, МТС, Tinkoff, Одноклассников и других компаний. Поговорим об инструментах, внутренностях VM, базах данных, архитектуре, процессах, а также обсудим работу с Kotlin и Spring.
Среди докладов:
✔ «Becoming a More Effective Developer: Tips and Experiences»;
✔ «Thread Wars: проект Loom наносит ответный удар»;
✔ «Непрерывное профилирование в облаке с помощью eBPF»;
✔ «Индексы в PostgreSQL. Как понять, что создавать».
Подробности и полная программа — на сайте конференции.
При покупке билета на конференцию из категории «для частных лиц» используйте промокод:
bookjava2022JRGpc
Как обойти строчку?
Для хранения строк в Java в общем случае используется кодировка UTF-16. Для полного понимания вопроса необходимо понимать ее особенности: что такое суррогатные пары и плоскости юникода. Конкретнее, что один символ в обычном понимании слова называется code point, и представляется одним или двумя значениями типа
Из этого следует, что и длина строки, верхняя граница итерации – тоже понятие неоднозначное. Метод
Итерироваться по
Другой вариант – сразу оперировать методами
В Java 8 появился новый удобный способ обхода – методы
#Строки
Для хранения строк в Java в общем случае используется кодировка UTF-16. Для полного понимания вопроса необходимо понимать ее особенности: что такое суррогатные пары и плоскости юникода. Конкретнее, что один символ в обычном понимании слова называется code point, и представляется одним или двумя значениями типа
char
. Значит, корректный ответ нужно начать с уточнения: подразумевается ли обход значений char или code point.Из этого следует, что и длина строки, верхняя граница итерации – тоже понятие неоднозначное. Метод
length()
на самом деле возвращает не количество Unicode-символов, а количество значений char
. Реальную логическую длину (количество кодовых точек) покажет метод codePointCount()
. Нужно помнить, что чтобы обнаружить суррогатные пары, внутри ему придется проитерировать по символам.Итерироваться по
char
можно либо получая по одному символу с помощью метода charAt()
, либо со всем массивом сразу, методом toCharArray()
. В случае с массивом создается копия внутреннего значения – это естественно медленнее, зато этот массив-копию можно мутировать. Работать с суррогатными парами придется вручную, для этого в классе Character
есть специальные методы.Другой вариант – сразу оперировать методами
codePointAt()
и codePointBefore()
. Параметром указываются индексы массива char
, но результатом будут кодовые точки типа int
.В Java 8 появился новый удобный способ обхода – методы
chars()
и codePoints()
. Они возвращают IntStream
из символов и кодовых точек соответственно. Носителем результирующих стримов выступает оригинальное внутреннее значение строки, копирование массива не требуется.#Строки
👍7
Подборка каналов для IT специалистов 🎯
Системное администрирование 📌
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/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Excel лайфхак📌
https://t.me/Excel_lifehack
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
CodePen 📌
https://t.me/codepen_1 Сообщество пользователей CodePen
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/java_360 Книги по Java Rus
https://t.me/python_360 Книги по Python Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
БигДата, машинное обучение 📌
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/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
https://t.me/arhitekturamira World Architecture
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Арбитраж трафика 📌
https://t.me/partnerochkin CPA и арбитраж трафика
Крипта 📌
https://t.me/bitkoinoff Новости криптовалют
DeepFake 📌
https://t.me/deepfakenow Публикуем deepfake видео
Мир технологий 📌
https://t.me/mir_teh Видео из мира технологий
Системное администрирование 📌
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/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Excel лайфхак📌
https://t.me/Excel_lifehack
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
CodePen 📌
https://t.me/codepen_1 Сообщество пользователей CodePen
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/java_360 Книги по Java Rus
https://t.me/python_360 Книги по Python Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
БигДата, машинное обучение 📌
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/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
https://t.me/arhitekturamira World Architecture
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Арбитраж трафика 📌
https://t.me/partnerochkin CPA и арбитраж трафика
Крипта 📌
https://t.me/bitkoinoff Новости криптовалют
DeepFake 📌
https://t.me/deepfakenow Публикуем deepfake видео
Мир технологий 📌
https://t.me/mir_teh Видео из мира технологий
👍4
Пишем игру быки и коровы на Java
Существует множество вариаций этой игры. Компьютерный вариант игры обычно однопользовательский, при этом компьютер загадывает число, а человек — отгадывает его. После каждого ввода числа, компьютер выводит количество быков и коров в нем. «Коровой» называется цифра, угаданная без совпадения позиции, а «быком» — совпадение и цифры и позиции.
Помимо прочего, разработанная программа должна программа должна:
корректно обрабатывать неправильный пользовательский ввод (четырехзначные числа) и выдавать, при необходимости, предупреждающие сообщения;
сохранять таблицу рекордов в текстовом файле.
Задачи:
проанализировать задачу и разработать требования к программе;
выполнить анализ требований и проектирование;
реализовать программу и проверить правильность ее работы.
Исходный код работы целиком можно взять в репозитории.
👉 @BookJava
Существует множество вариаций этой игры. Компьютерный вариант игры обычно однопользовательский, при этом компьютер загадывает число, а человек — отгадывает его. После каждого ввода числа, компьютер выводит количество быков и коров в нем. «Коровой» называется цифра, угаданная без совпадения позиции, а «быком» — совпадение и цифры и позиции.
Помимо прочего, разработанная программа должна программа должна:
корректно обрабатывать неправильный пользовательский ввод (четырехзначные числа) и выдавать, при необходимости, предупреждающие сообщения;
сохранять таблицу рекордов в текстовом файле.
Задачи:
проанализировать задачу и разработать требования к программе;
выполнить анализ требований и проектирование;
реализовать программу и проверить правильность ее работы.
Исходный код работы целиком можно взять в репозитории.
👉 @BookJava
👍3❤1
Из чего состоит String?
Ответ как обычно зависит от версии Java. Два поля, которые присутствовали во всех версиях – массив символов
До Java 7 были еще поля
Изначально все строки хранились в кодировке UTF-16, каждый символ занимал по два байта и умещался в
В Java 6 была введена экспериментальная фича Compressed Strings – способность строки хранить строки в LATIN-1 в массиве
Снова сжатие строк появилось в Java 9 – теперь оно называется Compact Strings и включено по умолчанию. В классе String появилось поле
Для полного обзора особенностей класса String стоит посмотреть доклады Алексея Шипилёва (1, 2).
#Строки
Ответ как обычно зависит от версии Java. Два поля, которые присутствовали во всех версиях – массив символов
char[] value
и int hash
. В поле hash
кэшируется хэш-сумма при первом подсчете для соблюдения контракта метода hashCode.До Java 7 были еще поля
offset
и count
– чтобы переиспользовать без пересоздания массивы из билдеров и других строк. В современной джаве от этого отказались в угоду меньшего потребления памяти.Изначально все строки хранились в кодировке UTF-16, каждый символ занимал по два байта и умещался в
char
. Однако выяснилось, что статистически большинство строк содержит только ASCII-символы, которые вмещаются в один байт и составляют кодировку LATIN-1. То есть старший байт в большинстве char
остается нулевым, и строки наполовину состоят из пустоты. А примерно четверть памяти приложений состоит из одних только строк.В Java 6 была введена экспериментальная фича Compressed Strings – способность строки хранить строки в LATIN-1 в массиве
byte
вместо char
. С этой фичей был ряд проблем, и позднее ее убрали. Снова сжатие строк появилось в Java 9 – теперь оно называется Compact Strings и включено по умолчанию. В классе String появилось поле
coder
, которое переключает кодировки, и статический флаг COMPACT_STRINGS
, выключающий фичу вообще. Тип массива value
окончательно изменился с char[]
на byte[]
.Для полного обзора особенностей класса String стоит посмотреть доклады Алексея Шипилёва (1, 2).
#Строки
👍3
Media is too big
VIEW IN TELEGRAM
Модель памяти Java процесса
Рассуждаем о Java Memory Model и Garbage Collection'е.
Визуализируем память Java приложения.
Смотрим на красочный VisualGC.
Всё ради того, чтобы разобраться как работает JVM с памятью.
0:00 - Введение
0:39 - Тестовое приложение
1:34 - VisualVM
3:25 - Структура памяти
8:54 - Tenure Threshold
10:12 - Что ещё есть в VisualGC plugin?
12:24 - Завершение
👉 @BookJava
Рассуждаем о Java Memory Model и Garbage Collection'е.
Визуализируем память Java приложения.
Смотрим на красочный VisualGC.
Всё ради того, чтобы разобраться как работает JVM с памятью.
0:00 - Введение
0:39 - Тестовое приложение
1:34 - VisualVM
3:25 - Структура памяти
8:54 - Tenure Threshold
10:12 - Что ещё есть в VisualGC plugin?
12:24 - Завершение
👉 @BookJava
👍5
Зачем нужна Java Serialization? Как сделать класс сериализуемым?
Сериализация – это сохранение типа и состояния объекта в бинарном виде для последующего сохранения/передачи и десериализации. Для сериализации используется интерфейс
Класс сериализуем, если:
🔘 Реализует маркерный интерфейс
🔘 Все поля сериализуемые или помечены модификатором
Протокол стандартной сериализации описан в документации.
Сериализационная форма может, и в некоторых случаях для корректной работы должна быть кастомизирована. Правильная форма содержит только логическое представление данных, без деталей о физической реализации.
Для описания полей сериализационной формы в javadoc-документации используется тэг
Нестатические внутренние классы не должны быть сериализуемыми. Статические поля как поля класса а не инстанса несериализуемы.
Сериализации посвящен целый раздел Effective Java. Доклад для ознакомления с темой.
#Сериализация
Сериализация – это сохранение типа и состояния объекта в бинарном виде для последующего сохранения/передачи и десериализации. Для сериализации используется интерфейс
Serializable
(Externalizable
), и цель записи/источник чтения ObjectInputStream
/ObjectOutputStream
(ObjectInput
/ObjectOutput
).Класс сериализуем, если:
🔘 Реализует маркерный интерфейс
Serializable
;🔘 Все поля сериализуемые или помечены модификатором
transient
(иначе рантайм выбросит NotSerializableException
).Протокол стандартной сериализации описан в документации.
Сериализационная форма может, и в некоторых случаях для корректной работы должна быть кастомизирована. Правильная форма содержит только логическое представление данных, без деталей о физической реализации.
Для описания полей сериализационной формы в javadoc-документации используется тэг
@serial
. Для документации генерирующего нестандартную сериализационную форму метода используется @serialData
. Эти тэги имеют смысл и для приватных членов, так как эффективно такие члены – часть публичного API.Нестатические внутренние классы не должны быть сериализуемыми. Статические поля как поля класса а не инстанса несериализуемы.
Сериализации посвящен целый раздел Effective Java. Доклад для ознакомления с темой.
#Сериализация
👍4
Введение в Java Process Memory Model
Каждое Java приложение, после запуска, создаёт десятки, сотни, тысячи объектов в памяти компьютера на котором оно запущено. Память, при этом, ресурс не бесконечный, и поэтому необходимо использовать его эффективно. Виртуальная Машина Java (Java Virtual Machine, далее JVM) умеет граммотно распоряжаться памятью и помогает нам, разработчикам, управляя ею автоматически.
О том, как именно JVM работает с памятью во время работы Java приложения мы поговорим в этой статье.
👉 @BookJava
Каждое Java приложение, после запуска, создаёт десятки, сотни, тысячи объектов в памяти компьютера на котором оно запущено. Память, при этом, ресурс не бесконечный, и поэтому необходимо использовать его эффективно. Виртуальная Машина Java (Java Virtual Machine, далее JVM) умеет граммотно распоряжаться памятью и помогает нам, разработчикам, управляя ею автоматически.
О том, как именно JVM работает с памятью во время работы Java приложения мы поговорим в этой статье.
👉 @BookJava
👍8
Руководство по Java 8 Optional
В этом учебном пособии мы рассмотрим класс Optional, который был представлен в Java 8.
Цель класса — предоставить решение на уровне типа для представления опциональных значений вместо null (нулевых) ссылок.
Для более глубокого понимания того, почему мы должны обратить внимание на класс Optional, ознакомьтесь с официальной статьей Oracle.
В этом учебном пособии мы рассмотрим класс Optional, который был представлен в Java 8.
Цель класса — предоставить решение на уровне типа для представления опциональных значений вместо null (нулевых) ссылок.
Для более глубокого понимания того, почему мы должны обратить внимание на класс Optional, ознакомьтесь с официальной статьей Oracle.
👍2👎1
Зачем используется Serial Version UID? Что если не определить его?
Сериализуемый класс явно или неявно, но всегда имеет
Для совпадающих версий работает мощная поддержка эволюции класса – совместимые изменения, такие как добавление или удаление полей, не приводят к
Неявное значение вычисляется автоматически в рантайме, и включает в себя информацию о имени типа, списке родителей и полей (с точностью до коллизии). По смыслу это похоже на хэш-сумму класса. Соответственно, при любом изменении класса значение изменится, и поддержка эволюции окажется бесполезной.
Всегда лучше явно указывать любое значение
Явное значение устанавливается в переменную
#Сериализация
Сериализуемый класс явно или неявно, но всегда имеет
serialVersionUID
. Это число типа long
, которое представляет собой «версию» сериализационной формы класса. Если при сериализации/десериализации значения serialVersionUID
не совпадают – будет выброшено InvalidClassException
.Для совпадающих версий работает мощная поддержка эволюции класса – совместимые изменения, такие как добавление или удаление полей, не приводят к
InvalidClassException
. Неявное значение вычисляется автоматически в рантайме, и включает в себя информацию о имени типа, списке родителей и полей (с точностью до коллизии). По смыслу это похоже на хэш-сумму класса. Соответственно, при любом изменении класса значение изменится, и поддержка эволюции окажется бесполезной.
Всегда лучше явно указывать любое значение
serialVersionUID
, и изменять только в тех редких случаях, когда требуется сломать совместимость с предыдущими версиями. Стандартная утилита JDK serialver
умеет «угадывать» авто-генерированное значение. Она используется чтобы зафиксировать значение для включения поддержки эволюции созданного ранее класса.Явное значение устанавливается в переменную
static final long serialVersionUID
.#Сериализация
👍5
Какими методами настраивается сериализация?
Интерфейс
Методы
Для подмены объекта при записи добавляется симметричный метод
Интерфейс
#Сериализация
Интерфейс
Serializable
пуст, но есть ряд методов, добавив которые в сериализуемый класс можно добиться изменения этапов процесса сериализации и десериализации.readObjectNoData()
используется для инициализации класса-родителя, который при сериализации оригинального объекта еще не был родителем. Подробное объяснение. readObject(ObjectInputStream s)
переопределяет стандартную десериализацию.Методы
readObject*
похожи на конструктор. Как и конструктор, они подвержены проблеме виртуального вызова. Как и конструктор, они используются для поддержания инвариантов класса (только для случая десериализации).writeObject(ObjectOutputStream s)
используется для записи собственной сериализационной формы.Object readResolve()
может использоваться для реализации какого-либо порождающего паттерна при десериализации. Даже при его использовании объект сначала будет десериализован, поэтому рекомендуется вместе с этим методом помечать все поля transient
. Видимость этого метода для наследника определяет, будет ли наследник вызывать его.Для подмены объекта при записи добавляется симметричный метод
Object writeReplace()
.Интерфейс
Externalizable
дает инструмент полной подмены реализации сериализации. Рассмотрим его в следующих постах.#Сериализация
👍3
Одна из многих причина нежелания идти учиться на курсы по разработке — отсутствие гарантий, что деньги за курс не будут выброшены на ветер.
В Kata Academy эти гарантии предоставляют.
В договоре с Kata четко прописано, что вам не нужно платить за обучение до тех пор, пока вы не устроитесь на работу в IT. То есть во время обучения вы ничего не платите.
Также в договоре указывается, что Kata гарантирует минимальную зарплату от 100 тысяч рублей в месяц.
Если вы вдруг не смогли устроиться на работу, то за обучение платить не нужно. Связано это с тем, что цель Kata — ваше трудоустройство разработчиком, а если вам не удалось, значит на курсе вас не смогли подготовить должным образом.
Записывайтесь на курс и получайте тестовое задание: https://clck.ru/hN2AE
Если не уверены в своих силах — не переживайте, Kata дадут неплохой FAQ, который поможет с выполнением тестового!
В Kata Academy эти гарантии предоставляют.
В договоре с Kata четко прописано, что вам не нужно платить за обучение до тех пор, пока вы не устроитесь на работу в IT. То есть во время обучения вы ничего не платите.
Также в договоре указывается, что Kata гарантирует минимальную зарплату от 100 тысяч рублей в месяц.
Если вы вдруг не смогли устроиться на работу, то за обучение платить не нужно. Связано это с тем, что цель Kata — ваше трудоустройство разработчиком, а если вам не удалось, значит на курсе вас не смогли подготовить должным образом.
Записывайтесь на курс и получайте тестовое задание: https://clck.ru/hN2AE
Если не уверены в своих силах — не переживайте, Kata дадут неплохой FAQ, который поможет с выполнением тестового!
🤮4👍3👎1
Как сериализация работает с наследованием?
Когда
При сериализации несериализуемые предки просто игнорируются.
Если класс несериализуемый и не предоставляет достаточного доступа к своему логическому состоянию для наследников, правильно реализовать его наследника сериализуемым может быть невозможно.
Популярный вопрос на тему – как когда сериализуешь объект класса-наследника, избежать сериализации его родительской части. Единственный способ добиться этого – кастомизировать сериализационную форму, определив собственную реализацию
Открытость класса для наследования делает неприменимым паттерн serialization proxy (который рассмотрим позднее).
#Сериализация
Когда
Serializable
класс имеет цепочку родителей, пока эти родители тоже Serializable
, десериализация объекта идет от родителя к наследнику, в обход конструктора. Вместо него вызываются методы readObject
(readObjectNoData
). Но как только встречается первый предок, не реализующий интерфейс Serializable
, инициализация для него возвращается в нормальное русло – вместо readObject
вызывается конструктор без аргументов. Если такого конструктора нет, или он объявлен private
, исполнение выбросит InvalidClassException
.При сериализации несериализуемые предки просто игнорируются.
Если класс несериализуемый и не предоставляет достаточного доступа к своему логическому состоянию для наследников, правильно реализовать его наследника сериализуемым может быть невозможно.
Популярный вопрос на тему – как когда сериализуешь объект класса-наследника, избежать сериализации его родительской части. Единственный способ добиться этого – кастомизировать сериализационную форму, определив собственную реализацию
writeObject()
, либо используя интерфейс Externalizable
.Открытость класса для наследования делает неприменимым паттерн serialization proxy (который рассмотрим позднее).
#Сериализация
👍7
Полезные потоки Java
В этой статье мы рассмотрим несколько полезных способов использования потоков Java для работы с различными данными.
https://theoneamin.medium.com/useful-java-streams-d48266effe59
👉 @BookJava
В этой статье мы рассмотрим несколько полезных способов использования потоков Java для работы с различными данными.
https://theoneamin.medium.com/useful-java-streams-d48266effe59
👉 @BookJava
👍4
Подборка каналов для IT специалистов 🎯
Системное администрирование 📌
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 и др.
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Excel лайфхак📌
https://t.me/Excel_lifehack
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
CodePen 📌
https://t.me/codepen_1 Сообщество пользователей CodePen
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/java_360 Книги по Java Rus
https://t.me/python_360 Книги по Python Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
БигДата, машинное обучение 📌
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/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
https://t.me/arhitekturamira World Architecture
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Арбитраж трафика 📌
https://t.me/partnerochkin CPA и арбитраж трафика
Крипта 📌
https://t.me/bitkoinoff Новости криптовалют
DeepFake 📌
https://t.me/deepfakenow Публикуем deepfake видео
Мир технологий 📌
https://t.me/mir_teh Видео из мира технологий
Системное администрирование 📌
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 и др.
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Excel лайфхак📌
https://t.me/Excel_lifehack
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
CodePen 📌
https://t.me/codepen_1 Сообщество пользователей CodePen
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/java_360 Книги по Java Rus
https://t.me/python_360 Книги по Python Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
БигДата, машинное обучение 📌
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/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
https://t.me/arhitekturamira World Architecture
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Арбитраж трафика 📌
https://t.me/partnerochkin CPA и арбитраж трафика
Крипта 📌
https://t.me/bitkoinoff Новости криптовалют
DeepFake 📌
https://t.me/deepfakenow Публикуем deepfake видео
Мир технологий 📌
https://t.me/mir_teh Видео из мира технологий
👍1
В чем разница между Serializable и Externalizable?
При записи
Интерфейс
Этот интерфейс позволяет реализовать полностью свой механизм сериализации, стандартно запишется только идентификатор класса. Никакой автоматической работы с классом-родителем также не предусмотрено. Методы
Подробнее читайте в соответствующем вопросе на stackoverflow.
#Сериализация
При записи
Serializable
класса весь контроль над сериализацией достается JVM. С помощью определения специальных методов можно кастомизировать его части. Метод readObject
при этом обычно начинается с вызова стандартной части сериализации – ObjectInputStream.defaultReadObject()
.Интерфейс
Externalizable
расширяет Serializable
и добавляет методы записи и чтения writeExternal
и readExternal
. Входной и выходной потоки-аргументы в них представлены более абстрактно чем в специальных методах – интерфейсами ObjectInput
и ObjectOutput
.Этот интерфейс позволяет реализовать полностью свой механизм сериализации, стандартно запишется только идентификатор класса. Никакой автоматической работы с классом-родителем также не предусмотрено. Методы
readObject
и writeObject
игнорируются. Ключевое слово transient
эффекта на Externalizable
не имеет.Externalizable
объект в отличие от Serializable
десерализуется не в обход конструктора, так что должен иметь конструктор без аргументов. Подробнее читайте в соответствующем вопросе на stackoverflow.
#Сериализация
👍8
Каждому второму техническому специалисту в стартапе не хватает менеджерских навыков.
Как прокачать свои способности в области IT?
Присоединяйтесь к программе повышения квалификации для СТО от School of C!
За 3 месяца онлайн обучения вы:
— разберете несколько реальных кейсов вместе с основателями стартапов и получите персонализированный фидбек
— усовершенствуете свои лидерские и менеджерские навыки
— узнаете всю внутреннюю кухню стартапов и бизнесов: что нужно и когда нужно делать в различных ситуациях
Успейте подать заявку и получите доступ к стартап-экосистеме Starta VC!
➡️ПОДАТЬ ЗАЯВКУ⬅️
Как прокачать свои способности в области IT?
Присоединяйтесь к программе повышения квалификации для СТО от School of C!
За 3 месяца онлайн обучения вы:
— разберете несколько реальных кейсов вместе с основателями стартапов и получите персонализированный фидбек
— усовершенствуете свои лидерские и менеджерские навыки
— узнаете всю внутреннюю кухню стартапов и бизнесов: что нужно и когда нужно делать в различных ситуациях
Успейте подать заявку и получите доступ к стартап-экосистеме Starta VC!
➡️ПОДАТЬ ЗАЯВКУ⬅️
Что такое serialization proxy?
Serialization proxy (посредник сериализации) – это паттерн, который дает простой способ определить собственную сериализационную форму.
1. Внутри целевого класса объявляется вложенный класс-посредник;
2. В посреднике объявляются поля, описывающие логическую структуру объекта (собственно, сериализационную форму);
3. Добавляется конструктор посредника, принимающий экземпляр оригинального класса и инициализирующий все эти поля;
4. Оба класса помечаются интерфейсом
5. В методе
6. Симметричные действия совершаются для чтения – в классе-посреднике реализуется метод
7. В основном классе добавляется
Пример кода реализации.
#Сериализация
Serialization proxy (посредник сериализации) – это паттерн, который дает простой способ определить собственную сериализационную форму.
1. Внутри целевого класса объявляется вложенный класс-посредник;
2. В посреднике объявляются поля, описывающие логическую структуру объекта (собственно, сериализационную форму);
3. Добавляется конструктор посредника, принимающий экземпляр оригинального класса и инициализирующий все эти поля;
4. Оба класса помечаются интерфейсом
Serializable
;5. В методе
writeReplace
оригинального класса инстанциируется и возвращается прокси от this
;6. Симметричные действия совершаются для чтения – в классе-посреднике реализуется метод
readResolve
;7. В основном классе добавляется
readObject
, который выбрасывает исключение – это защитит от чтения без прокси.Пример кода реализации.
#Сериализация
👍2
Forwarded from Академия Кода
Как создать рандомную строку в java?
Как вариант используйте StringBuilder и цикл чтобы создать рандомную строку в Java, ниже пример кода как пример.
#java
Подписывайтесь на канал 👉@coddy_academy
Как вариант используйте StringBuilder и цикл чтобы создать рандомную строку в Java, ниже пример кода как пример.
import java.security.SecureRandom;
public class Main {
public static void main(String args[]) {
// Символы строки
String alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// Длина строка
int len = 5;
StringBuilder sb = new StringBuilder(len);
SecureRandom rnd = new SecureRandom();
for (int i = 0; i < len; i++) {
sb.append(alpha.charAt(rnd.nextInt(alpha.length())));
}
// Вывод: 5ezs1
System.out.println(sb.toString());
}
}
#java
Подписывайтесь на канал 👉@coddy_academy
👍8