Interesting C/C++ interview questions

interrupt
Уже с Приветом
Posts: 4022
Joined: 08 Dec 1999 10:01
Location: USA <-> Moscow

Post by interrupt »

алёша wrote:да-а???
а про COM никогда не слыхали?

uncle_Pasha wrote:
yocto wrote:
uncle_Pasha wrote:Если класс не задумывался как базовый, почему бы не использовать struct?
Может это кого-то и остановит в будущем?


Так ведь объявление типа через struct не запрещает наследование.


Оно объясняет смысл данного элемента данных.
99% что никому не прийдет в голову наследоваться от struct в дальнейшем

Удачи!


Ничего оно не обьясняет смысл - правила то нет такого. Для того, чтобы обьяснить смысл, достаточно задокументировать эту структуру или класс, чтобы люди не начинали догадываться, можно ли наследовать...
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

Post by Vovka »

Ух ты, какой чудный флейм получается! :mrgreen:

uncle_Pasha wrote:
Vovka wrote:Если класс в самом начале не задумывался как базовый, то он таким быть не должен. Если хотите реюзить - включите это класс как данные.

Если класс не задумывался как базовый, почему бы не использовать struct?


А тут я ничего не понял. Какая вообще разница, class или struct?

uncle_Pasha wrote:
Vovka wrote:Если у класса нет виртуальных методов и protected членов (а у класса без вирт. дуструктора таких быть просто не может), .

это я совсем не понял...


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

uncle_Pasha wrote:Пишите на С, если память и производительность так критична


А почему я на C++ не могу писать с тем же результатом?
awq900
Уже с Приветом
Posts: 571
Joined: 19 Dec 2002 08:22
Location: Helsinki

Re: Interesting C/C++ interview questions

Post by awq900 »

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

Здесь по C++ тесты - http://v.psiola.ru/cpp/index.htm


Посмотрел вопросы для чайников и понял, что я даже в чайники не гожусь. Хотя я пограмаю на C ++ более 5 лет и, главное, это меня кормит, приносит "башки" моей компании и удовлетворение клиентам.

Вот например, первый вопрос из http://v.psiola.ru/cpp/index.htm для чайников.


Cколько символов "A" выведет на экран следующая программа:

#include <iostream>
using namespace std;
struct A
{A(){cout << "A";}; ~A(){cout << "A";};};
struct B : public A
{B(){cout << "B";}; ~B(){cout << "B";};};
struct C : public B
{C(){cout << "C";}; ~C(){cout << "C";};};
int main() {C c;return 0;}

Варианты ответа:
Программа не откомпилируется
0
1
2
3
4
Результат работы программы не предсказуем (недопустимая работа с памятью)


Я не знаю ответ, а главное и знать не хочу :mrgreen: Мне кажется, что писать надо как можно проще: использовать конструкторы только для инициализации переменных, т.к. трудно возврашать код ошибок; мимизировать количество наследований, etc.

На brainbench подобные вопросы доминируют.

Я не доумеваю, для чего нужны такие тесты?! Зачем их используют при приеме на работу?

Может кто-нибудь занает ответы ...

Паша




[/i]
interrupt
Уже с Приветом
Posts: 4022
Joined: 08 Dec 1999 10:01
Location: USA <-> Moscow

Re: Interesting C/C++ interview questions

Post by interrupt »

awq900 wrote:Я не знаю ответ, а главное и знать не хочу :mrgreen: Мне кажется, что писать надо как можно проще: использовать конструкторы только для инициализации переменных, т.к. трудно возврашать код ошибок; мимизировать количество наследований, etc.

На brainbench подобные вопросы доминируют.

Я не доумеваю, для чего нужны такие тесты?! Зачем их используют при приеме на работу?

Может кто-нибудь занает ответы ...

Паша



О нет... На этот вопрос точно нужно знать ответ. Иначе, вы не знаете C++, хотя возможно, что это не мешает вам на нем программировать и зарабатывать :). Тут проверяются самые базовые знания механизма вызова деструкторов в C++. "Базовей" не придумаешь...
jawabean
Уже с Приветом
Posts: 945
Joined: 08 Sep 1999 09:01

Post by jawabean »

Vovka wrote:А тут я ничего не понял. Какая вообще разница, цласс или струцт?


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

Post by A. Fig Lee »

interrupt wrote:У меня есть подозрения, что я С++ по крайней мере не хуже вас знаю, так что не будем меряться сами знаете чем :ноно#:

