Быстрый совет по Linux:
Если вам нужно создать несколько директорий сразу, не обязательно делать это поочерёдно.
Команда
Эта команда моментально создаёт папки для двух сайтов, причём у каждого — свои поддиректории:
Отличный способ сэкономить время и поддерживать упорядоченную структуру директорий.
#linux
Если вам нужно создать несколько директорий сразу, не обязательно делать это поочерёдно.
Команда
mkdir поддерживает расширение с помощью фигурных скобок — это позволяет за один раз создать множество вложенных директорий.mkdir -p ~/noscripts/{site-01,site-02}/{backup,monitoring,network}Эта команда моментально создаёт папки для двух сайтов, причём у каждого — свои поддиректории:
backup, monitoring и network.Отличный способ сэкономить время и поддерживать упорядоченную структуру директорий.
#linux
🔥36👍7❤3😨2🤯1
Пул подключений в backend‑разработке
(продолжение предыдущего поста)
Введение
→ Пул подключений — это техника повторного использования подключений с базой данных вместо создания нового соединения для каждого запроса клиента.
→ Это повышает производительность, снижает задержки и оптимизирует использование ресурсов в backend‑системах.
→ Широко применяется в приложениях, обрабатывающих множество параллельных запросов к базе данных.
Как работает пул подключений
→ При запуске приложения создаётся пул (набор) соединений с базой данных.
→ Каждый входящий запрос берёт соединение из пула, выполняет запрос и возвращает соединение после завершения.
→ Свободные соединения повторно используются для будущих запросов, что позволяет избежать затрат на открытие и закрытие новых подключений.
Почему пул подключений необходим
→ Создание и уничтожение подключений с базой данных требует значительных ресурсов.
→ Без пулирования высокий трафик может перегрузить базу данных запросами на подключение.
→ Пул подключений обеспечивает стабильность и эффективность при пиковых нагрузках.
Преимущества пула подключений
→ Повышение производительности → Сокращает время, затрачиваемое на установление новых подключений.
→ Оптимизация ресурсов → Ограничивает количество активных подключений.
→ Масштабируемость → Эффективно обрабатывает множество параллельных запросов.
→ Надёжность → Предотвращает перегрузку базы данных и исчерпание подключений.
Ключевые параметры пула подключений
→ Максимальное количество подключений → Определяет, сколько подключений может одновременно содержать пул.
→ Время ожидания для свободных подключений → Время, по истечении которого свободные соединения закрываются.
→ Срок жизни соединения → Максимальный срок существования соединения до его повторного создания.
→ Политика повторных попыток → Определяет, как обрабатываются неудачные соединения (повторные попытки или замена).
Распространённые инструменты и библиотеки
→ Node.js →
→ Java → HikariCP и Apache DBCP для управления соединениями JDBC.
→ Python → Пул подключений в SQLAlchemy и поддержка пула в
→ .NET → Встроенное пул подключений в ADO.NET.
Рекомендации
→ Настраивайте размер пула исходя из ожидаемой нагрузки и возможностей базы данных.
→ Регулярно отслеживайте использование подключений и показатели производительности.
→ Корректно закрывайте неиспользованные соединения, чтобы предотвратить утечки.
→ Комбинируйте пулирование с логикой повторных попыток для повышения отказоустойчивости.
→ Избегайте длительных запросов, которые удерживают соединения занятыми.
Аналогия
→ Представьте ресторан с ограниченным количеством столиков (подключений).
→ Посетители (запросы) обслуживаются, когда освобождается столик, а после ухода гостей столик повторно используется.
→ Без пулирования каждому посетителю требовалось бы каждый раз готовить новый столик — это неэффективно и медленно.
(продолжение предыдущего поста)
Введение
→ Пул подключений — это техника повторного использования подключений с базой данных вместо создания нового соединения для каждого запроса клиента.
→ Это повышает производительность, снижает задержки и оптимизирует использование ресурсов в backend‑системах.
→ Широко применяется в приложениях, обрабатывающих множество параллельных запросов к базе данных.
Как работает пул подключений
→ При запуске приложения создаётся пул (набор) соединений с базой данных.
→ Каждый входящий запрос берёт соединение из пула, выполняет запрос и возвращает соединение после завершения.
→ Свободные соединения повторно используются для будущих запросов, что позволяет избежать затрат на открытие и закрытие новых подключений.
Почему пул подключений необходим
→ Создание и уничтожение подключений с базой данных требует значительных ресурсов.
→ Без пулирования высокий трафик может перегрузить базу данных запросами на подключение.
→ Пул подключений обеспечивает стабильность и эффективность при пиковых нагрузках.
Преимущества пула подключений
→ Повышение производительности → Сокращает время, затрачиваемое на установление новых подключений.
→ Оптимизация ресурсов → Ограничивает количество активных подключений.
→ Масштабируемость → Эффективно обрабатывает множество параллельных запросов.
→ Надёжность → Предотвращает перегрузку базы данных и исчерпание подключений.
Ключевые параметры пула подключений
→ Максимальное количество подключений → Определяет, сколько подключений может одновременно содержать пул.
→ Время ожидания для свободных подключений → Время, по истечении которого свободные соединения закрываются.
→ Срок жизни соединения → Максимальный срок существования соединения до его повторного создания.
→ Политика повторных попыток → Определяет, как обрабатываются неудачные соединения (повторные попытки или замена).
Распространённые инструменты и библиотеки
→ Node.js →
pg-pool для PostgreSQL, mysql2 pool для MySQL. → Java → HikariCP и Apache DBCP для управления соединениями JDBC.
→ Python → Пул подключений в SQLAlchemy и поддержка пула в
psycopg2. → .NET → Встроенное пул подключений в ADO.NET.
Рекомендации
→ Настраивайте размер пула исходя из ожидаемой нагрузки и возможностей базы данных.
→ Регулярно отслеживайте использование подключений и показатели производительности.
→ Корректно закрывайте неиспользованные соединения, чтобы предотвратить утечки.
→ Комбинируйте пулирование с логикой повторных попыток для повышения отказоустойчивости.
→ Избегайте длительных запросов, которые удерживают соединения занятыми.
Аналогия
→ Представьте ресторан с ограниченным количеством столиков (подключений).
→ Посетители (запросы) обслуживаются, когда освобождается столик, а после ухода гостей столик повторно используется.
→ Без пулирования каждому посетителю требовалось бы каждый раз готовить новый столик — это неэффективно и медленно.
Telegram
METANIT.COM
Пул подключений в backend‑разработке
(продолжение в следующем посте)
(продолжение в следующем посте)
👍10👏3❤2
Согласно внутренней утечке, Amazon Web Services уволила до 40% DevOps-инженеров, заменив их экспериментальной AI-системой автоматического управления инфраструктурой с целью снизить расходы и ускорить обслуживание облака. Новая AI-система вроде как способна автоматически исправлять ошибки IAM, восстанавливать виртуальные сети, перезапускать инстансы и даже откатывать неудачные деплои Lambda без участия человека.
Однако через несколько дней после запуска системы AWS столкнулась с масштабным сбоем, который затронул Snapchat, Roblox и другие крупные сервисы. Инженеры утверждают, что именно новая автономная система спровоцировала каскадные ошибки при синхронизации кластеров.
Amazon официально не комментирует ситуацию. Но по cлухам, внутри компании идёт обсуждение — стоит ли давать ИИ слишком много контроля над критической инфраструктурой.
https://80.lv/articles/amazon-allegedly-replaced-40-of-aws-devops-workers-with-ai-days-before-crash
Однако через несколько дней после запуска системы AWS столкнулась с масштабным сбоем, который затронул Snapchat, Roblox и другие крупные сервисы. Инженеры утверждают, что именно новая автономная система спровоцировала каскадные ошибки при синхронизации кластеров.
Amazon официально не комментирует ситуацию. Но по cлухам, внутри компании идёт обсуждение — стоит ли давать ИИ слишком много контроля над критической инфраструктурой.
https://80.lv/articles/amazon-allegedly-replaced-40-of-aws-devops-workers-with-ai-days-before-crash
80LV
Amazon Allegedly Replaced 40% of AWS DevOps Workers With AI Days Before Crash
Should we not rely on one service to support everything?
😁34🤡19🤮6🤪5❤🔥2❤1
Компания JetBrains на днях выпустила отчёт о состоянии экосистемы разработчиков в 2025 году. В нем приняли участие 24 534 разработчика из 194 стран
Некоторые выводы
Наиболее используемый язык - Python
TypeScript демонстрирует самый впечатляющий рост в реальном использовании за последние пять лет. Rust, Go и Kotlin тоже постепенно укрепляют свои позиции, хотя их успехи не столь заметны, как у TypeScript.
А PHP, Ruby и Objective-C продолжают уверенно терять популярность.
Индекс Language Promise от JetBrains оценивает языки по трём критериям: рост, стабильность и готовность разработчиков их осваивать. Согласно этому индексу, в 2025 году наибольший потенциал роста демонстрируют TypeScript, Rust и Go, тогда как JavaScript, PHP и SQL, судя по всему, достигли стадии зрелости.
Список самых высокооплачиваемых разработчиков возглавлавила Scala — 38%, хотя этот язык является основным всего у 2% специалистов. Похоже, сказывается узкая специализация
https://devecosystem-2025.jetbrains.com/
Некоторые выводы
Наиболее используемый язык - Python
TypeScript демонстрирует самый впечатляющий рост в реальном использовании за последние пять лет. Rust, Go и Kotlin тоже постепенно укрепляют свои позиции, хотя их успехи не столь заметны, как у TypeScript.
А PHP, Ruby и Objective-C продолжают уверенно терять популярность.
Индекс Language Promise от JetBrains оценивает языки по трём критериям: рост, стабильность и готовность разработчиков их осваивать. Согласно этому индексу, в 2025 году наибольший потенциал роста демонстрируют TypeScript, Rust и Go, тогда как JavaScript, PHP и SQL, судя по всему, достигли стадии зрелости.
Список самых высокооплачиваемых разработчиков возглавлавила Scala — 38%, хотя этот язык является основным всего у 2% специалистов. Похоже, сказывается узкая специализация
https://devecosystem-2025.jetbrains.com/
🤝12❤7🖕5💩2
В руководство по языку Java добавлены новые статьи:
Переменные volatile в многопоточных приложениях
https://metanit.com/java/tutorial/8.16.php
Атомарность и Atomics. Потокобезопасность без блокировок в многопоточных приложениях
https://metanit.com/java/tutorial/8.17.php
#java
Переменные volatile в многопоточных приложениях
https://metanit.com/java/tutorial/8.16.php
Атомарность и Atomics. Потокобезопасность без блокировок в многопоточных приложениях
https://metanit.com/java/tutorial/8.17.php
#java
👍22👾3
Рабочий процесс Docker
(описание предыдущего поста)
#### Шаг 1: Написание кода приложения
Начните с создания вашего приложения с использованием предпочитаемого языка программирования (например, Node.js, Python или Java).
Убедитесь, что все зависимости проекта чётко определены в конфигурационных файлах, таких как
#### Шаг 2: Создание Dockerfile
Пример:
Этот файл гарантирует, что ваше приложение будет работать стабильно в любой среде.
#### Шаг 3: Сборка Docker-образа
Выполните команду для сборки вашего образа:
Флаг
#### Шаг 4: Запуск Docker-контейнера
Используйте образ для запуска контейнера:
Флаг
Флаг
#### Шаг 5: Управление контейнерами
- Список запущенных контейнеров:
- Остановка контейнера:
- Удаление контейнера:
- Удаление образа:
#### Шаг 6: Использование Docker Compose (опционально)
Для приложений с несколькими контейнерами (например, приложение + база данных) используйте файл
Пример:
Запуск всех сервисов:
#### Шаг 7: Публикация образов в Docker Hub
- Вход в Docker Hub:
- Присваивание тега вашему образу:
- Публикация в Docker Hub:
Это позволяет другим пользователям (или вашему CI/CD конвейеру) загружать и развёртывать ваш образ.
#### Шаг 8: Развёртывание в продакшене
Используйте платформы вроде AWS ECS, Kubernetes или Docker Swarm для развёртывания в масштабе. Эти платформы загружают ваши образы и автоматически управляют оркестровкой контейнеров, сетью и масштабированием.
(описание предыдущего поста)
#### Шаг 1: Написание кода приложения
Начните с создания вашего приложения с использованием предпочитаемого языка программирования (например, Node.js, Python или Java).
Убедитесь, что все зависимости проекта чётко определены в конфигурационных файлах, таких как
package.json или requirements.txt.#### Шаг 2: Создание Dockerfile
Dockerfile — это шаблон, определяющий, как будет собираться ваш образ.Пример:
# Использование базового образа
FROM node:20
# Установка рабочего каталога
WORKDIR /app
# Копирование файлов проекта
COPY . .
# Установка зависимостей
RUN npm install
# Открытие порта приложения
EXPOSE 3000
# Команда для запуска приложения
CMD ["npm", "start"]
Этот файл гарантирует, что ваше приложение будет работать стабильно в любой среде.
#### Шаг 3: Сборка Docker-образа
Выполните команду для сборки вашего образа:
docker build -t myapp:latest .
Флаг
-t присваивает вашему образу имя и версию. Docker считывает инструкции из Dockerfile и создаёт повторно используемый образ.#### Шаг 4: Запуск Docker-контейнера
Используйте образ для запуска контейнера:
docker run -d -p 3000:3000 myapp:latest
Флаг
-d запускает контейнер в фоновом режиме.Флаг
-p сопоставляет порт контейнера с портом вашего локального компьютера. Приложение теперь доступно локально по адресу localhost:3000.#### Шаг 5: Управление контейнерами
- Список запущенных контейнеров:
docker ps
- Остановка контейнера:
docker stop <id_контейнера>
- Удаление контейнера:
docker rm <id_контейнера>
- Удаление образа:
docker rmi myapp:latest
#### Шаг 6: Использование Docker Compose (опционально)
Для приложений с несколькими контейнерами (например, приложение + база данных) используйте файл
docker-compose.yml.Пример:
version: '3'
services:
app:
build: .
ports:
- "3000:3000"
db:
image: mongo
ports:
- "27017:27017"
Запуск всех сервисов:
docker-compose up -d
#### Шаг 7: Публикация образов в Docker Hub
- Вход в Docker Hub:
docker login
- Присваивание тега вашему образу:
docker tag myapp username/myapp:v1
- Публикация в Docker Hub:
docker push username/myapp:v1
Это позволяет другим пользователям (или вашему CI/CD конвейеру) загружать и развёртывать ваш образ.
#### Шаг 8: Развёртывание в продакшене
Используйте платформы вроде AWS ECS, Kubernetes или Docker Swarm для развёртывания в масштабе. Эти платформы загружают ваши образы и автоматически управляют оркестровкой контейнеров, сетью и масштабированием.
Telegram
METANIT.COM
Рабочий процесс Docker
(подробное описание в следующем посте)
(подробное описание в следующем посте)
❤9👍4🐳2😁1💩1
Студентам самого известного колледжа Екатеринбурга пригрозили отчислением. За отказ установить MAX
В Екатеринбурге студентам колледжа имени Ползунова угрожали отчислениями — под раздачу попали те, кто отказался устанавливать мессенджер MAX.
Один из учащихся рассказал, что 23 октября в их группе провели собрание. Тех, кто не захотел подключаться к новой соцсети, под диктовку заставили написать заявление об отчислении по собственному желанию.
Заведующая одного из отделений колледжа собрала все заявления и дала обучающимся время до понедельника. Для наглядности текст заявления даже написали на доске в аудитории.
https://www.e1.ru/text/education/2025/10/23/76088087/
В Екатеринбурге студентам колледжа имени Ползунова угрожали отчислениями — под раздачу попали те, кто отказался устанавливать мессенджер MAX.
Один из учащихся рассказал, что 23 октября в их группе провели собрание. Тех, кто не захотел подключаться к новой соцсети, под диктовку заставили написать заявление об отчислении по собственному желанию.
Заведующая одного из отделений колледжа собрала все заявления и дала обучающимся время до понедельника. Для наглядности текст заявления даже написали на доске в аудитории.
https://www.e1.ru/text/education/2025/10/23/76088087/
Е1.ру
Студентам самого известного колледжа Екатеринбурга пригрозили отчислением. За отказ установить MAX
Обучающимся дали время на раздумия до понедельника и отправили покупать сим-карты
🤡34🤬12🤯6👍1💊1
Как LLM воспринимают мир
(описание к предыдущему посту)
Когда вы вводите фразу "Hello world" в ChatGPT или Claude, модель не обрабатывает эти буквы и пробелы так, как вы читаете этот пост прямо сейчас. Вместо этого она преобразует всё в числа посредством процесса, о котором большинство людей даже не задумывается.
Сначала происходит предварительная обработка. Текст нормализуется: символы Unicode, особенности пробелов и специальные символы очищаются и стандартизируются. Фраза "Hello world" превращается в формат, с которым модель может работать.
Затем наступает очередь токенизации. Здесь начинается самое интересное. Модель разбивает текст на токены, и существует несколько подходов к этому:
1. Посимвольная токенизация разбивает текст на отдельные символы. Фраза "Hello world" становится ["H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]. Этот метод прост, но неэффективен.
2. Пословная токенизация разбивает текст на целые слова. ["Hello", "world"]. Такой подход выглядит более чистым, но сталкивается с трудностями при обработке редких слов и создаёт огромные словари.
3. Подсловная токенизация — это то, что фактически используют современные LLM. GPT, Gemini, Claude — все они полагаются на этот метод. Фраза "Hello world" преобразуется примерно так: ["Hell", "o", "world"]. Этот метод обеспечивает баланс между эффективностью и гибкостью, обрабатывая редкие слова путём разбиения их на известные подсловные части.
Последний шаг — это присвоение идентификаторов токенов. Эти подсловные части сопоставляются с числами, например, [15496, 345, 995]. Каждый идентификатор токена соответствует вектору встраивания внутри модели. Именно эти векторы обрабатывает нейронная сеть.
(описание к предыдущему посту)
Когда вы вводите фразу "Hello world" в ChatGPT или Claude, модель не обрабатывает эти буквы и пробелы так, как вы читаете этот пост прямо сейчас. Вместо этого она преобразует всё в числа посредством процесса, о котором большинство людей даже не задумывается.
Сначала происходит предварительная обработка. Текст нормализуется: символы Unicode, особенности пробелов и специальные символы очищаются и стандартизируются. Фраза "Hello world" превращается в формат, с которым модель может работать.
Затем наступает очередь токенизации. Здесь начинается самое интересное. Модель разбивает текст на токены, и существует несколько подходов к этому:
1. Посимвольная токенизация разбивает текст на отдельные символы. Фраза "Hello world" становится ["H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]. Этот метод прост, но неэффективен.
2. Пословная токенизация разбивает текст на целые слова. ["Hello", "world"]. Такой подход выглядит более чистым, но сталкивается с трудностями при обработке редких слов и создаёт огромные словари.
3. Подсловная токенизация — это то, что фактически используют современные LLM. GPT, Gemini, Claude — все они полагаются на этот метод. Фраза "Hello world" преобразуется примерно так: ["Hell", "o", "world"]. Этот метод обеспечивает баланс между эффективностью и гибкостью, обрабатывая редкие слова путём разбиения их на известные подсловные части.
Последний шаг — это присвоение идентификаторов токенов. Эти подсловные части сопоставляются с числами, например, [15496, 345, 995]. Каждый идентификатор токена соответствует вектору встраивания внутри модели. Именно эти векторы обрабатывает нейронная сеть.
Telegram
METANIT.COM
Как LLM воспринимают мир
(описание в следующем посте)
(описание в следующем посте)
👍5🔥3🖕2👎1
Трехслойная нейронная сеть. Она состоит из трех основных слоев: входного, скрытого и выходного. Каждый слой включает несколько нейронов, которые соединены между собой с помощью весов (обозначены как W).
Основные элементы сети:
- Входной слой: Принимает входные данные P и передает их на первый скрытый слой.
- Скрытый слой: Выполняет обработку данных с использованием весов W1 и смещений b1. Результат обработки передается на второй скрытый слой.
- Выходной слой: Генерирует итоговый результат, используя веса W3 и смещения b3.
Формулы:
1. Для первого слоя: a1 = f1(W1p + b1).
2. Для второго слоя: a2 = f2(W2a1 + b2).
3. Для третьего слоя: a3 = f3(W3a2 + b3).
Обозначения:
- P — входные данные.
- W1, W2, W3 — матрицы весов для каждого слоя.
- b1, b2, b3 — смещения для каждого слоя.
- f1, f2, f3 — функции активации.
Основные элементы сети:
- Входной слой: Принимает входные данные P и передает их на первый скрытый слой.
- Скрытый слой: Выполняет обработку данных с использованием весов W1 и смещений b1. Результат обработки передается на второй скрытый слой.
- Выходной слой: Генерирует итоговый результат, используя веса W3 и смещения b3.
Формулы:
1. Для первого слоя: a1 = f1(W1p + b1).
2. Для второго слоя: a2 = f2(W2a1 + b2).
3. Для третьего слоя: a3 = f3(W3a2 + b3).
Обозначения:
- P — входные данные.
- W1, W2, W3 — матрицы весов для каждого слоя.
- b1, b2, b3 — смещения для каждого слоя.
- f1, f2, f3 — функции активации.
✍9🔥8🤯7🤣1🖕1