The Complete Coding Interview Guide in Java

5 (1 reviews total)
By Anghel Leonard
    Advance your knowledge in tech with a Packt subscription

  • Instant online access to over 7,500+ books and videos
  • Constantly updated with 100+ new titles each month
  • Breadth and depth in over 1,000+ technologies
  1. Chapter 1: Where to Start and How to Prepare for the Interview

About this book

Java is one of the most sought-after programming languages in the job market, but cracking the coding interview in this challenging economy might not be easy. This comprehensive guide will help you to tackle various challenges faced in a coding job interview and avoid common interview mistakes, and will ultimately guide you toward landing your job as a Java developer.

This book contains two crucial elements of coding interviews - a brief section that will take you through non-technical interview questions, while the more comprehensive part covers over 200 coding interview problems along with their hands-on solutions. This book will help you to develop skills in data structures and algorithms, which technical interviewers look for in a candidate, by solving various problems based on these topics covering a wide range of concepts such as arrays, strings, maps, linked lists, sorting, and searching. You'll find out how to approach a coding interview problem in a structured way that produces faster results. Toward the final chapters, you'll learn to solve tricky questions about concurrency, functional programming, and system scalability.

By the end of this book, you'll have learned how to solve Java coding problems commonly used in interviews, and will have developed the confidence to secure your Java-centric dream job.

Publication date:
August 2020
Publisher
Packt
Pages
788
ISBN
9781839212062

 

Chapter 1: Where to Start and How to Prepare for the Interview

This chapter is a comprehensive guide that tackles the preparation process for a Java interview from the very start, to getting hired. More precisely, we want to highlight the main checkpoints that can ensure a smooth and successful career road ahead. Of course, at the time you read this book, you might find yourself at any of these checkpoints:

  • Start your interview preparation as early as possible
  • Get the right experience
  • Show your work to the world
  • Prepare your resume
  • Take the interview

By the end of this chapter, you’ll have a clear picture of how to achieve the preceding checkpoints depending on your current status. So, let’s start by covering the first checkpoint and take a look at the novice interview roadmap.

 

The novice interview roadmap

Let’s start from a fundamental truth that is absolutely necessary, but not sufficient, to become a successful developer: the best Java developers are passionate about their work, and, in time, true passions become professions. Over the long term, passion is priceless and it will make you stand out of the crowd of skilled but dispassionate people.

Since you bought this book, you want to invest some time and money in a Java software development career. Mainly, you want to become part of the amazing Java ecosystem! You already feel the power and the energy that comes from focusing on working with Java, therefore, even if you haven’t yet actively thought about it, you’ve already started to prepare yourself for a Java interview.

Most probably, you are a student or you’ve just got a bachelor’s degree in IT, computer science, or you’ve simply discovered your propensity for the Java language. Nevertheless, since you are here, you have a lot of questions and doubts about how to get the dream job in the Java ecosystem.

It is time to bake a plan for success! The following flowchart represents the interview roadmap for a student or Java novice who wants to be part of the Java ecosystem:

Figure 1.1 – Novice interview roadmap

Figure 1.1 – Novice interview roadmap

In this chapter, we will cover each item of the preceding diagram. Let’s get started with the first item, Know yourself.

 

Know yourself

Before searching for a job, it is important to know yourself. This means that you should know what kind of developer you are and what kind of job you want.

This is crucial to getting the right experience, evolving your package of skills, and finding the right employer. Most probably, you can cover a wide range of Java programming tasks, but do you find all of them equally engaging? Doing something that you don’t like for a short period of time is OK, but it will not work for the long term.

Ideally, in the long term, you must focus on what you like to do the most! This way, you maximize your chances of becoming a top Java developer. But, doing what you like the most should be considered in the context of what the IT market offers (in both the short term, and most importantly, the long term). Some Java technologies are widely covered by job offers, while others may require a lot of time to find a job or must make some really unpleasant trade-offs (for example, relocation). It is strongly advisable to periodically consult and participate (every vote counts) in the most relevant Java surveys conducted by websites such as blogs.oracle.com, snyk.io, jaxenter.com, codeburst.io, jetbrains.com, and dzone.com. Having a wide range of companies to choose from statistically maximizes the chances of finding the right company for you. This is half of the problem, while the other half is to prepare yourself to make sure that the company with the job you want will want you.

