C++ Academy
16.6K subscribers
668 photos
132 videos
1 file
616 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
📌 Git Revert vs Git Reset: В чём разница? 🔄

Когда вы делаете ошибку в Git, важно понимать, как правильно её исправить. Два самых популярных способа — git revert и git reset. Но они работают по-разному!

### 🔹 Git Revert
- Создаёт новый коммит, который отменяет изменения из проблемного коммита.
- История сохраняется полностью — всё видно, даже ошибка.
- Безопасный вариант для публичных веток (например, `main`).
- Не удаляет коммиты — просто "откатывает" их эффект.

> 💡 Пример:
> C1 → C2 → C3 (ошибка) → C4: Revert C3
> Результат: ошибка отменена, но история остаётся полной.

🔹 Git Reset
- Удаляет коммит(ы) из истории.
- Изменяет историю репозитория — может быть опасно, если уже был пуш.
- Подходит только для локальных изменений или ещё не опубликованных коммитов.
- Есть три режима: soft, mixed, hard.

> 💡 Пример:
> C1 → C2 → C3 (ошибка) → C3 убрано
> Результат: история обрезана, как будто коммит никогда не был.

💡 Вывод:
revert — безопасный и прозрачный способ отменить изменения.
reset — мощный инструмент, но требует осторожности.

📌 Понимание этих команд — ключ к уверенной работе с Git!

#Git #DevOps #Programming #junior
👍255🥰1
🔥 Успех в IT = скорость + знания + окружение

Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!

AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Собеседования DS: t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
Devops: t.me/DevOPSitsec
Data Science: t.me/data_analysis_ml
Javascript: t.me/javascriptv
C#: t.me/csharp_1001_notes
Java: t.me/java_library
Базы данных: t.me/sqlhub
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://t.me/gamedev
Haskell: t.me/haskell_tg
Физика: t.me/fizmat

💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.me/addlist/mzMMG3RPZhY2M2Iy

😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy

Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
👍2
🧠 C++ хитрая и интересная задача (lock-free)

Задача: реализуй однопоточный производитель / однопоточный потребитель (SPSC) кольцевой буфер без мьютексов — только на std::atomic и правильных порядках памяти.

Требования:
- push(const T&) и pop(T&)O(1), без блокировок; возвращают false, если буфер полон/пуст.
- Ёмкость — степень двойки; индексация — маской.
- Гарантируется ровно один поток-производитель и ровно один поток-потребитель.

Скелет:


#include <atomic>
#include <array>
#include <cstddef>
#include <optional>

template<typename T, std::size_t N>
class SpscRing {
static_assert((N & (N - 1)) == 0, "N must be power of two");
public:
bool push(const T& v) {
// твой код
return false;
}
bool pop(T& out) {
// твой код
return false;
}
private:
alignas(64) std::atomic<size_t> head{0}; // consumer reads
alignas(64) std::atomic<size_t> tail{0}; // producer writes
alignas(64) std::array<T, N> buf{};
static constexpr size_t mask = N - 1;
};


💡 Подсказки:
- Пиши в buf[tail & mask], затем публикуй запись:
tail.store(next, std::memory_order_release);
- Читай из buf[head & mask] после проверки наличия данных, затем:
head.store(next, std::memory_order_release);
- На чтение границ используйте std::memory_order_acquire:
- Producer: сначала head.load(memory_order_acquire) (чтобы не переписать не потреблённое).
- Consumer: сначала tail.load(memory_order_acquire) (чтобы увидеть свежие записи).
- Ни одного fetch_add не нужно: вычисляй next = idx + 1.
- Проверка переполнения: буфер полон, если next_tail == head.
- Чтобы избежать ложного шаринга — разнеси head, tail и buf (см. alignas(64)).
- Не забудь про TriviallyCopyable/Noexcept: для общего T лучше использовать std::is_nothrow_copy_assignable_v<T> и/или перемещение.

🎯 Бонус-тест

В двух потоках гоняй счётчик 0..1e7 через буфер.
На выходе проверь, что последовательность непрерывна и без пропусков.
6🔥3🥰1
🚀 Arkime — open-source система для захвата, индексации и хранения сетевых пакетов в формате PCAP.

Интегрируется с вашей инфраструктурой безопасности, обеспечивая быстрый доступ к данным через удобный веб-интерфейс для просмотра, поиска и экспорта PCAP.

