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

icloud_cloud.png

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:


orange-checkmark.png

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    
 
orange-checkmark.png

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    
 
orange-checkmark.png

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    
 
orange-checkmark.png

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    
 
orange-checkmark.png

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)    
 
orange-checkmark.png

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    
 
orange-checkmark.png

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.