Нет, таки похоже Вы не очень хорошо теорию знаете, иначе бы деструкторы и функции в одну кучу не валили.
Но не важно, можете щитать, что Вы теорию знаете лучше всех. Мне, собственно от етого ни холодно ни жарко.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

interrupt wrote:Гы... Я вам привели пример двух пакетов для Виндовс позволяющих удобно работать с Юних сокетами - ЦыгВин и У/Вин. Оба обеспечивают имплементацию Юних Сокетов на основе ВинСоцк.

А я что - про пакеты спрашивал? Я говорил в Виндоус - нет УНИХ сокетов. И их таки нет. Если они гдето имплементированы в какойто библиотеке - ето проблема етой библиотеки, а операционная система - таких возможностей не предоставляет. Возможно, Вы просто не можете провести грань, где операционная система, а где библиотеки. Кстати, по делу Вы так и не ответили - как использовать Ваш УНИХ сокет с майскюл.
И где Вы нашли у Стивенса, которого Вы мне рекомендовали про УНИХ сокеты под Виндоус, особенно с cygwin?
Верить нельзя никому - даже себе. Мне - можно!
uncle_Pasha
Уже с Приветом
Posts: 19935
Joined: 30 Aug 2000 09:01
Location: WA

Post by uncle_Pasha »

Vovka wrote:
uncle_Pasha wrote:
Vovka wrote:Если класс в самом начале не задумывался как базовый, то он таким быть не должен. Если хотите реюзить - включите это класс как данные.

Если класс не задумывался как базовый, почему бы не использовать struct?

А тут я ничего не понял. Какая вообще разница, class или struct?


Формально, разница только в видимости членов.
Но меня вполне устраивает, то что:
1. половина индусов не будет наследоваться от struct, потому что не знает, что это можно делать.
2. половина от оставшейся половины будет неуверена, хорошо ли это, и во время ближайшего код ревью будет убита тезисами первой половины, что это "страшная недокументированная фича, которая грозит неминуемой карой в виде чего-нибудь". И, в итоге, не станут этого делать.
3. Те же индусы, что останутся, переименуют структуру в класс и приделают виртуальный деструктор по привычке.

И никаких проблем :)

Vovka wrote:
uncle_Pasha wrote:Пишите на С, если память и производительность так критична

А почему я на C++ не могу писать с тем же результатом?


Вы не уловили разницу между можно/нельзя и стОит/не стОит?

Удачи!
Mongush
Уже с Приветом
Posts: 446
Joined: 04 Jan 2002 10:01
Location: Irkutsk->Rockville, MD->Dallas, TX

Post by Mongush »

C++ как тут уже сказали - очень гибкий язык, и не надо ограничевотся только ОО подходом, который иногда может быть не эффективным, С++ и сделан чтобы можно было писать _эффективные_ программы и там для этого достаточно средств. А если их не использовать, то и смысла исплозовать С++ нет, лучше уж Java. А насчет виртуального деструктора, тут уже посоветовали посмотреть дизайн generic библиотек, в них то по моему и видна вся мощь языка, а уж не как не в MFC
uncle_Pasha
Уже с Приветом
Posts: 19935
Joined: 30 Aug 2000 09:01
Location: WA

Post by uncle_Pasha »

TLK wrote:Столько вокруг отличных библиотек красиво сдизайненных.
STL, ATL, boost, ACE. Где там "все деструкторы должны быть виртуальны?"


ACE - это все-таки любительщина.
Стоит сравнивать с Рогами, которые имеют целый ряд коммерческих библиотек и накладные расходы в виде технической поддержки кастомеров.
И как результат - "отточку" дезайна про результатам разборки кастомерских полетов.

Удачи!
PS Да, роговые RW[A-Za-z\ ]+\+\+ не самые быстрые.
Но они же поставляют очень приличную реализацию STL под многие компиляторы.
uncle_Pasha
Уже с Приветом
Posts: 19935
Joined: 30 Aug 2000 09:01
Location: WA

Post by uncle_Pasha »

Mongush wrote:C++ как тут уже сказали - очень гибкий язык, и не надо ограничевотся только ОО подходом, который иногда может быть не эффективным, С++ и сделан чтобы можно было писать _эффективные_ программы и там для этого достаточно средств. А если их не использовать, то и смысла исплозовать С++ нет, лучше уж Java. А насчет виртуального деструктора, тут уже посоветовали посмотреть дизайн generic библиотек, в них то по моему и видна вся мощь языка, а уж не как не в MFC


ACE - это не "generic" библиотека.