Now, let’s examine 10 questions that will help you to identify what kind of developer you plan to become. Look inside yourself and try to overlap your personality and skills in considering the following questions and explanations:

  1. Are you interested in developing user interfaces or the heavy business logic that is executed behind the scenes? Developing great user interfaces is an extremely important aspect of a graphical interface. After all, the graphical interface is what the end user sees and interacts with. It requires creativity, innovation, vision, and psychology (for example, developing multi-device interfaces is quite challenging). It requires knowledge of Java AWT, Swing, JavaFX, Vaadin, and so on. On the other hand, the business logic that is executed behind the scenes and answers to end user actions is the engine behind the interface, but, for the end user, most of the time it is a black box. The business logic requires strong coding skills and solid knowledge of algorithms, data structures, frameworks (such as Spring Boot, Jakarta EE, and Hibernate), databases, and so on. Most Java developers opt for coding the business logic behind the scenes (for desktop and web applications).
  2. What kind of applications do you find most engaging (desktop, mobile, web, or others)? Each type of application has specific challenges and dedicated suites of tools. Today, companies target as many consumers as possible, therefore, modern applications should be available for multi-platform devices. Most of all, you should be able to code in the knowledge that the application will be exposed on different devices and will interact with other systems.
  3. Are you especially interested in testing, debugging, and/or code review? Having strong skills in writing valuable tests, finding bugs, and reviewing the code are the most important skills for guaranteeing a high-quality final product. Of these three areas, we should focus on testing, as almost any Java developer job description requires the candidate to have strong skills in writing unit tests and integration tests (the most commonly preferred tools are JUnit, TestNG, Mockito, and Cucumber-JVM). Nevertheless, trying to find a dedicated Java tester job or Java code reviewer is quite challenging and is usually encountered in big companies (especially in companies that provide remote jobs, such as Upstack or Crossover). Most companies prefer pair code review and each Java developer should write meaningful tests that provide high coverage for the code that they wrote. So you have to be able do both: write astonishing code, and write the tests for that code.
  4. Are you interested in applications that interact with databases or do you try to avoid such applications? Most Java applications use a database (a relational database or a NoSQL database). A wide range of Java developer jobs will imperatively require you to have strong knowledge of coding against a database via Object Relational Mapping frameworks (such as Hibernate), JPA implementations (such as Hibernate JPA or Eclipse Link), or SQL-centric libraries (such as jOOQ). Most Java applications interact with a relational database such as MySQL, PostgreSQL, Oracle, or SQL Server. But NoSQL databases such as MongoDB, Redis, or Cassandra are also encountered in a significant number of applications. Trying to avoid developing applications that interact with a database may seriously limit the range of jobs on offer. If this is your case, then you should reconsider this aspect starting today.
  5. Do you have a predilection for code optimization and performance? Caring about the performance of your code is a highly appreciated skill. Such actions will catalog you as a perfectionist with great attention to detail. Having solutions that optimize the code and increase its performances will place you pretty quickly in the position of getting involved in designing and architecting the solutions of functional requirements. But at the interview (the code challenge stage), don’t focus on code optimizations and performance! Simply focus on delivering a working solution and, as much as possible, clean code.
  6. What is more appealing to you: a coding-focused job or being a software architect? At the beginning of your career as a Java developer, you will be focused on coding and taking implementation design decisions at code level. In time, some developers discover their abilities and interest in architecting large applications. This means that it’s time to evolve from a Java developer to a Java architect, or even a Java chief architect. While coding is still part of your job, as an architect you will wear different hats on the same day. You have to split your time between meetings, architecting, and coding. If you feel that you have the aptitude for designing and architecting different pieces of a project, then it is advisable to consider some training in software architecture as well. Moreover, during your coding-focused job, challenge yourself to see what solutions you can find and compare them with those implemented by the current architect of the application.
  7. Are you aiming for a small or a big company? Choosing between a small or a big company is a matter of trade-offs. Ideally, a big company (a brand) will give stability, a career path, and a good salary plan. But you may feel stifled by the bureaucracy, lack of communication and rivalry between departments, and a cold and rigid environment. In a small company, you have the chance to feel more intensely that you are part of the success and will get a nice, warm feeling of being part of a small community (even a family). However, small companies may fail fast and you might be fired in a year or two, most likely without any compensation package.
  8. Do you target a software company (working on a wide range of projects) or a certain industry (for example, the oil industry, medicine, the automobile industry, and so on)? A software company manages projects from a variety of fields (for example, a software company might develop a website for a Hollywood star, a financial application, and an airline traffic control application at the same time). From a developer’s perspective, this means that you need versatile thinking and to be capable of quickly adapting to understand the requirements of different business domains without diving into those domains. On the other hand, big industries (for example, the oil industry) prefer to create their own IT departments that develop and maintain applications specific to that company field. In such cases, you would most likely receive some training in the given company’s field as well. You will have the advantage of becoming an expert at developing applications specific to a certain domain.
  9. Do you prefer a remote job? In the past few years, a significant number of companies have decided to hire remote developers. Moreover, new companies such as Upwork, Remote|OK, X-Team, and Crossover are 100% remote companies recruiting only for remote positions. The advantage of working from any corner of the world with a flexible program is quite appealing. These companies offer jobs for junior, middle, and senior developers, and some of them (for example, Crossover) offer remote management positions as well. But, you have to be aware of some of the other aspects of this arrangement as well: it is possible that you will be monitored via webcam (for example, with snapshots every 10 minutes); you need to work in a completely remote team with members from different time zones (it may be challenging to participate in meetings at night, for example); you will have to be familiar with tools including JIRA, GitHub, Zoom, Slack, Meetup, and in-house marketplace platforms; you may face a lot of friction (tons of emails) and a lack of communication; you need to pay your taxes, and last but not least, you may need to achieve unreal metrics to the detriment of quality to maintain your position.
  10. Does management interest you? Commonly, reaching a managerial position is a goal that requires leadership skills. In other words, you should be able to take important decisions at both the technical and human levels. From this perspective, you need to avoid companies that offer a solid technical career path but don’t provide opportunities to get promoted to the ranks of management.

    Important note

    Knowing yourself is one of the hardest parts required in order to make the best decisions in life. Sometimes, asking the opinion of other people is the best way to eliminate your subjective view of yourself. Most of the time, asking your teachers, parents, and friends will help you to better understand what your skills are and where you fit the best. Making important decisions alone is risky.

