📜 ⬆️ ⬇️

In five days I was interviewed at five Silicon Valley companies and received five job offers

For five days, from July 24 to July 28, 2017, I was interviewed on LinkedIn, Salesforce Einstein, Google, Airbnb, and Facebook; all five companies offered me a job. It was a wonderful experience and I understand how lucky I was that my efforts paid off, so I decided to write about it. Here I will talk about how I prepared for the interviews, how they went and what impression the company made on me.



How it all began


I worked in Groupon for almost three years. This is my first job, there were wonderful people and great projects . We did all sorts of interesting things, introduced changes within the company, published materials and stuff like that. But over time, I began to feel that the pace of my self-education began to fade (to put it simply, slow down), I did not have enough food for the mind. In addition, like any software developer from Chicago, I was drawn to the San Francisco Bay Area - there are so many well-known companies.
')
Life is short, and professional life is even shorter. Having discussed everything with my wife and enlisting her full support, I decided to take the plunge and change jobs for the first time in my life.

Training


Although I was interested in the positions related to machine learning, the vacancies that were available in the companies differed nominally and in terms of how interviews were conducted. Three were looking for a machine learning engineer (LinkedIn, Google, Facebook), one was a data engineer (Salesforce), and one was just a software developer (Airbnb). Accordingly, I needed to refresh my knowledge in three areas at once: machine learning, writing code, and system design.

As I continued to work full day, the whole process of preparation lasted for two or three months. That's what I did.

Code

I agree that writing code during an interview is not the best way to fully appreciate the level of the developer, but nothing better to determine if you are a good programmer, in a short period of time, perhaps, have not yet been invented. In my opinion, this is an inevitable evil, through which you have to go to get to the desired place.

I practiced mostly on Leetcode and Geeksforgeeks, although Hackerrank and Lintcode are also good resources. For several weeks I repeated common data structures and algorithms, then pulled up areas in which I was not too strong, and finally, I began to work on typical tasks. Since I had a little free time, I usually limited myself to two tasks per day.

Here are some tips:

  1. Train as much as possible. Without this in any way.
  2. But instead of solving all 600 tasks on Leetcode, try to choose different types and carefully understand each one. In total, I completed about 70 tasks - I just felt that this was enough. I look at it this way: if 70 tasks did not bring you any benefit, it means that you approached them incorrectly, and there will be no sense from 700 either.
  3. Start with the most difficult. After them, everyone else will seem simple.
  4. If in two hours you could not move from a dead center, look into the solutions. Spending more time usually does not make sense.
  5. Even if you have successfully completed the task, still look at the answers. I often had to wonder at the thoughtfulness and elegance of the solutions offered there, especially the one-liners in Python.
  6. Use the language that you know best and which is widespread enough so that there are no problems with explanations during the interview.

System Design

This area is more closely related to real work experience. At interviews they can ask different types of questions, in particular, about the system architecture, object-oriented design, database design design, distributed system design, scaling, and many other things.

On the Internet you can find many resources that will help with the preparation. I mainly read articles about the experience of interviews in the field of system design and building large-scale systems, as well as practical cases.

Here are some resources that I found particularly helpful:

blog.gainlo.co
horicky.blogspot.com
www.hiredintech.com/classrooms/system-design/lesson/52
www.lecloud.net/tagged/scalability
tutorials.jenkov.com/software-architecture/index.html
highscalability.com

Interviews may involve different topics, but in general, it is better to approach the assignment, guided by two general rules:

  1. First, deal with the requirements, then outline the general scheme, and only then go into details. No need to immediately grab the details until you understand what they want from you.
  2. There is no perfect system. Choose what to donate, based on what tasks you have set.

To summarize: the best way to practice designing systems before the interview is to sit down and design a system; After all, this is what you have to do every day at work. Do not slide on tops - deeply study those tools, frameworks and libraries that you use. For example, if you use Hbase, instead of just running DDL through a client, try to understand the overall architecture, for example: how read and write happens, how HBase ensures consistency, why you need complete and incomplete sealing (minor / major compactions) and where The system uses the LRU cache and Bloom Filter. You can even compare HBase with Cassandra, find similarities and differences. In this case, when you are asked to design a distributed repository, you will not feel yourself pinned against the wall.

Many interesting things can also be found on blogs: pages of independent programmers, blogs of engineers from large companies, as well as in the official documentation of open source projects.

The most important thing here is to remain inquisitive and not overestimate your knowledge. Be like a sponge that absorbs everything that comes into contact with it.

Machine learning

In interviews in the field of machine learning, there are two aspects: the theory and design of the product.

If you have no experience in research in this area and you did not complete the relevant course with honors, it would not hurt to read special literature. Classical works like Elements of Statistical Learning and Pattern Recognition and Machine Learning are a great option, but if you are interested in more narrow issues, you can pick up something on the right topic.

