# Tekion Corp Interview Experience 2020 (On campus FTE+internship )

Tekion came for hiring in august 2020 in our campus for SDE role (FTE + internship). We had a total of 5 rounds ( 1 online + 2 technical + 1 managerial + 1 HR). Here is my interview experience for the same.

**Round 1 (** **Online Coding Round):**

This round was conducted on hackerearth platform, There were 16 MCQs and 2 coding questions of easy/medium difficulty.

The MCQs predominantly contained output finding questions where the code was in java. Apart from this the MCQs had questions from DBMS and algorithm analysis. There was 1 easy aptitude question as well.

**My suggestions:** Practice inheritance output questions in java. Learn the concepts of DBMS thoroughly and be good with algorithm analysis(space and time complexity).

**The first coding question was as follows.**

A function f(x) is defined as the smallest fibonacci number greater than or equal to x. Ex : f(1)=1,f(5)=5,f(6)=8. The task is to calculate g(l,r) where g(l,r) is defined as g(l,r) = f(l)+f(l+1)+f(l+2)+…..+f(r). Constraints: 1<=l<=r<=10^9.

The idea is to first compute all the fibonacci numbers below 10^9 and the smallest fibonacci number greater than 10^9. There are hardly 46 such fibonacci numbers. Now we can run a loop from l to r and check for the lower bound of each number in between l to r. The catch is since r-l in the worst case is 10^9, one will get a tle verdict if we simply find the lower bound for every number from l to r (Can you optimize this solution to pass all the test cases?).

**The second coding question was as follows.**

Given N coins and an array of costs that represents the cost of each digit (1…9), where costs[i] is the cost of picking the digit i. The task is to find the largest number that can be represented by using the N coins.

**Example:**

Input: N = 5, costs = [12, 3, 5, 1, 2, 6, 8, 9, 1]

Output: 99999

Explanation: we can choose 5 9s to make 99999 since picking digit 9 costs 1 coin,

**Constraints:**

sizeof(costs) = 9

1 <= T <= 10^3

1 <= N <= 10^3

1 <= costs[i] <= 10^3

**Round 2 (Technical Interview 1)**

I was asked to introduce my technical familiarity, the languages I use and whether i am comfortable with java or not. Since I use c++ majorly, I told that I am a c++ guy and the interviewer was cool with it. He then asked me to explain four terms from oops concept. I explained encapsulation, inheritance, abstraction and polymorphism to him. The interviewer was satisfied with my answer and we moved to DBMS. He asked me what kind of databases I have worked with in the past. I have worked with relational databases so the questions asked to me were related to them. He asked me to explain indexing and types of joins in SQL. After answering these questions, the interviewer moved to the coding part of the interview.

The first question that I was asked was to find the length of a loop in the linked list. I started with a O(n^2) solution and he asked me to optimize it. I gave him a hash map solution and he asked me to further optimize the solution. I then gave him the optimal solution using fast and slow pointers. He was satisfied with the answer and asked me to code it. After verifying the code, we moved on to the next question.

The second question was, given a target integer x, I had to find the greatest integer less than equal to x in a binary search tree. I gave a recursive solution to this question using the property of binary search tree. The interviewer was satisfied with my answer and asked me to write the code. After writing the code, he verified it and found a small test case that i had missed in the code. He asked me to correct it. I was able to fix the code.

After the coding questions he asked if i had some questions for him. The round went well and the interviewer was very friendly and i enjoyed the discussion with him.

I got a mail for the next round an hour after this round.

**Round 3 (Technical Interview 2):**

The interviewer was very friendly in this round as well. He asked me to explain one recent project that i made. I had done a project on audio summarisation recently, so I explained that to him. Apart from that I also explained about another project where i had to come up with an algorithm to solve a problem.

The interviewer then asked me to write a shuffling algorithm for a music player. Given an array of songs ( he specifically mentioned array twice), write an algorithm that performs the following:

1. The algorithm randomly selects a song and plays it.

2. A played song must not be played again unless all the songs in the array are exhausted.

3. The songs must be reused once the array gets exhausted.

The first solution that I gave him was to maintain a boolean array that would mark songs as played / not played for every index i in the array. If the random index generated is already played, I will regenerate a random index. The interviewer asked me the potential problems with this design. The issue with this design is once half of the songs have been played, the probability of generating the index of a played song is high and we may get stuck in an infinite loop of generating the index of an already played song. He asked me to improvise on this solution.

After some thoughts,I came up with a solution where I would use two arrays. Once a random song is played, I would move that song into the new array and shift all the songs behind the played song by 1 position. The obvious downfall with this design was that in the worst case, the time taken to play a song would scale linearly with the size of the song array. The interviewer asked me to optimize the solution even further. He wanted a constant space solution.

