# 189 Programming Questions and Solutions

## GAYLE LAAKMANN MCDOWELL Founder and CEO, CareerCup.com

Purchase Now !
Just with Paypal

Book Details
  Price 2.00 USD 712 p 89,949 KB PDF format 978-0-9847828-5-7 2015 by CareerCup

Gayle Laakmann McDowell has a strong background in software
development with extensive experience on both sides of the hiring table.
She has worked for Microsoft, Apple, and Google as a software
engineer. She spent three years at Google, where she was one
of the top interviewers and served on the hiring committee.
She interviewed hundreds of candidates in the U.s. and abroad,
assessed thousands of candidate interview packets for the hiring
committee, and reviewed many more resumes.
As a candidate, she interviewed with-and received offers fromtwelve
tech companies, including Microsoft, Google, Amazon, IBM, and Apple.
Gayle founded CareerCup to enable candidates to perform at
their best during these challenging interviews. CareerCup.com
offers a database of thousands of interview questions from major
companies and a forum for interview advice.
In addition to Cracking the Coding Interview,
Gayle has written other two books:
• Cracking the Tech Career: Insider Advice on Landing a Job at Google, Microsoft, Apple, or Any Top Tech Company provides a broader look at the interview process for major tech companies. It offers insight into how anyone, from college freshmen to marketing professionals, can position themselves for a career at one of these companies.
• Cracking the PM Interview: How to Land a Product Manager Job in Technology focuses on product
management roles at startups and big tech companies. It offers strategies to break into these roles and
teaches job seekers how to prepare for PM interviews.
Through her role with CareerCup, she consults with tech companies on their hiring process, leads technical interview training workshops, and coaches engineers at startups for acquisition interviews.
She holds bachelor's degree and master's degrees in computer science from the University of Pennsylvania and an MBA from the Wharton School.
She lives in Palo Alto, California, with her husband, two sons, dog, and computer science books.
She still codes daily.

Foreword
Let's get the introductions out of the way.
I am not a recruiter. I am a software engineer. And as such, I know what it's like to be asked to whip up brilliant algorithms on the spot and then write flawless code on a whiteboard. I know because I've been asked to do the same thing-in interviews at Google, Microsoft, Apple, and Amazon, among other companies. I also know because I've been on the other side of the table, asking candidates to do this. I've combed through stacks of resumes to find the engineers who I thought might be able to actually pass these inter views.
I've evaluated them as they solved-or tried to solve-challenging questions. And I've debated in
Google's Hiring Committee whether a candidate did well enough to merit an offer. I understand the full
hiring circle because I've been through it all, repeatedly.
And you, reader, are probably preparing for an interview, perhaps tomorrow, next week, or next year. I am here to help you solidify your understanding of computer science fundamentals and then learn how to apply those fundamentals to crack the coding interview.
The 6th edition of Cracking the Coding Interview
questions, revised solutions, new chapter introductions, more algorithm strategies, hints for all problems, and other content. Be sure to check out our website, CrackingTheCodinglnterview.com, to connect with other candidates and discover new resources.
I'm excited for you and for the skills you are going to develop. Thorough preparation will give you a wide range of technical and communication skills. It will be well worth it, no matter where the effort takes you! I encourage you to read these introductory chapters carefully. They contain important insight that just might make the difference between a "hire" and a "no hire:'
And remember-interviews are hard!
In my years of interviewing at Google, I saw some interviewers
ask "easy" questions while others ask harder questions. But you know what? Getting the easy questions
doesn't make it any easier to get the offer. Receiving an offer is not about solving questions flawlessly (very few candidates do!). Rather, it is about answering questions
better than other candidates. So don't stress out
when you get a tricky question-everyone else probably thought it was hard too. It's okay to not be flaw
less. Study hard, practice- and good luck!
L. Gayle McDowell
Founder/CEO, CareerCup.com
Author of
Cracking the PM Interview and Cracking the Tech Career

