Книги для программистов
158K subscribers
624 photos
14 videos
561 links
Все о книгах из мира IT.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/de94a698

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://www.gosuslugi.ru/snet/67931954509aba565214777d
Download Telegram
📚 План чтения: Java с нуля до мидл-разработчика

1️⃣ Основы синтаксиса Java

📖 "Head First Java"
— Изучение синтаксиса Java: переменные, типы данных, операторы, условия, циклы.
— Основы объектно-ориентированного программирования (ООП): классы, объекты, методы, инкапсуляция, наследование, полиморфизм.

2️⃣ Коллекции и обработка исключений

📖 "Effective Java" (1-й раздел)
— Изучение коллекций Java: List, Set, Map, их интерфейсы и реализации.
— Основы обработки исключений и работы с потоками.

3️⃣ ООП, паттерны проектирования и принципы хорошего кода

📖 "Clean Code"
— Основы проектирования классов, паттерны проектирования, принципы SOLID.
— Практическое применение принципов ООП и паттернов на примере реальных проектов.

4️⃣ Работа с базами данных

📖 "Java Persistence with Hibernate"
— Работа с базами данных через JDBC и Hibernate.
— Создание и управление сущностями, связи между объектами и таблицами.

5️⃣ Многозадачность и многопоточность

📖 "Java Concurrency in Practice"
— Многозадачность в Java: потоки, синхронизация, конкурентное программирование.
—Решение проблем многозадачности, оптимизация работы с потоками.

6️⃣ Основы Spring Framework

📖 "Spring in Action"
— Изучение Spring Framework и Spring Boot.
— Создание RESTful сервисов, работа с зависимостями через Spring, внедрение в систему через IoC (Инверсия Управления).

7️⃣ Углубленное изучение Spring и создание сложных приложений

📖 "Spring Boot in Action"
— Разработка более сложных приложений с использованием Spring Boot.
— Работа с Spring Data для взаимодействия с базой данных, создание микросервисов.

8️⃣ Алгоритмы и структуры данных

📖 "Cracking the Coding Interview"
— Углубление в алгоритмы и структуры данных: сортировки, деревья, графы, очереди, стеки.
— Решение задач, подготовка к собеседованиям, оптимизация алгоритмов.

9️⃣ Углубленное изучение JVM и оптимизация

📖 "Java: The Complete Reference"
— Изучение работы Java Virtual Machine (JVM), управление памятью и сборщик мусора.
— Оптимизация производительности приложений, профилирование.

💬 Какие книги вы бы ещё посоветовали?

🐸 Книги для программистов
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
🎮 Код из книги: Отсутствие централизованной наблюдаемости в облачной архитектуре

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

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

Решение: настройка единой платформы наблюдаемости с использованием решений вроде OpenTelemetry, Prometheus, Grafana, Jaeger и ELK. Применение принципа "инструментировать всё", включая бизнес-метрики, latency, error rate и трассировки.

Пример конфигурации с использованием OpenTelemetry и Prometheus:
# Для микросервиса
scrape_configs:
- job_name: 'my-service'
metrics_path: /metrics
static_configs:
- targets: ['my-service:8080']

# В коде сервиса:
const { MeterProvider } = require('@opentelemetry/sdk-metrics');
const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');

const exporter = new PrometheusExporter({ startServer: true }, () => {
console.log('Prometheus scrape endpoint: http://localhost:9464/metrics');
});

const meter = new MeterProvider({ exporter }).getMeter('my-service-meter');


Преимущества:

— Быстрое выявление и устранение проблем за счёт централизованных логов, метрик и трассировок
— Повышение надёжности и отказоустойчивости архитектуры
— Поддержка SLO/SLA и реального контроля за качеством сервиса

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 Топ-3 книги по ООП

1️⃣ Бертран Мейер — «Почувствуй класс»

Это фундаментальный труд по ООП, ориентированный на начинающих. Автор использует язык Eiffel, что может быть непривычно, но позволяет глубже понять принципы ООП. Мейер акцентирует внимание на контрактах, инвариантах и принципах чистого кода.

2️⃣ Гради Буч — «Объектно-ориентированный анализ и проектирование с примерами приложений»

Книга предназначена для более опытных разработчиков. Буч рассматривает ООП как способ восприятия мира, связывая его с когнитивными способностями человека. Особое внимание уделено абстракции и иерархии, а также использованию диаграмм UML.

3️⃣ Мэтт Вайсфельд — «Объектно-ориентированное мышление»

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

💬 Пишите в комменты, что ещё можно прочитать по ООП.

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость

Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.

📅 Сроки: прием новостей до 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Осталась неделя — ждем ваших новостей!
🎮 Код из книги: Управление состоянием с помощью Signals в Angular

