В руководство по языку C++ добавлена статья про Указатели на поля и методы классов/структур
https://metanit.com/cpp/tutorial/5.29.php
#cpp #cplusplus #c++
https://metanit.com/cpp/tutorial/5.29.php
#cpp #cplusplus #c++
👍16👏9🔥4❤1🌭1
Как работают списки контроля доступом (ACL) в Linux #linux
1. ACL как расширение стандартных разрешений:
- ACL позволяет добавлять разрешения для конкретных пользователей и групп, что расширяет стандартные разрешения Linux
- Пример: создание директории с помощью команды
2. Добавление ACL-разрешений:
- С помощью команды
- ACL включает разрешения для пользователей, групп и других, а также «маску», которая определяет верхний предел разрешений
3. Роль «маски»:
- «Маска» действует как верхний предел, гарантируя, что стандартные разрешения остаются в силе
- Пример: удаление групповых разрешений с помощью
4. Использование команды setfacl:
- Команда
- Пример: добавление разрешения для пользователя с помощью
1. ACL как расширение стандартных разрешений:
- ACL позволяет добавлять разрешения для конкретных пользователей и групп, что расширяет стандартные разрешения Linux
- Пример: создание директории с помощью команды
mkdir dir и просмотр стандартных разрешений с помощью ls -ld dir2. Добавление ACL-разрешений:
- С помощью команды
getfacl dir можно просмотреть ACL-разрешения- ACL включает разрешения для пользователей, групп и других, а также «маску», которая определяет верхний предел разрешений
3. Роль «маски»:
- «Маска» действует как верхний предел, гарантируя, что стандартные разрешения остаются в силе
- Пример: удаление групповых разрешений с помощью
chmod g-r dir и проверка изменений с помощью getfacl dir4. Использование команды setfacl:
- Команда
setfacl позволяет добавлять или изменять ACL-разрешения- Пример: добавление разрешения для пользователя с помощью
setfacl -m u:jimy:r file❤8🔥4👏1
Основные компоненты Docker и взаимодействие между ними
Docker Client — это интерфейс, через который пользователь взаимодействует с Docker. Команды, такие как
Docker Host — это операционная система, на которой установлен Docker. Внутри Docker Host находятся:
- Containers — запущенные приложения, которые изолированы друг от друга.
- Images — неизменяемые шаблоны, из которых создаются контейнеры.
Docker Registry — это хранилище образов, где они могут быть загружены или загружены. На изображении показаны примеры репозиториев, таких как Ubuntu и NGINX.
Daemon — это служба, которая управляет контейнерами, образами и сетями. Она обрабатывает команды, отправленные через Docker Client.
Docker Client — это интерфейс, через который пользователь взаимодействует с Docker. Команды, такие как
docker build, docker pull и docker run, отправляются через клиент.Docker Host — это операционная система, на которой установлен Docker. Внутри Docker Host находятся:
- Containers — запущенные приложения, которые изолированы друг от друга.
- Images — неизменяемые шаблоны, из которых создаются контейнеры.
Docker Registry — это хранилище образов, где они могут быть загружены или загружены. На изображении показаны примеры репозиториев, таких как Ubuntu и NGINX.
Daemon — это служба, которая управляет контейнерами, образами и сетями. Она обрабатывает команды, отправленные через Docker Client.
👍5❤3🔥3😁3
Техники промпт-инжиниринга
(описание для предыдущего поста)
Промпт-инжиниринг представляет целенаправленный процесс разработки входных данных при работе с большими языковыми моделями (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). Промпт-инжиниринг — это лишь один из компонентов, а не сама техника
(описание для предыдущего поста)
Промпт-инжиниринг представляет целенаправленный процесс разработки входных данных при работе с большими языковыми моделями (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). Промпт-инжиниринг — это лишь один из компонентов, а не сама техника
Telegram
METANIT.COM
Техники промпт-инжиниринга
Описание в следующем посте
Описание в следующем посте
🤡19❤5👍5👏1
10 основных структур данных, используемых в повседневной жизни:
- List: Используется для представления последовательности элементов. Пример применения — ленты новостей в Twitter.
- Array: Массив, где элементы хранятся по индексам. Применяется для математических операций и работы с большими наборами данных.
- Stack: Структуры данных типа «последним пришёл — первым вышел». Используется для функций отмены/возврата в текстовых редакторах
- Queue: Очередь, где элементы обрабатываются по принципу «первым пришёл — первым вышел». Применяется для управления заданиями принтера и пользовательскими действиями в играх.
- Heap: Используется для планирования задач.
- Tree: Иерархическая структура, применяемая для анализа HTML-документов и принятия решений в ИИ.
- Suffix Tree: Применяется для поиска строк в документах.
- Graph: Используется для отслеживания связей между людьми (например, в социальных сетях) и поиска путей.
- R-tree: Применяется для поиска ближайших соседей.
- Hash Table: Используется в системах кэширования
- List: Используется для представления последовательности элементов. Пример применения — ленты новостей в Twitter.
- Array: Массив, где элементы хранятся по индексам. Применяется для математических операций и работы с большими наборами данных.
- Stack: Структуры данных типа «последним пришёл — первым вышел». Используется для функций отмены/возврата в текстовых редакторах
- Queue: Очередь, где элементы обрабатываются по принципу «первым пришёл — первым вышел». Применяется для управления заданиями принтера и пользовательскими действиями в играх.
- Heap: Используется для планирования задач.
- Tree: Иерархическая структура, применяемая для анализа HTML-документов и принятия решений в ИИ.
- Suffix Tree: Применяется для поиска строк в документах.
- Graph: Используется для отслеживания связей между людьми (например, в социальных сетях) и поиска путей.
- R-tree: Применяется для поиска ближайших соседей.
- Hash Table: Используется в системах кэширования
👍15🔥2❤1👏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👨💻3❤2🤡2
Основные способы масштабирования баз данных:
(описание к предыдущему посту)
1. Индексирование (Indexing):
- Анализируйте шаблоны запросов вашего приложения и создавайте правильные индексы.
- Пример: создание индекса для столбца
2. Материализованные представления (Materialized Views):
- Предварительно вычисляйте результаты сложных запросов и храните их для более быстрого доступа.
- Пример: создание материализованного представления для таблицы
3. Денормализация (Denormalization):
- Уменьшайте количество сложных объединений для улучшения производительности запросов.
- Пример: объединение таблиц
4. Кэширование базы данных (Database Caching):
- Храните часто запрашиваемые данные в более быстром слое хранения.
- Пример: кэширование данных в приложении.
5. Репликация (Replication):
- Создавайте копии вашей основной базы данных на разных серверах для масштабирования чтения.
- Пример: создание реплик основной базы данных.
6. Вертикальное масштабирование (Vertical Scaling):
- Повышайте производительность сервера базы данных, добавляя больше CPU, RAM или хранилища.
- Пример: добавление ресурсов на сервер базы данных.
7. Шардинг (Sharding):
- Распределяйте ресурсы, которые потребуются до того, как они понадобятся.
- Пример: разделение таблицы
Эти стратегии помогают улучшить производительность и масштабируемость баз данных, позволяя справляться с возрастающими нагрузками и требованиями приложений.
(описание к предыдущему посту)
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 на несколько шардов.Эти стратегии помогают улучшить производительность и масштабируемость баз данных, позволяя справляться с возрастающими нагрузками и требованиями приложений.
Telegram
METANIT.COM
Основные способы масштабирования баз данных
👎6👍4❤2👏1
Как работают каналы (pipes) в Linux:
(описание к предыдущему посту)
#linux
1. Каналы (Pipes):
- Позволяют межпроцессное взаимодействие путем отправки данных из вывода одного процесса (stdout) на ввод другого (stdin).
- Однонаправленные: данные текут только в одном направлении — от писателя к читателю.
- Концептуальный поток: Процесс A (stdout) → [PIPE] → (stdin) Процесс B.
2. Анонимные каналы (Anonymous Pipes):
- Временный, однонаправленный канал связи между двумя связанными процессами.
- Однонаправленные: данные текут только в одном направлении.
- Область видимости: существует только во время выполнения процессов.
- Создание: создаются программно с помощью системного вызова pipe() или неявно через оператор | в командной оболочке.
- Использование: обычно используются для связывания команд в конвейере.
- Пример:
-
- Вывод фильтруется с помощью
- Отфильтрованные строки подсчитываются с помощью
3. Именованные каналы (Named Pipe, FIFO):
- Также известны как FIFO (First In, First Out).
- Постоянный канал связи, который существует как специальный файл в файловой системе, позволяющий не связанным процессам общаться.
- Однонаправленные: как анонимные каналы, данные текут в одном направлении.
- Постоянство: остается в файловой системе до явного удаления.
- Создание: создается с помощью команд
- Область видимости: может быть доступен через разные сессии или несвязанные процессы.
- Пример:
1. Создание именованного канала:
2. Запись в канал:
3. Чтение из канала:
4. Важные примечания:
- Анонимные каналы идеальны для простых, временных задач, таких как связывание команд в конвейере.
- Именованные каналы лучше подходят для сложных рабочих процессов, требующих межпроцессного взаимодействия между несвязанными процессами или сессиями.
(описание к предыдущему посту)
#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_pipe2. Запись в канал:
echo "Hello, World!" > my_pipe &3. Чтение из канала:
cat < my_pipe4. Важные примечания:
- Анонимные каналы идеальны для простых, временных задач, таких как связывание команд в конвейере.
- Именованные каналы лучше подходят для сложных рабочих процессов, требующих межпроцессного взаимодействия между несвязанными процессами или сессиями.
Telegram
METANIT.COM
Как работают каналы (pipes) в Linux
#linux
#linux
❤5🔥3👏1
Какой способ установки типа переменной более интуитивен (перед переменной или после переменной) ?
Anonymous Poll
90%
int n = 5;
10%
n: int = 5;
🤡22🌚12👍8😁6🤨4❤3🔥2
В руководство по языку Python добавлена новая статья про Пакетный менеджер uv
https://metanit.com/python/tutorial/6.10.php
#python
https://metanit.com/python/tutorial/6.10.php
#python
👍13❤3🔥2🤮2🆒2
Тем временем в июле ситуация в российском ИТ прододжила ухудщаться.
hh.индекс, который показывает соотношение количества активных резюме к количеству активных вакансий на рынке в выбранной профобласти, достиг 13, 7 (больше или равно 12 — крайне высокий уровень конкуренции соискателей за рабочие места)
Предлашаемые зарплаты за последние полгода застыли на уровне 90 000 рублей (медианный уровень дохода в вакансиях)
Количество вакансий уменьшилось год к году на 33%, а колиество резюме возросло на 28%
https://stats.hh.ru/?hhIndexProfArea=information_technology
hh.индекс, который показывает соотношение количества активных резюме к количеству активных вакансий на рынке в выбранной профобласти, достиг 13, 7 (больше или равно 12 — крайне высокий уровень конкуренции соискателей за рабочие места)
Предлашаемые зарплаты за последние полгода застыли на уровне 90 000 рублей (медианный уровень дохода в вакансиях)
Количество вакансий уменьшилось год к году на 33%, а колиество резюме возросло на 28%
https://stats.hh.ru/?hhIndexProfArea=information_technology
😢31😁6😱5👎4🌚4🤣2🎅2
Что такое принципы SOLID?
(описание к предыдущему посту)
SOLID — это набор рекомендаций по созданию программного обеспечения, которое легко понимать, модифицировать и расширять.
Аббревиатура SOLID расшифровывается следующим образом:
S → Принцип единственной ответственности
O → Принцип открытости/закрытости
L → Принцип подстановки Лисков
I → Принцип разделения интерфейсов
D → Принцип инверсии зависимостей
* Принцип единственной ответственности (SRP) гласит, что у класса должна быть только одна причина для изменения. Другими словами, у него должна быть единственная чётко определённая обязанность или задача в программной системе.
* Принцип открытости/закрытости (OCP) утверждает, что программные сущности (например, классы) должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новую функциональность, не изменяя существующий код.
* Принцип подстановки Лисков (LSP) утверждает, что объекты производного класса должны иметь возможность заменять объекты базового класса без нарушения корректности программы.
* Принцип разделения интерфейсов (ISP) подчёркивает, что классы или компоненты, использующие интерфейсы, не должны зависеть от интерфейсов, которые они не используют.
* Принцип инверсии зависимостей (DIP) гласит, что высокоуровневые модули (или классы) не должны зависеть от низкоуровневых модулей; оба должны зависеть от абстракций, таких как интерфейсы.
(описание к предыдущему посту)
SOLID — это набор рекомендаций по созданию программного обеспечения, которое легко понимать, модифицировать и расширять.
Аббревиатура SOLID расшифровывается следующим образом:
S → Принцип единственной ответственности
O → Принцип открытости/закрытости
L → Принцип подстановки Лисков
I → Принцип разделения интерфейсов
D → Принцип инверсии зависимостей
* Принцип единственной ответственности (SRP) гласит, что у класса должна быть только одна причина для изменения. Другими словами, у него должна быть единственная чётко определённая обязанность или задача в программной системе.
* Принцип открытости/закрытости (OCP) утверждает, что программные сущности (например, классы) должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новую функциональность, не изменяя существующий код.
* Принцип подстановки Лисков (LSP) утверждает, что объекты производного класса должны иметь возможность заменять объекты базового класса без нарушения корректности программы.
* Принцип разделения интерфейсов (ISP) подчёркивает, что классы или компоненты, использующие интерфейсы, не должны зависеть от интерфейсов, которые они не используют.
* Принцип инверсии зависимостей (DIP) гласит, что высокоуровневые модули (или классы) не должны зависеть от низкоуровневых модулей; оба должны зависеть от абстракций, таких как интерфейсы.
Telegram
METANIT.COM
Что такое принципы SOLID?
👍15🔥3👏1
Мессенджер Max станет обязательным для предустановки на все новые смартфоны в РФ с 1 сентября. Вкратце о мессенджере:
"Max сочетает в себе функции общения (чаты, звонки, передача файлов до 4 ГБ), интеграцию с государственными сервисами (Госуслуги, цифровая подпись), а также финансовые инструменты через систему быстрых платежей."
"Приложение собирает IP-адреса, данные о местоположении и активностях пользователей, а его политика допускает передачу этих сведений государственным органам. End-to-end шифрование, в отличие от других мессенджеров, пока не реализовано - используется защита канала связи, что оставляет данные уязвимыми на серверах"
https://ria.ru/20250806/yurist-2033592622.html
"Max сочетает в себе функции общения (чаты, звонки, передача файлов до 4 ГБ), интеграцию с государственными сервисами (Госуслуги, цифровая подпись), а также финансовые инструменты через систему быстрых платежей."
"Приложение собирает IP-адреса, данные о местоположении и активностях пользователей, а его политика допускает передачу этих сведений государственным органам. End-to-end шифрование, в отличие от других мессенджеров, пока не реализовано - используется защита канала связи, что оставляет данные уязвимыми на серверах"
https://ria.ru/20250806/yurist-2033592622.html
РИА Новости
Юрист рассказал, когда MAX будет обязателен к установке на новые смартфоны
Мессенджер MAX станет обязательным для предустановки на все новые смартфоны в РФ с 1 сентября, рассказал РИА Новости юрист, руководитель Центра правопорядка в... РИА Новости, 13.08.2025
🤡64💩28👎6👍5🤣3😁2❤1🤔1