What do employers want to hear? What do you need to know? You can find a lot in the Internet, but in reality the human factor plays a role and you are caught on simple questions for which you were not ready.

Over the past 7 months, I’ve bypassed interviews, over 20. They were all in the Junior iOS developer position. As a result, after numerous torments and pull-ups of various nuances of mobile development, they gave me an offer to the company, which I was extremely happy about.

I, as a person without early experience in development, an economist by education, would like to share and make a little bit clear to a person who just decided to take this path, what he should expect at interviews and what questions he definitely needs to raise or learn at all.

I will write here only for Junior Swift iOS developer positions. Other interviews on those positions I did not pass.

I will list things that with a probability of 99% HRs will ask you, then I will add a few words about each item.

So, let’s begin.

What they will definitely ask you (well, if you suddenly forget to ask, they will obviously expect from you that you know this):

  • ViewController’s Life Cycle
  • OOP
  • The difference between class and structure
  • Protocols
  • Ways to transfer data between controllers
  • Storyboard or xib
  • AutoLayout
  • Saving data (CoreData, Realm, UserDefault, etc.)
  • Requests and work with data received from the server (URLSession, Alamofire, Codable)
  • Closures
  • Optionals
  • Extensions
  • Generics
  • ARC
  • Multithreading 
  • The difference between frame and bounds
  • Cocoapods (SwiftPacketManager)
  • Git

We will briefly discuss a few points.

ViewController’s Life Cycle

Everything is simple here. They want to hear from you:

Of course there are still methods, but in general these will be enough.

OOP

You can easily google this moment and read what is there.

Class vs Struct

Here, in fact, everything seemed to be simple, but you really need to know what they differ in. You need to understand at least in a basic example what print () will produce and why.

You should know what print will give you in these two cases.

It will also be a plus if you add from whom ViewControllers can be inherited, and from whom not. 

Protocols

Read what it is and what they are used for (although I think you already heard about them).

They may also ask about extension to the protocol. You need to understand exactly what the delegates are and how this connection works.

Ways to transfer data between controllers

It will be enough for you to name a couple. Delegate methods, closures, through init if we create a ViewController via xib, etc.

Storyboard or xib

Here you will most likely be asked if you have ever created a ViewController via xib. They won’t ask you for details. You junior, you still don’t know much. The main thing for them to understand is whether you can write it. Well, it will be necessary to give an answer why you create through xib or vice versa.

AutoLayout

Here you can talk for a long time on this topic. I advise you to google what it is. Understand the general essence, this will be enough.

Saving data (CoreData, Realm, UserDefault, etc.)

This question will haunt you for a long time. The most important thing is to know when to use UserDefault, what to save in KeyChain, what Realm is. Save the data a couple of times in your home projects in CoreData so that you have a general idea of ​​what kind of tool it is and how to use it.

Requests and work with data received from the server (URLSession, Alamofire, Codable)

Here you need to know what POST, GET is. This will be asked.

You need to be able to handle errors upon request. The ideal option is if you have been given the Terms of Reference before the interview. There you can demonstrate the full power of your mind.

Alamofire is also common on projects, so you should be able to use it.

You should be able to parse the data that the server returns to you using Codable or some libraries in the spirit of SwiftyJSON or ObjectMapper.

Closures

This is a very important point. It may happen that you really use this often, but did not delve into the gist of this issue. If you know how to write them and how to use them – great! But how do you show the employer that you know this if you cannot explain in simple terms what it is. I advise you to thoroughly check SwiftBook on this issue.

Optionals

This should be one of the easiest items for you. You should know about this “Schrödinger Cat” and what are the deployment methods. Be sure to tell them that you are not a supporter of Force Unwrap and deeply despise people who are so “crap” in the project.

Extensions

This is unlikely to sound a separate issue. Most likely it will be in conjunction with other issues (for example, a question about protocols). Write a couple of times Extension’y. I assure you, there is nothing complicated there. You will definitely deal with this issue.

But for example, I had cases when they asked why great minds came up with it.

You can mark yourself somewhere such an answer – “To expand the class to which we do not have access.” For example, native Apple in which we can’t get into, but we want to expand it a little for our convenience.

Generics

What are they for? What is it? When you read about generics in SwiftBook, it may seem to you that this is something super complicated for your simple mind, but in fact everything is much simpler there. The main thing is simply to understand the essence of what it is written for. And you can always spy on how to create it. You will not be forced to write it at the interview. They just want to hear your understanding of this issue.

ARC (superficially, no one will demand in-depth knowledge from Junior)

Here they want to hear from you a general idea of ​​link counting. How it increases and what will happen if the “counter” is 0. They will not ask you to dive under the hood, and if they do, then they are unlikely to understand that the junior is sitting in front of them.

Here they want to understand that you can correctly find bugs in the code when your ViewController, for example, does not “de-initialize” (gets killed, disappears, leaves) “accidentally”.

Multithreading

How to transfer from main thread to background. There are many nuances. You won’t understand all at once, the main thing is to deal with GCD and DispatchQueus.

The difference between frame and bounds

From this question, they can begin an interview. But I add that this question was surprisingly not as common as the others. But checking on the Internet, I noticed that this is a fairly common question, so do not try your luck, learn! Think that you are sure to be asked. There is nothing complicated here, you just need to understand the essence (yes, yes, as with all other issues).

Cocoapods (SwiftPacketManager, carthage)

You should definitely be able to create libraries into your project. The most popular is CocoaPods. In general, it will be enough for you to know it. But if you want to expand the range, you can also see SwiftPacketManager, carthage.

Git

Well, here I do not even know what can be added. Use the git, make commits (the more the better).

You must be able to create new branches, merge (merge) with other branches, and resolve (resolve) merge conflicts.

I listed the most popular questions that I have encountered. Of course, no one has canceled the human factor and they can catch you on any other question, but if you are well versed in these issues, then you are already 90% ready. Me myself am still a Junior and I understand that my opinion is far from expert, but I just decided to share with others what I know and hope that it will be very useful to someone and will help to overcome the stage of a technical interview.