Вопросы с собеседований
От: avovana Россия  
Дата: 15.11.21 05:59
Оценка: 14 (3)
Добрый день, дорогие форумчане!

Предлагаю делиться техническими вопросами с собеседований.
Раньше были примеры и обсуждения.
Сейчас предлагаю немного структурировать иерархически сообщения.
Есть корень — это сообщение. В детях делаем новое сообщение с заданием/решением/обсуждение:

Корень
-Набор 20 задач с финтеха
--Обсуждение
---....
-Задача на наследование с вызовом виртуальных функций из базового класса
--Обсуждение
и т.д.

Стартую своими.
Сохранял как в текстовом, так и в графическом виде. Где-то есть решения.
Отредактировано 15.11.2021 20:09 avovana . Предыдущая версия . Еще …
Отредактировано 15.11.2021 6:01 avovana . Предыдущая версия .
Набор 20 задач с финтеха
От: avovana Россия  
Дата: 15.11.21 06:02
Оценка:
На решение был 1 час в домашней обстановке.


Отредактировано 15.11.2021 6:03 avovana . Предыдущая версия .
Задача на наследование с вызовом виртуальных функций
От: avovana Россия  
Дата: 15.11.21 06:07
Оценка:
На собеседование были:
1) Эти 2 задачи
2) "Какие паттерны проектирования вы знаете?"
3) "Как решаете задачи? Знаете ли UML? Рисуете ли диаграмму?"


Отредактировано 15.11.2021 6:08 avovana . Предыдущая версия . Еще …
Отредактировано 15.11.2021 6:08 avovana . Предыдущая версия .
Re: Набор 20 задач с финтеха
От: Максим Россия  
Дата: 15.11.21 07:02
Оценка: +3
A>На решение был 1 час в домашней обстановке.

По поводу первого задания есть сомнения, что пункты 2 и 3 равнозначны. const указывает на константность того, что стоит слева от него, а тут в одном случае значение, а в другом указатель.

    int* const pi1 = &i;
    int const *pi2 = &i;


https://wandbox.org/permlink/tmjl6UKrDphGww83

Дальше пока не смотрел
Errare humanum est
Отредактировано 15.11.2021 7:05 Максим . Предыдущая версия .
Re[2]: Набор 20 задач с финтеха
От: night beast СССР  
Дата: 15.11.21 07:06
Оценка: +3
Здравствуйте, Максим, Вы писали:

A>>На решение был 1 час в домашней обстановке.


М>По поводу первого задания есть сомнения, что пункты 2 и 3 равнозначны. const указывает на константность того, что стоит слева от него, а тут в одном случае значение, а в другом указатель.


видимо, имелось в виду 3 и 1
или пункты перепутаны, потому как const T * -- указатель на кост.объект
Отредактировано 15.11.2021 7:07 night beast . Предыдущая версия .
Re: Задача на наследование с вызовом виртуальных функций
От: B0FEE664  
Дата: 15.11.21 10:59
Оценка: +1 -1
Здравствуйте, avovana, Вы писали:

Безумный код иногда меня ставит в тупик:
A>Image: fm1.png
Вызов виртуального метода из не виртуального деструктора...
По стандарту (11.10.4/4) должен быть вызван метод A::printFromDestructor(), значит ответ: ~A, а не ~B, как ошибочно указано в комментарии.
И каждый день — без права на ошибку...
Re: Набор 20 задач с финтеха
От: qaz77  
Дата: 15.11.21 13:21
Оценка:
Здравствуйте, avovana, Вы писали:
A>На решение был 1 час в домашней обстановке.

Простенькие такие задачки на отсев тех, кто вообще не в теме.
Я в свое время, когда набирал джуниоров в проект, тоже в таком духе давал.

P.S. От CStatusBar ностальгией по старым временам пахнуло))
Re[2]: Задача на наследование с вызовом виртуальных функций
От: Patalog Россия  
Дата: 15.11.21 13:41
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

хъ

BFE>По стандарту (11.10.4/4) должен быть вызван метод A::printFromDestructor(), значит ответ: ~A, а не ~B, как ошибочно указано в комментарии.


