|
@@ -13,9 +13,14 @@ There are extra items I added at the bottom that may come up in the interview or
|
|
Steve Yegge's "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" and are reflected
|
|
Steve Yegge's "[Get that job at Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html)" and are reflected
|
|
sometimes word-for-word in Google's coaching notes.
|
|
sometimes word-for-word in Google's coaching notes.
|
|
|
|
|
|
-I've pared down what you need to know from what Yegge says for new software engineers. If you have many years of experience, expect a harder interview.
|
|
|
|
|
|
+I've pared down what you need to know from what Yegge recommends. I've altered Yegge's requirements
|
|
|
|
+from information received from my contact at Google. This is meant for **new software engineers** or those switching from
|
|
|
|
+software/web development to software engineering (where computer science knowledge is required). If you have
|
|
|
|
+many years of experience and are claiming many years of software engineering experience, expect a harder interview.
|
|
[Read more here](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/).
|
|
[Read more here](https://googleyasheck.com/what-you-need-to-know-for-your-google-interview-and-what-you-dont/).
|
|
|
|
|
|
|
|
+If you want to be a reliability engineer or systems engineer, study more from the optional list (networking, security).
|
|
|
|
+
|
|
---
|
|
---
|
|
|
|
|
|
## Table of Contents
|
|
## Table of Contents
|
|
@@ -66,6 +71,8 @@ I've pared down what you need to know from what Yegge says for new software engi
|
|
- [Even More Knowledge](#even-more-knowledge)
|
|
- [Even More Knowledge](#even-more-knowledge)
|
|
- [Recursion](#recursion)
|
|
- [Recursion](#recursion)
|
|
- [Dynamic Programming](#dynamic-programming)
|
|
- [Dynamic Programming](#dynamic-programming)
|
|
|
|
+ - [Object-Oriented Programming](#object-oriented-programming)
|
|
|
|
+ - [Design Patterns](#design-patterns)
|
|
- [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability)
|
|
- [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability)
|
|
- [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms)
|
|
- [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms)
|
|
- [Caches](#caches)
|
|
- [Caches](#caches)
|
|
@@ -100,11 +107,10 @@ I've pared down what you need to know from what Yegge says for new software engi
|
|
- [Entropy](#entropy)
|
|
- [Entropy](#entropy)
|
|
- [Cryptography](#cryptography)
|
|
- [Cryptography](#cryptography)
|
|
- [Compression](#compression)
|
|
- [Compression](#compression)
|
|
- - [Networking](#networking) (if you have networking experience, expect questions)
|
|
|
|
|
|
+ - [Networking](#networking) (if you have networking experience or want to be a systems engineer, expect questions)
|
|
- [Computer Security](#computer-security)
|
|
- [Computer Security](#computer-security)
|
|
- [Garbage collection](#garbage-collection)
|
|
- [Garbage collection](#garbage-collection)
|
|
- [Parallel Programming](#parallel-programming)
|
|
- [Parallel Programming](#parallel-programming)
|
|
- - [Design patterns](#design-patterns)
|
|
|
|
- [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems)
|
|
- [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems)
|
|
- [Fast Fourier Transform](#fast-fourier-transform)
|
|
- [Fast Fourier Transform](#fast-fourier-transform)
|
|
- [Bloom Filter](#bloom-filter)
|
|
- [Bloom Filter](#bloom-filter)
|
|
@@ -843,6 +849,56 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
|
|
- [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/UZ7o6/global-pairwise-sequence-alignment)
|
|
- [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
|
|
- [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment)
|
|
|
|
|
|
|
|
+- ### Object-Oriented Programming
|
|
|
|
+ - [ ] [Optional: UML 2.0 Series (video)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
|
|
|
|
+ - [ ] Object-Oriented Software Engineering: Software Dev Using UML and Java (21 videos):
|
|
|
|
+ - Can skip this if you have a great grasp of OO and OO design practices.
|
|
|
|
+ - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
|
+ - [ ] SOLID OOP Principles:
|
|
|
|
+ - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
|
|
|
|
+ - [ ] [SOLID Design Patterns in C# (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ)
|
|
|
|
+ - [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
|
|
|
|
+ - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
|
|
|
|
+ - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
|
|
|
|
+ - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension for not for modification](https://en.wikipedia.org/wiki/Open/closed_principle)
|
|
|
|
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
|
|
|
|
+ - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
|
|
|
|
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
|
|
|
|
+ - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use
|
|
|
|
+ - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
|
|
|
|
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
|
|
|
|
+ - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects.
|
|
|
|
+ - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
|
|
|
|
+ - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
|
|
|
|
+
|
|
|
|
+- ### Design patterns
|
|
|
|
+ - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
|
|
|
|
+ - [ ] Learn these patterns:
|
|
|
|
+ - [ ] strategy
|
|
|
|
+ - [ ] singleton
|
|
|
|
+ - [ ] adapter
|
|
|
|
+ - [ ] prototype
|
|
|
|
+ - [ ] decorator
|
|
|
|
+ - [ ] visitor
|
|
|
|
+ - [ ] factory, abstract factory
|
|
|
|
+ - [ ] facade
|
|
|
|
+ - [ ] observer
|
|
|
|
+ - [ ] proxy
|
|
|
|
+ - [ ] delegate
|
|
|
|
+ - [ ] command
|
|
|
|
+ - [ ] state
|
|
|
|
+ - [ ] memento
|
|
|
|
+ - [ ] iterator
|
|
|
|
+ - [ ] composite
|
|
|
|
+ - [ ] flyweight
|
|
|
|
+ - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
|
|
|
|
+ - [ ] [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
|
+ - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
|
+ - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
|
|
|
|
+ - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
|
|
|
|
+ - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO.
|
|
|
|
+ - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips)
|
|
|
|
+
|
|
- ### Combinatorics (n choose k) & Probability
|
|
- ### Combinatorics (n choose k) & Probability
|
|
- [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
|
|
- [ ] [Math Skills: How to find Factorial, Permutation and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U)
|
|
- [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
|
|
- [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4)
|
|
@@ -1019,26 +1075,6 @@ You'll get more graph practice in Skiena's book (see Books section below) and th
|
|
- [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
|
|
- [paper](http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf)
|
|
- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
|
|
- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html)
|
|
- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
|
|
- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html)
|
|
-- [ ] [Optional: UML 2.0 Series (vido)](https://www.youtube.com/watch?v=OkC7HKtiZC0&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc)
|
|
|
|
-- [ ] OOSE: Software Dev Using UML and Java (21 videos):
|
|
|
|
- - Can skip this if you have a great grasp of OO and OO design practices.
|
|
|
|
- - [OOSE: Software Dev Using UML and Java](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
|
-- [ ] SOLID OOP Principles:
|
|
|
|
- - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE)
|
|
|
|
- - [ ] [SOLID Design Patterns in C# (video)](https://www.youtube.com/playlist?list=PL8m4NUhTQU48oiGCSgCP1FiJEcg_xJzyQ)
|
|
|
|
- - [ ] [SOLID Principles (video)](https://www.youtube.com/playlist?list=PL4CE9F710017EA77A)
|
|
|
|
- - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html)
|
|
|
|
- - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk)
|
|
|
|
- - [ ] O - [Open/Closed Principal](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension for not for modification](https://en.wikipedia.org/wiki/Open/closed_principle)
|
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en)
|
|
|
|
- - [ ] L - [Liskov Substitution Principal](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow ‘IS A’ principal](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle)
|
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en)
|
|
|
|
- - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | clients should not be forced to implement interfaces they don't use
|
|
|
|
- - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ)
|
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en)
|
|
|
|
- - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | Reduce the dependency In composition of objects.
|
|
|
|
- - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important)
|
|
|
|
- - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en)
|
|
|
|
- [ ] Scalability:
|
|
- [ ] Scalability:
|
|
- [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4)
|
|
- [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4)
|
|
- [ ] Short series:
|
|
- [ ] Short series:
|
|
@@ -1478,7 +1514,9 @@ You're never really done.
|
|
- [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
|
|
- [ ] [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H)
|
|
- [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
|
|
- [ ] [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s)
|
|
|
|
|
|
-- ### Networking (videos)
|
|
|
|
|
|
+- ### Networking
|
|
|
|
+ - **if you have networking experience or want to be a systems engineer, expect questions**
|
|
|
|
+ - otherwise, this is just good to know
|
|
- [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro)
|
|
- [ ] [Khan Academy](https://www.khanacademy.org/computing/computer-science/internet-intro)
|
|
- [ ] [UDP and TCP: Comparison of Transport Protocols](https://www.youtube.com/watch?v=Vdc8TCESIg8)
|
|
- [ ] [UDP and TCP: Comparison of Transport Protocols](https://www.youtube.com/watch?v=Vdc8TCESIg8)
|
|
- [ ] [TCP/IP and the OSI Model Explained!](https://www.youtube.com/watch?v=e5DEVa9eSN0)
|
|
- [ ] [TCP/IP and the OSI Model Explained!](https://www.youtube.com/watch?v=e5DEVa9eSN0)
|
|
@@ -1516,34 +1554,6 @@ You're never really done.
|
|
- [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
|
|
- [ ] [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1)
|
|
- [ ] [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk)
|
|
- [ ] [Efficient Python for High Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk)
|
|
|
|
|
|
-- ### Design patterns
|
|
|
|
- - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3)
|
|
|
|
- - [ ] Learn these patterns:
|
|
|
|
- - [ ] strategy
|
|
|
|
- - [ ] singleton
|
|
|
|
- - [ ] adapter
|
|
|
|
- - [ ] prototype
|
|
|
|
- - [ ] decorator
|
|
|
|
- - [ ] visitor
|
|
|
|
- - [ ] factory, abstract factory
|
|
|
|
- - [ ] facade
|
|
|
|
- - [ ] observer
|
|
|
|
- - [ ] proxy
|
|
|
|
- - [ ] delegate
|
|
|
|
- - [ ] command
|
|
|
|
- - [ ] state
|
|
|
|
- - [ ] memento
|
|
|
|
- - [ ] iterator
|
|
|
|
- - [ ] composite
|
|
|
|
- - [ ] flyweight
|
|
|
|
- - [ ] [Chapter 6 (Part 1) - Patterns (video)](https://youtu.be/LAP2A80Ajrg?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO&t=3344)
|
|
|
|
- - [ ] [Chapter 6 (Part 2) - Abstraction-Occurrence, General Hierarchy, Player-Role, Singleton, Observer, Delegation (video)](https://www.youtube.com/watch?v=U8-PGsjvZc4&index=12&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
|
- - [ ] [Chapter 6 (Part 3) - Adapter, Facade, Immutable, Read-Only Interface, Proxy (video)](https://www.youtube.com/watch?v=7sduBHuex4c&index=13&list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO)
|
|
|
|
- - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07)
|
|
|
|
- - [ ] [Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124)
|
|
|
|
- - I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO.
|
|
|
|
- - [ ] [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips)
|
|
|
|
-
|
|
|
|
- ### Messaging, Serialization, and Queueing Systems
|
|
- ### Messaging, Serialization, and Queueing Systems
|
|
- [ ] [Thrift](https://thrift.apache.org/)
|
|
- [ ] [Thrift](https://thrift.apache.org/)
|
|
- [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
|
|
- [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html)
|