Hi, interviewing some folks here at Wanelo and was wondering what kinds of quesitons do you guys ask someone who’s looking to join at a Juniour iOS position?
It all depends on your personality and what you think is important in an iOS developer. I personally favor trivia-type questions that demonstrate deep knowledge of the frameworks. Stick to parts of the SDK that any iOS developer can be reasonably expected to know: UIKit, Core Data, NSURLSession, etc. – unless you’re specifically trying to hire a specialist (which you probably aren’t for a junior role). I’m a senior developer but if you asked me about SpriteKit I’d bomb spectacularly. I can bore you to death with the finer points of EAAccessory, XMPP and SIP, though. Everyone’s experience is different.
Memory-management is a good litmus test now that we’ve had ARC for a few years, because you can more or less get by and write a functional app without understanding much about it…for a while, until it bites you hard and you’re helpless to fix it. For a junior role, I’d expect someone to be able to answer most of these:
- What is a retain count and how does it relate to objects being deallocated?
- When do you use strong vs. weak references and why?
- Explain what a retain cycle is and how to avoid one (if they haven’t already covered this in their answers to the first two, which ideally they should have)
- Briefly explain the high-level concepts of ARC
- Bonus: How does ARC differ from garbage collection? What advantages does it have over GC?
- Extra bonus: What is an autorelease pool? In what sorts of situations can it sometimes be used to improve performance?
I also like to ask a few 100-level CS questions. I personally love theory, but for interviews I’m not really into “implement a doubly-linked list on the whiteboard” stuff, as I don’t believe that correlates meaningfully to actual job skills for someone making apps. However, they do need to have a foundational, platform-independent understanding of common data structures and other core concepts. Stuff like this:
- Explain how arrays, dictionaries, and sets associate objects. What is each one optimized for?
- What is recursion? Why does it tend to be inefficient compared to loops?
- Explain the difference between value semantics and reference semantics. Why does it matter? If a language gives you the choice, what’s your philosophy on choosing one or the other?
- What is the difference between a compiled language and an interpreted language? Give an example of each. What are the advantages and disadvantages of each?
Other than that, maybe a couple questions each on the important core competencies like networking, concurrency, general best-practices, etc.
Hope this helps.