⚡ Когда мне говорят, что Java слишком простой язык, я показываю канал Java Learning
Здесь я научился:
▪️ Разрабатывать высоконагруженные серверные приложения
▪️ Управлять сложными базами данных
▪️ Организовывать эффективную многопоточную обработку данных
▪️ Проходить технические собеседования в ведущие IT-компании
Самый необычный канал про Java, подписывайся – @Java_per_month
Восходящее и нисходящее преобразование
Восходящее преобразование (upcasting) происходит, когда объект или значение преобразуется в тип, который находится выше в иерархии наследования.
Нисходящее преобразование (downcasting) происходит, когда объект или значение преобразуется в тип, который находится ниже в иерархии наследования. Для выполнения нисходящего преобразования необходимо явно привести типы.
#для_начинающих
ZipOutputStreamZipOutputStream
— это класс в Java, который позволяет создавать архив Zip, добавлять в него файлы и директории, и сохранять его в файловой системе. Он наследует класс DeflaterOutputStream
и реализует интерфейс Closeable
.ZipOutputStream
(OutputStream out
) — создает объект ZipOutputStream
, который будет записывать данные в указанный выходной поток.
#для_продвинутых
Принцип FIFO
Принцип FIFO (First-In-First-Out) относится к упорядочиванию и обработке элементов в порядке их поступления. В Java вы можете реализовать FIFO с использованием структуры данных, такой как очередь (Queue). В стандартной библиотеке Java есть несколько классов и интерфейсов, которые поддерживают FIFO:
— Queue интерфейс: Queue является интерфейсом, который предоставляет основные методы для работы с очередью. Вы можете использовать реализации этого интерфейса, такие как LinkedList или PriorityQueue, чтобы создать FIFO очередь.
— ArrayDeque: ArrayDeque также может быть использован для реализации FIFO очереди. Вы можете добавлять элементы в начало или конец очереди и извлекать их из начала очереди.
#для_продвинутых
Microservices | Вопросы с Собеседований
- Подборка вопросов по микросервисной архитектуре с реальных собеседований
- Авторские статьи по архитектуре, проектированию, базам данных
- Автор - Lead Developer с 8 лет опыта на Java/Kotlin
abstract
Ключевое слово abstract используется для определения абстрактного класса или метода. Абстрактный класс не может быть создан, он служит только в качестве базового класса для других классов, которые могут быть созданы на его основе.
Это позволяет упростить проектирование классов и повторно использовать код.
#для_продвинутых
Сортировка слиянием (Merge Sort)
Сортировка слиянием - это алгоритм сортировки, который основан на разделении массива на меньшие части, сортировке каждой части и объединении этих частей в отсортированный массив. Он имеет сложность O(n log n)
и может быть эффективно использован для сортировки больших наборов данных.
Она может быть применена для сортировки массивов объектов, чисел, строк и любых других данных. В некоторых случаях сортировка слиянием может быть более эффективной, чем другие алгоритмы сортировки, особенно когда данные не упорядочены.
#для_продвинутых
Интерфейс Predicate
Интерфейс Predicate
представляет собой функциональный интерфейс, который принимает один аргумент и возвращает булево значение. Его можно использовать для определения условий, на основе которых можно фильтровать данные.
#для_продвинутых
Конечный автомат
Конечный автомат (Finite State Machine, FSM) — это модель вычислений, которая состоит из набора состояний, переходов между состояниями и действий, выполняемых при переходе из одного состояния в другое.
Для простого примера можно использовать светофор. Светофор может иметь три состояния: красный, желтый и зеленый. Когда светофор находится в состоянии красный, машины должны останавливаться, когда он находится в состоянии желтый, машины должны готовиться к остановке, а когда светофор находится в состоянии зеленый, машины могут двигаться.
#для_продвинутых
ComparatorComparator
— это интерфейс в языке программирования Java, который используется для сравнения объектов. Он часто применяется для упорядочивания элементов в коллекциях, таких как списки, множества и карты.
В этом примере MyComparator
реализует интерфейс Comparator для целых чисел (Integer) и сортирует список чисел в обратном порядке.
Вы можете также использовать анонимные классы или лямбда-выражения для создания компараторов более компактным способом.
#для_начинающих
Отвлекись от серьезных тем, заходи к нам и наслаждайся смешными мемами и гифками про беспощадную борьбу между программистами и кодом!
@nophumor
Большие числа BigInteger
В Java для работы с большими числами (такими, которые не умещаются в примитивные типы данных) используется класс BigInteger
из пакета java.math
. Этот класс позволяет производить арифметические операции с большими числами, которые могут содержать до 2^31-1 битов.
#для_начинающих
Шифр Цезаря
Шифр Цезаря — это простой шифр подстановки, который сдвигает каждую букву в сообщении на фиксированное количество позиций в алфавите.
В этом примере мы создали класс CaesarCipher
, который содержит два метода: encrypt
и decrypt
. encrypt
принимает сообщение и сдвиг, чтобы зашифровать его, а decrypt
принимает зашифрованное сообщение и сдвиг, чтобы дешифровать его.
Заметьте, что этот код предназначен только для демонстрации принципа работы шифра Цезаря и не обеспечивает высокую степень безопасности.
#для_начинающих
Интерфейс UnaryOperator
Интерфейс UnaryOperator
— это функциональный интерфейс, введенный в Java 8 в пакете java.util.function
. Этот интерфейс представляет собой оператор, который принимает один аргумент и возвращает результат того же типа, что и входной аргумент. Он представляет унарную операцию, то есть операцию, которая применяется к одному операнду.
#для_продвинутых
Крепкий фундамент дома не выстоит за зыбучем песке. Качественное приложение сложно создать без продуманной архитектуры.
Случалось ли вам исправлять один баг, после чего возникало ещё 5? Или перестать понимать, что происходит в коде, который вы же написали?
Так бывает, когда приложению не хватает архитектуры.
А если она есть?
С таким приложением проще и приятнее работать. Его легче расширять, изменять, тестировать, отлаживать и понимать. У вас самих (и ваших коллег) будет уходить куда меньше времени на исправление ошибок.
И именно этому учат в Слёрм на курсе по архитектуре приложений — он стартует 22 января.
Узнать программу вы можете по ссылке.
Спикеры курса:
✔️Егор Лукьянов, Senior software engineer
Более 15 лет в IT, отвечает за архитектуру платформы анализа больших данных. Руководит бэкенд-разработкой на Python.
✔️Александр Вагнер, Solution Architect & co-founder в TorrowTechnologies
Более 8 лет в IT, строит с нуля компанию и платформу Torrow. Имеет богатый опыт создания и разработки high-load веб-сервисов и приложений.
Курс будет проходить в формате потока: эксперты будут отвечать на вопросы студентов, проводить встречи с подробным разбором сложных заданий.
Записаться на поток вы можете на сайте Слёрм
Реклама. ООО «Слёрм» г. Лиски, ОГРН 1193668020545 Erid: 2VtzqvLGFTR
RecordsRecords
— это новый тип данных, добавленный в Java 14, который позволяет определить класс с набором свойств, аналогичных полям класса, но неизменяемых и доступных только для чтения. Они предоставляют удобный способ объявления простых неизменяемых объектов с сокращенным синтаксисом.
#для_продвинутых
Группировка
Группировка (grouping) — это процесс объединения данных в группы или категории в соответствии с определенным критерием или условием. Группировка является важной операцией при обработке больших объемов данных, поскольку она позволяет легко анализировать и обрабатывать данные, разбивая их на более мелкие подгруппы.
В Java группировка может быть выполнена с использованием метода groupingBy()
из класса java.util.stream.Collectors
. Метод groupingBy()
принимает функцию, которая определяет критерии группировки, и возвращает Map
с ключами, соответствующими группам, и значениями, представляющими элементы группы.
#для_продвинутых
Что такое Shutdown hook?Shutdown hook
— это механизм, который позволяет выполнить код при завершении работы JVM. Например, можно закрыть все открытые ресурсы и завершить потоки перед тем, как программа будет полностью остановлена.
Вы можете зарегистрировать Shutdown hook
с помощью метода Runtime.addShutdownHook()
. Этот метод принимает объект класса Thread
, который представляет код, который вы хотите выполнить при завершении JVM.Shutdown hook
будет выполнен при завершении JVM, независимо от того, был ли завершен процесс JVM нормально (например, с помощью System.exit()
) или из-за необработанного исключения.
#для_продвинутых
BufferedWriterBufferedWriter
- это класс в Java, который позволяет записывать символы в файл с буферизацией. Он наследует класс Writer
и реализует интерфейсы Closeable
, Flushable
и Appendable
.
Конструктор BufferedWriter
имеет одну форму:
— BufferedWriter
(Writer writer
) - создает объект BufferedWriter
, который будет использовать указанный Writer
для записи данных.
#для_продвинутых
FileWriterFileWriter
— это класс в Java, который позволяет записывать символы в файл. Он наследует класс OutputStreamWriter
и реализует интерфейс Closeable
, Flushable
и Appendable
.
Конструктор FileWriter
имеет две формы:
1. FileWriter
(File file
) - создает объект FileWriter
, который будет записывать в указанный файл.
2. FileWriter
(String fileName
) - создает объект FileWriter
, который будет записывать в файл с указанным именем.
#для_продвинутых
Юнит-тестирование в Java
Юнит-тестирование — это процесс тестирования отдельных блоков кода (юнитов) с целью обеспечения их корректной работы и выявления возможных ошибок и проблем в функциональности. Юнит-тесты должны быть маленькими, изолированными и быстрыми, и они позволяют выявить ошибки и несоответствия в вашем коде на ранних этапах разработки. В Java для написания юнит-тестов часто используется фреймворк JUnit. Вот как написать и запустить юнит-тесты в Java с использованием JUnit.
#для_продвинутых
Сервлеты
Сервлеты — это программные компоненты, которые расширяют функциональность сервера, помогают создавать веб-страницы и взаимодействовать с базами данных.
Сервлет получает запрос от браузера, обрабатывает его и отправляет ответ в браузер.
#для_продвинутых
Инвертированный индекс
Инвертированный индекс — это структура данных, используемая в информационных поисковых системах для быстрого поиска документов, содержащих определенные слова или фразы. В инвертированном индексе каждое уникальное слово (термин) в коллекции документов связывается с списком документов, в которых это слово встречается.
Ниже приведен пример простой реализации инвертированного индекса на языке Java. Этот пример демонстрирует создание инвертированного индекса для небольшой коллекции документов.
#для_продвинутых
Bit SetBitSet
— это класс, предназначенный для работы с наборами битов. Он предоставляет удобные методы для установки, сброса, получения и манипулирования битами в наборе. Этот класс полезен, когда вам нужно хранить и обрабатывать большое количество булевых значений (true/false) или флагов, используя минимальное количество памяти.
#для_начинающих
Тип Optional
Тип Optional
используется для представления возможности отсутствия значения. Он обертывает другой тип данных и может содержать либо значение этого типа, либо быть пустым (null
).
Этот код создает Optional объект, который может содержать строку. Если строка доступна, она будет возвращена; в противном случае будет возвращено значение "Default Value".
Использование Optional способствует более чистому и безопасному коду при работе с возможно отсутствующими значениями.
#для_начинающих
Класс LinkedList
Класс LinkedList
представляет собой двусвязный список, который является одной из структур данных для хранения и управления коллекцией элементов. LinkedList предоставляет реализацию интерфейсов List и Deque, что означает, что он может использоваться как список элементов и как двусторонняя очередь (двунаправленный список).
#для_начинающих
erid: LjN8KYeQe
💪 Создайте полноценный чат на JavaScript с нуля
👉 И доведите проект до совершенства на бесплатном практическом уроке
«Работа с сетевыми ресурсами в проектах на Javascript» от OTUS.
Мы возьмем проект с предыдущего урока и:
- доработаем его до полноценного чата, чтобы пользователи с разных компьютеров могли общаться друг с другом;
- обсудим, какие варианты реализации общения с сервером у нас есть и попробуем их на практике.
📌 Занятие пройдёт 21 декабря в 20:00 мск в рамках курса «Специализация Fullstack developer». После урока вы сможете продолжить обучение в рассрочку.
👉 Для бесплатного участия и получения записи предыдущего урока с созданием проекта регистрируйтесь прямо сейчас: https://otus.pw/DXwE/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Hibernate ORMHibernate ORM
- это фреймворк для работы с базами данных, который позволяет разработчикам работать с объектами вместо запросов SQL. Hibernate позволяет ускорить процесс разработки и уменьшить количество кода, необходимого для работы с базой данных.
В этом примере мы создаем класс Student
, который аннотируется с помощью аннотаций Hibernate
, указывающих, что данный класс является сущностью, а его поля соответствуют столбцам в таблице базы данных. Затем мы создаем объект SessionFactory
и используем его для сохранения и получения объекта Student
из базы данных.
#для_начинающих
Метод replaceFirst()
Метод replaceFirst()
в Java используется для замены первого подстроки в строке на другую подстроку. Этот метод является частью класса java.lang.String
и принимает два параметра: регулярное выражение (регулярное выражение) и замену.
Сигнатура метода:
public String replaceFirst(String regex, String replacement)Где:
regex
— это регулярное выражение, которое вы ищете в строке.replacement
— строка, которой вы заменяете первое найденное совпадение с regex.CallableCallable
— это интерфейс из пакета java.util.concurrent
, который представляет собой задачу, которую можно выполнить и получить результат, а также обработать исключение, если оно произошло во время выполнения задачи. Он аналогичен интерфейсу Runnable
, но в отличие от Runnable
, Callable
может возвращать результат выполнения и бросать проверяемые исключения.
#для_продвинутых