Endurance Interview Experience (On-Campus)
Endurance International Group visited our college for the Software Developer profile. It consisted of 5 rounds ( MCQ, CODING, TECHNICAL 1, TECHNICAL 2, HR).
Roound 1( MCQ round of 45 min):
There were 60 MCQ questions with 4 choices. The questions were of GATE level and had +3 for correct and -1 marking for negative answer. The questions covered topics like OOPS, Analysis of Algorithms, Networking, DBMS and OS. I was able to “attempt” 54 of them and ace the first round among approximately 70 other competitors. Around 25 people were shortlisted for the next round.
Round 2 (Coding):
EIG’s coding round is different from normal coding rounds. You have to code in an IDE in your own laptop, disconnected from the internet. They provide you with all the library commands of all well known programming languages through the college LAN, which you can refer to . You are allowed to code in any language, in any IDE of your choice.
Implement an in-memory key-value store with the following features in command line:
- The program should support the following
- Italics – Command typed by user
- Bold – Response from the command line
|set key value [ttl]||set the key with specified||set hello 5|
|value. optional ttl in seconds||done|
|can be specified. if ttl is||set test data|
|specified, the key should||done|
|expire after ttl.||set ttl_test 10 5|
|get key||get the key if found in data||get hello|
|store. or return nil.||5|
|flush||flush all the keys||flush|
|save||save all keys to a file||save|
saved to data.dat
|load filename||load keys from a file||load data.dat|
|Bonus Point||Resolve conflict when set is||Set hello 5|
|done over same key twice.||Set hello 6|
|Resolve conflict when set is||5 6|
|done over same key twice||Set ttl_test 5 10|
|with ttl||Set ttl_test 6 20|
Solution: I created a Data class with attributes value and timestamp. The timestamp stores the expiry time of the data item using the system based timestamp in milliseconds and a negative value if it doesn’t have an expiry time.
While getting the data, I checked if the expiry timestamp is less than current timestamp, then output nil (output already expired), else show the data.
During saving in file, I only saved the items which have not expired yet, checking in a similar way.
For the bonus part, You can use a Linked List of Data items .
The outputs were reviewed by at-least 2 people.
3 people made it to the next round, myself included.
Round 3(Technical 1):
The panel had two judges and the round took about 30 mins. Firstly they asked me about my projects and which one of them were my favourite. I described all my machine learning projects and Android applications. They also noticed web based projects in my Internships and were curious about them.
After querying about the basic process of data retrieval from a server, they gave me a situation based on data retrieval from a website followed by a sequence of hurdles that are needed to be taken care of. They were as follows:
How to ensure that the user is logged into server, without checking credentials in every step of data retrieval.
I propsed a solution by adding an is_online column in the database . But that will auto-authencicate user if he is accessing from multiple devices.
How to ensure that a user is accessing the site from one device only?
I suggested to Use the device-id with the user_Id for authencication. But they did not want the details of the user to be exchanged in airtime so often. They gave me some hints of using random numbers and I told them to generate a public and private key pair in the server side and give the private key to the user so that the unique identity can be preserved along with encryption of data. They said that I was over-doing it as such services are not free. The solution is to just send a random key to the user for that session and use I thereafter for both the above problems.
How to block DDOS attacks so that multiple connections are not created in a given period of time from the same user ?
I proposed to use a separate lightweight script to check the number of connections made from the public IP of the user within a certain period of time (running a while loop with a counter), before it can access the server scripts. They enquired about the layer in which I would be using this script, as we needed to stop the connection way before the upper layers of OSI.
I was not selected after this round . They told me that I had a different skillset, one which were not of their requirements as of now.
After a conversation with other students, I learnt that were asked similar questions too. There was not much focus in coding or OS, in the interview rounds.
Advice: If you want to get into EIG, make sure you really are strong with web and networking based knowledge as most projects are based on that ( And make sure that you enjoy it too !).