.dp-highlighter { font-family: "Consolas", "Monaco", "Courier New", Courier, monospace; font-size: 12px; background-color: #E7E5DC; width: 99%; overflow: auto; margin: 18px 0 18px 0 !important; padding-top: 1px; /* adds a little border on top when controls are hidden */ } /* clear styles */ .dp-highlighter ol, .dp-highlighter ol li, .dp-highlighter ol li span { margin: 0; padding: 0; border: none; } .dp-highlighter a, .dp-highlighter a:hover { background: none; border: none; padding: 0; margin: 0; } .dp-highlighter .bar { padding-left: 45px; } .dp-highlighter.collapsed .bar, .dp-highlighter.nogutter .bar { padding-left: 0px; } .dp-highlighter ol { list-style: decimal; /* for ie */ background-color: #fff; margin: 0px 0px 1px 45px !important; /* 1px bottom margin seems to fix occasional Firefox scrolling */ padding: 0px; color: #5C5C5C; } .dp-highlighter.nogutter ol, .dp-highlighter.nogutter ol li { list-style: none !important; margin-left: 0px !important; } .dp-highlighter ol li, .dp-highlighter .columns div { list-style: decimal-leading-zero; /* better look for others, override cascade from OL */ list-style-position: outside !important; border-left: 3px solid #6CE26C; background-color: #F8F8F8; color: #5C5C5C; padding: 0 3px 0 10px !important; margin: 0 !important; line-height: 14px; } .dp-highlighter.nogutter ol li, .dp-highlighter.nogutter .columns div { border: 0; } .dp-highlighter .columns { background-color: #F8F8F8; color: gray; overflow: hidden; width: 100%; } .dp-highlighter .columns div { padding-bottom: 5px; } .dp-highlighter ol li.alt { background-color: #FFF; color: inherit; } .dp-highlighter ol li span { color: black; background-color: inherit; } /* Adjust some properties when collapsed */ .dp-highlighter.collapsed ol { margin: 0px; } .dp-highlighter.collapsed ol li { display: none; } /* Additional modifications when in print-view */ .dp-highlighter.printing { border: none; } .dp-highlighter.printing .tools { display: none !important; } .dp-highlighter.printing li { display: list-item !important; } /* Styles for the tools */ .dp-highlighter .tools { padding: 3px 8px 3px 10px; font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: #f8f8f8; padding-bottom: 10px; border-left: 3px solid #6CE26C; } .dp-highlighter.nogutter .tools { border-left: 0; } .dp-highlighter.collapsed .tools { border-bottom: 0; } .dp-highlighter .tools a { font-size: 9px; color: #a0a0a0; background-color: inherit; text-decoration: none; margin-right: 10px; } .dp-highlighter .tools a:hover { color: red; background-color: inherit; text-decoration: underline; } /* About dialog styles */ .dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; } .dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; } .dp-about td { padding: 10px; vertical-align: top; } .dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; } .dp-about .title { color: red; background-color: inherit; font-weight: bold; } .dp-about .para { margin: 0 0 4px 0; } .dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; } .dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; } /* Language specific styles */ .dp-highlighter .comment, .dp-highlighter .comments { color: #008200; background-color: inherit; } .dp-highlighter .string { color: blue; background-color: inherit; } .dp-highlighter .keyword { color: #069; font-weight: bold; background-color: inherit; } .dp-highlighter .preprocessor { color: gray; background-color: inherit; }

Saturday, June 7, 2008

Boost interview questions

- What is boost? And why is it useful?
- What is a shared pointer?
- What is the difference between shared pointer, auto pointer and intrusive pointer?
- How is shared pointer implemented internally?
- How would you convert from string to integer using boost?

#include
#include
#include

/*
Implement as simple a class as possible to pass the test case below.
If possible,
- use only a single container
- do not use a void pointer
- use any stl/boost/mpl algorithms that are of use
*/


class cNamedVariableContainer
{
public:
template
void manage(const std::string& name, T& varRef)
{
}

public:
void setValue(const std::string& namedVariable, const std::string& value)
{
}
};



int main()
{
cNamedVariableContainer nvc;

int myInt(0);
double myDouble(0.);
std::string myString("");

nvc.manage("int", myInt);
nvc.manage("dbl", myDouble);
nvc.manage("str", myString);

nvc.setValue("int", "43");
nvc.setValue("dbl", "123.8");
nvc.setValue("str", "hello");

std::cout << myInt << std::endl;
std::cout << myDouble << std::endl;
std::cout << myString << std::endl;

assert(myInt==43);
assert(myDouble==123.8);
assert(myString=="hello");

return 0;
}

Friday, June 6, 2008

Interview Questions -- London Finance IT

I have been interviewing for a C++ software developer position at some of the UK finest investment banks and hedge funds. Here I'll share some of the questions that I was asked in a series of posts. But to be fair, I won't mention the names of those companies.

Those are actual questions I have been asked:

C++ Questions:

1- When would you prefer passing a reference to a function than a pointer?
2- Where is the const keyword used in C++ and what does it mean in each of those places it is used?
3- What is a mutable variable? Why might we need one?
4- What is a dynamic cast? What is RTTI?
5- What is an exception? When would you use exceptions? And why are they better than retyrning error codes?
6- How are exceptions implemented in C++?
7- How can a function guarantee that its resouces are released if an exception is thrown in the middle? -- Use RAII.
8- What is an exception safe function? What are the three types of exception safety?
9- What is a dangling pointer? And how does it usually happen?
10- What is a memory leak? How would you go about fixing it?
11- What is polymorphism? Virtual functions? Virtual tables?
12- When do you need a virtual destructor? Why is it not a good idea to always use virtual destructors?
13- Why is it a bad idea to throw exceptions from a destructor?
14- What is a pure virutal function? Why might we need to use it?
15- When do we absolutely need a dynamic cast? What alternatives can we have to dynamic casts?
16- Can pure virtual functions have an implementation? Is it a good idea to give them default implementation? Why?
17- What is a design pattern?
18- Explain Observer, Singleton and Bridge design pattern?
19- What is an Agile development?
20- Why do we need operator overloading? What concerns might we have with overloading?
21- Assume we have four istances of the same class, A, B, C, and D. What is the minimum number of operators called for this operation A = B * C + D?
22- Which could be potentially faster: accessing elements of a 2D array column-wise or row-wise? i.e., traversing columns or rows?
23- How do you prevent an object from being copyable? When might you need to do that? And in this case, how do you prevent methods of this object from calling its copying functions? What errors might arise?
24- How does C++ name mangling work?
26- How is polymorphism implemented in C++?
27- Can we have static virtual methods? Why?
....

rest to follow as I remember them.