Какой принцип проектирования гласит, что код должен зависеть от абстракций, а не от конкретных классов?
Final Results
70%
Принцип инверсии зависимостей
20%
Принцип открытости/закрытости
0%
Принцип подстановки Лисков
10%
Принцип японской Годзиллы
🤯3
⬆️ ❌ В этой викторине я вмазал правильный ответ не туда 😁
Когда-то это должно было случиться) Видимо принял желаемое за действительное...
Давайте заново!
Когда-то это должно было случиться) Видимо принял желаемое за действительное...
Давайте заново!
Какой принцип проектирования гласит, что код должен зависеть от абстракций, а не от конкретных классов?
Anonymous Quiz
40%
Принцип инверсии зависимостей
30%
Принцип открытости/закрытости
5%
Принцип подстановки Лисков
25%
Принцип японской Годзиллы
Конкуретность или параллелизм
Оба понятия говорят об одновременном выполнении задач. Разница в деталях. #Словарь
Конкуретность - это одновременное выполнение N задач на одной вычислительной единице.
Параллелизм - это одновременное выполнение N задач на N вычислительных единиц.
При параллелизме "одновременность" обеспечиваются многопроцессорным “железом”, а при конкуретности - преимущественно логикой программы с управлением конфликтами.
Эта картинка хорошо показывает различие:
Оба понятия говорят об одновременном выполнении задач. Разница в деталях. #Словарь
Конкуретность - это одновременное выполнение N задач на одной вычислительной единице.
Параллелизм - это одновременное выполнение N задач на N вычислительных единиц.
При параллелизме "одновременность" обеспечиваются многопроцессорным “железом”, а при конкуретности - преимущественно логикой программы с управлением конфликтами.
Эта картинка хорошо показывает различие:
👍2
#include <iostream>
struct B { int n; };
class X : virtual public B {};
class Y : virtual public B {};
struct AA : X, Y
{
AA()
{
X::n = 1;
Y::n = 2;
std::cout << X::n << Y::n << '\n';
}
};
int main()
{
AA a;
return 0;
}
😱3
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
25%
22
5%
11
30%
12
40%
Никакой. Ошибка сборки
🙏2
Аутсорсинг или аутстаффинг
И то, и другое - это форма взаимоотношений, при которой одна организация привлекает к своей работе другую организацию как внешний ресурс.
При аутсорсинге (outsourcing) компания-заказчик передает выполнение какой-то части своих задач компании-подрядчику. Заказчику не важно как подрядчик будет выполнять работу. Важен результат.
При аутстаффинге (outstaffing) компания-заказчик берет в штат сотрудника компании-подрядчика. Заказчик сам заботится об организации работы сотрудника на аутстаффе.
В ИТ распространены оба формата. Мне, например, удалось поработать и аутсорсером, и аутстаффером 😏
#Словарь
И то, и другое - это форма взаимоотношений, при которой одна организация привлекает к своей работе другую организацию как внешний ресурс.
При аутсорсинге (outsourcing) компания-заказчик передает выполнение какой-то части своих задач компании-подрядчику. Заказчику не важно как подрядчик будет выполнять работу. Важен результат.
При аутстаффинге (outstaffing) компания-заказчик берет в штат сотрудника компании-подрядчика. Заказчик сам заботится об организации работы сотрудника на аутстаффе.
В ИТ распространены оба формата. Мне, например, удалось поработать и аутсорсером, и аутстаффером 😏
#Словарь
👍3
Какое утверждение ложно для паттерна Одиночка?
Anonymous Quiz
35%
Паттерн гарантирует существование не более одного экземпляра класса
41%
Паттерн обеспечивает низкую связность классов
0%
Паттерн обеспечивает глобальную точку доступа к единственному экземпляру
24%
Паттерн требует синхронизации создания экземпляра при многопоточном программировании
git worktree
Команда git worktree создает копию репозитория в отдельной папке.
Главное отличие этой команды от обычного клонирования - это отсутствие дублирования репозитория. Мы остаемся в пределах его локальной копии. Все локальные ветки и коммиты видны из каждого worktree.
Использование worktree упрощает нашу работу в нескольких ветках параллельно. Это особенно актуально для проектов, где переключение между ветками занимает продолжительное время. Например, из-за долгой сборки или трудоемкой конфигурации.
📍Git. Скачем между ветками как древесные лягушки
📍Картинка взята отсюда
Команда git worktree создает копию репозитория в отдельной папке.
Главное отличие этой команды от обычного клонирования - это отсутствие дублирования репозитория. Мы остаемся в пределах его локальной копии. Все локальные ветки и коммиты видны из каждого worktree.
Использование worktree упрощает нашу работу в нескольких ветках параллельно. Это особенно актуально для проектов, где переключение между ветками занимает продолжительное время. Например, из-за долгой сборки или трудоемкой конфигурации.
📍Git. Скачем между ветками как древесные лягушки
📍Картинка взята отсюда
👍2
Известно, что тормозной путь автомобиля со скорости 50 км/ч равен 14 метрам. Дайте оценку, каким будет тормозной путь со скорости 100 км/ч
Anonymous Quiz
13%
10 - 20 метров
17%
20 - 30 метров
42%
30 - 50 метров
29%
50 - 70 метров
Как использовать исключения. Рекомендация
💬 "Либо генерируй исключение, либо обрабатывай его, либо уходи с дороги!"
Используйте оператор
Используйте ключевые слова
📍Саттер Г. - Новые сложные задачи на С++
💬 "Либо генерируй исключение, либо обрабатывай его, либо уходи с дороги!"
Используйте оператор
throw там, где обнаружена ошибка, но нет возможности обработать ее самостоятельно.Используйте ключевые слова
try и catch там, где вы обладаете достаточной информацией для обработки ошибки, ее преобразования или обеспечения границы, определенной стратегией обработки ошибок (например, catch(...) на границе подсистемы).📍Саттер Г. - Новые сложные задачи на С++
👍1🙏1
#include <iostream>
class Base
{
public:
Base() {}
virtual ~Base(){}
void print()
{
std::cout << "Base" << std::endl;
}
};
class Derived : public Base
{
public:
Derived() {}
virtual ~Derived(){}
void print()
{
std::cout << "Derived" << std::endl;
}
};
int main()
{
Base* b = new Derived;
b->print();
delete b;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
27%
Base
45%
Derived
14%
BaseDerived
14%
Одна строка “Base”, вторая строка “Derived”
😢2
Идиот
Наконец-то познакомился с “Идиотом” Достоевского. И я никак не ожидал, что история действительно будет про идиота 😁. Думал, мол, “идиот” это игра слов и все такое. Но нет, герой натурально себе на уме. Странный малый.
Но вот что зацепило ⬇️
🔜 Обыкновенные люди
Достоевским делается акцент на самого обыкновенного человека. Ну что-то вроде моего так себе программиста, понимаете?
“образование порядочное, но не знаешь, на что его употребить; ум есть, но без своих идей”… Да-да! Вроде бы всё при себе, но ничего выдающегося. Зато обыкновенным людям нашлось место в достоевщине☝️
🔜 “Муравейники”
До ста… Не смешите мои кхм-кхм. 150 лет прошло, а ситуация та же. Но тогда хоть голову не ломали, куда свою самоходную колесницу приткнуть.
🔜 Изобретательство
Точно. Над первыми авиастроителями тоже смеялись: камень кинь, и он полетит. Но отрицание и гнев через торг сменились принятием. Таков уж путь идеи в массы. Не унывайте, гении 😉
P.S. Читать было сложно. Бесконечные монотонные разговоры утомляли. Но финал удивил. Чего-чего, а такого финта я не ожидал.
#КнижнаяПолка
Наконец-то познакомился с “Идиотом” Достоевского. И я никак не ожидал, что история действительно будет про идиота 😁. Думал, мол, “идиот” это игра слов и все такое. Но нет, герой натурально себе на уме. Странный малый.
Но вот что зацепило ⬇️
Есть люди, о которых трудно сказать что-нибудь такое, что представило бы их разом и целиком, в их самом типическом и характерном виде; это те люди, которых обыкновенно называют людьми «обыкновенными», «большинством», и которые действительно составляют огромное большинство всякого общества.
Достоевским делается акцент на самого обыкновенного человека. Ну что-то вроде моего так себе программиста, понимаете?
“образование порядочное, но не знаешь, на что его употребить; ум есть, но без своих идей”… Да-да! Вроде бы всё при себе, но ничего выдающегося. Зато обыкновенным людям нашлось место в достоевщине
Дом был огромной величины, одна из тех громадин, которые строятся аферистами для мелких квартир; в иных из таких домов бывает иногда нумеров до ста.
До ста… Не смешите мои кхм-кхм. 150 лет прошло, а ситуация та же. Но тогда хоть голову не ломали, куда свою самоходную колесницу приткнуть.
Изобретатели и гении почти всегда при начале своего поприща (а очень часто и в конце) считались в обществе не более как дураками, - это уж самое рутинное замечание, слишком всем известное.
Точно. Над первыми авиастроителями тоже смеялись: камень кинь, и он полетит. Но отрицание и гнев через торг сменились принятием. Таков уж путь идеи в массы. Не унывайте, гении 😉
P.S. Читать было сложно. Бесконечные монотонные разговоры утомляли. Но финал удивил. Чего-чего, а такого финта я не ожидал.
#КнижнаяПолка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
git без GitHub
Если мы пишем курсач или дипломный проект. Если изучаем что-то новое или экспериментируем. Если завели пет-проект без каких-либо планов. То ничто нам не мешает сразу сделать “
Даже для локальных проектов, которые никогда не будут публиковаться на условном GitHub, можно использовать git.
Зачем? Объясняю.
Так мы получаем немножко выгод:
✅ Необходимость коммитить провоцирует нас работать структурно и разбивать задачу на мелкие итерации.
✅ Косяки случаются. Имея стройную историю коммитов, нам легче восстановиться.
✅ В учебной работе история коммитов поможет составить отчёт.
И конечно же есть невыгода:
❌ придется работать с git-ом.
Аж с тремя командами:
-
-
-
Не стесняйтесь помогать себе подходящими инструментами. А то можно запутаться в бесконечных kursach_v1.zip … kursach_v42.zip 😉
Если мы пишем курсач или дипломный проект. Если изучаем что-то новое или экспериментируем. Если завели пет-проект без каких-либо планов. То ничто нам не мешает сразу сделать “
git init” и коммитить!Даже для локальных проектов, которые никогда не будут публиковаться на условном GitHub, можно использовать git.
Зачем? Объясняю.
Так мы получаем немножко выгод:
✅ Необходимость коммитить провоцирует нас работать структурно и разбивать задачу на мелкие итерации.
✅ Косяки случаются. Имея стройную историю коммитов, нам легче восстановиться.
✅ В учебной работе история коммитов поможет составить отчёт.
И конечно же есть невыгода:
Аж с тремя командами:
-
git init, чтобы инициализировать репозиторий;-
git add, чтобы подготовить файлы к коммиту;-
git commit, чтобы, собственно, зафиксировать изменения.Не стесняйтесь помогать себе подходящими инструментами. А то можно запутаться в бесконечных kursach_v1.zip … kursach_v42.zip 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Как это развидеть?
Как испортить дизайн интерфейса? Легко! И спец-курс не нужен 😅 Но даже легкая теория и небольшая насмотренность поможет меньше портачить.
Насмотренность не появляется сама по себе, здесь нужна практика. Вдумчивая практика.
Есть забавный игровой тренажёр Can’t Unsee, где можно потренироваться. Принцип простой: из двух предложенных вариантов интерфейса нужно выбрать более корректный.
Попробуйте. Лично мне уже на среднем уровне было сложно что-то разглядеть.
Как испортить дизайн интерфейса? Легко! И спец-курс не нужен 😅 Но даже легкая теория и небольшая насмотренность поможет меньше портачить.
Насмотренность не появляется сама по себе, здесь нужна практика. Вдумчивая практика.
Есть забавный игровой тренажёр Can’t Unsee, где можно потренироваться. Принцип простой: из двух предложенных вариантов интерфейса нужно выбрать более корректный.
Попробуйте. Лично мне уже на среднем уровне было сложно что-то разглядеть.
👍4👌2
#include <iostream>
struct MyStruct
{
int var1{0};
unsigned int var2{-1};
};
int main()
{
MyStruct s;
std::cout << "var1=" << s.var1 << "; "
<< "var2=" << s.var2 << std::endl;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
20%
var1=0; var2=-1
5%
var1=0; var2=0
20%
var1=0; var2=4294967295
55%
Никакой. Ошибка компиляции.
bool как аргумент
Есть мнение, что использование булевых аргументов в функциях - это дурной тон.
Давайте посмотрим на эту функцию:
Аргумент
С технической точки зрения проблемы здесь нет. Трудности могут возникнуть при чтении такого кода. Например, использование функции может выглядеть так:
И думай-гадай, что тут за
А если сделать по-другому:
То становится понятнее, правда? Да, больше слов. Да, ещё одна функция. Но понятнее.
Как бы то ни было, рубить с плеча тоже не стоит. Дурной тон дурным тоном, но булевым аргументам найдется место. Например, при реализации поведения вкл/выкл:
Или ещё где-нибудь. Лишь бы читалось.
Ещё по теме - здесь.
Есть мнение, что использование булевых аргументов в функциях - это дурной тон.
Давайте посмотрим на эту функцию:
void SetData( std::string value, bool isFilePath );
Аргумент
isFilePath призван менять логику функции при обработке строки value. Если isFilePath==true, то строка интерпретируется не как данные, а как путь к файлу данных. Это расхожий шаблон, который можно увидеть у новичков.С технической точки зрения проблемы здесь нет. Трудности могут возникнуть при чтении такого кода. Например, использование функции может выглядеть так:
obj.SetData( value, true );
И думай-гадай, что тут за
true... Придётся смотреть объявление функции.А если сделать по-другому:
void SetDataString( std::string value );
void SetDataFile( std::string filePath );
То становится понятнее, правда? Да, больше слов. Да, ещё одна функция. Но понятнее.
Как бы то ни было, рубить с плеча тоже не стоит. Дурной тон дурным тоном, но булевым аргументам найдется место. Например, при реализации поведения вкл/выкл:
obj.SetEnabled( true );
Или ещё где-нибудь. Лишь бы читалось.
Ещё по теме - здесь.
🔥2👍1