Библиотека собеса по C++ | вопросы с собеседований
4.71K subscribers
384 photos
2 videos
163 links
Вопросы с собеседований по C++ и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9ccf302b

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
🏵️ Что такое God Object?

God Object — это антипаттерн. Так же его называют Божественный Объект

• Это объект, который берёт на себя слишком много ответственности
• Нарушает принцип Единственной ответственности (SOLID)
• Часто становится сложным для понимания, поддержки и тестирования

Как понять что это God Object?
• Объект отвечает за множество задач логически не связанные между собой
• Чрезмерная централизация логики. Большая часть логики сосредоточенна в одном классе, что приводит к монолитной структуре кода

Проблемы с использованием
• Сложность изменений. Изменяя одну часть, можно повлиять на всю систему целиком

Как избежать God Object?
• Разделять ответственность на несколько классов или модулей
• Каждый из которых отвечает за отдельную задачу
• Следуйте принципам SOLID
🥪 Что такое std::forward?

std::forward — шаблонная функция определённая в стандартной библиотеке

std::forward используется для perfect forwarding, т.е. когда параметр из одной функции передать в другую функцию и при этом сохранить способ передачи

std::forward не делает ниаких действий во время выполнения

❗️Примерная реализация
template<class T>
T&& forward(typename remove_reference<T>::type& a)
{
return static_cast<T&&>(a);
}

- remove_reference - в данном случае указывает, что функция всегда принимает l-value reference
🤔 Кем я хочу быть – DS или ML engineer? Стоит ли понимать специфику сферы?

🗓 22 августа на вебинаре «Как меняется математика в разных индустриях: от мобильных игр к фондовым рынкам» ответим на эти и другие вопросы.

Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.

😮 На вебинаре узнаете:

🔵 Математика в бизнесе: Чем отличаются разные сферы друг от друга. Почему стоит понимать специфику сферы
🔵 ML и продуктовое IT: Чем различается математическая сложность от индустрии к индустрии. Какие к ним необходимы уровни подготовки
🔵 Баевская математика в GameDev. Баевская математика как альтернатива AB тестированию. Как математические методы применяются в разработке игр
🔵 Finance: Что такое количественные финансы и математическое моделирование. Обсудим текущие индустриальные тренды в отрасли
🔵 Backtest: Как знания математики делают ваши активы более надежными
🔵 На практике подробно разберем два математических кейса по GameDev и Backtest.

➡️ Зарегистрироваться: https://proglib.io/w/602b9900
Please open Telegram to view this post
VIEW IN TELEGRAM
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
👁‍🗨 Что такое std::is_pointer_v?

std::is_pointer_v
— это переменная-шаблон из стандартной библиотеки C++, введенная в стандарте C++17. Она является частью библиотеки type_traits, которая предоставляет инструменты для получения информации о типах во время компиляции.

❗️Основное о std::is_pointer_v:

- Это сокращение для std::is_pointer::value
- Она принимает тип в качестве шаблонного параметра и возвращает true, если этот тип является указателем, и false в противном случае
- Это константа времени компиляции типа bool
- Она работает с любыми типами указателей, включая указатели на функции и указатели на члены
- Не считает nullptr_t указателем
😏 Чем отличается агрегация и композиция?

Агрегация и композиция - это два понятия из ООП, которые выполняют функцию похожую на наследование, но другим способом

👉 Видео с ответом
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
😱 Какие знаете паттерны проектирования?

Под паттернами проектирования часто имеют ввиду GoF паттерны, которые предназначены для удобного и эффективного описания структуры кода


Порождающие паттерны:

• Singleton
• Factory Method
• Abstract Factory
• Builder
• Prototype

Структурные паттерны:
• Adapter
• Bridge
• Composite
• Decorator
• Facade
• Flyweight
• Proxy

Поведенческие паттерны:
• Chain of Responsibility
• Command
• Interpreter
• Iterator
• Mediator
• Memento
• Observer
• State
• Strategy
• Template Method
• Visitor
🫐 Что такое PIMPL?

PIMPL (Pointer to IMPLementation) - это техника, которая скрывает детали реализации класса за указателем на вспомогательный класс, содержащий фактическую реализацию

❗️Основная идея
В публичном заголовочном файле объявляется только интерфейс класса и указатель на вспомогательный класс. Все детали реализации перемещаются в отдельный файл реализации.

❗️Структура

Публичный класс (в заголовочном файле):
class PublicClass {
public:
PublicClass();
~PublicClass();
void someMethod();
private:
class Impl;
std::unique_ptr<Impl> pimpl;
};


Приватный класс (в файле реализации):
class PublicClass::Impl {
public:
void someMethod() {
// Реальная реализация
}
};
🥪 Какие преимущества и недостатки PIMPL?


❗️Преимущества

- Улучшение времени компиляции: изменения в реализации не требуют перекомпиляции кода, использующего публичный класс
- Сокрытие деталей реализации: пользователи класса видят только его интерфейс
- Упрощение ABI (Application Binary Interface): изменения в приватной части не влияют на ABI
- Уменьшение зависимостей: заголовочный файл не нуждается в инклюдах для внутренних типов.


❗️Недостатки

- Дополнительный уровень косвенности: может слегка снизить производительность
- Усложнение кода: требует написания дополнительного кода для управления указателем
- Увеличение размера объекта: из-за хранения указателя


❗️Альтернатива

- C++20 появился концепт модулей, который может частично заменить PIMPL, предоставляя лучшие механизмы для сокрытия реализации и управления зависимостями
👾 -35% на хардкорный курс по вышмату

На курсе вы получите все необходимые знания для старта карьеры в DS или аналитике – https://proglib.io/w/6a7a6f96

19 490 рублей 29 990 рублей

Что еще вас ждет на курсе:

▪️ Полугодовая программа от преподавателей ВМК МГУ;

▪️ 150 практических заданий и 47 видеолекций;

▪️ Бессрочный доступ ко всем материалам курса;

▪️ Развернутая обратная связь по всем домашним заданиям, а также ссылки на полезные дополнительные материалы.

🌚 Переходите на сайт, читайте подробности и заходите на обучение по самым выгодным условиям – https://proglib.io/w/6a7a6f96
Please open Telegram to view this post
VIEW IN TELEGRAM