☕ Get 22k downloads with a $0 budget
How a Solo Developer got 22k downloads for his app over a weekend with a $0 budget. Plus, how Slack does load testing with a inhouse tool called Koi Pond.
Hey Guys,
Interviewing.io is a fantastic resource I wanted to share with you all.
You can book realistic mock interviews with senior FAANG engineers who will give you detailed and actionable feedback on exactly what you need to work on.
Mastering algorithms on LeetCode and system design on SystemsExpert is great, but they don’t prepare you for the pressure and stress that comes from an actual interview setting.
The best part?
You don’t pay anything until you’re hired.
Check them out here.
Special thanks to Interviewing.io for sponsoring Quastor Daily. I’m a user of the service!
Tech Snippets
How I got 22,000 App Downloads in One Weekend With a $0 Budget
Joshua Fonseca got tired of wasting time trying to pick a movie to watch with his friends group. So, he hacked together a Tinder for Movies.
You and your friends all log onto the app and get prompted with different movies. You swipe right for yes, left for no. If all of your friends swipe right on the same movie, then the app will tell you the movie.
He used a pretty simple tech stack with React Native for the front-end (using a cross-platform framework helped him ship faster), Express.js for the backend, MongoDB and Azure Storage (for Blob Storage).
He then posted the app to Reddit on the r/movies subreddit.
At first, he was downvoted (typical reddit), but he checked back later and saw he had 2000 upvotes.
He’s had an amazing reception since going viral….
How Slack does Load Testing with Koi Pond
The only way to see if your app works at scale (and find the bottlenecks) is to actually test it empirically. Load Testing is the practice of doing just that.
Slack wanted to load test their backend systems. They have Slack clients (in a browser window or in the desktop application) and these clients send messages to Slack’s backend whenever a user posts a message in a Slack channel.
The backend system then handles writing the message to Slack’s datastore, expanding link previews and then sending the event to all the other connected clients in that Slack channel.
Slack developed a tool called Koi Pond in order to load test their backend while also mimicking specific performance concerns they had about operating at scale.
A tool called Koi Pond spins up slimmed-down versions of Slack clients (Koi). Each Koi will establish a websocket connection with the backend and send the backend API calls.
Slack can run millions of Koi at a time and test various situations using a complex orchestration toolkit they built to manage the Koi in Koi Pond. One example of a bottleneck they were able to identify was on the database namespace used by their monitoring systems.
Read the blog post for a full break down of how Slack does it!
Interview Question
How would you build a spelling correction system?
Possible Follow On Questions
How would you check if a word is misspelled?
How would you find possible suggestions?
How would you rank the suggestions for the user?
We’ll send a detailed solution tomorrow, so make sure you move our emails to primary, so you don’t miss them!
Gmail users—move us to your primary inbox
On your phone? Hit the 3 dots at the top right corner, click "Move to" then "Primary"
On desktop? Back out of this email then drag and drop this email into the "Primary" tab near the top left of your screen
Apple mail users—tap on our email address at the top of this email (next to "From:" on mobile) and click “Add to VIPs”
Previous Solution
As a refresher, here’s the last question
You are given two strings as input.
Write a function to check if one string is a rotation of the other string.
An example of a rotation is "CodingInterview", "erviewCodingInt".
You will also be given a function isSubstring
that will return a boolean that is True if one string is a substring of the other. You can only call this function once.
Input - "CodingInterview", "erviewCodingInt"
Output - True
Input - "Test", "est"
Output - False
Solution
Let's label the input strings x1
and x2
.
If x1 is a rotation of x2
then there must be a point in x1
where the rotation happens.
An example is if x1
is "erviewCodingInt"
and x2
is "CodingInterview"
.
Then, the rotation point is after "CodingInt"
. We can imagine splitting x2
at the rotation point into a
and b
where a
is "CodingInt"
and b
is "erview"
.
Then, x1
is ba
and x2
is ab
.
x1 = erviewCodingInt = b + a = erview + CodingInt
x2 = CodingInterview = a + b = CodingInt + erview
So, we want to see if we can split x2
into a
and b
so that ba = x1
and ab = x2
.
We can also see that ba
will always be a substring of ab + ab
, as there is a ba
after the first a
. Therefore, x1
will always be a substring of x2 + x2
.
So, we can check if x1
is a rotation of x2
by seeing if x1
is a substring of x2 + x2
.
Want more practice with real FAANG software engineers?
Check out Interviewing.io!
You don’t have to pay anything until you get that job at FAANG!