Bloomberg | Software Engineer | Pune | July 2020 [Reject]
Anonymous User
3126

Overview
YOE: 2 (but from an electronics company).

Applied for the software engineer position (via the career page) based on a lead in our alumni facebook group (Tier 1 Indian University). Was contacted within about a week and had to schedule Round 1 after about 10 days. I had prepared ~150 LC questions from the explore card and bloomberg-tagged questions but that unfortuanely did not help at all. There was no HR round or "Why Bloomberg" questions as followed internationally.

The interviews were conducted over Hackerrank where the whole code had to be written from scratch (Heads up: no convinient functions defined like Leetcode, have to read input, define classes and print output yourself). Since you define the class and function names, there are no testcases you have to test your code against, and the interviewer manually enters testcases. Make sure you install Nexi before hand and if audio issues occur, ask to switch to phone immediately.

The overall interview experience was positive but quite biased towards C++ specifics even though they mentioned that they were programming language agnostic. They grilled me on C++ specific OOP concepts and even a few OS questions. The difficulty of the questions was medium however, and unlike typical Bloomberg interviews, the focus was not on problem solving / communication as mentioned on their website, but broadness of C++/OOP knowledge with little problem solving as described below.

Round 1 (Phone Screen 1:1 Duration: 1 hr)
Interviewer was a software engineer. He briefly asked me about my background and then we jumped into the question.

  • This round has a single coding question (or rather I could solve a single question) where I had to design a Browser History API based on the LRUCache: https://leetcode.com/problems/lru-cache/. The question was a litltle vague and I took some time to fully understand the requirements. We had to implement the a visit function, a function that printed the websites in a least-recently-visited format, and a clear history function. The expectation was to code a doubly-linked list which dynamically grew as we visited web-pages upto a max_size, after which we start evicting web-pages. I could not add the dynamic part. Along the way we discussed why vector would not work and whether the access time of unordered_map was truly O(1) i.e. how C++ handles hash-collisions. Make sure you brush up on the list STL(s) as I had to create a struct and implementing all the operations took a long time.

I was about 50 minutes in when I was done with this question. In the remaining time, we discussed C++ specifics. He asked the below questions after this:

  1. What is polymorphism and what are the different types of polymorphism? I could not enumerate the types but was aware of function overloading (compile-time polymorphism) and the usual run-time polymorpism.
  2. How would you implement composition in C++? This is probably similar to the has in Java. I said by instatiation and declaring the containing class as friend if private access was required.
  3. What is the difference between semaphores and mutexs and when would you use either? I hadn't prepared OS as no interview experience to date had it so couldn't answer this one.
  4. What is RAII (Resource Allocation is Initialization) probably geared towards lock_guard and unique_lock or shared_lock. I couldn't answer this one either but read up on it after the interview.

After this he asked me if I had any questions to which I asked more about the team. I got a call for another phone screen after about a week and had another 10 days to prepare for it. This round however was unlike any interview experience described so far.

Round 2 (Phone Screen 1:1 Duration: 1 hr)
The interviewer asked me to "tell her about myself". After this we jumped into an OOP coding question:

  • Implement a complex number class which has real and imaginary integer parts. Define constructors, getters, setters and overload the + and == operators. We also had to print the complex number in the a + bj format with all corner cases handled (ex a=0, b=0 or+/-1). Fortunately I had read up on this.
    Along the way she asked me about the circumstances we would need getters and setters for. I probably got this one wrong, the real reason being that we would use them if we want to either restrict the user from modifying the values or perform some sanity check or bookkeeping operations before getting/setting the parameters. If you are do not wish to stop the user from modifying and dont need to perform any checks, there is no need to involve getters or setters. She also asked me what the scope of class was, to which I said private. The correct answer apparently is default.
  • The second question was not on Leetcode either. Given an MxN grid, with some cells having "mines" marked 1, and others 0, compute (and print) a MxN matrix, where for each cell that is not a mine, you print how far you can travel up/right/left/down (the sum) before you encounter a mine or the end of the grid. For mines, you would simply print 0. The O(MxN) solution was pretty obvious but she emphasized on minimizing the memory used and the number of times we would traverse the matrix i.e. 2 passes: top-left to bottom-right and reverse. I could not come up with this myself but given hints, I arrived the answer.

It was about 55 minutes at this point and she still wasn't fully satisfied with the way I implemented it (she wanted it inside a class with functions, which was not specified in the question) but agreed that it was the most optimal solution. She went on to ask the below C++ specific OOP quesitons:

  1. What are virtual functions and when would you use them? How do you declare a function to be purely virtual? I couldn't answer the latter, apparently you assign 0 to the function.
  2. How are virtual functions stored in memory? I couldn't answer this one but when she mentioned "virtual pointers" and "virtual tables" I said that I had heard of "vptr" and "vtable" but hadn't read up on them.

She asked me if I had any questions and I simply asked about how Bloomberg development centers were organized and how the Pune team was expanding. She said she'll give her feedback to the APAC recruiter.

I got an email about the rejection with no further feedback 2 days later. I hope this experience helps future Bloomberg applicants hack the process in India. My advice would be googling C++ OOP questions more than understanding modern C++ features and maybe brush up on common OS questions. I personally felt they expected too much C++ knowledge for an entry level position.

As for me, I'm glad the deadlines forced on me by the Bloomberg interviews sped up my LC solving. I hope this helps me with my next applications! Cheers!

Comments (3)