Поддерживает API для загрузки и использования данных в форматах PCAP и JSON.

🔗 GitHub: https://github.com/arkime/arkime
🔥53👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Инструмент визуализации памяти для C++

MV — это инструмент для реального времени, который помогает понять управление памятью в C++. Он визуализирует стек и кучу, что делает его идеальным для изучения таких концепций, как указатели, утечки памяти и управление кучей.

🚀 Основные моменты:
- Визуализация работы указателей и ссылок
- Понимание различий между стеком и кучей
- Выявление и анализ утечек памяти
- Поддержка базовых концепций C++

📌 GitHub: https://github.com/humblepenguinn/mv

@cpluspluc
👍20🔥128
💾 Память в C без страха и ошибок
📅 15 сентября | 20:00 мск | бесплатно

На вебинаре разберём:
🆚 Стек vs куча и почему нельзя возвращать локальные массивы
🛠 malloc, calloc, realloc, free — правильное выделение и освобождение памяти
🔍 Как ловить утечки и избегать висячих указателей

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

👉 Регистрируйтесь:
https://otus.pw/Gh5h/

Занятие приурочено к старту курса "Программист С", обучение на котором позволит не только глубоко погрузиться в возможности языка С, но и изучить низкоуровневые особенности устройства UNIX-совместимых ОС и ОС семейства Windows


Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
👍3
🗺️ Интеграция MapLibre Native и Slint

Проект демонстрирует, как объединить библиотеку карт MapLibre Native с UI-фреймворком Slint для создания интерактивных картографических приложений. Поддерживает кроссплатформенность и различные графические бэкенды.

🚀Основные моменты:
- Гибридный рендеринг на GPU и CPU
- Интеграция карт в интерфейсы Slint
- Поддержка Linux, Windows и macOS
- Взаимодействие с картами (в процессе)
- Автоматическая загрузка зависимостей Slint

📌 GitHub: https://github.com/maplibre/maplibre-native-slint

#cpp
🔥10❤‍🔥53
🤖 Легковесный AI-агент на C для командной строки

Agent-C — это ультралегкий AI-агент, который взаимодействует с OpenRouter API и выполняет команды оболочки. Он оптимизирован для работы на macOS и Linux, обеспечивая минимальный размер бинарников и эффективное управление памятью.

🚀Основные моменты:
- Выполнение команд оболочки через AI-ответы
- Минимальный размер: 4.4KB для macOS, ~16KB для Linux
- Эффективное управление памятью с помощью скользящего окна
- Кроссплатформенная поддержка

📌 GitHub: https://github.com/bravenewxyz/agent-c

#c
8👍4🔥2
Диски в облаке — это базовая функциональность.
Для пользователя всё просто: приаттачил к ВМ и всё заработало.


Но как это устроена работа с i/o на стороне провайдера?

Инженеры MWS Cloud Platform ⬜️ делятся своим опытом работы с фреймворком SPDK:
⏺️чем он лучше работы через QEMU или ядро Linux;
⏺️какие фичи пришлось дописывать самим;
⏺️как довели фреймворк до продакшена и даже отдали часть изменений в апстрим.

⏩️Загляните внутрь дисковой подсистемы облачного провайдера — читайте статью.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1🔥1
🤖 Легковесный AI-агент на C для командной строки

Agent-C — это ультралегкий AI-агент, который взаимодействует с OpenRouter API и выполняет команды оболочки. Он оптимизирован для работы на macOS и Linux, обеспечивая минимальный размер бинарников и эффективное управление памятью.

🚀Основные моменты:
- Выполнение команд оболочки через AI-ответы
- Минимальный размер: 4.4KB для macOS, ~16KB для Linux
- Эффективное управление памятью с помощью скользящего окна
- Кроссплатформенная поддержка

📌 GitHub: https://github.com/bravenewxyz/agent-c

#c
5🔥3👍2
⚠️ Сегодня — День программиста! 🎉

Этот праздник отмечается в России в 256-й день года.
Почему именно 256?
- Это число равно 2⁸ — количеству уникальных значений, которые можно закодировать в одном байте.
- Это наибольшая степень двойки, которая не превышает количество дней в году (365 или 366).

❤️ Поздравляем всех программистов! Пусть код всегда компилируется, баги обходят стороной, а проекты приносят радость.

@cpluspluc
25🔥7👍5