Telegram Web Link
Видеокурс Kotlin с нуля

Это бесплатный видео курс по основам программирования на языке Котлин. Он подойдёт начинающим разработчикам, а также тем, у кого совсем нет опыта в программировании и кто только знакомится с этой сферой.

Вас ждёт 24 урока средней продолжительностью 10 минут, так что вы не успеете устать и сможете дозированно получать новые знания:

https://www.youtube.com/playlist?list=PLgPRahgE-Gcu4s-I9mrHUrKUp9dY6QcJC

@javatg
🔥142👍2🤯1
💌Запечатанные классы (Sealed Classes)

В релизе Java 17 компания Oracle представила новую функцию под названием Sealed Classes (запечатанные классы). По идее, она предназначена для повышения безопасности и гибкости приложений Java.
Запечатанные классы позволяют разработчикам ограничивать иерархию наследования класса или интерфейса. Иными словами, они обеспечивают больший контроль над тем, как класс может быть расширен или реализован.

Пример класса Shape, который может быть расширен классами Circle, Square или Triangle.

Синтаксис для определения запечатанного класса:
public sealed class Shape permits Circle, Square, Triangle {
// Определение класса
}


🔍Что такое сопоставление с образцом и как оно улучшает читаемость кода Java

В контексте языков программирования сопоставление с образцом — это метод, используемый для сопоставления определенного образца с заданным входом. Его можно использовать для упрощения процесса идентификации и извлечения соответствующей информации из структурированных данных, таких как объекты, списки и другие сложные типы данных.

В функциональных языках сопоставление с образцом можно использовать в качестве альтернативы традиционным операторам потока управления, таким как if-else или switch-case.

Сопоставление с образцом на примере кода:
public interface Shape {
Double area();
}

public final static class Circle implements Shape {
public final double radius;

Circle(double radius) {
this.radius = radius;
}

@Override
public Double area() {
return Math.PI * radius * radius;
}
}

public final static class Square implements Shape {
public final double side;

Square(double side) {
this.side = side;
}

@Override
public Double area() {
return side * side;
}
}

📌 Подробнее

@javatg
👍152🔥2
🗑Кэширование Redis для максимальной производительности в Spring Boot и Java

Настройка приложения Spring Boot
Для начала создайте новое приложение Spring Boot с помощью Spring Initializr. Добавьте следующие зависимости:

Web;
JPA;
Lombok;
Redis.

Вы можете создать проект и импортировать его в любимую IDE.

Настройка кэша Redis
Прежде чем использовать Redis в качестве кэша в приложении, его нужно настроить. Сначала добавьте следующие свойства в файл application.properties:

spring.redis.host=localhost
spring.redis.port=6379


Далее создайте класс конфигурации RedisCacheConfig:
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory(new RedisStandaloneConfiguration(redisHost, redisPort));
}
@Bean
public RedisCacheManager cacheManager() {
return RedisCacheManager.builder(jedisConnectionFactory()).build();
}
}


Этот класс включает поддержку кэширования и настраивает бины (объекты) JedisConnectionFactory и RedisCacheManager.

Реализация сервисов с возможностью кэширования
Создадим простой сервис, работе которого поможет кэширование. В этом примере реализуем сервис для получения информации о пользователе из базы данных.

Сначала создадим сущность User:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
}


Теперь создадим интерфейс UserRepository:
public interface UserRepository extends JpaRepository<User, Long> {}

Далее создаем UserService:

@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Cacheable(value = "users", key = "#id")
public User findById(Long id) {
return userRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("User not found"));
}
}

Аннотация @Cacheable указывает на то, что результат метода findById должен быть кэширован. Атрибут value определяет имя кэша, а атрибут key  — ключ кэша.

Способы вытеснения кэша 👇

Читать продолжение

@javatg
👍15🔥75
🔥 Подборка обучающих каналов для программистов.

🖥 Machine learning
ai_ml – крупнейши канал по ии, нейросетям и науке о данных.
datasc - дата сайнс обучение самой востребованной профессии.
@bigdatai - Big Data

@machinelearning_ru – гайды по машинному обучению
@machinelearning_interview – подготовка к собеседованию мл.
@datascienceiot – бесплатные книги ds
@ArtificialIntelligencedl – ИИ

