JavaRush /Java Blog /Random EN /The trick, or how to get a middle java developer without ...
Юрий
Level 30
Москва

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

Published in the Random EN group
Greetings to all Java learners and professionals alike. Perhaps my story for someone will be an example of how to do it, and for someone - how not to do it. It's October 19, 2021, and today I passed a trial period (3 months) as a Java middle developer in a large company. Previously, there was no experience in Java development. Until 06/04/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:, but in which you can gain knowledge about a career). Becoming a Javist (chapters 6-9 - learning Java, job interviews, getting a job, first real experience). <h3>Chapter 1. Economist</h3>In order to understand what level of knowledge I came to CodeGym with, I need to give a biographical information 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 a leading economist in the financial department of a bank. This is the only interview that I was invited to, and I need to shoot at 100%. For his sake, he flew in from St. Petersburg, and stayed with relatives in the kitchen, so as not to spend the already small savings. 30 minutes pass, pancakes with ham and cheese are eaten and we must move towards our cherished dream. But everything is shaking. What if I fail the interview? Okay, it wasn't. I go to the bank, get a pass, wait for the interlocutors in the meeting room. Time goes by very long. A man of about 35 and a woman of the same age come in. They introduce themselves and ask to tell about themselves: - Yuri, it's very nice. I am 21 years old, I study in absentia at a university in St. Petersburg, I worked for 3 months as a teller in a bank. I realized that this was not what I studied for, began to look at the job market and saw that economists in Moscow had SQL in their requirements. So I studied it, went to courses (Administration of MS SQL - that was 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 them to take a test. There are 3 SQL questions in the test: 1. Given a table, pull out all records with id = 10. 2. Given two tables, join them and output a column from each. 3. Group the departments and give the number of employees for each department. With sin in half, 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 goes by and I'm offered to go to work with them. Euphoria, shock, joy! And with what money: 70 thousand rubles in hand! Yes, I'll be rich! I come to Moscow, I get settled, I rent a room in the center. First days in euphoria. After 10 days, awareness begins: where did I come from? 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. The terms MBC, swaps, allocation of expenses, costs, etc., I perceived as incantations 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 first called Oracle, causing hysteria among programmers). And suddenly I begin to understand that the technical side is much more interesting to me. There are attempts to compose complex queries (as a result, the database hangs from my scripts, and angry administrators run to understand who did it). But the main work is finances, which just start to piss me off. A month and a half later, I write a letter of resignation, because I can’t give any result (and they didn’t really expect it from me, to be honest). The head of the financial department tears it up and says: "don't mess around." A month later, I write a statement again, and the head of the department (who later became the chairman of the board of the bank), who was crazy from such impudence, signs with extreme bewilderment: the guy is 21 years old, without higher education, they gave both salary and trust, but he behaves like this. The reasons for the dismissal were two more factors: the boss, to whose arrogance I could not react calmly, and an uncomfortable chair, from which my back began to hurt. It's crazy funny, but here's the motive. When I left, I thought that now I'll get even more settled. But it was not there. <h3>Chapter 2. 70 Interviews</h3>Leaving the bank, I took a deep breath. "I'll get it right, everyone will be stunned." Interviews were scheduled, the salaries for them were higher, and it seems that there will be no need to deal with reporting. There are 4 interviews, and no one takes me. 5, 6 interview - the same. I lived with a girl in a rented room, and she got a job and could close my lack of income. But I had no idea how long I would be without income. I went to interviews (vacancies a la analyst), and they asked mostly about SQL and VBA. For those who are not in the know, VBA is a programming language in Excel, Access and other MS Office products. Passed 10 interviews - nothing. 20, 30 - nothing. Everyone is embarrassed by the lack of experience and higher education (which seems like a trifle to me). 40 interviews and desperation starts to creep in. In 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 there is her own housing there. And at the 70th interview I was invited as 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. 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 getting there forty hours one way, I realized that it was impossible to live like this. Interest in 1C disappeared at the first touch of the self-written system. A plan was needed. And he matured: he studied SQL in the evenings, and at the same time monitored the well-known job site. The final trigger for the dismissal was the situation: the CEO did not want to let him go on a planned vacation, although tickets had already been bought. After the 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 relatives in the kitchen and go to the interview. When hr wrote the address, I couldn't believe my eyes - it was a 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 into the office, I am met by a man in his 30s in a trendy jacket and jeans. We go up to the 15th floor, and when I saw the panorama of the city, it took my breath away: all the Stalinist skyscrapers were visible. The whole style of the building was very modern: in the boss's office there were wine coolers, fancy aquariums, a picture of a naked woman in black and white style. This caused a "Wow" effect. The conversation with the boss did not go as usual: for 40 minutes he talked about what was happening in the bank. I didn't understand, but nodded my head. When I asked: when will you start asking me? He didn't pay attention. Once again, to my question "when is the technical interview?" , the answer was received "yes, we take you anyway, if you can't do it, we'll fire you." It was said with a smile, and I realized that everything, the dream came true again! <h3>Chapter 4. Finding yourself in IT</h3>When I arrived at a new place, I understood why I was hired right away. I will describe a typical portrait of a department employee: average age 55 years old, Muscovite, education of Moscow State University, work at a defense research institute in the Soviet era, and transition to the banking sector in the 90s, has been working here for 20 years. Half men, half women. They entered into complete dissonance with the surrounding interiors. Engaged in maintaining programs for the formation of reports for accounting. Naturally, this was all based on 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 miserable. But there was a nuance - they gave something what the customer wanted (accounting). And right on time and in the right way. How it worked, only they knew, and even Onotole could not imagine the intricacies of their developments. And any IT manager, even with the greatest desire, could not fire them - the chief accountant went to the bank's board and defended any employee who serves 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 the new system. At first, I delved into their processes and looked at the VBA code. Gradually learned to read code in VBA. A year later, he already knew how to write the code himself. A typical task: given a database, extract data from it, and put it in Excel in a certain format. Now, as Zadornov said, draw air into your chest: all reporting of the department (which is 50 daily, 20 monthly reports!), was run manually! Carl, do you understand that people change dates every day by +1 hands in 50 reports! They sit, wait for the result of one report for 1-10 minutes, and start another one! Moreover, daily reports must be launched at a certain time, and God forbid you will be late! Not only do they make reports, they run procedures in the database by hand 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 the Task scheduler, I automated it all in two years. Not only automated, but also accelerated many reports: if you abandon MS Access + VBA in the direction of MS SQL + TSQL, performance can be multiplied. My record is speeding up report generation 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 appreciated me very much: if at the beginning of my career I came to work at 8 in the morning, then after a while I could come at any time until 12:00, a constant increase in salary and position, pay for work on weekends more than double the amount, a 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, a new IT management arrives, saying that the system to which I migrated the data is no longer needed. But the old system will remain. My manager moves up the corporate ladder and suggests that I 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. + Dislike for the potential boss. I inform my supervisor that I am not interested in the progressive department, and he safely forgets about me. And then the question becomes: what to do next? The income was already decent, Junior dev will not take me on such a salary. After thinking about my skills, I realized that I need to go into machine learning. Everything was interesting until the first encounter with mathematical statistics, which caused only disgust in the institute. Everything, a stupor for six months! Time passed, and somehow, while walking, I thought about a site that would display good restaurants on a map of Moscow. The study of HTML, CSS, JS began. I spent 3 months studying, there was no knowledge to create a full-fledged site, but it could be practiced at work. An idea was born: to create a portal for accountants so that they can download any report for themselves by clicking the button. It took 2 months to create the portal, and the SPA (Single page application) web application was born on React js with a Node.js backend. The back pulled 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, fancy animation). I am still proud of this project. But when I showed my code to the bank's web developers, they went crazy. NOT ONE OF YOUR CLASS! Only features, only hardcore! I was praised, while saying that there is still a lot to learn to become a Middle full-stack developer. I tried to get a job as an analyst, but there were no special offers. I think: was not I will post a full-stack developer resume. Calls came, but at interviews I flew like plywood over Paris: for example, I didn’t know what HashMap, HashSet are and why they are needed. About OOP, Programming patterns, algorithms, testing, Git there was not the slightest idea. He remembered the long-forgotten feelings of shame from ignorance of elementary things. Suddenly, an offer comes to work as the head of the client analytics department in a financial company. A week before the lockdown of the country due to the pandemic. I got a job in a financial company, but there was a double feeling: on the one hand, a high salary warmed me, on the other hand, development from the technical side would be at a minimum. A week passed after the device and introduced a remote mode of operation. Since non-working days did not apply to the financial sector, we worked as usual. The new boss turned out to be a very extravagant person: offered to parse Facebook, 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 holidays became the norm. It was stupid to quit: where will you get a job in a pandemic? But patience ran out after 2 months, when they announced that there would be no quarterly bonuses. The nuance is that when they agreed on a salary, at the time of the arrangement, 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, it was necessary to start looking for a new job. <h3>Chapter 6. Getting Started with Java</h3>One fine day in May, I received an invitation to an interview for a vacancy "Developer". An insurance company 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. You also need Git and so on. I scheduled an interview in two days, and I myself learned the basics of Git in my spare time. At the time of the interview, I was asked about Python, JS, Git, SQL. I answered everything, except for the concept of "method overloading", and I was invited to work in 2 weeks. It turned out that the company bought the system a long time ago. written in Java (front and back), with which you can create business processes without knowing the programming language (or rather, using the built-in Jelly programming language). Sounds good, but in fact, everything was perverted. 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 in 2021 is not very good. A pure HTML company website in 1999 is cool, 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). At the same time, 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 the 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 core of the program goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Trick #1: When you want to push code to a test bench, you need to create 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). At the same time, 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 the 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 core of the program goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Trick #1: When you want to push code to a test bench, you need to create 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). At the same time, 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 the 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 core of the program goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Trick #1: When you want to push code to a test bench, you need to create At the same time, 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 the 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 core of the program goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Trick #1: When you want to push code to a test bench, you need to create At the same time, 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 the 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 core of the program goes to the database and reads your code from there. Accordingly, you cannot fully debug your application. Trick #1: When you want to push code to a test bench, you need to create you cannot fully debug your application. Trick #1: When you want to push code to a test bench, you need to create you cannot fully debug your application. Trick #1: When you want to push code to a test bench, you need to createSQL script, which will contain your code. Unpleasant, but tolerable? Zest number 2: The database consists of more than 200 tables that have relationships with each other. So, you need to know which tables to throw your code into, and which entities to create in other tables. The output is a SQL script with a length of ~ 1000 lines. Now this is downright ugly. Beware legacy. In short, realizing that it's all about Java, I went to CodeGym (finally 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 are closed. October-March 2021. Levels 20-30 are closed. Now the fun begins: in March 2021, I began to look at vacancies in Java and realized that there are a lot of unfamiliar words. Some kind of Spring, SpringBoot, Hibernate, JUnit. Having bought video courses on a well-known site, I only touched Spring with the corner of my finger and thought that now I can and can do everything. After that, Grigory Kislin's TopJava course caught my eye. On his website, you can try to complete a test task, and if you can do it, you can take a course. In this course, you create a full-fledged web application and even host it on the Internet. For this money, you will be reviewed (viewing the code by a more experienced programmer), giving feedback and prompting in case of problems. I got to 3 homework and gave up. 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 in an extremely fragmented way. In my subjective opinion, this course is needed for already quite experienced developers who come from other similar languages. For 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 as a Java developer (with the desired salary of the middle + level), in which I indicate that I programmed in Java at my last job (I lied). On the same day, a response comes to the bank for the position of a Java developer. <h3>Chapter 7. Java Interviews and Sharpening</h3>So, what was the plan? I need to get a good salary, as I'm already used to living on a considerable income + loans. Therefore, junior positions are not suitable for me. You need to get middle. But who will take me without experience? The decision came by itself: in my work it is written that I worked as a developer for a year and another 4 years as an expert in the IT department at my previous job. So I'll say that year developed in Java. And if they ask about new products, I’ll say that the old Java (7) was there, it didn’t support anything. Before the first interview (remote) I was worried. There is no experience, very little knowledge, and I ask for a lot of money. I think: don't care, a negative experience is also an experience. I contacted via Skype and I was interviewed by two department heads. Which made me feel even more creepy. Questions began: OOP, HashMap device, streams, data structures, what is Spring, Hibernate, AOP. And if before Sping it was more or less tolerable, then it completely fell down on Spring. People ask me: how did you develop with Spring if you don’t really know it? Me: so copied, pasted, it works and thanks for that. This answer amused them. Then they asked about SQL, in which I am like a fish in water. Then there was Git and the question about rebase, cherry-pick (which I didn't know either) and finished with JS, since it was listed on my resume. There was also a complete failure, because they asked about OOP JS. According to the results of the interview, it became clear that knowledge is not comme il faut, and therefore I will not go for this vacancy. In the evening, hr writes that my candidacy has been approved and they are ready to call me. I choked on a McDonald's burger. I was delighted, but after 3 days hr said: they chose another candidate. For the first time in my practice, an offer was withdrawn. After the first interview in Java, I became more active: I took a course (and passed it completely!) in Git from Colt Steele on the well-known site for selling video courses. It turned my perception of Git upside down. Next, the (brilliant) course from Zaur Tregulov on Spring + Hibernate was completed. Learning scheme: I look like in a video, I do the same on my computer, but I call variables and classes differently, so as not to stupidly copy someone else's code. I throw all the developments on my Github (thus practicing Git). It was the middle of May and the calls from hr started. 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 was invited to the senior position. It is also worth mentioning a separate caste hr: those who confuse Java with JavaScript. Therefore, I wrote Middle Java developer in the title of my resume. <h3>Chapter 8. List of typical questions and how the interview works</h3>I began to go to social services 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 basket an object will fall into, what is a collision, in what data structure data is stored inside the HashMap, the standard size, how the number of baskets increases. 3. Stream - what types of operations, what is the difference between them, give an example from 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, real life examples. 9. Access modifiers in Java. 10. What is the difference between an abstract class and an interface. Can an interface be private? 11. Functional interfaces. 12. List all methods of Object and explain 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 about the Closeable interface. 15. Differences between Final, finally, finalize? 16. Overloading, overriding a method - the difference. 17. Why String was made immutable, tell about StringBuilder and StringBuffer. 18. What is O(1) time complexity, 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, deleting an element in each structure. 20. Primitive data types in Java. Why do you need each of them. 21. Types of errors. Checked and unchecked exceptions. 22. What is JVM, JRE, JDK? 23. What assemblers did you work with? Maven - build life cycle. 24. Spring - Ioc, Di definitions, bean lifecycle, context, @Bean, @Configuration, @Autowired, @Advice, @Aspect, @Service, @Repository annotations. 25. Generics - definition, what is the limit from below and from above? 26. Programming patterns - at least Singleton (willingness to tell why it is sometimes an anti-pattern) + Builder, Adapter, Factory, Decorator, Proxt. Desirable: 26. Testing - types of tests with which libraries (JUnit) worked. What is Mock, Stab, Spy? 27. Spring boot - why is it needed, online readiness to make a SpringBoot application. 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 count parameters/request body? How to send 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 - the ability to write a query: combine 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 work: hr drops the zoom link (Skype, Google Meeting). By a certain time you connect and there are from 1 to 3 people (technical expert, boss, hr). In especially stubborn cases up to 8 people. First, you tell about yourself, then the technical part, then the story about the vacancy and farewell (they say when you will be contacted or how the stages will be further). During parting, you can ask for feedback on knowledge. I asked like this: "can you tell me, during my answers, where did your hearing go wrong?". Many answer, but be prepared to be rejected. The interview assesses: 1. Your ability to express thoughts and knowledge of the Russian language (I know a case when a candidate was refused due to poor knowledge of the Russian language). 2. Previous experience (they may ask meticulously what you did at your last job). 3. An adequate reaction at the moment of pressure on you (there was one interview when people started talking disrespectfully: ignoring my answers, trying to inspire their positions, etc. I finished the interview 15 minutes after the start, and they: it was a stress interview! ) 4. The level of your knowledge. Here I will stop in more detail. Knowledge of definitions on a topic is only 10% of what is expected of you. You need to understand how it works (at least at the top level). Willingness to explain at what point in development you will choose one or another solution. This is much more important than the accuracy of your definition. I will analyze this thesis with two examples. The first example: at the interview I was asked about HashMap, and I gave the definition: “this is such 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, fast access occurs. The interviewer immediately asked to tell the internal structure of HashMap, at the same time he asked about hashCode and equals. And it will deepen until you are satisfied with the answer or you will not stall. 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 learned by heart. But as soon as it came to real life examples, problems began. at the interview I was asked about HashMap, and I gave the definition: “this is such 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, fast access occurs. The interviewer immediately asked to tell the internal structure of HashMap, at the same time he asked about hashCode and equals. And it will deepen until you are satisfied with the answer or you will not stall. 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 learned by heart. But as soon as it came to real life examples, problems began. at the interview I was asked about HashMap, and I gave the definition: “this is such 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, fast access occurs. The interviewer immediately asked to tell the internal structure of HashMap, at the same time he asked about hashCode and equals. And it will deepen until you are satisfied with the answer or you will not stall. 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 learned by heart. But as soon as it came to real life examples, problems began. which stores key and value bindings. Then the interviewer asked: what is the difference from TreeMap? Answer: the difference is that HashMap hashes the key, and due to hashing, fast access occurs. The interviewer immediately asked to tell the internal structure of HashMap, at the same time he asked about hashCode and equals. And it will deepen until you are satisfied with the answer or you will not stall. 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 learned by heart. But as soon as it came to real life examples, problems began. which stores key and value bindings. Then the interviewer asked: what is the difference from TreeMap? Answer: the difference is that HashMap hashes the key, and due to hashing, fast access occurs. The interviewer immediately asked to tell the internal structure of HashMap, at the same time he asked about hashCode and equals. And it will deepen until you are satisfied with the answer or you will not stall. 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 learned by heart. But as soon as it came to real life examples, problems began. The interviewer immediately asked to tell the internal structure of HashMap, at the same time he asked about hashCode and equals. And it will deepen until you are satisfied with the answer or you will not stall. 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 learned by heart. But as soon as it came to real life examples, problems began. The interviewer immediately asked to tell the internal structure of HashMap, at the same time he asked about hashCode and equals. And it will deepen until you are satisfied with the answer or you will not stall. 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 learned by heart. But as soon as it came to real life examples, problems began. Attention!If you don’t know, then you shouldn’t invent, but say this: I don’t know this topic, but I can assume that it works like this. Many tech experts get pissed off when someone spouts bullshit with the air of being knowledgeable. 5. The level of your enthusiasm during the discussion of the vacancy. You are expected to be interested and will ask questions about the vacancy (only not sucked from the finger). 6. Sometimes humor (only relevant) 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 common interests closed the interviewer's eyes to poor technical training (You're a normal guy, we'll train you). <h3>Chapter 9. Getting a job, baptism of fire</h3> Interviews were from late April to mid-July. From the first interviews I was ashamed, gradually the situation improved to an acceptable level. The study of frequent questions and feedback made itself felt. The first 25 interviews were unsuccessful. After that, moments of despair began. Feelings: what if they don’t hire me for such a salary? Suddenly, it started to shoot: in a week, three companies made offers. I chose a company whose specifics I knew, plus there was a good salary and the opportunity to work remotely. At the 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 start to get 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 got sick: a lot of modules inside one project, a lot of classes, tests, and so on. At this point, I was lost, but the second developer helped me, who pulled me into the loop. The bug was fixed in 10 minutes, comicalized 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, I was told: you will be doing integration with another system that is on OpenShift. It became really scary here: OpenShift is a whole cluster of technologies: Docker, Kubernetes, Linux and more. Cold sweat ran down his back: well, he worked as a Javist. Immediately after the meeting, I called the developer, who reassured me: the adapters for this system are written, and it is enough to import certain classes into my project, after which I can safely use the integration. It became fun again, until the moment the developer showed type integration: I saw more than 20 classes created for similar integration. Moreover, previously unknown annotations @Value, @Builder, @NoArgsConstructor, @Getter, @Sl4f were noticed - 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 classes, and nothing fit in my head at all. The most embarrassing moment was not knowing Intellij Idea: how to search globally for a project, code refactoring, and so on. Taking on the task, I realized why OOP is needed: for such a large amount of code, division into classes is necessary; 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 the errors (for example, extra spaces, variable names with capital letters, variable names that are too short). After defeating CheckStyle, I submitted my code for review to senior developers and fixed my jambs 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 is tested together), and everything worked there! Victory! The next task was to create a class that would allow you to hide data by key in json. For example: there is json {text:"CodeGym"} -> processing -> {text:"****Rush"}. There are two complications here: there can be nesting {text:{mytext:"CodeGym"}}, and what is more unpleasant - nesting inside an array: {text: [ {mytext: "CodeGym"}, {mytext: "CodeGym"} ] } (of course, you need to hide all text.mytext). The solution to this problem turned out to be quite complicated, but I did it! Here the second developer says: cover this development with tests. There was bewilderment in his eyes. This is how I got to know the JUnit library in combat. The essence of unit testing: you have input data, pass it to 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 does not crash with NullPointException, correctly hides data with any type of nesting. After the implementation of this task, I was given a new integration, the peculiarity of which was as follows: I had to export the Spring Bean from an external library. At this point, I became a regular customer of the Stack OverFlow site. Even the official Spring developer answered once. After implementing this integration, my trial period came to an end. The boss congratulated me on passing the probationary period, and I began to write this article.
Comments
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION