Interesting C/C++ interview questions

gene9
Posts: 12
Joined: 29 Jan 2003 18:21

Interesting C/C++ interview questions

Post by gene9 »

Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.
8K
Уже с Приветом
Posts: 5552
Joined: 20 Mar 2001 10:01
Location: SFBA

Post by 8K »

Я уже два раза постил ссылку на сайт с очень хорошей подборкой задач. Больше не буду. Просто так, из гадства (С). К тому же у меня фавориты пропали после очередного катаклизма.
Увидев друга, Портос вскрикнул от радости...
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Самый дубовый вопрос который мне задавали на интервью (его мне задавали на ВСЕХ интервью, на которых я был) - почему дестрактор должен быть виртуальным.
Да, еще - дать определение полиморфизма. Именно правило, не принцип действия.
Чегото про сортировку были вопросы, модификатор конст в раных местах, валюе бай референсе
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

User avatar
roeh
Новичок
Posts: 95
Joined: 09 Jan 2003 01:18
Location: East Bay

Re: Interesting C/C++ interview questions

Post by roeh »

gene9 wrote:Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.

вот мне недавно задали вопрос, что произойдёт при попытке выполнения вот этого кода:

Code: Select all

typedef struct {
    char a;
    char b;
} someStruct;

int
main ( int, char** )
{
    someStruct     ss;
    someStruct* pSS;

     pSS = ( someStruct* ) ss;
     pSS->a = 'a';
     printf ( "%c\n", ss.a );

     return 0;
}


указания на факт, что statement pSS = ( someStruct* ) ss; в принципе -бессмыслица не принимаются. :wink:
Ask me about my vow of silence...
Tores
Ник закрыт.
Posts: 894
Joined: 26 Dec 2001 10:01

Re: Interesting C/C++ interview questions

Post by Tores »

gene9 wrote:Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.

FAQ по Си и Си++ (1/3)
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Interesting C/C++ interview questions

Post by A. Fig Lee »

roeh wrote:
gene9 wrote:Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.

вот мне недавно задали вопрос, что произойдёт при попытке выполнения вот этого кода:

Code: Select all

typedef struct {
    char a;
    char b;
} someStruct;

int
main ( int, char** )
{
    someStruct     ss;
    someStruct* pSS;

     pSS = ( someStruct* ) ss;
     pSS->a = 'a';
     printf ( "%c\n", ss.a );

     return 0;
}


указания на факт, что statement pSS = ( someStruct* ) ss; в принципе -бессмыслица не принимаются. :wink:


And ..? .. :pain1:
Верить нельзя никому - даже себе. Мне - можно!
8K
Уже с Приветом
Posts: 5552
Joined: 20 Mar 2001 10:01
Location: SFBA

Re: Interesting C/C++ interview questions

Post by 8K »

roeh wrote:что произойдёт

AV?
Last edited by 8K on 05 Feb 2003 03:19, edited 1 time in total.
Увидев друга, Портос вскрикнул от радости...
Yuri_p33
Уже с Приветом
Posts: 394
Joined: 12 Feb 2001 10:01
Location: USA

Re: Interesting C/C++ interview questions

Post by Yuri_p33 »

gene9 wrote:Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.

Здесь по C++ тесты - http://v.psiola.ru/cpp/index.htm
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Re: Interesting C/C++ interview questions

Post by vaduz »

roeh wrote:указания на факт, что statement pSS = ( someStruct* ) ss; в принципе -бессмыслица не принимаются.


Я в С не силен, может были такие компиляторы, которые пропускали такое приведение типов, тогда получаем баг и неопределенное поведение. Думаю, что это какой-нибудь умник на интервью пример из своей практики приводил...


--
User avatar
Veselchak U
Уже с Приветом
Posts: 1787
Joined: 27 Nov 2002 05:24
Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Post by Veselchak U »

вот мне недавно задали вопрос, что произойдёт при попытке выполнения вот этого кода:

Код:

typedef struct {
char a;
char b;
} someStruct;

int
main ( int, char** )
{
someStruct ss;
someStruct* pSS;

pSS = ( someStruct* ) ss;
pSS->a = 'a';
printf ( "%c\n", ss.a );

return 0;
}



указания на факт, что statement pSS = ( someStruct* ) ss; в принципе -бессмыслица не принимаются.


