Skip to content

Latest commit

 

History

History
275 lines (213 loc) · 19.7 KB

mobile-interview.md

File metadata and controls

275 lines (213 loc) · 19.7 KB

Intro

This interview guide has been used in dozens of interviews for mobile iOS as well as some Android candidates. It has been improved during each one and also over time by fine tuning the questions using the resources listed at the bottom in the links section.

Before any interview I usually select a number of questions from each category that I want to ask and create a fresh markdown file in an editor from it. During the interview I can easily make notes on each question.

I hope this guide helps some of you improving and preparing your next, awesome interview 👍

What we expect from you?

  • You worked as <team lead | senior | regular | junior> for at least two years
  • You used Swift or Kotlin in multiple projects for more than two years
  • You are experienced in agile software development
  • You are able to implement complex features on your own
  • You are able to understand and maintain shell scripts to automate recurring tasks and feel home on the terminal
  • You have a pet project, like your own app, in the App Store or you are maintainer of an open source package
  • You know how to develop and distribute an open source package
  • You actively push your limits in Test Driven Development and Continuous Integration
  • You know how to work with Fastlane
  • You developed at least one app that needs data persitence using data bases like CoreData, SQLite

What We Need From You In Advance?

  • CV
  • Stack-Overflow-, GitHub-, Xing-, LinkedIn-Account

Agenda

  • We provide information about <company>
  • We introduce ourselves
  • Applicant introduction
  • We ask questions to get to know the applicant
  • Applicant can ask questions

Questions

Get to know questions

General

  • Why are you interested in <company> and how did you hear about us?
  • Why you want to leave your current job and home country?
  • What was the biggest challenge you have faced with at work and how you coped with that?
  • When I ask you manager and your best friend, how would both of them describe you?
  • Why you changed your focus from <topic_I> to <topic_II>?
  • Can you describe your experience in agile software development?
  • Describe the purpose of the SCRUM meetings daily, review and retrospective!
  • Why should we NOT hire you?
  • Imagine everything woks out well. You're happy with salary and contract. What would need to happen for your to quit the job again?

Personal goals

  • Can you please describe your role at <company> from your perspective?
  • What would be your goals when working for <company>?
  • Today, in exactly one year, where do you see yourself?
  • If you were to start in the role today, where do you see yourself making an impact first?

    Asking this question can be particularly useful if you want to understand how realistic a candidate is about their role within your organisation and their understanding of your company’s goals. This is a good alternative to asking ‘why should we hire you?’ as it gives a candidate the chance to showcase what impact they could have in the role. A good candidate will demonstrate a desire to meet with their stakeholders to really understand their role and ask follow up questions about your key performance

Adaptability

  • Did you ever had to adapt to the working style of a colleague to finish a project? How did you cope with that?
  • Have you ever been in a situation where you had to do something you never did before? How did you react and what did you learn?
  • Please describe a past work situation where you started to use a new technology or idea that totally diverged from your way of working so far.
  • Think about a time when you received a task apart from your main responsibilities, e.g. implementing this one feature in a different language. How did you solve that problem?
  • Please tell us about the biggest change in you career? How did you deal with the situation?

Company and cultural fit

  • Please tell us about a project you’ve worked on outside of your professional career that you’re especially proud of!

    Sometimes, to get a better sense of a candidate, it’s good to start at the bottom of their CV to understand what they can bring to your team. This question allows you to see how the candidate might be a culture add to your organisation. If they highlight something that brings diversity or a different experience, it helps you to assess what they bring to the role. It can be used as an alternative to the 'tell me about your hobbies' question.

  • What is the your interesting characteristic we don't know from the CV already?
  • What is necessary that you decide yourself for <company> instead of another one?
  • Which aspects are most important for you in a job and what are no-go's?
  • In which aspects your colleagues assess you in a wrong way and why is that so?

Collaboration

  • Had you ever communication problems with a colleague that simply didn't understand your concern? How did you deal with this situation?
  • Please talk about a situation where you had to work together with a complicated colleague. How did you deal with that situation?
  • Describe the best colleague/boss you worked together with. What did you like most on this person?
  • Tell us about your most pleasant experience at work and your contribution to it.
  • Describe a situation where your project goals changed dramatically! How did you deal with this situation?

Prioritization

  • What do you think is better? Deliver a project perfect but late or deliver it good and in time.

    This question allows you to get a sense of how the candidate might prioritise things and their ability to get things done. And a neutral answer such as ‘it depends’ is not necessarily unwelcome. As an alternative to ‘what’s your biggest weakness,’ this is a great way of discovering if a candidate knows the difference between work that’s ‘good enough’ but makes the deadline, and a project that is perfect but late.

  • Imagine you get two tasks assigned for the next two weeks, where you don't exactly know the background. How do you proceed to solve them?
  • Think about a time where you had to work on multiple projects in parallel. How did you plan your time? What was the result?
  • Describe a situation where you felt stressed and overwhelmed in a project. How did you cope with that?
  • How do you decide how much time is needed for a user story?
  • Think about a project that you had to plan! How did you organize all the necessary tasks?
  • Describe a situation where you delegated an important task.

