Bay Area job search sharing: After three months of writing questions, I got a Google offer

Table of Contents

Some friends pointed out whether "three months" is just sensationalism to gain attention. Actually I do tell the truth (see details below) three months. I just want to share how to do the questions efficiently so that everyone can avoid detours. In my opinion, those friends who have done it five times or ten times have taken a detour. If everyone can understand it after one or two times, why not do it?

My background introduction:

  • Undergraduate degree in a certain domestic 211, EE major Power
  • Master's degreeUSC CS General

Internship experience

  • Amazon Inc, Seattle, WA. 3-month intern
  • Tesla Motors, Fremont, CA. 4-month intern

CV

The meaning of resume:How important is a resume? Do you want to write your resume in a fancy way? If you write more and exaggerate, will you be questioned?

For New Grad, a resume is just a stepping stone. The purpose of a good resume is to make HR notice you, "Oh, this New Grad is good, let's arrange an interview for him." Therefore, your ultimate goal is to get an interview opportunity. A good resume can help you pass machine screening and HR screening, but in many cases, you can get an interview opportunity with an average resume. "An average resume" does not mean "a poorly written resume". I will explain it in detail below.

What a good resume looks like:

Name: John Doe Email:jd@gmail.com Phone:xxx-xxx-xxxx EDUCATION: 08/2014 - 05/2016 University of Southern California (USC) M. S. in Computer Science Los Angeles, USA GPA: 3.80 ... //There is nothing to say about this, just keep it simple EXPERIENCE: 2015/05-2015/08 : Amazon Inc, Seattle, WA Position: SDE Internship - Design and develop a realtime data aggregation workflow... - Use AWS Kinesis to consume the original chunk of data... - Develop a Java data processor that runs on AWS EC2... 2014/07-2015/01... //Write about where you have worked/internship, what you have done and what technologies you have used. PROJECTS: Web Search Engines on Arctic Data Information Retrieval - Build a search engine based on Apache Solr for polar data analysis. - Design and develop web crawler to fetch data from polar science website - Use SimHash algorithm for near-duplicates deduplication. - Build a web search engine and apply page rank. ... //Requires a technical description of the project. The name of the project, and then write in the form of a bullet point what technology was used and what was achieved. SKILLS: - Programming Languages: Java, Python, PHP, JavaScript - Operating Systems: RHEL, Debian, Mac OS Anything written on SKILLS will be asked.

Summarize:

  • A good resume does not need fancy layout, just be generous and decent, and don’t have a “cool” feeling;
  • Try to fit it on exactly one page. No need to exceed one page (except for Daniel);
  • The content must at least be "based on truth" and can be "appropriately processed";

The standard is: anything written on the resume can be expressed clearly and in detail and fluently when asked by the interviewer. What technology was used? Which services? Questions such as "I see you have used AWS EC2 on your resume. Tell me in detail about AWS EC2 and the difficulties you encountered when using it."

Importance of internship:
If a "perfect resume" is 100%, a good work/internship experience determines 50%-80% of this resume. If you can try to intern in a big company, try to intern in several different companies. In addition to internships: papers, projects, and prestigious schools will divide the remaining 20%-50%. 4.0 will be a small plus. Other than that, there is no difference between 3.0 and 3.9, but it should not be lower than 3.0. In fact, not many people except Oracle will look at GPA.

If you have no internship experience, the best advice is to use the time between now and graduation to find a few more internships for yourself.
If you have already graduated or are about to graduate and do not have time to do an internship, then write more of the projects you have done in school.

Review questions

Three months process:
It took more than four months from the end of my internship at Tesla in December 2015 to the completion of my interview with Google in April 2016. I gave myself a two-week holiday on New Year's Day and a two-week holiday on New Year's Day, interspersed with going out for fun. I spent about three months continuously studying questions. I am a "full-time problem solver" every day, and the tasks assigned to me every day (x questions) will be divided into A in the morning, B in the afternoon, and C in the evening. If you finish early, you can use the remaining time to relax.

I started working on the questions in December 2015. I made a plan for myself and made a table on the wardrobe mirror (no whiteboard -.-). This table is my reference for self-checking every day. The original plan was to finish all the questions (about 340) in two months, but the fact was that I didn't really finish all the questions until I found a job. Finally, I did 250 unlocked and all locked questions (several of our friends jointly bought a leetcode membership).

My previous basis:
I had never learned programming as an undergraduate, and I didn’t understand the algorithm courses I took as a graduate student. I only understood many of the concepts in class when I was answering questions.