Well, assuming that the compiler let it compile :wink:, pSS will point who knows where. If we are lucky, that pointer dereferencing will crash us. Also, depending on a machine architecture, if we have tight packing and someStruct does take only 2 bytes in memory, we may have another CPU exception -- this time missalignment.

In the worse case, we'll overwrite some random piece of memory, and this is one of the worst kinds of bugs to track... :(

Sorry for English 8)
Dima
Уже с Приветом
Posts: 125
Joined: 28 Jan 1999 10:01

Re: Interesting C/C++ interview questions

Post by Dima »

roeh wrote:вот мне недавно задали вопрос, что произойдёт при попытке выполнения вот этого кода:

Code: Select all

typedef struct {
    char a;
    char b;
} someStruct;

int
main ( int, char** )
{
    someStruct     ss;
    someStruct* pSS;

     pSS = ( someStruct* ) ss;
     pSS->a = 'a';
     printf ( "%c\n", ss.a );

     return 0;
}




А вы им в ответ, а что произойдет при выполнении вот такого когда откомпилированного в VS 6 (кто только писал, блин, STL для шестой студии)

Code: Select all

OutBufferIter from = m_outBuffer.end(), to;
from -= dist;
to = from + len;
std::copy (from, to, std::back_inserter(m_outBuffer));
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Post by Vovka »

A. Fig Lee wrote:... почему дестрактор должен быть виртуальным.


Только не "почему", а "когда", наверное?
Тех, кто дестракторы делает виртуальными _всегда_, я бы сам никогда до программирования не допустил бы. :)
User avatar
awaken
Уже с Приветом
Posts: 3211
Joined: 20 Mar 2002 10:01
Location: Chelyabinsk->Rain City,WA->Moscow

Post by awaken »

Почему конструктор может быть виртуальным? :-)

тут архив моих любимых вопросов:
http://www.rsdn.ru/Forum/Message.aspx?mid=139904&only=1
vitass
Новичок
Posts: 36
Joined: 05 Jan 2003 12:14
Location: Ukraine->Germany->?

Post by vitass »

Вот прикол, тут в Германии, был на десятках интервью и ни разу подобного не спрашивали, более того, тут и технического интервью практически не бывает - главное чтобы человек был хороший :gen1:
Krokodil
Уже с Приветом
Posts: 139
Joined: 22 Apr 2002 12:41

Post by Krokodil »

Vovka wrote:
A. Fig Lee wrote:... почему дестрактор должен быть виртуальным.


Только не "почему", а "когда", наверное?
Тех, кто дестракторы делает виртуальными _всегда_, я бы сам никогда до программирования не допустил бы. :)

Никакого вреда в объявлении деструктора виртуальным на мой взгляд нет. Объясните, почему таких людей нельзя допускать до программирования? Какие ужасные последствия могут быть вследствии этого?
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Post by Hamster »

У объявления деструктора виртуальным такие последствия:
будет создаваться vtable, даже когда он не нужен;
объект будет из-за этого занимать больше места;
деструктор будет всегда вызываться через vtable и его вызов не может быть inlined. Даже если тело деструктора пустое.
Протоукр
Krokodil
Уже с Приветом
Posts: 139
Joined: 22 Apr 2002 12:41

Post by Krokodil »

Hamster wrote:У объявления деструктора виртуальным такие последствия:
будет создаваться vtable, даже когда он не нужен;
объект будет из-за этого занимать больше места;
деструктор будет всегда вызываться через vtable и его вызов не может быть inlined. Даже если тело деструктора пустое.

Согласен со всем, но не могу понять почему последствия столь фатальны что людей нельзя допускать до программирования :D Несколько байт потерянной памяти и накладные на вызов функции вместо инлайна? У нас в конторе у многих выработался рефлекс описывать деструкторы virtual. Когда их спрашиваешь почему, то они говорят, что ТАК НАДО. Это сущие мелочи, по сравнению с другими вещами которые призодилось видеть...
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Post by Vovka »

Krokodil wrote: Согласен со всем, но не могу понять почему последствия столь фатальны что людей нельзя допускать до программирования :D


Ну, "недопуска до программирования" я там смайлик поставил, и не такое бывает. :mrgreen:

А по сути - вам Hamster уже ответил. Если объекты маленькие и их много, то это может иметь значение.

