Форум программистов, компьютерный форум CyberForum.ru

Собеседования по С++ для джуна - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
29.07.2015, 13:22     Собеседования по С++ для джуна #1
Добрый день,

если вы бы проводили собеседования по С++ для джуна - какой вопрос по С++ вы бы припасли как самый сложный?

Кликните здесь для просмотра всего текста
Для меня пока, что самый сложный вопрос (который расскрыл бы многие области знания по С++) такой:
- опишите все факторы, которые влияют на размер экземпляра класса. Какой минимальный и максимальный размер пустого класса.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2015, 13:22     Собеседования по С++ для джуна
Посмотрите здесь:

Задача с собеседования (аллокатор памяти) C++
ООП. Тестовое задание собеседования. C++
Задание с собеседования (циклы) C++
C++ Пример из собеседования по C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14200 / 6215 / 986
Регистрация: 02.05.2013
Сообщений: 10,358
Завершенные тесты: 1
29.07.2015, 13:44     Собеседования по С++ для джуна #2
Я бы завернул в трехэтажную лямбду какой-нибудь трюк с expression
sfinae и CRTP и спросил: что это, для чего, где используется ?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2015, 13:46     Собеседования по С++ для джуна #3
на джуна мне кажется хватило бы описать работу вирт.ф-ций, а Ваш вопрос это мегажесть, учитывая современные технологии особо нет смысла следить за размерами классов...да вообще зачем это...

Добавлено через 34 секунды

Не по теме:

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



Добавлено через 16 секунд

Не по теме:

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

rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
29.07.2015, 13:56  [ТС]     Собеседования по С++ для джуна #4
я б расчитывал услышать, что размер экземпляра пустого класса не может быть нулём, так как чтобы иметь адресс объект должен иметь размер минимум байт. Так же хоетл услышать помимо обычного, что размер экземпляра зависит от полей класса:
- про возможное выравнивания полей
- про указатель на __vfptr в экзепляре +4байта, если есть вирт. метод или один с одителей с виртуальной функцией
- про "смещение адрессов" к виртуальному наследнику +4байта

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Убежденный Посмотреть сообщение
Я бы завернул в трехэтажную лямбду какой-нибудь трюк с expression
sfinae и CRTP и спросил: что это, для чего, где используется ?
помню ваши посты, что "трюки это зло, надо сперва знать основы и уметь писать правильно, а потом уже в качестве самообразования учить трюки языка, так как использование разных трюков вредит читабельности кода и зачастую приводит к багам и не понятному поведении при сопровождению кода другим прогарммистом".

Я всё помню! )

Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
29.07.2015, 13:57     Собеседования по С++ для джуна #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
я б расчитывал услышать, что размер экземпляра пустого класса не может быть нулём,
Может.
Добавить можно еще и статические члены класса, наследование простое и виртуальное.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
29.07.2015, 14:01  [ТС]     Собеседования по С++ для джуна #6
Цитата Сообщение от Ilot Посмотреть сообщение
Может.
Можно пример?

Помню с учебника:
"Если бы экземпляр класса не занимал бы память, у него не было бы адресса. А значит при сравнение адрессов экземпляра данного класса - их адресса бы совпадали"
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
29.07.2015, 14:04     Собеседования по С++ для джуна #7
rikimaru2013, а с чем связан интерес? Просто так?

Можно, конечно, придумать какой-нибудь сложный вопрос. Но рассматривать его как верхнюю границу для ориентира на подготовку не стоит. На вопросы повышенной сложности для джуна, в принципе, допустимо не знать ответы.

Живой пример: был кандидат на уровень мидла. Он писал такую дикую шаблонную магию, что другие даже не пытались понять — настолько было сложно. А на практике оказалось, что он не знает таких базовых вещей как алгоритмическая сложность доступа к элементам контейнеров стандартной библиотеки, не различает dynamic и reinterpret касты и не понимает как ведут себя исключения, сгенерированные в деструкторах.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
29.07.2015, 14:13     Собеседования по С++ для джуна #8
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
если вы бы проводили собеседования по С++ для джуна - какой вопрос по С++ вы бы припасли как самый сложный?
По-моему, задавать вопросы от простых к сложным на собеседовании - это фиговый метод. Я бы взял например один из демонов, который сам писал на работе, и предложил бы поговорить на эту тему. Сверху вниз. Требования, архитектура, конкуррентность, алгоритмы, структуры данных, организация классов, уровни безопасности исключений, RAII, реализация отдельных функций, тестирование, сопровождение, документация. Там бы все знания джуна и выяснились.

Цитата Сообщение от Убежденный Посмотреть сообщение
Я бы завернул в трехэтажную лямбду какой-нибудь трюк с expression
sfinae и CRTP и спросил: что это, для чего, где используется ?
Ага, а потом бы разбирался и материл его код в таком же стиле?