@machinee_learning – чат о машинном обучении
@datascienceml_jobs - вакансии ds, ml
@Machinelearning_Jobs - чат с вакансиями

🖥 Python
@pythonl - крупнейший канал для Python программистов.
@pro_python_code – учим python с ментором.
@python_job_interview – подготовка к Python собеседованию.
@python_testit - проверочные тесты на python
@pythonlbooks - современные книги Python
@python_djangojobs - работа для Python программистов
@python_django_work - чат обсуждения вакансий

#️⃣ c#
C# - канал для изучения C# на практике.
@csharp_cplus - C# чат
@csharp_1001_notes - инструменты C#

🖥 C++
@cpluspluc - C++ кодинг


🖥 SQL базы данных

@sqlhub - Повышение эффективности кода с грамотным использованием бд.
@chat_sql - чат изучения бд.

👣 Golang
@Golang_google - восхитительный язык от Google, мощный и перспективный.
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@golangtests - интересные тесты и задачи GO
@golangl - чат изучающих Go
@GolangJobsit - отборные вакансии и работа GO
@golang_jobsgo - чат для ищущих работу.
@golang_books - полезные книги Golang
@golang_speak - обсуждение языка Go
@golangnewss - новости go

🖥 Linux
linux - kali linux ос для хакинга
linux chat - чат linux для обучения и помощи.
@linux_read - бесплатные книги linux

🖥 Javascript / front

@react_tg - - 40,14% разработчиков сайтов использовали React в 2022 году - это самая популярная библиотека для создания сайтов.
@javascript -канал для JS и FrontEnd разработчиков. Лучшие практики и примеры кода. Туториалы и фишки JS
@Js Tests - каверзные тесты JS
@hashdev - погружение в web разработку.
@javascriptjobjs - отборные вакансии и работа FrontEnd.
@jsspeak - чат поиска FrontEnd работы.

🖥 Java
@javatg - выучить Java с senior разработчиком на практике
@javachats - чат для ответов на вопросы по Java
@java_library - библиотека книг Java
@android_its - Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит

👷‍♂️ IT работа

https://www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi -ит каналы по яп с вакансиями

🤡It memes
@memes_prog - ит-мемы

⚙️ Rust
@rust_code - Rust избавлен от болевых точек, которые есть во многих современных яп
@rust_chats - чат rust

📓 Книги

https://www.tg-me.com/addlist/HwywK4fErd8wYzQy - актуальные книги по всем яп

⭐️ Нейронные сети
@vistehno - chatgpt ведет блог, решает любые задачи и отвечает на любые ваши вопросы.
@aigen - сети для генерации картинок. видео, музыки и многого другого.
@neural – погружение в нейросети.

📢 English for coders

@english_forprogrammers - Английский для программистов

🖥PHP
@phpshka - PHP академия для программистов.

🖥 Devops
Devops - канал для DevOps специалистов.

🔥 Папки для программитов

https://www.tg-me.com/addlist/_FjtIq8qMhU0NTYy - машинное обучение, нейросети, глубокое обучение

https://www.tg-me.com/addlist/eEPya-HF6mkxMGIy - папка для Python разработчиков

https://www.tg-me.com/addlist/MUtJEeJSxeY2YTFi - папка для Golang разработчиков
Please open Telegram to view this post
VIEW IN TELEGRAM
👍205🔥4👎3😱2
📕 Изучение Stream API и управляющие конструкции в Java

1️⃣ Stream API. Java. Максимально простым языком

Посмотрев видео, любой новичок, изучающий язык Java, получит четкое понимание, что такое Stream API и как применять эту библиотеку при работе с кодом.

2️⃣ Управляющие конструкции в Java

Как и в любом другом языке программирования, синтаксис языка Java имеет стандартные команды управления, которые также называют управляющими конструкциями. В этом видео вы узнаете, какие команды относятся к управляющим конструкциям, и как с ними работать в Java.

3️⃣ Примитивные типы данных

Видеоурок оформлен в виде простой анимации, которая облегчит понимание темы практически каждому, включая тех, кто лишь недавно начал свое обучение языку Java.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2🔥2
🖥 Project Loom и Spring Boot: тесты производительности

Сегодня я хочу выяснить, готов ли Project Loom заменить Spring WebFlux при создании высоконагруженных приложений с высокой пропускной способностью.

Проблемы реактивного подхода
WebFlux - замечательная технология с фантастической производительностью, однако:

При использовании реактивного подхода код сложнее писать и сопровождать
Стектрейсы малополезны при разборе ошибок
Все связанные клиенты/библиотеки также должны быть написаны в реактивном стиле

Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥4👎2
🗄Создание аннотаций с использованием Reflection API.

В повседневной работе на Java мы часто сталкиваемся с аннотациями, например, с @Override. Сами по себе аннотации представляют разновидность метаданных, которые можно добавлять в исходный код Java. Классы, методы, переменные, параметры и пакеты — все они могут быть аннотированы.

Как с помощью аннотации можно проверять электронную почту?
Для этого сначала создадим аннотацию Email:

@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Email {
}


Чтобы объявить аннотацию, используйте ключевое слово @interface. В Target было объявлено, что оно будет использоваться в полях (fields), а в Retention объявлено, что оно будет использоваться во время выполнения (runtime).

Теперь воспользуемся этой аннотацией. Давайте создадим класс Person с двумя полями: age и email.
public class Person {
private String name;

@Email
private String email;

public Person(String name, String email) {
this.name = name;
this.email = email;
}

public String getName() {
return name;
}

public String getEmail() {
return email;
}
}



Обратите внимание, что электронное письмо снабжено аннотацией @Email. Теперь создадим класс ValidateUtil, который будет проверять электронную почту с помощью Reflection API.
public class ValidateUtil {

public static void validate(Object object) throws IllegalAccessException {

Class<?> class = object.getClass();
for(Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
if(field.isAnnotationPresent(Email.class)) {
validateEmail(field, object);
}
}
}

private static void validateEmail(Field field, Object object) throws IllegalAccessException {
Pattern pattern = Pattern.compile("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$");
String email = (String) field.get(object);
if(isNotMatching(pattern, email)) {
throw new InvalidEmailException("Email " + email + " is invalid");
}
}

private static boolean isNotMatching(Pattern pattern, String value) {
return !pattern.matcher(value).matches();
}
}


В методе validate он берет объект, перебирает все поля, устанавливает их как доступные и проверяет, имеет ли поле аннотацию Email. Если аннотация есть, то он вызывает метод validateEmail.

Продолжение

@javatg
👍22🔥42👎1
⚡️ 6 лучших ресурсов для изучения Java в 2023 году

Java - один из самых популярных и универсальных языков программирования в мире. Он используется в различных областях - от веб-разработки до создания мобильных приложений и игр. Независимо от того, являетесь ли вы опытным программистом или только начинаете, Java - это отличный язык, который необходимо иметь в своем арсенале.

1️⃣ Официальные учебники Oracle по Java

2️⃣ Курс Codecademy по изучению Java

3️⃣ Coursera: Программирование на Java и основы программной инженерии

4️⃣ Udemy: Мастер-класс по программированию на Java для разработчиков программного обеспечения

5️⃣ YouTube: курс JAVA

6️⃣ Java курс 2023

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥2🥰1
Полный список сайтов с практическимим задачами для программистов.

Любите битвы роботов? Тогда игра Robocode для вас. Вы научитесь программировать, создавая боевых роботов-танков на Java или .NET. Когда вы создадите робота, на экране в реальном времени начнётся битва.

Edabit.com - 350+ практических задач по C#

C Puzzles - cайт с головоломками на языке С. Может быть полезен и тем, кто не знает C, но изучает С-подобные языки.

Codeforces — платформа для алгоритмических соревнований. Проводит контесты и раунды с 5 задачами на 2 часа. Есть система рейтинга и два дивизиона. Задачи можно решать и проверять после соревнования. Также есть доступ к тренировкам с задачами с прошлых соревнований.

SQLEx- большой кладез знаний для тех, кто изучает SQL. Множество упражнений для отработки навыков и рейтинг участников.

HackerRank - сайт будет больше интересен продвинутым программистам, которые уже многое умеют. На этом сайте собрано множество задач на самые разные разделы Computer Science: традиционная алгоритмика, ИИ, машинное обучение и т.д. Если вы решите много задач, то вами могут заинтересоваться работодатели, регуляторно мониторящие эту платформу.

C# задачи для начинающих - помощь в решении задач. Готовые программы.

