How to Prepare for Software Engineer Interviews ??????
Many friends messaged me on how I prepared to get these offers. To share my experiences, I am writing this article hoping to help more people prepare for software engineer interviews, especially for new graduate positions. ??
One thing to note here is, these are my personal experiences from last October to this Feburey before COVID-19 happened. It might be different and probably harder this year but hopefully, these can help.
?? Before application
Resumes will be the first thing people see about you. So try your best to make it nice. Font type, size, typesetting… Everything is so important because recruiters may receive thousands of applications every day. Try to make it user-friendly, and put more numbers in your resume to make it more persuasive.
You can find the University Career Center to help you refine resumes. Also, you can find your friends, recruiters, people on LinkedIn to review and improve your resumes. In addition, you can feel the response from companies. If you apply a lot while there is no reply, something might be wrong with your resume.
?? When to apply?
After getting a nice version of the resume, you can start applying. Most big companies open new graduate positions in July/ August. So APPLY EARLY make sure you won't be influenced by headcount limit. For instance, Google closes application for new grad Software Developer Engineering in October. So prepare earlier and don't wait for the last minute.
Usually, it takes a company one week to months to receive the next steps. So you don't need to fully prepare and then start to apply. Some websites you can apply: handshake, LinkedIn, jumpstart, company's own website.
As for freezing periods, different companies have different rules. Some companies will freeze all your applications while some just freeze the one you failed the interview. Some three months, some 1 year+. It might be good to confirm with the recruiter or people who interviewed before.
?? How to prepare for the SDE interview?
I will say SDE interview is 50% Technical + 50% Non-technical
Technical:
- Data Structure + Algorithm
UC Berkeley CS61B and Leetcode Explore can be good resources.
- Computer System Level Questions
CMU 15213 can be a good resource.
- Hackerrank/ Leetcode
Almost every company tests coding questions. These questions appear in online assessments, phone interviews, and onsite interviews. The amount of questions doesn't matter. What truly matters is you fully understand concepts and approaches for different types of questions. Don't try to recite questions, there are too many questions and you will never remember them all. Instead, do one and absorb them inside your brain. Do one and understand similar ones.
It would be great if you can have a full block of time like a month to practice by category. It's a more efficient way at lease for me ?? Understand hashmap, array, linked list, tree, queue, stack, BFS, DFS, etc. Do dynamic programming in the end since it's very rare to get the DP question. For me, I spend one or two days understanding one topic and finishing high-frequency questions of that type.
Non-technical:
- Communication during coding
It's super important here. For this part, I really would like to thank @Khoa. He taught me what's a good coding interview by mock interviews. And I will add my own understandings and explain them here step by step.
Step 1. Clarify a question.
It's always worth spending several minutes to discuss the question. The inputs, outputs, the question itself and corner cases, etc. Repeat the question and make sure the "contract" between you and the interviewer is the same. Don't be panic if you never see this question. Calm down, discuss with the interviewer to get some thoughts, and buy yourself some more time.
Step 2. Start with a naive approach
There is nothing shameful to start the brute force approach. No need to jump to an optimal solution immediately. Instead, if you start with the optimal but you forget parts of it and fail to solve it, it's worse than solving with the brute force approach. With the naive approach, at least you finish this question and still have time to improve it to optimal. Interviewers may also provide hints to guide you.
Step 3. Provide a better approach and code it out
But if you know the better approach, after you spend two minutes talk about the naive approach, you should explain this better one. After confirming with interviewer that this approach sounds good to him. her, code it out and explain every line at the same time.
One thing to note here, user experiences are super important. So make sure your code has good readability, like naming, style, comments, etc and is easy to understand.
Step 4. Explain time + space complexity
After you finish the code, explain the time and space complexity. Make sure you put explanations for the variable. For instance, O(n) where n means the number of items in the array, etc.
Step 5. Dry run/ Test your code
Provide tests with good coverages. Then kindly ask the interviewer if they want a dry run test or write codes for testing. If it's a dry run, make sure you go through it line by line. You can comment on variables to make sure people can follow you, especially during the phone interviews.
Last Tip:
Try not to leave silence over minutes. That will not only be awkward but also your interviewer can not understand what you are thinking about at all. Even if you are stuck somewhere, try to explain your current thought, and the interviewer may give you hints through the interview. It's fine to ask for hints if you are stuck.
- Behavior question
Know everything in your resume well. Prepared for details and understand how to explain them in the STAR method.
- Ask good questions
You apply for a company because you are interested in it. Do your research, understand company culture, show your interest, and ask good questions. For example, what're the projects, tech stacks, and why they love the company. They are safe questions but not the brilliant questions, the brilliant ones are always tailor-made.
- Try to smile more :D
If people like to work with you, they will be more willing to hire you to join the team. Even if you might be nervous, try to show your kindness and smile!
?? Resources help with the procedure
Mock Interview ??
You can schedule mock interviews for behavior questions from the University Career Center.
For the coding part, I suggest practicing with a group of friends. In addition, Pramp and interviewing.io can be a very good platform to practice your speed and flow.
Some wonderful books ??
Cracking the Coding Interview is a book I read several times. Also, Grokking the System Design Interview is good as well.
Useful Youtube channels ??
Nick White, Kevin Naughton, Byte By Byte, Back To Back SWE are great resources. I watched their videos to understand how these people think when I am stuck in some questions.
Ask for a referral ??
I can't deny having a referral in most cases will help a lot. People who know you well will be more likely to give a strong reference. Personally, I find references in the following way.
Professors/ Friends/ Colleagues > Not familiar alumni > People in LinkedIn or other platforms
If you can have experienced people to help you refer, or even refer to his/ her group directly, that will be very efficient and helpful.
Join associations and participate in events ??
I am a member of SWE and GWC. Personally I benefit a lot from them. Meet nice mentors, make friends, and participate in talks. Also, I participated in many conferences like WE, GHC, etc, many hackathons and technical seminars. And also there are some good conferences like Tapia, GDC, etc. You can network with recruiters and engineers from those events. What's more, you can learn tech knowledge and make friends with people in tech fields.
Work hard and stay positive ??
The procedure of job searching can be hard and tiring. But don't give up and trust yourself! You can do it eventually ?? Remember if a company gives you an interview, it means they want you, then be confident and show the best part of yourself.
One last thing I would like to mention is, you are interviewed as a PERSON instead of a coding machine. For new graduates, an interviewer will be more willing to have a nice teammate who can communicate well and code, more than a guy who might be an expert in Leetcode but not willing to communicate.
Thanks again for reading this long article. Hope it's helpful. Feel free to comment here if you have general questions, our discussions may help more people. If it's a personal question, feel free to DM me. Good luck ??
SDE @ Amazon | ECE Graduate @ CMU
4 年You are so brilliant xixi!
株式会社フライウィール - ソフトウェアエンジニア | Linktree: linktr.ee/kashiwachen
4 年Awesome!
Senior Software Engineer at Google
4 年Thanks for the useful tips.
Very well written article with great points
Senior Research Engineer at Plus | CMU Grad
4 年Thanks for sharing! Great content in detail.