At this moment, the optimal solution clicked in my mind. I told him, instead of using another array, once a random index is generated and the song is played, i will swap this song with the song at the end of the array and reduce the size of the array by 1. Once my array size becomes zero, i can reset it back to the initial array size. (This process is somewhat similar to what is done in heap sort algorithm). The interviewer was satisfied with this solution and asked me to code the solution. I was able to code it within a few minutes and after some discussion we moved to the next question.

The second question was to find the kth largest element in a bst. I told him that if the size of bst is n then i can find the (n-k)th smallest element in the bst. He told me to assume that size of the bst is unknown. Then I gave him the reverse in-order solution, where we first traverse the right subtree of the node instead of left. He was satisfied with my answer and asked me to code the solution. After verifying the code we still had some time left. So he asked me one more question.

Given a n*m matrix, where 0 represents a blocked cell and 1 represents a traversing cell, and given coordinates of the cats and mouse in the matrix. A cat could move to any of the 8 neighboring cells. I had to find whether a path exists from cat’s cell to the rat’s cell and if it exists, I had to print it. I explained to him the standard backtracking approach. He was happy with the solution and asked me to code it.

After verifying the code, he asked if i had any questions for him. The round went well and I was confident that I would get a mail for the next round.

The mail came 2 hours later.

**My suggestion for technical rounds:**

1. Know the commonly asked programming questions. Geeks for geeks is a great place to learn these questions.

2. Learn your core subjects such as DBMS, oops, OS and networking well. There is no interview where you won’t be questioned from these subjects.

3. Interact with the interviewer. Practice the process of thinking out loud (speaking as you think about a solution). This really helps in f2f interviews.

4. Your interviewer is your friend. If you get stuck they are there to help you. Don’t assume you need to give a pitch perfect answer at the very first attempt. They will help you out if you cannot come up with a solution.

5. Even if you know an optimal answer, giving multiple answers before shows that you can think of more than one solution. Do look for multiple answers apart from the optimal ones as well.

6. Use proper naming conventions. Stick to a consistent typing style. ( If you code in python or cpp, use snake case. In java prefer camel casing).

7. Explain your code as you write. Get your assumptions validated with the interviewer. This helps in building the conversation and you will be very clear about the code you are writing.

**Round 4 (Managerial interview):**

I had never given a managerial round before, so I was in for a surprise. I went through the LinkedIn profile of my interviewer. He was a technical guy and I was expecting technical questions in this round as well.

The interviewer greeted me and asked me what I knew about the company. I explained to him what i had researched and he seemed fine with the answer.

He then asked me why choose Tekion when i could open a startup of my own. I told him that I did not have an idea at this point in time for a MVP. This was a genuine answer and he moved on to the next question.

He then asked me to tell my 5 strengths and weaknesses. He told me not to sugarcoat my strengths as weakness. He told me that he would entangle me in a series of questions if i did that. I was able to do that without sugarcoating my weaknesses. He then asked me to add two more strengths. I I did that as well. Then he asked me to recall everything i told. I was not able to recall one of my strengths, and he really wanted me to recall it. He told me that he would offer me the position right now if I could recall my strength and would reject me otherwise. I did my best but could not recall it. I was nervous whether I would make it to the next round or not. The interviewer told me the last strength that I forgot before hanging up the call. ( It was that I communicate well).

Despite a not so good interview, i got the mail for HR interview 30 mins later.

**Round 5 (HR interview):**

It was the shortest interview of all. The hr was very friendly and thanked me for being patient throughout the day. He asked me to tell about what I have been doing for the past 3-4 months and what has been going on in my locality. After this he asked me to tell about one project i made. Then he asked if I had any questions for him. I asked a few questions regarding the tech stack of the company. After a good 15 minutes discussion the interview ended.

The results were declared the next day and I got selected.

**My suggestion for managerial and hr rounds:**

1. Know your strengths and weaknesses. Do a proper swot analysis and self introspection before going for this round.

2. Have some examples that support your claims. If you give a real life example, the interviewer will accept the answer.

3. Do not make false claims. The interviewer will catch your lies easily.

4. Research about the values, the mission and vision of the company. Knowing about the tech stack of the company is a plus.** **

5. Prepare some questions that you would ask the interviewer before hand. Refrain from asking answers of the questions you could not answer.

6. Know what’s on your resume. Go through every thing you mention in resume once before attending interviews.

I would suggest preparing the core subjects and programming questions on geeksforgeeks. To learn about company interviews, dig deeper into the gfg interview experiences. Keep calm and all the best for your interviews.