Introduction . ........................................................ 2
I. The Interview Process ...•. • ... ..... .. . . ... ... ..... .............. • ... 4
Why? .... . ... . .... .. . .. . .. .. .. ......... . ..... ... ........... ... .... 4
How Questions are Selected .. ... .......... .. ........ ..... . .. ........ .... . 6
It's All Relative ... ........ . ......... ............ . ...... ...... ....... .. 7
Frequently Asked Questions ........ . .. ......... . .... ... ...... ........... . 7
II. Behind the Scenes . ...................... . ..... .. .. .... ..... . ....... 8
The Microsoft Interview ... .. ........ .... ....... .... ... . ......... .. ...... 9
The Amazon Interview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
The Google Interview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
The Apple Interview . . . .................. . .. ...... . .. . .. . ..... ...... . . 11
The Facebook Interview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
The Palantir Interview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
III. Special Situations . ..........................• ... ...... .. .......... 15
Experienced Candidates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 15
Testers and SDETs . . ................ . . ...... . ... . ................ . . . .. 15
Product (and Program) Management . .. .... . ... .. ....... . ... ........ ....... 16
Dev Lead and Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 17
Startups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 18
Acquisitions and Acquihires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 19
For Interviewers .. . ............................ . ..................... 21
IV. Before the Interview .......................... .. ................... 26
Getting the Right Experience ..................................... .. ...... 26
Writing a Great Resume. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Preparation Map ............ .. . ...................................... 30
V. Behavioral Questions .............................................. 32
Interview Preparation Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Know Your Technical Projects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Responding to Behavioral Questions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
So, tell me about yourself... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
VI. BigO ............ • ........ • ............ ... . .. ..... .... ........ 38
An Analogy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Time Complexity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Space Complexity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Drop the Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Drop the Non-Dominant Terms .... ............. .... . . .. .......... . . . ... . . 42
Multi-Part Algorithms: Add vs. Multiply .... . ... . ................. . ........... 42
Amortized Time . . ........ . .... . ....... . .............. . ........ . .. 0 • 0 43
Log N Runtimes 0 •• 0 •• 0 0 0 • 0 • 0 0 •••• • • • •• •• ••• •• ••••••• • • • •••••••• ••••• 44
Recursive Runtimes . .. . ... . .... . ..... . ... . ... . ...... . . .... .. ... . . . . . . . 44
Examples and Exercises ......... . ... .. ... . ..................... . ...... . 45
VII. Technical Questions ...•.. • ...........•. . .........•..• • ............ 60
How to Prepare . 0 •••• • • • •••••••••••••• 0 •••••• 0 • • • • • • • • • • • • • • • • • • • • • • 60
What You Need To Know . .. ...... .. ... . . . . . . . . . . ..... . ........ . .... . .. .. 60
Walking Through a Problem .. .. ... .. . .... . 0 • ••••• • ••• • • • • •••• •• ••• •• 0 ••• 62
Optimize & Solve Technique #1 : Look for BUD ... .. .... . .... . ... . 0 ••••• •• •• • • 0 •• 67
Optimize & Solve Technique #2: DIY (Do It Yourself) . . .... . .... . ....... . ....... ... 69
Optimize & Solve Technique #3: Simplify and Generalize . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Optimize & Solve Technique #4: Base Case and Build. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Optimize & Solve Technique #5: Data Structure Brainstorm . ... ..... .. 0 • 0 0 0 • 0 0 0 0 • 0 0 • 0 72
Best Conceivable Runtime (BCR) 0 •••• • ••••• • •• 0 ••••••••••••••••••••• • • • •• • 0 72
Handling Incorrect Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
When You've Heard a Question Before .. . . . . . 0 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 76
The "Perfect" Language for Interviews ... .... 0 ••••• • 0 • • • • • • • • • • • • • • • • • • • • • • • • 76
What Good Coding Looks Like ...... . .... . . . ...... 0 • • • • • • • • • • • • • • • • • • • • • • • 77
Don't Give Up! .. .. 0 • •• • • • • • • • 0 • •••• •• •• • • • •• 0 •• •• 0 •• • ••••• •••• •• ••• • 81
VIII. The Offer and Beyond • . •.•.••. •. .•.. . •.. .. .. .• ..................... 82
Handling Offers and Rejection 0 0 •• 0 0 •• 0 • 0 ••• 0 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 82
Evaluating the Offer . . ................................. . 0 • • • • • • • • • • • • • • 83
Negotiation ......................................... 0 • 0 • • • • • • • • • • • • 84
On the Job . . 0 • • • • • • • • • 0 0 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 85
IX. Interview Questions .•............. • .............•................. 87
Data Structures .. ................ • .......... . .... .. ............. . 88
Chapter 1 I Arrays and Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Hash Tables . ... . . . .. . .. . .......... . . . . . ........ . .... . ... . ..... . ....... 88
ArrayList & Resizable Arrays . ... . ... .. . . . . ... ... . . . ......... ... . . . . . . . . . . . . . 89
String Builder . .. .. . 0 •• • ••••• •• ••• •• ••••••••••••• • 0 ••• • •••• • ••• 0 •• • •• •• • 89
Chapter 2 I Linked Lists .... . . . ... . . .. . . . . ... 0 • • •• 0 ••• • • 0 • • • • • • • • • • • • • • • • 92
Creating a Linked List . .. ... .. . .. . ... ... . . . ... . ... . ... . . . . .... . . . .. . ... . . . 92
Deleting a Node from a Singly Linked List . ........... . ......... . . . .. .. .. 0 •• ••• 0 • 93
The "Runner" Technique .... . .. . . . . . ..... 0 ••••• • •••••••••••••• 0 ••• 0 •• • 0 • •• 93
Recursive Problems . . .. 0 •• 0 ••• • •• • 0 • 0 •• 0 • •• • ••• •• '.' •••••••••••••••••••••• 93
Chapter 31 Stacks and Queues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Implementing a Stack . ..... .. .... .. .. . ...................... . ..... . ...... 96
Implementing a Queue . . ..... .. ... ............................... . . ...... 97
Chapter 41 Trees and Graphs ...... . .... .. ...... .. ................ ........ 100
Types of Trees ........... . .. . . .... ......... . ........ . .... . ........... . 100
Binary Tree Traversal . ... ...... .. ... . ........... . . ... .. . .. ............. .. 103
Binary Heaps (Min-Heaps and Max-Heaps) ...... .... . . . ........ ............... 103
Tries (Prefix Trees) . ..... ... .. .... ... ... . . ....... .... ........ . .. . ... ... .. 105
Graphs . .. . ......... ......... ........ .. . ..... ...... . . ... . . . . . .. . . .. . 105
Graph Search ...................... . ....... . .. . .......... . .... . ... . .. 107
Concepts and Algorithms . .......................................... 112
Chapter 51 Bit Manipulation .. . . . .................... . ................... 112
Bit Manipulation By Hand . .... .. . . ... . .. . . .... . ..... . . ... ... .. . .. . .. . . . . . 112
Bit Facts and Tricks . . . .. . ... . ..... .. . . . . ... .. . ... . ......... .. ..... . ..... 112
Two's Complement and Negative Numbers . ..... . ........ . . . . .. . .... . . .... . . ... 113
Arithmetic vs. Logical Right Shift. ........ . . .. .. . ............... . .... .. ...... 113
Common Bit Tasks: Getting and Setting . ................................ .. . ... 114
Chapter 61 Math and Logic Puzzles . . ... .. ........ . . . .. . . . .. ... ..... .... .... 117
Prime Numbers . ............... . .. . . . ..................... . .. . ........ 117
Probability ....... . ... . . . . . .................. . .............. . ..... . . . 119
Start Talking . ......... . .. ................... . . ......... . .... .. .. ... .. 121
Develop Rules and Patterns . ... .. ..... . .. . ............ .. . . .... . ...... ... .. 121
Worst Case Shifting . . . ................ . ............................... . 122
Algorithm Approaches . ... . .. .. ... . ....... . ..... ... ..................... 122
Chapter 71 Object-Oriented Design .......... . .................. . .......... 125
How to Approach . .............. .... ...... .. ... ... . . ..... . . ............ 125
Design Patterns . ... .. ... . .......... . ............... . ............. . .... 126
Chapter 81 Recursion and Dynamic Programming . . .... . ................. . . . ... . 130
How to Approach . ..... . . ... .... ... ................... .. .... . .......... 130
Recursive vs. lterative Solutions . ....... . ...... . .. . . .. .. ... ... ....... .. ..... 131
Dynamic Programming & Memoization . .. . . . .. .... . ........ . .. ....... .. .. .... 131
Chapter 91 System Design and Scalability ... .. .............. .. ... . ... ... ...... 137
Handling the Questions ............ . .................................. . . 137
Design: Step-By-Step ............. . .. ... ... . .. .. ..... .. . ... .. . . . .. . .. .. . 138
Algorithms that Scale: Step-By-Step ..... ... . .......... . ... ....... ...... .... . 139
Key Concepts . .......... .. . ..... ...... ........ .. . ............... . .... . 140
Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
There is no "perfect" system .. . . ........... . ..................... . ......... . 143
Example Problem . .......... .. ........................... . ..... . .... .. . 143
Chapter 10 I Sorting and Searching ... . .. . ....................... .. . . .. . .... 146
Common Sorting Algorithms . .... ..... . ..... .. ....... . .... . .. .... .. .. ..... 146
Searching Algorithms . .. . .... . ... . ......... . .................... . .. . .. . . 149
Chapter 11 I Testing . ...... .... . .. .. ..... . .... . . . .... .. .... . ...... . .... 152
What the Interviewer Is Looking For .. .. ....... . ..... . .. ............ .. .. . .... 152
Testing a Real World Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Testing a Piece of Software .... . ............. ... ... . ........ . .......... .. . 154
Testing a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Troubleshooting Questions . ........ . .. . . ...................... . .. . ....... 156
Knowledge Based . ..•................... ... ..... . ................ 158
Chapter 12 1 C and C++ ............ . .......... .. .... . .................. 158
Classes and Inheritance . .. ... ..... .. ..... . .... . .... .. . . ... . ...... . .. .... . 1 58
Constructors and Destructors . . .. . ... . . . . . .... ..... ....................... . 159
Virtual Functions . ... .. .. .......... . . . .... ....... ........ ... .. .... .... . 159
Virtual Destructor .. ..... . . . . ............... . .......... .. . ........... .. 160
Default Values . .......... . ......... . . . . .. ........ ...... . .............. 161
Operator Overloading . . ...... . ........... . . . .... .. ........ . ...... .... .. . 161
Poin ters and References ................... . ....... . ....... ... . .......... 162
Templates . . . ........ .. ..... . . .. ....... .. .. . . . . ......... .. . . .. .. . .. .. 163
Chapter 131 Java . .. .. .... .. . . ..... . .. .. .... . .. . . .......... ......... .. 165
How to Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Overloading vs. Overriding .. . ..... . .. .... ..... . .... . . .... .. . ........... . . 165
Collection Framework . ... . ....... ... .......... . ...... ... . .. .. . ..... . .. . . 166
Chapter 141 Databases ......................... .. ..................... . 169
SQL Syntax and Variations . ............ .. ... . .. ...... . . . ... . ... ... ... . .... 169
Denormalized vs. Normalized Databases . . . ........ .. .... ... .... .... . . ... . . .. . 169
SQL Statements . .. . . .. . .. . ............ . . . .... . . . .... . ................. 169
Small Database Design . .. ...... . . .. .......... ......... .... .. . . .. . ..... . . 171
Large Database Design . .. . ..... .... ... . ................... . .... . ... .. ... 172
Chapter 151 Threads and Locks ...... . .. .. . . .. .. ... ... .. .. .. .. .. .. ... . .... 174
Threads in Java . . . .. .. .. . . . . . . . . . . . .... . . .......... .. .. .. .. .. .... .. . .. 174
Synchronization and Locks . . . . .. . . . ............. .... . ..... ... .. ... ....... 176
Deadlocks and Deadlock Prevention . .. ..... . .................. . ......... . ... 179
Additional Review Problems . ........................................ 181
Chapter 161 Moderate ....... . . . . .. ......... . ...... . ................... 181
Chapter 171 Hard .. . . . . . . . . . . . . .. ... . .. . ... . .. ... . . . .. . . ....... .. .. . . 186
X. Solutions ..................................................... 191
Data Structures .... ......... .. .. .... .. .. .. .. . . .. . . .. .. . .. . ... .. . ... . 192
Concepts and Algorithms ... .. . .. ... . . .. . .... ... .. .. . .. ......... . .. . ... . 276
Knowledge Based ...... . ... . ... .. .... ... ....... .... . . .... . ... . .. . ... .422
Additional Review Problems . . . . . . . . .. . . .. . . . .. .... . . .. . ........ . . .. . . . . .462
XI. Advanced Topics . ................................................ 628
Useful Math ......... . .. . . ... . .. ...... . .. .. ..... . ..... ... ... . ....... 629
Topological Sort . . .... ... ... .. . . ..... ... ... .. . . . .. . . .. .. .... . . . ..... . 632
Dijkstra's Algorithm ...... .. .. .. .... . ... . .... . ........ . ........ . ....... 633
Hash Table Collision Resolution . . . ... ..... . .. .... .. ..... . ......... ..... . . . 636
Rabin-Karp Substring Search . ..... . . ... .. .... . ..... .. . ... .. . . . . . . . .. . . . . . 636
AVL Trees .. . .. . . .. . . . ... . ..... . ... .. ...... . . . ....... . .. ... . .. . . . . . 637
Red-Black Trees .... . ... . ... . .. . ......... .. ...... . ... . ....... .. . . . . .. 639
MapReduce ..... . ... . . .. .. .... ... .. . . ... ...... . . .. . . . . . . . .. .. . . .... 642
Additional Studying .. ... . ... . . . .. . .. . .... ... . . ... .. . ... .... . .. ... .. .. 644
XII. Code Library . ...........................................•...... 645
HashMapList<T. E> . ... ... .. . ..... .. .. .... ... . ... . .. . . . . . ... ..... . .... 646
TreeNode (Binary Search Tree) ..... . ... .. . .. . ... . ... . .. . . . . . .. . ... . .. . . . . . 647
LinkedListNode (Linked List) . .... .. ... .. .... . ......... . ...... . .. . . .. . ... . 649
Trie & TrieNode . . .. . .... .. . .. .. .. .. . .. . . ... .. . .. . .. .. . .. .. . .... .. .. . 649
XIII. Hints ........................................................ 652
Hints for Data Structures .. . ..... . .. . . . . ... . .. ... . ... . . . . . ... ... .. .. .. ... 653
Hints for Concepts and Algorithms .. ... .. .... . ... . .. . .. . ................ . .. 662
Hints for Knowledge-Based Questions .... .. ... .... . ....... . . . .... ... . ....... 676
Hints for Additional Review Problems . ........ .. ... .. . . .. . .. .. . . .... . .. . ... . 679
XIV. About the Author . ............•...•.............................. 696