At the beginning of 2015, I brushed up on the questions once during the Amazon Intern interview and did about 100 easy and medium questions. At school, I was doing questions while attending classes. Three days of fishing and two days of drying nets were not effective, and I only learned a superficial amount.

At the end of 2015, I looked through the questions I had done and basically forgot them all. Just get a new account and start over. This time I will summarize each question. Read the popular comments on leetcode, and write down in detail in your notebook your own problem-solving ideas and those of others who have written better than you. When encountering a new question, try to understand it, classify it, compare it with old questions, write code, look at popular answers, correct and optimize your own answers, find out why he can come up with this solution, and search for relevant and unfamiliar knowledge points.

This method will be very slow at the beginning, and there will be no sense of achievement. But the effect is surprisingly good. After finishing half of it, I can understand the questions very thoroughly. When I encounter an algorithm or data structure that I have been tested on, such as a trie tree, I will go back and look at all the trie tree-categorized questions. I mainly look at the questions and recall the solutions. If I can’t remember them or I’m not very confident, I’ll write them again. On the contrary, it is very familiar, so I go over it in my mind and continue. After reading the trie tree, you will also think of Binary Search Tree, Segment Tree, and Binary Index Tree. Go through these data structures in your mind.

The feeling after doing this is that everything is connected. If you give a random question, you can find out what question it is similar to, or its essence is a variation of this algorithm. In short, I clearly feel that I have learned it.

Writing questions is boring. If you think about using perseverance and perseverance, it will only make it more boring. Perseverance is necessary, but persistence is often painful. Why not make the process happy. In this era, everyone is a thousand-mile horse, but Bole does not always exist. We can only be our own players and develop the most appropriate training methods for ourselves, which vary from person to person and according to local conditions. We are both "athletes" and "coaches". After all, we know ourselves best. Give yourself some rewards from time to time and give yourself a short vacation to go out and walk around.

In fact, it’s not that difficult after a few months of hard work. Like the farmer uncle, farming is hard, but the harvest is joyful. When you find that after working hard for a month, you can solve the problems with ease and explain them to others in a clear and logical way, you will still feel a sense of accomplishment. After all, there are only a few hundred questions, which is far behind the college entrance examination. It's hard to become perfect, but it's still within easy reach.

How to write questions:

The most frequently asked question is: How many times is enough to practice the questions? I want to say that the answer varies from person to person. I haven’t finished it once, and I feel that it is enough. Because the purpose of studying the questions is not to study them several times, but to understand them clearly. For example, anyone who has taken the college entrance examination knows that the college entrance examination will not ask the questions you have done. So is it useful to do the "5-year college entrance examination and 3-year simulation"? The answer is yes. The meaning of studying algorithm questions is the same as doing the college entrance examination practice questions. Your purpose is to understand what the question maker wants to test you, how to solve the problem, several ideas, and finally write the optimal solution.

How to understand the questions "without finishing it once"?

"Being good at summarizing" is the core. Let's take the college entrance examination as an example. "Questions you can't do and questions you get wrong" are far more meaningful than "questions you get right." Only by making mistakes can you make progress. The same goes for doing algorithm questions. Don't waste time on questions you are familiar with. Use your time on wrong questions or questions you don't understand.

When you get a question, what do you do?
Just take itMerge k sorted ListsAn example of this question:
Merge k sorted linked lists and return it as one sorted list. [Java]
1) First think about a simple merge idea. Go through k head elements each time, they are the smallest among their list, k pointers and totally nk elements.
time: O(nk^2) space:O(k);
[CODE] Oops, write it yourself, this is simple

2) Use heap. This is a classic question for heap. each time we change a heap value we only use Log(k) time
time: O(nkLogk) space:O(k)

1) A comparator used can be passed to Collections.sort(coll,comparator)
2) In java, heap is implemented as PriorityQueue. The constructor
PriorityQueue(int initialCapacity, Comparator comparator)
constructor is initialized with capacity and compare rule.
3) Java anonymous class is used to simply create and use this comparator
4) The node inside list could be null
5) PriorityQueue use poll() method to pop out it’s first element

