Yahoo Telephonic Round:
Design classes for the following problem. (C++)
A Customer Can have multiple bank accounts A Bank account can be owned by multiple customers When customer logs in he sees list of account, on clicking on an account he sees list of transactions.
Customer class, Account class, Transaction class
Customer class contains an array of pointers to the account classes
Account class contains an array of pointers to its owner customer classes
Account class also contains an array of transactions associated to it.
Transaction class contains id or pointer the customer who did that transaction
In customer class write a function with prototype
for (i in Accounts )
cout << i.AccountName << endl;
cin >> id;
for(i in Accounts[id].transactions )
cout << i.TransDetails << endl;
Yahoo Interview Round 1:
- How to call a C++ function which is compiled with C++ compiler in C code?
Solution: The C++ compiler must know that f(int,char,float) is to be called by a C compiler using the extern "C"construct:
The extern "C" line tells the compiler that the external information sent to the linker should use C calling conventions and name mangling (e.g., preceded by a single underscore). Since name overloading isn't supported by C, you can't make several overloaded functions simultaneously callable by a C program.
// This is C++ code
// Declare f(int,char,float) using extern "C":
extern "C" void f(int i, char c, float x);
// Define f(int,char,float) in some C++ module:
void f(int i, char c, float x)
- When you deliver your C++ headers and C++ library of a class (what all can you change in the class so that application using your class does not need to recompile the code)
- How do you initialize a static member of a class with return value of some function?
Static data members are shared by all object instances of that class. Each class instance sees and has access to the same static data. The static data is not part of the class object but is made available by the compiler whenever an object of that class comes into scope. Static data members, therefore, behave as global variables for a class. One of the trickiest ramifications of using a static data member in a class is that it must be initialized, just once, outside the class definition, in the source file. This is due to the fact a header file is typically seen multiple times by the compiler. If the compiler encountered the initialization of a variable multiple times it would be very difficult to ensure that variables were properly initialized. Hence, exactly one initialization of a static is allowed in the entire program.
Consider the following class, A, with a static data member, _id:
The initialization of a static member is done similarly to the way global variables are initialized at file scope, except that the class scope operator must be used. Typically, the definition is placed at the top of the class source file:
// File: a.cc
Because no explicit initial value was specified, the compiler will implicitly initialize _id to zero. An explicit initialization can also be specified:
// File: a.cc
int A::_id = 999;
In fact, C++ even allows arbitrary expressions to be used in initializers:
// File: a.cc
int A::_id = GetId();
- How can one application use same API provided by different vendors at the same time?
- If you are given the name of the function at run time how will you invoke the function?
- Compile your program with --export-dynamic on the gcc command line
- Link with -ldl (dynamic library handling, needed for dlopen and dlsym
- Call dlopen() with a null parameter, meaning you aren't loading symbols from a file but from the current executable
- Call dlsym() with the name of the function you'll be calling. Note that C++ modifies function names, so If you're trying this with C++, you'd have to either declare this function as extern "C", or figure out what name the function has after compiling. (On unix, you could run nm -s on the object file for this).
- If dlsym() returns non-null, use the returned value as a function pointer to invoke your function.
- When will you use shell script/Perl ahead of C/C++?
- How does yahoo handles billions of requests, does it create a thread per request or a process?
- How does HTTP works?
Solution :HTTP Is a request-response protocol.
For example, a Web browser initiates a request to a server, typically by opening a TCP/IP connection. The request itself comprises o a request line, o a set of request headers, and o an entity. The server sends a response that comprises o a status line, o a set of response headers, and o an entity. The entity in the request or response can be thought of simply as the payload, which may be binary data. The other items are readable ASCII characters. When the response has been completed, either the browser or the server may terminate the TCP/IP connection, or the browser can send another request.
- How to count number of unique music titles downloaded from a log file which contains an entry of all music title downloaded?
- What is the difference between COM and CORBA?
Solution :COM is linked to Microsoft and CORBA to UNIX,Moreover, COM objects require installation on the machine from where it is being used .CORBA is ORB (Object request broker) , and also its a specification owned by OMG, which is open. Not owned by a company. So we cannot say that it only belongs to Unix. Corba servers can run on windows NT, and CORBA clients can run on Unix.
- What is web service?
Solution :Web Service is defined as "a software system designed to support interoperable Machine to Machine interaction over a network." Web services are frequently just Web APIs that can be accessed over a network, such as the Internet, and executed on a remote system hosting the requested services.
I got only these two Rounds as of now, if I get any more I will post them here. If you have attended yahoo interview please share your experience and questions with us. You can mail them at email@example.com or you can comment here.Solutions for rest of questions will be provided later.if you know any of the questions which are unsolved please comment the solution. we will include.