Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
Здравствуйте, <Аноним>, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
1)Порядок вызова конструкторов и деструкторов?
class A {};
class B {};
class D {
A a;
B b;
};
class F : public A, B {
};
class A {
public:
virtual void f() {}
void g() { f(); }
};
class B : public A {
public:
void f() {}
};
2)Зачем может понадобиться виртуальный деструктор в данном случае?
3)Как сделать чтобы A::f был виден только ему и наследникам?
3)Есть одно-свзанный список,
class List {
struct Node {
int data;
Node *next;
};
insert();
remove();
..
};
Обобщить на случай произвольного типа вместо "int" с помощью шаблонов.
4)
class B;
class A {
public:
void SomethingHappen() { b_.DoSomething(); }
private:
B &b_;
};
class B {
public:
void DoSomething();
};
Как избавиться от "циркулярной зависимости А и B?
5)Вычислить факториал на этапе компиляции, на выходе константа 'n', на выходе факториал
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, mr_jek, Вы писали:
V>7) Вычислить Pi в уме, на входе бумага-ручка, на выходе — книга V>8) Написать искуственный интеллект на ассемблере
V>
Имелась ввиду простейщая конструкция вида:
#include <cstdio>
template<unsigned int i> struct factorial;
template<> struct factorial<0> { enum { value = 1 }; };
template<> struct factorial<1> { enum { value = 1 }; };
template<unsigned int i> struct factorial { enum { value = factorial<i - 1>::value * i }; };
int main()
{
printf("10! = %d\n", factorial<10>::value);
return 0;
}
простейший тест на знание шаблонов, что вам так не понравилось?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
А>и радуемся, как загибается компилятор...
и в чем ваше возражение?
во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)!
во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
Порядок такой
конструкторы A B D и A B F
деструкторы D B A и F B A
class A {
public:
virtual void f() {}
void g() { f(); }
};
class B : public A {
public:
void f() {}
};
2)Зачем может понадобиться виртуальный деструктор в данном случае?
Если в друг у наследника от A или от B будут переопределена функция f и в ней будет new а 0удаляться будут черз указатель на B или A то будет утечка памяти
3)Как сделать чтобы A::f был виден только ему и наследникам?
подозреваю что поместить в секцию protected
3)Есть одно-свзанный список,
class List {
struct Node {
int data;
Node *next;
};
insert();
remove();
..
};
Обобщить на случай произвольного типа вместо "int" с помощью шаблонов.
4)
template <class T>class List {
struct Node {
T data;
Node *next;
};tempalte <class T>
insert<T>(List<T> & list, T & t);
remove<T>(List<T> & list, T & t);
..
};
class B;
class A {
public:
void SomethingHappen() { b_.DoSomething(); }
private:
B &b_;
};
class B {
public:
void DoSomething();
};
Как избавиться от "циркулярной зависимости А и B? \\ чет я с утра не проснулся или где циркулярная зависимость? кстате интесрно ты на верность кода не притендуеш?
5)Вычислить факториал на этапе компиляции, на выходе константа 'n', на выходе факториал \\ ммм... затрудняюсь... но точно видал в рсдн \\ ну если че я прям сейчас сяду и буду изучать чтоб на такие вопросы отвечать легко на собеседовании
6)Реализовать сингелтон. \\ м.... его можно пол дня писать пример в книге александрески... но в краце, кстате на этот вопрос можно интересно пообщатся...
class Singleton {
Singleton(void) {};
static Singleton * instance;
// желательно еще закрыть всякие конструктора копирования и т.д.
public:
static Singleton * getInstance();
~Singleton(void) {};
};
Singleton * Singleton::instance = NULL;
Singleton * Singleton::getInstance() {
if (!instance)
instance = new Singleton;
return instance;
}
P.S.
Ну что кто возмет меня на работу? (без шуток готов рассмотреть придложения)
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>Спасибо заранее
1) Отличия структуры от класса
2) vector<bool> почему нельзя?
3) vector<auto_ptr<T>> почему нельзя?
4) что произойдет
Здравствуйте, mr_jek, Вы писали:
_>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, mr_jek, Вы писали:
А>>и радуемся, как загибается компилятор...
_>и в чем ваше возражение?
_>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
Глупо вообще вычислять факториал рекурсивно.
Рерсия на шаблонах имеет очень ограниченное применение
и потому на обычном интервью такие вопросы не нужны.
Гораздо важнее понимает ли человек рекурсию воообще.
Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных.
А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
_>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, mr_jek, Вы писали:
А>>>и радуемся, как загибается компилятор...
_>>и в чем ваше возражение?
_>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>Глупо вообще вычислять факториал рекурсивно. А>Рерсия на шаблонах имеет очень ограниченное применение А>и потому на обычном интервью такие вопросы не нужны. А>Гораздо важнее понимает ли человек рекурсию воообще. А>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
Это не задача на рекурсию,
это задача на понимание того какую специлизацию шаблона компилятор выберет,
и почему это вообще работает.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
_>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, mr_jek, Вы писали:
А>>>и радуемся, как загибается компилятор...
_>>и в чем ваше возражение?
_>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>Глупо вообще вычислять факториал рекурсивно. А>Рерсия на шаблонах имеет очень ограниченное применение А>и потому на обычном интервью такие вопросы не нужны. А>Гораздо важнее понимает ли человек рекурсию воообще. А>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
Здравствуйте, Vanger84, Вы писали:
V>Ну что кто возмет меня на работу? (без шуток готов рассмотреть придложения)
Предложенный мною задания просто первая фраза в собеседование на знание C++,
"они не значат почти ничего, кроме того что возможно..." (c),
правильный ответ или не очень правильный, это просто способ начать собеседование,
каждый вопрос при желании имеет бесконечное множество дополнительных вопросов.
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, mr_jek, Вы писали:
_>>>Здравствуйте, Аноним, Вы писали:
А>>>>Здравствуйте, mr_jek, Вы писали:
А>>>>и радуемся, как загибается компилятор...
_>>>и в чем ваше возражение?
_>>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>>Глупо вообще вычислять факториал рекурсивно. А>>Рерсия на шаблонах имеет очень ограниченное применение А>>и потому на обычном интервью такие вопросы не нужны. А>>Гораздо важнее понимает ли человек рекурсию воообще. А>>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
C>Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
знаеш что реально показывает этот вопрос! это то что читал ли соискатель статью где реализаваг факториал или нет! 100% с ходу не кто не напишет это! можете проверить на своих колегах!