Questions about this format, send me a message: https://www.linkedin.com/in/hectorddmx
For technical interviews, let's ask candidates to refresh the following:
- reply brief answers on iOS topics to share your understanding
- how and when to apply certain tools inside the swift programming language and the iOS SDK
- low level understanding on performance, optimization, possible issues and how to debug them
- be concise
- be upfront on things you don't know
- share your work experience through the different concepts
- https://iosinterviewguide.com/
- https://www.hackingwithswift.com/interview-questions
- https://www.youtube.com/playlist?list=PLSbpzz0GJp5Qa8TbUgk8dD4u4OlTZScD2
High level, how would you implement a new feature or a new module
- model a new module or feature and it's different layers
- consider data flow, entrypoints and API to consume the module
- plan for reusability if required
- ask how the interviewer wants to see the information
- you can do it by writing by either writing pseudo code, a list of layers and their components, or create diagram of the different layers
- ask questions to the interviewer about
- general module requirements,
- about possible future requirements,
- consumers of said module, and
- if there are current rules or patterns you should adopt to keep it consistent
- display your though process
- share what worked and didn't work for you before
- show your communication skills
- show your diagram skills if required
- https://github.com/weeeBox/mobile-system-design
- https://www.youtube.com/playlist?list=PLaMN-JyH50OYAfxJEpiQTYTD-gxTf7x9d
- https://www.youtube.com/@iCode_Happy_Coding/videos
- https://iosinterviewguide.com/system-design-interview
- logic, knowledge of iOS SDK and APIs
- forms and validations.
- UI with UIKit or SwiftUI
- web services consumption, JSON parsing, networking, concurrency
- unit testing, adding new tests for new features, focused on
- ask question to the interviewer at the problem domain, things to do and don't
- make sure the code works frequently
- make it work first, then if time allows it, optimize
- if there is focus on tests, run tests early and frequently
- don't break previous unit tests unless required by change on the definition
- https://www.youtube.com/watch?v=GSjPtWpUtxg
- https://github.com/soapyigu/LeetCode-Swift
- https://github.com/kodecocodes/swift-algorithm-club
- Share a pitch of your work experience
- What would you do in different situations
- Display your experience, work ethics and what drives you as a person
- https://capd.mit.edu/resources/the-star-method-for-behavioral-interviews/
- https://www.youtube.com/watch?v=ZSSID5mp93o
- code a working solution to the proposed problem in a short time frame
- ask questions if requirements are fuzzy and document desired outcomes
- under pressure show that you can resolve a problem
- focus on functionality first
- after finishing the core requirements, you can focus on add nice to have features, optimize, add tests, refactor and make it look pretty
- if you are asked to present your solution:
- guide the interviewer through the code,
- share with them what was your thought process to solve the issue,
- allow them to ask questions related to some of the decisions you took
- if no session is planned to share your solution:
- record a video with the previous contents, or write a small intro in the readme file to guide through the different files and the thought process of your solution.
Build a UI that can:
- Fix a bug in the provided project
- Add a new view based on a given model
- Refactor the project to separate concerns (e.g., ViewModel, Network Layer)
Plus:
- If you can add unit tests with XCUITest for the refactored components
- If you can explain your thought process and handle general team questions while solving the challenge
- Show a loading/skeleton screen when loading, and switch to the actual content when content is loaded, or switch to an > error screen when the content has failed to load
Build a UI that can:
- Capture user data
- Validate input locally
- Send to the cloud and send it to a web service
- Display a picker view, select the value and display it as is
Plus:
- If there are errors, display received error messages below each the corresponding text field
- If you can mask/rewrite the input
- If you can make it look good
Build a UI that can:
- On load, call an API for movies and present each movie in a row
- Each movies should have a name and thumbnail
- When clicking a movie, it should redirect you to a DetailView where it should show
- Category, rating and a bigger version of the movie poster
Plus:
- If you can make pull to refresh work
- Cache the movies and the thumbnails
- Add a way to locally edit or delete a movie
- Add a search bar that can send a filtered query to the web request, then display only a subset of the values
- If you can make it look good
- SwiftUI views: TextFields, Picker, Buttons, List, LazyVStack, VStack, HStack, etc
- SwiftUI modifiers: onAppear, onDisappear, onChange, onTapGesture, task, onSubmit
- SwiftUI navigation: With iOS 16 as MIN SDK: NavigationStack’s APIs and iOS 16 Observation framework
- Reactivity: Combine or RxSwift, EventBus pattern
- Networking & concurrency: Async/await, Task, URLRequest, URLCache, caching policies, Codable, Encodable, Decodable
- Architecture Patterns: MVVM-C, Coordinators (with SwiftUI and UIKit), Interactors, ViewModels, Dependency Injection
- Refactoring: write code that works, add unit tests, refactor code, check that tests continue to pass, explain your thought process
- Other: Validation patterns, Regex, CharacterSet, Search and filter