As a tech lead worked at several technical giants, I have participated in dozens of interviews as a interviewer. Here I want to share with you some tips in a programming interview.
Many candidates (especially for some new-grads), because they don't have much experience on interviewing, they may tend to be unconfident. They cannot express their opinions fully and freely. And when the interviewer challenge them, they will immediately turned to be timid. This is a red flag for interviewer. Because this will give a impression that they are not assertive enough, or their foundation of computer science is not solid.
Another important point is be honest, most interviewer don't want a un-honest colleague. I found a candidate tried to pretend that she knew something on a topic which actually she was not familiar with. She told me a lot stuff but it's wrong, and further more she tried to change the subject since she didn't know the right answer. This seems a clever trick in daily communication, but it is not a good way in a interview. If you don't know the answers for some questions, just admit you don't know it. It's OK, nobody knows all technical details or answer every questions.
Interview is not all about a game of answering questions or examination. Instead, interview is a mocking scenario in daily work. The interviewer is trying to find a human but not a machine. Because in daily work, collaboration is an key part of software development. Although the your answering and coding is important, effective communication is also necessary.
A smooth self-introduction is necessary, practice it until you feel comfortable.
When you faced with challenge that you can't find the solution, don't let the entire interview fall into silence. Instead, tell the interviewers what you know, and what you think, actively ask the interviewer for hints.
If you don’t give out your ideas, we don't know the way of your thinking and the style of your reasoning.
Good questions from you can also show your thinking advantages. I have given HIRE result to some candidates who did not come up with the final answers, because their thinking process are good.
The interviewers prefer to candidate with a clear thinking. We doesn’t just want you to write down the answer, we value the process of how you get there. People who can explain something clearly tend to be a better collaborator.
Write clean and readable code is not easy, this may need some deliberate training, try to learning from great source code.
After finishing your code, you should spend a some amount of time to optimize your code structure to make it more readable.
For instance, it can be better abstracted with appropriate helper functions for duplicated code.
Variable naming is a key point, even the code is usually less than 100 lines in a interviewing.
Appropriate comments will also impress interviewers. But, remember you need to avoid overly abstraction, which will make it very difficult to read.
In daily work, add testing is your necessary task for any changes, especially for a complicated system.
Take the initiative to propose corner cases, which reflects your careful thinking and is very important for the positions of software development!
After coding, you should analyze the time and space complexity, and then run some basic examples to verify your solution. If you have time, please add more testing for your code.
Many candidates seems treat interviewing as an examination. We prefer to the candidate who has a passion and curiosity in computer science, because these two qualities will make everything easier in their career. Those who truly love programming will find more fun and have a better performance in work. For those who don't love the craft of programming, even if they manage to get a job, they will hate it.
A perfect way to show your passions is your hobby project, or your contributions to the open source community.