Если объект дорогой в создании, но нужен только в редких сценариях, eager initialization может зря тратить время и память. Вместо этого используйте lazy initialization: private HeavyAnalyzer analyzer; private HeavyAnalyzer analyzer() { if (analyzer == null) { analyzer = new HeavyAnalyzer(); } return analyzer; } Так HeavyAnalyzer создастся только при первом реальном обращении...
Java
💡 Java: не создавайте тяжёлые объекты раньше времени
Если объект дорогой в создании, но нужен только в редких сценариях, eager initialization может зря тратить время и память. Вместо этого используйте lazy initialization: private HeavyAnalyzer analyzer; private HeavyAnalyzer analyzer() { if (analyzer == null) { analyzer = new HeavyAnalyzer(); } return analyzer; } Так HeavyAnalyzer создастся только при первом реальном обращении. Где особенно полезно: - кэши; - API-клиенты; - тяжёлая конфигурация; - анализаторы; - объекты с дорогой инициализацией...
🔥 Один из лучших обучающих курсов на StepiK по SQL
SQL можно знать годами и всё равно теряться, когда запрос внезапно начинает тормозить в проде. Этот курс про уровень, где ты не просто пишешь SELECT, а понимаешь, что происходит внутри MySQL, почему запрос работает медленно и как ускорить его без новых проблем. Здесь разбираются EXPLAIN, индексы, CTE, оконные функции, транзакции, аналитические паттерны, legacy SQL и работа с AI-ассистентами...
⚡️Продвинутый Java-совет: используйте `ClassValue
` Если нужно кешировать метаданные отдельно для каждого класса, не обязательно создавать ConcurrentHashMap<Class<?>, Metadata>. private static final ClassValue<Metadata> CACHE = new ClassValue<>() { @Override protected Metadata computeValue(Class<?> type) { return scan(type); } }; Metadata metadata = CACHE.get(MyClass.class); ClassValue лениво вычисляет значение, безопасно работает при конкуренции потоков и хранит отдельный результат для каждого Class...
Kotlin 2.5.0-Beta1 вышел
JetBrains выпустила первую бета-версию Kotlin 2.5.0. Главное: - Language: стабильная name-based destructuring в only-syntax режиме, плюс экспериментальные companion extensions и blocks. - Standard Library: новые экспериментальные функции для упрощения типичных конструкций с if. - Kotlin/JS: добавлена поддержка target ES2020...
Spring Boot 4: как перенести старые настройки
При обновлении добавьте временную зависимость: runtimeOnly("org.springframework.boot:spring-boot-properties-migrator") После запуска приложения migrator: * найдёт устаревшие и переименованные параметры; * выведет подсказки в логах; * временно преобразует старые ключи во время выполнения. Исправьте настройки в application.properties или application.yaml, убедитесь, что предупреждения исчезли, и удалите зависимость. Оставлять её в проекте постоянно не нужно. #SpringBoot4 #Migration При обновлении добавьте временную зависимость: runtimeOnly("org...