public class Solution { private static final Comparator comp = new Comparator(){ public int compare(ListNode x, ListNode y){ return x.val-y.val; } }; public ListNode mergeKLists(List lists) { if(lists.size()==0) return null; Queue heap = new PriorityQueue(lists.size(),comp); for(ListNode node : lists){ if(node!=null) heap.add(node); } ListNode dummy = new ListNode(0); ListNode p = dummy; //heap did not implement isEmpty method while(heap.size()>0){ ListNode node = heap.poll(); if(node.next != null) heap.add(node.next); p.next = node; p=p.next; } return dummy.next; } }

1. This question is obviously for Heap. If you don’t know enough about Java PriorityQueue, you should review it. Java7 is different from Java8. Java8 no longer requires a given size when passing in the comparator.
2. It is written in the codeCollections.sort(), and write anonymous classes in sort.
3. Why write dummy? In those questions you need to write dummy and return dummy.next. Those questions are not required?
4. Why use Queue interface? Is it okay to use List->LinkedList? Do you want to review and summarize list, queue and their implementation? If you are not familiar with Object Oriented, do you want to take a look at inheritance (Inheritence) and polymorphism (Polymorphism). Then think more deeply, what are the differences, advantages and disadvantages between Abstract Class and Interface?

These Java basics are what you need to think about when doing questions. If you don't understand them well, you should solve them in time. Students with poor foundation will be slower at the beginning, so it will take more than half a day to finish a question. This is normal. Once you have done it more and become familiar with it, you will be able to solve the questions faster. Every time you do a question, you will strengthen your knowledge points.

The code [CODE] part and my own thinking notes on the code are all written in Evernote. Every time I finish writing the code, I write down my thoughts when encountering the problem, ideas for solving the problem, my own understanding after reading other people's answers, and improvements to my own code based on the answers.

Design:
Design can be basically divided intoObject-oriented Design(OOD)System Design(SysD). Let me briefly explain my understanding:
OOD: Object-oriented design, as the name suggests, designs the structure, relationships, and logic in the development process. For example: designing elevators; designing backgammon; designing various games, etc.
SysD: More focused on scalability. For example: DB (Master-slave), sharding, Cache (Redis, Memcached), Load-balancing, etc.

OOD recommendation:

SysD recommends:
hiredintech
http://highscalability.com

A very good post:https://www.evernote.com/shard/s576/sh/7e58b450-1abe-43a8-bf82-fbf07f1db13c/049802174415b418a2e65f75b744ab72

1. This preparation is endless. There is no need for New Grad to invest too much time in this. I spent two weeks, one week each on OOD and SysD.
2. SysD watched this tutorial on the hiredintech website twice, especially the 1 hour and 45 minute video from Harvard, which I watched three times. For the first time, I didn’t understand what was being taught at all, so I just took notes and listened to the lecture. Then I went to highscalability.com and looked at a few examples. I searched all the videos that introduced the concept. After watching it for the second time at 1.5x speed, I basically understood it thoroughly. Before the interview, I watched half of it at 2x speed to recall it.
3. There is no end to OOD. At least remember, understand, and know how to use Singleton and Factory. The rest is just bragging. OOD is rarely absolutely right or wrong. Usually it depends on whether you can tell the advantages and disadvantages of such a design, and the pros and cons of the choice.
4. Don’t spend too much time on design. If you don’t use it, you won’t be able to remember it, nor will you understand it. Just take two or three weeks to understand a few examples, take notes, and review them before onsite.
5. For SysD, I followed Harvard’s lecture and drew a diagram with universal applicability, which can be applied to different companies/businesses with scalability. Look carefully at the lecture.

interview

Interview Pipeline:
HR arranges interview -> (HR chat) -> (OA) -> Telephone interview (x 2) -> onsite -> (additional interview)
Note: (content in brackets) may or may not exist.

The most important thing is how to get HR to put you into the pipeline and arrange interviews for you. There are several ways: overseas investment < campus recruitment < internal recommendation < direct contact with HR

So, the best situation is that HR takes the initiative to contact you. It means he is interested in you. Then he will definitely put you into the interview pipeline. So how do you get HR to contact you proactively?
1. Excellent resume (experience);
2. LinkedIn Allstar;
3. Hackathon, Hackerrank and other activities/platforms are outstanding;
4. Get the HR email from the person who has the interview, take the initiative to contact HR, and recommend yourself.

The combination of 1 and 4 works best. It is recommended that you write your resume well, and then ask for HR contact information from friends around you who are interviewing, and then help yourself.

Contact HR proactively:
As mentioned earlier, it is best to contact HR directly. The simple and crude method is to get the contact information of HR from a friend, and proactively send an email with a self-description and resume. Usually HR will reply to you quickly.

The title can be: Strong Background Candidate You Might be Interested. Content: Briefly introduce yourself and the project you have done. It feels like it matches your company's direction/products/culture. Attachment: Resume

It is best to contact campus recruiting HR directly. There are many levels and focuses of HR, some of which specialize in recruiting experts, and salaries, interviews, etc. are all discussed individually. Some are facing New Grad. Some are facing ordinary job hopping. In some companies, HR works with groups, such as Apple. The HR of a certain group looks for people specifically for this group.

Normally, if HR thinks you are not a match, they will recommend you to HR at the corresponding level/HR from other groups.

Electric surface:
Electric sites are "usually" simpler than Onsite, but this "usually" does not apply to "more popular" companies such as Google and Uber. Google's interview experience can be said to be "bottomless", so if you aim for the top, it is recommended to have a comprehensive understanding of the questions.

Onsite:
Personally, I feel that onsite is not necessarily more difficult or easier than electric surface. What questions come up is highly random. An interviewer will probably prepare three or five questions. He usually chooses questions from the three or five questions he is familiar with to test you.
The content of the assessment is:

Abstraction and understanding of the problem:What I'm expecting you to answer here is: "This question can be abstracted into topological sorting. Some steps need to be executed before other steps. If a cycle is not formed, the whole thing can be completed." If you are able to analyze the essence of this question clearly, the rest is to implement it. Of course, if you haven't seen some questions before and you can't tell the answer at a quick glance, then you need to communicate with the interviewer.

Communication skills:How to communicate with the interviewer? When you encounter a question you haven't seen before, or you get stuck halfway through writing and can't finish writing, you need to "test" the interviewer. If you encounter a question about comparing sizes and you don't know how, you can always think of 1 sort 2DP 3divide conquer Then you say, I currently have several immature ideas: 1, 2, 3. But I am not sure which one is more suitable, what do you think? A reasonable interviewer will understand immediately and say, try sorting. The core idea here is, don't just say something if you don't know what you're talking about. Instead, make some tentative assumptions and see how the interviewer answers.

Coding:After "discussing" with the interviewer, you can start writing after you have determined your ideas. There's actually nothing much to say about writing code. I've just finished studying the questions. The suggestion here is that when writing code on the whiteboard, it is best to bring your own pen. I always bring "fine-thickness black, red, blue, and green whiteboard pens" (bought from Amazon) for interviews, because a thinner pen makes it easier for me to write clearly, saves space on the whiteboard, reduces smearing, and is clear and good-looking. When talking about my code with the interviewer, I use another color to make it clear and clear.

Another aspect is the coding style: "Try to keep each function within 20 lines." If you can write a function separately, try to write it separately, because the whiteboard is long and wide. If you write too much vertically and then turn, it will not look good and it is easy to make mistakes. for example
isGraphVerticallySymmetric()

Given a list of dots, return true iff the graph in the dot can form a vertically symmetric graph.