Once you know yourself, it is time to get to know the market.

 

Know the market

Knowing what you want is great, but is not enough. As the next step, you should research what the market wants from you. The goal is to obtain the perfect cocktail of what you want and what the market offers.

Important note

Developing marketable skills is an important aspect of getting a job in the near future.

First, you must check which Java technologies have been most popular over the last few years and what the future trends look likely to be. Technologies that maintain relatively stable popularity over time are the most used in companies.

Take your time to read several surveys from the last 2-3 years from important websites such as blogs.oracle.com, snyk.io, jaxenter.com, codeburst.io, jetbrains.com, and dzone.com. Primarily, you can search on Google for java technologies survey 2019 or similar combinations of keywords. Also, don’t neglect the financial part, so make sure to search for java salaries survey 2019 as well.

You will find a variety of surveys that nicely summarize the most popular technologies, as you can see in the following two figures. The first one shows the popularity of application servers:

Figure 1.2 – The application servers that are used

Figure 1.2 – The application servers that are used

The following figure shows which frameworks developers prefer:

Figure 1.3 – The frameworks that developers prefer to use

Figure 1.3 – The frameworks that developers prefer to use

While reading, make a list and note down what Java technologies are the most popular and what technologies don’t deserve your attention at this moment. It will be a list similar to the following:

Figure 1.4 – Splitting technologies by popularity

Figure 1.4 – Splitting technologies by popularity

This way, you can quickly filter the technologies that are most required by the market. Learning popular technologies maximizes your chances of getting a job in the near future.

Further, take the pulse of the market toward the technologies that you added to the Popular column via the following means:

  • Social networks: A significant number of social networks contain posts about technologies and what’s trending in the IT industry. Some major players are LinkedIn, Stack Overflow, Twitter, Reddit, and Facebook.
  • Bookstores: Book publishers strive to satisfy the interest of the programming community by covering the most popular technologies. They carry out serious research campaigns for filtering the topics that deserve to be covered in their books. A new book or a significant number of books on a certain topic or technology is a good indicator of programming community interest in that topic. Nevertheless, pay attention to technologies that are suddenly going mainstream. Most of the time, such technologies are not adopted by companies immediately. It may take years until they are adopted, or they may remain in the shadows forever.
  • Courses and training: Besides colleges and universities, tons of websites strive to provide courses and training for popular and hot topics.
 

It’s all about getting the right experience

You know what you want and what the market offers. This is cool! Now it’s time to get the right experience! Without experience, there is no resume, and without a resume, there is no interview, therefore, this is a major and laborious step. The following subsections will help you to achieve two main goals:

  • Accumulate a lot of technical knowledge and skills.
  • Gain trust and visibility across the Java ecosystem.

Pay attention – these two goals won’t materialize overnight! It takes time and requires perseverance, but there is a clear and guaranteed result – you’ll become a top Java developer. So, let’s start something!

Start something

For a student or a recent graduate, it is pretty hard to decide where to start from in order to gain experience and write a resume. You are aware that you should start something, but you cannot decide what that something should be. Well, that something should be code. Before you have any formal work, get involved in school projects, internships, programming, volunteering work, and any kind of practical experience.

It’s time to shine online

