2. Brainbench Certification Notes

Брейнбенч - is the most known paid system of online evaluation of expertise in different areas of science and technic. From time to time BB gives the possibility to pass some tests free (advertisement promo compains, sponsorship, etc.). Language of tests - English. Most of tests are devoted to information technologies. Typical test consist of 40 questions 3 minutes long = 2 hours. If there are more than 31 true answers out of 40 (80%), the certification gets MASTER level.

My results: http://www.brainbench.com/transcript.jsp?pid=5829617 .

Lot of different specialits are in eternal sacrid war over the question, is Brainbench precise tool of expertise evaluation, or it is pure quackery. In the most cases, a person is distributed to quarreling camp in the following way: if a man is able to pass BB decently and understand the value of theoretical knowledge, he is in the camp of BB advocates; if a man although extremely experienced but gets low marks from BB, its natural, that dislike is mutual :)

I do respect BB, but do not consider BB certificate absolutely true and precisely reflecting the experience and expertise of a specialist. But BB is very good for initial (approximate) evaluation of specialist level. I have experience of applying BB effectively for initial filtration of candidates to fill developer position (the key word here - initial).

About C++ certification

The test is rather complex. How to be prepared - see well known 385 list (in Russian):
- "Как самого себя проверить на знание С++" на RSDN.ru;
- "Что почитать для сдачи теста BrainBench по C++?" форум на RSDN.ru;
- ответы на вопросы из списка 385, BTW, written in hurry and some are erroneous.

Experience with C++ Certification

There are some questions in BB C++ test, which require knowledge of very rare and specific details of C++, usually these are the questions where score points are lost. Some of wicked questions:

Question about IO library

int n = 12;
std::cin >> std::hex >> n;
std::cout << setprecision(2) << n;
What will be on output, if there was 12 on input ? There are 12, 18, 18.00 among possible answers. The truth is, that setprecision(2) sets total number of digits, but NOT a number of digits after decimal dot. As such, the true answer is 18 .

Question about namespaces

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

int main()
  return 0;
- unnamed namespaces are illegal - NO;
- nested namespaces are illegal - NO;
- nested namespaces that are unnamed are illegal - NO;
- there is nothing wrong with the sample code - NO;
- the reference to n is ambiguous - true answer, as the body of main() is in unnamed namespace, where n from 1st line of example is declared.

Question about reference and pointer casting

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 *' - illegal downcast;
- 3 - cannot use 'dynamic_cast' to convert from 'FooBar2 *' to 'Foo &';
- 4 - 'initializing' : cannot convert from 'FooBar *' to 'Foo &';
- 5 - that's true !

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