Это ж вроде UB — удаление объекта по указателю на базу, а деструктор не виртуальный?
Почетный кавалер ордена Совка.
Re[2]: Набор 20 задач с финтеха
От: reversecode google
Дата: 15.11.21 13:50
Оценка:
это задачки что бы отобрать исключительно джунов которые только только от учебника С++ оторвались
Re[3]: Задача на наследование с вызовом виртуальных функций
От: reversecode google
Дата: 15.11.21 13:52
Оценка: -1
если бы это было уб, то куча софта бы не работало))
Re[2]: Набор 20 задач с финтеха
От: Максим Россия  
Дата: 15.11.21 15:09
Оценка:
Q>P.S. От CStatusBar ностальгией по старым временам пахнуло))

Смотрите что нашел http://rsdn.org/forum/mfc/1358317.hot
Автор: Ellin
Дата: 01.09.05
Errare humanum est
Re[3]: Набор 20 задач с финтеха
От: watchmaker  
Дата: 15.11.21 15:12
Оценка: +1
Здравствуйте, night beast, Вы писали:

NB>видимо, имелось в виду 3 и 1

NB>или пункты перепутаны

Так ответы бывают
  1. правильные;
  2. те, которые ожидает получить интервьюер;
  3. те, которые даёт кандидат.
В идеале все три должны совпадать. Но так бывает не всегда.
Как я понимаю, на скриншотах avovana приводит ответы из третьей категории
Re[3]: Задача на наследование с вызовом виртуальных функций
От: B0FEE664  
Дата: 15.11.21 15:31
Оценка:
Здравствуйте, Patalog, Вы писали:

BFE>>По стандарту (11.10.4/4) должен быть вызван метод A::printFromDestructor(), значит ответ: ~A, а не ~B, как ошибочно указано в комментарии.

P>Это ж вроде UB — удаление объекта по указателю на базу, а деструктор не виртуальный?

Хмм. Действительно:
С++14
5.3.5/3

In the first alternative (delete object), if the static type of the object to be deleted is different from its dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined. In the second alternative (delete array) if the dynamic type of the object to be deleted differs from its static type, the behavior is undefined.


С++20
7.6.2.8/3

In a single-object delete expression, if the static type of the object to be deleted is different from its dynamic type and the selected deallocation function (see below) is not a destroying operator delete, the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined. In an array delete expression, if the dynamic type of the object to be deleted differs from its static type, the behavior is undefined.

И каждый день — без права на ошибку...
Re: Вопросы с собеседований
От: reversecode google
Дата: 17.11.21 00:16
Оценка: 4 (1)
помню позвал хр прособеседоваться в их hft ко,
делать было нечего, дай попробую

все вопросы были фигня, но на один я задумался и ответил что в голову пришло, только что бы дальше двигаться и услышать другие

вопрос с hft ко,
— есть двух мерная матрица знаковых целых чисел(кажется целых вот точно не помню этот момент)
и у нас есть алгоритм, который суммирует сначала по вертикали а потом по горизонтали складывает вертикальные суммы
и есть алгоритм который суммирует сначала по горизонтали а потом по вертикали складывает горизонтальные суммы

так вот, будет ли всегда одинаковыми эти суммы в двух алго?

я подумал что знак по идеи может прыгать и в переносе он не участвует
значит суммы могут быть разными

наверное в фин области это сакральные знания, жаль мне в моих областях(а их много) за 10+ лет не понадобились

так что увы если ошибся с ответом, но и мне правильного ответа так и не сказали
Re[2]: Вопросы с собеседований
От: SomeOne_TT  
Дата: 17.11.21 02:58
Оценка:
Здравствуйте, reversecode, Вы писали:

R>вопрос с hft ко,

R>- есть двух мерная матрица знаковых целых чисел(кажется целых вот точно не помню этот момент)
R>и у нас есть алгоритм, который суммирует сначала по вертикали а потом по горизонтали складывает вертикальные суммы
R>и есть алгоритм который суммирует сначала по горизонтали а потом по вертикали складывает горизонтальные суммы


R>так что увы если ошибся с ответом, но и мне правильного ответа так и не сказали


Если с плавающей точкой, то может, т.к. точка может необратимо прыгать вперед на разряды и тогда мелкие слагаемые просто будут игнорироваться.
    float __1 = 10000000;
    float __2 = 0.5;
    float sum_float = __2 +__2 + __1;
    float sum_float2 = __1 +__2 + __2;