Проблема: в современных Angular-приложениях управление состоянием часто становится сложным и трудоёмким, особенно когда используются различные подходы, такие как NgRx или манипуляции с обычными переменными. Это может привести к трудностям в отслеживании изменений состояния и взаимодействии между компонентами.

Решение: использование Signals — нового инструмента для управления состоянием, который упрощает реактивное программирование в Angular и улучшает производительность. Signals обеспечивают прямое отслеживание изменений состояния, что делает код более читаемым и эффективным.

Пример кода для простого счётчика с использованием Signals:
import { signal } from '@angular/core';

export const counterSignal = signal(0);

export function incrementCounter() {
counterSignal.update(count => count + 1);
}

export function decrementCounter() {
counterSignal.update(count => count - 1);
}


Преимущества:

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

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 Код из книги: Защита RESTful сервисов с помощью JWT в Spring Security

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

Решение: Spring Security предлагает богатые возможности для защиты веб-приложений, включая поддержку аутентификации, авторизации, защиты от атак CSRF, а также различных механизмов работы с сессиями. В книге "Spring Security, 4th Edition" автор описывает использование JWT (JSON Web Token) для аутентификации пользователей, что позволяет легко и безопасно управлять сессиями и авторизацией.

Пример кода для аутентификации с использованием JWT в Spring Security:
public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private final AuthenticationManager authenticationManager;
private final JwtTokenProvider jwtTokenProvider;

public JwtAuthenticationFilter(AuthenticationManager authenticationManager, JwtTokenProvider jwtTokenProvider) {
this.authenticationManager = authenticationManager;
this.jwtTokenProvider = jwtTokenProvider;
}

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
try {
UserCredentials credentials = new ObjectMapper().readValue(request.getInputStream(), UserCredentials.class);
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(credentials.getUsername(), credentials.getPassword());
return authenticationManager.authenticate(authToken);
} catch (IOException e) {
throw new AuthenticationServiceException("Unable to read authentication request", e);
}
}

@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
String token = jwtTokenProvider.generateToken(authResult.getName());
response.addHeader("Authorization", "Bearer " + token);
}
}


Преимущества:

— Управление безопасностью с помощью JWT позволяет избежать необходимости хранить сессии на сервере, улучшая масштабируемость и безопасность.
— Использование Spring Security предоставляет надежные и проверенные механизмы защиты от атак, таких как CSRF, XSS и SQL Injection.

🐸 Книги для программистов
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
🎮 Код из книги: Оптимизация запросов с использованием индексов в PostgreSQL и MySQL

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

Решение: в книге "Database Design and Modeling with PostgreSQL and MySQL" авторы подробно рассматривают методы оптимизации запросов с помощью индексов. Они объясняют, как правильно создавать и использовать индексы для ускорения выполнения запросов, а также как анализировать планы выполнения запросов для выявления узких мест.

Пример создания индекса и анализа плана выполнения запроса в PostgreSQL:
-- Создание индекса на столбец email в таблице users
CREATE INDEX idx_users_email ON users(email);

-- Анализ плана выполнения запроса
EXPLAIN ANALYZE
SELECT * FROM users WHERE email = 'example@example.com';


В этом примере создается индекс на столбец email таблицы users, что позволяет значительно ускорить выполнение запроса поиска пользователя по email. Команда EXPLAIN ANALYZE используется для анализа плана выполнения запроса и оценки его эффективности.

Преимущества:


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

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 Код из книги: Реактивная обработка REST-запросов

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

Решение:
в книге Mastering Spring Boot 3.0 автор предлагает использовать Spring WebFlux — реактивный стек Spring, основанный на неблокирующей модели ввода-вывода. Это позволяет обрабатывать тысячи одновременных запросов с минимальными затратами ресурсов, обеспечивая высокую отзывчивость и масштабируемость приложения.

Пример реализации реактивного REST-контроллера с использованием Spring WebFlux:
@RestController
@RequestMapping("/api/users")
public class UserController {

private final UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}

@GetMapping
public Flux<User> getAllUsers() {
return userService.getAllUsers();
}

@GetMapping("/{id}")
public Mono<ResponseEntity<User>> getUserById(@PathVariable String id) {
return userService.getUserById(id)
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity.notFound().build());
}

@PostMapping
public Mono<User> createUser(@RequestBody User user) {
return userService.createUser(user);
}
}


В этом примере используются типы Flux и Mono из Project Reactor для представления потоков данных и одиночных значений соответственно. Это позволяет обрабатывать запросы и ответы асинхронно и неблокирующим образом.

Преимущества:

— Неблокирующая модель ввода-вывода позволяет эффективно использовать ресурсы при высоких нагрузках.
— Асинхронная обработка запросов обеспечивает быстрый отклик даже при большом количестве одновременных пользователей.
— Интеграция с другими реактивными библиотеками и потоками данных упрощает построение сложных бизнес-процессов.

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM