Once you get past the application stage, it is time for interviews! Start practicing for interviews earlier to be prepared.
Not only will passing technical interviews help you get an offer, it can also improve your skills as a programmer. For many students, the coding they do in their coursework is necessary, but not sufficient preparation for working as a software engineer. Practicing technical interview questions can help you learn how to take a new problem, break it down into requirements, and implement a solution.
Your interviewer may be trying to evaluate these categories:
If you are an undergraduate student searching for an internship, your coding interview will probably focus on categories 1-4.
If you are searching for a full-time job or an internship that requires more experience, your coding interview may focus on effiency, readability, and trade-offs as well.
Every organization has a slightly different process, but many software engineering interviews have a format similar to this:
Programming Languages and Tools: In most cases, you can use whichever programming language you feel most comfortable working in. The interviewer may require you to write your code in a different tool than you usually use. Typically, we recommend that Illinois Tech students practice using Python for technical interviews, even if they have more experience with Java or another language, because Python allows you to express your ideas quickly, without writing a lot of extra code. JavaScript can also be a good choice if you feel comfortable with it or if the organization uses JavaScript/Node.js often.
Communication: The interviewer needs to know how you are approaching the problem, so describe your thought process out loud while thinking about the problem and implementing a solution. This may feel odd at first, so try speaking while coding during your practice sessions.
Asking For Help: If you need to do something in an interview that you would normally search for online or in another resource, ask the interviewer if you can look it up. They may let you look it up, tell you the answer directly, or ask you to try without looking it up.
Follow-Up Problems: The interviewer problem may have multiple parts. If time remains, the interviewer may give you a follow-up problem, which is a good sign of your progress.
Correctness: It is up to you to demonstrate to the interviewer that your solution satisfies the requirements of the problem. Make sure to clarify the requirements at the start. Write tests in code (preferred) and work through examples by hand to show that your solution works. Brainstorm "edge cases" to ensure your solution covers possible inputs.
Efficiency: This area should take more practice and learning if you are new to programming. Identify areas to improve the runtime and memory complexity of your code and describe your code using Big O notation (or learn what those terms mean when practicing).
Readability and Code Style: Readability is how easy it is for another programmer to understand some code. During interviews, write code in a way that will make it easier for someone else to understand your solution, even if that means you need to go a little slower. You can ask your interviewer for feedback, too!
Questions for the Interviewer: The interviewer may leave time after the programming portion of the interview for you to ask them any questions. Come prepared with a list of questions about the organization, how your interviewer likes/dislikes working there, and any topics you want to know more about.
Mini Behavioral Interviews: The interview may start with a behavioral question before the programming portion, asking about a past project, experience, or skill on your resume. Use the STAR method to give a strong response.
Start out with one 90 minute practice session per week. If you need more practice, increase the number of days per week, but we recommend sticking to one 90 minute session per day so that you can focus on one problem deeply and retain the knowledge you gain.
Here is our recommended structure for the session:
Both parts of the session are important: you need to practice coding and problem-solving, but you also need to learn you to improve your work.
If you are not able to make any progress on the problem after 15 minutes, search for a different problem that is closer to your skill level. If the problem is at your skill level and you are still stuck, spend the remaining time reviewing solutions. After you understand the solution, change one requirement about the problem so that the existing solution would not work, then write your own solution to the new problem.
If you are applying for full-time jobs or internships aimed at graduate students or third and fourth year undergraduates, you should practice problems that include data structures and algorithms content. Choose problems that involve these concepts:
If you are applying for internships aimed at first and second year undergraduates, you may not get data structures and algorithms questions in interviews. Instead, the interview problems will test your general coding skills. Choose problems that involve these concepts:
Here are sites with many problems for you to choose from. You can go through the problems in the order they provide, or choose based on your needs.
After your initial attempt to solve the problem, search online for how other people solved that problem. Spend time to read, understand, and run their solutions to learn more. Websites like LeetCode may have discussion pages where people share more details about their approach.
Even if you solve the problem within 45 minutes, there are always ways to improve: coming up with better tests, making your code more efficient in runtime and memory, writing code that is more readable, or solving the problem faster.
You can also pair up with another student who is practicing technical interviews. You can both choose the same problem to solve, then trade solutions and write feedback for each other. You could also do mock interviews where you take turns being the interviewer and the candidate, to help practice communication and problem-solving in a live setting.