Skip to content

REVE Systems

Founding year2003
Company Websitehttps://www.revesoft.com/
Career Websitehttps://www.revesoft.com/
Technologies UsedJava, Kotlin, Swift

Introduction

REVE Systems specializes in delivering VoIP (Voice over IP) software solutions, with a focus on mobile VoIP, softswitch, and billing solutions. They have different departments such as Research & Development (R&D), E-Gov, Reve Chat, etc.

In this article, the recruitment process for the R&D department for the DEV roles (Junior Software Engineer) is presented. They perform campus recruitment.

Interview Stages

  1. Online Screening Test: This round is conducted via Zoom. All the participants are required to keep their microphones and cameras on during the MCQ exam via Google form. Questions were given from the following areas:

    1. Basic problem solving
    2. Data structure and algorithms
    3. Time Complexity
    4. Finding error in code snippets
    5. Finding the output of code blocks
    6. Object-oriented programming
    7. SQL
    8. Computer networking
    9. Software engineering and design patterns
  2. Technical Round I: Two interviewers conducted this round via Skype. During the whole interview, the camera and microphone have to be on. At the beginning of the interview, a Google Doc might be shared for writing the code or any answers. Candidates are not allowed to use a pen or paper. Only the shared doc has to be used.

  3. Technical Round II: This round is also conducted via Skype, and two interviewers (project managers) might be there. This is a bit more technical than round 1. Topics may include - Java socket programming, computer networking, focusing on TCP and UDP protocols, software engineering and design patterns, SOLID principles, string matching algorithms (Naive, KMP).

  4. CTO Round: This will be an onsite round where the CTO and any other senior engineer. Candidates might be asked to solve problems using pen and paper.

Technical Round I Questions

Reverse a given singly linked list.

💻 Submit Code

At first, I used extra memory to store the reversed array.

Show Answer
cpp
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (head == NULL || head->next == NULL)
            return head;
        
        int i;
        vector<int> v;
        ListNode* cur = head;
        while (cur != NULL) {
            v.push_back(cur->val);
            cur = cur->next;
        }
        
        i = v.size()-1;
        cur = head;
        while (head != NULL) {
            head->val = v[i];
            i--;
            head = head->next;
        }
        return cur;
    }
};

They told me not to use extra memory. So, I performed an in-place reversal of the linked list.

Show Answer
cpp
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if (head == NULL || head->next == NULL)
            return head;
        
        ListNode* prev = NULL;
        while (head != NULL) {
            ListNode* tmp = head->next;
            head->next = prev;
            prev = head;
            head = tmp;
        }
        return prev;
    }
};

Given a sequence 1, 1, 2, 3, 5, 8, 13, 21..., where the indices start at 1. For any given index, find the value of the sequence. For example, when the input is 3, the output is 2, and when the input is 6, the output is 8.

💻 Submit Code

At first, I used an array for storing the calculated results of the intermediate steps and built the array going forward.

Show Answer
cpp
int fib(int n){
  	int arr[n + 1];
  	arr[1] = 1;
  	arr[2] = 1;
  
  	int i;
  	for (i = 3; i <= n; i++) {
          arr[i] = arr[i-1] + arr[i-2];
  	}
  	return arr[n];
 }

As I used an array to store the intermediate results, extra memory usage was involved. They told me not to use an array. Then I used three variables and performed swapping values as needed.

Show Answer
cpp
int fib(int n){
  	int a, b, c = 1;
  	a = 1;
  	b = 1;
  
  	int i;
  	for (i = 3; i <= n; i++) {
          c =  a + b; 
          a = b; 
          b = c; 
  	}
	return c;
 }

They asked me to solve this problem using recursion. When implementing the recursion-based one, I first implemented the unoptimized version and later used an array for storing the intermediate values. After that, they asked me about the time and space complexities of the different approaches.

Show Answer
cpp
 int fib(int n){
	if (n == 1)
            return 1;
	else if (n == 2)
            return 1;
	else
	    return fib(n-1) + fib(n-2);
 }

Given the root of a binary tree and an integer targetSum, return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum.

💻 Submit Code

Show Answer
cpp
class Solution {
public:
    bool isLeaf(TreeNode* root) {
        return root->left == nullptr and root->right == nullptr;
    }
    bool hasPathSum(TreeNode* root, int targetSum, int currentSum = 0) {
        if(root == nullptr) return false;
        currentSum+=root->val;
        if(isLeaf(root)) return targetSum == currentSum;
        return hasPathSum(root->left,targetSum, currentSum) or
                hasPathSum(root->right,targetSum, currentSum);
    }
};

Why are getters and setters used in Java?

Describe the Singleton design pattern and write the code in Java.

What are REST APIs? Tell about the HTTP verbs and the differences between PUT and POST in REST API.

Given a large input string without \n present. Output the string of sentences where we will input the max letter count in a line. output the modified string, so if line breaks occur in the middle of a word, place it after a newline.

Input:

reve systems is a software company
11

Output:

reve
systems is
a software
company

Technical Round II Questions

What are the four pillars of OOP?

Explain about Encapsulation, Abstraction, Inheritance, and Polymorphism with real-world examples.

Please tell us about Java Socket Programming.

What models are used in the Software development life cycle? Please tell us about the waterfall model.

Please explain the Agile model in software engineering.

What are the SOLID principles?

What are the differences between the TCP and UDP protocols?

Given two input strings, you have to find whether the second string is present in the first string. Please explain all the approaches for solving this problem.

Do you have a plan for higher studies? When will you go abroad for higher studies?

CTO Round Questions

Please tell us about yourself.

Why do you want to join a software company instead of joining a university as a faculty member?

Write the code of the Singleton pattern and explain.

Explain the four pillars of OOP with examples.

Actually they asked all the questions from the previous rounds where I made mistakes.