Software Engineer Handbook

Original source in Azerbaijani: link Translator: Heller Vargas

Abstract

Anyone who wishes can expand or improve this article by writing a topic mentioned here or forgotten.

Many computer engineering students or programmers dream of working for large technology companies. A special FAANG+ abbreviation has been created to classify this type of company. In foreign languages, especially in English, these companies are offered employment, interview process, compensation, etc. There are considerable online sources, different resources about. There are even paid training platforms around them. For example, the Clément Mihailescu, Joma Tech and TechLead youtube channels garner millions of views from conversations surrounding the topic.

The main purpose of this article is to answer questions on these topics in Azerbaijani, by Azerbaijani specialists working or have worked in these companies, to create a common source. The goal is to keep the writing stable, to expand and improve it in the future as Azerbaijani experts share their experiences. It is with great pleasure that we would like to share your experience and knowledge that you want to share in this article.

It should be noted in advance that the authors are not experts in the field of technical vocabulary in the Azerbaijani language, so there may be some errors and unwanted errors. At the same time, we refrain from presenting the article as absolute truth, as there may be contextual errors or outdated information. If you encounter these situations, you can also participate in the improvement of the article by applying.

The way to the interview

Roles of programmer-engineer

Most programmer-engineering roles in the United States, Canada, and Europe fall into the following groups. Before applying for a job, you need to determine which group you are applying to.

General Software Engineer

The majority of open vacancies and job opportunities in large technology companies belong to this group. At the same time, most of the engineers working in these companies belong to this group.

One of the main expectations of general programmer-engineers is a high ability to learn new technologies and programming languages. Engineers in this group are sometimes involved in several active projects using different programming languages ​​and technologies at the same time. In order to work effectively in this form, engineers are also given up to 3-6 months to learn the technologies they did not know and needed after joining the company. Employers pay more attention to the flexibility of new problems and the ability to solve problems optimally than to being an expert in any field, rather than being an expert in any field. During the interview, applicants are asked questions and questions on general topics such as algorithms, distributed computing (red), internet protocols, etc. to test their general knowledge. When solving problems, applicants are given the opportunity to choose the programming language they want.

Qualified programmer-engineer

In addition to the general role of programmer-engineer, technology companies also place job vacancies for qualified programmer-engineer roles in different areas. This role group includes programmers-engineers specializing in front-end, mobile (Android or iOS), Machine learning (red), DevOps and SRE (Site Relability Engineer - red) and other similar fields.

The interview process for job applications for the roles of qualified programmer-engineer is somewhat different from that described in this article. Engineers applying for these roles are expected to be experts in their field. For example, in interviews for iOS mobile programmer-engineer ads, 1 or 2 parts of the interview may focus on the iOS operating system, Objective C, or Swift programming languages. Similarly, engineers applying for the role of frontend programming engineer may be required to develop any user interface using JavaScript, TypeScript and other frontend technologies during the interview. Algorithm and system design sections may also be omitted from these interviews.

Different ways to get into job interviews

Due to the large number of applicants, it is not easy to be interviewed by large technology companies and attract the attention of employers. There are different ways to get an interview. The ways we list below are based on the authors' personal experiences, and there are definitely stories that the authors are unaware of. There will be additions to this list as you get acquainted with new experiences. You can browse the Blind website to learn about different interview stories.

Internal referral (Reference - red)

In most technology companies, employees can refer or recommend candidates they know through the internal portal and whom they know to meet the requirements of the job posting to the recruitment department or managers. Internal referrals are also important in companies, and in most cases, direct contact is made with the recommended candidate.

If you do not have a friend or other acquaintance in the company you want to apply to, you can contact the Azerbaijani engineers working in that company, introduce yourself to them and, if deemed appropriate, recommend you to the job advertisement on the internal portal. When communicating with engineers in this form, use professional channels (eg Email, Linkedin, etc.) and behave professionally. Provide detailed information about yourself, including your work experience, education, knowledge and skills. Also emphasize why you want to be recommended.

In general, our compatriots working in foreign companies want to help other Azerbaijanis who apply. However, sometimes you may not receive a reply to your e-mail or receive a late reply due to employment or low use of social networks.

University or academic way

