C/C++ Development | YeaHub – Telegram
C/C++ Development | YeaHub
828 subscribers
228 photos
56 videos
1 file
379 links
Теория, подготовка к интервью и курсы для C/C++ разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 Наглядное видео о том, как исходный код компилируется в исполняемый файл

Не знать, как компилируется твой код — всё равно что ехать на машине с завязанными глазами

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1🥰1
#полезное
😇 Я недавно нашёл классный способ поддерживать "лямбды" в C

Без аллокаций, работает с любым типом массива, "автоматический захват" переменных, поскольку это просто простая генерация кода

На втором фото несколько примеров с однострочными, многострочными и с "захваченными" переменными

На 3 фото пример использован в реальном коде (адаптирован под кастомный тип массива, который просто ptr + len)

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#Собес #Cplus
🤔 Что такое прототип функции в С++?

Прототип функции в С++ — это декларация функции, которая указывает ее имя, тип возвращаемого значения и типы параметров. Это позволяет компилятору проверять правильность вызова функции до ее определения.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
#полезное
🤯 std::indirectly_
readable_traits


std::indirectly_readable_traits (C++20) используется внутри концептов и обобщённых алгоритмов для извлечения типа значения, на который "указывает" итератор или указатель. Это полезно при написании обобщённых (generic) алгоритмов и своих концептов.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#полезное
🛞 Создание простого клиент-серверного приложения на UDP в C

Здесь мы рассмотрим, как настроить базовый UDP-сервер и клиент на языке C, сосредоточив внимание на механике работы за кулисами - гайд

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
11
#полезное
🥄 Напоминание: лучший способ чему-либо научиться — делать собственные проекты.

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

Многие из них — на C, другие — на Assembly, и каждый из них даст вам мощную прокачку.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес #Cplus
🤔 Расскажите про стек в контексте С++

Стек в С++ - это адаптер контейнера, работающий по принципу LIFO (Last In, First Out), где последний элемент, добавленный в стек, будет первым, который из него извлечет.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😎 Представьте себе написание сложной разветвлённой логики без единого оператора if. Я уже некоторое время работаю с сопоставлением с образцом, но с новым языком, не C/C++

Можешь ознакомиться с этим гайдом о сопоставлении с образцом

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🥺 Сегодня получил интересный вопрос: что быстрее —
n++, ++n или n + 1 ?

Ответ: n++ читает стек 3 раза, в то время как ++n и n + 1 — 4 раза.

Тесты были проведены на следующем коде (смотри фото):

++n и n + 1

Для dummy = ++n и n = n + 1; dummy = n происходит следующее:

> n инкрементируется на стеке
> значение n загружается в регистр
> регистр сохраняется в dummy на стеке

n++

Для dummy = n++ происходит следующее:

> n загружается в регистр-1
> регистр-1 инкрементируется и результат сохраняется в регистр-2
> регистр-2 сохраняется обратно на стек (обновлённое значение n)
> регистр-1 сохраняется на стек в dummy (исходное значение n)

Может показаться, что код для n++ содержит больше инструкций и поэтому должен быть медленнее, но это не так.

На практике не существует такого понятия, как «инкремент на стеке» — значение фактически загружается в процессор, инкрементируется там, а затем записывается обратно.

Если посчитать обращения к стеку (чтения и записи):

> ++n и n + 1: чтение, запись, чтение, запись — 4 обращения к стеку

> n++: чтение, запись, запись — 3 обращения к стеку

Поскольку чтение из регистра значительно быстрее, чем из стека, это делает n++ более быстрым вариантом.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#видео
😐 Изучение ядра Linux с использованием трассировки

Отличное видео о трассировке системных вызовов и о том, как это работает под капотом
Источник

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #Cplus
🤔 Что такое исключение в С++?

Исключение в С++ - это обьект, который выбрасывается во время выполнения программы, когда возникает необычная ситуация или ошибка. Исключения обрабатываются с помощью блока try-catch.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
#ЛитКод
Задача: 717. 1-bit and 2-bit Characters

У нас есть два специальных символа: первый символ может быть представлен одним битом 0. Второй символ может быть представлен двумя битами (10 или 11). Если задан двоичный массив bits, который заканчивается 0, верните true, если последний символ должен быть однобитным.

Пример:
Input: bits = [1,0,0]
Output: true


👨‍💻 Алгоритм:

1⃣Инициализируйте индекс для итерации по массиву.

2⃣Пройдите по массиву, увеличивая индекс на 1, если текущий бит равен 0, и на 2, если текущий бит равен 1.

3⃣Проверьте, достиг ли индекс последнего элемента массива, и верните результат.

😎 Решение:
bool isOneBitCharacter(vector<int>& bits) {
int i = 0;
while (i < bits.size() - 1) {
i += bits[i] + 1;
}
return i == bits.size() - 1;
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1
#полезное
👋 Изучай разработку ОС, это реально увлекательно

Функция breakpoint_handler() устанавливает обработчик исключений, который перехватывает инструкции brk, выполняемые внутри целевого процесса. Здесь написана отдельная функция patch(), — она внедряет трамплин в исполняемую область памяти, и этот трамплин содержит инструкцию brk в качестве ловушки.

Когда выполнение доходит до brk, обработчик перехватывает исключение, получает доступ к регистрам потока, модифицирует x0, подставляя нужное значение возврата, продвигает счётчик инструкций, чтобы пропустить ловушку, и выполнение продолжается.

В комбинации с остальной частью моего кода это обеспечивает патчинг во время выполнения, интроспекцию ВМ и метаморфное выполнение кода.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🔥1
#полезное
❤️‍🔥 Чувак оптимизировал умножение матриц на C с использованием SIMD, блочной работы с кэшем и многопоточности, сократив время выполнения в 80 раз.
Репозиторий на GitHub

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😈32🔥1