It is mandatory to get online and show the world what you can do as early as possible (for example, from school). Companies and programming communities are looking forward to seeing how you grow online. But just before you jump in, ensure that you follow the next two golden rules:

  • It is very important to pay attention to the identity used to expose your work online. Don’t use dummy credentials, avatars, nicknames, emails, passwords, and so on. Most likely, the accounts that you will create now (on GitHub, Stack Overflow, LinkedIn, YouTube, Twitter, and so on) will be shared all over the internet and will make you famous. Always use your complete name (for example, Mark Janel, Joana Nimar), use a relevant photo of yourself for your profile (as in the following figure), and use your name in accounts (for example, @markjanel, joananimar) and in emails addresses (for example, [email protected]). It is more difficult for dummy names, emails, and nicknames to become associated with you and with your work:
Figure 1.5 – Using a relevant photo

Figure 1.5 – Using a relevant photo

  • Always accept criticism and be polite. Exposing your work online is going to attract critics. An extremely small percent of what you receive will be really malicious comments with no logical arguments. The best practice, in this case, is to ignore such comments. But most critics will be positive and constructive. Always answer to such comments with arguments and always be polite. Common sense is the most important skill! Be open and stay open to other opinions!

Do not get disappointed or frustrated. And never give up!

Contribute to open source projects

Contributing to open source projects is a supersonic approach for measuring your skills and quickly gaining experience and visibility to companies looking for candidates. Don’t underestimate yourself! Small contributions count as well. Even reading and understanding the code of an open source project is a great opportunity to gain coding experience and learn coding techniques.

A lot of open source projects encourage and support developers to contribute. For example, check out the Hibernate ORM open source project in the following screenshot:

Figure 1.6 – Contributing to an open source project

Figure 1.6 – Contributing to an open source project

You have the chance to add your footprint to the code that you will use later in your daily work! And it is also used by millions of developers. How cool is that!?

Start your own GitHub account

Besides contributing to open source projects, it is advisable to start your own GitHub account. Employers will evaluate the content of your GitHub profile before they meet you. Don’t neglect any aspect! Take your time and clean up your GitHub profile so it reflects your best code. Keep in mind that the worst kind of GitHub account is an empty account or an account that shows low activity on a long-term basis, as shown on the left in the following screenshot:

Figure 1.7 – GitHub contributions over four months

Figure 1.7 – GitHub contributions over four months

Demonstrate a preference for clean code and meaningful README.md files and avoid periods of low activity on a long-term basis, as shown in the previous screenshot.

Start your own Stack Overflow account

Stack Overflow is the next stop for companies that evaluate your work. Your questions and answers on Stack Overflow will appear in Google searches, therefore, you have to pay extra attention to what you post (questions and answers). As a rule of thumb, your questions may reveal your level of knowledge, therefore, don’t post simple questions, questions that have easy answers in the documentation, questions that sit behind trivial programming challenges, and so on. On the other hand, make sure to provide valuable answers and don’t repeat other people’s answers. Provide content that will bring you badges, not downvotes. Link your GitHub profile to your answers to provide complete solutions.

Start your own YouTube channel

Besides entertainment, YouTube is also a huge source of technical knowledge. On YouTube, you can post complete coding solutions that show people how to program and how to become better programmers. You can quickly increase your YouTube subscribers if you do the following:

  • Don’t go for long videos (stick to 10-20-minute lessons)!
  • Ensure that you have a good webcam and microphone. A good webcam has at least 1080p resolution, and a good microphone is the Snowball ICE; for recording use free or low-cost tools such as Free2X Webcam Recorder (free2x.com/webcam-recorder) and Loom (loom.com); Camtasia Studio is also awesome (techsmith.com/video-editor.html).
  • Demonstrate excellent English skills (English is used most commonly on YouTube).
  • Introduce yourself (but do it quickly).
  • Be enthusiastic (show people that you enjoy your work, but don’t exaggerate).
  • Be practical (people love live coding).
  • Take the chance to prove your speaking skills (this opens you the door to technical conferences).
  • Promote your work (add links and hints for more videos, source code, and so on).
  • Respond to people’s feedback/questions (don’t ignore what people say about your video).
  • Accept criticism and be polite.

Link your GitHub and Stack Overflow accounts to your YouTube videos to get more exposure and followers.

Start your technical blog

Your awesome work on GitHub, Stack Overflow, and YouTube can easily be promoted in stories on a technical blog. Write about programming topics, especially about programming problems that you solved, and write tutorials, tips and tricks, and so on. Constant posting and high-quality content will increase your traffic and will index your blog on search engines. Someday, this valuable content can be exploited to write an astonishing book or develop a great video on Udemy (udemy.com) or PluralSight (learn.pluralsight.com).

There are a lot of blogging platforms such as Blogger (blogger.com), WordPress (wordpress.org), and Medium (medium.com). Choose the one that you prefer and get started.

Write articles and attract huge traffic and/or get paid

If you want to post technical articles and earn money or attract a huge amount of traffic to your work, then a personal blog will not be very useful, at least not for a significant amount of time (1-2 years). But you can write technical articles for websites that register huge amounts of daily traffic themselves. For example, DZone (dzone.com) is a great technical platform where you can write for free or you can join different programs where you are paid for your work. By simply creating a free DZone account, you can immediately start publishing technical articles via their online editor. In 1-5 days, they will review your work and publish it online. Almost instantly, thousands of people will read your articles. Besides DZone, other great technical platforms will pay you to write for them (commonly between $10-$150 per article depending on length, topic, internal policies, and so on). Some of these platforms include InformIT (informit.com), InfoQ (infoq.com), Mkyong (mkyong.com), developer.com (developer.com), Java Code Geeks (javacodegeeks.com), GeeksForGeeks (geeksforgeeks.org), and SitePoint (sitepoint.com).

Promote yourself and your work (portfolio)

It’s important to work, but it is also important to show people what you’ve done and get their feedback.

Important note

Managing your online profile is very important. Recruiters use online profiles to find desirable candidates, to get to know you better, and to prepare in-depth or custom interview questions.

Along with GitHub, Stack Overflow, and so on, recruiters will search your name on Google and will check your personal website and social network profiles.

Personal websites

A personal website (or portfolio) is a website that shows off your work. Simply add the screenshots of applications that you’ve made/contributed to and give brief descriptions of your work. Explain your role in each project and provide a link to the project. Pay attention to not expose private and proprietary company information. You can quickly get inspiration from the internet (for example, codeburst.io/10-awesome-web-developer-portfolios-d266b32e6154)

For building your personal website, you can rely on free or low-cost website builders such as Google Sites (sites.google.com) and Wix (wix.com).

Social network profiles

One of the most important social networks is Twitter. On Twitter, you can promote your work in front of the best Java developers in the world. Right from day 1, search and follow the best Java developers, and soon they will follow you too! As a tip, start to follow as many Java Champions (an exclusive community of the best Java developers in the world) you can find. There is a huge and valuable community of Java developers on Twitter. Get to know them as fast as you can!

Other social networks such as Facebook and Instagram are also scanned by recruiters. Pay attention to the content of your posts. Obviously, radicalism, racism, fanaticism, trivial or sexual content, political content, slogans and incitement to violence, defamatory and offensive content, and so on will cause the recruiter to take a step back.

CodersRank matters

CodersRank (codersrank.io/) is a platform that harvests information about your work (for example, it harvests information from GitHub, Stack Overflow, Bitbucket, HakerRank, and so on) and tries to rank you against millions of other developers from around the world. In the following screenshot, you can see a developer’s profile page:

Figure 1.8 – CodersRank profile summary

Figure 1.8 – CodersRank profile summary

This is another important barometer for recruiters.

Learn, code, learn, code...

Once you become a developer, you must follow the Learn->Code practice in order to get on top and stay there. Never stop learning and never stop coding! As a rule of thumb, the Learn->Code practice can be applied via the learning by example or teaching is my way of learning approaches, or any other approach that fits you best.

How about certifications?

Once you access education.oracle.com/certification, you can see that Oracle provides a suite of Java certifications. While there’s nothing wrong with getting certifications (from Oracle or an other party), they are not required in job descriptions. Taking these certifications requires a significant amount of money and time, and most of the time they don’t pay off the effort. You can use this time more wisely and get involved in projects (side projects, school projects, open source projects, and so on). This is a better way to impress employers. So, certificates have limited value and it takes a lot of resources to obtain them. Moreover, certificates are perishable. Think how useful it is today, in 2020, to be Java 6 certified, or in 2030 to be Java 12 certified!

But if you really want to consider certifications, then here are the top certifications on offer (for more information, search on Google for them since links can break over time):

  • OCAJP (Oracle Certified associate, Java Programmer 1) and OCPJP (Oracle Certified Professional, Java Programmer 2)
  • Spring Professional Certification
  • OCEWCD (Oracle Certified Expert, Java EE 6 Web Component Developer)
  • Apache Spark Cert HDPCD (HDP Certified Developer)
  • Professional Scrum Master
  • Project Management (PMP)
  • AWS Solutions Architect
  • Oracle Certified Master

Having experience and visibility (fans) all over the internet is a tremendous plus in your career. But you still need a useful resume for applying to Java jobs. So, it’s time to write your resume.

 

Time to write your resume

Writing an impressive resume is not easy. There are tons of platforms that promise you that your resume will be amazing if you let them do it for you. There are also tons of resume templates, most of them quite complex and cumbersome. On the other hand, a resume is something personal, and it is better to do it yourself. Bearing the following points in mind will be enough to produce an appealing resume for recruiters. Let’s see these points and how to approach them.