Codewars — популярный cборник задач на разные темы, от алгоритмов до шаблонов проектирования.

LeetCode — известный сайт с задачами для подготовки к собеседованиям. Можно пообщаться и посмотреть решения других программистов.

Timus Online Judge — русскоязычная (хотя английский язык также поддерживается) платформа, на которой более тысячи задач удачно отсортированы по темам и по сложности.

TopCoder - популярная американская платформа. Она проводит алгоритмические контесты, а также соревнования по промышленному программированию и марафоны, где задачи требуют исследования и нет единого верного алгоритма. Участникам даются недели на решение таких задач.

informatics.mccme.ru - платформа с теоретическим материалом и задачами, удобно разделенными по категориям. Большая база задач с олимпиад школьников также доступна.

SPOJ - большой англоязычный сайт с 20000+ задачами на разные темы: DP, графы, структуры данных и др. Иногда проводят неинтересные контесты, если не из страны их проведения.

CodeChef — менее крупный аналог Codeforces и TopCoder, тоже с огромным архивом задач и регулярными контестами.

Project Euler - сборник 500 задач, проверяющих знание математических алгоритмов. Часто используется на собеседованиях, чтобы оценить алгоритмическую подготовку кандидата.

Kaggle - соревнования по анализу данных.

Golang tests - канал с тестами по Go

CodinGame - сайт для программистов и геймеров, предлагающий большую коллекцию видеоигр, оформленных в виде задач на программирование.

Al Zimmermann’s Programming Contests — платформа, на которой регулярно проводятся контесты с задачами на исследование и оптимизацию. Интересен тем, что писать программу необязательно — даются только тестовые данные. Ответы можно расчитывать вручную, или просто гадать их на кофейной гуще.

Programming Praxis — сайт, где можно найти много интересных задач.

CheckIO — сайт с задачами для программистов всех уровней, который вы проходите в виде игры.

Ruby Quiz — сайт с задачами для программистов на Ruby, но решения можно писать и на других языках.

Prolog Problems — Подборка задач для программистов, использующих Prolog.

Сборник задач от СppStudio - задачи на С++, но их можно и на других языках.

Operation Go — практика написания кода на Go в форме браузерной игры.

Empire of Code — сайт для программистов, где необходимо писать код, реализующий стратегию и тактику виртуальных бойцов.

@javatg
16👍6🔥2
⭐️ Корутины в Kotlin

Корутины — одна из важнейших фич Kotlin, которая даёт очень удобный и простой способ работы с многопоточность.

В сравнении с многопточностью из Java, в Kotlin она сделана более понятной и наглядной, оставляя сложные процессы вне вашего кода.

В этой серии стате вы узнаете всё, что разработчик Kotlin должен знать о корутинах:

https://maxkim.eu/series/kotlin-coroutines

#kotlin

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥41
Что такое атомарные переменные в Java.

В Java атомарные переменные находятся в пакете java.util.concurrent.atomic. Учитывая, что они предлагают потокобезопасное программирование без блокировок, это повышает эффективность и предотвращает тупиковые ситуации, которые могут возникнуть при использовании традиционных методов синхронизации.

Атомарная операция неделима. Это означает, что как только операция начинает выполняться, она выполняется до завершения, не прерываясь другим потоком. Эта атомарность жизненно важна для параллельного программирования, поскольку помогает предотвратить состояние гонки.

В качестве примера рассмотрим операцию приращения (increment operation):
count++;

Атомарные классы Java:

▪️AtomicInteger
▪️AtomicLong
▪️AtomicBoolean
▪️AtomicReference
И другие…

Давайте рассмотрим пример с использованием AtomicInteger:
AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();


В этом примере incrementAndGet() является атомарной операцией. Она увеличивает значение count на единицу и возвращает обновленное значение. Независимо от того, сколько потоков одновременно вызывает этот метод, он всегда будет правильно увеличивать count.

📌 Преимущества использования атомарных переменных

@javatg
👍223🔥2
🖥 Магия Spring Framework своими руками

Мотивация
Spring Framework позволяет сфокусироваться на бизнес-логике, а вся настройка инфраструктуры выполняется силами самого фреймворка. Так, например, разработчик вешает аннотацию @RestController на бин, и бин начинает обрабатывать REST запросы, при этом разработчик не трогает Servlet Context, не настраивает цепочку фильтров или веб сервер: все конфигурируется автоматически. Автоматическая настройка инфраструктуры выполняется благодаря постобработке бинов. Зачастую для реализации дополнительной функциональности применяется Spring AOP - аспектно-ориентированное программирование.

