C++ Coding Interview Questions

1. Design and implement a String class that satisfies the following:

  • Supports embedded nulls
  • Provide the following methods (at least)
    • Constructor
    • Destructor
    • Copy constructor
    • Assignment operator
    • Addition operator (concatenation)
    • Return character at location
    • Return substring at location
    • Find substring
  • Provide versions of methods for String and for char* arguments


2. Given the following classes

class Fruit {
// …
}

class Apple : public Fruit {
// …
}

class Peach : public Fruit {
// …
}

// Container of fruit
class BasketOfFruit {
BasketOfFruit() ;
void insert( Fruit & f ) ;
// …
}

// Container of apples
class BasketOfApples /* ??? */ {
// …
}

Should BasketOfApples derive from BasketOfFruit? Why or why not?
What is the general principle that determines the answer?


3. Describe briefly what the following function does. What standard function is it most like ?


int f( char *p ) {
int n = 0 ;
while ( *p != 0 ) n = 10*n + *p++ - ‘0′ ;
return n ;
}

4. Describe briefly what function ‘a’ does in the following code fragment.


struct s {
struct s *next ;
}

a( struct s *p, struct s *x ) {
while ( p->next != 0 ) p = p->next ;
p->next = x ;
x->next = 0 ;
}


5. What default methods are declared implicitly by the C++ compiler for the class below:


class Empty
{
};


6. Given a system with a hard realtime priority, multithreaded architecture, with priorities from 1 (least) to 5 (most), explain the major flaw in the design below:


The following objects are shared between the threads:

Disk : This class is a singleton. The read() and write() methods both block on a simple atomic lock()/unlock() shared between the two. (ie, only one thread can access the disk, thru either read or write, at any given time). It also has a waitForData() method, which blocks (without claiming the lock) until either a timeout elapses, or data is ready. It returns true upon returning due to new data, false upon returning due to the timeout.

Network : This class is a singleton. The read() and write() methods both block on a simple atomic lock()/unlock() shared between the two. (ie, only one thread can access the disk, thru either read or write, at any given time).

Sensor: The Sensor class accesses a number of physical sensors. The first method, ‘waitForData()’, blocks until data has been collected from the sensors. The second method, ‘processData()’, does a series of long and cpu-intensive calculations on the data. These calculations often take several minutes. It then returns the processed data.

Each of the following threads is running concurrently. Assume that the psuedocode in each thread is looped infinitely (ie, encased in a while(true) { }. It is extremely important that information buffered to the disk be sent to the network as quickly as possible, this is why Thread 1 runs at priority 5. The system conditions checked in thread 3 are not particularly important events (not as important as the calculations done in thread 2). If the events aren’t transmitted over the network for several minutes, it’s not a problem at all. They do, however, contain a large amount of system information. Thread 4 watches for serious system alarms, indicating serious problems. These are a serious concern and if not quickly buffered to the disk and sent to the network, can cause serious revenue loss.

Thread 1: (priority: 5)
while(!Disk.waitForData()) { yield(); } /* Wait until someone has
written data to the disk */
Network.write(Disk.read()); /* Write the data buffered on the disk to
the network */

Thread 2: (priority: 2)
while(!Sensor.waitForData()) { yield(); } /* Wait until the sensors
have picked up data */
Disk.write(Sensor.processData()); /* process the data and write it to
the disk. */

Thread 3: (priority: 1)

if (checkSystemCondition1()) /* If system condition 1 is true.. */
Disk.write(SystemCond1Data); /* Grab the data on the system
condition and buffer it to disk */
if (checkSystemCondition2()) /* see above*/
Disk.write(SystemCond2Data);
if (checkSystemCondition3()) /* see above */
Disk.write(SystemCond3Data);
yield();

Thread 4: (priority: 4)
if (checkAlarms()) /* If any serious alarms exist */
Disk.write(AlarmData); /* Buffer that data to disk for immediate
network transmit */
yield();


courtesy:http://www.crackthecampus.com

No comments:

Post a Comment