I just finished a technical interview yesterday and the interviewer asked about graph theory, data structure, and traversals. This has nothing to do with iOS stuff. So I came un-prepared. This was actually for a social mobile gaming company, is this the reason why they ask these kind of stuff instead of iOS stuff? Now it seems to me that I am just overwhelmed by the materials to review and study for future interviews, I have to review the whole data structure/traversal/searching algorithm and at the same time iOS/objective-C fundamentals as well. Can someone guide me on how to prepare? Is my past experience just a special case as it was a gaming company?
Oftentimes employers don't really want "iOS developers", "unix developers" or any other sort of potential one-trick-pony. They'll be looking for good all-rounders who have a firm grasp of the basic concepts such as those you were asked about.
Usually, such talented developers have little difficulty turning their hand to any specific technology that comes their way.
Well, social networking applications use a lot of graph theory. They're dealing with a big graph of "friend" connections, so they've probably got a bunch of algorithms that partition that graph into groups and suggest things to users based on the groups that they're in, who their friends are, etc.
But moreso than that, graph theory, data structures, and algorithms are fundamentals of software development, just as the MVC pattern, message-passing, and memory management are fundamentals of iOS development. Just because you're interviewing based on your specialties doesn't mean you don't need to have a solid grasp of basic Computer Science concepts.
For any interview, I would want to have a solid understanding of:
- The basics of software development (design patterns, object-oriented design, development methodologies, big-O notation, data structures, graph theory, etc.)
- Any technologies that are specific to the position (in this case, Objective-C, the iOS SDK, XCode, etc.)
- Domain-specific concerns in the problem space that the position deals with (in this case, I would at least read the Social Network article on Wikipedia, as well as the Network Theory article, and probably some of the linked sources.)
- The history of the company I'm interviewing with, existing products that they've created, the backgrounds of their principals, and their main competitors.
You prepare for this type of interview by not just knowing your niche specialty, or any particular subject such as graph theory, but by studying the entire broad field of encompassing software engineering, computer science, general design methodology, problem solving skills and more. This could take years, not just a few days of cramming.
These types of interview questions are usually statistical spot checks of a random sub-topic from the above broader areas to see if you are the type of person who has the intellectual curiosity and who has put in the time to learn, and is not just a niche specialist who may or may not be able to morph with changing technologies and markets.
So, whatever random sub-topic someone crams on is likely to not be part of the next interview question on their general professional knowledge.
The solution? Keep learning.