My first interview experience — Shopee Singapore Backend Engineer (2020)

Kai Yi Tan
11 min readJan 17, 2021

Introduction

Shopee is recently in a massive hiring process and they approach a lot of Fresh Graduates even outside of Singapore. Back in July of 2020, I received an interview invitation from Shopee in LinkedIn for a Backend Engineer role.

I had a hard time in my interview preparation and throughout the process, the others’ interview experiences did help me a lot. Therefore, I wish to share some of my experiences as well, and hopefully, it will be helpful for Fresh Grads like me who are struggling in how to prepare for a technical interview.

A little bit about my background

I am a student who graduated from Monash University Malaysia with a Computer Science Degree. I have 3 months of internship experience as a Mobile Developer in a company called IFast, Malaysia. Besides, I am also a competitive programmer but with no outstanding achievement ;) Long story short, I don’t have a fancy resume yet eventually I am able to land an offer from Shopee and Bytedance. So, don't hesitate to apply, or worry about if your resume will affect your interview result. What matters is your performance in the interview. You may apply for your preferred position here. If you didn’t apply to them or had an interview with them in the last 6 months, you may also drop me a message on Linkedin with your preferred position, and I can refer you through their referral system.

Preparation

For a Backend Engineer role, the interview mainly tests your technical knowledge in 6 topics, including Problem-Solving, Operating System, Networking & Web Security, Database, Data Structure & System Design, and Programming Languages. Problem-solving will be a general part for both Frontend and Backend position, and the rest will vary depends on what position you apply for. I will share some common interview questions and the resources I used to prepare for each topic.

** It seems like a lot to prepare for the interview. Don’t panic, I didn’t study all the topics when I had the interview with Shopee. This is an overall syllabus I have studied for similar interviews with other companies like Bytedance, across my whole job-hunting path (around 4months). **

Problem-Solving

This part is testing your algorithms skill and it would be the most important part of the interview. They will either ask you to code at some online compiler or write some pseudo-code in an online whiteboard like Google Doc. You will have around 30 mins to solve the problem.

The main two websites I used to prepare for this part are Leetcode and Algo Expert. Leetcode is a free website including a lot of coding questions for you to practice. The difficulty of the interview is similar to medium level questions in Leetcode. Algo Expert is a website that provides coding questions as well as some system design questions. It includes well-explained videos for each question and also covers knowledge of system design fundamentals. It is a great website, but it charges quite expensively which is around $139 per year (algo expert + system expert).

Before ending this section, here are some little tips for you during the coding interview:

  1. It is always better to explain your code along the way when you are coding so that your interviewer can follow up on what you are doing. Your communication skill is just as important as your coding skill in this kind of coding interview. If you are not sure whether you should do this, you may ask the interviewer before starting. I did ask something like “Do you need me to explain my code during coding, or I can just focus on my coding” before I start my code.
  2. If you have totally no idea how to solve the problem, don’t be ashamed to ask for tips from the interviewer. I did ask for tips sometimes and is still able to pass the interview.
  3. During practicing in Leetcode, it is important to get the optimum solution instead of just setting for a “pass” one. Normally you can find the solution in the discussion forum.
  4. It is important to understand the time and space complexity of your solution. The interviewer might ask you to analyze and make improvement on either of it.

For more coding interview tips, you may watch a Youtuber named Clément Mihailescu. He shared a lot of great experiences on how to ace a coding interview.

Data Structure and System Design

Besides coding, it is also important to understand the Data Structure or System Design questions. I’ve learnt all the system design fundamentals in Algo Expert. However, as I mentioned before, it charges quite expensively. If you are looking for some free resources, a Youtuber named Hussein Nasser will be a good choice. He covers most of the topics here including system design fundamentals. The common topics about system design including:

  1. Proxy and Reverse Proxy
  2. Rate Limiting
  3. Load balancer
  4. Pub-sub system
  5. Database Replication and Sharding
  6. Memory Caching system (Redis and Memcached)

Here are some typical Data Structure and System Design questions:

  1. Design a LRU cache
  2. Design a data structure that supports insert, delete, search and getRandom in constant time
  3. Design a Grab API
  4. Design a Facebook News Feed
  5. Design a miniURL website

