This gist serves as a reminder for myself or for anyone who has found this on what to prepare. At this point, I have failed approximately 5 interviews (and counting) in Singapore, China, and Hong Kong. On the bright side, doing interviews allowed me to find out the gaps I have in my programming knowledge.
Take note:
- Just because there are questions I notice being asked by companies in certain territories, does not mean all companies in that territory will ask those, nor does it mean no companies outside the territories stated won't ask them.
- The number of companies I have interviewed with is considerably small. This study guide covers very little ground of what can actually be asked.
- Every failed interview gets you closer to better offers. So don't give up, keep going, you are bound to make it.
Observation: It seems like Chinese and Hong Kong companies tend to ask questions related to the underlying data structures used by database systems.
- Data structure of PostgreSQL (or other SQL DBs) indexes (b-tree and hash).
- Data structure of Redis.
Only 1 SG company actually asked questions related to data structures and algorithms so far.
Sample questions:
- Implement a function that will be ran everytime a user makes a move in a tic tac toe board of n*n size to check whether they have won with that particular move in O(1) time.
Preparations:
- Cracking The Coding Interview
- Practise your ass off on HackerRank
Frequently asked.
- Read up on Gang of Four Design Patterns and SOLID (Object-oriented design).
- Find your old real world project(s) for a good story to tell. Courseworks don't count.
Frequently asked. Seek to understand:
- How DNS works.
- How a typical HTTP/HTTPS request-response cycle is like.
- SSL handshake steps.
Related resources:
Example question encountered:
- An HTTPS library is vulnerable - it does not check for common names in certificates. How to intercept the data sent from the client? (Hint: man-in-the-middle, DNS poisoning, reverse proxies etc)
Master several aspects that make Ruby Ruby:
- Metaprogramming
- Callable functions - Proc, Lambda, Thread
You can easily find all these written and explained in details in Well-Grounded Rubyist. Go read the book in its entirety.
Examples of questions encountered:
database_cleaner
gem comes with several cleaning strategies. What do you use under different cases?- Assuming a piece of Ruby code that will execute HTTP request to another HTTP endpoint that will return arbitrary results with different status codes, sometimes even timeout. How do you go about testing this?
- Diff between process and thread.
- Diff between container and VM.
- Explain event bubbling.
- API consumption.