Никто не говорил что стоит делать виртуальный деструктор всегда.
Вопрос в том, что если кто-то не понимает зачем - пусть сделает виртуальным. Это безопаснее.
Растраты памяти в этом случае ничто по сравнению с утечками после "доработки".
Не хвататет производительности => отдельный проект => один или несколько нормальных мужиков (те, которые понимают) сядут и выбросят все ненужное.

Удачи!
TLK
Уже с Приветом
Posts: 305
Joined: 09 Feb 2001 10:01
Location: Nizhniy Novgorod -> MD

Post by TLK »

uncle_Pasha wrote:ACE - это все-таки любительщина.

Удачи!
PS Да, роговые RW[A-Za-z\ ]+\+\+ не самые быстрые.
Но они же поставляют очень приличную реализацию STL под многие компиляторы.


I am not a big fan of RW STL...

As for the ACE yes it's free, opensource, yada, yada, yada
.... but it does not make it automatically unprofessional.
People writing it work for money and they are actually good at what they do.

List of customers:
http://www.cs.wustl.edu/~schmidt/ACE-sponsors.html

And I can assure you it is not complete.
Bst.Rgds.TLK.
Volodja
Уже с Приветом
Posts: 110
Joined: 15 Jan 2003 21:02
Location: North VA

Post by Volodja »

Narod,

Vot kod, kotorii dlja interview moget i ne samii lutshii, no sam po sebe interesen.

int i = 1;
int a[3] = {1,1,1};

i[a] = 2;

printf("%d %d %d",a[0],a[1],a[2]);

Вопроси: проидет ли компилязиу? Если да, напечатается ли что либо? Если напезатается, то что?
Ответ конечно легко получит с помощу compiler... попробуите без.

Кстати, общее замечание, почему то на "русских" профессионалних форумах
отсутствует увагение к себе подобним ...
Могно щитат "профессионализм" других не достаточним ... могно всех индусов
в куче щитат "лубителями" ... могно многое ... НО без увагения относится к лудям с которими общаешся (даге на форуме) - ето очен не красиво.
Vo.
Vo vo, i ja o tom ge.
Seryi
Ник закрыт как дубликат.
Posts: 6238
Joined: 14 Mar 2001 10:01
Location: .MD -> .SI -> .SE -> .AR.US -> .MD

Post by Seryi »

Volodja wrote:Narod,

Vot kod, kotorii dlja interview moget i ne samii lutshii, no sam po sebe interesen.

int i = 1;
int a[3] = {1,1,1};

i[a] = 2;

printf("%d %d %d",a[0],a[1],a[2]);

Вопроси: проидет ли компилязиу? Если да, напечатается ли что либо? Если напезатается, то что?
Ответ конечно легко получит с помощу compiler... попробуите без.

Кстати, общее замечание, почему то на "русских" профессионалних форумах
отсутствует увагение к себе подобним ...
Могно щитат "профессионализм" других не достаточним ... могно всех индусов
в куче щитат "лубителями" ... могно многое ... НО без увагения относится к лудям с которими общаешся (даге на форуме) - ето очен не красиво.
Vo.


Ох, уже 2 года как не трогал C, но попробую.
ИМХО код компиляцию не пройдет.
Но представим что пройдет, тогда:
i[a], если представим i как указатель, то результирующая ячейка памяти это:

Code: Select all

resultMem = i + a = 1 + a
. То есть это будет та же ячейка что a[1]
в итоге массив a будет иметь данные {1,2,1}
это и будет напечатано
1 2 1
TLK
Уже с Приветом
Posts: 305
Joined: 09 Feb 2001 10:01
Location: Nizhniy Novgorod -> MD

Post by TLK »

A. Fig Lee wrote:
TLK wrote:Я люблю Ц++. Это мощный и красивый язык.
И на нем можно писать очень эффективные программы ничуть не хуже чем на Ц.

Нельзя. Точка.

Так, Вы или недопонимаете или лапшу на уши вешаете, СТЛ, АТЛ - темплейты - какие там виртуальные деструцторы?? Как Вы от пустого темплейта наследовать собрались? Лучше МФС посмотрите. боост, АCЕ - не знаю.


Dear Fig Lee, if we take a "small hiking trip" inside ATL together we will see that contemporary ATL is not ONLY "templates". It includes number of classes with virtual destructors and without them.
It even has (O Lord!) templates with virtual destructors.

As for MFC...a dead horse everybody beating for years.
It's 21 century, good time to retire this antient library.
Bst.Rgds.TLK.

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