There are a lot more Data Structure and System Design questions. You may find more examples online. However, it is too much for you to prepare all of it. It is a relatively open question and there is no 100% correct answer. Walkthrough some example videos and understand how the process looks like is enough. Here is one of the example video I have been through.

Operating System

For Operating System, there are not much resources I can share with you as I learned it from the Uni. Here are some common topics you can prepare for:

  1. RAM and Cache
  2. Thread VS Process
  3. Multi-thread VS multi-process
  4. Virtual Memory (VM), VM paging, and Page Fault

You may refer to the blog at the end of this Preparation section. It includes more information on how to prepare for this part.

Networking & Web Security

Again, I learned most of the networking knowledge from my Uni. Here are some common topics will be asked in the interview:

  1. OSI model
  2. HTTP vs HTTPs
  3. HTTP methods: POST vs GET vs PUT vs PATCH vs DELETE
  4. TCP and UDP
  5. DNS
  6. Sessions, Cookies, and Token

Database

For database, it will be divided into two parts. The first part will test on database knowledge and the second part will test on database commands. If you mentioned that you are experienced in SQL or NoSQL database in your resume, be prepared that you might be asked to write some SQL/NoSQL commands on the spot. For the database knowledge, some common topics including:

  1. SQL vs NoSQL database
  2. Indexes in MySQL and MongoDB (Single index VS Composite index etc.)
  3. SQL injection attack
  4. Storing password in the database

For the database commands, I practice my SQL commands with HackerRank. However, you can only do this if you have extra time.

Programming Languages

This part is based on what programming language you mentioned in your resume that you are familiar with. For me, it is C++ and Python. it covers some basic questions like:

  1. Pass by reference VS pass by pointer
  2. C++ preprocess directive
  3. Example of Python Container
  4. C++ VS Python

Be well prepared for every skill you mentioned in your resume, as they are most likely to test you on the skills you said you are good in.

Some extra notes for preparation

During my preparation, this blog helped me a lot:

Although the interview process is slightly different now, the technical test topics are quite similar and it covers more details on how to prepare for each topic. Also, the Youtuber I mentioned above — Hussein Nasser, do cover a lot of Backend Engineer knowledge which designed for beginner like me. It might not the best one, but it does cover most of the basic knowledge I required for those topics. Feel free to check it out if you have extra time.

Interview Process

Here comes to the interview process. I will share some of the questions I have been asked in the interview, as well as my answers. Apologize that I can't share too many details on it as most of them are confidential information.

Online Assessment

The assessment has a 1-hour time limit and including 2 coding questions and 10 MCQ. You will receive the link from HR and you have 2 days to start the assessment before the invitation link expired. During the test, they might require you to allow for screen recording and open your camera, to monitor you in the test.

Coding Question 1: A Leetcode medium level question. I am not able to get the 100% solution during the test, but I did pass the test cases they provided.

Coding Question 2: An easy level Leetcode question and I am able to solve it during the test.

MCQ: I don't remember much about the MCQ. It included some data structure questions like Red-Black Tree, and also some questions on process and thread.

I can only answer half of the MCQ, solve one coding question partially and one fully. Note that it is an MCQ with multi-select answers.

Technical Interview 1

After around 3 days, HR informed me I pass the assessment and schedule the first round of technical interviews for me. They use Zoom for the interview, and each interview is around 1 hour. After a brief self-introduction, we started the interview with a coding question:

  1. Find the element that appears once in an array where every other element appears twice. Again a Leetcode easy level question. I gave two solutions, one using a Hash Table, with O(N) time complexity and O(N) space complexity, and one using Sorting, with O(NlogN) time complexity and O(1) space complexity. However, both of them are not the optimum solution. In the end, I am not able to figure out the optimum answer, and I ask for some help from the interviewer. The interviewer is nice, and he gave me some clues and I immediately got the answer!! It took me around 30 mins for this section.

2. After that, we had a system design question. I have been asked to design a database to store users’ data on a website like Twitter. The question repeats on how to improve the time complexity under different situations when retrieving the data.

It took me another 30mins for the system design question, and after that, the interview is done.