Bookscreen

Introduction
Something's Wrong
We walked out of the hiring meeting frustrated-again. Of the ten candidates we reviewed that day, none
would receive offers. Were we being too harsh, we wondered?
I, in particular, was disappointed. We had rejected one of my candidates. A former student. One I had
referred. He had a 3.73 GPA from the University of Washington, one of the best computer science schools in the world, and had done extensive work on open-source projects. He was energetic. He was creative. He was sharp. He worked hard. He was a true geek in all the best ways.
But I had to agree with the rest of the committee: the data wasn't there. Even if my emphatic recommendation could sway them to reconsider, he would surely get rejected in the later stages of the hiring process. There were just too many red flags.
Although he was quite intelligent, he struggled to solve the interview problems. Most successful candi
dates could fly through the first question, which was a twist on a well-known problem, but he had trouble developing an algorithm. When he came up with one, he failed to consider solutions that optimized for other scenarios. Finally, when he began coding, he flew through the code with an initial solution, but it was riddled with mistakes that he failed to catch. Though he wasn't the worst candidate we'd seen by any measure, he was far from meeting the "bar:' Rejected.
When he asked for feedback over the phone a couple of weeks later, I struggled with what to tell him. Be smarter? No, I knew he was brilliant. Be a better coder? No, his skills were on par with some of the best I'd seen.
Like many motivated candidates, he had prepared extensively. He had read K&R's classic C book, and he'd reviewed CLRS' famous algorithms textbook. He could describe in detail the myriad of ways of balancing a tree, and he could do things in C that no sane programmer should ever want to do.
I had to tell him the unfortunate truth: those books aren't enough. Academic books prepare you for fancy research, and they will probably make you a better software engineer, but they're not sufficient for inter they views. Why? I'll give you a hint: Your interviewers haven't seen red-black trees since were in school either. To crack the coding interview, you need to prepare with real interview questions. You must practice on real problems and learn their patterns. It's about developing a fresh algorithm, not memorizing existing problems. Cracking the Coding Interview is the result of my first-hand experience interviewing at top companies and later coaching candidates through these interviews. It is the result of hundreds of conversations with candidates. It is the result of the thousands of questions contributed by candidates and interviewers. And it's the result of seeing so many interview questions from so many firms. Enclosed in this book are 189 of the best interview questions, selected from thousands of potential problems. My Approach Cracking the Coding Interview
The focus of is algorithm, coding, and design questions. Why? Because
while you can and will be asked behavioral questions, the answers will be as varied as your resume. Like wise, while many firms will ask so-called "trivia" questions (e.g., "What is a virtual function?"), the skills developed through practicing these questions are limited to very specific bits of knowledge. The book will briefly touch on some of these questions to show you what they're like, but I have chosen to allocate space to areas where there's more to learn.

My Passion
Teaching is my passion. I love helping people understand new concepts and giving them tools to help them excel in their passions.
My first official experience teaching was in college at the University of Pennsylvania, when I became a
teaching assistant for an undergraduate computer science course during my second year. I went on to TA for several other courses, and I eventually launched my own computer science course there, focused on hands-on skills.
As an engineer at Google, training and mentoring new engineers were some of the things I enjoyed most. I even used my "20% time"to teach two computer science courses at the University of Washington. Now, years later, I continue to teach computer science concepts, but this time with the goal of preparing engineers at startups for their acquisition interviews. I've seen their mistakes and struggles, and I've developed techniques and strategies to help them combat those very issues.
Cracking the Coding Interview, Cracking the PM Interview, Cracking the Tech Career, and CareerCup
reflect my passion for teaching. Even now, you can often find me "hanging out" at CareerCup.com, helping users who stop by for assistance.