Цитата Сообщение от aLarman Посмотреть сообщение
на джуна мне кажется хватило бы описать работу вирт.ф-ций
Попсовый вопрос. Годится только для того, чтобы убедиться, что кандидат не подходит точно.

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
я б расчитывал услышать, что размер экземпляра пустого класса не может быть нулём, так как чтобы иметь адресс объект должен иметь размер минимум байт. Так же хоетл услышать помимо обычного, что размер экземпляра зависит от полей класса:
- про возможное выравнивания полей
- про указатель на __vfptr в экзепляре +4байта, если есть вирт. метод или один с одителей с виртуальной функцией
- про "смещение адрессов" к виртуальному наследнику +4байта
Ну фигня это все. Сколько раз тебе это было реально важно? Да и почему 4 байта? А давай еще поговорим про размеры подобъектов базовых классов (которые вполне могут быть 0), про множественное виртуальное наследование и прочую мутотень. Только нафига? Вот реально, тот факт, ответил правильно джун на этот вопрос, или нет, повлияет на то, возьмешь ты его или нет?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
29.07.2015, 14:14  [ТС]     Собеседования по С++ для джуна #9
0x10, так сам для себя проверю себя ))

Кликните здесь для просмотра всего текста
Цитата Сообщение от 0x10 Посмотреть сообщение
алгоритмическая сложность доступа к элементам контейнеров стандартной библиотеки
Насколько это важно знать? log n или n-1 и т.д ? Оптимизацией проекта можно заняться при наличии проекта. Откуда такой опыт? Или требовалось просто зазубрить значения, чтобы понимать когад надо вектор когда лист?


Цитата Сообщение от 0x10 Посмотреть сообщение
dynamic и reinterpret касты
Динамик - приведение регулируется стандартом и работает если указатель приведение присущий к иерархии к какому типу приводят, если dynamic_type<T>(a) а имеет тип T то вернёт указатель на a, иначе nullptr


Цитата Сообщение от 0x10 Посмотреть сообщение
как ведут себя исключения, сгенерированные в деструкторах.
Если при раскрутки стека встретится еще одна расскрутка стека (расскрутка запускается при throw value пока не стретит свою ловушку или конец main), программа аварийно завершает свою работу.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
29.07.2015, 14:21     Собеседования по С++ для джуна #10
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Можно пример?
Оптимизация пустого базового класса не о чем не говорит?
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
29.07.2015, 14:40     Собеседования по С++ для джуна #11
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Насколько это важно знать? log n или n-1 и т.д ? Оптимизацией проекта можно заняться при наличии проекта. Откуда такой опыт? Или требовалось просто зазубрить значения, чтобы понимать когад надо вектор когда лист?
Алгоритмическую сложность очень важно знать. Откуда опыт? Должны быть домашние проекты. Если человек увлекается программированием, то у него будут домашние проекты. Джун - это не нуль в программировании. Это уже программист. Просто опыта реальных проектов, связанных с бизнесом, у него еще нет.

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Динамик - приведение регулируется стандартом и работает если указатель приведение присущий к иерархии к какому типу приводят, если dynamic_type<T>(a) а имеет тип T то вернёт указатель на a, иначе nullptr
Я думаю, тебе лучше повторить Слишком мало и слишком нечетко.

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Если при раскрутки стека встретится еще одна расскрутка стека (расскрутка запускается при throw value пока не стретит свою ловушку или конец main), программа аварийно завершает свою работу.
А почему так происходит? Почему будет terminate? А если во время работы деструктора массива компилятор проходит по его элементам, вызывая их деструкторы, и один из них рванет, то что будет с остальными элементами? А если мы вызываем delete, и у нас деструктор кидает исключение, то память корректно освободится?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
29.07.2015, 14:47  [ТС]     Собеседования по С++ для джуна #12
Цитата Сообщение от Ilot Посмотреть сообщение
Оптимизация пустого базового класса не о чем не говорит?
Вы не читали мой пост про адресса? Если сравнивать адресса, то у них он есть - и он разных для каждого. 1 байт же ж. Сделано это в качестве оптимизации или еще как. 300 экземпляров = 300 байт.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
29.07.2015, 14:53     Собеседования по С++ для джуна #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
struct A
{
    ~A() { throw 2; }
};
 
struct B: A
{
    int x;
};
struct C
{
    int x;
};
 
int main()
{
    try {
        A a;
    }
    catch (...) {
        std::cout << "OK\n";
        std::cout << (sizeof(B) == sizeof(C));
    }
}
Что будет, если запустить?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
29.07.2015, 14:59  [ТС]     Собеседования по С++ для джуна #14
Цитата Сообщение от ct0r Посмотреть сообщение
А почему так происходит? Почему будет terminate? А если во время работы деструктора массива компилятор проходит по его элементам, вызывая их деструкторы, и один из них рванет, то что будет с остальными элементами? А если мы вызываем delete, и у нас деструктор кидает исключение, то память корректно освободится?
А можете объяснить?