Spring AOP удобен, когда необходимо выполнить код перед, после или вместо вызова метода бина. Управление транзакциями - классический пример использования Spring AOP: начать транзакцию перед вызовом метода и зафиксировать ее после завершения метода.

Spring AOP бин, который накручивает дополнительную функциональность другим Spring бинам, помечается аннотацией @Aspect, но как потом этот бин используется для добавления дополнительной функциональности в поток исполнения? Все работает благодаря тому, что в жизненный цикл бина можно вклиниться при помощи BeanPostProcessor.

📌Читать полностью
📌Код

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥32
🖥 Шаблон проектирования объектный пул на Java

Объектный пул (англ. object pool) — порождающий шаблон проектирования, набор инициализированных и готовых к использованию объектов. Когда системе требуется объект, он не создаётся, а берётся из пула. Когда объект больше не нужен, он не уничтожается, а возвращается в пул.

Паттерн объектный пул обычно используется в случаях, где вызов объектов является дорогостоящим, а объекты можно эффективно использовать повторно. К числу таких примеров относятся:

1. Соединения с базами данных: Управление пулом соединений с базами данных позволяет повысить производительность приложений, взаимодействующих с базами данных.

2. Пул потоков: в многопоточных приложениях повторное использование потоков из пула потоков позволяет избежать накладных расходов на создание новых потоков для каждой задачи.

3. Сетевые соединения: В сетевом программировании управление пулом сетевых соединений может привести к более эффективному использованию ресурсов.

Теперь рассмотрим пример использования паттерна в Java для создания простого пула объектов Connection.

В этом примере (смотри картинку) мы создали простой класс `ConnectionPool` для управления пулом соединений с базой данных. При создании объекта `ConnectionPool` пул инициализируется с заданным количеством соединений. Клиенты могут запрашивать соединения из пула с помощью метода `getConnection()` и освобождать их обратно в пул с помощью метода releaseConnection(), когда они закончили их использовать.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍183🔥3
👩‍💻 Лучшие практики написания кода в Spring Boot

Spring Boot — это широко используемый и очень популярный высокопроизводительный фреймворк корпоративного уровня. Практики и советы, приведенные в этой статье, помогут улучшить приложение Spring Boot и сделать его более эффективным.

Применяйте надлежащий стиль упаковки

Надлежащая упаковка помогает легко понять код и поток приложения. Это позволяет успешно структурировать приложение.

Вы сможете распределить по отдельным пакетам все контроллеры, сервисы, утилитарные классы и т. д. Такой стиль очень удобен в небольших микросервисах.

При работе с огромной кодовой базой полезно использовать функционально-ориентированный подход. Вы можете принять решение в зависимости от требований проекта — на основе типов или на основе функций.
*Пример в изображении.

Используйте паттерны проектирования

Паттерны проектирования — безупречная практика. С проверенными шаблонами у вас не будет поводов для недовольства. Но вам необходимо определить место использования шаблонов.

👇
ЧИТАТЬ

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥21
🖥 Шпаргалка по структурам данных в Java

К каждому собеседованию важно готовиться и проще всего это делать, когда перед глазами есть готовый материал. В данной публикации я хочу поделиться с вами своей шпаргалкой, которую использую перед собеседованиями для повторения структур данных в Java.

Что такое структуры данных, для чего они и какие есть в Java?


Под структурами данных подразумевается хранение данных и их организация таким образом, чтобы решать поставленную задачу наиболее эффективным способом.

В Java есть следующие структуры данных:

Массив
Список (Динамический массив)
Стек
Очередь
Связный список
HashTable и HashMap
Дерево

📌 Читать полностью

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍142🔥2
🖥 Руководство по созданию мультиплатформенного проекта Kotlin с помощью Kobweb

Kobweb — это фреймворк Kotlin для создания сайтов и веб-приложений, построенный поверх Compose HTML, а также немного Next.js и Chakra UI.

✔️Смотреть

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥2
2025/10/01 05:10:28
Back to Top
HTML Embed Code: