Hi all. And this is my story about how I got an internship at Yandex Cloud as a Backend developer on Go.
I must say right away that I did not get an internship the first time.
A little about myself: at the beginning of the story, I was a 4th year student, I wrote scientific articles on neural networks, in my free time I wrote pet projects to touch some technologies, frameworks, technologies, and so on. I have never been fond of algorithms, because of which there will be problems, which I will discuss below. The portfolio had a couple of commits in Twitch API client libraryAPI with data parser from HLTV.
It was February 2022, at that time I was already working as a C++ developer, but I always wanted to work in something bigger than some factory or a small city IT company. I applied for an internship. I think that all readers already know the further process: a test contest, an algorithmic interview, meetings with teams, an internship. And so my path began with a contest, a link to which was sent to me by mail, it had to be completed within a week. In the contest itself, I did not solve all the problems, but only 2-3. But after the weekend, a recruiter wrote to me in telegram with an offer to pass an algorithmic interview. We agreed on a date and time, and I began to wait. It’s time for an interview, we phoned the interviewer, he immediately gave me a task and we began to solve.
Friday the 13th
The first task is usually simple and takes a little time. Something like “You are given the day of the week on January 1st, count the number of Fridays the 13th in the year.” This problem can be solved in several ways, with different complexity of the algorithms, so you should offer as many as possible and do not forget to indicate the complexity of the proposed algorithm. I proposed to designate the days of the week as numbers (such as enum), take the 13th of January and add the remainder of the division by 7 of the number of days in the month. If it turned out that the day of the week was Friday, then the counter was added. The complexity of the algorithm turns out to be O (1), because there are always 12 iterations of the loop, because 12 months in a year. We quickly wrote the code, the interviewer talked about a cheating solution to the problem: there are 7 possible input data, so for each input argument, you can pre-calculate the number of Fridays the 13th in a year and write a switch-case function and return the already calculated values.
The second task was the following: “Given an array of positive and negative numbers, you need to return an array of squares of these numbers, sorted in ascending order.” Here I suggested having 2 slices with squares of positive and negative numbers, and then sorting when creating the output slice, everything is simple. We solved the problem and we had 10-15 minutes left, so we didn’t have time to complete task 3, and the interviewer decided to ask me questions about Golang knowledge: about slices, about maps, about goroutines.
The interview ended and I again began to wait for a response from the recruiter. A few hours later I received a message with the successful completion of the interview and I was offered to continue communication … again algorithms. Picked the time, I’m waiting. This interview also had 2 tasks.
The first one was something along the lines of “You’re at the cinema, you can choose any seat in the row, but you don’t like to sit next to other people, you need to find a seat as far away from people as possible.” I don’t remember exactly what I suggested then, but most likely it’s worth first suggesting the most primitive way, this is for each place to calculate the distance to the next person on each side and take the minimum value, then the complexity of the algorithm is O (n ^ 2). A more optimal solution is to find the distance to the nearest neighbor as you go through the array (if the previous place is occupied, then the distance is 1, otherwise x[i-1]+1). So we find the distance to the neighbor on the left and right in 2 passes through the array, and on the 3rd pass we find a place where we sit down, the complexity of the algorithm is O (n).
The second task: “Given a line with letters indicating the direction of movement by one cell: W – up, S – down, A – left, D – right. Return the line of movement by removing loops from it.” This task seemed more difficult to me, I don’t remember how I solved it then, but there was a very tricky and incomprehensible solution, so I spent a lot of time on it and didn’t have time to deal with the indexes (there was some kind of jamb). In my defense, I will say that at that time I almost never dealt with algorithms, but only wrote my projects.
After this interview, I received an email saying that now they are not ready to take me and advised sites with puzzles where I can practice.
After this letter, I decided to take the algorithms seriously and solved 3-4 problems every day for 2 months.
The next call was in August, because. 6 months should elapse between attempts.
All over again: I sent an application, passed the contest, where I did not solve 1 problem, because I simply did not know about k-dimensional trees. Then the recruiter wrote to me again and offered an interview, we agreed on a time and I began to wait. We phoned, there were again 2 tasks that I don’t remember at all, but they were simple for me, we had 10 minutes left, the interviewer had no more tasks and we parted ways.
After that, I was offered to continue communication, but with the teams. We phoned the recruiter, they clarified my preferences for teams, what I would like to work with, whether I was ready to move.
I was offered 3 teams, I decided that I needed to talk to everyone, even if, according to the description, I don’t really like them, maybe I don’t understand something. But usually you are thrown a description of the teams, which briefly states what they do and you decide whether this team is interesting to you or not.
In this interview, you talk about each other. I’m talking about myself, development experience, what I’m interested in, the interlocutor about my team, their tasks and role in Yandex. It usually took about 20 minutes, then you can ask some clarifying questions about the team. Interviews usually ended in 30 minutes. The first 3 teams did not take me, then I decided to check with the recruiter why they refused me in order to fix this matter. They thought I wasn’t interested enough in the teams. Yes, I have such a problem that I am not very emotional in conversations and just listen, answer questions and ask them.
They found 2 more teams for me, which I assumed would be the last if they did not take me. This time the interviews were a little different, on one they asked me about REST and gRPC, whether I worked with Linux and about interfaces in Golang, on the other we solved one simple problem on algorithms. Everything else was pretty much the same. After that, I again began to wait for an answer, which came quite quickly, a couple of hours after the interview, which one of the teams really liked me. They sent me an offer for an internship, I filled out a questionnaire, and a few days later they sent me a gift – a working laptop, an Alice Light station, a branded shopper, a sketchbook, a pen and a book about Yandex, which I immediately read.
I did an internship remotely from my city and home. In general, for internships you are the same employee as juniors, middles and seniors. You fix bugs, add new functionality, close tickets, go to stand-ups, planning and stuff like that, you can even go on business trips to your colleagues in other cities.
Throughout your internship, you have your own mentor. For me, it was the person who conducted the interview. I wrote all my questions to him, he gave me tasks. Often we called up just to talk about how things are going for me, and, in general, about Yandex. In general, there are no stupid questions, you can and should ask everything that interests you, they will always help you here and tell you where and what to look for.
During my work I:
communicated with other developers
offered his ideas, which were sometimes accepted
wrote code in Python, Java, but mostly in Go
read and worked with Terraform, gRPC, various databases
learned the entire life cycle of tasks, from creating a ticket to deploying to production
After 4 months of work (the first 2 months I worked for 0.5 pay) my internship ended, I wrote to my supervisor that I really like them and I would like to stay if there is such an opportunity. They left me and to this day I work in this company and in the same team, but already as a junior.
Unfortunately, I can’t tell you fascinating stories from the office, IT dorms that Yandex now has, and stuff like that, because I simply didn’t have such experience.
As a tip, I can say that you need to be confident in algorithms and data structures, this is the most basic thing that is asked in all interviews and which shows your problem solving skills. I think that it is still worth writing some of your own projects and stuffing a portfolio, this can play a role in interviews with teams.
Don’t give up, and if you don’t succeed right away, you may succeed later.