I landed an internship at Facebook. Here are some tips I learned.
I recently accepted an offer from Facebook after interviewing with Google, Microsoft, Dropbox, Yelp, and more. I took a bit to reflect and think about what helped me stand out. Here are some tips, categorized by different parts of the process.
Getting an Interview: Resume Building
The most important factor in catching a company and its recruiting team’s eye is probably your resume. Since my foray into the industry three years ago, my resume has evolved as I’ve gained more experience. From year to year, I’ve gotten much better response rates from companies as my resume has changed — each year I’ve gotten more replies to and follow-ups from internship applications. Really, there have been only a few major changes to my resume. Below I highlight three.
Research. I think this is what opened up many more doors for me — I got around 75% more responses from companies the semester after I began doing research. If you have the opportunity to work under professors or graduate students, take it. Not only do you learn an insane amount in a short period of time and receive mentorship from some of the brightest people in the field, but (on your resume) you also demonstrate passion and a drive to learn that extends beyond the classroom.
Doing research develops a mindset to tackle tough, complex problems that are present in both academia and industry. Companies want people who have the potential to come in and make an impact, and showing that you have the proper mindset and relevant experience is one step in the right direction.
Open Source. Projects that you work on and contribute to may also be open source, another plus for your application. If you can’t find a research position, contribute to open source. Open source is generally viewed very positively, and companies brag about how much they contribute to it. It gives you the opportunity to work on something that benefits the community as a whole and to add to a project that may be much larger than yourself.
A personal website. Maybe this is just me, and companies don’t actually look at this, but it seems that having a personal website puts you one step ahead of those that don’t. Personally, I noticed a 50% higher response rate the recruiting season after I added a personal website to my resume.
Developing your personal website establishes your personal brand and shows that you have basic front-end knowledge. You took the time to learn HTML and CSS and use the web framework you used — another sign that you’re genuinely interested in software development.
Prepping for the Interview
So you’ve gotten an email from a recruiter. Now what? Time to prep!
There are usually two portions to software engineering internship interviews: behavioral and technical.
Behavioral Prep
Prepare a 1–2 min spiel on yourself. What did you do last summer? What classes did you take that you thoroughly enjoyed? What cool projects have you worked on recently? Make sure to include your research and open source experience too.
Usually interviews last between 45–60 min, so there’s a maximum of 15 min to talk about non-technical details. Before interviewing with each company, I took a look at its website and associated blogs to learn more.
What’s cool about each company? What do they actually do? Are there less famous branches that are doing work that appeals more to me?
Find and discuss things that show that you took the time to do some research. Write these things down somewhere during initial research so you can reference them later (like right before the interview!). Every little thing could differentiate you from the next 20 candidates.
The interviewer usually introduces themselves, maybe talks about what the company’s mission is and what it does, and then asks you to talk about yourself. Be ready to recite what you prepared.
Technical Prep
Technical stuff, is, well, technical — you have to put in the time to learn the material. Here are a few great resources that I used to help me prepare for my interviews:
- a whiteboard. Oftentimes the interviewer may you have write out code, or code on something like a Google doc that won’t compile. That is, you won’t have any idea if you’re making syntax errors. Try writing out code on a whiteboard when you prepare. It’s much different than coding in a normal development environment. You can also use a whiteboard to sketch out and visualize your ideas.
- Cracking the Coding Interview. It has short reviews on most topics covered in interviews, and a bunch of problems ranging in difficulty. I bought a hard copy. This allowed me to highlight important notes in the content sections, and draw some diagrams next to the questions. The content sections have great summaries on various topics like data structures, sorting, dynamic programming, etc, to refresh your memory. I’ve actually seen several questions in interviews taken straight out of this book. Probably the greatest resource out there.
- LeetCode. LeetCode, like Cracking the Coding Interview, has questions of different levels you can practice with. But LeetCode provides an online environment where you can type code, and where your code will compile and run. It’s a good way to check that your code actually runs, and a good platform to practice debugging. (Note: being able to quickly figure out where your code has a bug is key. It’ll help you a ton during the actual interview). Each question also has a discussion forum where you can see how others approached the question. It’s always cool to see what other ways you can solve a problem.
- HackerRank. A lot of companies use HackerRank for coding challenges, and HackerRank has compiled an Interview Preparation Kit to help you prepare for interviews. The kit reviews many of the same topics that Cracking the Coding Interview does, but gives you a platform to apply the concepts by physically coding. This will help you get used to an online coding environment very similar to one used in actual interviews.
The Actual Interview
Your interview is here. The behavioral part has come and gone. It’s go time.
After you first encounter the problem, take some time to think about. Don’t feel like you have to immediately rush into a solution. Talk through your approach with your interviewer before you start coding. Sometimes the interviewer will want a more efficient solution than your initial solution before you begin coding, or may tell you that they don’t care about efficiency, and that any old brute force approach is fine.
This also gives the interviewer a chance to give you feedback. On that note, periodically ask for feedback or guidance. Some interviewers have helped me big time in this way. Think of the interview less like an exam, more like a collaboration to solve some problems.
Small tip: If you don’t remember the exact syntax of a language-specific function, ask if you can look it up. From my experience, you usually can, or the interviewer will give you function signatures you can use.
Best of Luck!
Hopefully you’ve learned a bit from this article. Throughout my undergraduate journey, I’ve had many supportive peers and mentors who gave me guidance and advice. I hope to pay it forward and make your internship search a little easier.
If you want any personal guidance, feel free to message me on LinkedIn. Add a small note referring to this article so I know you’re not just trying to boost your connection count. Thanks for reading! Good luck!