Technical interview experience of new job seeking (Part 1)

It has been almost 4 years since I joined the current company, but things are quite different from the old beginning days. So I think it’s time to search for new opportunities.

Here are some interview experiences with technology companies I tried during the last several months, hope it gives you some help if you are seeking a new job too.


Booking (Amsterdam)

I applied for this job via its website directly, the role was titled as a software engineer which would be focusing on payment system development, but the recruiter said it also needed some management skills.

I passed an online assessment on HackRank which was composed of 4 easy-level coding rounds, then I failed on a phone call with the recruiter. He asked a lot of behavior questions, such as “How to solve the conflicts between team members? Why Booking?”. To be honest, I didn’t prepare well for those questions at that time, so this failure didn’t surprise me, but it really reminded me of the importance on answering those questions, it’s not quite good enough to only give an unclear feedback, you should give some examples exactly.


Amazon (London)

I was very glad of passing resume assessment, during the first phone interview, the interviewer asked some questions about basic programming knowledge mixed with behavior ones, such as “Differences between an interface and abstract class? Biggest failure from previous experience and what you have learned from that? What’s hash-table?”. After that, I spent 15 mins on coding approximately, the coding challenge was kind of parenthesizes match problem, you can use a stack to solve it easily.

I was told failed after one week without any feedback. I think maybe my answers to behavior questions were not what he wanted.


Google (Shanghai)

It was my second time to apply for Google, yes, still a great challenge ahead of me this time.

So, first phone interview, we just worked through the coding process directly after a brief self-introduction. The problem was composed of 2 parts. Part 1 was a standard shortest path finding problem in an edge-weighted DAG which should be constructed by your own, I wrote a BFS algorithm and did some space and time complexity analysis. The interviewer said “It’ good and let’s move on”. Part 2 was a follow-up for previous one, “Given a weighted bipartite graph, find a completed match with minimum total weight”, because time was limited, so I was asked to share some thoughts instead of coding, my first idea was Kuhn-Munkres algorithm, also I shared a solution from a perspective of minimum-cost flow problem. Then I scratched a little bit to describe how to build network flow with weighted edges.

The feedback was good, and I received an onsite invitation several hours later after that. I spent several days on onsite interview preparation but still got nervous and anxious on that day.

Round 1: Two problems, “Find and remove the extra edge from a given binary tree” and “Find a path with the max product alone a binary tree”. Question 2 was followed up with “What if the node contains a negative value?”.

Round 2: Given a string only contains 0 and 1, for each query, you are given an integer K, find the total number of substrings that contains exactly K “1”s and arbitrary “0”s.

Round 3: Some behavior questions first, then followed by a system design challenge. Basically, I was asked to design a turn-based battle game on high-level.

Round 4: Given exchange rates between some currencies, for each query of 2 currencies, output the exchange rate, also, you should find a good way to avoid precision noise. A tricky part of this problem is “What if there is a cycle between these currencies?”

Round 5: Similar to LeetCode 815, you should choose your algorithm on different kinds of scenarios, such as “What if the number of stations is much larger than the number of lines? Or vice versa?”

I was told failed again on the next day, the feedback was a great performance on the system design round, but hadn’t reached their hiring bar on other algorithm solving rounds.


Cloudflare (London)

I talked to a manager from San Francisco via Skype, the process was mainly about diving into my resume. Eventually, the feedback was pretty good, but due to H1b issue, the recruiter asked me to pick London office instead, but I should wait for some legal procedures to be taken before proceeding the hiring process.

“London? Yes, why not.”

But things were quite unexpected, after waiting for almost 4 weeks, I still got nothing. So I sent an email, the recruiter finally replied and he said he just came back to the office after a long vacation and forgot about me totally.

“Wow, I mean, are you serious?”

In the meantime, I was asked to take an online assessment on HackRank. To be honest, this was the worst assessment that I have ever token, not because of the problem, but also because of the standard output, which was totally incorrect. There was a problem, you should output fields of an object in json format, you know what, the output of some cases was even without double quotation marks, it was totally misleading. This made me lost interests. As excepted, the recruiter told me I did not pass, even though I output the “correct” answer.


Indeed (Tokyo)

“I love Tokyo sincerely, so why not try to work there?”

I applied for Full-Stack Engineer position, the online assessment was still on the HackRank. It was a typical BFS algorithm problem, but you should use some optimization such as memorization to pass some larger data tests. Due to passing all test cases, I received a phone interview invitation on the next day.

As usual, I started coding after a short self-introduction, the problem was “Given an integer stream with the timestamp, find the mean value of the last 5 minutes?”. It was easy to provide a brutal force solution, use a vector or a queue to store the numbers, and for each query, just walk through it, then you get the answer. But it was not efficient, you can optimize with some better ideas, for example, try to maintain a variable to save the sum of incoming numbers to avoid redundant calculation, then try to kickoff over-dated numbers for each query. Finally, the feedback was still great, so I got an opportunity of flying to Tokyo for an onsite interview.

So, onsite interview, I arrived at their office at 9:45 am, and a receptionist gave me a quick office visit which I should admit was pretty great.

Round 1: Design a company/job review system, you can post a new review and list reviews

Round 2: Code Review, this is an unusual round among other technology companies. I was given a piece of Python code and asked to find out some inappropriate parts.

Round 3: Given a valid word list “Words” and an input string “S”, try to find out whether or not “S” can be tokenized by a combination of words chose from “Words”. I was stuck when writing code on the whiteboard.

Round 4: Dive into the resume, well, it was a great talk to the hiring manager.

Round 5: Given 4 billion jobs, each job is an int64 ID. Implement two functions: `expire(int64 id)` to set a job as “expired”, `isExpired(int64 id) `to check if a job is “expired”, the follow up is try to only use 16GB memory to solve this.

After those rounds, I spent about 30 mins talking to a man in charge of this engineering team, basically, the topic was on something like “How do you feel today? How are these question?” I flew back to Shanghai that night, it was really a tough day.

After almost 3 weeks waiting, I was told failed because the experience on architect and whiteboard coding was not strong enough.


Summary

I learned a lot from those interviews, preparation is always the key to success, meanwhile, I’m very happy about having some chances to improve my oral speaking.