Prepare for a software engineering interview
Lets look at the basic things you must know if you are interviewing for a software engineering position :
- Programming in a language of your choice : You should have a strong hold on at least one programming language. You should be quickly able to understand reasonably complex piece of codes and mentally dry run them. You should be able to code a complex scenario in the said language.
- Problem solving / Algorithms : Algorithms in itself is a huge field. You are expected to know about basic algorithms. You will be at a great advantage if you know about basic problem solving approaches.
- System Design : This is extremely important if you are an experienced software engineer.
You need to be good at :
- Understanding the requirements of a system
- Designing scalable, fault tolerant systems
- Operating Systems : Threads and Processes, Thread synchronization primitives ( semaphores and mutex ), Memory management ( Paging, Swapping )
- Databases : Querying a Relational DBMS, Indexing, Primary and Foreign Key constraints, Normalization, Internal storage
- Networks : Network Layers, TCP and UDP, TCP packet structure, Packet routing, Subnetting
- Web : Cookies, Session management, Caching, Http / Https
Where to learn them
- Programming in a language of your choice : I will assume you know the basics of programming in at least one language. Then it boils down to a lot of practice.
- Problem solving / Algorithms : Personally, I feel mycodeschool does a good job of teaching the basics of algorithms required.
- System Design : I feel http://www.hiredintech.com/syste... is a great point to start with.
Now that you are done with the preparation, following few final tips might help you do well in an actual interview :
- Avoiding misunderstanding : A lot of candidates do badly in a programming interview because they start solving a problem different than the intended one. Make sure you spend 2–5 minutes asking the interviewer about corner cases on the problem. This will ensure that you have understood the problem correctly, and you understand corner cases to take care of in your solution.
- Code structure : This is not just applicable to interviews. Spending some time to think about how you would structure the code can save you coding and debugging time.
- Communicate : You should be able to communicate your thoughts to the interviewer. The interviewing process ( especially the system design round ) is mostly bouncing around ideas, and explaining to them your thought process.
- Company fit : Make sure you do your research about the company prior to applying for a job there. Most companies would want to hire candidates who feel passionately about the work the company is doing.
Avoid asking questions which you could easily find on Google. Think about exciting additions you could make to the company product / service if you had your way at the company.
Apart from that, You must know a relatively small subset of algorithms and data structures. You’ll definitely need to know:
- Linked lists, binary trees, tries, stacks, queues, dynamic arrays, hash tables/maps
- Breadth first search, depth first search, binary search, merge sort, quick sort, tree insert/find/etc
- Big-O time on all of the above
- How to identify choices that will result in big performance gains/losses (i.e. don’t worry about minor gains/losses), especially if that choice would mean the difference between a feasible solution and an infeasible solution
- OOP design principles