Make sure you understand the basic concepts well: the displacement and scatter dilemma, retraining, gradient descent method, L1 / L2 regularization, Bayes theorem, bagging / boosting, collaborative filtering, dimension reduction, and so on. Familiarize yourself with the most common formulas, such as the Bayes theorem, as well as with derivations of popular models, for example, logistic regression and the support vector method. Work with simple models like a decision tree and K-means clustering. If you mention any models in your resume, study them thoroughly, be prepared to talk about the pros and cons.

As for product design, you need to be aware of how the creation process unfolds. I acted according to the following scheme:

  1. Define a goal: forecasting, recommendation, clustering, searching, or something else.
  2. Select the desired algorithm: with or without a teacher, classification or regression, a generalized linear model, a decision tree or a neural network, and so on. Prepare arguments for your choice.
  3. Select or create the necessary functions based on the available data.
  4. Select metrics to evaluate model performance.
  5. Optional: specify how to improve this model before transferring it to development.

Here I want to emphasize again how important it is to remain inquisitive and constantly learn something new. Try not just using the API for Spark MLlib or XGBoost and say: “Done!” With a sense of accomplishment, but find out why stochastic gradient descent is suitable for distributed learning, or understand what XGBoost is different from traditional gradient boosting, that is, the specificity of its loss function, why it calculates a second-order derivative, and so on.

How were the interviews


I started by saying that I unsubscribed HR managers on LinkedIn and asked for recommendations. After one unsuccessful attempt to get into a star startup (I’ll talk about this later), I carefully prepared for several months and finally, with the help of recruiters, I recruited interviews at companies from Silicon Valley for a whole week. I flew there on Sunday and spent five whole days in communication with more than 30 experts from the best IT companies in the world. I was very lucky - all five companies offered me vacancies.

Telephone interviews

All telephone interviews were standard. Only the duration differed: with someone, for example, Google, we talked an hour, with others (Facebook, Airbnb) - 45 minutes.

Here qualification comes to the fore: you are limited to a very tight timeframe and most likely there will not be a second chance. It is necessary to determine the type of task on the fly and explain the solution in general terms. Be sure to pronounce your goals and train of thought. At first, this may slow you down a bit, but communication plays the most significant role during the interview; the more of it - the better. Do not try to read a ready-made solution, it is very likely that the other person will see your trick.

If you are applying for a machine learning engineer position, you may be asked questions from this area. Be prepared for this.

In order to optimally manage time, I scheduled three interviews for the same day at one-hour intervals. The advantage here is that with a good start, the “flooded” effect may work; the disadvantage, respectively, is that an unsuccessful first interview can also affect the results of the following. So this strategy is not for everyone.

It is convenient to qualify in several companies in the sense that it provides some benefits. Due to the fact that LinkedIn and Facebook invited me to a face-to-face meeting after the first telephone conversation, Airbnb and Salesforce also did not conduct a re-interview.

Google surprised me even more: they allowed me to skip the telephone interviews altogether and immediately set up a meeting for a free day when they heard that I had already scheduled four interviews for the next week. I understood that it would be very difficult, but not to decline the invitation from Google!

Job interviews

LinkedIn



This was my first face-to-face interview; It was held at the branch of the company in Sunnyvale. The office is very pleasant and people stay with professionalism, as always.

Each session was given an hour. Programming questions were standard, but the tasks related to machine learning, in some places, seemed to me difficult. But at the same time, the personnel department sent me preparation materials in advance - they were very useful and, ultimately, none of the tasks took me by surprise. I heard rumors that, of all the Silicon Valley companies on LinkedIn, they feed the best, and judging by what I saw, even if this is not one hundred percent true, it is still not far from the truth.

The deal with Microsoft seems to have resolved LinkedIn's financial difficulties and gave them the freedom to engage in truly cool projects. New features - videos, professional advertisements - look interesting. As a company that specializes in professional growth, LinkedIn pays great attention to the development of its own employees. Many teams (say, those who are working on the relevance of advertising and selection of content for the tape) are now recruiting new employees, so if you want to join them, do not pull.

Salesforce einstein



The project is a superstar from the team of superstars. The team has gathered recently and it still has the atmosphere of a startup. The product is developed on the Scala stack, so type security is really respected! The company shows itself well at conferences, it is enough to recall Matthew Towbyn's speeches at Scala Days Chicago 2017 and Lee McGuire at the Spark Summit West 2017.

I interviewed at their office in Palo Alto. The team is solid and maintains a healthy balance between work and personal life. Everyone is passionate about their work and get pleasure from it. Here the interview consisted of only four sessions and passed faster than in other companies, but I did not want to leave. After the interview, Matthew even drove me to the HP garage museum.

Google



The undisputed leader of the industry, about which there is even nothing more to say - everyone already knows everything. But the company is huge. In a sense, in general, just HUGE. I had to ride a bike for twenty minutes to meet up with friends. Well, the queues for food are endless. And just a paradise for developers.

I was interviewed in one of the buildings on the Mountain View campus, I don’t know which one, because the territory is HUGE.

The specialists with whom I spoke looked very intelligent people, and then they spoke and were even smarter. It would be great to work with them.

What seemed unusual to me at the Google interview is how seriously they take the complexity analysis of algorithms. Well understand what a Big O notation is!

