JavaRush/Java Blog/Random EN/The trick, or how to get a job as a middle java developer...
Юрий
Level 30

The trick, or how to get a job as a middle java developer without experience in Java

Published in the Random EN group
members
Greetings to all Java students and professionals. Perhaps my story will be an example for some of how to do it, and for others - how not to do it. It's October 19, 2021, and today I completed a probationary period (3 months) as a Java middle developer in a large company. I had no previous experience in Java development. Until June 4, 2020, I knew nothing about Java. When I was hired as a Javaist, I promised that if I passed the probationary period, I would write a success story. This article will be divided into two logical parts: Career background ( chapters 1-5, not related to Java, but in which you can gain knowledge about your career). Becoming a Javaist (chapters 6-9 - learning Java, interviews, getting a job, first real experience). <h3>Chapter 1. Economist</h3>In order to understand what level of knowledge I came to JavaRush with, I need to give a biographical note about myself. 2013, November, 8 am. I'm sitting in a coffee shop on Taganka and repeating SQL instructions. In an hour I have an interview for the position of leading economist in the financial department of the bank. This is the only interview that I was invited to, and I need to give it 100%. For his sake, I flew from St. Petersburg and stayed with relatives in the kitchen, so as not to spend my already small savings. 30 minutes pass, the pancakes with ham and cheese are eaten and we need to move towards our cherished dream. But everything is shaking. What if I fail the interview? Okay, it was not. I go to the bank, get a pass, and wait for my interviewees in the meeting room. Time goes by for a very long time. A man about 35 and a woman of the same age come in. They introduce themselves and ask to tell you about themselves: “Yuri, it’s a pleasure.” I am 21 years old, I am studying part-time at a university in St. Petersburg, I worked for 3 months as a teller in a bank. I realized that this is not what I studied for, I began to look at the job market and saw that in Moscow economists have SQL as a requirement. So I studied it, went to courses (MS SQL Administration - that’s what I had, that’s what I went for), and you called me. They talk about the company, what they do (most of the words are incomprehensible), and then ask you to take a test. The test has 3 questions on SQL: 1. Given a table, pull out all records with id = 10. 2. Given two tables, connect them and display a column from each. 3. Group the departments and give the number of employees for each department. It’s with great shame that I write these requests. This is followed by a discussion of my expectations from the job. And they tell me the magic phrase: “Thank you for the interview, we will call you back.” A week passes, and they offer me to come to work with them. Euphoria, shock, joy! And for what money: 70 thousand rubles in hand! Yes, I will be rich! I come to Moscow, settle in, rent a room in the center. The first days are euphoric. After 10 days, the realization begins: where have I come? I don’t understand anything at all! I had to prepare management reports for the entire bank every month. Naturally, for me it was the same as for you, dear reader. I perceived the terms interbank credit, swaps, expense allocation, costs, etc. as spells in Latin. Along the way, I had to master the technical side of the issue: MS Access (all reporting was done there through VBA), MS SQL (as a new storage, instead of Access), Oracle (which I initially called Oracle, causing hysterics among programmers). And suddenly I begin to understand that the technical side is much more interesting to me. There are attempts to create complex queries (as a result, the database hangs from my scripts, and furious administrators run around trying to figure out who did it). But the main job is finance, which just start to piss me off. After a month and a half, I am writing a letter of resignation, since I cannot give any results (and they didn’t really expect any from me, to be honest). The head of the financial department tears it up and says: “don’t bother with crap.” A month later, I write a statement again, and the head of the department, who was shocked by such impudence (who later became the chairman of the bank’s board), signs with extreme bewilderment: the guy is 21 years old, without a higher education, they were given both a salary and trust, but he behaves like this. The reasons for the dismissal were two more factors: the boss, whose arrogance I could not react calmly, and the uncomfortable chair, from which my back began to hurt. This is incredibly funny, but here is the motive. When I quit, I thought that now I would get even more comfortable. But it was not there. <h3>Chapter 2. 70 interviews</h3>Leaving the bank, I took a deep breath. “I’ll arrange it this way, everyone will be stunned.” Interviews were scheduled, the salaries for them were higher, and it seemed that there would be no need to deal with reporting. There are 4 interviews and no one hires me. 5, 6 interviews - the same thing. I lived with a girl in a rented room, and she got a job and could cover my lack of income. But I still had no idea how long I would have no income. I went to interviews (vacancies a la analyst), and they asked mainly about SQL and VBA. For those who are not aware, VBA is a programming language in Excel, Access and other MS Office products. 10 interviews are held - nothing. 20, 30 - nothing. Everyone is embarrassed by the lack of experience and higher education (which seems like a small thing to me). 40 interviews, and despair begins to creep in. During the period of 55-60 interviews I begin to study 1C. The girl, who has already become a wife, asks to leave for St. Petersburg, since at least she has her own housing there. And at the 70th interview, I was invited to be a 1C database administrator (with the prospect of becoming a 1C developer) in a small company in the industrial zone of St. Petersburg for 50,000 rubles. Now that's career growth! <h3>Chapter 3. Return of the Legend</h3>Looking out the window of a minibus (corporate transport) at the gray St. Petersburg industrial zone, and traveling an hour and forty one way, I realized that I couldn’t live like that. Interest in 1C disappeared at the first touch of the self-written system. A plan was needed. And he matured: in the evenings he studied SQL, and at the same time monitored the well-known job site. The final trigger for the dismissal was the situation: the general director did not want to let me go on a planned vacation, although tickets had already been purchased. After my vacation, I write an application and again send out my resume for Moscow vacancies. Once again I am offered an interview at a large bank in Moscow time. Again I come to my relatives’ kitchen and go for an interview. When hr wrote the address, I couldn’t believe my eyes - this was the building in which I dreamed of working (at the time of my last residence in Moscow it was just under construction). The position was called chief information systems support specialist. I go to the office I am greeted by a man of about 30 in a fashionable jacket and jeans. We went up to the 15th floor, and when I saw the panorama of the city, it took my breath away: all the Stalinist high-rise buildings were visible. The entire style of the building was very modern: in the boss’s office there were wine refrigerators, fashionable aquariums, a painting of a naked woman in black and white style. This caused a "wow" effect. The conversation with the boss did not happen as it usually did: for about 40 minutes he talked about what was happening at the bank. I didn’t understand anything, but nodded my head. When I asked: when will you start asking me? He wasn't paying attention. Once again, to my question “when is the technical interview?”, the answer was “yes, we’ll hire you anyway, if you can’t handle it, we’ll fire you.” It was said with a smile, and I realized that everything, the dream had come true again! <h3>Chapter 4. Finding yourself in IT </h3>When I arrived at the new place, I understood why they hired me right away. I will describe a typical portrait of a department employee: average age 55 years old, Muscovite, Moscow State University education, work at a defense research institute in Soviet times, and transition to the banking sector in the 90s, has been working here for 20 years. Half are men, half are women. They entered into complete dissonance with the surrounding interiors. We were involved in maintaining reporting programs for accounting. Naturally, this was all in ancient VBA and SQL scripts written by developers in the late 90s and early 2000s. It was 2015, and automation was through MS Access. That is, it looked extremely poor. But there was a nuance - they provided what the customer (accounting) wanted. And exactly on time and in the required form. Only they knew how it worked, and even Onotole could not imagine the intricacy of their developments. And any IT manager, even with the greatest desire, could not fire them - the chief accountant went to the board of the bank and defended any employee who served the interests of the accounting department. The manager wanted me to play the role of a Trojan horse: I studied all their developments, and then migrated the data to the new system. Then the old employees can be fired, and I can be transferred to a new system. First, I delved into their processes and looked at the VBA code. Gradually I learned to read VBA code. A year later I already knew how to write the code itself. Typical task: given a database, extract data from it, and put it into Excel in a certain format. Now, as Zadornov said, take a deep breath: all the department’s reporting (and that’s 50 daily, 20 monthly reports!) was run manually! Karl, do you understand that people change dates to +1 every day with their hands in 50 reports! They sit, wait for the result of one report for 1-10 minutes, and launch another! Moreover, daily reports must be launched at a certain time, and God forbid you are late! Not only do they make reports, they manually run procedures in the database without using variables! That is, instead of using the @startDate = '2015-01-01' variable, they will change the same date manually in 20 places! After looking at all this, I started learning Python, and together with VBA, SQL and Task scheduler, I automated all this in two years. Not only automated, but also accelerated many reports: if you abandon MS Access + VBA in favor of MS SQL + TSQL, you can achieve a multiple increase in productivity. My record is speeding up report creation in100once! But my colleagues were extremely unhappy with such automation, so I was declared an enemy of the people (they wanted to sit quietly until retirement). Time passed and the data migration was successful. The manager valued me very much: if at the beginning of my career I came to work at 8 am, then after a while I could come at any time until 12:00, constant increase in salary and position, payment for work on weekends more than double the amount, taxi to at home if you were late at work, mobile communications, in short - the elite! <h3>Chapter 5. The Golden Cage</h3>Suddenly, after 3.5 years, new IT management comes and says that the system to which I migrated the data is no longer needed. But the old system will remain. My manager is moving up the career ladder and invites me to move to a more progressive department. At a meeting with the head of the progressive department, I understand that the technology stack of this department is unknown to me: Oracle, .net, C#, Linux, etc. + Antipathy towards the potential boss. I tell my manager that I am not interested in the progressive department, and he conveniently forgets about me. And then the question becomes: what to do next? The income was already decent, Junior dev wouldn’t hire me for that salary. After thinking about my skills, I realized that I needed to go into machine learning. Everything was interesting until the first encounter with mathematical statistics, which only caused disgust at the institute. That's it, stupor for six months! Time passed, and one day, while walking, I thought about a website that would display good restaurants on a map of Moscow. Started learning HTML, CSS, JS. I spent 3 months studying; I didn’t have the knowledge to create a full-fledged website, but I could practice it at work. An idea was born: to create a portal for accountants so that they could download any report for themselves using a button. It took 2 months to create the portal, and the SPA (Single page application) web application was born in React js with a Node.js backend. Back ran SQL scripts (I didn’t know about frameworks like Hibernate), launched Python and stored additional information in MongoDb (for example, about site users). Externally, the site looked very decent (bootstrap 4, fashionable animation). I'm still proud of this project. But when I showed my code to the bank’s web developers, they were stunned. NOT ONE CLASS OF YOUR OWN! Only features, only hardcore! They praised me, but said that I still need to study a lot to become a Middle full-stack developer. I tried to get a job as an analyst, but there were no special offers. I think: I was not there, I’ll post my resume of a full-stack developer. The calls came, but during interviews I flew like plywood over Paris: for example, I didn’t know what HashMap, HashSet were and why they were needed. There was not the slightest idea about OOP, programming patterns, algorithms, testing, Git. I remembered long-forgotten feelings of shame from ignorance of basic things. Suddenly an offer comes in for a job as the head of customer analytics at a financial company. A week before the country shut down due to the pandemic. I got a job in a financial company, but there was a double feeling: on the one hand, the high salary was warm, on the other hand, there would be minimal development on the technical side. A week passed after the device was installed and remote work was introduced. Since non-working days did not apply to the financial sector, we worked as usual. The new boss turned out to be a very crazy person: he offered to scrape Facebook, create his own neural networks to study clients (without a data scientist on staff). New employees were offered to learn Python in a week, etc. Unpaid days off became the norm. It was stupid to quit: where will you get a job during a pandemic? But patience ran out after 2 months, when it was announced that there would be no quarterly bonuses. The nuance is that when we agreed on the salary, at the time of hiring, hr said that the salary is divided into salary (60%) and a quarterly bonus (40%), which is always paid. It became clear that the wrong choice had been made and we needed to start looking for a new job. <h3>Chapter 6. Starting to master Java</h3>One fine day in May I receive an invitation to an interview for the vacancy “Developer”. A company in the insurance industry needs a person who will develop insurance products. Programming experience is needed, but since this is a “unique” development of the company, there is no need for a specific language. Git and so on are also needed. I scheduled an interview in two days, and I studied the basics of Git in my free time. During the interview, I was asked about Python, JS, Git, SQL. I answered everything except the concept of “method overloading”, and I was invited to work in 2 weeks. It turned out that the company had bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing a programming language (more precisely, using the built-in Jelly programming language). It sounds good, but in fact everything was distorted. Lyrical digression: any technology has its own era and its own scale. Doing all reporting in 2000 only in Excel is cool. Doing the same thing in 2021 is not very good. A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create on the other hand, there will be minimal development on the technical side. A week passed after the device was installed and remote work was introduced. Since non-working days did not apply to the financial sector, we worked as usual. The new boss turned out to be a very crazy person: he offered to scrape Facebook, create his own neural networks to study clients (without a data scientist on staff). New employees were offered to learn Python in a week, etc. Unpaid days off became the norm. It was stupid to quit: where will you get a job during a pandemic? But patience ran out after 2 months, when it was announced that there would be no quarterly bonuses. The nuance is that when we agreed on the salary, at the time of hiring, hr said that the salary is divided into salary (60%) and a quarterly bonus (40%), which is always paid. It became clear that the wrong choice had been made and we needed to start looking for a new job. <h3>Chapter 6. Starting to master Java</h3>One fine day in May I receive an invitation to an interview for the vacancy “Developer”. A company in the insurance industry needs a person who will develop insurance products. Programming experience is needed, but since this is a “unique” development of the company, there is no need for a specific language. Git and so on are also needed. I scheduled an interview in two days, and I studied the basics of Git in my free time. During the interview, I was asked about Python, JS, Git, SQL. I answered everything except the concept of “method overloading”, and I was invited to work in 2 weeks. It turned out that the company had bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing a programming language (more precisely, using the built-in Jelly programming language). It sounds good, but in fact everything was distorted. Lyrical digression: any technology has its own era and its own scale. Doing all reporting in 2000 only in Excel is cool. Doing the same thing in 2021 is not very good. A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create on the other hand, there will be minimal development on the technical side. A week passed after the device was installed and remote work was introduced. Since non-working days did not apply to the financial sector, we worked as usual. The new boss turned out to be a very crazy person: he offered to scrape Facebook, create his own neural networks to study clients (without a data scientist on staff). New employees were offered to learn Python in a week, etc. Unpaid days off became the norm. It was stupid to quit: where will you get a job during a pandemic? But patience ran out after 2 months, when it was announced that there would be no quarterly bonuses. The nuance is that when we agreed on the salary, at the time of hiring, hr said that the salary is divided into salary (60%) and a quarterly bonus (40%), which is always paid. It became clear that the wrong choice had been made and we needed to start looking for a new job. <h3>Chapter 6. Starting to master Java</h3>One fine day in May I receive an invitation to an interview for the vacancy “Developer”. A company in the insurance industry needs a person who will develop insurance products. Programming experience is needed, but since this is a “unique” development of the company, there is no need for a specific language. Git and so on are also needed. I scheduled an interview in two days, and I studied the basics of Git in my free time. During the interview, I was asked about Python, JS, Git, SQL. I answered everything except the concept of “method overloading”, and I was invited to work in 2 weeks. It turned out that the company had bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing a programming language (more precisely, using the built-in Jelly programming language). It sounds good, but in fact everything was distorted. Lyrical digression: any technology has its own era and its own scale. Doing all reporting in 2000 only in Excel is cool. Doing the same thing in 2021 is not very good. A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create create your own neural networks to study clients (without a data scientist on staff). New employees were offered to learn Python in a week, etc. Unpaid days off became the norm. It was stupid to quit: where will you get a job during a pandemic? But patience ran out after 2 months, when it was announced that there would be no quarterly bonuses. The nuance is that when we agreed on the salary, at the time of hiring, hr said that the salary is divided into salary (60%) and a quarterly bonus (40%), which is always paid. It became clear that the wrong choice had been made and we needed to start looking for a new job. <h3>Chapter 6. Starting to master Java</h3>One fine day in May I receive an invitation to an interview for the vacancy “Developer”. A company in the insurance industry needs a person who will develop insurance products. Programming experience is needed, but since this is a “unique” development of the company, there is no need for a specific language. Git and so on are also needed. I scheduled an interview in two days, and I studied the basics of Git in my free time. During the interview, I was asked about Python, JS, Git, SQL. I answered everything except the concept of “method overloading”, and I was invited to work in 2 weeks. It turned out that the company had bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing a programming language (more precisely, using the built-in Jelly programming language). It sounds good, but in fact everything was distorted. Lyrical digression: any technology has its own era and its own scale. Doing all reporting in 2000 only in Excel is cool. Doing the same thing in 2021 is not very good. A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create create your own neural networks to study clients (without a data scientist on staff). New employees were offered to learn Python in a week, etc. Unpaid days off became the norm. It was stupid to quit: where will you get a job during a pandemic? But patience ran out after 2 months, when it was announced that there would be no quarterly bonuses. The nuance is that when we agreed on the salary, at the time of hiring, hr said that the salary is divided into salary (60%) and a quarterly bonus (40%), which is always paid. It became clear that the wrong choice had been made and we needed to start looking for a new job. <h3>Chapter 6. Starting to master Java</h3>One fine day in May I receive an invitation to an interview for the vacancy “Developer”. A company in the insurance industry needs a person who will develop insurance products. Programming experience is needed, but since this is a “unique” development of the company, there is no need for a specific language. Git and so on are also needed. I scheduled an interview in two days, and I studied the basics of Git in my free time. During the interview, I was asked about Python, JS, Git, SQL. I answered everything except the concept of “method overloading”, and I was invited to work in 2 weeks. It turned out that the company had bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing a programming language (more precisely, using the built-in Jelly programming language). It sounds good, but in fact everything was distorted. Lyrical digression: any technology has its own era and its own scale. Doing all reporting in 2000 only in Excel is cool. Doing the same thing in 2021 is not very good. A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create <h3>Chapter 6. Starting to master Java</h3>One fine day in May I receive an invitation to an interview for the vacancy “Developer”. A company in the insurance industry needs a person who will develop insurance products. Programming experience is needed, but since this is a “unique” development of the company, there is no need for a specific language. Git and so on are also needed. I scheduled an interview in two days, and I studied the basics of Git in my free time. During the interview, I was asked about Python, JS, Git, SQL. I answered everything except the concept of “method overloading”, and I was invited to work in 2 weeks. It turned out that the company had bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing a programming language (more precisely, using the built-in Jelly programming language). It sounds good, but in fact everything was distorted. Lyrical digression: any technology has its own era and its own scale. Doing all reporting in 2000 only in Excel is cool. Doing the same thing in 2021 is not very good. A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create <h3>Chapter 6. Starting to master Java</h3>One fine day in May I receive an invitation to an interview for the vacancy “Developer”. A company in the insurance industry needs a person who will develop insurance products. Programming experience is needed, but since this is a “unique” development of the company, there is no need for a specific language. Git and so on are also needed. I scheduled an interview in two days, and I studied the basics of Git in my free time. During the interview, I was asked about Python, JS, Git, SQL. I answered everything except the concept of “method overloading”, and I was invited to work in 2 weeks. It turned out that the company had bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing a programming language (more precisely, using the built-in Jelly programming language). It sounds good, but in fact everything was distorted. Lyrical digression: any technology has its own era and its own scale. Doing all reporting in 2000 only in Excel is cool. Doing the same thing in 2021 is not very good. A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to create A company website in pure HTML was cool in 1999, but not in 2021. So, the technology that the company used at the time of its creation (2005) was very cool - Java was responsible for both the server and the client part (the so-called Java servlet pages). Moreover, if you create a new business process (which has its own UI), then it is stored inside the database, and not in the code in a file. To understand how inconvenient this is, imagine that you write Java code in Intellij idea, save it to the Database, and then. when you want to run your code, the program kernel goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Hint #1: When you want to submit code to the testbench, you need to createSQL скрипт, which will contain your code. Unpleasant, but tolerable? Zest #2: The database consists of more than 200 tables that have connections with each other. This means you need to know which tables to throw your code into, and which entities need to be created in other tables. The output is an SQL script with a length of ~ 1000 lines. This is truly disgusting. Beware of legacy. In short, realizing that it was all in Java, I went to JavaRush (finally we got to the theme of the site!). June-July 2020. The first 10 levels were closed quickly (maybe a month), because there was nothing fundamentally new. Then the speed slowed down. July-October 2020. Levels 10-20 closed. October-March 2021. Levels 20-30 closed. Now the fun begins: in March 2021, I started looking at Java vacancies and realized that there were a lot of unfamiliar words there. Some kind of Spring, SpringBoot, Hibernate, JUnit. Having bought video courses on a well-known website, I just touched Spring and thought that now I know and can do everything. After that, I came across the TopJava course by Grigory Kislin. On his website you can try to complete a test task, and if you succeed, you can take the course. In this course, you create a full-fledged web application and even publish it on the Internet. For this money, they will give you a review (review of the code by a more experienced programmer), give feedback and give you tips in case of problems. I got to homework 3 and quit. The reason is simple: they demand a lot from you, but they don’t give you any knowledge. The homework requirements are very confusing. The information is presented extremely inconsistently. In my subjective opinion, this course is needed by fairly experienced developers who come from other similar languages. Because in his course there is practically no explanation of the technologies that he asks to use. You also need to know Git well (everything is sent to your personal repository). At the end of April 2021, I am posting a resume for a Java developer (with the desired salary at the middle+ level), in which I indicate that at my last job I programmed in Java (I lied). On the same day, the bank receives an application for a Java developer position. <h3>Chapter 7. Java Interviews and Skill Honing</h3>So, what was the plan? I need to get a good salary, since I’m already used to living on a considerable income + loans. Therefore, junior positions are not suitable for me. You need to get a middle position. But who will hire me without experience? The decision came naturally: my employment record says that I worked as a developer for a year and for another 4 years as an expert in the IT department in my previous position. So, I’ll say that I’ve been developing in Java for a year. And if they ask about new products, I will say that the old Java (7) was there and did not support anything. Before my first (remote) interview, I was nervous. I have no experience, very little knowledge, and I’m asking for a lot of money. I think: don’t care, negative experience is also experience. I contact via Skype and I will be interviewed by two department heads. Which made me even more scared. Questions began: OOP, HashMap device, streams, data structures, what is Spring, Hibernate, AOP. And if before Sping it was more or less tolerable, then at Spring it completely fell apart. People ask me: how did you develop in Spring if you don’t really know it? Me: I copied it, pasted it, it works, and thanks for that. This answer amused them. Then they asked about SQL, in which I was like a duck to water. Next was Git and a question about rebase, cherry-pick (which I also didn’t know) and finished about JS, since it was listed in my resume. There, too, there was a complete failure, because they asked about OOP JS. Based on the results of the interview, it became clear that my knowledge was not comme il faut, and therefore I would not qualify for this vacancy. In the evening, HR writes that my candidacy has been approved and they are ready to call me. I actually choked on a burger at McDonald's. I was happy, but after 3 days HR reported that they had chosen another candidate. For the first time in my experience, an offer was withdrawn. After the first interview in Java, I stepped up my game: I took a course (and completed it completely!) in Git from Colt Steele on a well-known site for selling video courses. This changed my perception of Git. Next, I took a (brilliant) course from Zaur Tregulov on Spring+Hibernate. Training scheme: I watch it like in the video, I do the same on my computer, but I name the variables and classes differently so as not to stupidly copy someone else’s code. I upload all my work to my Github (thereby practicing Git). It was mid-May and calls from hr began. We started scheduling interviews one by one. Many invitations had to be canceled for the following reasons: HR did not read the description of my resume and invited me to a senior position. It’s also worth mentioning a separate HR caste: those who confuse Java with JavaScript. That’s why I wrote Middle Java developer in the title of my resume. <h3>Chapter 8. List of typical questions and how interviews go</h3>I started going to interviews and gradually formed a pool of basic questions in the middle. Required: 0. OOP - definition, talk about each principle of OOP (+give an example from real life). 1. Equals and hashcode - what is the contract (relationship) between them? 2. HashMap - how to understand which bucket an object will go into, what a collision is, in what data structure the data is stored inside the HashMap, the standard size, how the number of buckets increases. 3. Stream - what types of operations, what is the difference between them, give an example of each type of operation. 4. String pool, Integer pool - what is it? 5. Heap, stack - what is it, what is the difference? 6. Differences between Runnable, Thread, Future. 7. Volatile, atomicity. 8. Solid, Kiss, Dry - definitions, examples from real life. 9. Access modifiers in Java. 10. What is the difference between an abstract class and an interface. Can the interface be private? 11. Functional interfaces. 12. List all Object methods and tell why they are needed. Features of the clone method. 13. What is serialization and deserialization. 14. Try catch with resources - describe what it is, tell it using the Closeable interface. 15. Differences between Final, finally, finalize? 16. Overload, Method overriding is the difference. 17. Why String was made immutable, tell us about StringBuilder and StringBuffer. 18. What is time complexity O(1), memory complexity. 19. Data structures: talk about map, set, queue, deque, list and their implementation in Java (treeMap, hashSet, hashMap, arrayList, linkedList, priorityQueue, blockingQueue), describe the complexity (worst, average, best) of insertion, search, removing an element in each structure. 20. Primitive data types in Java. Why is each of them needed? 21. Types of errors. Checked and unchecked exceptions. 22. What is JVM, JRE, JDK? 23. What collectors did you work with? Maven - Build life cycle. 24. Spring - Ioc Definitions, Di, Bean Lifecycle, Context, @Bean Annotations, @Configuration, @Autowired, @Advice, @Aspect, @Service, @Repository. 25. Generics - definition of what is a lower and upper limit? 26.Programming patterns - at least Singleton (willingness to tell why this is sometimes an anti-pattern) + Builder, Adapter, Factory, Decorator, Proxt. Desirable: 26. Testing - types of tests, which libraries (JUnit) were worked with. What is Mock, Stab, Spy? 27. Spring boot - why is it needed, readiness to make a SpringBoot application online. 28. Hibernate - why is it needed, Entity, join column, lazy vs eager loading, caching levels (hard). 29. Spring rest - why is it needed, how to make @post, @get endpoints. How to read parameters/request body? How to submit in json format? 30. Data structures - trees, their types. 31. Algorithms - types of sorting. In addition to Java, they may ask: 1. (Required!) Git - why is it needed, operations merge, rebase, cherry-pick, push, pull, commit, log, checkout, branch, reset, revert, refresh. 2.SQL - ability to write a query: join two tables into one (inner join, left join). 3. Databases - 3 normal forms, indexes (why are they needed, types), primary key, foreign key How does a typical remote interview go: hr sends a link to zoom (Skype, Google Meeting). By a certain time you connect and there are from 1 to 3 people there (technical expert, boss, hr). In particularly stubborn cases, up to 8 people. First you tell about yourself, then the technical part, then a story about the vacancy and goodbye (they say when they will contact you or what the next steps will be). During goodbyes, you can ask for feedback on knowledge. I asked: “Can you tell me, during my answers, where your ears hurt?” Many people respond, but be prepared to be rejected. During the interview they evaluate: 1. Your ability to express thoughts and knowledge of the Russian language (I know a case where a candidate was rejected due to poor knowledge of the Russian language). 2. Previous experience (they may meticulously ask what you did at your last job). 3. An adequate reaction when pressure is placed on you (there was one interview when people started talking disrespectfully: ignoring my answers, trying to instill their positions, etc. I finished the interview 15 minutes after the start, and they: it was a stressful interview!) 4. Level of your knowledge. I will go into more detail here. Knowing the definitions of a topic is only 10% of what is expected of you. It is necessary to understand how it works (at least at the top level). Willingness to explain at what point in development you will choose this or that solution. This is much more important than the accuracy of your definition. I will analyze this thesis using two examples. First example: during an interview I was asked about HashMap, and I gave the definition: “this is a data structure that stores key and value bundles.” Then the interviewer asked: what is the difference from TreeMap? Answer: The difference is that HashMap hashes the key and due to hashing, access is fast. The interviewer immediately asked to tell us the internal structure of HashMap, and at the same time ask about hashCode and equals. And it will go deeper until you are satisfied with the answer or you stop. I learned to answer correctly about HashMap only after 2 months of interviews and a course on data structures on hexlet. Second example: the SOLID concept. They ask me to give a definition that I have memorized. But as soon as it came to real life examples, problems began. Внимание!If you don’t know, then don’t invent it, but say this: I don’t know this topic, but I can assume that it works like this. Many technical experts are infuriated when a person speaks heresy as if he understands the topic. 5. Your level of enthusiasm during the job discussion. You are expected to be interested and to ask questions about the vacancy (just not just made up ones). 6. Sometimes humor (only on topic) and common interests help you communicate. Feel free to talk about your hobbies; perhaps the interviewee also loves Dota/football/fantasy. And this is a plus for you as a candidate. I know cases when a community of interests turned a blind eye to the interviewer’s poor technical training (You’re a normal guy, we’ll train you). <h3>Chapter 9. Getting a job, baptism of fire</h3>Interviews took place from late April to mid-July. The first interviews were embarrassing, but gradually the situation improved to an acceptable level. Studying common questions and feedback made themselves felt. The first 25 interviews were unsuccessful. After this, moments of despair began. Feelings: what if they won’t hire me for that salary? Suddenly things began to shoot out: within a week, three companies submitted proposals. I chose a company whose specifics I knew, plus there was a good salary and the opportunity to work remotely. During my interview, I was asked about 30 questions about Java core and Spring, 97% of which I answered correctly. After that there was communication with higher authorities and after 1.5 weeks I got a job with them. First of all, when you come to any job, you begin to gain access to all the necessary systems and install the tools you need. It took a week and a half, and I was given the first task: to change the static text in the classroom. When I opened the project, I felt sick: there were many modules inside one project, many classes, tests, etc. At this point I was lost, but a second developer helped me and brought me up to speed. The bug was fixed in 10 minutes, published in Git, a pull request was made (a request to merge two branches where other developers check your code), and then merged into the main branch. It turned out that everything is not so difficult. Until the first full-fledged task... At the time of planning tasks for the next two weeks, they told me: you will do integration with another system, which is located on OpenShift. This is where things got really scary: OpenShift is a whole cluster of technologies: Docker, Kubernetes, Linux, and so on. Cold sweat ran down my back: well, I worked as a Jawist. Immediately after the meeting, I called the developer, who reassured me: adapters for this system had been written, and it was enough to import certain classes into my project, after which I could safely use the integration. It became fun again, until the developer showed a typical integration: I saw more than 20 classes created for similar integration. Moreover, previously unseen annotations @Value, @Builder, @NoArgsConstructor, @Getter, were noticed @Sl4f - it turned out to be the Lombook project (read on the Internet). When the developer explained to me how to do it, I tried to write down the connections of all the classes, and nothing at all stuck in my head. The most embarrassing moment was the lack of knowledge of Intellij Idea: how to search globally for a project, code refactoring, etc. Having taken on the task, I understood why OOP is needed: for such a large amount of code, it is necessary to divide it into classes; methods that are not used outside the class must be declared private so as not to accidentally run them in another class, etc. Having written my integration by analogy with another integration, I learned about the existence of CheckStyle - a special plugin that checks the style of your code, and you will not be able to compile your project until you fix errors (for example, extra spaces, variable names with capital letters, variable names that are too short). After defeating CheckStyle, I sent my code for review to senior developers and corrected my mistakes within a week. In general, I was very lucky that in my team I had a good relationship with the second developer, who explained a lot of things. A month after the device, my first integration was launched on the Integration-Functional stand (the work of all applications together is tested), and everything worked there! Victory! The next task was to create a class that would allow hiding data by key in json. For example: there is json {text:"JavaRush"} -> processing -> {text:"****Rush"}. There are two complications here: there may be nesting {text:{mytext:"JavaRush"}}, and what is more unpleasant is nesting inside the array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (of course you need to hide all text.mytext). Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. I tried to write down the connections of all classes, and nothing at all stuck in my head. The most embarrassing moment was the lack of knowledge of Intellij Idea: how to search globally for a project, code refactoring, etc. Having taken on the task, I understood why OOP is needed: for such a large amount of code, it is necessary to divide it into classes; methods that are not used outside the class must be declared private so as not to accidentally run them in another class, etc. Having written my integration by analogy with another integration, I learned about the existence of CheckStyle - a special plugin that checks the style of your code, and you will not be able to compile your project until you fix errors (for example, extra spaces, variable names with capital letters, variable names that are too short). After defeating CheckStyle, I sent my code for review to senior developers and corrected my mistakes within a week. In general, I was very lucky that in my team I had a good relationship with the second developer, who explained a lot of things. A month after the device, my first integration was launched on the Integration-Functional stand (the work of all applications together is tested), and everything worked there! Victory! The next task was to create a class that would allow hiding data by key in json. For example: there is json {text:"JavaRush"} -> processing -> {text:"****Rush"}. There are two complications here: there may be nesting {text:{mytext:"JavaRush"}}, and what is more unpleasant is nesting inside the array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (of course you need to hide all text.mytext). Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. I tried to write down the connections of all classes, and nothing at all stuck in my head. The most embarrassing moment was the lack of knowledge of Intellij Idea: how to search globally for a project, code refactoring, etc. Having taken on the task, I understood why OOP is needed: for such a large amount of code, it is necessary to divide it into classes; methods that are not used outside the class must be declared private so as not to accidentally run them in another class, etc. Having written my integration by analogy with another integration, I learned about the existence of CheckStyle - a special plugin that checks the style of your code, and you will not be able to compile your project until you fix errors (for example, extra spaces, variable names with capital letters, variable names that are too short). After defeating CheckStyle, I sent my code for review to senior developers and corrected my mistakes within a week. In general, I was very lucky that in my team I had a good relationship with the second developer, who explained a lot of things. A month after the device, my first integration was launched on the Integration-Functional stand (the work of all applications together is tested), and everything worked there! Victory! The next task was to create a class that would allow hiding data by key in json. For example: there is json {text:"JavaRush"} -> processing -> {text:"****Rush"}. There are two complications here: there may be nesting {text:{mytext:"JavaRush"}}, and what is more unpleasant is nesting inside the array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (of course you need to hide all text.mytext). Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. For such a large amount of code, you need to divide it into classes; methods that are not used outside the class must be declared private so as not to accidentally run them in another class, etc. Having written my integration by analogy with another integration, I learned about the existence of CheckStyle - a special plugin that checks the style of your code, and you will not be able to compile your project until you fix errors (for example, extra spaces, variable names with capital letters, variable names that are too short). After defeating CheckStyle, I sent my code for review to senior developers and corrected my mistakes within a week. In general, I was very lucky that in my team I had a good relationship with the second developer, who explained a lot of things. A month after the device, my first integration was launched on the Integration-Functional stand (the work of all applications together is tested), and everything worked there! Victory! The next task was to create a class that would allow hiding data by key in json. For example: there is json {text:"JavaRush"} -> processing -> {text:"****Rush"}. There are two complications here: there may be nesting {text:{mytext:"JavaRush"}}, and what is more unpleasant is nesting inside the array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (of course you need to hide all text.mytext). Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. For such a large amount of code, you need to divide it into classes; methods that are not used outside the class must be declared private so as not to accidentally run them in another class, etc. Having written my integration by analogy with another integration, I learned about the existence of CheckStyle - a special plugin that checks the style of your code, and you will not be able to compile your project until you fix errors (for example, extra spaces, variable names with capital letters, variable names that are too short). After defeating CheckStyle, I sent my code for review to senior developers and corrected my mistakes within a week. In general, I was very lucky that in my team I had a good relationship with the second developer, who explained a lot of things. A month after the device, my first integration was launched on the Integration-Functional stand (the work of all applications together is tested), and everything worked there! Victory! The next task was to create a class that would allow hiding data by key in json. For example: there is json {text:"JavaRush"} -> processing -> {text:"****Rush"}. There are two complications here: there may be nesting {text:{mytext:"JavaRush"}}, and what is more unpleasant is nesting inside the array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (of course you need to hide all text.mytext). Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. variable names are too short). After defeating CheckStyle, I sent my code for review to senior developers and corrected my mistakes within a week. In general, I was very lucky that in my team I had a good relationship with the second developer, who explained a lot of things. A month after the device, my first integration was launched on the Integration-Functional stand (the work of all applications together is tested), and everything worked there! Victory! The next task was to create a class that would allow hiding data by key in json. For example: there is json {text:"JavaRush"} -> processing -> {text:"****Rush"}. There are two complications here: there may be nesting {text:{mytext:"JavaRush"}}, and what is more unpleasant is nesting inside the array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (of course you need to hide all text.mytext). Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. variable names are too short). After defeating CheckStyle, I sent my code for review to senior developers and corrected my mistakes within a week. In general, I was very lucky that in my team I had a good relationship with the second developer, who explained a lot of things. A month after the device, my first integration was launched on the Integration-Functional stand (the work of all applications together is tested), and everything worked there! Victory! The next task was to create a class that would allow hiding data by key in json. For example: there is json {text:"JavaRush"} -> processing -> {text:"****Rush"}. There are two complications here: there may be nesting {text:{mytext:"JavaRush"}}, and what is more unpleasant is nesting inside the array: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (of course you need to hide all text.mytext). Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful. Solving this problem turned out to be quite difficult, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in the eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it into a method, and compare the received data with the correct result (create a variable with the correct result). I wrote 11 cases for my library, in which I checked that the application did not crash with a NullPointException and that it correctly hides data with any type of nesting. After completing this task, I was given a new integration, the peculiarity of which was the following: I had to export a Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow website. One time even an official Spring developer responded. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began writing this article. In total, it took 8 hours to write this article) Thank you for your attention, I hope the article was useful.
Comments
  • Popular
  • New
  • Old
You must be signed in to leave a comment
This page doesn't have any comments yet