Tips towards an offer
Published:
CV, LinkedIn, job positions, and interviews
Hello! It has been more than a year since I received my software engineering internship offers. Now I want to share some details of my application process and hope it can help someone, especially in the current situation. I think this blog post can be useful not only for SWE/ML interns but also for those applying for full-time positions and even not SWE/ML.
Disclaimer: I got offers from Snap Inc, Apple and went through all technical interviews with Google, and dropped from the process by myself (because I had already accepted Snap’s offer).
Before I dive into the topic, let me say some words about my background and coding experience.
In 2020 I started my PhD in Computer Science at UCI with a focus on deep learning and computer vision. Previously, I had done mainly bioinformatics, although I took some ML and DL-related courses. I did not have much research experience and no industrial experience at all in these areas. Moreover, I had never had a real industrial coding interview and did not have Algorithms course at university. Imagine my shock when I realized that my very first coding interview would be with Google! Maybe I was lucky, maybe it was a coincidence, but I want to think about it as a result of hard work and strong efforts. If I could do it, then you can too!
I organized this post as follows:
- How to prepare your CV
- How to find positions and referrals
- Cultural matching
- ML/DL interview
- General tips for the coding interview (very important, you can scroll there right away)
How to prepare your CV
1-page limit
CV is your business card. For IT positions, it is strongly recommended to limit your CV to 1 page. If you have 2 pages, some employers might even skip your CV as it is disrespectful to their time.
Photo
Pay attention to the employer’s country guidelines concerning the photo in your CV. In the US, people do not include a photo because your appearance should not affect the hiring process.
Personal details
Do not write your actual/mailing address in your CV, area and city is enough. You never know where your CV will end up and how it will be used. Therefore, be careful with the information you providing.
Keywords
Keywords are highly important for the preliminary check of your CV either by a software tool or by real people. Scan the job posting for the keywords and try to include them as much as possible in the CV. Pay attention not only to the technical requirements but also to the description of a company, their values and priorities. For example, there is a job posting from Apple:
I guess you caught the point: use as many phrases and keywords from the job vacancy. Remember, it is a good idea to customize your CV for each position.
Order and wording
Place your experience, education, and achievements in reverse chronological order. As for the general layout, if you are a new graduate, probably you would like to put your education first unless you already have extensive internship/project experience. If you graduated a few years ago and have working experience, then, of course, put it first.
Try to be consistent in your wording. For example, when you mention your achievements or responsibilities, either say “developed, evaluated, trained, modified”, or “development, evaluation, training, modification” but do not mix them.
Formatting
Make your CV look as professional as possible. I am a huge fan of LaTeX and OverLeaf and I prefer these tools to Word because they help to construct very good-looking and professional documents. There is a bunch of nice CV templates, however, you need basic LaTeX experience to use them. In my opinion, spend some time learning how to use LaTeX and OverLeaf. It is really worth it!
For Russian-speaking readers, here is a manual by Prof. Konstantin Vorontsov. For the English tutorial, you can use this one Learn LaTeX in 30 minutes.
Master résumé
As I mentioned earlier, each job vacancy needs an individual approach. Therefore, creating an extensive version of your CV with all details and achievements is a good practice. This document is called a master résumé and it can be as long as you want. Then, for each position, you will select the necessary experiences and remove the rest. You can even keep multiple wordings of the same project or achievement in your master résumé so that in the future you just pick the best option without spending time composing phrases. In my opinion, this trick is very helpful when applying to a wide range of positions. A master résumé can also help to organize your LinkedIn (see next section).
A LinkedIn page is equally important as a CV. Even if an employer gets your CV file via some other sources, they are likely to check your LinkedIn page anyway. Therefore, I strongly recommend making your page professional and attractive. Moreover, you might apply for some positions through LinkedIn itself, or you may write to potential employers or ask for a referral.
- Photo. Your photo should be professional and cropped to show your face clearly. If you have a profile photo, your page will immediately become more visible.
Headline. Make it full of keywords and list them with “|” sign. Here should be the most important information about you.
- Edit URL. Personalize the URL for your profile so that it is recognizable and easy to share.
- Fill in all the information about your education (including the core courses), work experience with the description of responsibility and achievements, projects, awards, and skills. If you know someone who can endorse your skills, ask them to do so. Here, your master résumé could be of great help - you can just copy all the details. LinkedIn does not limit you in any way, so provide all the information you find valuable for the potential employer.
- Recommendations. Ask people who are aware of your professional background to write a recommendation for you. It can increase your ranking in search and, just in general, makes your page more attractive.
- Make a lot of connections. Usually, it is a good idea to connect with your university mates, especially those who are working in the industry of interest. I suggest aiming for 500+ connections. Your connections are the most important driver in finding a referral or a job position. For more info, see next section.
How to find positions and referrals
As soon as you are done with your CV and LinkedIn page, it is time to actively look for people who can help you with a job. Of course, your CV might change multiple times depending on the particular job opening, but you should have at least something. I can give a couple of recommendations that can help you:
- Find people from your university that are working in your area of interest and ask them about potential referrals or jobs.
- There can be professional Telegram/Slack/Discord channels where people discuss vacancies. You can make a posting there with a short description and attach your CV. I found my internships via ODS Slack.
- If you are targeting any particular company, you can find its page on LinkedIn, then click on “People” tab and select those who graduated from your university, for example. Or who work in a particular country. Alternatively, you can find your university’s LinkedIn page, go to “Alumni” tab, and then you can select based on either a country or a company. Then you can connect with those people and ask them about the company and possible openings, or maybe a referral.
In general, it is a good idea to find people from your university/country in a target company. Or you can try to contact ex-interns or current employees.
Cultural matching
A cultural matching interview is a very common step in the interview process. It can be either a separate interview or can be combined with a technical one. Despite all your knowledge and talent, people would like to hire a team member, who is an open-minded and nice person. Be ready to talk about:
- Successful projects and failures
- Challenges you faced with
- Time when you took all the responsibility
- Time when you had some arguments with your colleague or team member
It is also nice to read about the company prior to the interview: history, values, culture, core products, and goals. You can be asked to give feedback on some product features and how they can be improved. Here you should demonstrate general creativity and the ability to approach an unfamiliar problem.
Moreover, it is a nice practice to prepare questions for the employer. Usually, an interviewer leaves 5 mins before the end of the interview to let you ask some questions about the company, team, tasks, and work culture. Use this time to show your interest and initiative.
ML/DL interview
If you have an interview for an ML/DL engineering position, you are likely to discuss some ML basics and specific topics related to a particular industry, e.g. Computer Vision, Natural Language Processing, Reinforcement Learning, etc. It might sound obvious but be sure that you are aware what networks or methods are the most relevant to a particular team or company.
Here are some topics that I find important and interesting to go through before the interview.
- Linear regression. Maximizing likelihood and minimizing Mean Squared Error
- Maximum a posteriori estimation
- Bayesian inference and regularizations: Lasso and Ridge
- Bias-variance tradeoff
- AUC-ROC and other quality metrics
- Ensembles. Random forests, gradient boosting, AdaBoost
- K-means (especially how to perform it with numpy), EM-algorithm
- Investigate the most basic papers related to team’s/company’s focus and explore the most novel, state-of-the-art research. It is very likely that you will discuss them during the interview.
If you are applying for a Computer Vision position, make sure that you know what is convolution, why do we need convolution, how to code it; average and maximum pooling and how to code it, how input and output dimensions are associated; batch/instance/layer normalization; types of losses and metrics; Image-to-Image Translation, GANs, Wasserstein GAN, StyleGAN, NeRF, etc. This is, of course, not a comprehensive list but I hope you can get a feeling of the level of details.
General tips for coding interview
LeetCode, LeetCode, and LeetCode, and Algorithms, and then again LeetCode. This is a standard approach. But there are a couple of very simple tips that can immediately boost your performance despite your knowledge of algorithms and data structures.
As I mentioned before, I had never had technical interviews, and this whole experience was very new to me. Feels like being in an exam. The only difference is that you need to talk and say out loud every single thought you have. Very weird at first, but this is the only way how an interviewer can evaluate your ability to think. They cannot read your mind therefore you must not be silent. Sometimes you do not necessarily need to solve a problem up to the end, but you definitely need to show that you are able to critically evaluate a task, find an approach to tackle it, and argue why it is the most optimal solution. Therefore, the first point in my list is:
Speak, reason, argue, and think out loud. Some sample phrases I used even if I was thinking in the wrong direction:
“Well, I am thinking about X, but I doubt that it can be the best solution because of Y and Z. So maybe I should go in the direction of W”.
- Do not rush into solving a problem. Re-read, re-think and, most important here, ask questions concerning the problem. You need to show that you do not blindly dive into everything you are given. You need to critically evaluate and be sure you have understood the task correctly. Some examples of the possible questions:
- Should the values be integers of floats?
- Negative or positive?
- Do I need to sort, or can I just use build-in sorting functions?
- Do we have duplicate numbers, e.g. in an array?
- What are the dimensions?
- Discuss corner cases. While re-thinking the problem, it is a very good idea to mention the cases where the problem has either a trivial solution or does not have a solution at all. Your interviewer can let you skip solving the corner cases, so you can write some “assert”-expressions, which would be proficient.
- Brute-force. Some people can freeze because they do not know how to find an optimal solution to a particular task. Therefore, firstly, discuss any approach even if its complexity is O($k^n$). Once again, it is about being not silent. Depending on the situation, you can code your simple solution, or your interviewer can be satisfied with just an explanation. After that, you can start discussing that there could be some other more elegant solutions and maybe they come to your mind at that point, or your interviewer will give you some hints.
- Receive help. If the interviewer tries to guide you in the right direction, do not neglect that. It does not mean that you failed the interview, on the contrary, the way you receive help can justify your ability to account for other opinions and to work in a team. Therefore, grab that opportunity and show how you can go with new information.
- Go from complexity or idea. Sometimes, when you have no idea how to approach a problem, try to think from the complexity. For example, you proposed O($n^2$) solution, and then you were told to optimize it. Can you do O($n\log n$)? Then maybe there should be sorting in your algorithm. Another example. If you feel that you have to find min or max, you might need heaps.
- Explain your solution and complexity before writing any code. Once you came up with the solution, do not code it immediately. Once again discuss it with the interviewer and mention time and space complexity. Think of some unused info, issues, and bottlenecks. And if your interviewer is satisfied, you can start writing.
- Naming matters. If you do not have much industry experience, you might name variables randomly. And this is not okay in the interview. Google the variable naming conventions for your programming language and make your variables meaningful.
- Break up your code. Do not write your solution in a single function. Instead, try to break it up into as many functions as possible so that each function has a single task and a single for-loop if any. In this case, you make your code reader-friendly and it would be easier for you to find a possible bug.
- Test and go through your solution. Once you have written everything, do not say that you are done. Instead, think of some simple test to go through your code once again. It is very difficult to write a solution without any bugs straight away. But if you find it by yourself using your test case, it would be a point for you. For convenience and to avoid any confusion, write down each intermediate result.
In my opinion, these tips helped me enormously given my little experience. They are easy to use in real life but they work and each of them will give you points.
In conclusion, I would like to mention one of the most important things about interviews - don’t be nervous and try to relax. I understand how stressful it can be, but once your interview has started there is not much you can do about it except relax and be confident. Be nice and respectful, smile, even if you fail this particular interview, try to enjoy it, and gain as much information about the company as possible to succeed in other interviews. Good luck!