Preparing for your next coding interview and need a cheat sheet? My list is based on essential topics covered in my 4th edition book on data structures and algorithms and conducting dozens of mock technical interviews with developers preparing for interviews at Apple, Facebook, Google, and beyond. With an average technical interview lasting 3-6 hours, passing requires a combination of coding expertise, knowledge of software development processes, and keeping calm under pressure.
How to Use
This guide was initially designed as my personal checklist when preparing for interviews at Google. While there are many line items, one should measure their progress by a). recognizing each topic and b). knowing they could converse with a hiring manager or fellow developers on said topic. Start by checking off items you know and work your way through the topics as you master each item.
Once you think you’ve got things covered, review my computer science questions then test your skills in a free mock interview session in my computer science program. The seven (7) areas of study include:
Swift Language Basics
Swift is the current new standard for building iOS projects. As the language continues to evolve, developers will need to adapt their skills accordingly. To stay competitive, stay current. As a goal, demonstrate your knowledge to hiring managers on the unique features of Swift. Beyond syntax, this includes explaining the differences between Object-Oriented and Protocol-Oriented programming. With Swift now available as open-source, developers should also be comfortable with Swift.org, Github change proposals, and the Swift Evolution process:
Swift Topic | Ability to Explain | Ability To Code |
---|---|---|
Variables vs Constants | ||
For Loops & Control Flow | ||
Structs, Classes, Methods & Properties | ||
Value Types vs. Reference Types | ||
Function Signatures | ||
String Manipulation - ASCII & Unicode | ||
Arrays | ||
Sets vs. Arrays (when and why) | ||
Tuples | ||
Dictionaries | ||
Optionals (e.g. Regular, Implicit & Unwrapping) | ||
Generics (e.g. Types, Functions & Contraints) | ||
Protocols | ||
Type Extensions | ||
Protocol Extensions | ||
Closures (e.g. Trailing Closures / Syntax) | ||
Initializers (single and multiple) | ||
Error handling (e.g. try catch) | ||
Bridging Headers | ||
Swift API Design Guidelines | ||
Comparable, Equatable and Hashable Protocols | ||
Guard Statement | ||
Custom (Advanced) Operators | ||
In-Out Variables | ||
Computed Properties | ||
Subscripts |
Objective-C
Even though most new projects are now written in Swift, most large-scale iOS projects still exist in Objective-C. Knowledge of Objective-C will help you better understand the history and evolution of Swift and the iOS SDK.
Objective-C Topic | Ability to Explain | Ability To Code |
---|---|---|
Classes, Methods & Properties | ||
Synthesize Keyword (@synthesize) | ||
Dealloc | ||
Reference Counting Rules (retain, release) | ||
Property References (strong, weak) | ||
Method Signatures | ||
Protocols | ||
Blocks | ||
Categories | ||
NSDictionary | ||
NSArray | ||
NSNull vs. Nil | ||
NSSet (when and why) | ||
NSDate | ||
NSNumber | ||
Initializers (single and multiple) | ||
NSMutableString | ||
NSError | ||
NSURLSession |
Design Patterns
Once you’ve explored Objective-C and Swift, being able to recognize and implement design patterns will help you build a scalable solution. While most patterns aren’t exclusive to iOS, being able to code specific Apple-based designs will be your primary objective.
Design Patterns Topic | Ability to Explain | Ability To Code |
---|---|---|
Object-Oriented Design | ||
Protocol-Oriented Design (Swift) | ||
MVC (Model-View Controller) | ||
Key-Value Coding | ||
Notifications (register and receive) | ||
Delegation | ||
Inheritance | ||
Singleton | ||
Factory |
User Interfaces
With the latest version of Xcode comes a new method for creating mobile user interfaces, known as SwiftUI. While most existing iOS applications will continue to use standard tools such as Storyboards, Autolayout, and drag and drop techniques, it's recommended that developers invest considerable time learning the new SwiftUI design and data interaction concepts.
User Interface Topics | Ability to Explain | Ability To Code |
---|---|---|
HStack | ||
VStack | ||
View - Protocol | ||
Identifiable - Protocol | ||
Button | ||
UI Lifecycle | ||
UIView Animations | ||
Gesture Recognizers | ||
UITableViewController | ||
Animation Chaining | ||
Human Interface Guidelines Document | ||
Structured Concurrency (e.g. async / await) | ||
UINavigationControlller | ||
Core Animation |
Data Management
Writing solutions requires using Swift or Objective-C in conjunction with the iOS Framework. As you prepare for your next interview, note that success in the process will depend on you solving problems that can be explained using Big O Notation or standard iOS Framework management tools.
Data Management Topics | Ability to Explain | Ability To Code |
---|---|---|
Big-O Notation | ||
HTTP (e.g. GET, POST, PUT) | ||
Structured Concurrency (e.g. async / await) | ||
Actors and Main Actors | ||
Core Data | ||
NSUserDefaults | ||
Data Normalization | ||
Data Denormalization | ||
XCTest Framework (e.g creating unit tests) | ||
Info.plist | ||
File's Owner Object | ||
URL Session | ||
UITableView (e.g. datasource and delegate) | ||
Codeable & Encodeable (Native JSON Parsing) |
Data Structures and Algorithms
When creating modern apps, much of the theory inherent to algorithms is often overlooked. For solutions that consume relatively small amounts of data, decisions about specific techniques or design patterns may not be as important as just getting things to work. However, as your audience grows, so will your data. Making sense of data allows users to connect, share, complete transactions, and make decisions.
Algorithm Topics | Ability to Explain | Ability To Code |
---|---|---|
Big-O Notation | ||
Hash Table | ||
Dynamic Programming | ||
Linked List | ||
Stack Data Structure | ||
Breadth-First Search | ||
Depth-First Search | ||
Graph Theory | ||
Binary Search Tree | ||
Divide & Conquer |
Version Control
Knowing how to manage code (either on your own or as part of a team) makes you a valuable asset. While there are various version control systems available, knowledge of Git is highly valued in most development situations. Ideally, you understand Git concepts, tools, and processes
Version Control Topics | Ability to Explain | Ability To Code |
---|---|---|
Working with Copies, Branches & Stashes | ||
Remote Repositories | ||
Stage, Push, Pull & Fetch | ||
Merge vs. Rebase | ||
Fork / Clone | ||
Managing Code Conflicts | ||
Working with Github | ||
Managing Pull Requests |
Thanks for reading! Track of your progress with my Swift interview questions in PDF format.