Изучаем Java. По вопросам сотрудничества: @seniorvladislav
Ссылочные типы
В Java все типы данных делятся на две категории: примитивные типы и ссылочные типы. Ссылочные типы данных представляют собой объекты, которые содержат данные и методы для работы с ними. В отличие от примитивных типов, переменные ссылочных типов хранят ссылку на объект, а не его значение.
#для_начинающих
Сортировка Шелла
Если простыми словами, то сортировка Шелла это алгоритм сортировки массива, который улучшает производительность сортировки вставками.
Он основан на сравнении элементов, находящихся не только рядом, но и на определенном расстоянии друг от друга.
Суть алгоритма заключается в том, что на каждом шаге расстояние между элементами уменьшается вдвое, что позволяет ускорить сортировку.
#для_продвинутых
Переопределение методов в классах наследниках
В Java можно переопределить методы в классах-наследниках с помощью ключевого слова @Override
. Переопределение метода позволяет изменить его реализацию в подклассе, сохраняя при этом сигнатуру (имя, типы параметров и возвращаемое значение) метода из суперкласса.
Обратите внимание на использование аннотации @Override
перед переопределенным методом в классе Subclass
. Это помогает компилятору обнаружить ошибки, если вы случайно ошиблись в сигнатуре метода или не переопределили метод правильно.
#для_продвинутых
Инвертированный индекс
Инвертированный индекс — это структура данных, используемая в информационных поисковых системах для быстрого поиска документов, содержащих определенные слова или фразы. В инвертированном индексе каждое уникальное слово (термин) в коллекции документов связывается с списком документов, в которых это слово встречается.
Ниже приведен пример простой реализации инвертированного индекса на языке Java. Этот пример демонстрирует создание инвертированного индекса для небольшой коллекции документов.
#для_продвинутых
⚡️🪫Что делать, если система не справляется с нагрузкой? Узнайте, как эффективно справляться с нагрузками и обеспечивать бесперебойную работу ваших приложений!
🔥23 января в 20.00 мск. приглашаем на открытый вебинар в OTUS, где мы обсудим подходы для решения проблем, связанных с производительностью системы.
Вопросы вебинара:
- Как правильно реализовать один сервис?
- Что такое нагрузочное тестирование, и как его проводить?
- Как оптимизировать код и улучшить производительность?
- Зачем нужны OpenTelemetry и платформа наблюдаемости?
- Как провести трассировку запроса и оптимизацию запросов к БД?
- Что такое репликация и шардирование в MSA?
Убедитесь, что ваша система готова к любым нагрузкам!
👉Регистрация https://otus.pw/i5O4/
Реклама. ООО «Отус онлайн образование», ОГРН 1177746618576
Юнит-тестирование в Java
Юнит-тестирование — это процесс тестирования отдельных блоков кода (юнитов) с целью обеспечения их корректной работы и выявления возможных ошибок и проблем в функциональности. Юнит-тесты должны быть маленькими, изолированными и быстрыми, и они позволяют выявить ошибки и несоответствия в вашем коде на ранних этапах разработки. В Java для написания юнит-тестов часто используется фреймворк JUnit. Вот как написать и запустить юнит-тесты в Java с использованием JUnit.
#для_продвинутых
Сервлеты
Сервлеты — это программные компоненты, которые расширяют функциональность сервера, помогают создавать веб-страницы и взаимодействовать с базами данных.
Сервлет получает запрос от браузера, обрабатывает его и отправляет ответ в браузер.
#для_продвинутых
Интерфейс Predicate
Интерфейс Predicate
представляет собой функциональный интерфейс, который принимает один аргумент и возвращает булево значение. Его можно использовать для определения условий, на основе которых можно фильтровать данные.
#для_продвинутых
Как вызвать один конструктор из другого?
В Java, вы можете вызвать один конструктор из другого с использованием ключевого слова this. Это делается с целью избежать дублирования кода в разных конструкторах класса.
В приведенном выше примере конструктор по умолчанию вызывает конструктор с параметром, передавая ему значение 0.
Обратите внимание, что вызов другого конструктора должен быть первым оператором в теле конструктора. Это обязательное правило.
#для_начинающих
«Клиент-серверная архитектура на Java» — это серьёзный апгрейд Java-скиллов. Если хочешь разобраться в тонкостях клиент-серверных приложений и не бояться сложных задач — тебе на этот курс!
Курс построен на формате живых вебинаров и домашних заданий с проверкой.
Старт курса - 25 января
Вам доступно небольшое демо-занятие для проверки знаний, чтобы убедиться, что курс тебе точно по силам.
Программа курса охватывает ключевые аспекты разработки клиент-серверных приложений на Java, включая:
☕️ Многопоточность в Java: изучение классов Thread и Runnable, использование атомарных типов данных, потокобезопасных коллекций и паттерна пула потоков для эффективной синхронизации и оптимизации задач.
🖥 Разработка графических интерфейсов: создание GUI с помощью библиотек Swing и JavaFX, применение архитектуры MVC и разметки на FXML для разработки удобных пользовательских интерфейсов.
🗄 Работа с базами данных: взаимодействие с базами данных через JDBC API, создание запросов, управление метаданными, предотвращение SQL-инъекций и интеграция этих знаний в разработку распределённых веб-приложений на Java с использованием сервлетов и фреймворков, таких как JSF.
Получить демо-доступ к курсу
Реклама. Информация о рекламодателе
👩💻 «OpenAPI + Spring».
Приглашаем на открытый урок, где мы разберем:
✔️ Что такое OpenAPI и для чего она нужна.;
✔️ Генерация спецификаций;
✔️Интеграция OpenAPI в Spring-приложения;
✔️Советы по масштабируемости и поддержке.
🗓 23 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework»
🔗 Ссылка на регистрацию : https://otus.pw/EsCe/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Логирование данных
Уже давно прошло то время, когда для наблюдением за работой программы надо сидеть на стуле и всматриваться в консоль, сейчас эту работу делают логеры.
Суть логеров в записи данных из программы, дополняя её такими данными как время, место, уровень и так далее.
Самым популярным логером на данный момент является Log4J, установить который можно с помощью Maven/Gradle.
#для_продвинутый
Как разделить строку на части?
В Java можно разделить строку на части с помощью метода split()
класса String
. Метод split()
разбивает исходную строку на массив строк, используя заданный разделитель.
В этом примере исходная строка «Это пример строки для разделения» разбивается на части с помощью пробела в качестве разделителя. Однако, если у вас есть другой разделитель (например, запятая или точка с запятой), просто замените значение переменной delimiter
на соответствующий разделитель в вашем случае.
#для_начинающих
👩💻 Как сделать Java-приложения быстрее и эффективнее?
Асинхронное программирование — must-have для современных приложений. Хотите узнать, как использовать NIO2 для максимальной производительности?
🗓 20 января в 20:00 мск — откроем двери в мир Java NIO2! Разберём основы, научим писать асинхронный код и раскроем секреты пропускной способности приложений.
Успейте записаться, чтобы не упустить возможность освоить продвинутые инструменты Java.
А еще участники вебинара получат скидку на обучение на курсе «Java Developer. Advanced».
➡️ Регистрация на вебинар: https://otus.pw/btR5/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Интерфейс Supplier
Интерфейс Supplier — это функциональный интерфейс в языке программирования Java, определенный в пакете java.util.function. Он представляет собой интерфейс, который может использоваться для предоставления значений, но не принимает аргументов. В этом интерфейсе есть один метод, который не принимает аргументов и возвращает значение.
Метод Supplier:
T get();Где
T
-- это тип возвращаемого значения.Supplier
может быть полезным, когда вам нужно получить значение, но не требуется передавать какие-либо аргументы для его получения. Этот интерфейс часто используется, например, в лямбда-выражениях и стримах для предоставления значений.👩💻 Работаете с Java, но хотите попробовать себя в Android-разработке?
👩💻 Начните с простой и полезной задачи — приложения для заметок!
На открытом уроке 27 января 2025 в 20:00 вы освоите:
— Создание списков через RecyclerView.
— Работу с базой данных Room.
— Использование Flow для обновления данных.
Это отличный шанс погрузиться в мир Android. К тому же, все участники вебинара получат скидку на обучение на курсе «Android Developer»!
➡️ Регистрация на вебинар: https://otus.pw/zwwl/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Мечтаешь о той самой работе в Big Tech, но никогда не проектировал системы? Или работаешь на галере с нулевым подходом к проектированию и не знаешь, а как разбираться в архитектуре приложений?
Знаешь, ведь я был таким же, как ты. Читал книги, смотрел курсы, но на работе не было той почвы, которая давала бы рост. А на всех ресурсах одни и те же проблемы: устаревшие подходы, зачитывание терминов без примеров и самое главное — минимум практики.
Я решил с этим покончить. Больше никаких недо-курсов, которые “готовят к собесу за один месяц с нуля”. Это невозможно, если ты не обладаешь базой. Но все реально, если разобраться в компонентах, которые составляют эти системы.
Приходи на мой Открытый Урок, где за час мы посмотрим на эти самые компоненты. А еще я расскажу про процесс проектирования в Big Tech и что такое system design секция.
В конце лекции анонс продукта, который поможет тебе навсегда решить проблему с проектированием.
ЗАПИСАТЬСЯ
PS: недавно проходил собес в один российский Big Tech. Результат можешь увидеть на скрине
👩💻 Хотите, чтобы ваши приложения на Java выдерживали любую нагрузку?
Executors — это не просто инструмент, а секретная «суперсила» JDK для управления потоками. Разберем, как грамотно настраивать пулы потоков и использовать их в реальных проектах.
🗓 На открытом уроке 27 января в 20:00 мск мы покажем, как сделать ваши сервисы быстрее и надежнее, даже если нагрузки растут. Участники получат скидку на большое обучение «Java Developer. Professional».
🎙 Спикер Сергей Петрелевич — опытный разработчик на Java и Kotlin.
➡️ Успейте зарегистрироваться и узнайте, как улучшить свои навыки в многопоточности с помощью Executors: https://otus.pw/Z7XA/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Получить атомное время из интернет-часов
Для получения атомного времени из интернет-часов в Java вы можете воспользоваться классом java.net.URL
для выполнения HTTP-запроса к одному из сервисов времени, таким как «time.google.com». Затем вы можете обработать полученный ответ и извлечь атомное время.
Обратите внимание, что формат ответа от сервиса времени может различаться, и вам может потребоваться настроить метод parseAtomicTime
для вашего конкретного сервиса. Подобные сервисы могут предоставлять атомное время в разных форматах, таких как ISO 8601 или Unix Timestamp.
#для_начинающих
abstract
Ключевое слово abstract используется для определения абстрактного класса или метода. Абстрактный класс не может быть создан, он служит только в качестве базового класса для других классов, которые могут быть созданы на его основе.
Это позволяет упростить проектирование классов и повторно использовать код.
#для_продвинутых
Программист - самая востребованная профессия в 2025!
Тогда почему ты опять не получил оффер?
Пока ты боишься говорить о деньгах и мямлишь про свой опыт, кто-то другой занял твое место. Чтобы HR выстраивались в очередь, приходи на лекцию от команды FAANG School.
Отдаем бесплатно то, что продают за бешенные деньги на карьерных консультациях.
- увидишь, как HR собеседует программиста в прямом эфире
- поймешь, как отвечать на неудобные вопросы про зарплату
- разберешь частые ошибки начинающих на собесах
- научишься представлять предыдущий опыт
- узнаешь, как говорить о своих сильных сторонах без пафоса
- поймешь, что нужно спросить у HR, чтобы понять уровень компании
Заберешь пошаговый план прохождения всех этапов интервью, с которым у тебя больше не будет отказов.
Приходи на эфир, чтобы выделяться среди конкурентов и самому выбирать офферы.
👋 Меня зовут Николай, я - техлид в крупном банке
На текущий момент провел более 100 собеседований разработчиков уровня middle+, при этом сам регулярно прохожу собеседования и получаю офферы в крупнейшие компании: Яндекс, Альфу, Сбер и др.
Благодаря этому я накопил большой опыт в прохождении собеседований, знаю какие вопросы задают и как правильно на них отвечать, чтобы получить заветный оффер
Занимаюсь менторингом действующих разработчиков Java, кто хочет повысить свою зарплату, а также тех, кто имеет опыт самостоятельного обучения и хочет найти первую работу Java разработчиком (совсем без знаний будет трудно)
На менторинге показываю каким образом ведется разработка реального проекта, расставляю приоритеты в обучении, готовлю к собеседованиям, даю домашнее задание и провожу ревью, отвечаю на любые вопросы. По окончании курса мы с вами напишем 3 микросервиса и 1 библиотеку (spring boot starter), которые могут вам встретится в реальной работе и станут частью вашего резюме
Все ученики первого потока успешно трудоустроились, три человека получили оффер более 200 тысяч рублей в месяц
Второй поток в самом разгаре, обучаются как ребята смежных IT специальностей (аналитики, специалисты сопровождения, разработчики других ЯП), так и действующие Java разработчики с несколькими годами опыта
Всего обучение прошли или проходят 25 учеников
Курс содержит 35 часов лекций и 15 часов живого разбора вопросов. Кроме того вы получите доступ к вопросам, которые задавали мне и моим ученикам на реальных собеседованиях
Третий поток начинается 8 февраля, если хотите участвовать - заполните анкету и я с вами свяжусь
Также я веду блог пишу статьи на habr
Сортировка слиянием (Merge Sort)
Сортировка слиянием - это алгоритм сортировки, который основан на разделении массива на меньшие части, сортировке каждой части и объединении этих частей в отсортированный массив. Он имеет сложность O(n log n)
и может быть эффективно использован для сортировки больших наборов данных.
Она может быть применена для сортировки массивов объектов, чисел, строк и любых других данных. В некоторых случаях сортировка слиянием может быть более эффективной, чем другие алгоритмы сортировки, особенно когда данные не упорядочены.
#для_продвинутых
Класс Properties
Класс Properties
— это подкласс Hashtable
. Он используется для хранения списков значений, в которых ключ является String
, а значение также является String
.
Класс Properties
используется множеством других классов. Например, это тип объекта, возвращаемый System.getProperties()
, когда тот получает внешние значения.Properties
определяет следующие переменную экземпляра. Эта переменная содержит список свойств по умолчанию, связанный с объектом Properties
.
Следующая программа показывает несколько методов, поддерживаемых этой структурой данных.
Методы и классы, объявленные Properties
, можно посмотреть здесь.
#для_продвинутых
Класс Stack
Класс Stack
является подклассом класса Vector. Стек является линейной структурой данных, где элементы добавляются и удаляются в соответствии с принципом «последним вошел, первым вышел» (LIFO — Last-In, First-Out).
В Java, класс Stack
был часто использован в более ранних версиях для работы со стеками, но в более современных версиях рекомендуется использовать класс Deque (Double-ended queue) из пакета java.util
. Deque предоставляет методы для работы как со стеком, так и с очередью.
#для_продвинутых
Когда использовать рефлексии?
Уверен многих кто только начал учить ReflectionAPI удивили возможности этого инструмента. Но работа с ним довольно тяжёлая для системы, поэтому лучше использовать её в крайних случаях.
К примеру — обработка класса с аннотациями (пример выше). Извлекая аннотации из объектов класса, можно обрабатывать её каким угодно образом.
Также рефлексии часто применяют в тестировке, а именно для приватных полей и методов. Достаточно получить метод из класса, задать method.isAccessible(true)
и можно вызывать его как публичный.
#для_начинающих
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля.
📆 Когда: 20-21 января в 19:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Изучить базовые конструкции языка — переменные, типы данных, условные конструкции, циклы, импорты библиотек.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️ Создать консольное приложение и протестировать собственного бота.
✔️ Узнать ответы на интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участников
интенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика!
Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid:2W5zFJA7L6L
Класс DataOutputStream и его методы
Поток DataOutputStream
позволяет записывать примитивные данные в исходный код.
Если используйте объект DataOutputStream
, то у Вас есть под рукой вспомогательные методы, которые можно использовать для записи потока или для выполнения других операций над потоком.
Все перечисленные методы можно просмотреть здесь.
#для_продвинутых
Метод flatMap
Метод flatMap
используется в контексте работы с потоками (streams) в пакете java.util.stream
. Он представлен в интерфейсе Stream<T> и предназначен для преобразования элементов потока, когда каждый элемент может быть преобразован в ноль или один элемент другого потока.
Метод flatMap
применяет функцию mapper
к каждому элементу исходного потока и «разворачивает» (сплющивает) поток элементов в один объединенный поток, игнорируя нулевые потоки, которые могут быть результатом преобразования.
#для_продвинутых
LeetCode теперь в Telegram!
LeetCode — это сайт, который позволяет быстро готовиться к техническим собеседованиям по программированию. Там публикуются задачи с собеседований в Google и Microsoft с решениями.
Подписывайтесь: @leetcode