What resume screeners are looking for

First, resume screeners want to find out whether you are a good coder and you are smart. Second, they want to find out if you are a good fit for a certain available position (they check your experience against certain technologies and tools required for that position).

Strive to highlight that you are a good coder and are intelligent. This means being as technical as possible in a concentrated form. Pay attention: too many words dilute the essence of your resume and lead to loss of focus. Be technical, clear, and concise.

How long the resume should be

To answer how long a resume should be, you must answer another question: how long do you think a recruiter spends reading a resume? Most likely, around 10-20 seconds. In other words, recruiters read between the lines, trying to quickly identify what interests them.

In general, a resume should not be longer than a page. If you have 10+ year's experience, then you can go with 2 pages.

You may think that it is impossible to condense your vast experience in 1-2 pages, but this is not true. First, prioritize content, and second, add this content until you cover 1-2 pages. Skip the remaining content. Don’t worry that the recruiters will not know everything you’ve done! They will be impressed by your resume highlights and will be happy to discover the rest of your experience in the interview.

Write a resume that fits on one page.

If you have 10+ years of experience, then consider two pages. Keep in mind that some recruiters may skip long resumes without reading a single line. They want to find the most impressive items right away. Adding less important items and/or too many words will distract the recruiter and makes them waste time.

How to list your employment history

If you have a short employment history (2-4 roles), then add all of it to the resume. Don’t go for your complete employment history if you have a long list of roles (4+ roles). Just choose 4 roles that are the most impressive (roles in important companies, leading roles, roles where you have achieved great results and/or made significant contributions).

For each role, follow the Achievement->Action->Effect model. Always start with the achievement! This will act as a magnet for the recruiter. Once they read the achievement, you’ve got their attention to continuing reading.

For example, let’s imagine that you worked at the company Foo and you’ve managed to increase the performance of the connection pool by 30% by tuning its parameters. Now the application can accommodate a transaction throughput of 15% extra. Add this achievement in the resume in a single statement as follows:

Increased the connection pool performance by 30% by tuning its parameters, leading to a transaction throughput boost of 15%.

List the most relevant roles via Achievement->Action->Effect statements. Always try to measure the benefits you created. Don’t say, I reduced the memory footprint by compressing ..., and say, I reduced the memory footprint by 5% by compressing ....

List the most relevant projects (top five)

Some recruiters prefer to jump in directly into the My Projects section of your resume. They follow the No Fluff, Just Stuff statement. You don’t have to list all your projects! Make a top five and add only those. Don’t add all five from the same category. Choose one or two independent projects, one or two open source contributions, and so on. An independent project with a high GitHub star rating is what will really impress recruiters.

List the top projects with their relevant details. This is the right place to lose the modesty and do your best to impress.

Nominate your technical skills

The Technical Skills section is mandatory. Here, you have to list the programming languages, software, and tools you know. It doesn’t have to be like a nomenclature, but it doesn’t have to be a short and slim section either. It has to be relevant and in harmony with the listed projects. The following list mentions the main criteria to follow in writing the Technical Skills section:

  • Don’t list all Java flavors: Don’t add a list such as Spring MVC, Spring Data, Spring Data REST, Spring Security, and so on. Just say Spring. Or, if you are Java EE guy, then don’t add a list of JPA, EJB, JSF, JAX-RX, JSON-B, JSON-P, JASPIC, and so on. Just say Java EE, Jakarta EE. Or, if you see them listed that way in the job description, then you can add them between brackets. For example: Spring (MVC, Data including Data REST, Security) or Java EE (JPA, EJB, JSF, JAX-RX, JSON-B, JSON-B, JASPIC).
  • Do not add software versions: Avoid things like Java 8, Spring Boot 2, or Hibernate 5. If such details are necessary, then the interviewer will ask you about them.
  • Don’t list utility technologies: Avoid listing utility libraries that are commonly used in projects. For example, don’t add Apache Commons, Google Guava, Eclipse Collections, and so on. It is possible that recruiters have not heard of them. Or, if they have, they will smile ironically.
  • Don’t list the technologies that you have only lightly touched: It’s quite risky to list technologies that you’ve used only rarely and/or superficially. At the interview, you may get asked questions about them that will put you in a difficult situation.
  • For each technology, add your experience: For example, write Java (expert), Spring Boot (advanced), Jakarta EE (proficient), Hibernate (expert).
  • Do not measure your experience with a technology in years: Most of the time, it’s not relevant. This metric doesn’t say much to the recruiter. Your experience is shown by your projects.
  • Avoid common technologies: Don’t list operating systems, Microsoft Office, Gmail, Slack, and so on. Listing such things is just noise for the recruiter.
  • Double-check your English: A recruiter can throw away a resume if it has typos. If you are a non-native English speaker, then find a native English speaker to proofread your resume.
  • Don’t list a single programming language: Ideally, you should list two to three programming languages (for example, Java (expert), C++ (medium), Python (prior experience)), but don’t say that you are an expert in all of them. Nobody will believe you! On the other hand, a single programming language can be interpreted as meaning that you are not open to learning new technologies.
  • Split technologies into categories: Don’t add the technologies as a long, comma-separated list. For example, avoid something like Java, Ruby, C++, Java EE, Spring Boot, Hibernate, JMeter, JUnit, MySQL, PostgreSQL, AWS, Ocean, and Vue.js. Split them into categories and sort them by experience, as in the following example:

    a. Programming languages: Java (expert), Ruby (intermediate), and C++ (beginner)

    b. Frameworks: Java EE (expert), Spring Boot (advanced)

    c. Object Relation Mapping (ORM): Hibernate (expert)

    d. Testing: JMeter (expert), JUnit (advanced)

    e. Databases: MySQL (expert), PostgreSQL (intermediate)

    f. Cloud: AWS (expert), Ocean (beginner)

    g. JavaScript frameworks: Vue.js (intermediate)

