METANIT.COM – Telegram
METANIT.COM
5.88K subscribers
1.67K photos
81 videos
9 files
1.03K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Основные стратегии согласованности кэша:

1. Истечение срока действия (Expiration)

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

Быстро: нет сетевого запроса при актуальности данных
Риск устаревания: данные могут измениться до истечения срока
Лучше всего подходит, когда обновления происходят нечасто, а задержка имеет значение

2. Проверка (Validation)

Клиенты используют заголовки ETag или Last-Modified, чтобы спросить: «Изменилось ли это с тех пор, как я видел это в последний раз?»
Сервер возвращает 304 Not Modified, если ничего не изменилось, что экономит пропускную способность.
Используется в API, где данные меняются, но вы всё равно хотите избежать полной загрузки.

Актуальность: всегда синхронизируется с источником
Эффективность: возвращает заголовки только если ничего не изменилось
Медленнее, чем попадание в кэш: требует обращения к серверу
Лучше всего подходит, когда согласованность критична, но вы всё равно хотите использовать кэширование

3. Аннулирование (Invalidation)

Когда ресурс изменяется, система пытается уведомить или очистить все кэшированные копии.
Это может быть вызвано POST, PUT, DELETE или пользовательскими сигналами.
Теоретически это гарантирует, что потребители не будут работать со старыми данными.

Наивысшая согласованность
Сложность масштабирования: сервер должен отслеживать, у кого есть ресурс
Недружелюбно к веб: HTTP не имеет состояния; аннулирование вне пути ненадёжно
Лучше всего подходит для: внутренних систем, приложений реального времени или установок на основе WebSocket

Также можно применять гибридные стратегии. Например, истечение срока действия + проверка, что позволит найти баланс между производительностью и корректностью в масштабе.
👍94👏2
Шпаргалка по поразрядным операциям
🙏11👍8🔥3👏1🤓1
В руководство по языку C++ добавлена статья про Указатели на поля и методы классов/структур
https://metanit.com/cpp/tutorial/5.29.php
#cpp #cplusplus #c++
👍16👏9🔥41🌭1
На этой диаграмме изображена первая в мире «нетривиальная» компьютерная программа, разработанная в 1843 году Адой Лавлейс для Аналитической машины Чарльза Бэббиджа.
❤‍🔥31👍169👀5
Как работают списки контроля доступом (ACL) в Linux #linux

1. ACL как расширение стандартных разрешений:
- ACL позволяет добавлять разрешения для конкретных пользователей и групп, что расширяет стандартные разрешения Linux
- Пример: создание директории с помощью команды mkdir dir и просмотр стандартных разрешений с помощью ls -ld dir

2. Добавление ACL-разрешений:
- С помощью команды getfacl dir можно просмотреть ACL-разрешения
- ACL включает разрешения для пользователей, групп и других, а также «маску», которая определяет верхний предел разрешений

3. Роль «маски»:
- «Маска» действует как верхний предел, гарантируя, что стандартные разрешения остаются в силе
- Пример: удаление групповых разрешений с помощью chmod g-r dir и проверка изменений с помощью getfacl dir

4. Использование команды setfacl:
- Команда setfacl позволяет добавлять или изменять ACL-разрешения
- Пример: добавление разрешения для пользователя с помощью setfacl -m u:jimy:r file
8🔥4👏1
Основные компоненты Docker и взаимодействие между ними

Docker Client — это интерфейс, через который пользователь взаимодействует с Docker. Команды, такие как docker build, docker pull и docker run, отправляются через клиент.

Docker Host — это операционная система, на которой установлен Docker. Внутри Docker Host находятся:
- Containers — запущенные приложения, которые изолированы друг от друга.
- Images — неизменяемые шаблоны, из которых создаются контейнеры.

Docker Registry — это хранилище образов, где они могут быть загружены или загружены. На изображении показаны примеры репозиториев, таких как Ubuntu и NGINX.

Daemon — это служба, которая управляет контейнерами, образами и сетями. Она обрабатывает команды, отправленные через Docker Client.
👍53🔥3😁3
Как работает JWT-токен
👍20🔥3👏1
Техники промпт-инжиниринга
Описание в следующем посте
🤡17👍6
Техники промпт-инжиниринга
(описание для предыдущего поста)
Промпт-инжиниринг представляет целенаправленный процесс разработки входных данных при работе с большими языковыми моделями (LLM).
Давайте разберём основные техники промпт-инжиниринга.

