<-- /notes<-- /notes/conferences

Notes on a talk by: Marcelo Cortes at Indigo Fair

This talk will be focused on full-time interview rather than coop interviews

The Interview Basics

  • Different Interview Types
  • Coding (Solving some basic problem, efficiently and w/ good communication)
  • Algorithms (won't need to code directly (most times), white-boarding, done by Google and FB)
  • System Design (Example Google asks: how would you design the backend of Gmail)
  • Selling (trying to get you to work at the company, a final step)
  • This talk will be focusing on the coding interview
  • Different Coding Interview Environments
  • Phone (rare but difficult, relies on verbal explanation)
  • Video Conference (0.5-1h, using a code-share, watching you live)
  • Onsite with a remote interviewer
  • Onsite with a whiteboard (conventional, requires good explaining skills)
  • Onsite pair programming interview (most common, dedicated computer for you)

The Interviewer's POV

  • They are busy and must stop working to interview you
  • They are not there to fail you, they want teammates, and want your success
  • They want to enjoy the interview
  • good discussions
  • learn something new / teach you something
  • experience what you would be like on their team
  • Most importantly, they answer: Do I want this person on my team?

What they look for?

  • Can you communicate your ideas effectively?
  • How well do you know the language (syntax, methods, basics)
  • Are you coach-able? Are you listening to feedback, are you receptive?
  • How familiar are you with the tools? Do you know the IDE? Editor?
  • Are you practicing and putting effort to better yourself?
  • Do you know algorithms?
  • Are you thinking about the long-term (runtime, memory, etc.)?
  • Can you code? Recursion? Iteration? Data structures?
  • Do you care about code style? Naming? Strategy and approach? Do you keep patching edge cases or do you think ahead?

Coding Interview Structure (60 minute example)

  • 00..02: Quick intro and get setup
  • 02..05: Describing the coding problem
  • 05..15: Discussing the algorithm and possible solutions
  • You don't want to jump into code, this is where you ask questions, and understand the problem you want to solve
  • 15..55: Coding the actual solution
  • 55..60: Candidate's turn to ask questions
  • This is where you show that you care about the company and the work they do

A Simple Problem

  • Given a list of words, find the maximum common prefix between any two words on the list.
 words = [
   'electronics',
   'compact disc',
   'alphabet',
   'compass',
   'giraffe',
   'electricity'
 ]
 prefix = 'elect'

Questions to Ask

  • What alphabet? Lowercase A to Z? ASCII? Unicode?
  • Do we expect the input to be very large?
  • Do we expect the average string length to be large?
  • What if there is a tie?
  • Is null or empty input expected?
  • The Easy Way Itself
  • Is there an obvious brute force (inefficient) solution? Probably

Other Points

  • Mention it and quickly explain how the algorithm solution works to show you know it.
  • ex: "Compare each word to each other, and store the longest prefix as a variable. Once all words have been compared, return the variable"
  • Can We do Better?
  • Almost always there is a better solution
  • Best way to get good at algorithms is practicing (Check out TopCoder)
  • Always ask questions such as;

    • Does sorting input help?
    • What data structures could help? Set? Hash map? Tree?
    • Can I collect data to help in a first pass?
  • Define the Interface

    • Method, Variable Names, Process, Comments
    • Validation Framework (5 min)
    • Write simple test cases (including an All Tests Passed! message)

Note: A trie/tree is usually the ideal solution for most 'prefix' questions

Your Time to Interview

  • Don't Ask

    • how did you do in the interview, your solution, other Solutions
    • better ways to solve the Problem
    • salary, bonus, options, etc.
  • Do Ask

    • About the company, team, the culture, the product, the job
    • The tools, the work environment, the mission, the vision
    • How the team prioritizes tasks, etc.

Conclusion

  • Practice a lot! Be prepared, stay calm and perform well.
  • Arrive early, have your environment ready. (Don't waste time on setup or updates)
  • Communicate well and often. Ask questions. Keep talking.
  • Talk about your code while you write it.
  • Let the interviewer in your head, communicate properly with them
  • Have a strategy. Discuss options, If stuck, ask for advice. (They want to help you, write pseudo code, explain why you're stuck, let them assist you)
  • Make sure you understand the problem. Write a simple test framework. Start with a test case.
  • Try to have fun!

Q/A

  • Email: marcelo@indigofair.com
  • Twitter: @mescortes
  • Company: Indigo Fair

Full source code: https://goo.gl/vMMjr3