LinkedIn resume

Most likely, your LinkedIn profile will be the first stop for recruiters. Moreover, a significant number of e-job platforms require your LinkedIn account whenever you try to apply for a job. There are even cases where this account is mandatory.

LinkedIn is a social network dedicated to tracking professional connections. Essentially, LinkedIn is an online resume on steroids. On LinkedIn, you can create job alerts, and colleagues, customers, and friends can endorse you or your work, which can be quite valuable.

Important note

Pay attention to keeping your LinkedIn resume in sync with your paper resume. Also, pay attention if you are looking for a job via LinkedIn since all your contacts receive notifications about your updates. These contacts include people at your current company, and most likely, you don’t want them to know you’re looking for a new job. The solution is to disable these notifications before you make your updates.

Now, we can discuss the job application process.

 

The job application process

Technical companies prefer multi-step interviews. But, before getting invited to an interview, you have to find companies that are hiring, apply for their jobs, and then finally meet them.

Finding companies that are hiring

Surveys from the past few years (2017+) estimate that 70%-85% of all jobs are filled via networking (linkedin.com/pulse/new-survey-reveals-85-all-jobs-filled-via-networking-lou-adler/). Technical jobs (especially in the IT field) represent the leading segment that takes advantage of networking.

In almost any country, there are several e-jobs platforms. Let’s call them local e-jobs platforms. Commonly, the local e-jobs platforms list job offers from companies active in that country, or companies that recruit globally.

Worldwide, we have global e-jobs platforms. These platforms include several major players (all these websites allow you to upload your resume or create one online):

  • LinkedIn (linkedin.com): With more than 610 million users covering more than 200 countries worldwide, this is the world’s largest professional network and social recruiting platform.
  • Indeed (indeed.com): This is a leading job site with millions of jobs harvested from thousands of websites.
  • CareerBuilder (careerbuilder.com): This is another huge platform that posts tons of jobs from all around the globe.
  • Stack Overflow (stackoverflow.com/jobs): This is the largest, most trusted online community for developers to learn, share their programming knowledge, and build their careers.
  • FlexJobs (flexjobs.com) and Upwork (upwork.com): These are platforms dedicated to freelancers that offer premium, flexible remote jobs.

Other platforms that provide services useful for finding a job include the following:

  • Dice (dice.com): This is the leading career destination for tech experts at every stage of their careers.
  • Glassdoor (glassdoor.com): This is a complex platform including company-specific ratings and reviews.

In addition to these platforms, there are many others that you will discover by yourself.

Submitting the resume

Once you’ve found the companies you want to apply to, it’s time to submit your resume.

First, look at the company’s website. This can help you to find out the following:

  • See if you can apply directly via the company website (by bypassing the placement agency, you can speed up the process and the company can hire you directly without paying commission to the placement agency).
  • You can register in the company database to be contacted whenever a suitable position is opened.
  • You have the chance to find out more about the company history, vision, projects, culture, and so on.
  • You can find out contacts of relevant people at the company (for example, you can find a phone number for details and support).

Second, double-check your resume and online profile. Most likely, if your resume impresses the recruiter, they will search your name on Google and will inspect your networking activity. From technical content to social media, everything will be scanned before sending you an interview offer.

Third, don’t send the exact same resume to all companies! For each company, make adjustments to the resume so it is as relevant to the job description as possible.

 

I got an interview! Now what?

If you followed the roadmap so far, then it is just a matter of days until you will receive an e-mail or a phone call to invite you to an interview. Oh, wait... you are saying that you’ve already got an interview? Cool! It’s time to prepare yourself!