Technical Interview 2

After another 3–5 days, HR informed me I pass the first round. I was so excited and we scheduled the second round. The second round again started with a coding question:

  1. It was a Tree recursive question, I found it difficult to solve. It took me around 1 hour to solve the question, and luckily I was able to solve it at the last minute. While it is not the optimum solution, it did provide the correct output. The interviewer tested my code with few test cases, and move to the next section without any comment.
  2. After that, it came to some technical knowledge Q&A. They tested me on some knowledge about MySQL database, TCP vs UDP, Hash table, and others.

The second round was terrible for me. I solved the coding question with more than 30 mins, and not with the optimum solution. Besides, I only able to answer 30% of the questions in the Q&A section. When the interview ended, I was thinking I have a high chance to fail the interview…

Final Technical Interview

However, after a few days, I received an email from HR saying that I pass the second round !!! It was totally out of my expectation !!! With an excited yet anxious mood, I finally had my last technical interview. Based on my research, the last interview should be more of a behavioral talk with your future team leader. Therefore, I didn’t prepare much for the interview. However, I was shocked when the interviewer asked me to start with a coding question…

  1. It was a question similar to Print uncommon elements from two sorted arrays but in a different way. I am able to solve it during the interview.
  2. After that, we went through some technical questions. They asked something on the Virtual Memory, C++, and Python. They also asked one of the common questions I have been asked in many interviews which is how we store a password in the database

3. Lastly, we had a system design question, where I had been asked to design an API. I have no experience in designing API at the moment, and I did this quite badly.

End of the interview, although I was not doing very well, overall I think it is better than the second one. Thus, I felt like I might have a chance to get the offer. However, I didn’t receive any news for a week. Normally, If you didn’t receive any news in one week, you might have a high chance to fail.

Final Technical Interview (2)

When I was thinking that I have failed the interview, I received an email from HR again. They mentioned that I didn’t pass the interview, but there was another team who think I am suitable for them and wish to proceed with another interview with me. Therefore, I had my second final technical interview. I have a coding question and data structure design question in this round. Again apologize that I can't share too many details on it but you can prepare this by Leetcode and searching online for typical system design & data structure design questions.

The interview ended quite early, around 40 mins. I felt like they were not satisfied with my performance. As expected, after two days, I received an email saying that I had failed the interview…

HOWEVER, the MIRACLE happened after three months when HR suddenly called me saying that they wish to RE-OFFER me the position. They explained to me that I have actually passed the interview, but they couldn’t hire me overseas at that time due to the Covid-19 situation. What a miracle!! I really felt like the job came from nowhere. They even offered a package that far exceeds my expectation, and thus eventually I accepted the offer.

Conclusion & Best Wishes

For me, the technical questions is the hardest part but don’t worry if you can’t answer all the questions. I wasn’t able to answer more than half of the technical questions and still able to pass the interview. Here are some tips for your interview before ending the sharing:

  1. If you are not clear with the question, always ask for clarification and example. There might be times when you actually know the answer but did not understand what answers they want from you. I did miss the chance to answer some of the questions just because I thought I don’t know. But after searching online I realize I studied the knowledge before, just in a different form.
  2. If after clarification, you still don’t know the answer, admit it, and skip it immediately. They are not expecting you able to answer for all the fields. Instead, skip the one you don’t know as soon as possible so that they have time to test on the right skillset you are familiar with.
  3. It is always a bonus to prepare some questions to ask the interviewer if you have a chance. It shows that you are truly interested in the Company. You may also ask for some feedback to help you better prepared for the next interview.

That’s all for my interview experience sharing. In the end, I just want to wish you all the best in your job-hunting path. 2020 is indeed a harsh time for all of us. Don’t be discouraged, I have been unemployed for 4 months, applied for more than 60 companies, only got 10 replies, and failed 8 interviews. Yet, the last two offers I got is much better than all the rest.

Believe in yourself, and GOOD LUCK !! If you have any questions, feedback, or fancy ideas want to share with me, feel free to contact me via LinkedIn. Let me know in the comment if this post did help you in your interview preparation :) Hope 2021 with be a good year for all of us !!!

--

--