Here is your answer…
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.
The above 2 topics make up for 50-75% of a software engineering interview process.
- 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 ( Horizontal vs vertical scaling )
- Basics of the following :
- 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, Normalisation, 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
has topic wise video tutorials augmented with related historical interview problems to practice on.
Leetcode has a great selection of problems to build problem solving skills.
If you feel a bit more adventurous, you can checkout and . However, most of these problems might be too hard to qualify for a technical interview question.
does a good job of teaching the basics of algorithms required.
- System Design : I feel is a great point to start with. makes for an interesting read.
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.
The above mentioned process might be time consuming. However, it would increase your chances multifold if followed correctly.
All the best!