Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, mr_jek, Вы писали:
_>>>Здравствуйте, Аноним, Вы писали:
А>>>>Здравствуйте, mr_jek, Вы писали:
А>>>>и радуемся, как загибается компилятор...
_>>>и в чем ваше возражение?
_>>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>>Глупо вообще вычислять факториал рекурсивно. А>>Рерсия на шаблонах имеет очень ограниченное применение А>>и потому на обычном интервью такие вопросы не нужны. А>>Гораздо важнее понимает ли человек рекурсию воообще. А>>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
C>Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
знаеш что реально показывает этот вопрос! это то что читал ли соискатель статью где реализаваг факториал или нет! 100% с ходу не кто не напишет это! можете проверить на своих колегах!
Здравствуйте, mr_jek, Вы писали:
_>Это не задача на рекурсию,
Вспомним как ставилась задача:
>> 5)Вычислить факториал на этапе компиляции, на выходе константа 'n', на выходе факториал
_>это задача на понимание того какую специлизацию шаблона компилятор выберет, _>и почему это вообще работает.
Я не вижу слова "шаблон" в вопросе.
Сомневаюсь, что до 2000 года, когда вышла книга Александреску, кто-нибудь
вообще понял бы фразу "вычислить факториал на этапе компиляции". Поэтому этот
вопрос скорее на знание хитрых и редко используемых приемов.
Если интервью строить на таком подходе, то можно упустить очень много умных,
работящих, и, главное, аккуратных программистов, а вместо них набрать команду
"блестящих гениев", которые не программируют, а кладут кучи неработающего
дерьма.
К тому же подход "завтра я провожу первое в жизни интервью — накидайте-ка мне
побольше хороших вопросов" уже характеризует интервьюирующего. Правильная
схема тестирования должна включать заранее подготовленный, продуманный,
письменный тест, который претендент должен иметь возможность выполнять в
спокойной обстановке, в одиночестве и в течение заведомо достаточного времени.
Если быть честным, такое тестирование в Москве я встречал только в одном месте.
Это — Ecora.
C>Вобще один мой друг (очень хороший специалист со стажем уже более 8-ми лет) на собеседовании ведет себя примерно так:
C>Когда ему начинают задавать вопросы по типу хитроумных, на знание стандарта, он отвечает просто "Ребята вы меня грузите, я могу вас сам щас загрузить так, что вы усомнитесь в себе как в специалистах. Вот вы мне задали задачку ....., хорошо я её решу, но прежде чем я начну решать задачу я дам вам свою задачу", тут он пишет свою задачку на листке и протягивает её интервьюверу со словами "Если вы не решаете эту задачу, то я сомневаюсь в вашей достаточной квалификации и не собераюсь работать в вашей компании с бездарностями". Самое смешное, что один раз когда он собеседовался, интервьювер так и не решил его задачу (то был тим лидер крупной софтовой компании). А второй раз все дружно посмеялись и прекратили собеседование
C>ИМХО это правильный подход. Собеседование это не тест а диалог. И ты вправе проверить квалификацию сотрудников компании если у тебя есть сомнения.
неправильное поведение на собеседовании,
логики в таком поведении нет,
есть только, уж простите за психоанализ, внутреннее недовольство, что это его собеседуют, а не он.
V>>хы... даже я задумался писать код!
J>А вот и код:
J>class ABC J>{ J>public: J> virtual void func() = 0 { cout << "I'm Pure Virtual" << endl;}; //ill-formed J>};
J>class BCD : public ABC J>{ J>public: J> virtual void func() { cout << "I'm not Pure Virtual" << endl;}; J> void func2() {ABC::func();}; J>};
J>int main(int argc, char* argv[]) J>{ J> BCD b; J> b.func2(); J>}
10.4/2
An abstract class is a class that can be used only as a base class of some other class; no objects of an
abstract class can be created except as sub-objects of a class derived from it. A class is abstract if it has at
least one pure virtual function. [Note: such a function might be inherited: see below. ] A virtual function is
specified pure by using a pure-specifier (9.2) in the function declaration in the class declaration. A pure
virtual function need be defined only if explicitly called with the qualified-id syntax (5.1). [Example:
class point { /* ... */ };
class shape { // abstract class
point center;
// ...
public:
point where() { return center; }
void move(point p) { center=p; draw(); }
virtual void rotate(int) = 0; // pure virtual
virtual void draw() = 0; // pure virtual
// ...
};
—end example] [b]Note: a function declaration cannot provide both a pure-specifier and a definition[/b]
—end note] [Example:
struct C {
virtual void f() = 0 { }; // ill-formed
};
—end example]
Здравствуйте, Vanger84, Вы писали:
V>Здравствуйте, creatman, Вы писали:
C>>Здравствуйте, Vanger84, Вы писали:
V>>>Здравствуйте, srggal, Вы писали:
S>>>>Здравствуйте, Vanger84, Вы писали:
V>>>>>а дай пожалуйсто ответ на этот вопрос...
S>>>>См. стандарт 15.4
S>>>>
S>>>>15.4/8
S>>>>Whenever an exception is thrown and the search for a handler (15.3) encounters the outermost block of a
S>>>>function with an exception-specification, the function unexpected() is called (15.5.2) if the exceptionspecification
S>>>>does not allow the exception.[Example:
S>>>>class X { };
S>>>>class Y { };
S>>>>class Z: public X { };
S>>>>class W { };
S>>>>void f() throw (X, Y)
S>>>>{
S>>>>int n = 0;
S>>>>if (n) throw X(); // OK
S>>>>if (n) throw Z(); // also OK
S>>>>throw W(); // will call unexpected()
S>>>>}
S>>>>—end example]
S>>>>15.4/9
S>>>>The function unexpected() may throw an exception that will satisfy the exception-specification for
S>>>>which it was invoked, and in this case the search for another handler will continue at the call of the function
S>>>>with this exception-specification (see 15.5.2), or it may call terminate().
S>>>>15.4/11
S>>>>A function with no exception-specification allows all exceptions. A function with an empty exceptionspecification,
S>>>>throw(), does not allow any exceptions.
S>>>>Кроме этого есть S>>>>
S>>>>15.5.1 The terminate() function
S>>>>...
S>>>>15.5.2 The unexpected() function
S>>>>...
S>>>>которые тоже можно глянуть
V>>>я попросил дать ответ не потомучто незнаю а потомучто хотел узнать как именно он был дал ответ на этот вопрос на собеседовании те не дают стандарт C++ чтобы ты в нем искал ответ! тебя спрашивают а ты сам должен сформулировать ответ....
C>>Какая разница как бы дал его я. Я думаю тебе бы это вобще никакой информации бы не дало. Поскольку ты не интервьювер а я не на собеседовании. И даже если бы я не знал ответа то легко его нашел бы используя Google. А вот если бы ты сам написал сюда свой ответ, я думаю для тебя бы было больше пользы, может какие-нибудь для себя советы получил.
V>Я думаю тебе бы это вобще никакой информации бы не дало. \\ просто одно одело беседовать со знающим человеком который может быть тебя на несколько порядков выше а другое дело беседовать с junior который тока понтуется... соответственно и строится беседа.
Опятьже, эту информацию тебе всеравно будет сложно получить так как тут мы неограничены временем и под рукой Google, а читать я полагаю тут умеют все
V>Самое тупое занятие это беседовать с интервьювером который умеет тока задавать вопросы а ответы на них не знает.... так у меня и получилось 2 конторы мне задали вопрос что такое Абстрактный класс я естественно ответил они сказали что я не прав и не стали дальше обсуждать! и причем на мой вопрос "И что же по вашему такое абстрактный класс?" в одной конторе мне намекнули что не прелично у них спрашивать а вдругой медленно но верно дали определение интерфейса!
Вобще один мой друг (очень хороший специалист со стажем уже более 8-ми лет) на собеседовании ведет себя примерно так:
Когда ему начинают задавать вопросы по типу хитроумных, на знание стандарта, он отвечает просто "Ребята вы меня грузите, я могу вас сам щас загрузить так, что вы усомнитесь в себе как в специалистах. Вот вы мне задали задачку ....., хорошо я её решу, но прежде чем я начну решать задачу я дам вам свою задачу", тут он пишет свою задачку на листке и протягивает её интервьюверу со словами "Если вы не решаете эту задачу, то я сомневаюсь в вашей достаточной квалификации и не собераюсь работать в вашей компании с бездарностями". Самое смешное, что один раз когда он собеседовался, интервьювер так и не решил его задачу (то был тим лидер крупной софтовой компании). А второй раз все дружно посмеялись и прекратили собеседование
ИМХО это правильный подход. Собеседование это не тест а диалог. И ты вправе проверить квалификацию сотрудников компании если у тебя есть сомнения.
Здравствуйте, Jonathan, Вы писали:
J>>>в задании небыло указано должен код соответствовать стандарту или нет. J>>>было только: "Напишите компелябельный код для вызова чистовиртуальной функции" J>>>Что я с успехом и продемонстрировал
S>>Настолько Вы со мной несогласны, что даже в виде минуса выразили, чтож, не поленитесь, S>>гляньте сюда Что такое ill-formed код ? ill-formed == UB ?
Блин. Не хотел писать, дабы не вдаваться в непонятную дискуссию, больше на эту тематику — не отвечаю.
В задании, как Вы процитировали написано:
Напишите компелябельный код для вызова чистовиртуальной функции
ТОт код, который привели вы — ill-formed, далее я дал ссылку на то, что ill-formed код — не является компилябельным, с одним исключением — нарушение ODR — может не диагностироваться компилятором.
Резюмируем:
Ваш код не соответсвует условию задачи — он не копилябельный.
Здравствуйте, mr_jek, Вы писали:
_>А у меня работает, может пора сменить компилятор и платформу?
_>Вы опять все пропустили мимо ушей, соль вопроса не в вычисление факториала _>и не в вычисление на стадии компиляции, а в выборе специлизации шаблона, _>наличие этих специлизаций, и в том как вообще работают шаблоны под этим "необычным" _>углом.
Может тогда проще спросить читал ли кандидат Александреску?
Я не волшебник, я только учусь.
<< RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, _Dreamer, Вы писали:
C>>Задачка первая: есть строка, её надо извернуть задом наперёд, не выделяя много дополнительной памяти. Смотреть на то, какой тип/класс претендент использует для строки; решает через индексы, указатели или итераторы; как делает swap. Грамотный программист на C++ должен в первую очередь сказать «std::reverse» и приступить к решению только тогда, когда ему скажут, что «+1, но мы хотим посмотреть, как Вы реализуете аналогичный алгоритм»
_D>можно поинтересоваться, как бы Вы оценили вот такие решения ваших задач ?
можно я?
_D>я позволил себе опустить некоторые проверки при решении. _D>1) реверс с указателями _D>
_D>char * str_reverse( char * str ) // все же лучше бы итераторы, на худой конец шаблон - вдруг wchar_t?
_D>{
_D> char temp = 0; // зачем он здесь? место ему в блоке while
_D> char * b = str, * e = str + strlen( str ) - 1; // по-хорошему всё же это бы в 2 строчки. А также std::strlen.
_D> while( b <= e ) // зачем нестрогое неравенство? UB при нулевой длине!
_D> //std::swap( *b++, *e-- ); // самый очевидный вариант для меня
// можно еще показать знание ADL, написав using std::swap; swap(...);
_D> //(*b++ = ( temp = *b, *e )), *e-- = temp; // за такое наверно можно и по шее схлопотать =)
_D> {
_D> temp = *b;
_D> *b++ = *e;
_D> *e-- = temp;
_D> }
_D> return str;
_D>}
_D>void test_str_reverse()
_D>{
_D> char str[] = {"hello world !"}; // смысл { } ?
_D> std::cout << str << std::endl;
_D> std::cout << str_reverse( str ) << std::endl;
_D>}
_D>
Я бы засчитал попытку. Если понадобится, ты сможешь переделать это и с итераторами, и с std::basic_string. Наличие тестирующей проги — плюс. Еще какая тонкость — напиши тест перед основной функцией, и вообще начинай с него, а потом уже функция.
C>>Задачка вторая: даны два множества целых чисел, представлены сортированными массивами. Найти их объединение (вариант: пересечение), в том же представлении.
_D>2) пересечение массивов через указатели. предполагал, что отсортированы по возрастанию, возможно с повторяющимися элементами. _D>для простоты предполагал, что массивы одной длинны. обьединение у меня получилось еще более наивной и громоздкой, потому не стал показывать.
В первую очередь нужно вспомнить о std::set_intersection.
_D>
_D>template < int size > // std::size_t
_D>void print_array( int (&array)[size], int print_size = size ) // std::copy, std::ostream_iterator?
_D>{
_D> for( int ii = 0; ii < print_size; ++ii )
_D> std::cout << array[ii] << " ";
_D> std::cout << "\n";
_D>}
// ну здесь template и итераторы так и просятся...
_D>void arrays_intr( const int *ar1, const int *ar2, int *res, const int size, int *res_size ) // почему res_size не ссылка?
_D>{
_D> const int *ar1_end = ar1 + size, *ar2_end = ar2 + size;
_D> *res_size = 0;
_D> while( ar1 < ar1_end && ar2 < ar2_end ) // привыкай к !=
_D> {
_D> if ( *ar1 == *ar2 ) // тебе не обещали EqualityComparable (ты же ведь добавишь template и расширишь функцию для всевозможных типов, не так ли?)
_D> {
_D> if ( (*res_size) == 0 || *(res - 1) != *ar1 ) // Эта строчка вообще лишняя. "abbbbccdff" * "aabbccdef" = "abbccdf".
// Эквивалентных элементов брать по минимуму из двух последовательностей.
_D> {
_D> *res++ = *ar1;
_D> ++(*res_size);
_D> }
_D> ++ar1;
_D> ++ar2;
_D> }
_D> else
_D> {
_D> *ar1 > *ar2 ? ++ar2 : ++ar1; // и operator > тоже не обязан присутствовать
_D> }
_D> }
_D>}
_D>void test_arrays()
_D>{
_D> int ar1[] = { 1, 2, 3, 5, 5, 71 };
_D> int ar2[] = { 0, 1, 2, 3, 4, 5 };
_D> const int size = sizeof( ar1 ) / sizeof( ar1[0] ); // поищи на кывте ARRAY_LENGTH и удиви интервьеров :)
_D> int res_intr[ size ] = {0};
_D> int res_size = 0;
_D> print_array( ar1 );
_D> print_array( ar2 );
_D> arrays_intr( ar1, ar2, res_intr, size, &res_size );
_D> print_array( res_intr, res_size );
_D>}
_D>
При некоторых возможных недостатках сия программа имеет важнейшее преимущество: работает (ведь так?). Я бы, опять же, дал положительную оценку. На собеседовании и не таких граблей можно наставить
Тебе стоит изучить Generic Programming. Поищи, где-то на этом форуме были ссылки на сайт, откуда можно скачать полезные книги, писанные гуру вроде Саттера, Александреску, Мейерса и др.
Приложение 1 Так STLport делает set_intersection, если чуть упростить (не любят в STLport постфиксные операторы):
template <class InputIter1, class InputIter2, class OutputIter>
OutputIter set_intersection(InputIter1 first1, InputIter1 last1,
InputIter2 first2, InputIter2 last2,
OutputIter result)
{
while(first1 != last1 && first2 != last2) // как думаешь, какое из этих условий с большей вероятностью сработает первым?
// и, соответственно, какое из них лучше поместить в начало?
{
if(*first1 < *first2)
{
++first1;
}
else if(!(*first2++ < *first1)) // равняются
{
*result++ = *first1++;
}
}
return result;
}
Приложение 2 А так — reverse:
template <class BidirectionalIter>
void reverse_impl(BidirectionalIter first, BidirectionalIter last, bidirectional_iterator_tag)
{
for(; first != last && first != --last; ++first)
{
iter_swap(first, last);
}
}
template <class RandomAccessIter>
void reverse_impl(RandomAccessIter first, RandomAccessIter last, random_access_iterator_tag)
{
for (; first < last; ++first)
{
iter_swap(first, --last);
}
}
template <class BidirectionalIter>
void reverse(BidirectionalIter first, BidirectionalIter last)
{
reverse_impl(first, last, typename iterator_traits<BidirectionalIter>::iterator_category());
}
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
У нас просили решить несколько задачек.
Задачка первая: есть строка, её надо извернуть задом наперёд, не выделяя много дополнительной памяти. Смотреть на то, какой тип/класс претендент использует для строки; решает через индексы, указатели или итераторы; как делает swap. Грамотный программист на C++ должен в первую очередь сказать «std::reverse» и приступить к решению только тогда, когда ему скажут, что «+1, но мы хотим посмотреть, как Вы реализуете аналогичный алгоритм»
Задачка вторая: даны два множества целых чисел, представлены сортированными массивами. Найти их объединение (вариант: пересечение), в том же представлении.
Здравствуйте, Андрей Хропов, Вы писали:
АХ>В Visual C++ используется язык довольно похожий на стандартный C++, АХ> но все же не его нельзя назвать С++. Это "C++. MS VC++ 6.0 edition". АХ> Он вообще славен своими косяками. Никому не рекомендую.
Для своего времени это был весьма приличный компилятор. Много есть промышленных компиляторов которым больше 8 лет и они все еще используються?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
А>и радуемся, как загибается компилятор...
и в чем ваше возражение?
во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)!
во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>Спасибо заранее
1) Отличия структуры от класса
2) vector<bool> почему нельзя?
3) vector<auto_ptr<T>> почему нельзя?
4) что произойдет
Здравствуйте, mr_jek, Вы писали:
_>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, mr_jek, Вы писали:
А>>и радуемся, как загибается компилятор...
_>и в чем ваше возражение?
_>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
Глупо вообще вычислять факториал рекурсивно.
Рерсия на шаблонах имеет очень ограниченное применение
и потому на обычном интервью такие вопросы не нужны.
Гораздо важнее понимает ли человек рекурсию воообще.
Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных.
А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
Здравствуйте, Vanger84, Вы писали:
V>знаеш что реально показывает этот вопрос! это то что читал ли соискатель статью где реализаваг факториал или нет! 100% с ходу не кто не напишет это! можете проверить на своих колегах!
Так оценка собеседуемого, не проходит а-ля:
"ответил — +, не ответил -, теперь сложим, так вам четыре, вы свободны, следущий".
Если не справляется можно дать сам код, со словами, вы наверное это имеете ввиду,
но еще не написали, и спросить а почему "вы" так это "написали".
Здравствуйте, Vanger84, Вы писали:
V>знаеш что реально показывает этот вопрос! это то что читал ли соискатель статью где реализаваг факториал или нет! 100% с ходу не кто не напишет это! можете проверить на своих колегах!
Кстати, после прочтения "Александреску" такая задача решается на ура,
проверено на 3 "коллегах", правда есть зависимость от того как давно испытуемый
читал что-то подобное, но как я говорил решать вообще не обязательно
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>Спасибо заранее
Меня спросил что это такое?
int i(0);
Я долго думал какие подвохи мне подготовили ?
Потом ответил
После чего интервьювер сказал Хорошо
На этом все закончилось
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, creatman, Вы писали:
C>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, mr_jek, Вы писали:
_>>>>Здравствуйте, Аноним, Вы писали:
А>>>>>Здравствуйте, mr_jek, Вы писали:
А>>>>>и радуемся, как загибается компилятор...
_>>>>и в чем ваше возражение?
_>>>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>>>Глупо вообще вычислять факториал рекурсивно. А>>>Рерсия на шаблонах имеет очень ограниченное применение А>>>и потому на обычном интервью такие вопросы не нужны. А>>>Гораздо важнее понимает ли человек рекурсию воообще. А>>>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>>>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
C>>Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
А>Давно ли ты compile-time вычисления видел в реальных проектах, А>а не в интересных книжках? А>В большинстве случаевсе эти compile-time вычисления можно заменить А>обычными статическими lookup таблицами без ущерба для понимания, расширяемости А>и без увеличния времени компиляции.
Видел недавно. Проект — физическое моделирование бурения нефтянных скважин. Там конечно не факториалы вычисляются а гораздо более серьезные формулы. Поскольку в проекте я не учавствую то не могу более детально сказать, зачем и как это там используется.
Я не говорил что compile-time вычисления это панацея. Везде нужно уметь правильно принимать решения балансируя между многими факторами. В этом заключается задача проектирования.
А>Кстати, твой факториал глупо применять и для n>=13
Задача была учебная а не практическая. Естественно что многое что тебя спросят на собеседовании ты никогда не будешь использовать в проекте, но и не та задача ставится перед интервьювером. Задача интервьювера определить твой уровень знаний и выделить тебя среди остальных.
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>>Спасибо заранее
C>Еще один хороший и стандартный вопрос на понимание того как объект конструируется:
C>"Напишите компелябельный код для вызова чистовиртуальной функции"
Здравствуйте, Vanger84, Вы писали:
V>а дай пожалуйсто ответ на этот вопрос...
См. стандарт 15.4
15.4/8
Whenever an exception is thrown and the search for a handler (15.3) encounters the outermost block of a
function with an exception-specification, the function unexpected() is called (15.5.2) if the exceptionspecification
does not allow the exception.[Example:
class X { };
class Y { };
class Z: public X { };
class W { };
void f() throw (X, Y)
{
int n = 0;
if (n) throw X(); // OK
if (n) throw Z(); // also OK
throw W(); // will call unexpected()
}
—end example]
15.4/9
The function unexpected() may throw an exception that will satisfy the exception-specification for
which it was invoked, and in this case the search for another handler will continue at the call of the function
with this exception-specification (see 15.5.2), or it may call terminate().
15.4/11
A function with no exception-specification allows all exceptions. A function with an empty exceptionspecification,
throw(), does not allow any exceptions.
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, Jonathan, Вы писали:
J>>>>в задании небыло указано должен код соответствовать стандарту или нет. J>>>>было только: "Напишите компелябельный код для вызова чистовиртуальной функции" J>>>>Что я с успехом и продемонстрировал
S>>>Настолько Вы со мной несогласны, что даже в виде минуса выразили, чтож, не поленитесь, S>>>гляньте сюда Что такое ill-formed код ? ill-formed == UB ?
J>>А причем тут ето? J>>см. задание!!! J>>
S>Блин. Не хотел писать, дабы не вдаваться в непонятную дискуссию, больше на эту тематику — не отвечаю.
S>В задании, как Вы процитировали написано: S>
S>Напишите компелябельный код для вызова чистовиртуальной функции
S>ТОт код, который привели вы — ill-formed, далее я дал ссылку на то, что ill-formed код — не является компилябельным, с одним исключением — нарушение ODR — может не диагностироваться компилятором.
S>Резюмируем: S> Ваш код не соответсвует условию задачи — он не копилябельный.
Еще как компелябельный, причем не только у меня.
покрайней мере H. Sutter со мной согласен.
См. пример:
"This is the original GotW problem and solution substantially as posted to Usenet. See the book More Exceptional C++ (Addison-Wesley, 2002) for the most current solution to this GotW issue. The solutions in the book have been revised and expanded since their initial appearance in GotW. The book versions also incorporate corrections, new material, and conformance to the final ANSI/ISO C++ standard."
Здравствуйте, Centaur, Вы писали:
C>After the "I'm a nine", I always ask them "what question would you ask someone who was an 8.9 that they would have difficulty answering — just general subject is fine, but a specific question is great". The real nines have a question like (I normally tech .net) "what should you look out for when casting a structure to an interface and calling methods that modify the data". The non-nines say "Something about how inheritance works".[/q]
по поводу всех этих "градуировок" — более-менее верно можно проградуировать только уровень людей ниже тебя, или примерно равных.
В данной постановке задачи не вызовется ни один конструктор и ни один деструктор.
Да и вообще какое-то кривое условие.
_>1)Порядок вызова конструкторов и деструкторов? _>[ccode] _>class A {}; _>class B {}; _>class D { _> A a; _> B b; _>};
_>class F : public A, B { _>};
J>>скомпилируй в VC++ 6.0
C>Напиши код который соответствует стандарту и компилируется любым компилятором. Я думаю это уточнение можно будет добавить без проблем на собеседовании.
Помнить весь стандарт наизусть — это, имхо, не для программиста работа.
Если вынести тело ф-ии из объявления — g++ скомпилит без проблем.
Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 03:08
Оценка:
Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
Здравствуйте, <Аноним>, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
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;
}
простейший тест на знание шаблонов, что вам так не понравилось?
Порядок такой
конструкторы 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.
Ну что кто возмет меня на работу? (без шуток готов рассмотреть придложения)
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, 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),
правильный ответ или не очень правильный, это просто способ начать собеседование,
каждый вопрос при желании имеет бесконечное множество дополнительных вопросов.
Здравствуйте, Vanger84, Вы писали:
V>3) vector<auto_ptr<T>> почему нельзя? \\ плохой вопрос! т.к. auto_ptr<T> — что это такое и откуда?!... м...??
Хорошо auto_ptr<int>
V>void f() throw() { // прикольно, но тоже видь читает за 5 минут в книжке... V> throw 1; V>}
То что кандидат на позицию разработчика С++ умеет читать я не сомневаюсь. А вот знание того как работает механизм исключений не факт.
Здравствуйте, Vanger84, Вы писали:
V>Здравствуйте, creatman, Вы писали:
C>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, mr_jek, Вы писали:
_>>>>Здравствуйте, Аноним, Вы писали:
А>>>>>Здравствуйте, mr_jek, Вы писали:
А>>>>>и радуемся, как загибается компилятор...
_>>>>и в чем ваше возражение?
_>>>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>>>Глупо вообще вычислять факториал рекурсивно. А>>>Рерсия на шаблонах имеет очень ограниченное применение А>>>и потому на обычном интервью такие вопросы не нужны. А>>>Гораздо важнее понимает ли человек рекурсию воообще. А>>>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>>>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
C>>Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
V>знаеш что реально показывает этот вопрос! это то что читал ли соискатель статью где реализаваг факториал или нет! 100% с ходу не кто не напишет это! можете проверить на своих колегах!
Хорошо, тут я соглашусь. Пару лет назад меня собеседовали и задали вопрос с обратной стороны: "что делает эта конструкция?"
На прямой вопрос я бы тоже затруднился ответить.
V>знаеш что реально показывает этот вопрос! это то что читал ли соискатель статью где реализаваг факториал или нет! 100% с ходу не кто не напишет это! можете проверить на своих колегах!
Согласен. Вопросы, похожие на олимпиадные, задавать не стоит. Если, конечно, не принимаешь человека в супер научно-исследовательский отдел.
Здравствуйте, Vanger84, Вы писали:
V>ну меня бы напугал бы такой вопрос (раньше), лучше спросить знаеш что такое exception зачем они нужны... ну можно спросить зачем такая конструкция
V>try { V>// V>} catch(...) { V>// V>}
V>если объяснит мне кажется этого достаточно!
Зависит от того на какую всетаки позицию и зп нанимают
Ведь если это Junior C++ programmer то я бы и про исключения спрашивать не стал, спросил бы только "Вы умеете читать и быстро учиться?"
Здравствуйте, mr_jek, Вы писали:
_>Здравствуйте, Vanger84, Вы писали:
V>>Ну что кто возмет меня на работу? (без шуток готов рассмотреть придложения)
_>Предложенный мною задания просто первая фраза в собеседование на знание C++, _>"они не значат почти ничего, кроме того что возможно..." (c),
_>правильный ответ или не очень правильный, это просто способ начать собеседование, _>каждый вопрос при желании имеет бесконечное множество дополнительных вопросов.
Как ты считаеш я удачно прошел первый этап?!
и кстате у тебя есть придложение по работе?
опять же меня сильно выбивает из клеи когда мне дают на собеседовании задание а я сним не справляюсь (может это моя проблема), но я точно знаю что сидел бы я за компом с кружкой кофе яб решил эту проблему.....
Вот вот у меня уже год прошел! а без должной практики такие вещи забываются! (
Re[8]: Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 06:48
Оценка:
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, mr_jek, Вы писали:
_>>>Здравствуйте, Аноним, Вы писали:
А>>>>Здравствуйте, mr_jek, Вы писали:
А>>>>и радуемся, как загибается компилятор...
_>>>и в чем ваше возражение?
_>>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>>Глупо вообще вычислять факториал рекурсивно. А>>Рерсия на шаблонах имеет очень ограниченное применение А>>и потому на обычном интервью такие вопросы не нужны. А>>Гораздо важнее понимает ли человек рекурсию воообще. А>>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
C>Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
Давно ли ты compile-time вычисления видел в реальных проектах,
а не в интересных книжках?
В большинстве случаевсе эти compile-time вычисления можно заменить
обычными статическими lookup таблицами без ущерба для понимания, расширяемости
и без увеличния времени компиляции.
Кстати, твой факториал глупо применять и для n>=13
Здравствуйте, Vanger84, Вы писали:
V>хм... я согласен минимум на 1300$ на исп срок, в Мск... но я и не позиционирую себя на junior
Если ты позиционируешь себя выше чем junior и просишь соответствующую ЗП, то и требования к тебе будут выше. И вопросы на собеседование будут не про то умеешь ли ты читать или нет, а скорее на знание тонкостей языка. Потому как задавая общие вопросы трудно отделить действительно специалиста от начинающего программиста.
Здравствуйте, Аноним, Вы писали:
А>Давно ли ты compile-time вычисления видел в реальных проектах, А>а не в интересных книжках? А>В большинстве случаевсе эти compile-time вычисления можно заменить А>обычными статическими lookup таблицами без ущерба для понимания, расширяемости А>и без увеличния времени компиляции.
А>Кстати, твой факториал глупо применять и для n>=13
А у меня работает, может пора сменить компилятор и платформу?
Вы опять все пропустили мимо ушей, соль вопроса не в вычисление факториала
и не в вычисление на стадии компиляции, а в выборе специлизации шаблона,
наличие этих специлизаций, и в том как вообще работают шаблоны под этим "необычным"
углом.
_>Дайвайте разделим реализацию и объявление, причем конечно нужн контроль типов:
В общем я опять напутал и лень искать файл с вопросами,
смысл в том чтобы выделить интерфейс
class IB {
public:
virtual void OnEvent();
};
а вопрос подберите сами
Re[10]: Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 07:08
Оценка:
Здравствуйте, creatman, Вы писали:
C>>>Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
А>>Давно ли ты compile-time вычисления видел в реальных проектах, А>>а не в интересных книжках?
C>Видел недавно. Проект — физическое моделирование бурения нефтянных скважин. Там конечно не факториалы вычисляются а гораздо более серьезные формулы. Поскольку в проекте я не учавствую то не могу более детально сказать, зачем и как это там используется. C>Я не говорил что compile-time вычисления это панацея. Везде нужно уметь правильно принимать решения балансируя между многими факторами. В этом заключается задача проектирования.
Для формул? Очень сомнительно.
Ведь нельзя использовать переменные в таких формулах.
Я имею ввиду типа такого:
unsigned int var = 5;
unsigned int fact5 = factorial<var>::value;
Т.е. именно для вычислений смысла в compile-time вычислениях точно никакого.
На интервью для продвинутых лучше спросить а когда вообще
есть смысл применять compile-time вычисления на С++...
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>Спасибо заранее
Еще один хороший и стандартный вопрос на понимание того как объект конструируется:
"Напишите компелябельный код для вызова чистовиртуальной функции"
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Vanger84, Вы писали:
V>>хм... я согласен минимум на 1300$ на исп срок, в Мск... но я и не позиционирую себя на junior
C>Если ты позиционируешь себя выше чем junior и просишь соответствующую ЗП, то и требования к тебе будут выше. И вопросы на собеседование будут не про то умеешь ли ты читать или нет, а скорее на знание тонкостей языка. Потому как задавая общие вопросы трудно отделить действительно специалиста от начинающего программиста.
интересно какие вы тонкости языка используете в проекте?!...
Re[10]: Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 07:13
Оценка:
Здравствуйте, mr_jek, Вы писали:
А>>Кстати, твой факториал глупо применять и для n>=13
_>А у меня работает, может пора сменить компилятор и платформу?
unsigned int res = factorial<13>::value;
Visual C++ .Net 2003 по праву выдает:
warning C4307: '*' : integral constant overflow
Процессор у меня все еще 32-ти разрядный, но менять его пока не собираюсь
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, creatman, Вы писали:
C>>>>Задача показывает не способность вычислить факториал или понимание рекурсии, она показывает насколько человек вобще представляет себе, как делаются compile-time вычисления.
А>>>Давно ли ты compile-time вычисления видел в реальных проектах, А>>>а не в интересных книжках?
C>>Видел недавно. Проект — физическое моделирование бурения нефтянных скважин. Там конечно не факториалы вычисляются а гораздо более серьезные формулы. Поскольку в проекте я не учавствую то не могу более детально сказать, зачем и как это там используется. C>>Я не говорил что compile-time вычисления это панацея. Везде нужно уметь правильно принимать решения балансируя между многими факторами. В этом заключается задача проектирования.
А>Для формул? Очень сомнительно. А>Ведь нельзя использовать переменные в таких формулах. А>Я имею ввиду типа такого: А>
А>unsigned int var = 5;
А>unsigned int fact5 = factorial<var>::value;
А>
А>Т.е. именно для вычислений смысла в compile-time вычислениях точно никакого.
Вместо переменных там естественно константы, которые в свою очередь вычисляются тоже в compile-time. Возможно коректней было бы сказать не формулы а математические выражения.
А>На интервью для продвинутых лучше спросить а когда вообще А>есть смысл применять compile-time вычисления на С++...
Хм... ну для этого нужно понять на сколько продвинутый понимает что это такое. Ведь ответить на этот вопрос можно вобще без знания языка, а просто знать что такое compile-time. Это вопрос чисто аналитический.
Здравствуйте, Vanger84, Вы писали:
V>Здравствуйте, creatman, Вы писали:
C>>Здравствуйте, Vanger84, Вы писали:
V>>>хм... я согласен минимум на 1300$ на исп срок, в Мск... но я и не позиционирую себя на junior
C>>Если ты позиционируешь себя выше чем junior и просишь соответствующую ЗП, то и требования к тебе будут выше. И вопросы на собеседование будут не про то умеешь ли ты читать или нет, а скорее на знание тонкостей языка. Потому как задавая общие вопросы трудно отделить действительно специалиста от начинающего программиста.
V>интересно какие вы тонкости языка используете в проекте?!...
например в упрощенном виде
void f() throw()
{
throw 1;
}
Если человек не знает, что под собой подразумевает запись throw() то он просто не понимает что он пишет или что у него в проекте написано.
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>>Спасибо заранее
C>1) Отличия структуры от класса C>2) vector<bool> почему нельзя? C>3) vector<auto_ptr<T>> почему нельзя? C>4) что произойдет C>
C>void f() throw() {
C> throw 1;
C>}
C>
А почему нельзя
vector<bool>?
А
vector<auto_ptr<T>>
нельзя из-за "права собственности" — это ясно и коню.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Здравствуйте, Какая разница, Вы писали:
КР>Здравствуйте, Аноним, Вы писали:
А>>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>>Спасибо заранее
КР>Меня спросил что это такое?
КР>
КР>int i(0);
КР>
КР>Я долго думал какие подвохи мне подготовили ? КР>Потом ответил КР>После чего интервьювер сказал Хорошо КР>На этом все закончилось
Правильно. Такие вопросы и надо задавать. А то понапридумывают там всяких мега-шаблонов...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
А>>>Кстати, твой факториал глупо применять и для n>=13
_>>А у меня работает, может пора сменить компилятор и платформу?
А>
А>unsigned int res = factorial<13>::value;
А>
А>Visual C++ .Net 2003 по праву выдает: А>
А>warning C4307: '*' : integral constant overflow
А>Процессор у меня все еще 32-ти разрядный, но менять его пока не собираюсь
а gcc 4.1 прекрасно справляется, его придел по-моему 500, правда его можно изменить из командной строки.
Здравствуйте, Vanger84, Вы писали:
V>опять же меня сильно выбивает из клеи когда мне дают на собеседовании задание а я сним не справляюсь (может это моя проблема), но я точно знаю что сидел бы я за компом с кружкой кофе яб решил эту проблему.....
Но с другой стороны допустим ты справился со всеми заданиями с блеском, выходишь и
думаешь: "Черт возьми, меня точно возьмут, как я их...". И через две недели приходит письмо
с отказом или вообще ничего не приходит.
Здравствуйте, Vanger84, Вы писали:
V>Как ты считаеш я удачно прошел первый этап?!
Для первого этапа существует только оценка "завалил", "не завалил",
ты не "завалил", но кто знает возможно позже во время обсуждения таких
отвлеченных тем как "реализация виртуальных методов" в разных компиляторах,
я пойму что мы не можем работать вместе.
V>и кстате у тебя есть придложение по работе?
Есть, но только в последнее время из требования "программист C/C++", C++
улетучилась и добавился ряд специфичных технологий, так что...
Здравствуйте, Аноним, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А мне больше всего понравился вопрос типа-
Вот у нас есть два проекта — один написание некоего протокола для работы по СОМ порту с некоим девайсом
второй — поддержка виртуального казино на Тайване.... Чем хотите заняться?
Что я тогда ответил не скажу (давно это было) ... Но только несколько позже понял подводный смыс этого вопроса...
Думаю с помощью наводящих вопросов можно выснить гораздо больше информации.
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>Спасибо заранее
Здравствуйте, AndrewJD, Вы писали:
AJD>Здравствуйте, mr_jek, Вы писали:
_>>а gcc 4.1 прекрасно справляется, его придел по-моему 500, правда его можно изменить из командной строки.
AJD>У тебя int скольки разрядный?
Это зависит от параметров компиляции, если "-mint64", то 64 битный.
~> uname -a
Linux 2.6.x #1 SMP Fri Jul 2 ... ppc64 ppc64 ppc64 GNU/Linux
Re[12]: Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 09:35
Оценка:
Здравствуйте, mr_jek, Вы писали:
_>а gcc 4.1 прекрасно справляется, его придел по-моему 500, правда его можно изменить из командной строки.
Ну если gcc еще поместит 500! в 64-битный int, то вопросов нету
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
_>>а gcc 4.1 прекрасно справляется, его придел по-моему 500, правда его можно изменить из командной строки.
А>Ну если gcc еще поместит 500! в 64-битный int, то вопросов нету
Нет, здесь я имел ввиду не переполнение целого, а переполнение стека компилятора.
Здравствуйте, mr_jek, Вы писали:
_>Здравствуйте, Vanger84, Вы писали:
V>>опять же меня сильно выбивает из клеи когда мне дают на собеседовании задание а я сним не справляюсь (может это моя проблема), но я точно знаю что сидел бы я за компом с кружкой кофе яб решил эту проблему.....
_>Но с другой стороны допустим ты справился со всеми заданиями с блеском, выходишь и _>думаешь: "Черт возьми, меня точно возьмут, как я их...". И через две недели приходит письмо _>с отказом или вообще ничего не приходит.
не понел к чему это ты, хм.. если я справился с блеском то почему меня не взяли на работу?!... и вообще как бы солидные компании должны! просто обязаны отвечать как можно скорее иначе они рискую либо потерять работника либо уважение! некоторые солидные компания предоставляют отчет собеседования что им не понравилось и если было тестовое задание то еще и сделают коменты к строчкам кода
так что берите пример!
Re[3]: Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 09:52
Оценка:
нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
Re[2]: Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 09:56
Оценка:
Здравствуйте, mukos, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
А>>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
M>А мне больше всего понравился вопрос типа- M>Вот у нас есть два проекта — один написание некоего протокола для работы по СОМ порту с некоим девайсом M>второй — поддержка виртуального казино на Тайване.... Чем хотите заняться?
M>Что я тогда ответил не скажу (давно это было) ... Но только несколько позже понял подводный смыс этого вопроса... M>Думаю с помощью наводящих вопросов можно выснить гораздо больше информации.
А>>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>>Спасибо заранее
я бы ответил что и тем и тем интересно.... задав попутно много вопросов в чем будет заключатся работа...
а где подводные камни и почему именно в Тайване?? типо язык надо знать или че...
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Vanger84, Вы писали:
V>>Здравствуйте, creatman, Вы писали:
C>>>Здравствуйте, Vanger84, Вы писали:
V>>>>хм... я согласен минимум на 1300$ на исп срок, в Мск... но я и не позиционирую себя на junior
C>>>Если ты позиционируешь себя выше чем junior и просишь соответствующую ЗП, то и требования к тебе будут выше. И вопросы на собеседование будут не про то умеешь ли ты читать или нет, а скорее на знание тонкостей языка. Потому как задавая общие вопросы трудно отделить действительно специалиста от начинающего программиста.
V>>интересно какие вы тонкости языка используете в проекте?!...
C>например в упрощенном виде
C>
C>void f() throw()
C>{
C> throw 1;
C>}
C>
C>Если человек не знает, что под собой подразумевает запись throw() то он просто не понимает что он пишет или что у него в проекте написано.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
_>>Здравствуйте, Vanger84, Вы писали:
V>>>опять же меня сильно выбивает из клеи когда мне дают на собеседовании задание а я сним не справляюсь (может это моя проблема), но я точно знаю что сидел бы я за компом с кружкой кофе яб решил эту проблему.....
_>>Но с другой стороны допустим ты справился со всеми заданиями с блеском, выходишь и _>>думаешь: "Черт возьми, меня точно возьмут, как я их...". И через две недели приходит письмо _>>с отказом или вообще ничего не приходит.
А>не понел к чему это ты, хм.. если я справился с блеском то почему меня не взяли на работу?!...
Например потому, что на данную позицию ищут 1 человека, а людей блестяще решивших все задачи 10.
А>и вообще как бы солидные компании должны! просто обязаны отвечать как можно скорее иначе они рискую либо потерять работника либо уважение!
Обычно как раз наоборот. Большие компании могут себе позволить упустить работника, далеко ходить не надо, можно посмотреть на Microsoft, Google.
А вот с небольшими компаниями совсем другое дело. Тем хочется именно найти человека, а не винтик. Если в компании всего 5 человек, то их естественно больше волнует кто будет 6-ым, а тех кого и так 1000 гораздо меньше волнует кто будет 1001-м.
А>некоторые солидные компания предоставляют отчет собеседования что им не понравилось и если было тестовое задание то еще и сделают коменты к строчкам кода
Эх, вот бы все так. Но боюсь у компаний нет времени, чтобы отвечать так подробно кандидату непрошедшему собеседование и соответственно выпавшему из поля зрения компании.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mukos, Вы писали:
M>>Здравствуйте, Аноним, Вы писали:
А>>>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
M>>А мне больше всего понравился вопрос типа- M>>Вот у нас есть два проекта — один написание некоего протокола для работы по СОМ порту с некоим девайсом M>>второй — поддержка виртуального казино на Тайване.... Чем хотите заняться?
M>>Что я тогда ответил не скажу (давно это было) ... Но только несколько позже понял подводный смыс этого вопроса... M>>Думаю с помощью наводящих вопросов можно выснить гораздо больше информации.
А>>>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>>>Спасибо заранее
А>а где подводные камни и почему именно в Тайване?? типо язык надо знать или че...
Ну по моему мнению — человек пытаясь получить работу береться за то в чем уверен-
т.е. написать какойто протокол для сом порта уже конкретная вещь и имеешь представление
о том как его реализовать, или хотябы напрвлении (если он конечно практикующий программист).
А какаято там неконкретная поддержка какогото там абстрактного казино вроде как абстракция,
и если человек не может работать с конкретикой он стремиться к абстракции (т.е. типа как нибудь вывернусь).
А>я бы ответил что и тем и тем интересно.... задав попутно много вопросов в чем будет заключатся работа...
И вот как раз по этим вопросам можно многое и прояснить
Человек сам будет Вас наводить на вопросы которые ему можно (нужно ) задать.
А если человек не спрашивает , значит он ничего не знает —
ибо чтобы правильно задать вопрос надо знать 2/3 ответа
Не уверен что все доступно объяснил , но надеюсь что основная идея ясна.
Здравствуйте, Vanger84, Вы писали:
V>Здравствуйте, creatman, Вы писали:
C>>Здравствуйте, Аноним, Вы писали:
А>>>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
А>>>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
А>>>Спасибо заранее
C>>Еще один хороший и стандартный вопрос на понимание того как объект конструируется:
C>>"Напишите компелябельный код для вызова чистовиртуальной функции"
V>хы... даже я задумался писать код!
А вот и код:
class ABC
{
public:
virtual void func() = 0 { cout << "I'm Pure Virtual" << endl;};
};
class BCD : public ABC
{
public:
virtual void func() { cout << "I'm not Pure Virtual" << endl;};
void func2() {ABC::func();};
};
int main(int argc, char* argv[])
{
BCD b;
b.func2();
}
"If everything seems under control, you're just not going fast enough"
Re[4]: Вопросы для интеврью
От:
Аноним
Дата:
27.07.06 10:43
Оценка:
Здравствуйте, Аноним, Вы писали:
А>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
А это что?
/ CLASS vector_bool
template<class _Alloc>
class vector<_Bool, _Alloc>
: public _Container_base
{ // varying size array of bits
Здравствуйте, AndrewJD, Вы писали:
AJD>Здравствуйте, creatman, Вы писали:
C>>2) vector<bool> почему нельзя? AJD>C какой это радости нельзя?
vector<bool> можно, но то ли для оптимизации размещения элементов, то ли еще для чего-то, в поставляемой STL должна быть предусмотрена специализация класса vector для элементов типа bool.
Вот несколько выдержек из стандарта:
23.2.4 Class template vector [lib.vector]
1 A vector is a kind of sequence that supports random access iterators. In addition, it supports (amortized) constant time
insert and erase operations at the end; insert and erase in the middle take linear time. Storage management is handled
automatically, though hints can be given to improve efficiency. The elements of a vector are stored contiguously,
meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n]
== &v[0] + n for all 0 <= n < v.size().
23.2.5 Class vector<bool> [lib.vector.bool]
1 To optimize space allocation, a specialization of vector for bool elements is provided:
namespace std {
template < class Allocator > class vector <bool , Allocator > {
// ...
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, Аноним, Вы писали:
А>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
Ну что значит нельзя. Можно, но с оглядкой на все отличия vector<bool> от vector<T>.
в задании небыло указано должен код соответствовать стандарту или нет.
было только: "Напишите компелябельный код для вызова чистовиртуальной функции"
Что я с успехом и продемонстрировал
"If everything seems under control, you're just not going fast enough"
Здравствуйте, Jonathan, Вы писали:
J>в задании небыло указано должен код соответствовать стандарту или нет. J>было только: "Напишите компелябельный код для вызова чистовиртуальной функции" J>Что я с успехом и продемонстрировал
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, Vanger84, Вы писали:
V>>а дай пожалуйсто ответ на этот вопрос...
S>См. стандарт 15.4
S>
S>15.4/8
S>Whenever an exception is thrown and the search for a handler (15.3) encounters the outermost block of a
S>function with an exception-specification, the function unexpected() is called (15.5.2) if the exceptionspecification
S>does not allow the exception.[Example:
S>class X { };
S>class Y { };
S>class Z: public X { };
S>class W { };
S>void f() throw (X, Y)
S>{
S>int n = 0;
S>if (n) throw X(); // OK
S>if (n) throw Z(); // also OK
S>throw W(); // will call unexpected()
S>}
S>—end example]
S>15.4/9
S>The function unexpected() may throw an exception that will satisfy the exception-specification for
S>which it was invoked, and in this case the search for another handler will continue at the call of the function
S>with this exception-specification (see 15.5.2), or it may call terminate().
S>15.4/11
S>A function with no exception-specification allows all exceptions. A function with an empty exceptionspecification,
S>throw(), does not allow any exceptions.
S>Кроме этого есть S>
S>15.5.1 The terminate() function
S>...
S>15.5.2 The unexpected() function
S>...
S>которые тоже можно глянуть
я попросил дать ответ не потомучто незнаю а потомучто хотел узнать как именно он был дал ответ на этот вопрос на собеседовании те не дают стандарт C++ чтобы ты в нем искал ответ! тебя спрашивают а ты сам должен сформулировать ответ....
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, Аноним, Вы писали:
А>>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
_DA>Ну что значит нельзя. Можно, но с оглядкой на все отличия vector<bool> от vector<T>.
ну можно все если это оправдоно, есть просто вещи не входящии в состав стандарта.... вот vector<bool> не входит в стандарт
Здравствуйте, Vanger84, Вы писали:
V>Здравствуйте, _DAle_, Вы писали:
_DA>>Здравствуйте, Аноним, Вы писали:
А>>>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
_DA>>Ну что значит нельзя. Можно, но с оглядкой на все отличия vector<bool> от vector<T>.
V>ну можно все если это оправдоно, есть просто вещи не входящии в состав стандарта.... вот vector<bool> не входит в стандарт
А может сначала открыть этот самый стандарт, а потом уже что-то утверждать?
23.2.5 Class vector<bool>
To optimize space allocation, a specialization of vector for bool elements is provided:
...
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, Vanger84, Вы писали:
V>>Здравствуйте, _DAle_, Вы писали:
_DA>>>Здравствуйте, Аноним, Вы писали:
А>>>>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
_DA>>>Ну что значит нельзя. Можно, но с оглядкой на все отличия vector<bool> от vector<T>.
V>>ну можно все если это оправдоно, есть просто вещи не входящии в состав стандарта.... вот vector<bool> не входит в стандарт
_DA>А может сначала открыть этот самый стандарт, а потом уже что-то утверждать?
_DA>
_DA>23.2.5 Class vector<bool>
_DA>To optimize space allocation, a specialization of vector for bool elements is provided:
_DA>...
хм... может я ошибаюсь в книжке Майерса черным по белому написано что он не является стандартом??
Здравствуйте, Vanger84, Вы писали:
V>Здравствуйте, _DAle_, Вы писали:
_DA>>Здравствуйте, Vanger84, Вы писали:
V>>>Здравствуйте, _DAle_, Вы писали:
_DA>>>>Здравствуйте, Аноним, Вы писали:
А>>>>>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
_DA>>>>Ну что значит нельзя. Можно, но с оглядкой на все отличия vector<bool> от vector<T>.
V>>>ну можно все если это оправдоно, есть просто вещи не входящии в состав стандарта.... вот vector<bool> не входит в стандарт
_DA>>А может сначала открыть этот самый стандарт, а потом уже что-то утверждать?
_DA>>
_DA>>23.2.5 Class vector<bool>
_DA>>To optimize space allocation, a specialization of vector for bool elements is provided:
_DA>>...
V>хм... может я ошибаюсь в книжке Майерса черным по белому написано что он не является стандартом??
Я к сожалению Майерса не читал, но думаю, что там написано, что vector<bool> не удовлетворяет требованиям, предъявляемым к стандартным контейнерам. Но он не мог написать, что его нет в стандарте.
Кстати, я там еще выше видел
я знаю что такое auto_ptr но видь он запрещен стандартом (и правильно)
auto_ptr не запрещен стандартом, просто нельзя использовать auto_ptr в стандартных контейнерах.
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, Jonathan, Вы писали:
J>>в задании небыло указано должен код соответствовать стандарту или нет. J>>было только: "Напишите компелябельный код для вызова чистовиртуальной функции" J>>Что я с успехом и продемонстрировал
S>Настолько Вы со мной несогласны, что даже в виде минуса выразили, чтож, не поленитесь, S>гляньте сюда Что такое ill-formed код ? ill-formed == UB ?
Здравствуйте, Vanger84, Вы писали:
V>ну можно все если это оправдоно, есть просто вещи не входящии в состав стандарта.... вот vector<bool> не входит в стандарт
Что значит не входит в стандарт, про него там отдельная глава
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Напиши код который соответствует стандарту и компилируется любым компилятором. Я думаю это уточнение можно будет добавить без проблем на собеседовании.
Здравствуйте, Vanger84, Вы писали:
V>Здравствуйте, srggal, Вы писали:
S>>Здравствуйте, Vanger84, Вы писали:
V>>>а дай пожалуйсто ответ на этот вопрос...
S>>См. стандарт 15.4
S>>
S>>15.4/8
S>>Whenever an exception is thrown and the search for a handler (15.3) encounters the outermost block of a
S>>function with an exception-specification, the function unexpected() is called (15.5.2) if the exceptionspecification
S>>does not allow the exception.[Example:
S>>class X { };
S>>class Y { };
S>>class Z: public X { };
S>>class W { };
S>>void f() throw (X, Y)
S>>{
S>>int n = 0;
S>>if (n) throw X(); // OK
S>>if (n) throw Z(); // also OK
S>>throw W(); // will call unexpected()
S>>}
S>>—end example]
S>>15.4/9
S>>The function unexpected() may throw an exception that will satisfy the exception-specification for
S>>which it was invoked, and in this case the search for another handler will continue at the call of the function
S>>with this exception-specification (see 15.5.2), or it may call terminate().
S>>15.4/11
S>>A function with no exception-specification allows all exceptions. A function with an empty exceptionspecification,
S>>throw(), does not allow any exceptions.
S>>Кроме этого есть S>>
S>>15.5.1 The terminate() function
S>>...
S>>15.5.2 The unexpected() function
S>>...
S>>которые тоже можно глянуть
V>я попросил дать ответ не потомучто незнаю а потомучто хотел узнать как именно он был дал ответ на этот вопрос на собеседовании те не дают стандарт C++ чтобы ты в нем искал ответ! тебя спрашивают а ты сам должен сформулировать ответ....
Какая разница как бы дал его я. Я думаю тебе бы это вобще никакой информации бы не дало. Поскольку ты не интервьювер а я не на собеседовании. И даже если бы я не знал ответа то легко его нашел бы используя Google. А вот если бы ты сам написал сюда свой ответ, я думаю для тебя бы было больше пользы, может какие-нибудь для себя советы получил.
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Vanger84, Вы писали:
V>>Здравствуйте, srggal, Вы писали:
S>>>Здравствуйте, Vanger84, Вы писали:
V>>>>а дай пожалуйсто ответ на этот вопрос...
S>>>См. стандарт 15.4
S>>>
S>>>15.4/8
S>>>Whenever an exception is thrown and the search for a handler (15.3) encounters the outermost block of a
S>>>function with an exception-specification, the function unexpected() is called (15.5.2) if the exceptionspecification
S>>>does not allow the exception.[Example:
S>>>class X { };
S>>>class Y { };
S>>>class Z: public X { };
S>>>class W { };
S>>>void f() throw (X, Y)
S>>>{
S>>>int n = 0;
S>>>if (n) throw X(); // OK
S>>>if (n) throw Z(); // also OK
S>>>throw W(); // will call unexpected()
S>>>}
S>>>—end example]
S>>>15.4/9
S>>>The function unexpected() may throw an exception that will satisfy the exception-specification for
S>>>which it was invoked, and in this case the search for another handler will continue at the call of the function
S>>>with this exception-specification (see 15.5.2), or it may call terminate().
S>>>15.4/11
S>>>A function with no exception-specification allows all exceptions. A function with an empty exceptionspecification,
S>>>throw(), does not allow any exceptions.
S>>>Кроме этого есть S>>>
S>>>15.5.1 The terminate() function
S>>>...
S>>>15.5.2 The unexpected() function
S>>>...
S>>>которые тоже можно глянуть
V>>я попросил дать ответ не потомучто незнаю а потомучто хотел узнать как именно он был дал ответ на этот вопрос на собеседовании те не дают стандарт C++ чтобы ты в нем искал ответ! тебя спрашивают а ты сам должен сформулировать ответ....
C>Какая разница как бы дал его я. Я думаю тебе бы это вобще никакой информации бы не дало. Поскольку ты не интервьювер а я не на собеседовании. И даже если бы я не знал ответа то легко его нашел бы используя Google. А вот если бы ты сам написал сюда свой ответ, я думаю для тебя бы было больше пользы, может какие-нибудь для себя советы получил.
Я думаю тебе бы это вобще никакой информации бы не дало. \\ просто одно одело беседовать со знающим человеком который может быть тебя на несколько порядков выше а другое дело беседовать с junior который тока понтуется... соответственно и строится беседа.
Самое тупое занятие это беседовать с интервьювером который умеет тока задавать вопросы а ответы на них не знает.... так у меня и получилось 2 конторы мне задали вопрос что такое Абстрактный класс я естественно ответил они сказали что я не прав и не стали дальше обсуждать! и причем на мой вопрос "И что же по вашему такое абстрактный класс?" в одной конторе мне намекнули что не прелично у них спрашивать а вдругой медленно но верно дали определение интерфейса!
P.S.
мой ответ дословно "Абстрактный класс это класс которые имеет хотябы один чисто виртуальный метод"
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, Vanger84, Вы писали:
V>>Здравствуйте, _DAle_, Вы писали:
_DA>>>Здравствуйте, Vanger84, Вы писали:
V>>>>Здравствуйте, _DAle_, Вы писали:
_DA>>>>>Здравствуйте, Аноним, Вы писали:
А>>>>>>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
_DA>>>>>Ну что значит нельзя. Можно, но с оглядкой на все отличия vector<bool> от vector<T>.
V>>>>ну можно все если это оправдоно, есть просто вещи не входящии в состав стандарта.... вот vector<bool> не входит в стандарт
_DA>>>А может сначала открыть этот самый стандарт, а потом уже что-то утверждать?
_DA>>>
_DA>>>23.2.5 Class vector<bool>
_DA>>>To optimize space allocation, a specialization of vector for bool elements is provided:
_DA>>>...
V>>хм... может я ошибаюсь в книжке Майерса черным по белому написано что он не является стандартом??
_DA>Я к сожалению Майерса не читал, но думаю, что там написано, что vector<bool> не удовлетворяет требованиям, предъявляемым к стандартным контейнерам. Но он не мог написать, что его нет в стандарте.
_DA>Кстати, я там еще выше видел _DA>
_DA>я знаю что такое auto_ptr но видь он запрещен стандартом (и правильно)
_DA>auto_ptr не запрещен стандартом, просто нельзя использовать auto_ptr в стандартных контейнерах.
Текст из книжки (Майерса стр. 80) по поводу vector<bool>
vector<bool> как контейнер STL обладает лишь двумя недостатками. Вопервых это вообще не контейнер STL. Во вторых он не содержит bool.
Объект не становится контейнером STL только потому, что кто-то назвал его таковым — он становится контейнером STL лишь при соблюдении всех требований, изложенных в разделе 23.1 Стандарт С++.
Текст из книжки (Майерса стр. 48) по поводу auto_ptr
Совет 8. Никогда не создавайте контейнеры содержацие auto_ptr
Контейнеры auto_ptr (COAP, Containers Of Auto_Ptr) запрещены, а программа, которая попытается их использовать не будет компилироватся. Комитет по стандартизации С++ пролижил неслыханные усилия в этои направлении.
P.S.
А скижите пожайлусто еще почему нельзя делать vector<auto_ptr<t>> надеюсь прикол не в закрытом конструкторе по умолчанию?
Здравствуйте, Vanger84, Вы писали:
V>Текст из книжки (Майерса стр. 48) по поводу auto_ptr
V>Совет 8. Никогда не создавайте контейнеры содержацие auto_ptr
V>Контейнеры auto_ptr (COAP, Containers Of Auto_Ptr) запрещены, а программа, которая попытается их использовать не будет компилироватся. Комитет по стандартизации С++ пролижил неслыханные усилия в этои направлении.
V>P.S. V>А скижите пожайлусто еще почему нельзя делать vector<auto_ptr<t>> надеюсь прикол не в закрытом конструкторе по умолчанию?
Это потому, что
An auto_ptr is a pointer that serves as owner of the object to which it refers (if any). As a result, an object gets destroyed automatically when its auto_ptr gets destroyed. A requirement of an auto_ptr is that its object has only one owner.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Здравствуйте, <Аноним>, Вы писали:
А>>>и радуемся, как загибается компилятор...
Тут библиотека должна содержать либо контроль входных параметров, либо дисклаймер: "не передавайте в strlen NULL, не ищите факториал отрицательных чисел".
_>>и в чем ваше возражение?
_>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>Глупо вообще вычислять факториал рекурсивно. А>Рерсия на шаблонах имеет очень ограниченное применение и потому на обычном интервью такие вопросы не нужны.
Некоторые бустовские библиотеки (tuple, например) реализованы на списочных структурах — а тут без рекурсии никуда не деться.
Так что для общего развития — полезно
А>Гораздо важнее понимает ли человек рекурсию воообще. А>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
Как раз полезно для понимания.
ФП-языки, как правило, дружелюбны к линейной рекурсии и оптимизируют концевую рекурсию. А на С++ с этим облом (хотя есть способ...)
Вот более-менее рабочий код с логарифмической рекурсией (правда, сообщения об ошибках невнятны — но это можно доработать)
template<int N> struct fact;
template<int N, bool valid> struct fact1;
template<int N, int K> struct fact2; // N*(N+1)*...*(N+K-1)template<int N> struct fact { enum { value=fact1<N,(N>=0)>::value }; };
template<int N> struct fact1<N,true> { enum { value=fact2<1,N>::value }; };
template<int N> struct fact2<N,1> { enum { value=N }; };
template<int N> struct fact2<N,0> { enum { value=1 }; };
template<int N, int K> struct fact2 { enum { value=fact2<N,K/2>::value*fact2<N+K/2,K-K/2>::value }; };
template<bool v> struct test;
template<> struct test<true> {};
template<int N, int F> struct testfact : test< fact<N>::value==F > {};
template<int N> struct runfact : test< fact<N>::value!=0 > {};
testfact<0,1> t0;
testfact<1,1> t1;
testfact<5,120> t5;
//testfact<-1,1> tminus; // error: нет такого факториала - проверяем, ловит ли библиотека ошибки входных параметров
//testfact<5,121> tfault; // error: N! не равно F - проверяем, ловит ли наш тестер возможные ошибки
testfact<10, fact<9>::value*10> t10;
runfact<12> t12; // просто убеждаемся, что досюда он считает
//runfact<13> t13fault; // а досюда - уже нет
Здравствуйте, Ubivetz, Вы писали:
U>Здравствуйте, Vanger84, Вы писали:
V>>Текст из книжки (Майерса стр. 48) по поводу auto_ptr
V>>Совет 8. Никогда не создавайте контейнеры содержацие auto_ptr
V>>Контейнеры auto_ptr (COAP, Containers Of Auto_Ptr) запрещены, а программа, которая попытается их использовать не будет компилироватся. Комитет по стандартизации С++ пролижил неслыханные усилия в этои направлении.
V>>P.S. V>>А скижите пожайлусто еще почему нельзя делать vector<auto_ptr<t>> надеюсь прикол не в закрытом конструкторе по умолчанию? U>Это потому, что U>
U>An auto_ptr is a pointer that serves as owner of the object to which it refers (if any). As a result, an object gets destroyed automatically when its auto_ptr gets destroyed. A requirement of an auto_ptr is that its object has only one owner.
это язнал но понел тока сейчас..... типо когда мы попытаемся взять из контейнера auto_ptr он удалится в контейнере так?
Здравствуйте, ekamaloff, Вы писали:
E>vector<bool> можно, но то ли для оптимизации размещения элементов, то ли еще для чего-то, в поставляемой STL должна быть предусмотрена специализация класса vector для элементов типа bool.
E>Вот несколько выдержек из стандарта:
E>
E>23.2.4 Class template vector [lib.vector]
E>1 A vector is a kind of sequence that supports random access iterators. In addition, it supports (amortized) constant time
E>insert and erase operations at the end; insert and erase in the middle take linear time. Storage management is handled
E>automatically, though hints can be given to improve efficiency. The elements of a vector are stored contiguously,
E>meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n]
E>== &v[0] + n for all 0 <= n < v.size().
E>
Вопрос к Степанову: почему нельзя было просто завести класс bool_vector с нужными характеристиками?... Загадка.
Здравствуйте, Centaur, Вы писали:
C>У нас просили решить несколько задачек.
C>Задачка первая: есть строка, её надо извернуть задом наперёд, не выделяя много дополнительной памяти. Смотреть на то, какой тип/класс претендент использует для строки; решает через индексы, указатели или итераторы; как делает swap. Грамотный программист на C++ должен в первую очередь сказать «std::reverse» и приступить к решению только тогда, когда ему скажут, что «+1, но мы хотим посмотреть, как Вы реализуете аналогичный алгоритм»
C>Задачка вторая: даны два множества целых чисел, представлены сортированными массивами. Найти их объединение (вариант: пересечение), в том же представлении.
можно поинтересоваться, как бы Вы оценили вот такие решения ваших задач ?
я позволил себе опустить некоторые проверки при решении.
1) реверс с указателями
char * str_reverse( char * str )
{
char temp = 0;
char * b = str, * e = str + strlen( str ) - 1;
while( b <= e )
//std::swap( *b++, *e-- ); // самый очевидный вариант для меня
//(*b++ = ( temp = *b, *e )), *e-- = temp; // за такое наверно можно и по шее схлопотать =)
{
temp = *b;
*b++ = *e;
*e-- = temp;
}
return str;
}
void test_str_reverse()
{
char str[] = {"hello world !"};
std::cout << str << std::endl;
std::cout << str_reverse( str ) << std::endl;
}
2) пересечение массивов через указатели. предполагал, что отсортированы по возрастанию, возможно с повторяющимися элементами.
для простоты предполагал, что массивы одной длинны. обьединение у меня получилось еще более наивной и громоздкой, потому не стал показывать.
template < int size >
void print_array( int (&array)[size], int print_size = size )
{
for( int ii = 0; ii < print_size; ++ii )
std::cout << array[ii] << " ";
std::cout << "\n";
}
void arrays_intr( const int *ar1, const int *ar2, int *res, const int size, int *res_size )
{
const int *ar1_end = ar1 + size, *ar2_end = ar2 + size;
*res_size = 0;
while( ar1 < ar1_end && ar2 < ar2_end )
{
if ( *ar1 == *ar2 )
{
if ( (*res_size) == 0 || *(res - 1) != *ar1 )
{
*res++ = *ar1;
++(*res_size);
}
++ar1;
++ar2;
}
else
{
*ar1 > *ar2 ? ++ar2 : ++ar1;
}
}
}
void test_arrays()
{
int ar1[] = { 1, 2, 3, 5, 5, 71 };
int ar2[] = { 0, 1, 2, 3, 4, 5 };
const int size = sizeof( ar1 ) / sizeof( ar1[0] );
int res_intr[ size ] = {0};
int res_size = 0;
print_array( ar1 );
print_array( ar2 );
arrays_intr( ar1, ar2, res_intr, size, &res_size );
print_array( res_intr, res_size );
}
да, и сколько времени Вы бы дали на решение задач ?
Здравствуйте, creatman, Вы писали:
C>Здравствуйте, Jonathan, Вы писали:
J>>в задании небыло указано должен код соответствовать стандарту или нет.
C>Если он ему не соответствует вы не прошли собеседование.
У H.Sutter прошел бы
Смотри пример:
"This is the original GotW problem and solution substantially as posted to Usenet. See the book More Exceptional C++ (Addison-Wesley, 2002) for the most current solution to this GotW issue. The solutions in the book have been revised and expanded since their initial appearance in GotW. The book versions also incorporate corrections, new material, and conformance to the final ANSI/ISO C++ standard."
Здравствуйте, Amouse, Вы писали:
A>Здравствуйте, creatman, Вы писали:
C>>Вобще один мой друг (очень хороший специалист со стажем уже более 8-ми лет) на собеседовании ведет себя примерно так:
C>>Когда ему начинают задавать вопросы по типу хитроумных, на знание стандарта, он отвечает просто "Ребята вы меня грузите, я могу вас сам щас загрузить так, что вы усомнитесь в себе как в специалистах. Вот вы мне задали задачку ....., хорошо я её решу, но прежде чем я начну решать задачу я дам вам свою задачу", тут он пишет свою задачку на листке и протягивает её интервьюверу со словами "Если вы не решаете эту задачу, то я сомневаюсь в вашей достаточной квалификации и не собераюсь работать в вашей компании с бездарностями". Самое смешное, что один раз когда он собеседовался, интервьювер так и не решил его задачу (то был тим лидер крупной софтовой компании). А второй раз все дружно посмеялись и прекратили собеседование
C>>ИМХО это правильный подход. Собеседование это не тест а диалог. И ты вправе проверить квалификацию сотрудников компании если у тебя есть сомнения.
A>неправильное поведение на собеседовании, A>логики в таком поведении нет, A>есть только, уж простите за психоанализ, внутреннее недовольство, что это его собеседуют, а не он.
Видишь ли в чем дело, по тому какой вопрос задаст интервьюируемый тоже можно судить о его уровне
(да и вообще вопросы — это повод для разговора).
Умный интервьюер это поймет и оценит.
Здравствуйте, Jonathan, Вы писали:
J>скомпилируй в VC++ 6.0
В Visual C++ используется язык довольно похожий на стандартный C++,
но все же не его нельзя назвать С++. Это "C++. MS VC++ 6.0 edition".
Он вообще славен своими косяками. Никому не рекомендую.
Здравствуйте, mr_jek, Вы писали:
_>Здравствуйте, Vanger84, Вы писали:
V>>знаеш что реально показывает этот вопрос! это то что читал ли соискатель статью где реализаваг факториал или нет! 100% с ходу не кто не напишет это! можете проверить на своих колегах!
_>Кстати, после прочтения "Александреску" такая задача решается на ура, _>проверено на 3 "коллегах", правда есть зависимость от того как давно испытуемый _>читал что-то подобное, но как я говорил решать вообще не обязательно
Видимо это характеризует задачу как жутко полезную ??
Здравствуйте, Amouse, Вы писали:
A>неправильное поведение на собеседовании, A>логики в таком поведении нет, A>есть только, уж простите за психоанализ, внутреннее недовольство, что это его собеседуют, а не он.
Почему ты решил что это его собеседуют ? А не он собеседует кандидатов на будущих работодателей ?.
Здравствуйте, <Аноним>, Вы писали:
А>нельзя так как он не отвчает требованием выдвинутым к контейнеру vector так что незя, подробнее можеш прочитать в книжке Маерса STL эфективное использование у него прям глава такая есть помоему
Показать наивную реализацию сложения строк на C, попросить оценить сложность , попросить улучшить асимптотику ?
Преимущества хеш таблиц перед бинарными деревьями и наоборот ?
Схематично реализовать планировщик задач кторый имеет линейную сложность от к-ва задач.
Мне всегда казалось это намного полезные вещи ?
Я встречал код где люди ЧЕСНО полагали что использование char* (извлекаемое из std::string) и далее работа с низкоуровневыми функциями УСКОРИТ программу.
Хотя мне порой кажется что я устарел , это теперь мало кого интересует ..
Здравствуйте, Андрей Хропов, Вы писали:
АХ>Здравствуйте, Jonathan, Вы писали:
J>>скомпилируй в VC++ 6.0
АХ>В Visual C++ используется язык довольно похожий на стандартный C++, АХ> но все же не его нельзя назвать С++. Это "C++. MS VC++ 6.0 edition". АХ> Он вообще славен своими косяками. Никому не рекомендую.
А чем еще можно пользоватся на Windows в серъезном проекте?
(поделки от багланда не в счет)
"If everything seems under control, you're just not going fast enough"
: то, что специализировано два значения, наталкивает на мысль, что воспроизведен по памяти гибрид факториала и чисел Фибоначчи. Таким образом, "простейший тест на знание шаблонов" показал, что был прочитан пример про числа Фибоначчи и человек знает, что такое факториал.
Здравствуйте, Roman Odaisky, Вы писали:
RO>можно я?
Спасибо за отзыв
Общая претензия насчет шаблонов и обобщенного программирования — я специально не стал пытаться создавать универсальные решения, предполагая что так оно будет проще, я ведь не претендовал на место =)) обобщить то не проблема, хотя конечно есть тонкие места )
общий стиль решений получился Сишный, потому и указатели вместо ссылок, и namespace std не используется. для выдержанности стиля так сказать
ADL — да, не подумал, это идея.
RO>Я бы засчитал попытку. Если понадобится, ты сможешь переделать это и с итераторами, и с std::basic_string. Наличие тестирующей проги — плюс. Еще какая тонкость — напиши тест перед основной функцией, и вообще начинай с него, а потом уже функция.
благодарю за поправку. я то писал в IDE, там конечно тест был сначала,потом уже решение.
кстати, а интервью как бы вы проводили ? на бумаге или в IDE ?
и насчет времени на такие задачи ? полчаса ? 20 минут ?
RO>В первую очередь нужно вспомнить о std::set_intersection.
но потом же все равно будет — "мы бы хотели посмотреть как вы решите эту задачу"
да. size_t вместо int — это мое упущение, виноват.
насчет ARRAY_LENGHT — ну я бы сказал, что код в 7- 10 строк для вычисления длинны массива, которая делается 1 раз — это выпендреж ) однако, удивить конечно можно
в итоге — достаточно позитивная оценка на мой взгляд, замечания справедливы, но не так страшны
вывод — шлифовать и практиковаться. на текущий момент C++/C это не основной язык моих задач, хотя любовь давняя =)
Здравствуйте, _Dreamer, Вы писали:
RO>>можно я? _D>Спасибо за отзыв _D>не стал пытаться создавать универсальные решения, предполагая что так оно будет проще [...]
Точно? Посмотри на свою версию set_intersection. Приходится возвращать количество значений по ссылке. STL-ный подход же — вернуть итератор, подвинутый на сколько надо. Проще и красивее.
_D>ADL — да, не подумал, это идея.
Собственно, вот такое:
template <class X>
void adl_swap(X& u, X& v)
{
using std::swap;
swap(u, v);
}
— всего лишь workaround для случая глупых девелоперов, разместивших swap в своем пространстве имен. Они должны были специализировать std::swap. (Впрочем, стандарт 98 года явно запрещал такую специализацию, так что, возможно, проблема в legacy-коде.)
_D>кстати, а интервью как бы вы проводили ? на бумаге или в IDE ?
Однозначно на бумаге. Я приводил здесь рядом статью Joel Spolski, так вот, тест на бумаге покажет в большей степени Smartness, тест на компе — Getting-Things-Done-ness. И то, и другое важно. Но в IDE все напишут идеальный strrev... только надо будет дописать (c) P. J. Plauger или в этом роде
_D>и насчет времени на такие задачи ? полчаса ? 20 минут ?
Ответ простой: не знаю. Есть вот еще такая абстрактная идея: может, заранее огласить определенное задание и требовать его выполненным идеально? С точки зрения эффективности, универсальности, Exception Safety, повторного использования кода, человекопонятности и т. п. Вот и видно будет, что человек умеет (в т. ч. и пользоваться Google ), и как он доводит дела до конца.
_D>насчет ARRAY_LENGHT — ну я бы сказал, что код в 7- 10 строк для вычисления длинны массива, которая делается 1 раз — это выпендреж ) однако, удивить конечно можно
Здравствуйте, Jonathan, Вы писали:
J>Здравствуйте, Андрей Хропов, Вы писали:
АХ>>Здравствуйте, Jonathan, Вы писали:
J>>>скомпилируй в VC++ 6.0
АХ>>В Visual C++ используется язык довольно похожий на стандартный C++, АХ>> но все же не его нельзя назвать С++. Это "C++. MS VC++ 6.0 edition". АХ>> Он вообще славен своими косяками. Никому не рекомендую.
J>А чем еще можно пользоватся на Windows в серъезном проекте? J>(поделки от багланда не в счет)
Я говорил про VC++ 6.0 (просто в первом предложении 6.0 пропустил).
В .NET 2003 и тем более 2005 все намного лучше.
Здравствуйте, Андрей Хропов, Вы писали:
АХ>Видишь ли в чем дело, по тому какой вопрос задаст интервьюируемый тоже можно судить о его уровне АХ>(да и вообще вопросы — это повод для разговора). АХ>Умный интервьюер это поймет и оценит.
тема конечно флеймовая, в общем спорить не буду, а только попрошу сказать, если это не секрет конечно,
в какую компанию устроился этот товарищ после такого собеседования,
жуть как интересно
U>>An auto_ptr is a pointer that serves as owner of the object to which it refers (if any). As a result, an object gets destroyed automatically when its auto_ptr gets destroyed. A requirement of an auto_ptr is that its object has only one owner.
V>это язнал но понел тока сейчас..... типо когда мы попытаемся взять из контейнера auto_ptr он удалится в контейнере так?
да, типа того
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Эх, люблю выпить и переспать с кем нибудь!
Но чаще выходит перепить с кем — нибудь и выспаться...
Здравствуйте, Vanger84, Вы писали:
V>Текст из книжки (Майерса стр. 80) по поводу vector<bool>
V>vector<bool> как контейнер STL обладает лишь двумя недостатками. Вопервых это вообще не контейнер STL. Во вторых он не содержит bool. V>Объект не становится контейнером STL только потому, что кто-то назвал его таковым — он становится контейнером STL лишь при соблюдении всех требований, изложенных в разделе 23.1 Стандарт С++.
Да, как я и говорил, утверждается, что vector<bool> не удовлетворяет требованиям, предъявляемым к стандартным контейнерам. Но тем не менее vector<bool> в стандарте есть и используется, если это необходимо.
V>Текст из книжки (Майерса стр. 48) по поводу auto_ptr
V>Совет 8. Никогда не создавайте контейнеры содержацие auto_ptr
V>Контейнеры auto_ptr (COAP, Containers Of Auto_Ptr) запрещены, а программа, которая попытается их использовать не будет компилироватся. Комитет по стандартизации С++ пролижил неслыханные усилия в этои направлении.
Заметь "Контейнеры auto_ptr", то есть контейнеры, содержащие auto_ptr, а не сам auto_ptr.
Здравствуйте, AndrewJD, Вы писали:
AJD>Здравствуйте, Андрей Хропов, Вы писали:
АХ>>В Visual C++ используется язык довольно похожий на стандартный C++, АХ>> но все же не его нельзя назвать С++. Это "C++. MS VC++ 6.0 edition". АХ>> Он вообще славен своими косяками. Никому не рекомендую.
AJD>Для своего времени это был весьма приличный компилятор. Много есть промышленных компиляторов которым больше 8 лет и они все еще используються?
Watcom C++ отличный компилятор и используется больше 8 лет.
Здравствуйте, Vanger84, Вы писали:
V>Самое тупое занятие это беседовать с интервьювером который умеет тока задавать вопросы а ответы на них не знает.... так у меня и получилось 2 конторы мне задали вопрос что такое Абстрактный класс я естественно ответил они сказали что я не прав и не стали дальше обсуждать! и причем на мой вопрос "И что же по вашему такое абстрактный класс?" в одной конторе мне намекнули что не прелично у них спрашивать а вдругой медленно но верно дали определение интерфейса!
И какой-же, по их мнению, был правильный ответ?
V>P.S. V>мой ответ дословно "Абстрактный класс это класс которые имеет хотябы один чисто виртуальный метод"
вот шикарное объяснение: http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F
Здравствуйте, Аноним, Вы писали:
А>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
Вопрос:
Представте, что вы должны проводить тестирование кандидата на должность C++ программиста и проверить его профессиональные навыки. Придумайте 5-6 вопросов (этот повторять не надо)...
Здравствуйте, last_hardcoder, Вы писали:
А>>Подскажите пожалуйста пять, шесть вопросов, которые бы дали понять, что человек понимает в С++. Не хочу задавать какие то каверзные вопросы из области фантастики (я честно говоря и сам не отвечу на такие). Просто хочу знать и видеть как человек видит вопрос и может найти решение.
_>Вопрос:
_>Представте, что вы должны проводить тестирование кандидата на должность C++ программиста и проверить его профессиональные навыки. Придумайте 5-6 вопросов (этот повторять не надо)...
Occasionally I interview C++ developers. I'm always interested in how people rate themselves, so I'll occasionally ask a candidate, "On a scale from one to ten, how do you rate your C++ skills?"
[…]
I mention this for two reasons -- first of all, my favourite question to ask the "I'm a nine out of ten" people actually came up in a real-life conversation today: OK, smartypants: what happens when a virtual base class destructor calls a virtual method overridden in the derived class? And how would you implement those semantics if you were designing the compiler?
[…]
Compared to Stanley Lippmann, I give myself a six.
Published Monday, December 01, 2003 9:58 PM by EricLippert
Philip Rieck said:
After the "I'm a nine", I always ask them "what question would you ask someone who was an 8.9 that they would have difficulty answering — just general subject is fine, but a specific question is great". The real nines have a question like (I normally tech .net) "what should you look out for when casting a structure to an interface and calling methods that modify the data". The non-nines say "Something about how inheritance works".
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, mr_jek, Вы писали:
_>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, mr_jek, Вы писали:
А>>>и радуемся, как загибается компилятор...
_>>и в чем ваше возражение?
_>>во-первых глупо вычислять n!, при n>33, резултат не влезет, тем более (UINT_MAX — 10)! _>>во-вторых это тест на понимание шаблонов, а не на вычисление (UINT_MAX — 10)!
А>Глупо вообще вычислять факториал рекурсивно. А>Рерсия на шаблонах имеет очень ограниченное применение А>и потому на обычном интервью такие вопросы не нужны. А>Гораздо важнее понимает ли человек рекурсию воообще. А>Это можно проверить дав ему нормальную задачу на рекурсивных структурах данных. А>А рекурсия на шаблонах — это всего лишь частный, очень неудачный, случай рекурсии вообще.
В каком смысле ограниченное. А как же всякие списки типов и генераторы иерархий? Вся mpl в бусте построена на рекурсии на этапе компляции
Здравствуйте, <Аноним>, Вы писали:
А>Завтра впервые в жизни буду проводить интвервью кандидатов на позицию С++ девелоперов. Понятния не имею, что спрашивать..
а какая специфика у ваших с++ разработчиков?
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Windows XP 5.1.2600.131072 ... абсолютная тишина