Monday, 27 December 2021

Client Server Architecture

 Coming Soon

Monday, 28 January 2019

Pine Labs Interview Experience

Process: 3 Technical Round + 1 Manager Round + 1 HR


Round 1:
  • Write Code to find meeting point in Y Linked List ( 7 in below list)
  • Write your own Copy constructor, assignment operator for below class
           class Student
           {
                  char* name;
                  int age;
                  vector<Subject*> optionSubject;
           }
           where Subject is defined as below
           struct Subject
           {
                 char* name;
                 int marks;
           }

Round 2:
  •  Write Code to find LCA of Binary Search Tree of given node & if node is not there return NULL.
  • Design Logger class considering multithreading aspect (ensuring Race condition is avoided)
  • Design Memory Manager ( Define Data structure of it and handle memory allocation & deallocation )
Round 3:
  • Asked me Round 1 question of Y List again. After I told him that its already asked he modified the question by introducing a loop in starting & then find the meeting pointed i.e 7
  •  Questions related to C++
    • What is static keyword , why we need static data member & member functions.
    • What is static const ? Where do you define in class & initialize it.
    • Can Destructor throw an exception?
    • Can Constructor throw an exception? Can we use the data member already initialized before throwing exception?

Round 4 (CTO Round):
  • Asked me to introduced myself & explain projects i have worked upon. Then he asked few questions related to project.
  • Write Code of thread Safe Singleton class.
  • General Discussion.
Round 5 (HR Round):
  • Explained about the company, its growth story different policies & work environment.
  • General Questions.
  • Current CTC & Expectation.
Overall, You need to be good in Data Structures & Design to crack Pine Labs Interview.

Friday, 15 June 2018

Comma Operator inside for loop Condition in C++

You may have used Comma operator in initilialization and increment part of for loop like below

                 for(init;condition;increment) --> for(int i=0,j=5;i<j;i++,j--)


But can we used Comma operator inside for loop condition ?

The answer is Yes but it behave bit differently.

Predict the output of below program


void commaOperator()
{
    int i=0,j=0;
    cout<<"Using && inside for loop Condition"<<endl;
    for(;i<4&&j<6;)
    {
            cout<<i<<" "<<j<<endl;
            i++;
            j++;
    }
    cout<<"Using comma inside for loop Condition "<<endl;
    i=0,j=0;
    for(;i<4,j<6;)
    {
            cout<<i<<" "<<j<<endl;
            i++;
            j++;
    }

}



Output:
Using && inside for loop Condition
0 0
1 1
2 2
3 3
Using comma inside for loop Condition
0 0
1 1
2 2
3 3
4 4
5 5

As Comma operator is a binary operator it evaluates first operand but discards its result and then evaluates the second operand and returns its result.
In above example , for loop will run till second condition is true (j<6 ) and discards the first condition.

But what if we use comma operator in assignment like below
int a=5,b=7,c;
c=a,b;

Here c will be equal to a (5) as assignment has higher precedence than comma operator.


Please comment if you find anything incorrect.




Saturday, 26 May 2018

Find Consecutive Elements in Unsorted Array in O(n) - C++ Code



#include<iostream>
#include<set>

int findConsecutiveElements(int arr[], int n)
{
        std::set<int> s;
        int ans = 0;

        for (int i = 0; i < n; i++)
                s.insert(arr[i]);

        for (int i=0; i<n; i++)
        {
                if (s.find(arr[i]-1) == s.end())
                {
                        int j = arr[i];
                        while (s.find(j) != s.end())
                                j++;

                        ans = std::max(ans, j - arr[i]);
                }
        }
        return ans;
}

int main()
{
        int arr[] = {1,21, 24, 25, 9, 3, 11, 4, 20, 22,23};
        int n = sizeof arr/ sizeof arr[0];
        std::cout << "Length of the Longest consecutive elements is "
                << findConsecutiveElements(arr, n);
        return 0;
}

Thursday, 30 November 2017

Kth smallest element in a BST - C++ Code


Do inorder Traversal of BST and count number of elements traversed till now . As inorder traversal gives us the element in sorted Order, when count reaches k , we break out and Print the element.


/**
 * Definition for Binary Search Tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 * };
 */
int kthsmallest(TreeNode* root, int k) {
    if(root==NULL)
      return 0;
    stack<TreeNode*> s;
    bool complete=false;
    TreeNode* cur=root;
    int count=0;
    int val=0;
    while(!complete)
    {
        if(cur!=NULL)
        {
            s.push(cur);
            cur=cur->left;
        }
        else
        {
            if(!s.empty())
            {
                count++;
                cur=s.top();
                s.pop();
                if(count==k)
                {
                    val=cur->val;       
      break;
                }
                  cur=cur->right;
            }
            else
              complete=true;
        }  
    }
    return val;
}


Please comment if you find anything incorrect.

Monday, 6 November 2017

First Non Repeating Character in String


#include<iostream>
#include<string>
#include<memory>
#include<climits>
#define NUMBER_OF_CHARS 256
using namespace std;
struct CountIndex
{

 int count;
 int index;
};
char getFirstNonRepeatngCharacter(const string& str)
{
 char ch=' ';
 unique_ptr<CountIndex[]> ci(new CountIndex[256]());
 //Can also use shared_ptr
 //shared_ptr<CountIndex> ci(new CountIndex[256](),std::default_delete<CountIndex[]>());
 for(auto& it:str)
 {
  ci.get()[it].count++;
  if(ci.get()[it].count==1)
   ci.get()[it].index= &it - &str[0];
  else

   ci.get()[it].index= ci.get()[it].index;

 }
 int maxIndex=INT_MAX;

 for(int it=0;it<NUMBER_OF_CHARS;it++)
 {
  if(ci.get()[it].count==1 && ci.get()[it].index <maxIndex)
  {
   maxIndex= ci.get()[it].index;

  }
 }
 return maxIndex!=INT_MAX?str[maxIndex]:' ';
}
int main()
{    
 string str ;
 cin>>str;
 char ch=getFirstNonRepeatngCharacter(str);
 if(ch !=' ')
  cout<<" First Non repeating Character is "<< ch;
 else
  cout<<" No Repeating Character Exist ";


}