Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы для интервью 
:(
    Опции темы
azesmcar
Дата 11.11.2008, 06:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Довольно часто сталкиваешся на форумах с вопросами типа "какие вопросы задают при приеме на работу?"
Я предлагаю создать раздел где мы совместными усилиями будем выкладывать вопросы которые задаем или задавали нам во время интервью. Многим хочеться проверить свои знания в области C++ и для них данный раздел будем весьма полезен. Если администрация поддержит идею можно закрепить ее и даже открыть подобные темы во всех разделах посвященных языкам программирования.

Спасибо за внимание
PM   Вверх
azesmcar
Дата 11.11.2008, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



С моей стороны пока пара вопросов которые люблю задавать во время интервью

1. Написать код на С++, который выяснит и выведет в консоль "Да" если в некоем А классе есть виртуальные функции и соответственно "Нет" - если их там нет
2. Написать код на С++, который выяснит и выведет в консоль "Да" если некая переменная определенного типа константна и "Не"т соответственно если не константна.

теперь немного code review

Код

void f(int* p)
{
   p = new int[2];
   p[0] = 1;
   p[1] = 0;
}

int main()
{
   int* p = 0;
   f( p );
   std::cout << p[0] << std::endl;
   delete p;
}

Какие проблемы есть в данном коде?

Вопрос из Саттера
Код

some_function( std::auto_ptr<A>( new A), std::auto_ptr<A>( new A ) );

Какие потенцианьные проблемы есть в данном коде?

можно заменить на
Код

int i = 0;
some_function( i++, i++ );

Какие потенцианьные проблемы есть в данном коде?

для особо наглых (добавлю - кого хочеться завалить) ;)
Вопрос из Саттера
Код

for (int i = 0; i < 10; ++i)
{
   //ТОДО????/
   total += i;
}

Какие проблемы есть в данном коде?

далее вопросы
1. dynamic_cast, static_cast, reinterpret_cast, const_cast
2. Исключения из конструкторов и деструкторов
3. Разница между тернарным оператором и if - else
4. Перегрузка и значения по умолчанию в виртуальных функциях
5. Оператор new, перегрузка, placement new и явный вызов деструктора
6. Немного о шаблонах, typename и.т.д..
7. Очередность обработки catch блоков по очереди или по подходящему типу (если сперва поймать базовый тип, дойдет ли дело до остальных)
8. Design patterns

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

Это сообщение отредактировал(а) azesmcar - 11.11.2008, 11:35
PM   Вверх
Rickert
Дата 11.11.2008, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



azesmcar, а ответы? smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
azesmcar
Дата 11.11.2008, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



А я думал людям интересно будет самим попробовать smile
Ладно..ответы

---------------------------------------------------------------------------------------------------------------
Цитата

1. Написать код на С++, который выяснит и выведет в консоль "Да" если в некоем А классе есть виртуальные функции и соответственно "Нет" - если их там нет

Код

class B : public A
{
public:
   virtual ~A() {};
};

int main()
{
       std::cout << ( sizeof(A) == sizeof(B) ) ? "Yes!" : "No :(" << std::endl;
}

---------------------------------------------------------------------------------------------------------------
Цитата

2. Написать код на С++, который выяснит и выведет в консоль "Да" если некая переменная определенного типа константна и "Не"т соответственно если не константна.


Код

template <class T>
bool is_const(const T& v)
{
   return true;
}

template <class T>
bool is_const( T& v)
{
   return false;
}

int main()
{
    const int a = 3;
    std::cout << is_const( a ) ? "const" : "non const" << std::endl;
}

---------------------------------------------------------------------------------------------------------------
Код

void f(int* p)
{
   p = new int[2];
   p[0] = 1;
   p[1] = 0;
}
int main()
{
   int* p = 0;
   f( p );
   std::cout << p[0] << std::endl;
   delete p;
}


ответ
при вызове функции указатель не передаеться по ссылке а копируется, в следствии в функции main указатель не будет инициализирован. Ну и удалять массивы нужно так delete [] p. И вообще рекомендуется проводить очистку памяти в том же модуле где и выделение.
---------------------------------------------------------------------------------------------------------------
Код

some_function( std::auto_ptr<A>( new A), std::auto_ptr<A>( new A ) );


ответ
постановка аргументов функции по стандарту не определено, т.е. по стандарту вполне приемлемо выполнение вызова функции в следующей поочередности
1. new A
2. new A
3. Вызов конструктора для std::auto_ptr
4. Вызов второго конструктора для std::auto_ptr

в результате если конструктор А сгенерирует исключение при втором вызове - получиться утечка памяти smile извращение не правда ли?
---------------------------------------------------------------------------------------------------------------
Код

for (int i = 0; i < 10; ++i)
{
   //????/ТОДО
   total += i;
}

ответ
Ну а тут вообще извращение smile все писать не буду, напишу только что "??/" заменяется на "\" что означает пропустить следующий <enter>, а в данном контексте просто следующая строка будет закоментарена. Кому интересно подробнее
http://en.wikipedia.org/wiki/C_trigraph

PM   Вверх
Alek86
Дата 11.11.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



azesmcar, первый ответ не стандартен. Класс, содержащий вирт функции не обязан иметь указатель на таблицу. И класс, не содержащий вирт функции, не обязан НЕ иметь этот указатель.

помойму, это реализовнао в бусте, причем ОЧЕНЬ сложно

а вопрос о триграфах в интервью - это еще большее извращение
их никто не знает и знать не хочет
и спрашивать о них поступающих на работу - только если хош завалить

тогда уж лучше спрашивай, существуют ли ссылки на функции, ссылки на функции члены и т.п.