  EX: 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 return true; 0 1 0 1 0 0 1 1 0 0 return false;

analyze:

For each x, find all it’s y and put it into a list. HashMap>
For each x, calculate its list of y’s symmetric middle point.
If pre_middle_point != cur_middle_point return false.

Then it can be seen from the analysis that two independent functions are needed, with the following structure:

  isGraphVerticallySymmetric() preProcessGraphToMap() calculateAndCompareMiddlePoint() calculateMidPointOfList()

isGraphVerticallySymmetric()The judgment can be completed by calling these two functions respectively. WritecalculateAndCompareMiddlePoint()I found that I can write a separate calculate function. Compare is relatively simple, just make the judgment after the calculate function. [This question is quite good, I suggest you write it yourself to deepen your understanding].

Then there should be four functions on the whiteboard, each function is not very long, the logic is clear, and the code is clear. (optional) After the code is well written, if you still have time and ideas, you can verbally chat about some more creative solutions to show your intellectual superiority.

Summary: A good interview process is like giving a lecture to a student who doesn't know the question. Find a way to explain it to the other party very clearly. If there is something you don’t understand, communicate more. Even if the worst result is that you don’t write the code completely, the interviewer will think that your thinking is clear and logical, even though your coding ability is not good. Give you a moderate rating. Try not to get bad reviews.

This siteOriginal articleAll follow "Attribution-NonCommercial-ShareAlike 4.0 License (CC BY-NC-SA 4.0)". Please keep the following tags for sharing and interpretation:

Original author:Jake Tao,source:"Bay Area Job Search Sharing: Studying questions in three months to get a Google offer"

270
0 0 270

Further reading

Leave a Reply

Log inCan comment later
Share this page
Back to top