Черные скидки на курсы в Академии!
-40% до конца ноября
🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все курсы proglib.academy и дарим промокод на сумму 10 000 на технику в магазине DigitalRazor (отправим вам по запросу)
🎁 Анонс новогоднего сюрприза!
🎄 Те, кто успеет приобрести курсы с 27 ноября по 27 декабря, получат шанс выиграть крутой новогодний подарок.
Что это будет, пока держим в секрете – следите за новостями на нашем канале!
Почему стоит выбрать нас?
⚫️ Опытные преподаватели
Вас будут обучать доценты ВМК МГУ по математике, а алгоритмы расскажет разработчик из Яндекса и преподаватель МФТИ и НИУ ВШЭ.
⚫️ Бессрочный доступ ко всем курсам
Проходите обучение в удобном для вас темпе, без давления жестких сроков.
⚫️ Поддержка преподавателей
Не останетесь одни — вам всегда помогут разобраться с трудными темами и ответят на любые вопросы через чат и платформу Coreapp.
👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения –
Ждем вас на обучении! 🙌
-40% до конца ноября
🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все курсы proglib.academy и дарим промокод на сумму 10 000 на технику в магазине DigitalRazor (отправим вам по запросу)
🎁 Анонс новогоднего сюрприза!
🎄 Те, кто успеет приобрести курсы с 27 ноября по 27 декабря, получат шанс выиграть крутой новогодний подарок.
Что это будет, пока держим в секрете – следите за новостями на нашем канале!
Почему стоит выбрать нас?
⚫️ Опытные преподаватели
Вас будут обучать доценты ВМК МГУ по математике, а алгоритмы расскажет разработчик из Яндекса и преподаватель МФТИ и НИУ ВШЭ.
⚫️ Бессрочный доступ ко всем курсам
Проходите обучение в удобном для вас темпе, без давления жестких сроков.
⚫️ Поддержка преподавателей
Не останетесь одни — вам всегда помогут разобраться с трудными темами и ответят на любые вопросы через чат и платформу Coreapp.
👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения –
Ждем вас на обучении! 🙌
🛠 Основные характеристики Spring Bean:
-
Контейнер отвечает за создание, инициализацию и уничтожение бина.
-
Бины можно определять с помощью аннотаций (
-
Контейнер автоматически внедряет зависимости, требуемые для работы бина.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Книги для программистов
🎅 Какой подарок вы бы хотели на НГ? Пишите в комментариях👇
Админ на НГ не отказался бы от вашей активности. Реакции, комментарии, конструктивные предложения будем ждать под ёлкой 🎄
Админ на НГ не отказался бы от вашей активности. Реакции, комментарии, конструктивные предложения будем ждать под ёлкой 🎄
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Напоминаем: у нас можно (и нужно) купить рекламу
→ Более 60 телеграм-каналов по всем направлениям IT
→ Почти 1,2 миллиона аудитории
→ Собственное медиа и сайт с DAU 25 000 — можем усилить продвижение
→ Классные email-рассылки
→ И, конечно же, крутые контент-менеджеры, которые сделают нативную интеграцию/придумают виральный пост/реализуют любые контентные предпочтения
Для заказа пишите сюда: @proglib_adv
→ Более 60 телеграм-каналов по всем направлениям IT
→ Почти 1,2 миллиона аудитории
→ Собственное медиа и сайт с DAU 25 000 — можем усилить продвижение
→ Классные email-рассылки
→ И, конечно же, крутые контент-менеджеры, которые сделают нативную интеграцию/придумают виральный пост/реализуют любые контентные предпочтения
Для заказа пишите сюда: @proglib_adv
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
Переход на PostgreSQL — это не просто замена одного инструмента другим. Неправильный подход может привести к потере данных, снижению производительности и длительным простоям. Особенно это касается хранимых процедур: различия между PL/pgSQL и языками, такими как PL/SQL или T-SQL, могут вызывать ошибки, которые сложно обнаружить заранее.
Если вы хотите узнать, как избежать этих проблем, правильно спланировать переход и не потерять производительность, ознакомьтесь с важными советами и готовыми решениями, которые сделают миграцию безопасной и эффективной. 🚀
🔗 Читать статью
🔗 Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
Phantom reads (фантомные чтения) — это ситуация, когда одна транзакция
- В это время транзакция B добавляет новую запись: INSERT INTO orders (id, amount) VALUES (10, 150); и фиксирует изменения (COMMIT).
- Транзакция A повторяет свой запрос: SELECT * FROM orders WHERE amount > 100;
- Теперь в результате запроса появляется новая запись с id = 10, которая не была видна в первой выборке.
Фантомные чтения возможны на уровнях изоляции ниже
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 Розыгрыш от Proglib Academy и DigitalRazor!
С 27 ноября по 27 декабря у вас есть шанс не только прокачать свои навыки, но и выиграть ПК при покупке любого курса Академии!
🎁 Призы для участников акции:
– Игровой ПК DigitalRazor ProGaming
– VIP-пакет курса Proglib Academy
💡 Как принять участие?
Купите любой курс Proglib Academy с 27 ноября по 27 декабря и получите шанс выиграть мощный ПК.
Приобретите технику DigitalRazor — участвуйте в розыгрыше VIP курса.
📅 Вместе с DigitalRazor мы создали спецпредложение -50% на курсы до 30 ноября, чтобы вы могли начать обучение на более выгодных условиях.
Выбрать курс
С 27 ноября по 27 декабря у вас есть шанс не только прокачать свои навыки, но и выиграть ПК при покупке любого курса Академии!
🎁 Призы для участников акции:
– Игровой ПК DigitalRazor ProGaming
– VIP-пакет курса Proglib Academy
💡 Как принять участие?
Купите любой курс Proglib Academy с 27 ноября по 27 декабря и получите шанс выиграть мощный ПК.
Приобретите технику DigitalRazor — участвуйте в розыгрыше VIP курса.
📅 Вместе с DigitalRazor мы создали спецпредложение -50% на курсы до 30 ноября, чтобы вы могли начать обучение на более выгодных условиях.
Выбрать курс
Область видимости в Spring определяет
Один экземпляр бина создаётся на весь контекст Spring. Используется для общих объектов.
- Prototype:
Бин создаётся для каждого HTTP-запроса (только в веб-приложениях).
- Session:
Один бин на весь жизненный цикл ServletContext.
- WebSocket:
Для указания области видимости используется аннотация
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
🏢📊 Как сократить расходы на инфраструктуру в 20 раз: опыт внедрения мультитенантной архитектуры
Снизить затраты на инфраструктуру в десятки раз — не фантастика, а реальность. Мультитенантная архитектура помогает не только экономить деньги, но и упрощает подключение новых клиентов, масштабирование и обслуживание системы. Такой подход значительно облегчает работу и открывает новые возможности для роста.
Хотите узнать, как правильно её внедрить, избежать типичных ошибок и достичь впечатляющих результатов? Ознакомьтесь с реальным опытом, который вдохновит на изменения.🍹
🔗 Читать статью
🔗 Зеркало
Снизить затраты на инфраструктуру в десятки раз — не фантастика, а реальность. Мультитенантная архитектура помогает не только экономить деньги, но и упрощает подключение новых клиентов, масштабирование и обслуживание системы. Такой подход значительно облегчает работу и открывает новые возможности для роста.
Хотите узнать, как правильно её внедрить, избежать типичных ошибок и достичь впечатляющих результатов? Ознакомьтесь с реальным опытом, который вдохновит на изменения.
🔗 Читать статью
🔗 Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 Optimistic Locking использует
🔹 Pessimistic Locking заключается в
- Optimistic Locking подходит для систем с
- Pessimistic Locking лучше использовать в сценариях с
Please open Telegram to view this post
VIEW IN TELEGRAM
По возможности вопросы выбираются с приближением к реальным собеседованиям или чему-то применимому в целом. А не вопросы вида "зачем мне это,
Поставьте реакцию — каждый отзыв очень важен. Также можете в комментариях поделиться своим мнением, что можно улучшить. Сделаем контент интереснее вместе.
🔥 - Всё супер, админ красавчик
👍🏼 - Хорошо, большинство вопросов интересны/полезны
🤔 - Удовлетворительно, не все вопросы полезны/интересны
😢 - Что-то не нравится, напишу в комментариях, что именно
Please open Telegram to view this post
VIEW IN TELEGRAM
Проблема бриллианта (или Diamond Problem) — это ситуация, которая возникает в языках программирования с поддержкой множественного наследования. Она заключается в том, что если один класс наследует два или более класса, которые имеют общий предок, то возникает неопределенность, с какого родительского класса должны быть унаследованы члены (методы или поля).
В Java множественное наследование классов не поддерживается, но проблема все равно может возникнуть при использовании интерфейсов.
interface A {
void method();
}
interface B extends A {
@Override
default void method() {
System.out.println("Method from B");
}
}
interface C extends A {
@Override
default void method() {
System.out.println("Method from C");
}
}
class D implements B, C { }
public class Main {
public static void main(String[] args) {
D d = new D();
d.method(); // Какая версия метода будет вызвана?
}
}
Когда класс D реализует оба интерфейса B и C, которые оба предоставляют дефолтные реализации метода method(), возникает неопределенность — какую версию метода должен использовать класс D? При компиляции будет выброшен error: class D inherits unrelated defaults for method() from types B and C.
Это решается с помощью явного переопределения метода в классе D, что позволяет избежать конфликтов.
class D implements B, C {
@Override
public void method() {
B.super.method();
// или можно использовать C.super.method(), если хотите вызвать метод из C
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
— Как найти все числа от 0 до 1000, которые одновременно:
Делятся на 3.
Не делятся на 5.
Сумма цифр числа меньше десяти.
- Чтобы число делилось на X, его нужно проверить на остаток от деления: number % Х == 0.
- Для проверки суммы цифр числа можно пройтись по всем его цифрам и сложить их, затем проверить, что сумма меньше 10.
- Как улучшить решение?
Реализация на картинке 👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 Преимущества:
-
-
🔹 Подводные камни:
-
-
-
Рекомендация:
Please open Telegram to view this post
VIEW IN TELEGRAM
Layered Pattern —
Микросервисы —
MVC, MVP, MVVM —
P2P —
Гексагональная архитектура —
Pipe-and-Filter —
Please open Telegram to view this post
VIEW IN TELEGRAM
Method hiding — это механизм, при котором статический метод суперкласса "скрывается" статическим методом с той же сигнатурой в подклассе. Это не переопределение, а скрытие.
🔹 Как это работает:
- Тип метода определяется на этапе компиляции, основываясь на типе ссылки.
- Если ссылка относится к суперклассу, вызывается метод суперкласса. Если к подклассу — метод подкласса.
🔹 Пример:
class Parent {
static void show() {
System.out.println("Parent static method");
}
}
class Child extends Parent {
static void show() {
System.out.println("Child static method");
}
}
Parent parent = new Child();
parent.show(); // Выведет "Parent static method"
Please open Telegram to view this post
VIEW IN TELEGRAM
Маркерный интерфейс — это интерфейс
Please open Telegram to view this post
VIEW IN TELEGRAM
Динамическое связывание — это процесс, при котором вызов метода определяется во время выполнения программы, а не на этапе компиляции. Это возможно благодаря механизму полиморфизма.
Например, если метод переопределён в классе-наследнике, JVM решает, какую версию метода вызывать (из родительского или дочернего класса), только во время выполнения. Или когда объект создаётся на основе интерфейса, вызов метода также определяется динамически.
class Animal {
void sound() { System.out.println("Animal sound"); }
}
class Dog extends Animal {
@Override
void sound() { System.out.println("Bark"); }
}
Animal animal = new Dog();
animal.sound(); // Вывод: Bark
В этом коде тип переменной animal определён на этапе компиляции (Animal), но метод sound() вызывается из Dog, потому что объект определяется динамически во время выполнения.
Please open Telegram to view this post
VIEW IN TELEGRAM