The phone screening stage

Most IT companies prefer to start the multi-step interview process with a phone screen. A phone screen is usually accomplished via Skype, Zoom, or Meetup (or similar platforms), and you’ll need to share your webcam. A microphone and a set of headphones are needed as well. Phone screens are very popular if you opt for a remote position, but lately, they are used for all kinds of positions.

Commonly, there are two approaches used by companies:

  • Phone screen with a human resources or placement agency person: This is an optional, non-technical interview of 15-30 minutes meant to detail the offer terms, expose your personality, concerns, both your and their expectations, and so on. This can take place before or after the technical phone screen.
  • Technical phone screen first: Some companies will invite you directly to a technical phone screen. In such cases, you can expect several technical questions, maybe a quiz, and one or more coding challenge sessions (tackling coding challenges is the main focus of this book). If you pass the technical phone screen, then, most probably, a non-technical one will follow.

Going to in-person interviews

Unless you opt for a remote position, the next step will consist of a face-to-face interview. There are cases when there is no phone screen, and this is the first step of the interview. In such cases, you may be interviewed by HR people, followed by a technical interview. But, if you had a phone screen, then you may or may not be contacted. This depends on how the company evaluates the phone screen. If they decide to not proceed with the next stage of the interview, then it is possible you will receive some feedback covering what was good and what was less good about your phone screen performance. Don’t ignore the feedback, read it carefully and in an objective manner. It might help you to avoid repeating the same mistakes. Speaking about mistakes...

Avoiding common mistakes

Pay attention to the following common mistakes that may sit behind the failure of an interview:

  • Ignoring the power of information: There are cases where after failing an interview, we meet a friend to tell them how it went. At that moment, your friend may say: My friend, I know a person who had a successful interview at this company 2 months ago! Why you did not tell me before? I’m sure he could have given you some insights! Obviously, it’s too late to do that now! Avoid such cases and try to obtain as much information as possible. See if you or your friends have contacts in the company, ask on social media, and so on. This way it’s possible to obtain extremely useful information.
  • Lacking clarity and coherence in answers: Your answers should be technical, crystal clear, meaningful, expressive, and always on topic. Answer the questions thoughtfully. Stammering, incomplete answers, interjections, and so on are not appreciated by interviewers.
  • Considering that image doesn’t matter: Don’t ignore your image! Dress professionally, go to the barbershop, and smell nice! All these aspects are part of the first impression. If you look sloppy, then maybe your code looks the same. If you dress professionally, then the interviewers will treat you as if you’re a cut above the rest. However, dressing professionally doesn’t mean you should be opulent.
  • Not selling yourself well: The interviewer must see your value. Nobody can communicate your value to them better than you can. Tell them about a problem that you had (at a previous company, in a certain project, and so on) and explain how you solved it with your team or independently. Employers want people who are excellent team players but are capable of working independently as well. Follow the Situation|Action|Result (SAR) approach. Start by describing the situation. Continue by explaining the actions you took, and finally, describe the result.
  • Not practicing coding challenges: At some point, you will be scheduled for at least one coding challenge. Most of the time, general coding skills are not enough! These challenges are specific to interviews and you have to practice them before the interview. As a rule of thumb, solving coding challenges (problems) follows the Approach->Break down->Craft solution pattern. Obviously, you cannot memorize solutions, therefore you need to practice as much as possible. Later in this book, we will discuss the best approaches for solving coding challenges.

Once the interview is complete, it’s time to wait for the response. Most companies will tell you how much time they need to provide a final answer and will commonly provide an answer representing the offer, rejection, next interview step, or just the status of your application. Keep your fingers crossed!

 

Summary

This chapter summarized the best practices that should be followed to obtain a job in the Java ecosystem. We talked about choosing a proper job and our eligibility, getting experience, working on resumes, and so on. Most of this advice was addressed to students or people who have just graduated. Of course, do not consider these pieces of advice as an exhaustive list or a list that should be applied integrally. These practices will help you pick up the fruits that you consider appealing and allow you to add your own touch to the process.

Next, let’s see how big companies conduct their interviews.

About the Author

  • Anghel Leonard

    Anghel Leonard is a chief technology strategist with more than 20 years’ experience in the Java ecosystem. In his daily work, he is focused on architecting and developing Java-distributed applications that empower robust architectures, clean code, and high performance. He is also passionate about coaching, mentoring, and technical leadership.

    Browse publications by this author

Latest Reviews

(1 reviews total)
Best book for a beginner to intermediate Java Coding Interviews

Recommended For You

The Complete Coding Interview Guide in Java
Unlock this book and the full library for $5 a month*
Start now