Airbnb



The rapidly growing unicorn company with a distinctive culture and perhaps the most beautiful office in Silicon Valley. New products, such as Experiences and an application for ordering tables in restaurants, a niche market for wealthy people and brand promotion in China - all this indicates a positive outlook. A good choice for those who are not afraid of risk and want to participate in a rapidly developing project, which has not yet reached the stage of the initial public offering.

The programming session was not quite usual: I had to work not on the board, but in an integrated development environment, so that the code compiles and gives the desired result. Some tasks were very difficult.

Also, Airbnb were the only ones who gave me a special interview with members of different teams. This shows that the company is serious about corporate culture and technical skills alone are not enough to guarantee a place in the company. Personally, I enjoyed communicating with employees from other departments. We chatted about this and by the end of the session were satisfied with each other.

In general, I would say that the interview in Airbnb turned out to be harder than others: it is longer, the tasks are complex, and the sessions are in an unusual format. If you want to get there, first familiarize yourself with the corporate culture and values.

Facebook



Another giant that continues to grow actively, but remains smaller and more mobile than Google. Considering his product line, which dominates the social platform market, and large investments in AI and VR, in my opinion, Facebook has a huge potential for future development. For those who are interested in machine learning, this company is ideal, because such stars as Yann LeCun and Yangqing Jia work in it.

The interview I was assigned to in Building No. 20 is where the roof garden and the windows overlook the ocean. Zuckerberg's office is located there.

I don’t know if the interviewers gave any instructions on this matter, but they didn’t tell me directly whether I had done the tasks. I guess so.

By noon, the four previous intense days began to be felt: my head ached. I lasted all afternoon sessions, but I felt that I was not up to par. I was even surprised when I learned that Facebook is also ready to offer me a job.

Overall, I still have the feeling that employees believe in the company's mission and are proud of the products that they create. Facebook is a good place to build a career: a market capitalization of half a trillion and with a constant increase speaks for itself.

Discussion of conditions


This is an extensive topic that I did not plan to disclose in my article, but I can point out this material - it seemed to me very useful.

Here are general considerations that seem important to me:

  1. Retain professionalism
  2. Know your benefits
  3. Show sincere interest in people and projects
  4. Show patience and confidence
  5. Be purposeful, but not to the detriment of politeness.
  6. Do not lie

Failure to interview with Databricks




Success stories always begin with defeats, and interviews are no exception. Back in May, before offering my candidacy to these companies, I failed an interview with Databricks.

In April, one of their employees, Xiangrui, contacted me and asked if I was interested in becoming part of the Spark MLlib team. I was in seventh heaven for three reasons: 1) they program in Spark, and I really love Scala; 2) Databricks has cool engineers; 3) Spark is now revolutionizing the big data world. This opportunity was not to be missed, and after a few days I began to undergo selection.

The bar is very high and the whole process takes quite a lot of time: first you need to fill out a questionnaire, then go through a telephone interview, then complete the task of writing code, and finally go to a personal meeting.

I was able to reach the stage of a personal meeting and visit their office in downtown San Francisco with a view of Treasure Island.

I was contacted by a very high class specialist, but without any complaints. During the interview I often had the feeling that I was reaching my limit. Everything went more or less smoothly, until in one session I was pierced in a big way — I didn’t have enough knowledge and preparation, and everything ended in a fiasco. Xiangrui was very kind to me and escorted me to where I was going after the interview; it was nice to talk to him.

A few days later I received a letter of refusal. This was to be expected, but for some time I was overcome with annoyance. Although I could not get a job at Databricks, I still sincerely wish them to continue to make their huge contribution to the industry and achieve more.

Conclusion


  1. Life is short. Professional life is even shorter. Do not miss the moment when you need to take a step.
  2. An interview is not only an interview, but also an opportunity to engage in networking and make new acquaintances.
  3. Always be inquisitive and ready to learn something new.
  4. The outcome of the discussion of conditions will determine your job satisfaction.
  5. If you were offered a job, then you meet the minimum requirements. There are no maximum requirements. Keep improving.

The process of changing my job lasted a long time — from May, when I went to the first interview, until the end of September, when I finally accepted the offer — and it was not easy. It was difficult to prepare, because my main job has not been canceled. For several weeks I lived according to such a schedule: I did assignments for interviews until one in the morning, then I got up at 8:30 and spent the whole day completely immersed in my company's workflow.

For five days in a row, going to interviews at different companies was also a serious stress and a big risk. I would not advise to follow my example, if time is not running out. On the other hand, if you can get several job offers at once, you will have a weighty advantage when discussing the conditions.

I would like to thank the HR managers who guided me along the way, all the people who took the time, and the companies for giving me the opportunity to have an interview and offered a place in the team. Finally, and most importantly, I am grateful to my family for my love and support: parents who follow my every step, starting with the very first, beloved wife, for everything she does for me, and for her daughter for her warm smile. Thank you for reading this post!

Source: https://habr.com/ru/post/342104/


All Articles