Learning to (not) pass finals for an internship at Yandex
Lyrical digression
I am 32 years old, of which I have been actively studying Python for about three years. I am that “IT guy” who decided that he had enough strength to compete with students for an internship at Yandex. Preparation for Yandex took more than half a year. By that time, I had completed an internship at a startup, a couple of custom projects, several books read, and several study projects.
Having received feedback about the successful completion of the second algorithmic section, I definitely did not expect that there were 8 months of refusals ahead and virtually no interest in me among the teams.
Disclaimer: All information is my personal opinion, please treat it as such.
General information about the finals
Interviews with teams take place according to the following scheme:
You talk about yourself, your experience
The interviewer asks you questions that interest him: based on your experience, technical knowledge, they may give you tasks to think about or code, your readiness to work, motivation, etc.
A team representative talks about his project and sometimes the conditions for doing an internship with them
You ask the interviewer questions that interest you.
The more rejections you have and the worse the reviews at the beginning, the less teams want to invite you for an interview, even if your feedback ends up being good. After receiving the first five refusals, I learned that it was possible to refuse interviews with teams that were not interesting to me. To summarize: the team is not interesting – we refuse to interview them. We save our time, the time of our teams, do not collect unnecessary refusals and do better preparing for interviews
Interviews
All new arrivals are usually offered three teams at once. I didn’t yet know that you could refuse interviews, so I agreed to everything. Here I made a mistake – I set up three interviews one after another, and when I received three feedbacks at once, I was unpleasantly surprised by the results. To summarize: Schedule interviews at least 2 days apart, so that you can receive feedback and work out mistakes from it before the next interview.
First team
I begin the story full of confidence”about myself“, but it turned out that there was not enough information – I did not remember the nuances of the internship project. This resulted in them starting to ask questions about the project about which I remembered little, and some of the nuances of the internship were completely embarrassing to voice. In the end, I tried to get out giving vague answers, and my potential mentor tried to find out what really happened. It turned out to be a kind of interrogation in which I clearly infuriated the interviewer. Then they asked about the hierarchy of exceptions, but since I didn’t remember it exactly, I told it in general terms. They were interested in how I see my development, to which I replied: “I'm interested in the path towards architecture rather than people management“. I added on my own that I would not like to work with “higher mathematics” (meant ML, DS and the like) because I don't have “deep mathematical base“I don't mind messing around with algorithms, but if I have to do half the work (or all) like ML, nothing good will come of it.
Feedback
“The candidate is quite controversial. On the one hand, he is very confident in himself and knows what he wants to achieve. On the other hand, with his little experience, self-confidence shoots him in the foot. Soft: there were some strange answers to questions that went completely to the side. I listened a story about tasks for interns, he asked correct questions about them, but there was no feeling of understanding achieved – the candidate simply decided to give up, it seems. Technique: we didn’t have time to chat for long, but he talked about something about a previous internship (django and fastAPI) and a telegram bot, and answered the questions along the way tolerably. At the same time, I would advise the next interviewer to go deeper here – there is a suspicion that I just didn’t dig deep. Motivation: he wants to “architect”, but clearly does not mean what I mean in this concept. then he is very wary of tasks where you need to rack your brain a little (algorithms, mathematics) – he immediately goes into defense, “I’m not a specialist, I can’t.” He wants to get into a big company in Russia, because in Belarus, judging by the story. , it’s difficult to find an IT job and “there are only Javaists around, and I’m a Pythonist,” but abroad you need to know the language.”
Conclusions
Be simpler
Better prepare a story”about myself“and willingness to answer all questions about past experience
Don’t say anything that isn’t asked of you, including what you don’t like/wouldn’t want to work with
Repeat exception hierarchy
Second team
The beginning is standard – presentation “about myself“. After that I said that I was not interested in the direction of the teams (I didn’t know yet that you can refuse before the interview), while I had no idea what the team was doing even from the description. Next is a kind of quick survey on multithreading / multiprocessing, how it works; what is the difference between asyncio and deep multithreading; how GIL works/structures in python and what it is needed for. They asked graph theory, where it is used – I answered something about social networks and some examples from what I could remember, but they wanted to hear what is used in importing modules, etc.
Feedback
“There were no problems in communication, the candidate talked about his experience (wrote a tg bot (FastAPI) and a backend on Django), asked about some of the subtleties of Python (here, in general, ok), parallel and asynchronous programming, databases, the theoretical basis was in the answers there is not enough here, there is practice, but the candidate doesn’t know why he works this way. A year ago he tried to read books, but he realized that without practice there was little use, so he went into practice, and gave up reading books. From our teams, there was no preference at all at first. He said that he is not interested in infrastructure and wants to do product development, write code, but he is not interested in deployment/alerts/networks. He expects from the internship that he will get hired and is ready to fully invest in it.”
Conclusions
Better learn asynchrony and parallelism”under the hood“
If you don't ask about something, you shouldn't say it.
Third team
As usual, I start with a story”about myself“After that, they gave me the task of implementing the transfer of a large amount of data from one database to another. I told you that you can use generators (came to mind because it saves memory), I tried to remember about OFFSET in SQL, but I forgot the name of the function and explained it in my own words. This option did not particularly suit the interviewer and he asked a clarifying question – “how will I fetch data from the database for the previous task“. Here I will invite you to think about how you will be ready to read the answer.
Answer
It is impossible to sort by UUID, so you need to sort the data by creation time and take them from the resulting result in batches using LIMIT and OFFSET.
As I realized later, I needed to know that primary keys are stored in the form of UUID, but I proposed a solution in the form of numerical primary keys. I also should have known that the data in the database was being overwritten.
There were no questions about pure SQL and whether I worked with it.
Feedback
“Controversial candidate. Self-taught. In the past, the experience was in the form of telegram bots and an internship at a startup. I worked with databases only through orm. It feels like I have knowledge of the language and algorithms, the rest looks superficial. From the internship, he expects that he will get hired. Moscow”
Conclusions
Having received three feedbacks at once, I worked on the errors in the story”about myself“, and also tightened up the rest of the theory.
They were looking for a fourth team for about two weeks after receiving feedback.
Fourth team
After briefly talking about my experience, I asked – “Tell me what I did on the internship project in more detail?”to which they answered me – “No need”. Next was the question “What was the most difficult part of the internship?”to which he replied – “at the beginning of the internship I had to change the structure of the project, while understanding it”. There were questions about SQL, or rather, they asked me to write a couple of queries in the online editor to create, join, and select tables. Here I chose the wrong column for calculation and confused the names of JOINs. The interviewer asked about remote work, since they have this option, but I said that I was only considering the office. At the end, I asked questions about duties in this team and how the backend interacts with the frontend in the project.
Feedback
“From the interesting:
in a chat on fastapi I wanted to refactor the code. disadvantages: sql queries directly in pens
there were 2 turnips with chat and calendar A simple questionnaire on SQL inner join calls cross join In general, the norms, does not know some constructions like FILTER in COUNT We talked about the project. K asked questions about remote work and duty. It seems that K was trying to cut corners (for example, he asked that the backend only provides an API, or maybe it also generates html pages) I’m not ready to take it over. I couldn't get anything interesting out of K. On current projects I often worked on incomprehensible refactorings. There is no understanding of how to work in a team and how to communicate with customers”
Conclusions
Look at the FILTER constructs in COUNT and stop confusing the names of JOINs
Finalize the story”about myself“so that a brief summary can convey the maximum necessary information
Do not ask questions about working conditions in a team
They were looking for the fifth team for me a week after receiving feedback from the fourth team.
Fifth team
“About me“followed by a transition to questions about what a hashset is, how it works/is designed, whether I wrote tests and whether I worked with asyncio. Next, the question is about what I want from an internship, to which I answered – I just want to work (was affected by the state of fatigue from constant refusals). He answered clarifying questions on this topic in the same style. There were no questions about the database or SQL.
Feedback
“I developed a custom bot in python-telegram-bot for publishing messages in channels, after an internship at a startup, a project – freelance exchange, I was working on finalizing the rest of the monolith and chat handles in a team of 3 people, synchronous chat api – fast api, monolith django-rest , messages – via web sockets – did not change. I have basic knowledge of python, asynchronous programming in python – only the theory has not encountered automatic tests of the database – knows select/join/group by, but is not sure of the answers, wants to do an internship full-time, with relocation. in Moscow on an internship – work, under the supervision of a mentor, with feedback for quick learning – for me – a borderline candidate, hard for an intern, ok, in general there are no special problems in communication, but the communication style is vague and brief answers to questions. previous projects, interests, skills, it is necessary to constantly conduct and pull out information with questions; I’m not ready to take it to myself yet.”
Conclusions
Learn asyncio and pytest at least at a basic level
Give detailed answers to questions
Answer prepared answers to questions”what do you want from the internship, why us, etc.“
Academic leave
After receiving the fifth refusal, I was told that there were no willing teams for me now and I should prepare better by submitting a year-long independent “advanced training“. I once again looked through all the problems from past interviews, worked on the mistakes and finalized the story.”about myself“. I also studied and worked with asyncio and pytest at a basic level.
After 2.5 months, the recruiter comes back to me and offers to continue searching for teams, to which I agree.
Over the next two months, I am offered four teams, one of which I agree to interview with.
A little about refusals to teams. I'm not looking for the perfect team, but if I don't have enough weeks of preparation to meet the basic requirements of the team, I refuse. For example, it’s difficult for me to learn C++ and ML from scratch at a basic level in a week.
Sixth team
At the beginning of the interview, the interviewer says, “this will be an easy interview for me“The following is a well-honed story.”about myself“. They asked about asyncio: how it works, why it is needed; when to use asyncio and when to use multithreading; about message brokers; types of databases and where to use them; about sharding and replication (everything got mixed up in my head and at times I confused the terms). They asked about multiprocessing – “how to work with CPU tasks“, to which he replied – “can be parallelized across processes, use technologies like map reduce and message brokers“Perhaps I didn’t understand the question correctly. One of the nuances I wanted to note is that I said more than once that at the last internship there was a difficult task where I had to figure it out myself and no one could help me with it (I might need some help). Also, after I answered that I didn’t work with brokers, the interviewer said – “developers usually study related technologies” and continued his story, but I didn’t have time to work “objection“. At the end I asked what code was preferable in the command,”clean“, or “fast“.
Feedback did not come in the first two days, so I realized that the situation was non-standard. I asked the recruiter to pause the search for teams until there was a response from this team. After 9 days I received feedback and a refusal.
Feedback
General: • have experience in commercial development (5 months, mainly fastpai and django) • wrote a telegram bot on one of the projects (admin bot for publishing posts in channels) • understand how asyncio works and have experience about multithreading and GIL in Python also understands, but there’s something not very good about multiprocessing • I’ve heard about message brokers, but without experience (and I’ve only just heard about it) • I have a good idea of what kind of databases there are and in what tasks they can be useful (kv/document oriented /graph/columnar) • talked a little abstractly about sharding and replication, of course not very deep knowledge in all this, but I heard something somewhere and have a general idea in some places
Impression: The candidate is quite good, has experience in backing. But I got the impression that he spends too much time on the “beauty of the code” (I would be happy with such a Candidate, but it will be difficult for us with such an approach). We didn’t agree on the software; there was a feeling that it was hard to dive into new areas. I’m not ready to take it for myself, but I advise other teams to take a look
Conclusions
Read about sharding and replication
Explore message brokers
Do not ask questions that relate to working conditions in a team (in this case about the purity of the code)
Don't put pressure on the complainer, repeating what you want “I'm tired of hopelessly carrying everything on myself without any help.”. It’s enough to ask who will be your mentor and how often you will call him
Even if you got into “shortlist“teams, you shouldn’t stop searching/interviewing with other teams. You should make a decision when you have an actual offer from the team(s)
Two weeks later they find me another team, which I refuse. Soon it will be a month since I am looking for another team
Bottom line
I'm not going to give up yet, although my strength is not what it was at the beginning.
General conclusions
Only agree to an interview with the team you are interested in. Before giving your answer, search the Internet for information about it, if necessary. There are doubts – you can agree to such a team once for the sake of experience, but I don’t recommend it anymore. Don’t waste yours and your team’s time, and don’t forget about refusals
Place interviewsCommunication with teams with an interval of at least two daysso that you can get feedback from the previous team and work out mistakes before the next interview
Don't stop searching for other teams if you are shortlisted for any team (no feedback within 3 days after the interview). Make a decision only after receiving an offer from the team(s)
During the interview, be “simpler”, communicate in a friendly manner on a first-name basis (usually interviewers do this first at the beginning of the interview)
Don't joke during an interview – everyone has a different sense of humor
Prepare a short story about yourself, which will contain as much information about you and your projects as may be of interest to the interviewer. Be prepared to answer all questions about your projects as if you were technical documentation
You need to know at a good level everything that is in the road map of your specialty up to the middle+ level, and everything higher – in one article. You never know what they might ask (I wish it was just a joke)
Never don't say you don't know something. We answer this in detail according to the scheme: where and to what extent did I encounter this topic, why can’t I answer this question now?. Example: “I once read about this on the fence, but I didn’t know that it could be useful to me”
We answer questions in detail
We don't say what isn't asked – this could potentially discredit you. Examples: “I love coffee” – “he will drink coffee all day and do nothing”; “I am sociable and sociable” – “not only will I drink coffee for days and do nothing, but I will also constantly distract others with my conversations”
We are interested in the project in general terms (we only agree to teams that are interesting to us). You can search for information about this project (or similar ones) on the Internet and ask questions about the technical requirements. Examples: what load can it withstand, what uptime, what speed, etc.
Don't ask questions about working conditions in a team during an interview.. Standard internship conditions – full-time office with tasks during which you lose track of time and regular duty. If you have specific requirements, we ask the recruiter to contact the team and find out the answer to these questions from the team. The team can provide such conditions – we agree to an interview. We don’t waste our time and the team’s time in vain.
We prepare answers to questions in advance: why this team, what do you want from the internship, what do you want to achieve, what were the difficulties/failures in past projects, etc. We answer about difficulties and problems in the spirit of “it was difficult, but I figured it out, made such and such conclusions and it became easier / I don’t make such mistakes anymore”
Tell us about it What are you studying or have you studied recently?. If it is “in tune” with the requirements of the team, great. If you're not learning anything, it's time to start