Graduates and students of high-ranking technical universities are always in the spotlight of large companies. In addition to holding regular career fairs at these universities, technology companies also prefer these universities in their automated CV selection systems. After brief discussions with students and alumni at career fairs, students and alumni are often invited for on-site interviews. In addition to high-ranking universities, technology companies also hold career days and active interviews at local universities close to their offices in different cities (eg, Dublin, Zurich, London, etc.).

In addition to looking for graduates and students from top technology universities, large technology companies also participate in many scientific research conferences as sponsors and research centers (for example, VLDB, USENIX, etc.). Companies pay attention to the authors of articles participating in these conferences, and take control of the specialists they see as potential teammates. This form of recruitment is mainly available to professionals in specific fields, such as programming languages, data management systems, machine learning, and so on.

Programming competitions or Olympiads The emphasis of technology companies on algorithmic knowledge and problem-solving skills is beneficial to students and graduates participating in programming competitions and computer science Olympiads, both in the interview and in the technical phase of the interview. Topcoder and Codeforces are the most popular of these competitions, and ACM ICPC is one of the most popular competitions for students.

In addition to the competitions and Olympics mentioned above, some technology companies also hold their own competitions to discover brilliant engineers. The most popular of these competitions are the Facebook Hacker Cup and the Google Code Jam. Many technology companies also organize similar contests through the HackerRank website. In addition, there is the Google Hash Code competition, organized by Google as a team and based on more realistic engineering problems.

Details of this type of competition, the preparation process and other information are shared by high-ranking participants on the Youtube platform. For example, you can watch the YouTube channels of Errichto, Petr Mitrichev, Gennady Korotkevich and William Lin.

The experience gained in these competitions is useful for interviews. However, you should note that participation in these competitions is not always directly proportional to being a good engineer. Peter Norvig, head of Google’s research department, responded in a speech.

Contributions to Open Sources (Open Source contributions - red)

One of the most important sources of recruitment for employers is open source projects. Technology companies are focusing on projects shared by companies such as Facebook and Google on Github, as well as The Apache Software Foundation’s projects, and projects that are openly shared by universities and individual engineers.

Large technology companies also support important open source projects. For example, Google will involve more than 1,000 students enrolled in the 2020 summer internship in various open source projects.

By participating in open source projects, you can gain important experience and acquaintances, as well as increase your chances of being invited for interviews in technology companies.

Linkedin Profile, Cover letter and Resume (CV)

Regardless of how you apply for a job application, having an eye-catching, comprehensive and neat CV is one of the things you need to pay attention to in the job search process. Having the information in your CV on your LinkedIn profile can also increase your chances of finding a job.

When preparing a CV, you need to write your education and work history in a conspicuous form. If you are a recent graduate of a university and do not have enough work experience, list the university projects you worked on while you were studying, your startup initiatives, your personal projects, and the open source programs you support, if any. In addition to brief information about these projects, give brief information about what problems the projects solve, the impact of your work on the success of the project, the technologies you use, programming languages, libraries, frameworks.

If you have several years of work experience or internship in technology companies (internship - red), please tell us more about these projects in your CV in university projects. Candidates with work experience can get a more noticeable CV if they provide information about the projects they work on in their internships and the total value they contribute to the project.

In addition, both experienced and inexperienced candidates should write a short 3-5 sentence description of themselves at the top of their CVs.

An explanatory letter or cover letter is a short letter in which the interviewer gives brief information about himself and justifies his application. Recently, large companies do not require an explanatory letter in the recruitment process. Instead, a telephone interview is conducted with the interviewer. Some small and medium-sized technology companies may require a letter of explanation from the applicant. When writing an explanatory letter, try to keep the letter short (for example, up to half an A4 sheet). In one part of the letter, highlight your personal qualities, in the other part, a summary of your work experience, why you are suitable for the company and the role you are applying for.

Interview Process

Technology companies based in the United States and Europe, as well as well-known companies such as Google, Microsoft, Facebook and Amazon, conduct the recruitment process in a standardized interview format. The interview is conducted in several stages, depending on the company you choose to apply for. Although the content and format of interviews in companies are different, in general, the interview process is similar. The differences are based on the general corporate and engineering culture of the partners. For example, in the hiring process on Amazon, the interviewer’s suitability and behavior may come to the fore more than other companies. There may also be some differences in the approach to the interview process between different teams in the same company.

Following the article, we share with you the experiences of engineers who have had successful intership and job interviews at the above-mentioned technology companies, as well as those who have participated in accounting processes at those companies at different times.

STEP 1 - Telephone interview with an employee of the Human Resources Department

The first stage of the interview process begins with a telephone interview organized by an employee of the Human Resources Department of the company you are applying to. Telephone interviews usually take 15-30 minutes and are the first stage of an interview in almost all major technology companies. The main purpose of this stage is to get acquainted with you and get information about your career goals. In a telephone interview, you are asked why you chose the company, what you know about the company or the team you are applying to, and what they do. During the telephone interview phase, the interviewer is rarely asked technical questions.

To successfully complete a phone interview and create a positive impression of yourself during the interview, pre-interview general information about the company, as well as the company’s product portfolio, the most popular products on the market, new products, job-specific information and requirements for the job and team it is important that you do research.

In addition to the above topics, you may be asked about your current visa status, whether you are in the process of interviewing other companies in parallel, when you can start if you are hired, and other such questions.

Interviewees who successfully complete the telephone interview are invited to the Technical Stage, which consists of several parts.

STAGE 2.1 - Technical stage (Homework)

Homework is the first part of the Technical Interview phase of some technology companies. There are two main types of homework companies in the interview process:

Online Coding Assignment - A link to your homework is sent via email to one of the online coding sites. The interviewer should start the assignment within the specified period (usually 2-3 days) and finish it within the time allotted for the assignment (usually 1-2 hours). The two things you need to pay attention to when working on tasks are the optimal performance of the code you write in terms of time and memory.

Project format assignment - Homework in this format is sent as a repository in a PDF file or on GitHub via interview email. The interviewer must complete and submit the project within the specified period (usually 2-3). As part of the assignment, the interviewer should send back to the interviewer a code that solves the problem, tests, as well as a file describing the steps required to run the solution and tests.

Homework is checked by the company’s engineers. Interviewers who successfully pass this stage are invited to the main part of the Technical Interview.

STAGE 2.2 - Technical stage (Online)

This part of the technical phase is held online at a pre-agreed time. The interview is conducted by the company’s engineers or the engineers of the team you are specifically referring to. Before beginning the technical part of the interview, the accountant introduces himself and informs the candidate about his role in the company. He then asks the candidate to briefly tell him about his past and what he has done. Then the interview continues in the following 2 parts:

Coding - The interviewer presents the problems of the algorithm prepared in advance to the candidate. This stage of the interview lasts 45-60 minutes. The candidate must solve the given problems in the optimal way using the algorithm and coding knowledge and skills in the given time. A platform such as hackerrank.com is used when writing code, and the candidate is given the opportunity to use any programming language when writing code. Davranış müsahibəsi (Behavioural interview) - Müsahibənin bu hissəsi əsasən namizədin müxtəlif iş vəziyyətlərində (məsələn, konflikt zamanı, komanda ilə iş zamanı, və s.) necə davranacağını öyrənmək üçün təşkil olunur. Davranış müsahibəsi əsasən 30-40 dəqiqə davam edir. Bəzi şirkətlərdə davranış müsahibəsi online mərhələdə deyil, namizədlə üzbəüz müsahibədə edir. At the end of this stage, the interviewer asks the candidate if he or she has any questions. As a rule, the candidate is expected to ask at least 1-2 questions. These questions can be about the company, the specific team the candidate is applying to, how the standard workday works, the difficult or interesting aspects of the job, the future strategy of the team or company, the development strategy of specific products, and so on. When asking these questions, keep in mind that the accountant may not be from the team you are applying to and may not answer specific questions for some teams.

STAGE 2.3 - Technical stage (Onsite)

Candidates who successfully pass the online part of the technical stage are invited for a face-to-face technical interview at the company’s office abroad. The on-site interview consists of the following 3 parts and all parts are completed within 1 day.

Coding - The interviewer presents the problems of the algorithm prepared in advance to the candidate. This stage of the interview lasts 45-60 minutes. The candidate must solve the given problems in the optimal way using the algorithm and coding knowledge and skills in the given time. Office visits usually include 2-5 coding interviews. The number of coding interviews varies depending on the company and your work experience. At this stage of the interview, the candidate’s ability to write legible, optimal and well-tested code is tested. At this stage, some companies allow candidates to write code on a computer. However, in many companies, candidates usually write the code on a white board. Sample coding questions can be found on Leetcode, InterviewBit, and other sites. The interviewer does not provide the candidate with detailed questions and requirements during the interview. The purpose of this is to collect the requirements of the candidates, to better understand the problem, to test their analysis and communication skills. Successful candidates should ask questions at this stage to better understand the interview requirements and assumptions before beginning to address the problem. To successfully pass the coding section of the onsite interview, you need to pay attention to the following: Think of the interview as a business problem, not a test

The problem is not clear in advance and you are expected to ask questions

It is more important to write a working code in the given time interval (30-40 minutes) than the most perfect solution

See the interviewing engineer as your teammate and share your analysis clearly with him

System Design - At this stage of the interview, the candidate’s knowledge of system and software architecture is tested. The interview lasts 45-55 minutes, and the candidate is asked to design a simplified version of a well-known platform (eg, Instagram, Uber, Youtube, etc.) as soon as possible. System design interviews are usually conducted with candidates with at least 3 years of work experience. To prepare for system design interviews, you can first use the engineering blogs of Grokking and Palantir, as well as the engineering blogs of the companies you are applying to. More details about the system design are shared in the preparation section. In the coding section of the interview, your thinking process is as important as finding the right solution. Your interviewer appreciates your ability to think aloud, analyze the problem, ask questions to fully understand the requirements of the interview, and discuss the pros and cons of your solution aloud. Once you agree on a solution to the problem, start coding. After completing the coding, test the code with 1-2 sample tests. When writing tests, pay special attention to extraneous cases. After your solution tests are successful, ask the interviewer if he or she has any questions about your code and the tests you have prepared.

Behavioral interview - This part of the interview is mainly organized to learn how a candidate will behave in different work situations (for example, during a conflict, when working with a team, etc.). The behavioral interview lasts 30-40 minutes. In some companies, the behavioral interview is not an online interview, but a face-to-face interview with the candidate. During a behavioral interview, the interviewer also tries to find out how well you fit into the business culture and values ​​of the company you are applying to. If you are a recent graduate or still a student, you can talk about your university projects during this interview. As an example, you can read about Amazon’s principles and company values ​​in this link.

To be successful in an interview, be sure to tell your story during the interview. The interviewer asks the candidate specific questions to check if what he or she says is his or her opinion and values. If you are new in your career, you can talk about small projects or work outside of computer engineering, your life experience.

“Talk about a time when one of your ideas was not accepted by your teammates. What did you do?”, “You saw that your team could not deliver the project on the scheduled date. What did you do? ”,“ Talk about your most successful or most unsuccessful project ”and other such questions are among the most frequently asked questions in a behavioral interview. We will share a detailed article on behavioral interviews.

Specialty Interview Coding and system design interviews test general technical knowledge. These are usually asked of candidates applying for the role of General Software Engineer. Candidates applying for front-end, UI / UX, AI and other specialized roles may be asked other questions during the interview. We will share detailed information on these topics in future articles.

For more information on the interview and the recruitment process in general, you can refer to Hiring with Your Head, one of the main books that guide US companies in the recruitment process.

Preparation

Recruitment in technology companies requires interviewees to prepare in advance for different technologies, algorithms, data structure, system design, presentation and communication, behavioral interviews, and other topics. This section mainly describes the process of preparing for an interview for the role of general programmer-engineer. When applying for the role of a qualified programmer-engineer, you will need to prepare for other technical topics in addition to these. Determining your interview preparation plan in advance and paying attention to the preparation process is one of the important factors that determine whether you are successful or unsuccessful in the recruitment process.

English and fluent

Proper communication and fluency can sometimes be as important as technical knowledge during an interview. Many engineers are unaware of the importance of communication skills during an interview.

Communication skills and English language skills do not include the ability to compose complex sentences, pronounce words fluently, or vocabulary. The point you need to pay attention to is to convey the ideas, solutions and technical specifications of your solution to the other party, as well as to ask detailed questions to clearly understand the requirements of the issue.

It should be borne in mind that when you solve the given questions, in addition to the technical solution, the interviewer wants to know your thought process and takes the necessary notes about it. One of the issues that the interviewer pays attention to and appreciates is that you think aloud when solving problems, and that you voice the alternative solutions you think.

In addition, it is important to pay attention to the form of your sentences in technical considerations. For example, instead of general and vague sentences such as “the system started to work very well”, “made the system incredibly fast”, “the latency of the system was reduced by 3 times” and “complexity from O (n ^ 3) to O (n ^ 2) Use specific, statistical sentences such as “came down”. When discussing the results, the use of concrete figures and statistics in your speech will lead the interviewer to give a positive opinion about you. Deepening your language skills before starting interviews, bringing your knowledge of English to at least upper intermediate or B2 level, will allow you to express yourself fluently during the interview.

As learning or developing English is not the main focus of this article, we do not write about it and leave it to you to do the necessary research and preparation. In addition, we would like to note that high language skills and communication skills, along with the recruitment process, were one of the important factors that will affect the comfort of your future work life.

Choice of programming language

In most cases, it is up to the candidate to decide which programming language to use in the interview. The candidate can write his notes and code in any language. However, in some exceptional cases, the hiring manager may want to learn your experience in any programming language. For example, in infrastructure projects and performance-sensitive systems, knowledge of C ++ may be a prerequisite.

How well you know the programming language you will use in the interview can often give you extra points during the interview. By having an in-depth knowledge of the language you use and making effective use of the language’s internal libraries, you will be giving an important positive signal about your interview knowledge and skills. Even in the recruitment process of many companies, interviewers are required to evaluate and write a review of your programming language knowledge. When using complex language functions, you need to be careful about how the functions you use are written, as well as being able to explain the time and memory complexity of the function. For example, if you use “Substring” as part of a problem, you need to know what algorithm this function is written in, the complexity of time and memory, and if necessary, you can write from scratch.

Some experienced engineers do not pay attention to language during the interview. If you solve the problem correctly and optimally, these engineers accept the solution even in a pseudo-code. However, it is rare to come across engineers who think so during interviews. Conversely, in addition to the programming language you use, some engineers may find that the code you write is neat and readable.

Finally, no matter what programming language you use in interviews, a good knowledge of the language and general internal libraries will be useful to you both during the interview and in your future business life.

Algorithms and data structures

We would like to state in advance that the sources mentioned here are the sources used by the authors at different times. There are alternative resources and sources on the Internet and they can be used. Our main goal is not to complicate the life of the candidate preparing for the interview by mentioning most of the sources on the Internet, but to share the experience of professionals who have achieved real results and are closely acquainted with the interview process.

The first and most frequently cited source for deepening algorithm knowledge is the popular book Introduction to Algorithms (CLRS). This book is widely used in the courses of most universities for the introduction of algorithms and even for senior courses. The book itself covers a deeper and broader range of topics than the algorithmic knowledge that may be needed in interviews and also used in the real world of work. Because the book is theoretical in nature and covers a wide range of topics, it can be difficult for most students and professionals to read the book in its entirety. It is better to choose the topics that you need to focus on in preparation and study in parallel with the MIT Introduction to Algorithms course.

Another important book on algorithms and data structure, which should be used as a textbook in universities, is Algorithms, authored by Robert Sedgewick and others. You can read the book together with Algorithms, Part I and Algorithms, Part II classes of the same name, presented by Princeton University on the Coursera platform. This book is written in a more practical, concise and easy-to-understand language than CLRS. In addition, the book has a resource with source code in the Java programming language.

Another noteworthy book is “Elements of Programming Interviews in [Java, Python, C ++]”. Add Cracking the Coding Interview to the same list. The first 35 pages of the book detail the interview process and the different interview formats. Both books are based on more practical questions that may or may not be included in the interviews. Many of the experts we know have successfully conducted interviews using only these two books in preparation for interviews.

Those who do not like to learn from books and online classes can use blogs that explain algorithm and data structure topics in a more practical and detailed way. For example, you can learn a simple explanation of the topic of Binary Indexed Trees from this article published in Topcoder. If you also prefer to learn from blogs, you can use the following online resources:

geeksforgeeks.org codeforces.com www.topcoder.com github.com

Candidates who have successfully passed the technical interviews are advised to actively use several online resources after losing theoretical knowledge or in parallel. Online resources help to strengthen theoretical knowledge in a practical way.

The Leetcode platform has been at the forefront of many online resources in many discussions. Leetcode allows you to solve problems on various algorithm topics and check your answers online. In addition, you can find real technical questions asked during interviews at various companies in Leetcode. Discussion of questions, viewing sources written by other users, tutorials, online contests, and other useful features of Leetcode.

You can get acquainted with the process for free through the InterviewBit and Pramp platforms without entering a real interview. Here, registered professionals like you are interviewing each other. These interviews take place in the format we mentioned above.

Topics

The algorithm and data structure topics we write here do not cover all the topics in this area. Compiled in the form of a summary, the topics are based on frequently asked questions in the interviews and the authors' interview experience. The algorithms and data structures mentioned in the topics section are discussed only in terms of their appearance in the interview and the aspects that make them important in the context of the interview. The authors did not provide an in-depth explanation of the topics, as the fundamental working principles of the topics in question were not planned in the initial volume of this booklet. You can use the books, online lessons, and other online resources mentioned in the resource section of the booklet to gain a deeper knowledge of all the topics mentioned.

Memory and time complexity in algorithms (Algorithm complexity)

Different algorithms and data structures can be used to solve a given problem during an interview. The important points to consider are the time and memory requirements of the algorithm and data structure you choose. As a rule, execution algorithms and data structures that require less time and less memory should be preferred.

Analytical or theoretical comparisons are often made when comparing algorithms. Algorithm analysis is a complex field and requires in-depth mathematical knowledge. From a practical point of view, the method of asymptotic analysis (asymptotic analysis - ed) is used to compare algorithms in both interviews and real-life analytical assessment. The main purpose of this method was to express the complexity of mathematical functions depending on the input values, regardless of the specific computer or physical objects. 3 cases can be used to analyze the algorithm: Best case - red

Average case - red

Worst case (Worst case - red)

In technical interviews, algorithms and solutions are evaluated based on the worst complexity. In some cases, the assessment of the worst case may be pessimistic. For example, in some data structures, the worst case is rare, and in most cases it is limited to the middle or best case functions. In this case, it is important to use the method of amortized analysis (ed.) Or to record during the interview.

An important part of a technical interview is to be able to identify the memory and time complexity of the task and explain the interview accurately and clearly. In this regard, it is important to study and master the topic of algorithms and data structure. All other knowledge is based on the complexity of memory and time.

Elementary Data structures – red

A simple data structure is often used as a small block in a problem. You can use simple data structures from the standard library of the programming language of your choice to solve problems. Static and dynamically distributed arrays, linked lists, stacks, queues, sets, and hash tables are included in simple data structures. red) and other fundamental data structures.

Unless you are asked to write simple structures from scratch during an interview, there is no limit to your use of existing programming language libraries. Because your solution has a direct impact on memory and time complexity, it is important to know how they are applied in that language and what algorithms are used when using the simple data structures of a language’s standard library.

Advanced Data Structures - ed.

In addition to simple data structures, complex data structures need to be used to optimally address issues during the interview. When using simple data structures during an interview, it is sufficient to explain the methods and complexity of writing the interview structure. If you need to use complex structures, you can choose 2 different approaches:

The fundamental part of the matter is different, and you can say in an interview that it can take time to write it right now, let’s assume that our library is ready, the complexity will be the same, and it will be written roughly. The interview continues with the solution of the main problem, and in the end, if you have time, you come back and write the solution from scratch.

The fundamental part of the problem was to solve this data structure. In this case, it is necessary to write the code from scratch and explain its complexity.

In technical interviews, mainly ordered map (red), binary search tree (Binary Search Tree - red), binary indexed tree (Binary Indexed Tree - red), balanced tree (Balanced Trees - red), segmented tree (Segment Tree - red) ), ball (Heap - red), prefixed tree (Trie - red), non-intersecting sets (Union Find - red) and other complex data structures are used.

Knowing the details of the application of complex structures, the complexity of time and memory, will help you to be successful during the interview.

Sorting and search algorithms (Sort and Search - red)

In technical interviews, ranking and search algorithms are often an integral part of problem solving. For example, to solve a problem, you may need to sort the data structure first. The main factor to pay attention to in this case is to use the correct methods to perform sorting and search operations on complex objects in the programming language you use. Depending on the language you choose to solve the problem, you can use sorting and search operations such as Comperator, Iterator and other methods. These methods are available in most programming languages ​​as part of a standard language library.

The list of sorting algorithms is long. However, the Merge sort, Heap sort and Quicksort algorithms are the ones that are used in practice and are most often used in interviews. Before the technical interview, it is important that you learn more about these 3 ranking algorithms, as well as other simpler ranking algorithms. It is also important that you learn the details of the application and complexity of these algorithms.

A common feature of the above algorithms is that the amount of data during sorting can be stored in RAM. You can use the External Sorting algorithm when you need to sort a larger amount of data during a technical interview. In general, this algorithm is a slightly modified version of the merge sort algorithm.

The most important search algorithms you should learn in preparation for technical interviews are Linear Search and Interval Search. A linear search interval is simpler than a search and does not take much time to learn. Intermittent search is mainly performed on sorted data structures. The most commonly used version of intermediate search algorithms is Binary Searc - red. In general, more complex forms of interval search algorithms are not found in technical interviews.

String Algorithms (red)

Line algorithms are used in many of the issues used in technical interviews. String sort, Tries, Substring Search, Regular Expression / Automata, Data Compression and other line algorithms and methods are used to solve string problems.

During a technical interview, the size of the data given to you during the problem may be noted, and your knowledge of Compression algorithms may be tested. You may also be asked to write an autocomplete system during the interview to test your knowledge of string algorithms and your ability to apply Trie data structures.

Standard libraries are used during the substring search application. In addition to standard libraries, it is important to know the Rabin-Karp and Knuth-Morris-Pratt algorithms. The Rolling Hash method, especially the Rabin-Carp method, can be used in many different problems, so this algorithm needs special attention.

Graphs algorithms (Graphs - red)

During a technical interview, many problems can be solved with graph algorithms. During the interview, you may be asked to divide the dependent nodes of a given graph into independent components. In addition, you may be asked how to make the best use of resources in a batch processing system, which has dependencies and limitations between tasks. It is enough to use the classical Topological Sort algorithm to solve the first problem. In the solution of the latter you can use dynamic programming and Topological Sort algorithm.

Examples of algorithms that can be described as a de facto solution to graph problems are Minimum Spanning Trees, Single-Source Shortest Paths, All-Pairs Shortest Paths, and Maximum Flow algorithms.

Classical graph problems and their solutions can be found in traditional books. However, in preparation for a technical interview, it is important that you learn about the two fundamental methods, DFS and BFS, which are part of most graph algorithms. Knowing both methods is important to succeed in technical interviews, as they are an important part of not only graph problems but also other algorithm problems.

Advanced Algorithmic Design Techniques (red)

Greedy Algorithms and Dynamic Programming (ed.)

Traditionally, both greedy algorithms and dynamic programming issues have been widely used in technical interviews. As the solution has required more time and in-depth academic knowledge in recent years, complex dynamic programming issues have been removed from technical interviews and it is not advisable to ask them in interviews. However, the memoziation technique, which is used to solve dynamic programming problems, is widely used to solve various problems. Greedy algorithms are constantly being asked in technical interviews because they are more intuitive solutions.

In MIT Introduction to Algorithms, the topics of Dynamic Programming and Greedy Algorithms were discussed in depth. These resources are covered extensively in other resources mentioned in the resource section of the booklet. Once you’ve mastered the subject, you can gain experience by solving problems under the heading Dynamic Programming and Greedy in Leet code and issues on other Olympic sites.

Divide and Conquer – red

One of the fundamental topics you should learn when preparing for a technical interview is the “divide and rule” paradigm, a general model that can be used to design solutions to many different problems.

Once you have determined the solution to a given problem, you can use loop (recursion - red) or backtracking in the specific application of the method. It discusses in detail what type of problem the method can be used to solve.

When using this method in interviews, it is important to keep in mind that problems can be asked in a different context. It is the interviewer’s responsibility to find the most effective way to solve the problem in different contexts. If it is possible to solve the problem given during the interview with a simple loop, you should be able to explain why you solve it with a complex recursive function. During the interview, the interviewer may also ask you to optimize the recursive written function with the Memorization method or to use a variable that can manage all possible situations using Bit Manipulation.

In general, when preparing for an interview, you should be familiar not only with classical algorithms, but also with more complex, sometimes specific types of issues such as Two Pointers, Sliding Window, Reservoir Sampling, Suffix Array, Rolling Hash, Minimax and other algorithms or data structures. can be useful for you to win.

Randomization

For some data structures, their randomized forms are as high-quality as classical forms, but can run faster than classical forms. For example, Randomized Priority Queue works almost as well as the classic form (because it is randomized, it can sometimes remove erroneous elements in turn - red), but is executed at a fixed time complexity compared to the classic form.

Although the randomization method is not as common in technical interviews as other fundamental methods, you can add extra points to your account by using or talking about it during the interview.

System design

In system design interviews, candidates are introduced to changes to any known platform (such as Instagram, Uber, Youtube, etc.) or any component of that platform (such as a distributed file system), millions of lines of code, and large numbers. the test component of the system, etc.) is designed to design a simple form in a short time.

Introductory information on the form and structure of the system design interview is provided in the interview process section. This section of the booklet describes in more detail how the system design interview took place at the junior and senior levels. Most companies know that engineers at these levels rarely have experience in large-scale projects. In this regard, system design interviews are more hypothetical. Interviews at the Upper-Senior, Principal / Staff or Partner / Senior Staff levels fully discuss the candidate’s past experience and specific circumstances.

The main factor that the interviewer focuses on in a system design interview is to learn from what perspective the candidate will approach the design of complex systems or to anticipate any contingencies. For a successful system design interview, candidates must also know the various technical units of measurement and be able to make calculations when making decisions. For example, when candidates want to enlarge the system when the average network latency from one machine to another within the data center can be spent on operations in the selected data management system, according to the terms of the question. ) be able to calculate the budget or technical difficulties and other such technical units that will be needed.

After a general discussion of the question posed during the system design interview, you can focus on a topic you know more deeply. For example, if you have in-depth knowledge of the network, then you can discuss more of the problems that the system may encounter on the network side. Because the interviewer understands the breadth of the system design topic, he or she understands the candidate’s deeper approach to the topics he or she knows.

Topics

During system design, candidates should be familiar with important fundamental topics in addition to specific knowledge. You can get acquainted with The System Design Primer with a more detailed list of topics. You can use Grokking the System Design Interview as another useful preparation resource.

Network

One of the most important fundamental system design topics is computer networks. Candidates should gain the necessary knowledge of various important network protocols when preparing for a technical interview.

During the interview, candidates may be asked what protocols are used in the client-server architecture, protocol guarantees, and other topics. Because computer networks are a classic branch of computer science, there are many materials, online tutorials, and books on the subject. One of my favorite resources is Computer Networking: A Top-Down Approach. The book discusses important networking topics. You can select and read the topics you need.

Storage solutions

Another frequently asked topic in system design interviews is data storage and management. Candidates should generally be familiar with batch processing, stream processing, hot-cold data, warehouse solutions, various transactional warranties, and other such topics.

During the interview, the candidate can be given quick tasks to store and analyze information, send automatic notifications according to the events in the system, and other similar tasks.

One of our favorite books to prepare for system design interviews is Designing Data-Intensive Applications. The book contains almost all the basic practical knowledge that will be needed in system design interviews.

Distributed systems

Distributed systems are in themselves one of the broadest sections of computer science, and the details of this subject are many times greater than the volume of this booklet. Replication, sharding, fault-tolerance, load-balancing, consensus, caching and other concepts of distributed systems are an integral part of almost all complex systems. Therefore, it is important for candidates to be familiar with these topics in order to succeed in the interview. To learn more about the topic, you can watch our favorite MIT 6.824: Distributed Systems lesson online.

General technical knowledge

It does not discuss specific topics, but technical solutions used by most engineers in their daily work, such as hardware required for client-server architecture, data formats that will allow data transfer between the two services, and so on.

Additional sources

It is not necessary to look at all the sources mentioned here. The list has been added mainly to get acquainted with technical topics.

Company blogs

Academic articles

Real systems