00 Preface Use Tests as Entry Points to Effectively Boost Your Java Skills

00 Preface - Use tests as entry points to effectively boost your Java skills #

Java is a long-standing programming language, and it is indisputable that Java is one of the most mainstream programming languages. There are over 12 million Java programmers worldwide, along with a vast number of devices and an omnipotent Java ecosystem.

From what I know, internet companies such as Alibaba, JD.com, Baidu, Tencent, Meituan, and Ctrip all prioritize Java as their primary programming language. Even in the latest field of cloud computing, Java remains the most used programming language on platforms like AWS and Google App Engine. Java is also among the top three on Microsoft Azure Cloud, albeit with a slight disadvantage. Therefore, in the interviews of these large companies, Java is usually the starting point to evaluate a candidate’s technical abilities.

For junior and mid-level Java engineers, solid knowledge of Java and computer science foundations, as well as proficiency in using mainstream open-source frameworks, are usually required. However, senior Java engineers or technical experts are often comprehensively tested on Java IO/NIO, concurrency, virtual machines, etc. They are not only expected to have a general understanding but also to have in-depth mastery of the underlying source code. Furthermore, they are expected to have further capabilities in distributed computing, security, performance, and other areas.

I have been working at Oracle for nearly 7 years, responsible for the organization of technology teams such as Beijing Java Core Libraries, Internationalization, and Distribution Services. I have interviewed Java developers ranging from junior to highly experienced. Due to the nature of the Java team’s tasks, I place great emphasis on the interviewee’s understanding of computer science fundamentals and programming languages. I don’t even require the interviewee to be proficient in Java. If they can master other languages like C/C++ in a systematic and in-depth manner, it’s also suitable for the requirements.

Throughout my years of work experience and interviews, I often understand that some interviewees do work diligently, but frankly speaking, their ability levels displayed are not sufficient to pass the interview. This is usually due to two reasons:

  • “Know the facts, but not the principles.” They have worked in the field for many years and developed many business applications, yet it seems that they haven’t thought about the logic behind various technical choices. To be honest, I’m not confident in assigning tasks with a certain depth to them. More importantly, I’m uncertain about the growth potential of their future technical abilities. The team is engaged in the core products of the company and works in the field of fundamental technology. We don’t need code that is merely “good enough” or “passable”; what we need is quality design and implementation that meets certain standards. I believe that many other technical teams have even more and higher requirements.
  • Fragmented knowledge, lacking coherence. In interviews, interviewees seem unable to provide a complete and clear description of the systems they have developed or the relevant technologies they have used. They may be immersed in their work or overly focused on solving particular implementation details, without looking up and examining these technologies as a whole. For example, some interviewees have some experience in concurrent programming but lack solid mastery of basic concurrent libraries. They seem to think that “search-engine-oriented programming” is enough when using it. In such cases, I don’t have confidence in the interviewee’s ability to efficiently solve complex problems or design complex systems.

Let’s not repeat the mistakes made by our predecessors!

Initially, when Geek Time invited me to write the “Java Core Technology Interview Guide” column, I was skeptical about its format and necessity. There are already plenty of classic books, and you can find so-called “interview guides” online, so why do they need me to “stick my nose in”?

However, as the conversation deepened, I gradually became convinced. I found that many interviewees are actually very hardworking, but they struggle to identify the core elements and key points of various technologies. The vastness of technical books makes it difficult for students with limited experience to find an efficient way to summarize their knowledge system.

Various “guides” focus more on questions, and most of the answers provided are limited to the point, and some answers are even debatable in terms of accuracy. They lack systematic analysis and explanations that extend beyond the immediate question. I launched this column on Geek Time to help more inexperienced or developers with limited experience in preparing for interviews. The goals of this column are to:

  • Minimize detours and maximize efficiency in preparation and learning with limited energy.
  • Provide a relatively complete Java development technology competency map while explaining knowledge points, to solidify the foundation.

Java interview questions come in all shapes and sizes. Some interviewers even approach them with a mindset of unraveling black magic, digging deep into the depths of the JVM. It seems that if you don’t explore the JVM source code or discuss computer instructions, you are not interested in learning. Opinions on this matter may vary. Based on my own experience, I have selected 36 questions from 5 main modules related to various aspects of Java development. For each question, I provide typical answers and detailed analysis.

The 5 modules are:

  • Java Basics: I will focus on the basic features and mechanisms of the Java language, helping you build a solid foundation in Java technology.
  • Java Advanced: I will cover areas such as concurrent programming and Java virtual machine to assist you in tackling the core aspects of Java interviews at top companies.
  • Java Application Development & Extension: From database programming to mainstream open-source frameworks and distributed development, I will help you master the various tools of Java development.
  • Java Security Basics: I will help you understand common application security issues and their solutions, enabling you to write secure code that meets industry standards.
  • Java Performance Basics: You will learn about relevant tools, methodologies, and fundamental practices related to performance.

Over the years, I have transitioned from working on business systems or product development to focusing on the Java platform itself. As a result, I have gained exposure to a wider range of core Java technologies. I believe that my sharing can provide some unique content, rather than simply repeating what others have said.

Times change, and many well-known problems have undergone fundamental changes in modern Java. In the field of technology, even if you plan to transition to technical management or other roles, having a solid technical foundation is still essential. My goal is to not only help you succeed in interviews but also further your professional development through this column.

A tall building starts from level ground. I hope that as a seasoned Java warrior, I can help you conquer Java interview topics one by one, focus on the core points of Java technology, and build your Java knowledge system.