Цитата Сообщение от ct0r Посмотреть сообщение
Что будет, если запустить?
А создатся и удалится. Всё правильно же ж. В чём подвох?)
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
29.07.2015, 15:05     Собеседования по С++ для джуна #15
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А можете объяснить?
Могу. Но лучше ссылку дам https://akrzemi1.wordpress.com/2011/...rs-that-throw/

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А создатся и удалится. Всё правильно же ж. В чём подвох?)
Будет terminate. Почему так - объяснение есть в ссылке выше.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
29.07.2015, 15:40     Собеседования по С++ для джуна #16
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Вы не читали мой пост про адресса? Если сравнивать адресса, то у них он есть - и он разных для каждого. 1 байт же ж. Сделано это в качестве оптимизации или еще как. 300 экземпляров = 300 байт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
struct A {};
struct B : A {
    int x;
};
struct C: B {
    int y;
};
int main(){
    A a;
    B b;
    C c;
    std::cout << "sizeof(a) is " << sizeof(a);
    std::endl(std::cout);
    std::cout << "&B = " << &b;
    std::endl(std::cout);
    std::cout << "&B.x = " << &b.x;
    std::endl(std::cout);
    std::cout << "&C = " << &c;
    std::endl(std::cout);
    std::cout << "&c.x = " << &c.x;
    std::endl(std::cout);
    std::cout << "&c.y = " << &c.y;
    return 0;
}
Если размер структуры А 1 байт то почему адреса &b и &b.x равны?
Новичок
Модератор
 Аватар для Новичок
1141 / 712 / 148
Регистрация: 17.07.2012
Сообщений: 4,043
Записей в блоге: 1
Завершенные тесты: 2
29.07.2015, 15:57     Собеседования по С++ для джуна #17
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Или требовалось просто зазубрить значения, чтобы понимать когда надо вектор когда лист?
Достаточно понимать как работает структура данных и зубрить не придется. Логично что вставка в массив занимает линейное время (т.е за O(n) работает). Не сложно понять что сложность вставки элемента в список константная(O(1)). В общем достаточно знать как примерно реализованы контейнеры и не сложно будет понимать сложность алгоритмов вставки и.т.д.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
29.07.2015, 16:16  [ТС]     Собеседования по С++ для джуна #18
Цитата Сообщение от Ilot Посмотреть сообщение
Если размер структуры А 1 байт то почему адреса &b и &b.x равны?
К сожелению вы не понимаете, что вы отвечаете. Прочитайте пост еще раз и еще раз, и поймите почему пустой класс не может НЕ иметь адресса. А раз ему нужен адресс он займет этот байт или возьмет его за основу у наследника, как вариант. Вы приводите пример, где он имеет адресс и совпадает с адрессом наследника - тоесть его размер 0, но адресс наследника и базового совпадают - через оптимизацию или еще как - не важно. Данный код внизу доказывает, пока не доказано в дискусии противоположное, что создавая новый экземпляр, программе нужно +1 байт памяти.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
class A
{
 
};
int main( )
{
    A a, b, c, d;
 
    cout << &a << endl;
    cout << &b << endl;
    cout << &c << endl;
    cout << &d << endl;
    cout << (&a == &b) << endl;
}
Добавлено через 1 минуту
Цитата Сообщение от Новичок Посмотреть сообщение
Достаточно понимать как работает структура данных и зубрить не придется. Логично что вставка в массив занимает линейное время (т.е за O(n) работает). Не сложно понять что сложность вставки элемента в список константная(O(1)). В общем достаточно знать как примерно реализованы контейнеры и не сложно будет понимать сложность алгоритмов вставки и.т.д.
Ну врядли тот человек на middle это не знал - думаю у него спросили в этом направлении более глубокий вопрос.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
29.07.2015, 16:28     Собеседования по С++ для джуна #19
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
и поймите почему пустой класс не может НЕ иметь адресса.
А кто говорит, что у объекта может не быть адреса? Похоже мы говорим о разных вещах... Я отвечаю на вопрос: Какой минимальный ... размер пустого класса.
Когда вам задают подобный вопрос на собеседовании, то будет неплохо если вы укажите на существание подобной ситуации. Но как говориться решать вам. Если вы сочли мое замечание не информативным я ни на чем настаивать не стану.
smartpointer
 Аватар для smartpointer
64 / 58 / 23
Регистрация: 17.02.2014
Сообщений: 250
29.07.2015, 17:29     Собеседования по С++ для джуна #20
Я бы такой вопрос задал. Может ли существовать класс/структура размером в 1 байт имея на своем борту две переменные (хотя вопрос достаточно легкий)?
Yandex
Объявления
29.07.2015, 17:29     Собеседования по С++ для джуна
Ответ Создать тему
Опции темы

Текущее время: 12:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru