2. Заметки о сертификации Brainbench

Брейнбенч - это наиболее известная платная система онлайновой оценки знаний в разных областях науки и техники. Периодически ББ предоставляет возможность пройти некоторые тесты бесплатно (рекламные промо компании, спонсоршип, и т.д.). Язык тестирования - английский. Большинство тестов - информационные технологии. Типичный тест состоит из 40 вопросов по 3 мин. = 2 часа. Если правильные ответы составляют больше 31 из 40 (80%), сертификации присваивается MASTER уровень.

Мои результаты: http://www.brainbench.com/transcript.jsp?pid=5829617 .

Среди специалистов разного плана ведется "священный" спор, является ли ББ адекватным инструментом оценки знаний и опыта, или это чистой воды шарлатанство. В подавляющих случаях люди распределяются на две воюющие стороны следующим образом: если человек способен нормально пройти ББ и понимает ценность теоретических знаний, он в лагере сторонников ББ. Если человек пусть и безмерно опытен, но получает от ББ низкие оценки, то логично, что эта неприязнь взаимна :)

Я ББ уважаю, но не считаю сертификат Брейнбенч абсолютно правильным и точно отражающим опыт и знания специалистов. Но для начальной (прикидочной) оценки уровня специалиста - Брейнбенч хорош. По моему опыту, ББ эффективен для начальной фильтрации кандидатов при приеме на работу (ключевое слово - начальной).

О C++ сертификации

Тест довольно сложный. Как к нему готовиться - см. весьма распространенный "список 385":
- "Как самого себя проверить на знание С++" на RSDN.ru;
- "Что почитать для сдачи теста BrainBench по C++?" форум на RSDN.ru;
- ответы на вопросы из списка 385, кстати, весьма поспешно написанные и некоторые даже неправильные.

Опыт C++ сертификации

В тестах Брейнбенч есть несколько вопросов, которые требуют знания очень тонких и редких особенностей языка С++, обычно на таких вопросах очки и теряются. Перечисляю некоторые из них:

Вопрос по IO библиотеке

int n = 12;
std::cin >> std::hex >> n;
std::cout << setprecision(2) << n;
Что будет выведено в cout, если на входе было 12 ? Среди вариантов ответов есть 12, 18, 18.00 . Правда в том, что setprecision(2) устанавливает общее количество цифр вывода, а НЕ количество цифр после запятой. Так что правильный ответ будет 18 .

Вопрос по пространствам имен

namespace { static int n; }
namespace A{ namespace { static int n; }}
using namespace A;

int main()
{
  n=5;
  return 0;
}
- unnamed namespaces are illegal - неправда;
- nested namespaces are illegal - неправда;
- nested namespaces that are unnamed are illegal - неправда;
- there is nothing wrong with the sample code - неправда;
- the reference to n is ambiguous - правильный ответ; поскольку тело функции main() находится в безымянном пространстве имен, в котором и объявлен n из первой строчки примера.

Вопрос по кастингу указателей и ссылок


class Foo { public: virtual ~Foo(){}; };
class Bar: public Foo {};
class Bar2: public Foo {};
class FooBar: public Bar {};
class FooBar2: public Bar2 {};

void main()
{
/*1*/ Foo & foo = static_cast (FooBar2 f);
/*2*/ FooBar2 * fb3 = new Foo;
/*3*/ FooBar2 & fb2 = dynamic_cast (new FooBar2);
/*4*/ Foo & foo2 = new FooBar;
/*5*/ Foo & foo1 = dynamic_cast (*(new FooBar2));
}
- 1 - unexpected type FooBar2 - нельзя так писать ;)
- 2 - 'initializing' : cannot convert from 'Foo *' to 'FooBar2 *' - нелегальный нисходящий каст;
- 3 - cannot use 'dynamic_cast' to convert from 'FooBar2 *' to 'Foo &';
- 4 - 'initializing' : cannot convert from 'FooBar *' to 'Foo &';
- 5 - это правильно !

Home  
Terms and Conditions (c) 2005, 2006, 2008, 2009, 2011, 2012 NAN