Background
Education: New grad, BEng CS, Top 10 School in Asia
Position: Software Engineer New Grad 2021
Internship experience: Summer internship x2 (no big name, one was at a fast-growing hedge fund)
Overall Interview Experience
Application
A recruiter reached out through LinkedIn. Applied through Bloomberg's web page and received an invitation to interview a few days later.
First Coding Round (Nov)
There were two questions for each round. Was not expected to run the code and the syntax did not have to be perfect. I typed up all my solutions in Python.
Interviewer: Software Engineer x1
The first question is a variation of https://leetcode.com/problems/consecutive-characters/
The second question is https://leetcode.com/problems/number-of-islands/
Second Coding Round (Dec)
Interviewers: Software Engineer x2
The first question is https://leetcode.com/problems/design-underground-system/
The second question is https://leetcode.com/problems/populating-next-right-pointers-in-each-node/
Thoughts on the Coding Round:
System Design Round (Jan)
The interviewer was a senior engineer. The problem was to design a platform where users can download videos to watch. Moreover, the service should be able to
This was the trickiest round because I wasn't sure what to expect. I prepared by reading https://github.com/donnemartin/system-design-primer and watching some tutorials on YouTube. Though beware that some tutorials focus too much on choosing an implementation/protocol and "scaling" the system. Based on my interviewer's reaction, I would suggest don't bother with discussing a particular implementation and scaling early on. Just focus on coming up with a design that could fit inside a single machine. Then, you can start to discuss how to improve performance within that single machine, for example by introducing a cache. Only after that, should you start considering scaling with multiple machines and (optionally) showing off your knowledge about different solutions available on the market.
Another important thing is not to shy from discussing a requirement. Do ask questions like "how often should we update the data", "how accurate should the data be". Don't get too excited with trying to come up with a watertight solution immediately, since it may not even be necessary for the given scenario and would just serve to over-complicate things. I think this round is not only about your technical skills, but also to show that you would consider other collaborator's perspective and can communicate effectively.
Edit
could you share more details on how you approached the systems design question?
I started with identifying what data has to be persistent, then describe the database schema. E.g. there obviously should be a USER table with user_id, watched_video_ids; similarly, there should be a VIDEO table. Next, I listed out some important APIs to provide. E.g. there should be a Login API, Recommendation API, Download API, etc. Then, because I was very nervious, I drew a very ugly and crude system design diagram that includes the usual things like data storage, API, and arrows connecting things together.
Luckily, at this point, the interviewer started taking over by asking a lot of questions based on what I had said. So I just had to focused on answering them. Some of the questions asked:
Behavioral Round (Feb)
There were two interviewers, one from HR and one was a senior engineer. No technical questions. Very typical behavioral questions like "what would you do if you and your coworker have different opinions on how to solve a problem", "why Bloomberg". Was also asked about any competing offers.
Received an email two working days later that they would like to extend an offer.
Compensation
Base salary: £73,000
Relocation bonus: £7,000
Bonus: £3,000
Did not negotiate; no competing offer. I actually didn't even apply anywhere else. I always thought I weren't good enough for this kind of place since I'm just an average Joe with a mediocre GPA. Please don't make my mistake. GPA isn't everything. Believe in yourself and go for it!