Author: [email protected]
- Interview Preparation
- Leadership and Management
- Languages and Data Structures
- Algorithms
- System Design
- Coding Preparation
- Interview Formats
- Mindset for Interview
- Self-Introduction
- Coding Interview
- System Design Interview
- Behavioral Interview
- Questions To Ask
Java is a general-purpose programming language that is class-based, object-oriented, and designed to have as few implementation dependencies as possible. It is intended to let application developers write once, run anywhere, meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.
- Java Introduction
- Java Virtual Machine (JVM)
- Garbage Collection
- Generics in Java
- Concurrency in Java
- Lambda Expressions in Java
- I/O in Java
Python is an interpreted, high-level, general-purpose programming language. Python's design philosophy emphasizes code readability with its notable use of significant whitespace (indentation). Python is dynamically typed and garbage-collected.
- Array and Sequence
- Range
- String
- List
- Tuple
- NamedTuple
- Linked List
- Singly Linked List
- Doubly Linked List
- Collections
- Deque
- Dictionary
- OrderedDict
- DefaultDict
- UserDict
- Set
- Bytearray
- Tree
- Graph
Go is a statically typed, compiled programming language designed at Google. Go is syntactically similar to C, but with memory safety, garbage collection, structural typing, and CSP-style concurrency.
- Basic Data Structures
- Array
- Slice
- Map
- Struct
- Linked List
- Queue
- Stack
- Set
- Tree
- Graph
Algorithm is one of core parts in computer science. This section covers the algorithms in tech interviews.
An algorithm must possess the following five properties:
- input: an algorithm has zero or more inputs, taken from a specified set of objects.
- output: an algorithm has one or more outputs, which have a specified relation to the inputs.
- finiteness: the algorithm must always terminate after a finite number of steps.
- definiteness: Each step must be precisely defined; the actions to be carried out must be rigorously and unambiguously specified for each case.
- effectiveness: all operations to be performed must be sufficiently basic that they can be done exactly and in finite length.
As the restriction of whiteboard coding and the properties of algorithm, most of interview questions can be resolved in ~50 lines of code.
The computational complexity of an algorithm is the amount of resources required to run it. Particular focus is given to time and space requirements.
Sorting algorithm is an algorithm that puts elements of a list in a certain order. The most frequently used orders are numerical order and lexicographical order. Efficient sorting is important for optimizing the efficiency of other algorithms (such as search and merge algorithms) that require input data to be in sorted lists. Sorting is also often useful for canonicalizing data and for producing human-readable output.
- Depth-First Search
- Breadth-First Search
- A-Star(A*) Search
- Binary Search Tree
- B-tree
- (a,b)-tree
It is very rare to see bit or math questions in real interviews. So we don't need to spend lots of time here.
- System Design Basics
- Distributed System
- Cluster
- Load Balancing
- Message Queue
- Cache
- CDN
- Database
- SQL
- NoSQL
- Networking
- Networking Basic
- HTTP
- RESTful API
- WebSocket
- Security
- Popular System Design Questions
- Designing a URL shortening service
- Designing Instagram
- Designing Facebook Messenger
- Designing Facebook Newsfeed
The purpose of a system design interview is to assess a candidate's ability to design and understand complex systems. It's a crucial part of the hiring process for roles that involve system architecture and engineering.
The general approach I'd like to suggest is,
- Requirements Gathering
- Gather functional & non-functional requirements
- Functional requirements
- Users can do A, B, C, D
- Non-functional requirements
- Availability
- Scalability
- Reliability
- Performance
- Round-Trip Time (RTT) or Latency
- Throughput or Bandwidth
- Functional requirements
- Clarify restrictions and limitations
- Estimate system resources
- Gather functional & non-functional requirements
- Decision-making Process
- High level design
- System architecture
- Service API
- Data schema
- Component walkthrough
- Optimization
- High level design
- Balancing Trade-offs
- I use LintCode as the supplement of LeetCode for the locked questions.
- I usually skip the
hard
math questions, since it is almost impossible to see them in a real interview.