Interesting C/C++ interview questions
-
- Posts: 12
- Joined: 29 Jan 2003 18:21
Interesting C/C++ interview questions
Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
Самый дубовый вопрос который мне задавали на интервью (его мне задавали на ВСЕХ интервью, на которых я был) - почему дестрактор должен быть виртуальным.
Да, еще - дать определение полиморфизма. Именно правило, не принцип действия.
Чегото про сортировку были вопросы, модификатор конст в раных местах, валюе бай референсе
Да, еще - дать определение полиморфизма. Именно правило, не принцип действия.
Чегото про сортировку были вопросы, модификатор конст в раных местах, валюе бай референсе
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 1787
- Joined: 27 Nov 2002 05:24
- Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago
http://www.techinterview.org/ --mostly puzzles
Interesting book:
http://www.amazon.com/exec/obidos/tg/de ... s&n=507846
Interesting book:
http://www.amazon.com/exec/obidos/tg/de ... s&n=507846
-
- Новичок
- Posts: 95
- Joined: 09 Jan 2003 01:18
- Location: East Bay
Re: Interesting C/C++ interview questions
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; в принципе -бессмыслица не принимаются.
Ask me about my vow of silence...
-
- Ник закрыт.
- Posts: 894
- Joined: 26 Dec 2001 10:01
Re: Interesting C/C++ interview questions
gene9 wrote:Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.
FAQ по Си и Си++ (1/3)
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
Re: Interesting C/C++ interview questions
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; в принципе -бессмыслица не принимаются.
And ..? ..
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 5552
- Joined: 20 Mar 2001 10:01
- Location: SFBA
Re: Interesting C/C++ interview questions
roeh wrote:что произойдёт
AV?
Last edited by 8K on 05 Feb 2003 03:19, edited 1 time in total.
Увидев друга, Портос вскрикнул от радости...
-
- Уже с Приветом
- Posts: 394
- Joined: 12 Feb 2001 10:01
- Location: USA
Re: Interesting C/C++ interview questions
gene9 wrote:Подскажите, кто знает, где бы посмотреть на интересные и сложные
вопросы, по C, C++ и просто по алгоритмике-логике, которые встречаются на интервью.
Здесь по C++ тесты - http://v.psiola.ru/cpp/index.htm
-
- Уже с Приветом
- Posts: 27652
- Joined: 15 Jul 2002 17:05
- Location: MD
Re: Interesting C/C++ interview questions
roeh wrote:указания на факт, что statement pSS = ( someStruct* ) ss; в принципе -бессмыслица не принимаются.
Я в С не силен, может были такие компиляторы, которые пропускали такое приведение типов, тогда получаем баг и неопределенное поведение. Думаю, что это какой-нибудь умник на интервью пример из своей практики приводил...
--
-
- Уже с Приветом
- Posts: 1787
- Joined: 27 Nov 2002 05:24
- Location: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago
вот мне недавно задали вопрос, что произойдёт при попытке выполнения вот этого кода:
Код:
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 , 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
-
- Уже с Приветом
- Posts: 125
- Joined: 28 Jan 1999 10:01
Re: Interesting C/C++ interview questions
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));
-
- Уже с Приветом
- Posts: 1906
- Joined: 14 Mar 2001 10:01
-
- Уже с Приветом
- Posts: 3211
- Joined: 20 Mar 2002 10:01
- Location: Chelyabinsk->Rain City,WA->Moscow
Почему конструктор может быть виртуальным?
тут архив моих любимых вопросов:
http://www.rsdn.ru/Forum/Message.aspx?mid=139904&only=1
тут архив моих любимых вопросов:
http://www.rsdn.ru/Forum/Message.aspx?mid=139904&only=1
-
- Новичок
- Posts: 36
- Joined: 05 Jan 2003 12:14
- Location: Ukraine->Germany->?
-
- Уже с Приветом
- Posts: 139
- Joined: 22 Apr 2002 12:41
Vovka wrote:A. Fig Lee wrote:... почему дестрактор должен быть виртуальным.
Только не "почему", а "когда", наверное?
Тех, кто дестракторы делает виртуальными _всегда_, я бы сам никогда до программирования не допустил бы.
Никакого вреда в объявлении деструктора виртуальным на мой взгляд нет. Объясните, почему таких людей нельзя допускать до программирования? Какие ужасные последствия могут быть вследствии этого?
-
- Уже с Приветом
- Posts: 11475
- Joined: 20 Nov 2000 10:01
- Location: Escondido, CA
-
- Уже с Приветом
- Posts: 139
- Joined: 22 Apr 2002 12:41
Hamster wrote:У объявления деструктора виртуальным такие последствия:
будет создаваться vtable, даже когда он не нужен;
объект будет из-за этого занимать больше места;
деструктор будет всегда вызываться через vtable и его вызов не может быть inlined. Даже если тело деструктора пустое.
Согласен со всем, но не могу понять почему последствия столь фатальны что людей нельзя допускать до программирования Несколько байт потерянной памяти и накладные на вызов функции вместо инлайна? У нас в конторе у многих выработался рефлекс описывать деструкторы virtual. Когда их спрашиваешь почему, то они говорят, что ТАК НАДО. Это сущие мелочи, по сравнению с другими вещами которые призодилось видеть...
-
- Уже с Приветом
- Posts: 1906
- Joined: 14 Mar 2001 10:01
Krokodil wrote: Согласен со всем, но не могу понять почему последствия столь фатальны что людей нельзя допускать до программирования
Ну, "недопуска до программирования" я там смайлик поставил, и не такое бывает.
А по сути - вам Hamster уже ответил. Если объекты маленькие и их много, то это может иметь значение.
Ещё есть причины:
1. (идеологическая) если что-то не необходимо, то это не нужно.
2. (педагогическая) если человек пишет вирт. дест. всегда, то он, быть может, не знает, когда и почему они нужны.
3. (технологическая) виртуальность деструктора ещё является чем-то вроде документации о назначении и использовании данного класса. Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой, и соответственно наоборот.
-
- Уже с Приветом
- Posts: 19935
- Joined: 30 Aug 2000 09:01
- Location: WA
Vovka wrote:Ну, "недопуска до программирования" я там смайлик поставил, и не такое бывает.
Ещё есть причины:
1. (идеологическая) если что-то не необходимо, то это не нужно.
2. (педагогическая) если человек пишет вирт. дест. всегда, то он, быть может, не знает, когда и почему они нужны.
3. (технологическая) виртуальность деструктора ещё является чем-то вроде документации о назначении и использовании данного класса. Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой, и соответственно наоборот.
Я бы наоборот - не допускал к программированию тех, кто не объявляет деструктор виртуальным, без четкого понимания зачем это надо.
Лишние байты - это ерунда. "Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой" - это Вы так решили для этого класса. А когда-нибудь, на n-ном году жизни проекта, кто-то иной решит иначе. И не проверит. А на n+1-ом году жизни еще кто-то сделает указатель на базовый класс....
Нет уж. Лучше пусть пишут виртуальный, даже если не понимают, зачем это надо.
Удачи!
-
- Уже с Приветом
- Posts: 12072
- Joined: 17 Nov 2002 03:41
- Location: английская колония
Vovka wrote:Krokodil wrote: Согласен со всем, но не могу понять почему последствия столь фатальны что людей нельзя допускать до программирования :Д
Ну, "недопуска до программирования" я там смайлик поставил, и не такое бывает. :мргреен:
А по сути - вам Хамстер уже ответил. Если объекты маленькие и их много, то это может иметь значение.
Ещё есть причины:
1. (идеологическая) если что-то не необходимо, то это не нужно.
2. (педагогическая) если человек пишет вирт. дест. всегда, то он, быть может, не знает, когда и почему они нужны.
3. (технологическая) виртуальность деструктора ещё является чем-то вроде документации о назначении и использовании данного класса. Если деструктор не виртуальный - значит класс не может (и не предназначен) быть базой, и соответственно наоборот.
Наоборот. Я бы Вас не допуска. Виртуальный дестрактор - ето сейф. Сделал и забыл. Годится практически везде. Невиртуальный - вещь очень скользкая надо об етом всегда помнить и быть начеку. Нет, такой хокей нам не нужен!
Верить нельзя никому - даже себе. Мне - можно!
-
- Уже с Приветом
- Posts: 139
- Joined: 22 Apr 2002 12:41
-
- Уже с Приветом
- Posts: 1906
- Joined: 14 Mar 2001 10:01
uncle_Pasha wrote: это Вы так решили для этого класса. А когда-нибудь, на n-ном году жизни проекта, кто-то иной решит иначе.
Иначе решить нельзя.
Если класс в самом начале не задумывался как базовый, то он таким быть не должен. Если хотите реюзить - включите это класс как данные. Если у класса нет виртуальных методов и protected членов (а у класса без вирт. дуструктора таких быть просто не может), то не может быть ни одной причины предпочесть наследование включению.
При этом я совершенно с вами согласен, что если есть сомнение - то надо делать деструктор виртуальным.
-
- Уже с Приветом
- Posts: 305
- Joined: 09 Feb 2001 10:01
- Location: Nizhniy Novgorod -> MD
Re: Interesting C/C++ interview questions
Dima wrote:кто только писал, блин, STL для шестой студии?
DinkumWare.
Take a look at some patches for MSVC STL:
http://www.dinkumware.com/vc_fixes.html
Bst.Rgds.TLK.
-
- Уже с Приветом
- Posts: 945
- Joined: 08 Sep 1999 09:01