Секреты Java
رفتن به کانال در Telegram
Обсуждаем Java, архитектуру, фреймворки и всё, о чем должны говорить разработчики. Владелец: @Alexey_Morl Реклама на бирже: https://telega.in/c/java_secrets
نمایش بیشتر7 991
مشترکین
اطلاعاتی وجود ندارد24 ساعت
اطلاعاتی وجود ندارد7 روز
اطلاعاتی وجود ندارد30 روز
آرشیو پست ها
7 991
Этот навык – чит-код для разработчика
Работодатели тратят миллионы из-за лишних 10 секунд, которые грузился интернет-магазин или банк. Поэтому главный навык IT-специалиста в 2024 году – уметь создавать системы, которые обрабатывают огромные потоки данных без задержек и сбоев.
Если вы хотите стать востребованным разработчиком, вам нужно знать Redis.
Эта система позволяет гарантировать великолепный опыт юзеров от использования ключевых фич вашего проекта.
Специально для этого ребята из FAANG School подготовили онлайн эфир, где расскажут, как создавать высоконагруженное приложение с Redis.
Вы узнаете:
– что такое кэш и когда его использовать
– как избежать ошибок многопоточности в Redis
– как использовать Redis в высоконагруженных проектах. Реальные примеры кода
– о концепции NoSQL и горизонтальном масштабировании
– как корректно работать с данными в Redis
– как использовать Redis в качестве основной БД
Переходите, чтобы после эфира реализовать несколько фич с Redis и увеличить шанс получить оффер.
7 991
Да, быть разработчиком непросто. Но нет ничего невозможного, если у вас есть желание разобраться ☕
А если не уверены, что именно язык Java «ваш», то добро пожаловать на подготовительный курс «Java-разработчик» от онлайн-школы Хекслет.
Практика с первого дня обучения, 62 онлайн-урока, 4 живых вебинара, помощь наставника, собственный проект по окончании программы, – и все это даже при нулевом уровне подготовки.
Не обещаем, что будет легко, но интересно, полезно и недорого (всего 990 рублей!) – гарантируем.
На все это вам будет отведено 2 недели и 1 наставник-эксперт, который поможет справиться с трудностями.
⏰ Cтарт уже 3 сентября, так что записывайтесь скорее!
7 991
One Weekend Offer для Java-разработчиков 👨💻
Если вы — Java-разработчик уровня Middle/Senior/Lead с опытом работы от 3 лет, то присоединяйтесь к команде Сбера!
31 августа – 1 сентября вы сможете пройти все этапы отбора, познакомиться с будущей командой и получить заветный оффер. Какие задачи будут в вашем планере?
▫️ Проводить декомпозицию и оценку задач.
▫️ Работать в тесной связке с аналитиками и разработчиками front-end.
▫️ Выполнять code review.
▫️ Проектировать архитектуру приложения.
Наша команда разрабатывает высоконагруженные сервисы с использованием Cloud Native подхода к созданию, развёртыванию и управлению современными приложениями в средах облачных вычислений.
Откликайтесь, и увидимся на выходных! 😉
7 991
✅ Docker
Docker - это платформа для автоматизации развертывания приложений в контейнерах. Контейнеры позволяют упаковывать приложения вместе с его зависимостями и конфигурацией.
Docker контейнер:
Контейнер - это не виртуальная машина (ВМ). Они используют разные способы виртуализации. Ресурсы для ВМ разделяются на уровне железа, а для docker контейнеров - на уроне ОС.
Контейнер представляет собой изолированный процесс, в котором работает приложение. Приложения, которые работают внутри контейнера, не имеют доступа к основной ОС, что позволяет поддерживать высокий уровень изоляции.
Контейнеры запускаются из Docker-образов и могут быть легко развернуты на любом сервере, поддерживающем Docker.
Dockerfile:
Dockerfile — это текстовый файл, содержащий инструкции для сборки Docker-образа. Он описывает, какие действия необходимо выполнить для создания образа, включая установку зависимостей, копирование файлов и настройку окружения.
# Используем образ Java
FROM java:8
# Копируем наше приложение
COPY App.java .
RUN javac App.java
# Запускаем приложение
CMD ["java", "App"]
Зачем использовать Docker?
▫️Портативность: docker позволяет запустить одно и то же приложение на любом сервере без необходимости настройки окружения
▫️Изоляция: Каждый контейнер изолирован, что предотвращает конфликты между зависимостями разных приложений
▫️Масштабируемость: Легко масштабировать приложение, добавляя новые контейнеры по мере необходимости
▫️Упрощение CI/CD: Docker отлично вписывается в процессы непрерывной интеграции и доставки, ускоряя разработку и тестирование
Всю информацию, которую хотелось бы рассказать про Docker, не уложить в один пост, так что ждите продолжение)
🫡 Секреты Java
#docker7 991
Тестовое собеседование на Middle Java-разработчика в среду
28 августа(в эту среду) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Роман Половинцев, ex-TeamLed в Сбер, Т-Банк, Райффайзенбанк и ВТБ
2. Роман будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Роману
Что узнаешь на прямом эфире от ШОРТКАТ:
- Чего ждут от кандидатов на Middle позиции в Java-разработке
- Какие вопросы задают на интервью и зачем
- Как подготовиться к собесу, чтобы получить оффер
Это бесплатно?
Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
7 991
✅ Сортировка Шелла
Сортировка Шелла - этот алгоритм был представлен Дональдом Шеллом в 1959 году и является улучшенной версией сортировки вставками.
Сортировка вставками последовательно передвигает каждый элемент массива в начало пока не встретится элемент меньший по значению. Данный подход не оптимальный так как в некоторых случаях потребуется переместить элемент в самое начало массива.
Дональд Шелл предложил сортировать элементы, находящиеся на расстоянии друг от друга, а затем уменьшать это расстояние до 1.
Сортировка Шелла состоит из 3 шагов:
▫️Выбираем начальное значение шага. Обычно это половина длины массива
▫️Сортируем элементы, находящиеся на расстоянии шага друг от друга
▫️Уменьшаем значение шага, пока он не станет равным 1
Реализация:
public static void shellSort(int arr[]) {
int n = arr.length;
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int key = arr[i];
int j = i;
while (j >= gap && arr[j - gap] > key) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = key;
}
}
}
Разбор:
Пусть у нас есть массив:
int arr[] = {4, 1, 3, 2};
1. Выбрали значение шага (gap), допустим, равное 2
2. Затем в первом цикле мы сравниваем 4 и 3, и 1 и 2, меняем местами если второе число меньше и получаем массив вида:
int arr[] = {3, 1, 4, 2};
3. Во втором цикле уменьшаем значение шага в два раза, до 1, и изменения происходят таким образом:
{3, 1, 4, 2} -> {1, 3, 4, 2} -> {1, 3, 4, 4} -> {1, 3, 3, 4} -> {1, 2, 3, 4}
Асимптотическая сложность зависит от выбора последовательности шагов. В общем случае, сложность сортировки Шелла может варьироваться от O(n^(3/2)) до O(n log n).
Понимание как устроены базовые алгоритмы, такие как сортировка, поможет вам в развитии логического и алгоритмического мышления, а так в освоение более сложных алгоритмов.
🫡 Секреты Java
#java #sort7 991
Воркшоп «Процессное приложение на Jmix BPM: с нуля до запуска в работу»
Дата: 28 августа, 16:00 по Мск
Участвуйте в практическом воркшопе , где за 45 минут вы узнаете, как автоматизировать бизнес-процессы на Jmix BPM. Для создания полнофункционального решения вы научитесь пользоваться инструментами платформы: модель процесса, модель данных, ролевой доступ, административный и пользовательский интерфейс.
Для примера возьмем типичный процесс, который встречается в любой CRM-системе – процесс согласования договора. Мы начнем с BPMN-модели, предоставленной аналитиком, и шаг за шагом пройдем все этапы разработки, включая создание модели данных и административного интерфейса, настройку ролевого доступа, доработку аналитической модели до исполняемой, разработку процессных форм и DMN-таблицы принятия решений.
В результате мы получим веб-приложение Jmix, которое может быть установлено на сервере, чтобы бизнес-пользователи могли его протестировать и дать обратную связь.
План воркшопа:
• Постановка задачи
• Проектирование процесса бизнес-аналитиком
• Передача BPMN-модели разработчику
• Создание модели данных и экранов для сущностей
• Настройка ролевой модели
• Настройка подсистемы уведомлений
• Доработка аналитической BPMN-модели до исполняемой
• Тестирование процесса
• Сохранение модели процесса в библиотеке процессов
• Деплоймент
• Ответы на вопросы
🔗 Регистрация на воркшоп тут.
Реклама. ООО "ХОУЛМОНТ". ИНН 6316134393.
7 991
✅ Внутренние или статические вложенные классы
В Java есть 4 вида классов внутри другого класса:
1. Вложенные внутренние классы – нестатические классы внутри внешнего класса
2. Вложенные статические классы – статические классы внутри внешнего класса.
3. Локальные классы Java – классы внутри методов.
4. Анонимные Java классы – классы без имени, которые создаются на ходу.
В этот раз поговорим про вложенные внутренние и вложенные статические классы:)
- Статические вложенные классы:
▫️Не связаны с экземпляром внешнего класса.
▫️К ним можно обращаться напрямую через имя внешнего класса.
▫️Могут содержать статические поля и методы.
- Нестатические вложенные классы:
▫️Связаны с экземпляром внешнего класса.
▫️Имеют доступ ко всем членам внешнего класса, включая private.
▫️Не могут содержать статических полей.
Зачем использовать вложенные классы?
▫️Логическая группировка: Объединение тесно связанных классов в единую структуру.
▫️Скрытие реализации: Внутренние классы могут быть использованы для реализации деталей, невидимых для внешнего мира.
Рассмотрим пару примеров:
Нестатический вложенный класс:
public class OuterClass {
private int x = 10;
public class InnerClass {
public void display() {
System.out.println("x = " + x);
}
}
}
Протестируем:
public static void main(String[] args) {
// Создаем экземпляр внешнего класса
OuterClass outer = new OuterClass();
// Создаем экземпляр внутреннего класса
InnerClass inner = outer.new InnerClass();
// Вызываем метод display
inner.display(); //Выведет: x = 10
}
Собственно никаких больших секретов нет:) Внутренний объект не может существовать без внешнего и у объекта внутреннего класса есть доступ к переменным «внешнего» класса))
Статический вложенный класс:
public class Person {
private String firstName;
private String lastName;
// ... геттеры\сеттеры и прочее интересное
public static class NameFormatter {
public static String formatFullName(Person person) {
return person.lastName + ", " + person.firstName;
}
}
}
▫️Класс Person представляет человека с именем и фамилией.
▫️Класс NameFormatter является статическим внутренним классом, который содержит статический метод formatFullName. Этот метод принимает объект Person и возвращает полное имя в формате "Фамилия, Имя".
▫️Поскольку NameFormatter является статическим, мы можем вызывать метод formatFullName без создания экземпляра класса Person.
Глянем на использование:
public static void main(String[] args) {
Person person = new Person("Иван", "Петров");
String formattedName = Person.NameFormatter.formatFullName(person);
System.out.println(formattedName);
// Выведет: Петров, Иван
}
Где же это применить?
- Паттерны: Самый яркий пример который используется повсеместно это паттерн "Builder\Строитель" (если не знакомы, то время ознакомиться!).
- Создание стратегий: Статические внутренние классы могут реализовывать различные алгоритмы или стратегии, связанные с внешним классом.
В следующих постах рассмотрим Локальные и Анонимные Java классы. Там много интересного))
🫡 Секреты Java
#java #core7 991
Устал уже готовиться к собеседованиям, учить одни и те же вопросы?
На одних знаниях невозможно проходить собеседования успешно.
Два человека:
1. Знает идеально всю теорию, но не ходит на собеседования, боится, откладывает, ищет подходящий момент и тд
2. Знает 50% теории, ходит по собеседованиям, получает оффер спустя 10 попыток
Кем вы хотите быть из этих двух людей? Второй человек рано или поздно за счет количества попыток пробьется на работу. На работе уже подтянет знания до необходимых бизнесу.
В конечном итоге у него будет и работа, и знания. У первого будут только знания.
🤔 Окей, а как найти работу-то?
Первый способ:
Увеличивать вероятность прохождения за счет своих хард-знаний
Учить больше, лучше, глубже: java, spring, базы данных, микросервисы и тд.
Второй способ:
Ходить на собеседования столько, чтобы научиться их хорошо проходить. Качать софт-скиллы, умение объяснять и доносить мысли другим людям
Только факт того, что вы сходили на собеседование - это уже сильное потрясение.Вам сразу же показывают где у вас есть слабости в ваших знаниях, и вы идете их закрывать. А сидя в спокойной обстановке, так бы и не закрыли эти пробелы. Вам дргуие люди показывают где вы плохи, а это неприятно и заставляет развиваться. После этого мозг расчехляет ресурсы на устранение пробелов в знаниях. Продолжение про то как вырасти разработчику в канале Павла Сорокина - senior Java разработчика
7 991
✅ Spring @EventListener
В одном из предыдущих постов рассказывалось про паттерн Наблюдатель. Сегодня посмотрим, как данный подход реализуется в Spring.
Создадим класс, который будет содержать информацию о событие:
@Getter
public class PersonCreateEvent {
private UUID personId;
public PersonCreateEvent(UUID personId) {
this.personId = personId;
}
}
До версии Spring 4.2 подобные классы должны были расширять абстрактный класс ApplicationEvent.
В сервисном классе внедрим ApplicationEventPublisher:
@Service
@RequiredArgsConstructor
public class PersonService {
private final ApplicationEventPublisher publisher;
public void addNewPerson(String name) {
var person = new Person(name);
publisher.publishEvent(new PersonCreateEvent(person.getId()));
}
}
ApplicationEventPublisher - это интерфейс из Spring Framework, который инкапсулирует логику публикации событий.
Передавая экземпляр класса PersonCreateEvent в метод publisher.publishEvent, Spring самостоятельно отправит событие слушателям.
Реализуем простой слушатель:
@Component
public class PersonEventListener {
@EventListener
public void handle(PersonCreateEvent event) {
System.out.println(event.getPersonId());
}
}
@EventListener - аннотация, которая была добавлена в Spring 4.2. Эта аннотация регистрирует слушателя события на основе аргумента метода.
Механизм публикации событий в Spring - это отличный инструмент, который позволяет с минимальными усилиями структурировать приложение, разбивая логику на отдельные модули.
🫡 Секреты Java
#java #spring7 991
🎓 Архив слитых курсов прямо в телеграм!
Вот огромная база материалов, которая пополняется каждый день!
>Python (96гб видео)
>С++(51 курсов)
>Java (23гб видео)
>Базы данных (50гб курсов)
>C# (45гб курсов)
>Английский (101гб курсов)
>PHP (43гб видео)
>Мобильная разработка (22гб курсов)
>Go ( 132гб видео)
>Rust (35 гб видео)
>SQL (43гб видео)
>MySQL (31гб видео)
>Другое (1679 гб видео)
⛓ Огромный кладезь топовых материалов более 20198Гб: Курсов, свежих книг, шпаргалок, гайдов , лекций, — всё в одном месте: @datacours