1. Базовые техники промпт-инжиниринга
* Zero-shot (нулевое обучение) — примеры не предоставляются, только задача
* One-shot (одношаговое обучение) — показывается один пример перед задачей
* Few-shot (малошаговое обучение) — используется несколько примеров для обучения паттернам

🧠 2. Техники улучшения рассуждений
* Chain-of-Thought (CoT) — поощрение пошагового рассуждения
* Self-Consistency — генерация нескольких вариантов CoT и выбор лучшего
* Tree-of-Thought (ToT) — исследование нескольких путей рассуждений (продвинутый уровень)
* ReAct — сочетание этапов рассуждения с использованием действий/инструментов (например, вызовы API)

🧾 3. Инструкции и ролевой промпт-инжиниринг
* Instruction prompting — чёткие директивы («Сформулируй краткое содержание...»)
* System/Role prompting — определение роли или поведения («Ты — юридический ассистент»)
* Гибридный подход — сочетание чётких инструкций с примерами

⚙️ 4. Техники составления промпта
* Prompt chaining — использование вывода одного промпта в следующем
* Dynamic prompting — внедрение переменных или контекста в реальном времени
* Meta prompting — запрос к модели улучшить или проверить собственный ответ

🖼 5. Мультимодальный промпт-инжиниринг
* Изображение + текст — предоставление визуального и текстового контекста
* Аудио/видео + текст — использование транскрипций или сенсорного ввода (зависит от модели, например, GPT-4o, Gemini 1.5)

🧑‍⚕️ 6. Промпт-инжиниринг для конкретных областей
* Кодовый промпт — ограниченные, специфичные для инструмента входные данные (например, Python, SQL)
* Медицинский/юридический промпт — высокоточный язык с требованиями строгой формы и точности

🧪 7. Оценка и отладка промпта
(Не являются техниками промпт-инжиниринга, но являются важными инструментами)
* Prompt ablation — удаление элементов для проверки их вклада
* Injection testing — оценка устойчивости промпта в приложениях или агентах

Что не является техникой промпт-инжиниринга
* RAG: архитектура, объединяющая поиск и генерацию. Промпты используются внутри неё
* Агенты/системы использования инструментов — фреймворки оркестрации (например, LangGraph, AutoGPT). Промпт-инжиниринг — это лишь один из компонентов, а не сама техника
🤡195👍5👏1
10 основных структур данных, используемых в повседневной жизни:

- List: Используется для представления последовательности элементов. Пример применения — ленты новостей в Twitter.
- Array: Массив, где элементы хранятся по индексам. Применяется для математических операций и работы с большими наборами данных.
- Stack: Структуры данных типа «последним пришёл — первым вышел». Используется для функций отмены/возврата в текстовых редакторах
- Queue: Очередь, где элементы обрабатываются по принципу «первым пришёл — первым вышел». Применяется для управления заданиями принтера и пользовательскими действиями в играх.
- Heap: Используется для планирования задач.
- Tree: Иерархическая структура, применяемая для анализа HTML-документов и принятия решений в ИИ.
- Suffix Tree: Применяется для поиска строк в документах.
- Graph: Используется для отслеживания связей между людьми (например, в социальных сетях) и поиска путей.
- R-tree: Применяется для поиска ближайших соседей.
- Hash Table: Используется в системах кэширования
👍15🔥21👏1
Какой способ инициализации числового массива более интуитивен?
Anonymous Poll
2%
numbers = 1, 2, 3, 4, 5;
27%
numbers = {1, 2, 3, 4, 5};
69%
numbers = [1, 2, 3, 4, 5];
1%
numbers = (1, 2, 3, 4, 5);
🔥18🤨14🍾5👨‍💻32🤡2
Основные способы масштабирования баз данных (описание в следующем посте)
3👍1👎1🔥1👏1
Основные способы масштабирования баз данных:
(описание к предыдущему посту)

1. Индексирование (Indexing):
- Анализируйте шаблоны запросов вашего приложения и создавайте правильные индексы.
- Пример: создание индекса для столбца order_amount в таблице Orders.

2. Материализованные представления (Materialized Views):
- Предварительно вычисляйте результаты сложных запросов и храните их для более быстрого доступа.
- Пример: создание материализованного представления для таблицы Orders с фильтрами.

