- Author of this article: Yi Xiao
- Her Github: https://github.com/lilyzhaoyilu
Hello everyone, I am Yi Xiao, and I am also a familiar dog head in the 91 algorithm group. Recently, the application and interview are basically over, just past Google’s HC .
My undergraduate studies in business, so I can be regarded as a member of liberal arts transcoding and
0 basic transcoding. Here I want to share with you my experience in the face of interviews and brushing questions~
Note: Google’s recruitment model is quite special. After passing the HC, it can be regarded as being accepted by Google and all technical interviews have been completed. The specific information about applying for Google will be follow-up article , so stay tuned.
My problem
When I was interviewing at Google, I brushed about 550 questions: 150 of them were easy, 310 were medium, and 90 were difficult. Among them are some classic repetitive questions from the Chinese station. For the top 200 and some high-frequency questions, I have done more than twice or more.
The picture above is a template question for my graph theory. On the left is my submission record, and on the right is my code.
I brushed about 60 questions intermittently before April, and then in April I started a new process and started to brush the questions well. The last interview is completed on July 20th.
Brushing experience
Start writing questions according to a tag/topic-based plan
Definition of tag/topic: You can see different tags (tags) at the top of the Leikou question bank interface, and you can enter the list of each tag by clicking on it.
The advantage of brushing the questions according to the label is that it can help you consolidate your understanding of a certain data structure, and continue to correct and improve.
There are many big guys on the Internet who have shared the order and question list, or you can create a list yourself. I don't think too much about "which list is the best". As a person who is just starting to study questions, learning A or B first today will generally not have much impact --- anyway, you have to learn at the end. The most important thing is to "start learning" and don't be afraid of imperfect plans. The plan will certainly not be perfect, it will be revised according to one's own knowledge and progress.
For me personally, I was lucky enough to participate in the 91-day algorithm held by Likoujiajia. The 91 algorithm requires that one question is punched together every day, and the questions for each week are around a data structure. In this way, a good way to verify your knowledge of a certain data structure and correct some of your wrong cognitions according to a label.
Build a Todo List with positive feedback
Why do I recommend writing questions as planned? Another reason is that Todo List is a very convenient tool for building positive feedback. Why is it important to establish positive feedback --- If you have played a game, then you must have felt like "Yeah, just play the game for a while, why is it so much?" When playing games, time flies quickly because most well-designed games continue to give players positive feedback. In the same way, if we want to keep questions, we have to create an environment with 16108c653db28a continuous positive feedback
Todo List is such a tool. I used the ipad + goodnotes + ElenaLin_青青 electronic handbook template + apple pencil . Generally speaking, I will make every day what I need to do the next day, and try to break it down into small, easy-to-complete steps. For example, if I want to learn the dictionary tree, then I will split the plan into:
- Look at the dictionary tree topic of the 91 algorithm
- Dictionary tree template question LC208 for writing 91 algorithm
Write 91 algorithm dictionary tree recommendation questions
- LC211
- LC212
- LC472
- LC648
- LC820
- LC1032
- (If you still have energy) Do your best to buckle the high-frequency 5 questions in the dictionary tree tab
Generally speaking, in addition to studying a certain topic, I will have some other things in my day, such as clocking in one question per day for the 91 algorithm, clocking in one question per day, checking emails, submitting applications, and so on. Most of the time, when I get up and sit in front of the computer, I instinctively feel that it is "too difficult", so that "I don't want to do it." Whenever I feel this way, I choose a project that I think is the easiest to complete among all the to-dos and start working on it. In other words --- Don't think so much, brother, it's over! (Well I am an fps gamer). I usually choose to do 91 daily question first, because it will not be too difficult, and will be seen by other students who read the question after the card is clocked in. This makes me feel like I am great. Just start to build the "Overcome Difficulties" -> "Perform Tasks" -> "I feel great after completion" behavior pattern, everything will become simple.
ElenaLin's electronic handbook usage tutorial can refer to this video https://www.bilibili.com/video/BV1Ai4y1w7ZM
Post a mid-term schedule. At this time, I have established a better cycle, so I will see more tasks completed every day, and I don’t rely too much on the action of "crossing out after completing each task" NS. My notes are not neat or beautiful, as long as I can understand them.
Of course, it doesn't have to be the same as me in terms of tools. Notebooks and pens are also fine. However, I strongly recommend using a notebook, because looking back at the weekend and at the end of the month will continue to deepen the behavioral patterns with positive feedback mentioned above.
Learn to stand on the shoulders of giants
Look at 10 minutes and question. If you have no ideas, don't waste too much time on the wrong method. Learn to read and learn the solutions of other people's questions.
Generally, the high-voted questions in the solution are very good. It’s okay if you don’t understand a problem solution, first write it according to it, and then figure out what each line of code is doing through various printing and debugging; if you still don’t know why, you can comment out a certain piece of code and click submit . At this time, the system will report an error. If you take this input line-by-line analysis problem solution, you can understand what this piece of code is doing and why it must exist in the problem solution. (In this way, the submission success rate will be lower, but what if it becomes lower, our goal is not to be the one with the highest submission success rate).
Of course, you can ask other people, but I prefer to ask questions with specific goals rather than broad questions like "how to do this question?" Generally speaking, the more specific the question, the better the answer, and the higher the chance of being answered.
Quantity or quality?
In fact, both are needed. A certain number is the guarantee of proficiency and the basis for seeing most of the question types.
Proficiency is very important in the interview: the interview lasts so long, other conditions remain the same, the faster you write the code, the more other things you can do. Other things can be more communicating with the interviewer, answering some follow up, doing some optimization, and so on. These are the items that will add points to the interview.
It is also very important to have seen most of the question can be better abstracted for a certain type of problem. For example, for the heap, the 91 algorithm has always emphasized that its essence is "dynamic extreme value". I didn’t understand it just after reading it. I did one question and I might understand it a little bit. When I did three questions, I felt like “Wow, it can be like this, oh really!” The ability to abstract problems is the same as having the ability to abstract problems. With the unchanging ability to respond to changes, you can stay calm when encountering problems you haven't seen before. The probability of encountering the original question in the interview is indeed not great, so it is important to exercise abstract ability.
Of course, the quality of the questions is also important. What are we talking about when we talk about the quality of brushing questions? I think quality refers to whether a question really understands what it is asking for. For each of the possible ideas for this question, what data structure is used, and what are the advantages and disadvantages of using this data structure. For example, the sum of two numbers, the hash table is a common time optimization solution. Here, the characteristic that the hash table can obtain the value of the corresponding key in O(1) time is used, space complexity is sacrificed, and time complexity is optimized.
Review and repeat
Review and repetition are very important, after all, "Which makes perfect". For me, the template questions for each data type are the ones I write the most, and I have to brush them every once in a while on the basis that I can read them over and over again. Before the interview, I have my favorite template for each common data type, and I can improve the template according to each question.
I remember that it was too difficult when I was learning to pile up, so I followed the pile written by 91 algorithm lecturer Xiao Yang for a week-the kind of week that I wrote from morning till night. After that, I often joked that "Even if you pull me up at three in the middle of the night and ask me to write a pile, there will be no bugs." Coincidentally, when I was interviewing a certain pre-ipo company, I got the pile-related knowledge. The operating environment at that time was a hacker rank, and the code needed to be run out and passed through examples (Note: not every company requires the code to run in the environment, and some company interviews are more like writing code on a whiteboard). I immediately gave the interviewer a short sketch of the biggest pile, because I was too familiar, so it was all in one go. After I finished writing, I found that the eyes of the two interviewers were shining. Later, the recruiter took the initiative to report that the interview results were very, very good. When I gave the offer, I gave it a bit higher than the level I applied for, and when I finally talked about salary, I also took the initiative to increase it by 12%.
There are many friends who are doing the same
Brushing questions, especially at the beginning, is difficult. In many cases, this is not difficult, but this "so difficult" feeling is what really hinders us from getting started. When there are many small partners, with the pressure and encouragement of people around, this feeling will be weakened.
In the middle and late stages of brushing the questions, I will often feel confused and anxious. Many small partners can also alleviate the sense of confusion. Even in many cases, because many bigwigs in the problem group and technical group have gone ashore, the bigwigs will share job information, which can be described as killing two birds with one stone.
For me, I added a lot of technical groups and question groups on the Internet when I decided to brush the questions. For most of my time when I was reading questions, I opened my eyes every morning to read WeChat, which was a page of unread messages from the question group. Every time I see this, I have a sense of urgency that I have to get up quickly to do the problem. I feel depressed every time I go to the group to chat with everyone and encourage each other, and I will feel full of energy for a while.
Where can I find these groups --- There are some active bosses in the Likou problem solving area who have good problem solving groups, and the Likou discussion area often has people pulling problem groups.
Adapt to the interview environment
Even if it is an algorithm interview, the feeling is still different from writing questions at home. Algorithmic interviews require fast locking of ideas and precise strikes. (Uh, it seems that there are too many games...) In this regard, I strongly recommend the weekly tournaments and mock interviews. You can find friends for mock interviews, and there are some websites that provide similar services. I simulated it three times on interviewing.io and it still feels very useful.
My current competition score is about 1780. Once I was very anxious and asked Lucifer what to do if I got nervous in the competition/interview. Lucifer's reply was simple and effective: "Play 20 games first, then talk about it."
Just do it
"Play 20 games first, then talk about it" is the most important guiding ideology for interviewing questions. is always very difficult at first, but things are often not as difficult as thought. I also often waste a lot of time looking for the "perfect" starting method because I am afraid that I "do not do well" --- in fact, when a person starts to learn a certain skill, there is a high probability that this learning method is not perfect. So if you also want to start brushing questions for interviews, please think of it as a game --- start playing first, and then adjust your way of playing the game according to your needs and online strategies, and you will gradually become a great god La.
Three Combo of Love
- When you see this, just click on it and support it. Your watching is the driving force for my creation.
- Pay attention to the official account and get more hardcore articles on algorithms! Add a star and don't miss every opportunity for growth.
- If you think the content of this article is helpful to you, please forward it for me.
- Backstage reply: "e-book", get my elaborate algorithmic e-book (20+ million words)
- Backstage reply: "Backpack", automatically get "Nine Lectures on Backpack" pdf
- Backstage reply: "Mind Map", automatically get the algorithm brain map summary I made
- Backstage reply: "Pick-up plug-in", which automatically obtains the plug-ins used by tens of thousands of people
In addition, you can also reply to specific algorithm topics to get corresponding articles, such as "two points", "heap", "tree", "linked list", etc.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。