Re[2]: Вопросы с собеседований
От: LaptevVV Россия  
Дата: 17.11.21 07:15
Оценка:
R>- есть двух мерная матрица знаковых целых чисел(кажется целых вот точно не помню этот момент)
R>и у нас есть алгоритм, который суммирует сначала по вертикали а потом по горизонтали складывает вертикальные суммы
R>и есть алгоритм который суммирует сначала по горизонтали а потом по вертикали складывает горизонтальные суммы
R>так вот, будет ли всегда одинаковыми эти суммы в двух алго?
Для целых — всегда одинаковая, так как равна сумме всех элементов.
Достаточно представить себе двумерный массив как линейный по строкам.
То ли ты складываешь подряд, то ли через n — общая сумма от этого не меняется.
Для дробных, как тут уже сказали, ошибки точности могут быть из-за слишком большой разницы в числах.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Вопросы с собеседований
От: Максим Россия  
Дата: 17.11.21 07:29
Оценка:
Здравствуйте, LaptevVV, Вы писали:

R>>- есть двух мерная матрица знаковых целых чисел(кажется целых вот точно не помню этот момент)

LVV>Для целых — всегда одинаковая, так как равна сумме всех элементов.

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

100000 100000 ... 1000000
-100000 -100000 ... -1000000
100000 100000 ... 1000000
-100000 -100000 ... -1000000
100000 100000 ... 1000000
-100000 -100000 ... -1000000
....

При одном способе обхода будет 0, а при другом все, что угодно.
Errare humanum est
Re[4]: Вопросы с собеседований
От: LaptevVV Россия  
Дата: 17.11.21 09:32
Оценка:
М>При одном способе обхода будет 0, а при другом все, что угодно.
Это понятно.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Вопросы с собеседований
От: Sharov Россия  
Дата: 17.11.21 11:13
Оценка:
Здравствуйте, reversecode, Вы писали:

R>помню позвал хр прособеседоваться в их hft ко,

R>делать было нечего, дай попробую

R>все вопросы были фигня, но на один я задумался и ответил что в голову пришло, только что бы дальше двигаться и услышать другие


R>вопрос с hft ко,

R>- есть двух мерная матрица знаковых целых чисел(кажется целых вот точно не помню этот момент)
R>и у нас есть алгоритм, который суммирует сначала по вертикали а потом по горизонтали складывает вертикальные суммы
R>и есть алгоритм который суммирует сначала по горизонтали а потом по вертикали складывает горизонтальные суммы
R>я подумал что знак по идеи может прыгать и в переносе он не участвует
R>значит суммы могут быть разными
R>наверное в фин области это сакральные знания, жаль мне в моих областях(а их много) за 10+ лет не понадобились
R>так что увы если ошибся с ответом, но и мне правильного ответа так и не сказали

Ну там по горизонтали, например, может быть переполнение, а по вертикали будут соотв. отрицательные
числа. Как вариант.

А я вот задумался -- а double или float могут переполняться, или просто точность потеряют?
Кодом людям нужно помогать!
Реализовать класс индекса
От: avovana Россия  
Дата: 17.11.21 11:15
Оценка:

// Требуется реализовать класс индекса, для хранения данных по 3-м вложенным текстовым ключам
//
//     index["key1"]["key2"]["key3"] = data;
//
// в последнем уровне индекса содержатся данные объект класса Data
//
// Пример заполнение данных по ключам выглядит так:
//
//  Data  data1, data2;
//  Index idx;
//  idx.set("key1").set("key2").set("key3").set(data1);
//  idx.set("key1.1").set("key2.1").set("key3.1").set(data2);
//
// Пример доступа к данным по ключам:
//
//  data1 = idx.get("key1").get("key2").get("key3").get();
//
// в реализации предусмотреть раcширение глубины индексов


class Data {
};

class Index {
};


int main()
{
    Data data1, data2, data3;
    Index idx;
    
    // добавление в индекс
    
    //idx.set("key1").set(data1);
    
    idx.set("key1").set("key2").set("key3").set(data1);
    idx.set("key1.1").set("key2.1").set("key3.1").set(data2);
    idx.set("key1.2").set("key2.2").set("key3.2").set(data3);
    
    // получение данных из индекса
    
    data1 = idx.get("key1").get("key2").get("key3").get();
    data2 = idx.get("key1.1").get("key2.1").get("key3.1").get();
    data3 = idx.get("key1.2").get("key2.2").get("key3.2").get();

    return 0;
}
Отредактировано 17.11.2021 12:30 avovana . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.