Это сообщение отредактировал(а) Alek86 - 11.11.2008, 10:59


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ln78
Дата 11.11.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(Alek86 @  11.11.2008,  10:56 Найти цитируемый пост)
azesmcar, первый ответ не стандартен.


Alek86, ИМХО, этот вопрос и бессмысленен, разве что для того, чтобы найти причину не взять сотрудника. Трудно представить себе реальную ситуацию, когда такой способ может использоваться. Индусский код по определению истинности переменной и то изящнее. 
К тому же в ответе почему-то virtual ~A(), в классе B smile 
PM MAIL   Вверх
azesmcar
Дата 11.11.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

а вопрос о триграфах в интервью - это еще большее извращение


а я что сказал? для особо наглых которых хочешь завалить, кстати не соглашусь, я знаю, и хочу знать еще больше. Если есть какие-то узкие аспекты, я непременно хочу о них знать, несмотря на то буду использовать или нет, знания не повредят.

а насчет первого - знаю что не стандартен, тут не вопрос стандарта, я сообщаю человеку что решение не должно быть обьязательно стандартным, тут вопрос как человек думает..просто на размышление. Виртуальная таблица тоже не входит в стандарт, но ее почти всегда спрашивает в виде формулировки "как реализован полиморфизм во многих компиляторах". Можно навести человека на ответ и тем самым понять насколько он глубоко представляет себе язык и вообще програмирование, и как он думает.
PM   Вверх
Alek86
Дата 11.11.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



и насчет второго
Код

int main()
{
    enum {E1};
    is_const( E1 ) ? "const" : "non const";
}

 smile

Добавлено через 56 секунд
аа, хорошо
я просто сказал - вдруг ты не знал smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
azesmcar
Дата 11.11.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

Alek86, ИМХО, этот вопрос и бессмысленен, разве что для того, чтобы найти причину не взять сотрудника. Трудно представить себе реальную ситуацию, когда такой способ может использоваться. Индусский код по определению истинности переменной и то изящнее. 
К тому же в ответе почему-то virtual ~A(), в классе B smile  


Спорный вопрос мне кажеться. если задается вопрос - не значит что при неправильном ответе или отсутствии такового сотрудник на работу принят не будет.
Чем больше он знает - тем лучше. Если он подумает и ответит - несмотря на то что ответ не стандартен разве вы не повысите о нем свое мнение? А если не ответит не факт что снизите. Насчет деструктора - не компилировал, писал прямо здесь..щас исправлю

Добавлено через 2 минуты и 55 секунд
Цитата

и насчет второго

int main()
{
    enum {E1};
    is_const( E1 ) ? "const" : "non const";
}



и что? ошибка компиляции и ничего страшного, вообще то речь шла только о переменных smile Я многим второй вопрос вообще только для интегера задавал, мало кто решал. smile)
PM   Вверх
Alek86
Дата 11.11.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Ln78, не знаю, как насчет "есть ли вирт функции", но насчет "есть ли вирт конструктор" - это даже в бусте есть

http://www.boost.org/doc/libs/1_37_0/libs/...destructor.html


к примеру, dynamic_cast для неполиморфных типов не работает


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ln78
Дата 11.11.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



azesmcar, если бы вопрос был задан примерно так: а каким образом обычно реализуется полиморфизм, то это было бы ясно и без затей. А так: приведи ситуацию, когда я вывожу потомка класса, наверное, знаю определение его и всех базовых классов для него, но вот таким образом буду проверять нахождение виртуальных функций. Разве что у этого класса 777 предков, но в реальной жизни как-то я бы поостерёгся использовать такой метод.
PM MAIL   Вверх
Alek86
Дата 11.11.2008, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



azesmcar, сори
хреново я прочел твой топик, видимо smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
Mayk
Дата 11.11.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(azesmcar @  11.11.2008,  12:41 Найти цитируемый пост)
{
   //????/ТОДО
   total += i;
}





ответ
Ну а тут вообще извращение  все писать не буду, напишу только что "??/" заменяется на "\" что означает пропустить следующий <enter>, а в данном контексте просто следующая строка будет закоментарена. Кому интересно подробнее
http://en.wikipedia.org/wiki/C_trigraph

Нет. \ означает пропустить следующий ентер тогда и только тогда когда он стоит в конце строки.
в данном случае это не так.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
azesmcar
Дата 11.11.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

azesmcar, если бы вопрос был задан примерно так: а каким образом обычно реализуется полиморфизм, то это было бы ясно и без затей. А так: приведи ситуацию, когда я вывожу потомка класса, наверное, знаю определение его и всех базовых классов для него, но вот таким образом буду проверять нахождение виртуальных функций. Разве что у этого класса 777 предков, но в реальной жизни как-то я бы поостерёгся использовать такой метод.


разумеется! smile никто и не говорит о реальной жизни, вопрос только на обдумывание и никто не говорит что надо использовать метод. Если надо узнать полиморфен класс или нет то лучший способ конечно как сказал Alek86 - dynamic_cast потому что [Саттер] (предпочитайте ошибки времени компиляции - ошибкам времени выполнения) smile

Mayk, сорри smile верное замечание
исправляюсь
Код

{
   //ТОДО????/
   total += i;
}


С кем не бывает ? smile

Это сообщение отредактировал(а) azesmcar - 11.11.2008, 11:28
PM   Вверх
Alek86
Дата 11.11.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



немного подправлю - я привел далеко не способ определения, а вариант, где может понадобиться знание полиморфности
способ определения тут
http://www.boost.org/doc/libs/1_37_0/libs/...olymorphic.html
в код лучше не заглядывать без хорошей подготовки и крепких нервов smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.