3. Денормализация (Denormalization):
- Уменьшайте количество сложных объединений для улучшения производительности запросов.
- Пример: объединение таблиц Customers и Orders в одну таблицу Customer Orders.

4. Кэширование базы данных (Database Caching):
- Храните часто запрашиваемые данные в более быстром слое хранения.
- Пример: кэширование данных в приложении.

5. Репликация (Replication):
- Создавайте копии вашей основной базы данных на разных серверах для масштабирования чтения.
- Пример: создание реплик основной базы данных.

6. Вертикальное масштабирование (Vertical Scaling):
- Повышайте производительность сервера базы данных, добавляя больше CPU, RAM или хранилища.
- Пример: добавление ресурсов на сервер базы данных.

7. Шардинг (Sharding):
- Распределяйте ресурсы, которые потребуются до того, как они понадобятся.
- Пример: разделение таблицы Orders на несколько шардов.

Эти стратегии помогают улучшить производительность и масштабируемость баз данных, позволяя справляться с возрастающими нагрузками и требованиями приложений.
👎6👍42👏1
Как работают каналы (pipes) в Linux
(описание в следующем посте)
#linux
4👍2👏1
Как работают каналы (pipes) в Linux:
(описание к предыдущему посту)
#linux

1. Каналы (Pipes):
- Позволяют межпроцессное взаимодействие путем отправки данных из вывода одного процесса (stdout) на ввод другого (stdin).
- Однонаправленные: данные текут только в одном направлении — от писателя к читателю.
- Концептуальный поток: Процесс A (stdout) → [PIPE] → (stdin) Процесс B.

2. Анонимные каналы (Anonymous Pipes):
- Временный, однонаправленный канал связи между двумя связанными процессами.
- Однонаправленные: данные текут только в одном направлении.
- Область видимости: существует только во время выполнения процессов.
- Создание: создаются программно с помощью системного вызова pipe() или неявно через оператор | в командной оболочке.
- Использование: обычно используются для связывания команд в конвейере.
- Пример: cat file.txt | grep "keyword" | wc -l
- cat читает файл.
- Вывод фильтруется с помощью grep.
- Отфильтрованные строки подсчитываются с помощью wc.

3. Именованные каналы (Named Pipe, FIFO):
- Также известны как FIFO (First In, First Out).
- Постоянный канал связи, который существует как специальный файл в файловой системе, позволяющий не связанным процессам общаться.
- Однонаправленные: как анонимные каналы, данные текут в одном направлении.
- Постоянство: остается в файловой системе до явного удаления.
- Создание: создается с помощью команд mkfifo или mknod.
- Область видимости: может быть доступен через разные сессии или несвязанные процессы.
- Пример:
1. Создание именованного канала: mkfifo my_pipe
2. Запись в канал: echo "Hello, World!" > my_pipe &
3. Чтение из канала: cat < my_pipe

4. Важные примечания:
- Анонимные каналы идеальны для простых, временных задач, таких как связывание команд в конвейере.
- Именованные каналы лучше подходят для сложных рабочих процессов, требующих межпроцессного взаимодействия между несвязанными процессами или сессиями.
5🔥3👏1
Какой способ установки типа переменной более интуитивен (перед переменной или после переменной) ?
Anonymous Poll
90%
int n = 5;
10%
n: int = 5;
🤡22🌚12👍8😁6🤨43🔥2
В руководство по языку Python добавлена новая статья про Пакетный менеджер uv
https://metanit.com/python/tutorial/6.10.php
#python
👍133🔥2🤮2🆒2
Тем временем в июле ситуация в российском ИТ прододжила ухудщаться.
hh.индекс, который показывает соотношение количества активных резюме к количеству активных вакансий на рынке в выбранной профобласти, достиг 13, 7 (больше или равно 12 — крайне высокий уровень конкуренции соискателей за рабочие места)
Предлашаемые зарплаты за последние полгода застыли на уровне 90 000 рублей (медианный уровень дохода в вакансиях)
Количество вакансий уменьшилось год к году на 33%, а колиество резюме возросло на 28%
https://stats.hh.ru/?hhIndexProfArea=information_technology
😢31😁6😱5👎4🌚4🤣2🎅2
Что такое принципы SOLID?
(описание в следующем посте)
👍7