Development potential

  • Which is your biggest career goal? Why?
  • When was the last time you requested feedback from your boss or a colleague? Why?
  • Did you have a situation where your lead was not available and a problem arised? How you coped with this? Whom did you ask for help?
  • Did you ever deepened your knowledge in a different area than the current requirements? Please tell me about your reasons for that!
  • What is needed that you leave your current position and start something new?
  • Are there any tasks in your current role you find too easy or too difficult?

    This is an alternative to asking about strengths and weaknesses. Sometimes, a candidate knows what your job description requires and so will list the strengths that they think you want to hear. By phrasing the question in this way, it can allow you to uncover a candidate’s true strengths and weaknesses - usually the tasks they find too easy, can be those where their greatest strengths lie, and visa versa for weaknesses. It can also give you an indication as to why the candidate is leaving their current role, if they are finding most tasks too easy, it can be a sign they have outgrown their current position.

  • What activity do you currently perform that you find drains most of your energy?

    This is an alternative way of asking ‘what parts of your current role do you like the least?’. By approaching the question in this way, it allows you to understand why the candidate dislikes an aspect of their current role. For example, it could be a process issue they feel like they have no control over, or it could be simply that the candidate has outgrown that role, and is ready to progress to the next level of their career.

Leadership

  • Please tell us about the last work situation where something went wrong? Which role did you play and how the situation ended?
  • Please describe a situation where you had to convince somebody to view a task from your perspective! Which steps did you take and what was the result?
  • Describe a situation where you had the feeling that you've chosen the best way for your team to solve a problem? How did the other react?
  • What was the most difficult decision in your last six month?
  • Did you ever have to "sell" an idea to your team? How did you proceed and what was the result?

Technical questions

General and apps

  • [---] What was the most complex app you worked on and what was the main challenge?
  • [---] How do you improve yourself in software development? [Conferences, Blogs, (WWDC-)Videos, Tutorials]
  • [---] Which of your apps are available in the store? Did you develop them on your own?
  • [---] Which of your apps have the most users. How many?
  • [---] Which was the first <Android | iOS> version you worked with?