Ещё есть причины:
1. (идеологическая) если что-то не необходимо, то это не нужно.
2. (педагогическая) если человек пишет вирт. дест. всегда, то он, быть может, не знает, когда и почему они нужны.
3. (технологическая) виртуальность деструктора ещё является чем-то вроде документации о назначении и использовании данного класса. Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой, и соответственно наоборот.
uncle_Pasha
Уже с Приветом
Posts: 19935
Joined: 30 Aug 2000 09:01
Location: WA

Post by uncle_Pasha »

Vovka wrote:Ну, "недопуска до программирования" я там смайлик поставил, и не такое бывает. :mrgreen:
Ещё есть причины:
1. (идеологическая) если что-то не необходимо, то это не нужно.
2. (педагогическая) если человек пишет вирт. дест. всегда, то он, быть может, не знает, когда и почему они нужны.
3. (технологическая) виртуальность деструктора ещё является чем-то вроде документации о назначении и использовании данного класса. Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой, и соответственно наоборот.


Я бы наоборот - не допускал к программированию тех, кто не объявляет деструктор виртуальным, без четкого понимания зачем это надо. :)

Лишние байты - это ерунда. "Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой" - это Вы так решили для этого класса. А когда-нибудь, на n-ном году жизни проекта, кто-то иной решит иначе. И не проверит. А на n+1-ом году жизни еще кто-то сделает указатель на базовый класс....

Нет уж. Лучше пусть пишут виртуальный, даже если не понимают, зачем это надо.

Удачи!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Vovka wrote:
Krokodil wrote: Согласен со всем, но не могу понять почему последствия столь фатальны что людей нельзя допускать до программирования :Д


Ну, "недопуска до программирования" я там смайлик поставил, и не такое бывает. :мргреен:

А по сути - вам Хамстер уже ответил. Если объекты маленькие и их много, то это может иметь значение.

Ещё есть причины:
1. (идеологическая) если что-то не необходимо, то это не нужно.
2. (педагогическая) если человек пишет вирт. дест. всегда, то он, быть может, не знает, когда и почему они нужны.
3. (технологическая) виртуальность деструктора ещё является чем-то вроде документации о назначении и использовании данного класса. Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой, и соответственно наоборот.

Наоборот. Я бы Вас не допуска. :mrgreen: Виртуальный дестрактор - ето сейф. Сделал и забыл. Годится практически везде. Невиртуальный - вещь очень скользкая надо об етом всегда помнить и быть начеку. Нет, такой хокей нам не нужен! :mrgreen:
Верить нельзя никому - даже себе. Мне - можно!
Krokodil
Уже с Приветом
Posts: 139
Joined: 22 Apr 2002 12:41

Post by Krokodil »

A. Fig Lee wrote:Наоборот. Я бы Вас не допуска. :mrgreen: Виртуальный дестрактор - ето сейф. Сделал и забыл. Годится практически везде. Невиртуальный - вещь очень скользкая надо об етом всегда помнить и быть начеку. Нет, такой хокей нам не нужен! :mrgreen:

Кто здесь допуски выдает? Выдайте мне пожалуйста!
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Post by Vovka »

uncle_Pasha wrote: это Вы так решили для этого класса. А когда-нибудь, на n-ном году жизни проекта, кто-то иной решит иначе.


Иначе решить нельзя.
Если класс в самом начале не задумывался как базовый, то он таким быть не должен. Если хотите реюзить - включите это класс как данные. Если у класса нет виртуальных методов и protected членов (а у класса без вирт. дуструктора таких быть просто не может), то не может быть ни одной причины предпочесть наследование включению.

При этом я совершенно с вами согласен, что если есть сомнение - то надо делать деструктор виртуальным.
TLK
Уже с Приветом
Posts: 305
Joined: 09 Feb 2001 10:01
Location: Nizhniy Novgorod -> MD

Re: Interesting C/C++ interview questions

Post by TLK »

Dima wrote:кто только писал, блин, STL для шестой студии?


DinkumWare.
Take a look at some patches for MSVC STL:

http://www.dinkumware.com/vc_fixes.html
Bst.Rgds.TLK.
jawabean
Уже с Приветом
Posts: 945
Joined: 08 Sep 1999 09:01

Post by jawabean »

почитал вашу дискуссию про вирутальные деструкторы и понял, что я был всегда прав когда считал что на интервью неважно что говорить. важно как говорить и как себя вести.

Return to “Работа и Карьера в IT”