Whitelabelling

  • [---] What do you think is meant by white-labelling?
  • [---] Imagine two customers need 2 white-labelled apps. Please describe how to implement specific [wording, colors, assets, fonts, different server url's, etc.]

Scripting

  • [---] How many lines of code (approximately) in bash script did you write already?
  • [---] State some examples of what can be achieved using shell scripts

Concurrency

  • [---] What is the difference between Synchronous & Asynchronous task?

    Synchronous: waits until the task have completed Asynchronous: completes a task in the background and can notify you when complete

Functions

  • [---] What is Dynamic Dispatch?

    Method Dispatch is the mechanism that helps to decide which operation should be executed, or more specifically, which method implementation should be used. Static Dispatch is supported by both value types and reference types while Dynamic Dispatch is only supported by reference types since we need inheritance. In general Dynamic Dispatch is the process of selecting which implementation of a polymorphic operation that’s a method or a function to call at run time.

Open source

  • [---] Which dependency managers / build systems do you know? [Gradle, Cocoapods, Carthage, SPM]
  • [---] Experience with open source frameworks?
  • [---] Which frameworks do you use frequently?
  • [---] Did you develop (open source) frameworks on your own?

UI

  • [---] What might be the reason when your app begins to be unresponsive? [Too many tasks on main thread]
  • [---] What is important when connecting the networking layer of your app to the UI in regards of multi threading?
  • [iOS] What is your way of implementing a view controller from scratch? [-IB, +InCode]
  • [iOS] Did you ever create complex apps (>10 view controllers) without interface builder?
  • [iOS] What’s the difference between the frame and the bounds?

    The bounds of a UIView is the rectangle, expressed as a location (x,y) and size (width, height) relative to its own coordinate system (0,0). The frame of a UIView is the rectangle, expressed as a location (x,y) and size (width, height) relative to the superview it is contained within.

Testing

  • [---] How do you ensure that your app always meets certain quality criteria?
  • [---] What is TDD? Please describe a situation where this has proven useful in your past career.
  • [---] Please describe Continuous Integration and its purpose. Did you actually use it already? If yes in how many projects and for what? [Test Automation, App Distribution, ...]
  • [---] Which testing frameworks do you know and how do you use them? [Quick - BDD testing, Nimble - matcher, XCTest - Xcode native testing framework]
  • [---] What is the Test Pyramid?
  • [iOS] What are your options about automated UI-Tests with Xcode? [XCUITest]
  • [---] Please explain "Arrange-Act-Assert"

    AAA is a pattern for arranging and formatting code in Unit Tests. If we were to write XCTests each of our tests would group these functional sections, separated by blank lines:

    • Arrange all necessary preconditions and inputs.
    • Act on the object or method under test.
    • Assert that the expected results have occurred.
  • [iOS] What is the difference between setUp() and tearDown() in XCTestCase ?

    We use these two methods for allocation. setUp method calls before test methods are executed. tearDown method calls after all test methods are executed for cleaning up any changes we made in data.

Design patterns

  • [---] What are design patterns, why are they important and which do you know?

    Design patterns are reusable solutions to common problems in software design. They’re templates designed to help you write code that’s easy to understand and reuse. Most common Cocoa design patterns:

    • Creational: Singleton
    • Structural: Decorator, Adapter, Facade
    • Behavioral: Observer, Memento
  • [---] Describe the MVVM-Pattern.
  • [---] Describe the MVC-Pattern with the example of a download manager.

Location

  • [iOS] Which APIs do you know for battery-efficient location tracking?
    • Significant location changes: The location is delivered approximately every 500 metres (usually up to 1 km)
    • Region monitoring: Track enter/exit events from circular regions with a radius equal to 100m or more. Region monitoring is the most precise API after GPS.
    • Visit events: Monitor place Visit events which are enters/exits from a place (home/office).

Swift / Programming

  • [---] What’s the difference between method overload and method override?
  • [iOS] Explain the key word lazy?

    An initial value of the lazy stored properties is calculated only when the property is called for the first time. There are situations when the lazy properties come very handy to developers.

  • [iOS] What is the difference Non-Escaping and Escaping Closures?

    The lifecycle of a non-escaping closure is simple:

    • Pass a closure into a function
    • The function runs the closure (or not)
    • The function returns

    Escaping closure means, inside the function, you can still run the closure (or not); the extra bit of the closure is stored someplace that will outlive the function. There are several ways to have a closure escape its containing function:

    • Asynchronous execution: If you execute the closure asynchronously on a dispatch queue, the queue will hold onto the closure for you. You have no idea when the closure will be executed and there’s no guarantee it will complete before the function returns.
    • Storage: Storing the closure to a global variable, property, or any other bit of storage that lives on past the function call means the closure has also escaped.
  • [iOS] Please explain [weak self] and [unowned self]?

    unowned ( non-strong reference ) does the same as weak with one exception: The variable will not become nil and must not be optional.

    When you try to access the variable after its instance has been deallocated. That means, you should only use unowned when you are sure, that this variable will never be accessed after the corresponding instance has been deallocated.

    However, if you don’t want the variable to be weak AND you are sure that it can’t be accessed after the corresponding instance has been deallocated, you can use unowned.

    • Every time used with non-optional types
    • Every time used with let

    By declaring it [weak self] you get to handle the case that it might be nil inside the closure at some point and therefore the variable must be an optional. A case for using [weak self] in an asynchronous network request, is in a view controller where that request is used to populate the view.

  • [iOS] Please explain the key word autoclosures

    @autoclosure creates an automatic closure around the expression. When we write an expression, @autoclosure is automatically wrapped into a closure

Data persistence

  • [---] Where do you store your sensitive authentication data?
  • [---] Did you work with data persistence?
  • [---] Which data storage mechanism do you know? [User Defaults, Key Archiving, Writing Files, Core Data]
  • [---] What is the main challenge when updating the data model in Core Data?
  • [iOS] In how many of your projects you used Core Data?
  • [iOS] Did you created a data model on your own?
  • [iOS] What is a mapping model and what do you use it for? [Tells Core Data how to map objects from the source model to the destination model. It is important when Core Data cannot perform a leightweight migration.]

Analysis

  • [iOS] What is instruments?
  • [iOS] State three things you can analyse with instruments!

Memory management

  • [---] What is the difference between reference and value types?

    By passing value type, the variable will create a copy of its data, and the reference type variable will just point to the original data in the memory.

  • [iOS] What is ARC and how it changed the development apps? What methods are obsolete to implement?
  • [iOS] Describe the purpose of Xcode's Memory Graph Debugger

Programming languages

  • [---] In how many projects you used <Swift | Kotlin>?
  • [---] Did you already migrated projects from <Obj-C | Java> to <Swift | Kotlin>? What was the greatest challenge?
  • [---] What's your favorite programming language and what do you like most on it?
  • [---] If you could change something in it, what would that be? What implications would this have?
  • [---] If you had to learn a new language, which one would it be, and why?

Links

Included